Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Рекомендательные системы: классификация и алгоритмы

Рекомендательные системы: классификация и алгоритмы

Артем Безукладичный
В докладе рассматриваются основные типы рекомендательных систем, шаги при обработке данных и способы проверки качества получаемых рекомендаций. Более подробно будут представлены алгоритмы коллаборативной фильтрации и результаты их сравнения.

Moscow Python Meetup
PRO

January 25, 2013
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. View Slide

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

    View Slide

  3. Рекомендации — проблема.
    Рекомендательные системы (РС) —
    программы, которые пытаются предсказать,
    какие объекты будут интересны
    пользователю.
    Примеры:

    Товары (Amazon.com)

    Фильмы (Netflix)

    Музыка (Last.fm)

    etc

    View Slide

  4. Актуальность

    Возрастает сложность выбора

    Возрастает количество информации

    Существует спрос (Netflix, Last.fm)

    Мало доступной информации о РС

    Нет единого стандарта, платформы РС

    Интерес Google, IBM, Microsoft, Nokia,
    Oracle

    Ограниченные возможности РС

    View Slide

  5. 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

    View Slide

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

    View Slide

  7. Типы РС

    Основанные на содержании (content-based)

    Коллаборативные

    Основанные на знаниях (knowledge-based)

    Гибрибные

    View Slide

  8. Сontent-based RS

    Рекомендуют, то что понравилось раньше
    Плюсы

    Не зависит от других пользователей

    Прозрачность

    Простота добавления новых объектов
    Минусы:

    Ограниченные возможности анализатора
    содержания

    Рекомендации новых областей

    Сложности при новых пользователях

    View Slide

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

    View Slide

  10. Коллаборативные РС

    Рекомендуют, то что понравилось
    «соседям»
    Плюсы:

    Простота алгоритмов

    Простота объяснения

    Стабильность
    Минусы:

    Производительность

    Черный ящик

    Холодный старт

    View Slide

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

    View Slide

  12. Knowledge-based RS

    Основывается на дополнительной
    информации об объектах
    Плюсы:

    Нет холодного старта
    Минусы:

    Дополнительная информация

    View Slide

  13. Гибридные РС

    Монолитные

    Параллельные rec(u,i) = a*rec1
    (u,i) + b*rec2
    (u,i)

    Последовательные
    РС
    РС1
    РС2
    РС1 РС2

    View Slide

  14. Методы оценки РС

    Offline проверка

    Пользовательская проверка

    Online проверка

    View Slide

  15. Критерии оценки РС

    Точность

    Ограничение(количество инф/точность)

    Доверие

    Неожиданность

    Разнообразие

    Устойчивость к атакам

    Приватность

    Адаптивность

    Масштабируемость

    View Slide

  16. Оценка точности РС

    Root Mean Squared Error (RMSE)

    Mean Absolute Error (MAE)

    View Slide

  17. 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)

    View Slide

  18. Мои тестовые данные

    30к случайных пользователей из 200к

    3М оценок из 30М

    Для каждого пользователя:

    Среднее значение 1.53/1.09

    Больше баллов больше rmse
    (N — 6) оценок
    Обучающая выборка
    6 оценок
    Проверяющая
    Время, t

    View Slide

  19. User-based коллаборативная РС
    Метрики сходства (similarity metrics):
    sim = f( u1, u2)

    Корреляция Пирсона

    Косинусная метрика

    Моя - sim = cross_count / euclid

    View Slide

  20. Результат
    пирсон косинусная моя
    обычный 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

    View Slide

  21. Item-based коллаборативная РС

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

    View Slide

  22. SVD(Singular value decomposition)

    View Slide

  23. Сводная таблица
    алгоритм 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

    View Slide

  24. 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 = []

    View Slide

  25. 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)

    View Slide

  26. Еще

    Google Prediction API

    MyMediaLib

    Женщины (1.23 — 1.32)

    Выводы

    View Slide

  27. View Slide

  28. Вопросы?

    View Slide