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

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

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

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

Moscow Python Meetup

January 25, 2013
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

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

    View full-size slide

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

    Товары (Amazon.com)

    Фильмы (Netflix)

    Музыка (Last.fm)

    etc

    View full-size slide

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

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

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

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

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

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

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

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

    View full-size slide

  4. 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 full-size slide

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

    View full-size slide

  6. Типы РС

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

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

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

    Гибрибные

    View full-size slide

  7. Сontent-based RS

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

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

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

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

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

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

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

    View full-size slide

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

    View full-size slide

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

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

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

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

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

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

    Черный ящик

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

    View full-size slide

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

    View full-size slide

  11. Knowledge-based RS

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

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

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

    View full-size slide

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

    Монолитные

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

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

    View full-size slide

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

    Offline проверка

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

    Online проверка

    View full-size slide

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

    Точность

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

    Доверие

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

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

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

    Приватность

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

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

    View full-size slide

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

    Root Mean Squared Error (RMSE)

    Mean Absolute Error (MAE)

    View full-size slide

  16. 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 full-size slide

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

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

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

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

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

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

    View full-size slide

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

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

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

    Моя - sim = cross_count / euclid

    View full-size slide

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

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

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

    View full-size slide

  21. SVD(Singular value decomposition)

    View full-size slide

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

  23. 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 full-size slide

  24. 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 full-size slide

  25. Еще

    Google Prediction API

    MyMediaLib

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

    Выводы

    View full-size slide

  26. Вопросы?

    View full-size slide