SlideShare una empresa de Scribd logo
1 de 27
Descargar para leer sin conexión
Товарные рекомендации 

в интернет-магазине: 

опыт внедрения
Андрей Зимовнов

lead data scientist

ozon.ru
Товарные рекомендации
Что было до нас, далекий 2012
Сбор логов в SQL сервере
• хранятся окном в неделю
• плохая детализация
• неудобно анализировать
Рекомендации считаются на SQL
• считаются медленно
• неподдерживаемый и нерасширяемый код
Первый подход: Python
• Придумываем новые признаки, решаем проблему
холодного старта.
• Применяем машинное обучение для настройки
модели.
• Запускаем тест на ограниченном ассортименте
книжного каталога.
• Получаем прирост конверсии в добавления в
корзину из полки рекомендаций.
Второй подход: С++
• Хотим запустить тест на большем числе товаров,
но не можем: Python медленный, занимает много
памяти и работает в один поток.
• Переписываем движок на C++ с
распараллеливанием на OpenMP.
• Сложное обучение, матрица признаков не
помещается в память. Пишем дополнительный
код, используем диск.
• Запускаем тест, опять получаем прирост.
Что дальше?
Мы уперлись в ресурсы одного сервера, развивать
движок стало невозможно.
Но есть и другие проблемы:
• SQL сервер - неудобное хранилище для
больших объемов данных, которые хочется
обрабатывать не только SQL запросами.
• Нам нужны детальные логи, их надо собирать и
где-то хранить.
2 bdw.key
Архитектура платформы
Счетчик SQL серверПотоки данных
Hadoop кластер
HDFS, Hive
RabbitMQ + Flume Sqoop
Алгоритмы
Cassandra
Сервис
Data Volume & Velocity
• Логи со счетчика (трек действий пользователя,
добавления в корзину, просмотры товаров,
поиски, просмотры каталогов и многое другое)
- 100 events/sec, 15 GB/day (raw).
• Заказы.
• Описания товаров, цены, доступность, ветки
каталогов - 8 млн. постоянно обновляемых
товаров.
На чем писать алгоритмы?
Первый блин комом: Java.
Плюсы:
• Работает быстро
Минусы:
• Многословна, не видно логики, математикам
сложно расширять или улучшать.
• Бедное MapReduce API. Например, на каждый
tuple (кортеж) приходится писать свой класс.
Может можно проще?
Дубль два: Apache Spark.
Плюсы:
• Python/Scala API
• Более богатое API, чем у MapReduce: map и reduceByKey - частные
случаи операций, еще есть join, distinct, intersection, ...
• Умеет кэшировать данные в памяти, помогает итерационным алгоритмам.
• Умеет работать с Hive таблицами.
Минусы:
• Проект активно развивается, но сыроват: не все работает из коробки,
надо тьюнить под разный размер задачи.
SQL на больших данных?
Hive on TEZ: выполняет SQL-like запросы поверх больших
таблиц в HDFS.
Заметили, что в некоторых случаях 

SQL запросы выразительнее и понятнее 

даже Python кода на Spark.
Плюсы:
• Все, что можно выразить SQL запросом считается быстро.
Минусы:
• Если SQL не хватает, то нужно писать UDF (User-Defined
Function) на Java.
Рабочий вариант
Лучше всего работает комбинация: 

