Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

Рекомендательные системы

Slide 3

Slide 3 text

Рекомендации — проблема. Рекомендательные системы (РС) — программы, которые пытаются предсказать, какие объекты будут интересны пользователю. Примеры: ● Товары (Amazon.com) ● Фильмы (Netflix) ● Музыка (Last.fm) ● etc

Slide 4

Slide 4 text

Актуальность ● Возрастает сложность выбора ● Возрастает количество информации ● Существует спрос (Netflix, Last.fm) ● Мало доступной информации о РС ● Нет единого стандарта, платформы РС ● Интерес Google, IBM, Microsoft, Nokia, Oracle ● Ограниченные возможности РС

Slide 5

Slide 5 text

2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 0 100 200 300 400 500 600 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 0 500 1000 1500 2000 2500 3000 3500 4000 4500 5000

Slide 6

Slide 6 text

Основные шаги при рекомендации Data Предварительная обработка (похожесть, выборки, размерность) Анализ (классификация, кластеризация) Представление

Slide 7

Slide 7 text

Типы РС ● Основанные на содержании (content-based) ● Коллаборативные ● Основанные на знаниях (knowledge-based) ● Гибрибные

Slide 8

Slide 8 text

Сontent-based RS ● Рекомендуют, то что понравилось раньше Плюсы ● Не зависит от других пользователей ● Прозрачность ● Простота добавления новых объектов Минусы: ● Ограниченные возможности анализатора содержания ● Рекомендации новых областей ● Сложности при новых пользователях

Slide 9

Slide 9 text

Объекты Профиль Анализатор Объектов Анализатор профиля Фильтр Рекомендации Модель Представление

Slide 10

Slide 10 text

Коллаборативные РС ● Рекомендуют, то что понравилось «соседям» Плюсы: ● Простота алгоритмов ● Простота объяснения ● Стабильность Минусы: ● Производительность ● Черный ящик ● Холодный старт

Slide 11

Slide 11 text

Пользователи Профиль Анализатор «Соседи» Рекомендации

Slide 12

Slide 12 text

Knowledge-based RS ● Основывается на дополнительной информации об объектах Плюсы: ● Нет холодного старта Минусы: ● Дополнительная информация

Slide 13

Slide 13 text

Гибридные РС ● Монолитные ● Параллельные rec(u,i) = a*rec1 (u,i) + b*rec2 (u,i) ● Последовательные РС РС1 РС2 РС1 РС2

Slide 14

Slide 14 text

Методы оценки РС ● Offline проверка ● Пользовательская проверка ● Online проверка

Slide 15

Slide 15 text

Критерии оценки РС ● Точность ● Ограничение(количество инф/точность) ● Доверие ● Неожиданность ● Разнообразие ● Устойчивость к атакам ● Приватность ● Адаптивность ● Масштабируемость

Slide 16

Slide 16 text

Оценка точности РС ● Root Mean Squared Error (RMSE) ● Mean Absolute Error (MAE)

Slide 17

Slide 17 text

Netflix Prise ● 2006 — 2009 ● 1 M$ ● RMSE 0.95 — 0.85, 10% ● 100 M оценок, 500 К пользователей, 17 К фильмов ● Training set (99,072,112 ratings) ● Qualifying set (2,817,131 ratings)

Slide 18

Slide 18 text

Мои тестовые данные ● 30к случайных пользователей из 200к ● 3М оценок из 30М ● Для каждого пользователя: ● Среднее значение 1.53/1.09 ● Больше баллов больше rmse (N — 6) оценок Обучающая выборка 6 оценок Проверяющая Время, t

Slide 19

Slide 19 text

User-based коллаборативная РС Метрики сходства (similarity metrics): sim = f( u1, u2) ● Корреляция Пирсона ● Косинусная метрика ● Моя - sim = cross_count / euclid

Slide 20

Slide 20 text

Результат пирсон косинусная моя обычный 1.62/1.11 1.59/1.09 1.34/1.01 нормализация 1.50/1.05 1.49/1.06 1.38/1.01 с весами 1.50/1.05 1.49/1.06 1.38/1.01

Slide 21

Slide 21 text

Item-based коллаборативная РС ● Результаты пирсон косинусная моя обычный 1.43/1.03 нормализация 1.36/1.01 1.35/1.00 1.34/1.00

Slide 22

Slide 22 text

SVD(Singular value decomposition)

Slide 23

Slide 23 text

Сводная таблица алгоритм rmse/mae svd 1.29/0.98 item 1.34/1.00 user 1.34/1.01 genres+avg 1.40/1.04 avg 1.53/1.09

Slide 24

Slide 24 text

user_basis_array = init_array(users_count) item_basis_array = init_array(items_count) user_p_array = init_2d_array(users_count, factors) item_q_array = init_2d_array(items_count, factors) rate = 0.01 regularization = 0.1 mean_score = 7 def get_predict(row, col): predict_score_basis = mean_score + item_basis_array[row] + user_basis_array[col] svd_predict = dot(item_q_array[row], user_p_array[col]) return predict_score_basis + svd_predict def get_error(row, col, real_score): predict_score = get_predict(row, col) return real_score - predict_score data = [] columns = [] rows = []

Slide 25

Slide 25 text

while curent_error < (last_error - 0.001): epoch_error = 0 for i in range(0,data_len): score = data[i] user_index = columns[i] item_index = rows[i] error = get_error(item_index, user_index, score) bu = user_basis_array[user_index] user_basis_array[user_index] = bu + rate*(error - regularization*bu) bi = item_basis_array[item_index] item_basis_array[item_index] = bi + rate*(error - regularization*bi) pu = user_p_array[user_index] qi = item_q_array[item_index] for f in range(0,factors_len): pu_f = pu[f] qi_f = qi[f] user_p_array[user_index][f] = pu_f + rate*(error*qi_f - regularization*pu_f) item_q_array[item_index][f] = qi_f + rate*(error*pu_f - regularization*qi_f) epoch_error += error*error last_error = curent_error curent_error = sqrt( epoch_error/data_len)

Slide 26

Slide 26 text

Еще ● Google Prediction API ● MyMediaLib ● Женщины (1.23 — 1.32) ● Выводы

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

Вопросы?