Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

2 bdw.key

1.565 visualizaciones

Publicado el

Big Data

Publicado en: Datos y análisis
  • Sé el primero en comentar

2 bdw.key

  1. 1. Товарные рекомендации 
 в интернет-магазине: 
 опыт внедрения Андрей Зимовнов
 lead data scientist
 ozon.ru
  2. 2. Товарные рекомендации
  3. 3. Что было до нас, далекий 2012 Сбор логов в SQL сервере • хранятся окном в неделю • плохая детализация • неудобно анализировать Рекомендации считаются на SQL • считаются медленно • неподдерживаемый и нерасширяемый код
  4. 4. Первый подход: Python • Придумываем новые признаки, решаем проблему холодного старта. • Применяем машинное обучение для настройки модели. • Запускаем тест на ограниченном ассортименте книжного каталога. • Получаем прирост конверсии в добавления в корзину из полки рекомендаций.
  5. 5. Второй подход: С++ • Хотим запустить тест на большем числе товаров, но не можем: Python медленный, занимает много памяти и работает в один поток. • Переписываем движок на C++ с распараллеливанием на OpenMP. • Сложное обучение, матрица признаков не помещается в память. Пишем дополнительный код, используем диск. • Запускаем тест, опять получаем прирост.
  6. 6. Что дальше? Мы уперлись в ресурсы одного сервера, развивать движок стало невозможно. Но есть и другие проблемы: • SQL сервер - неудобное хранилище для больших объемов данных, которые хочется обрабатывать не только SQL запросами. • Нам нужны детальные логи, их надо собирать и где-то хранить.
  7. 7. Архитектура платформы Счетчик SQL серверПотоки данных Hadoop кластер HDFS, Hive RabbitMQ + Flume Sqoop Алгоритмы Cassandra Сервис
  8. 8. Data Volume & Velocity • Логи со счетчика (трек действий пользователя, добавления в корзину, просмотры товаров, поиски, просмотры каталогов и многое другое) - 100 events/sec, 15 GB/day (raw). • Заказы. • Описания товаров, цены, доступность, ветки каталогов - 8 млн. постоянно обновляемых товаров.
  9. 9. На чем писать алгоритмы? Первый блин комом: Java. Плюсы: • Работает быстро Минусы: • Многословна, не видно логики, математикам сложно расширять или улучшать. • Бедное MapReduce API. Например, на каждый tuple (кортеж) приходится писать свой класс.
  10. 10. Может можно проще? Дубль два: Apache Spark. Плюсы: • Python/Scala API • Более богатое API, чем у MapReduce: map и reduceByKey - частные случаи операций, еще есть join, distinct, intersection, ... • Умеет кэшировать данные в памяти, помогает итерационным алгоритмам. • Умеет работать с Hive таблицами. Минусы: • Проект активно развивается, но сыроват: не все работает из коробки, надо тьюнить под разный размер задачи.
  11. 11. SQL на больших данных? Hive on TEZ: выполняет SQL-like запросы поверх больших таблиц в HDFS. Заметили, что в некоторых случаях 
 SQL запросы выразительнее и понятнее 
 даже Python кода на Spark. Плюсы: • Все, что можно выразить SQL запросом считается быстро. Минусы: • Если SQL не хватает, то нужно писать UDF (User-Defined Function) на Java.
  12. 12. Рабочий вариант Лучше всего работает комбинация: 
 40% Apache Spark (Python) + 50% Hive on TEZ + 10% Hive UDF (Java). Плюсы: • Парсить данные удобно в Spark на Python, дальше их можно сложить в Hive таблицу и продолжить обработку SQL запросом. • ~ 70% code reuse между прототипом и продакшеном: как правило на UDF переписываются только критичные по производительности и не очень сложные функции, которые достаточно универсальны. • Математики могут улучшать алгоритмы (нужно знать Python и SQL)! Минусы: • У каждого инструмента есть свои минусы. Но мы учимся использовать сильные стороны разных инструментов.
  13. 13. Пример из рекомендаций Рассмотрим матрицу Item-User, где в ячейке записана 1, если пользователь u покупал товар i. Одним из признаков рекомендательной системы может быть косинусная мера похожести между строчками матрицы (товарами). u1 u2 u3 u4 i1 1 1 1 i2 1 i3 1 1
  14. 14. Пример из рекомендаций Решение на Java (только часть кода):
  15. 15. WAT?
  16. 16. Пример из рекомендаций Решение на Hive (пусть векторы нормированы):
  17. 17. NOT BAD!
  18. 18. Модель и целевой вектор • Для начала выбрали линейную модель. • Целевой вектор базируется на информации о добавлениях в корзину в сессии после просмотра товара. • Надежда на то, что целевой вектор коррелирует с интересующим показателем конверсии в покупку из полки.
  19. 19. Как настраивали • Матрица признаков размером 40 ГБ (сжатых бинарных данных). • Функционал качества: NDCG@50. • Различные алгоритмы black-box оптимизации. • Обучение написали на Spark, и это удобно. • В Spark MLlib есть и готовые алгоритмы.
  20. 20. Пример: покоординатный спуск на Spark
  21. 21. Результаты и планы • Увеличение конверсии блока на 7% в AB-тесте, заметный прирост в деньгах. • Построили платформу, не придется менять технологии при увеличении объема данных. • Можем усложнять модель. • Работаем над прототипом персонализации.
  22. 22. Тест стороннего сервиса
  23. 23. А что кроме рекомендаций? • Аксессуары и бандлы • Прогнозирование продаж • Оптимизация формулы ранжирования поиска (настраивались на клики) • Оптимизация сортировки в каталогах (trade-off между ценой товара и вероятностью его покупки)
  24. 24. Как рождаются прототипы Рабочая формула:
 Data scientists + Jupyter notebooks • Практически вся работа математика происходит в веб- браузере в интерактивной консоли IPython, редко используется PyCharm. • Удобно делиться результатами экспериментов: сохранены все шаги эксперимента, графики, встроенная HTML визуализация. • Работа с кластером в этом же окружении.
  25. 25. Пример: Jupyter notebooks
  26. 26. Спасибо за внимание! Вопросы?

×