40% Apache Spark (Python) + 50% Hive on TEZ + 10% Hive UDF (Java).
Плюсы:
• Парсить данные удобно в Spark на Python, дальше их можно сложить в Hive
таблицу и продолжить обработку SQL запросом.
• ~ 70% code reuse между прототипом и продакшеном: как правило на UDF
переписываются только критичные по производительности и не очень
сложные функции, которые достаточно универсальны.
• Математики могут улучшать алгоритмы (нужно знать Python и SQL)!
Минусы:
• У каждого инструмента есть свои минусы. Но мы учимся использовать
сильные стороны разных инструментов.
Пример из рекомендаций
Рассмотрим матрицу Item-User, где в ячейке
записана 1, если пользователь u покупал товар i.
Одним из признаков рекомендательной системы
может быть косинусная мера похожести между
строчками матрицы (товарами).
u1 u2 u3 u4
i1 1 1 1
i2 1
i3 1 1
Пример из рекомендаций
Решение на Java (только часть кода):
WAT?
Пример из рекомендаций
Решение на Hive (пусть векторы нормированы):
NOT BAD!
Модель и целевой вектор
• Для начала выбрали линейную модель.
• Целевой вектор базируется на информации о
добавлениях в корзину в сессии после просмотра
товара.
• Надежда на то, что целевой вектор коррелирует с
интересующим показателем конверсии в покупку
из полки.
Как настраивали
• Матрица признаков размером 40 ГБ (сжатых
бинарных данных).
• Функционал качества: NDCG@50.
• Различные алгоритмы black-box оптимизации.
• Обучение написали на Spark, и это удобно.
• В Spark MLlib есть и готовые алгоритмы.
Пример: покоординатный спуск на Spark
Результаты и планы
• Увеличение конверсии блока на 7% в AB-тесте,
заметный прирост в деньгах.
• Построили платформу, не придется менять
технологии при увеличении объема данных.
• Можем усложнять модель.
• Работаем над прототипом персонализации.
Тест стороннего сервиса
А что кроме рекомендаций?
• Аксессуары и бандлы
• Прогнозирование продаж
• Оптимизация формулы ранжирования поиска
(настраивались на клики)
• Оптимизация сортировки в каталогах (trade-off
между ценой товара и вероятностью его покупки)
Как рождаются прототипы
Рабочая формула:

Data scientists + Jupyter notebooks
• Практически вся работа математика происходит в веб-
браузере в интерактивной консоли IPython, редко
используется PyCharm.
• Удобно делиться результатами экспериментов: сохранены
все шаги эксперимента, графики, встроенная HTML
визуализация.
• Работа с кластером в этом же окружении.
Пример: Jupyter notebooks
Спасибо за внимание!
Вопросы?

Más contenido relacionado

La actualidad más candente

Блеск и нищета распределённых кэшей
Блеск и нищета распределённых кэшейБлеск и нищета распределённых кэшей
Блеск и нищета распределённых кэшейaragozin
 
Business Intelligence. Современный взгляд
Business Intelligence. Современный взглядBusiness Intelligence. Современный взгляд
Business Intelligence. Современный взглядAndrey Korshikov
 
Big Data Open Lab
Big Data Open LabBig Data Open Lab
Big Data Open LabDell_Russia
 
Платформа для бизнес-приложений SAP HANA на основе решений Cisco
 Платформа для бизнес-приложений SAP HANA на основе решений Cisco Платформа для бизнес-приложений SAP HANA на основе решений Cisco
Платформа для бизнес-приложений SAP HANA на основе решений CiscoCisco Russia
 
SSAS: multidemention vs tabular mode
SSAS: multidemention vs tabular modeSSAS: multidemention vs tabular mode
SSAS: multidemention vs tabular modeAndrey Korshikov
 
Управление Big data платформой Почты России
Управление Big data платформой Почты РоссииУправление Big data платформой Почты России
Управление Big data платформой Почты РоссииAndrey Bashchenko
 
BigIntegrate - разрушение мифов по поводу ETL на Hadoop
BigIntegrate - разрушение мифов по поводу ETL на HadoopBigIntegrate - разрушение мифов по поводу ETL на Hadoop
BigIntegrate - разрушение мифов по поводу ETL на HadoopAndrey Orlov
 
SQL Server Analysis Services 2014: табличная модель - альтернатива кубам?
SQL Server Analysis Services 2014: табличная модель - альтернатива кубам?SQL Server Analysis Services 2014: табличная модель - альтернатива кубам?
SQL Server Analysis Services 2014: табличная модель - альтернатива кубам? Andrey Korshikov
 
Cервис рекомендаций на виртуальном Hadoop кластере (Роман Зыков)
Cервис рекомендаций на виртуальном Hadoop кластере (Роман Зыков)Cервис рекомендаций на виртуальном Hadoop кластере (Роман Зыков)
Cервис рекомендаций на виртуальном Hadoop кластере (Роман Зыков)Ontico
 
сервисы персонализации на основе данных
сервисы персонализации на основе данныхсервисы персонализации на основе данных
сервисы персонализации на основе данныхRoman Zykov
 
Short enterprise data hub on apache hadoop ru
Short enterprise data hub on apache hadoop ruShort enterprise data hub on apache hadoop ru
Short enterprise data hub on apache hadoop ruLviv Startup Club
 
Модернизация хранилища данных для использования передовой аналитики
Модернизация хранилища данных для использования передовой аналитикиМодернизация хранилища данных для использования передовой аналитики
Модернизация хранилища данных для использования передовой аналитикиElizaveta Alekseeva
 
Модернизация хранилища данных для использования передовой аналитики
Модернизация хранилища данных для использования передовой аналитикиМодернизация хранилища данных для использования передовой аналитики
Модернизация хранилища данных для использования передовой аналитикиYuri Yashkin
 
Аналитика для розничного финансового бизнеса
Аналитика для розничного финансового бизнесаАналитика для розничного финансового бизнеса
Аналитика для розничного финансового бизнесаAlexey Glagolev
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...IT-Portfolio
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...IT-Portfolio
 
генератор отчетов Calligraph
генератор отчетов Calligraphгенератор отчетов Calligraph
генератор отчетов CalligraphVladimir Losev
 
Распределённый кэш или хранилище данных. Что выбрать?
Распределённый кэш или хранилище данных. Что выбрать?Распределённый кэш или хранилище данных. Что выбрать?
Распределённый кэш или хранилище данных. Что выбрать?aragozin
 

La actualidad más candente (20)

Блеск и нищета распределённых кэшей
Блеск и нищета распределённых кэшейБлеск и нищета распределённых кэшей
Блеск и нищета распределённых кэшей
 
Business Intelligence. Современный взгляд
Business Intelligence. Современный взглядBusiness Intelligence. Современный взгляд
Business Intelligence. Современный взгляд
 
Big Data Open Lab
Big Data Open LabBig Data Open Lab
Big Data Open Lab
 
Платформа для бизнес-приложений SAP HANA на основе решений Cisco
 Платформа для бизнес-приложений SAP HANA на основе решений Cisco Платформа для бизнес-приложений SAP HANA на основе решений Cisco
Платформа для бизнес-приложений SAP HANA на основе решений Cisco
 
SSAS: multidemention vs tabular mode
SSAS: multidemention vs tabular modeSSAS: multidemention vs tabular mode
SSAS: multidemention vs tabular mode
 
Управление Big data платформой Почты России
Управление Big data платформой Почты РоссииУправление Big data платформой Почты России
Управление Big data платформой Почты России
 
BigIntegrate - разрушение мифов по поводу ETL на Hadoop
BigIntegrate - разрушение мифов по поводу ETL на HadoopBigIntegrate - разрушение мифов по поводу ETL на Hadoop
BigIntegrate - разрушение мифов по поводу ETL на Hadoop
 
SQL Server Analysis Services 2014: табличная модель - альтернатива кубам?
SQL Server Analysis Services 2014: табличная модель - альтернатива кубам?SQL Server Analysis Services 2014: табличная модель - альтернатива кубам?
SQL Server Analysis Services 2014: табличная модель - альтернатива кубам?
 
Cервис рекомендаций на виртуальном Hadoop кластере (Роман Зыков)
Cервис рекомендаций на виртуальном Hadoop кластере (Роман Зыков)Cервис рекомендаций на виртуальном Hadoop кластере (Роман Зыков)
Cервис рекомендаций на виртуальном Hadoop кластере (Роман Зыков)
 
сервисы персонализации на основе данных
сервисы персонализации на основе данныхсервисы персонализации на основе данных
сервисы персонализации на основе данных
 
Short enterprise data hub on apache hadoop ru
Short enterprise data hub on apache hadoop ruShort enterprise data hub on apache hadoop ru
Short enterprise data hub on apache hadoop ru
 
Модернизация хранилища данных для использования передовой аналитики
Модернизация хранилища данных для использования передовой аналитикиМодернизация хранилища данных для использования передовой аналитики
Модернизация хранилища данных для использования передовой аналитики
 
Модернизация хранилища данных для использования передовой аналитики
Модернизация хранилища данных для использования передовой аналитикиМодернизация хранилища данных для использования передовой аналитики
Модернизация хранилища данных для использования передовой аналитики
 
Аналитика для розничного финансового бизнеса
Аналитика для розничного финансового бизнесаАналитика для розничного финансового бизнеса
Аналитика для розничного финансового бизнеса
 
Sap Hana
Sap HanaSap Hana
Sap Hana
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Строим N...
 
Обзор HP Vertica
Обзор HP VerticaОбзор HP Vertica
Обзор HP Vertica
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Оптимиза...
 
генератор отчетов Calligraph
генератор отчетов Calligraphгенератор отчетов Calligraph
генератор отчетов Calligraph
 
Распределённый кэш или хранилище данных. Что выбрать?
Распределённый кэш или хранилище данных. Что выбрать?Распределённый кэш или хранилище данных. Что выбрать?
Распределённый кэш или хранилище данных. Что выбрать?
 

Destacado

3 джозеп курто превращаем вашу организацию в big data компанию
3 джозеп курто превращаем вашу организацию в big data компанию3 джозеп курто превращаем вашу организацию в big data компанию
3 джозеп курто превращаем вашу организацию в big data компаниюantishmanti
 
1 алексей натекин глубокая социальная аналиктика маленький большой брат
1 алексей натекин глубокая социальная аналиктика маленький большой брат1 алексей натекин глубокая социальная аналиктика маленький большой брат
1 алексей натекин глубокая социальная аналиктика маленький большой братantishmanti
 
1 20150424 ydf_mlevin_мифы и легенды о больших данных
1 20150424 ydf_mlevin_мифы и легенды о больших данных1 20150424 ydf_mlevin_мифы и легенды о больших данных
1 20150424 ydf_mlevin_мифы и легенды о больших данныхantishmanti
 
Data-driven маркетинг: programmatic и data mining
Data-driven маркетинг: programmatic и data miningData-driven маркетинг: programmatic и data mining
Data-driven маркетинг: programmatic и data miningTsvetelina Miteva
 
Mail.ru on Big Data Russia
Mail.ru on Big Data RussiaMail.ru on Big Data Russia
Mail.ru on Big Data Russiarusbase.vc
 
Кластеризация на примере соцсети "Одноклассники"
Кластеризация на примере соцсети "Одноклассники"Кластеризация на примере соцсети "Одноклассники"
Кластеризация на примере соцсети "Одноклассники"Tsvetelina Miteva
 
NumBuster on Big Data Russia
NumBuster on Big Data RussiaNumBuster on Big Data Russia
NumBuster on Big Data Russiarusbase.vc
 
Google на конференции Big Data Russia
Google на конференции Big Data RussiaGoogle на конференции Big Data Russia
Google на конференции Big Data Russiarusbase.vc
 
Scorista on Big Data Russia
Scorista on Big Data RussiaScorista on Big Data Russia
Scorista on Big Data Russiarusbase.vc
 
SAP on Big Data Russia
SAP on Big Data RussiaSAP on Big Data Russia
SAP on Big Data Russiarusbase.vc
 

Destacado (11)

3 джозеп курто превращаем вашу организацию в big data компанию
3 джозеп курто превращаем вашу организацию в big data компанию3 джозеп курто превращаем вашу организацию в big data компанию
3 джозеп курто превращаем вашу организацию в big data компанию
 
1 алексей натекин глубокая социальная аналиктика маленький большой брат
1 алексей натекин глубокая социальная аналиктика маленький большой брат1 алексей натекин глубокая социальная аналиктика маленький большой брат
1 алексей натекин глубокая социальная аналиктика маленький большой брат
 
4 azure 24 04
4 azure 24 044 azure 24 04
4 azure 24 04
 
1 20150424 ydf_mlevin_мифы и легенды о больших данных
1 20150424 ydf_mlevin_мифы и легенды о больших данных1 20150424 ydf_mlevin_мифы и легенды о больших данных
1 20150424 ydf_mlevin_мифы и легенды о больших данных
 
Data-driven маркетинг: programmatic и data mining
Data-driven маркетинг: programmatic и data miningData-driven маркетинг: programmatic и data mining
Data-driven маркетинг: programmatic и data mining
 
Mail.ru on Big Data Russia
Mail.ru on Big Data RussiaMail.ru on Big Data Russia
Mail.ru on Big Data Russia
 
Кластеризация на примере соцсети "Одноклассники"
Кластеризация на примере соцсети "Одноклассники"Кластеризация на примере соцсети "Одноклассники"
Кластеризация на примере соцсети "Одноклассники"
 
NumBuster on Big Data Russia
NumBuster on Big Data RussiaNumBuster on Big Data Russia
NumBuster on Big Data Russia
 
Google на конференции Big Data Russia
Google на конференции Big Data RussiaGoogle на конференции Big Data Russia
Google на конференции Big Data Russia
 
Scorista on Big Data Russia
Scorista on Big Data RussiaScorista on Big Data Russia
Scorista on Big Data Russia
 
SAP on Big Data Russia
SAP on Big Data RussiaSAP on Big Data Russia
SAP on Big Data Russia
 

Similar a 2 bdw.key

Top-10 популярных вопросов администраторам баз данных или почему я против св...
Top-10  популярных вопросов администраторам баз данных или почему я против св...Top-10  популярных вопросов администраторам баз данных или почему я против св...
Top-10 популярных вопросов администраторам баз данных или почему я против св...Ilya Kosmodemiansky
 
CodeFest 2011. Макаров А. — Как разрабатывается Yii
CodeFest 2011. Макаров А. — Как разрабатывается YiiCodeFest 2011. Макаров А. — Как разрабатывается Yii
CodeFest 2011. Макаров А. — Как разрабатывается YiiCodeFest
 
Devconf 2011 - PHP - Как разрабатывается фреймворк Yii
Devconf 2011 - PHP - Как разрабатывается фреймворк YiiDevconf 2011 - PHP - Как разрабатывается фреймворк Yii
Devconf 2011 - PHP - Как разрабатывается фреймворк YiiAlexander Makarov
 
How to cook a blockchain and not get burned
How to cook a blockchain and not get burned How to cook a blockchain and not get burned
How to cook a blockchain and not get burned Alexander Syrotenko
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrusAlex Chistyakov
 
HappyDev'15 Keynote: Когда все данные станут большими...
HappyDev'15 Keynote: Когда все данные станут большими...HappyDev'15 Keynote: Когда все данные станут большими...
HappyDev'15 Keynote: Когда все данные станут большими...Alexey Zinoviev
 
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...HappyDev
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...IT-Portfolio
 
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...GeeksLab Odessa
 
Корпоративное приложение на Rails
Корпоративное приложение на RailsКорпоративное приложение на Rails
Корпоративное приложение на RailsАндрей Колешко
 
Велосипедостраительство в NoSQL, строим собственное NoSQL хранилище
Велосипедостраительство в NoSQL, строим собственное NoSQL хранилищеВелосипедостраительство в NoSQL, строим собственное NoSQL хранилище
Велосипедостраительство в NoSQL, строим собственное NoSQL хранилищеAlexandre Kalendarev
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaAlex Chistyakov
 
My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016Alex Chistyakov
 
владивосток форум новости технологий 2015
владивосток форум новости технологий 2015владивосток форум новости технологий 2015
владивосток форум новости технологий 2015Elena Ometova
 
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"Alexey Zinoviev
 
2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных
2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных
2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данныхОмские ИТ-субботники
 
"Разрушаем .NET мифы" Сергей Калинец
"Разрушаем .NET мифы" Сергей Калинец"Разрушаем .NET мифы" Сергей Калинец
"Разрушаем .NET мифы" Сергей КалинецFwdays
 
Собеседование на позицию Java Developer
Собеседование на позицию Java DeveloperСобеседование на позицию Java Developer
Собеседование на позицию Java DeveloperOlexandra Dmytrenko
 

Similar a 2 bdw.key (20)

Top-10 популярных вопросов администраторам баз данных или почему я против св...
Top-10  популярных вопросов администраторам баз данных или почему я против св...Top-10  популярных вопросов администраторам баз данных или почему я против св...
Top-10 популярных вопросов администраторам баз данных или почему я против св...
 
CodeFest 2011. Макаров А. — Как разрабатывается Yii
CodeFest 2011. Макаров А. — Как разрабатывается YiiCodeFest 2011. Макаров А. — Как разрабатывается Yii
CodeFest 2011. Макаров А. — Как разрабатывается Yii
 
Как разраба
Как разрабаКак разраба
Как разраба
 
Devconf 2011 - PHP - Как разрабатывается фреймворк Yii
Devconf 2011 - PHP - Как разрабатывается фреймворк YiiDevconf 2011 - PHP - Как разрабатывается фреймворк Yii
Devconf 2011 - PHP - Как разрабатывается фреймворк Yii
 
How to cook a blockchain and not get burned
How to cook a blockchain and not get burned How to cook a blockchain and not get burned
How to cook a blockchain and not get burned
 
Sivko
SivkoSivko
Sivko
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
 
HappyDev'15 Keynote: Когда все данные станут большими...
HappyDev'15 Keynote: Когда все данные станут большими...HappyDev'15 Keynote: Когда все данные станут большими...
HappyDev'15 Keynote: Когда все данные станут большими...
 
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
2015-12-05 Алексей Зиновьев - Когда все данные станут большими...
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
 
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
JSLab. Дмитрий Смолин, Дмитрий Филипенко. "React и Webpack с помощью кирки, л...
 
Корпоративное приложение на Rails
Корпоративное приложение на RailsКорпоративное приложение на Rails
Корпоративное приложение на Rails
 
Велосипедостраительство в NoSQL, строим собственное NoSQL хранилище
Велосипедостраительство в NoSQL, строим собственное NoSQL хранилищеВелосипедостраительство в NoSQL, строим собственное NoSQL хранилище
Велосипедостраительство в NoSQL, строим собственное NoSQL хранилище
 
Оптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на JavaОптимизация производительности нагруженных веб-систем на Java
Оптимизация производительности нагруженных веб-систем на Java
 
My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016
 
владивосток форум новости технологий 2015
владивосток форум новости технологий 2015владивосток форум новости технологий 2015
владивосток форум новости технологий 2015
 
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
 
2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных
2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных
2014-01-04 02 Алексей Зиновьев. Выбор NoSQL базы данных
 
"Разрушаем .NET мифы" Сергей Калинец
"Разрушаем .NET мифы" Сергей Калинец"Разрушаем .NET мифы" Сергей Калинец
"Разрушаем .NET мифы" Сергей Калинец
 
Собеседование на позицию Java Developer
Собеседование на позицию Java DeveloperСобеседование на позицию Java Developer
Собеседование на позицию Java Developer
 

2 bdw.key

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