SlideShare a Scribd company logo
1 of 39
Download to read offline
Облачный сервис персональных рекомендаций
для >20 000 магазинов — алгоритмы и технологии
Александр Сербул
руководитель направления
О чем поговорим…
 Рекомендательные сервисы – суть
 Снаружи: популярные алгоритмы и техники реализации
 А когда много данных…
 Изнутри: как устроен наш облачный сервис «1С-Битрикс BigData»
 Куда двигаться дальше
Персональные рекомендации – зачем?
 Предсказать мысли, желания клиента
 Если клиент готов – соблазнить его, привязать к себе
 Не спамить клиента мусором, не раздражать
 Соблазнять клиента – регулярно (рассылки, push)
1) Релевантность, 2) Разумность, 3) Вовремя, 4) Не пережать
Нас уже прослушивают:
Windows 10, Android, …
Как соблазнять?
 Не персональные «крючки»:
- Топ продаж (best sellers)
- С этим Товаром покупают
(аксессуары)
- С этим Товаром смотрят
- Другие смотрят сейчас
- Скидка на очень популярный товар
Небольшой набор товаров. Хвост. Спам
– для некоторых.
«Mining of Massive Datasets», 9.1.2: Leskovec,
Rajaraman, Ullman (Stanford University)
Amazon.com
 Персональные, не персональные
Amazon.com
 Не персональные?!
Как соблазнять?
 Персональные «крючки»:
Рекомендуем именно вам в данный
момент:
- Купить, посмотреть
- Люди, похожие на вас («близкие по
духу»)
- «Хорошая» скидка, «хорошая» цена
- Полезный контент
- Релевантный поиск
С целью персональных
рекомендаций – понятно. Теперь
сухая конкретика и код.
Карл… Карл, я внедрил в
проекте
коллаборативную
фильтрацию
Это очень круто,
пап!
Карл… Карл, я специалист по
BigData….
Это очень круто,
пап!
Но я так и не понял,
как и почему она
работает.
СОВСЕМ!!!
Content-based рекомендации
 Купил пластиковые окна – теперь их
предлагают на всех сайтах и
смартфоне, в Windows 10 и во сне.
 Купил Toyota, ищу шины, предлагают
шины к Toyota вверху списка
 Vector space model, tf/idf
 word2vec
word2vec, SVD/PCA
 Сжимаем размерность
 «Склеиваем» синонимы
 Skip-gram
 Continuous bag of words (CBOW)
 «Похож» на матричную
факторизацию
Коллаборативная фильтрация
 Предложи Товары/Услуги,
которые есть у твоих друзей
(User-User)
 Предложи к твоим Товарам
другие, связанные с ними
Товары (Item-Item): «сухарики к
пиву»
Коллаборативная фильтрация - алгоритмы
 User-User: поиск похожих «в лоб» (kNN), k-d tree, LSH
 Item-Item: Amazon, работает гораздо быстрее
 Item-Item «плюшки» - с этим Товаром покупают
 Mahout Taste (матрица в памяти)
 Spark MLLib (ALS)
Товары в моем профиле
Их связи с другими Товарами
Взвешенное среднее для предсказания моих невыраженных
интересов
Коллаборативная фильтрация – сжатие Товаров
 «Единый» каталог
 Склеить дубликаты
 Передать «смысл» между Товарами
 Улучшить качество персональных рекомендаций
 Семантическое сжатие размерности, аналог матричной
факторизации
 Скорость
 Ранжирование результатов
Minhash
 Min-wise independent permutations locality sensitive
hashing scheme
 Снижаем размерность
 Совместима с LSH (следующий слайд)
Pr[ hmin(A) = hmin(B) ] = J(A,B)
 Размер сигнатуры: 50-500
simhash
Text shingling
 Shingle – «черепица»
 Устойчивость к вариантам, опечаткам
«Штаны красные махровые в полоску»
{«штан», «таны», «аны », «ны к», «ы кра», «крас», …}
«Красные полосатые штаны»
Векторизация описания Товара
 Текст: «Штаны красные махровые в полоску»
 Вектор «bag of words»: [0,0,0,1,0,…0,1,0] – ~ 10000 -
1000000 элементов (kernel hack)
 Minhash-сигнатура после shingling:
 [1243,823,-324,12312,…] – 100-500 элементов, совместима
с LSH
Locality-Sensitive Hashing (LSH)
 Вероятностный метод снижения размерности
 Использовали для minhashed-векторов
 Banding:
b – корзины, r – элементов в корзине.
P{ “Векторы совпадут хотя-бы в одной корзине” }:
Кластеризация каталога
 Apache Spark
 2-3 часа, 8 spot-серверов
 10-20 млн. Товаров => 1 млн. кластеров
 Адекватные по смыслу кластера
 Персональные рекомендации - стали в разы «лучше»
 DynamoDB – хранение кластроидов
Измерение качества персональных
рекомендаций
 Recall, precision
 Предсказываем на «старой» модели
 Смотрим фактические значения профиля – на текущей
модели
 Считаем recall
Архитектура нашего облачного
сервиса
Сервис «1С-Битрикс: BigData» - общий вид
Сервис “1С-Битрикс: BigData”
Сервис “1С-Битрикс: BigData”
Кофе или … марихуана?
1.Много хороших программистов — C++
2.Много тестировщиков — C++
3.Много свободного времени на разработку — C++
4.Много сводобных ночей на отладку - C++
5.Предметная область формализована — C++
6.Требования не меняются - C++
7.Иначе: java ;-)
Apache Lucene
28 /
Apache Lucene: +/-
1.(-) Нет нормальной поддержки русского языка
2.(-) Нет русской морфологии
3.(-) Документация иногда оставляет желать лучшего
4.(-) Нет решения для 100% онлайн индексации
5.(+) Компактный индекс (гигабайты)
6.(+) Лаконичное API
7.(+) Транзакционность
8.(+) Thread-safety
Redis
1.Профиль Пользователя: десятки тэгов
2.Стемминг Портера
3.Высокочастотные слова, tf/idf
4.Алгоритмы вытеснения тэгов
5.Куда можно развивать… (word2vec,
glove, синонимы ...)
Архитектура content-based рекомендаций
Amazon
Kinesis
Javaindexingworkers(16)
~1700
событий/сек
Index (disk)
Index (disk)
Redis (profiles)
Раздающий
Servlet
Процессы
1.Многопоточный индексатор, java/lucene
2.Amazon Kinesis – как буффер
3.Индекс в папке на диске, вытеснение
4.Как реализован “онлайн” - выдать
секрет :-)
5.Раздающий Servlet
Цифры кратко
 Тысячи запросов в секунду к сервису
 >20 тысяч интернет-магазинов
 Ощутимый рост конверсии – до 50-80%, зависит от размера
магазина
 Активное использование «С этим Товаром покупают»!?
 1 сервер рекомендаций (70G ОЗУ) + небольшой кластер Spark
 Уникальных профилей пользователей: ~ 100 миллионов
Цифры
API. Персональная рекомендация
• https://analytics.bitrix.info/crecoms/v1_0/recoms.php?op=recommend&uid=#кука#&c
ount=3&aid=#хэш_лицензии#
• op=recommend
• uid – кука Пользователя
• aid – хэш от Лицензии
• сount – число рекомендаций
{
"id":"24aace52dc0284950bcff7b7f1b7a7f0de66aca9",
"items":["1651384","1652041","1651556"]
}
API. Похожие Товары на данный
• https://analytics.bitrix.info/crecoms/v1_0/recoms.php?op=simitems&aid=#хэш_лицен
зии#&eid=#id_товара#&count=3&type=combined&uid=#кука#
• op=simitems
• uid – кука Пользователя
• aid – хэш от Лицензии
• eid – ID Товара
• type - view|order|combined
• сount – размер выдачи
API. Топ Товаров на сайте
• https://analytics.bitrix.info/crecoms/v1_0/recoms.php?op=sim_domain_items&aid=#х
эш_лицензии#&domain=#домен#&count=50&type=combined&uid=#кука#
• op=sim_domain_items
• uid – кука Пользователя
• aid – хэш от Лицензии
• domain – домен сайта
• type - view|order|combined
• сount – размер выдачи
Куда развиваться
 Пол, возраст, ценовая категория клиента – машинное
обучение
 Разные виды товаров: возобновляемые,
невозобновляемые
 Цена товара
 Внутренние циклы (готов покупать), модели Маркова
 Классификация групп лояльности, кластерный анализ
 Релевантный поиск
Спасибо за внимание!
Вопросы?
Александр Сербул
serbul@1c-bitrix.ru
Alexandr Serbul
AlexSerbul

More Related Content

What's hot

Hl2008 Spy Log Architechture 169
Hl2008 Spy Log Architechture 169Hl2008 Spy Log Architechture 169
Hl2008 Spy Log Architechture 169Media Gorod
 
Alexander Serbul ITEM 2018
Alexander Serbul ITEM 2018Alexander Serbul ITEM 2018
Alexander Serbul ITEM 2018ITEM
 
New SpyLOG architechture (Highload 2008)
New SpyLOG architechture (Highload 2008)New SpyLOG architechture (Highload 2008)
New SpyLOG architechture (Highload 2008)Sergey Skvortsov
 
Реальный мир и хорошие модели данных.
Реальный мир и хорошие модели данных. Реальный мир и хорошие модели данных.
Реальный мир и хорошие модели данных. Victor Agroskin
 
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"Alexey Zinoviev
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезныSergey Xek
 
Выступление Сергея Аверина, Badoo, на High Performance Conference
Выступление Сергея Аверина, Badoo, на High Performance ConferenceВыступление Сергея Аверина, Badoo, на High Performance Conference
Выступление Сергея Аверина, Badoo, на High Performance ConferenceEYevseyeva
 
эффективный полнотекстовый поиск по базам данных петр зайцев
эффективный полнотекстовый поиск по базам данных   петр зайцевэффективный полнотекстовый поиск по базам данных   петр зайцев
эффективный полнотекстовый поиск по базам данных петр зайцевMedia Gorod
 

What's hot (8)

Hl2008 Spy Log Architechture 169
Hl2008 Spy Log Architechture 169Hl2008 Spy Log Architechture 169
Hl2008 Spy Log Architechture 169
 
Alexander Serbul ITEM 2018
Alexander Serbul ITEM 2018Alexander Serbul ITEM 2018
Alexander Serbul ITEM 2018
 
New SpyLOG architechture (Highload 2008)
New SpyLOG architechture (Highload 2008)New SpyLOG architechture (Highload 2008)
New SpyLOG architechture (Highload 2008)
 
Реальный мир и хорошие модели данных.
Реальный мир и хорошие модели данных. Реальный мир и хорошие модели данных.
Реальный мир и хорошие модели данных.
 
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
Выбор NoSQL базы данных для вашего проекта: "Не в свои сани не садись"
 
Не все базы данных одинаково полезны
Не все базы данных одинаково полезныНе все базы данных одинаково полезны
Не все базы данных одинаково полезны
 
Выступление Сергея Аверина, Badoo, на High Performance Conference
Выступление Сергея Аверина, Badoo, на High Performance ConferenceВыступление Сергея Аверина, Badoo, на High Performance Conference
Выступление Сергея Аверина, Badoo, на High Performance Conference
 
эффективный полнотекстовый поиск по базам данных петр зайцев
эффективный полнотекстовый поиск по базам данных   петр зайцевэффективный полнотекстовый поиск по базам данных   петр зайцев
эффективный полнотекстовый поиск по базам данных петр зайцев
 

Similar to "Облачный сервис персональных рекомендаций для 20 000 магазинов — алгоритмы и технологии" Сербул Александр, 1С-Битрикс

Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)
Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)
Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)Ontico
 
Семантическое ядро рунета
Семантическое ядро рунетаСемантическое ядро рунета
Семантическое ядро рунетаCEE-SEC(R)
 
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...Ontico
 
Тестирование высоконагруженных облачных веб-сервисов в Amazon - подводные кам...
Тестирование высоконагруженных облачных веб-сервисов в Amazon - подводные кам...Тестирование высоконагруженных облачных веб-сервисов в Amazon - подводные кам...
Тестирование высоконагруженных облачных веб-сервисов в Amazon - подводные кам...SQALab
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...IT-Portfolio
 
Dev {highload}. When you should do your own db.
Dev {highload}. When you should do your own db.Dev {highload}. When you should do your own db.
Dev {highload}. When you should do your own db.Oleg Kwerty
 
Александр Сербул. 1С Битрикс. Массовый скоринг в CRM — секреты и подводные камни
Александр Сербул. 1С Битрикс. Массовый скоринг в CRM — секреты и подводные камниАлександр Сербул. 1С Битрикс. Массовый скоринг в CRM — секреты и подводные камни
Александр Сербул. 1С Битрикс. Массовый скоринг в CRM — секреты и подводные камниGlobal Innovation Labs
 
Мониторинг веб-проектов: штаб оперативного реагирования и аналитический центр
Мониторинг веб-проектов: штаб оперативного реагирования и аналитический центрМониторинг веб-проектов: штаб оперативного реагирования и аналитический центр
Мониторинг веб-проектов: штаб оперативного реагирования и аналитический центрsportgid
 
Александр Сербул —1С-Битрикс — ICBDA 2015
Александр Сербул —1С-Битрикс — ICBDA 2015Александр Сербул —1С-Битрикс — ICBDA 2015
Александр Сербул —1С-Битрикс — ICBDA 2015rusbase
 
Russir 2010 final
Russir 2010 finalRussir 2010 final
Russir 2010 finalyaevents
 
Rybak Big Projects New
Rybak Big Projects NewRybak Big Projects New
Rybak Big Projects NewOntico
 
Webuibasics - Lesson 1 - Overview (in russian)
Webuibasics - Lesson 1 - Overview (in russian) Webuibasics - Lesson 1 - Overview (in russian)
Webuibasics - Lesson 1 - Overview (in russian) xasima
 
imu2010 - Особенности продвижения низкочастотных, распределенных по множеств...
imu2010 -  Особенности продвижения низкочастотных, распределенных по множеств...imu2010 -  Особенности продвижения низкочастотных, распределенных по множеств...
imu2010 - Особенности продвижения низкочастотных, распределенных по множеств...UAMASTER Digital Agency
 
BusinessObjects глазами аналитика - Tern4
BusinessObjects глазами аналитика -  Tern4 BusinessObjects глазами аналитика -  Tern4
BusinessObjects глазами аналитика - Tern4 Valeriy Titov
 
зао «эвентос»
зао «эвентос»зао «эвентос»
зао «эвентос»ontosminerapi
 
School IT recruiting
School IT recruiting School IT recruiting
School IT recruiting Olga Kotova
 
Построение системы аналитики
Построение системы аналитикиПостроение системы аналитики
Построение системы аналитикиИлья Середа
 
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...Ontico
 
Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Andrew Mayorov
 
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)Ontico
 

Similar to "Облачный сервис персональных рекомендаций для 20 000 магазинов — алгоритмы и технологии" Сербул Александр, 1С-Битрикс (20)

Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)
Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)
Бигдата — как добывать золото из данных / Александр Сербул (1С-Битрикс)
 
Семантическое ядро рунета
Семантическое ядро рунетаСемантическое ядро рунета
Семантическое ядро рунета
 
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
Семантическое ядро рунета - высоконагруженная сontent-based рекомендательная ...
 
Тестирование высоконагруженных облачных веб-сервисов в Amazon - подводные кам...
Тестирование высоконагруженных облачных веб-сервисов в Amazon - подводные кам...Тестирование высоконагруженных облачных веб-сервисов в Amazon - подводные кам...
Тестирование высоконагруженных облачных веб-сервисов в Amazon - подводные кам...
 
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...
20 апреля, DEV {highload} - конференция о Highload веб-разработке, "Когда сто...
 
Dev {highload}. When you should do your own db.
Dev {highload}. When you should do your own db.Dev {highload}. When you should do your own db.
Dev {highload}. When you should do your own db.
 
Александр Сербул. 1С Битрикс. Массовый скоринг в CRM — секреты и подводные камни
Александр Сербул. 1С Битрикс. Массовый скоринг в CRM — секреты и подводные камниАлександр Сербул. 1С Битрикс. Массовый скоринг в CRM — секреты и подводные камни
Александр Сербул. 1С Битрикс. Массовый скоринг в CRM — секреты и подводные камни
 
Мониторинг веб-проектов: штаб оперативного реагирования и аналитический центр
Мониторинг веб-проектов: штаб оперативного реагирования и аналитический центрМониторинг веб-проектов: штаб оперативного реагирования и аналитический центр
Мониторинг веб-проектов: штаб оперативного реагирования и аналитический центр
 
Александр Сербул —1С-Битрикс — ICBDA 2015
Александр Сербул —1С-Битрикс — ICBDA 2015Александр Сербул —1С-Битрикс — ICBDA 2015
Александр Сербул —1С-Битрикс — ICBDA 2015
 
Russir 2010 final
Russir 2010 finalRussir 2010 final
Russir 2010 final
 
Rybak Big Projects New
Rybak Big Projects NewRybak Big Projects New
Rybak Big Projects New
 
Webuibasics - Lesson 1 - Overview (in russian)
Webuibasics - Lesson 1 - Overview (in russian) Webuibasics - Lesson 1 - Overview (in russian)
Webuibasics - Lesson 1 - Overview (in russian)
 
imu2010 - Особенности продвижения низкочастотных, распределенных по множеств...
imu2010 -  Особенности продвижения низкочастотных, распределенных по множеств...imu2010 -  Особенности продвижения низкочастотных, распределенных по множеств...
imu2010 - Особенности продвижения низкочастотных, распределенных по множеств...
 
BusinessObjects глазами аналитика - Tern4
BusinessObjects глазами аналитика -  Tern4 BusinessObjects глазами аналитика -  Tern4
BusinessObjects глазами аналитика - Tern4
 
зао «эвентос»
зао «эвентос»зао «эвентос»
зао «эвентос»
 
School IT recruiting
School IT recruiting School IT recruiting
School IT recruiting
 
Построение системы аналитики
Построение системы аналитикиПостроение системы аналитики
Построение системы аналитики
 
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
 
Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"Alexei Sintsov - "Between error and vulerability - one step"
Alexei Sintsov - "Between error and vulerability - one step"
 
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
 

More from it-people

«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Coit-people
 
«Scrapy internals» Александр Сибиряков, Scrapinghub
«Scrapy internals» Александр Сибиряков, Scrapinghub«Scrapy internals» Александр Сибиряков, Scrapinghub
«Scrapy internals» Александр Сибиряков, Scrapinghubit-people
 
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrainsit-people
 
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
«Gevent — быть или не быть?» Александр Мокров, Positive Technologiesit-people
 
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«Ещё один Поиск Яндекса» Александр Кошелев, Яндексit-people
 
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...it-people
 
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalrit-people
 
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...it-people
 
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Тотальный контроль производительности» Михаил Юматов, ЦИАН«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Тотальный контроль производительности» Михаил Юматов, ЦИАНit-people
 
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банкit-people
 
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Coit-people
 
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНСit-people
 
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...it-people
 
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologiesit-people
 
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn Systemit-people
 
«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologies«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologiesit-people
 
«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндекс«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндексit-people
 
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...it-people
 
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognicianit-people
 
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...it-people
 

More from it-people (20)

«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
«Про аналитику и серебряные пули» Александр Подсобляев, Rambler&Co
 
«Scrapy internals» Александр Сибиряков, Scrapinghub
«Scrapy internals» Александр Сибиряков, Scrapinghub«Scrapy internals» Александр Сибиряков, Scrapinghub
«Scrapy internals» Александр Сибиряков, Scrapinghub
 
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrains
 
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
«Gevent — быть или не быть?» Александр Мокров, Positive Technologies
 
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
«Ещё один Поиск Яндекса» Александр Кошелев, Яндекс
 
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
«How I Learned to Stop Worrying and Love the BFG: нагрузочное тестирование со...
 
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
«Write once run anywhere — почём опиум для народа?» Игорь Новиков, Scalr
 
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
«Gensim — тематическое моделирование для людей» Иван Меньших, Лев Константино...
 
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Тотальный контроль производительности» Михаил Юматов, ЦИАН«Тотальный контроль производительности» Михаил Юматов, ЦИАН
«Тотальный контроль производительности» Михаил Юматов, ЦИАН
 
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
«Детские болезни live-чата» Ольга Сентемова, Тинькофф Банк
 
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
«Микросервисы наносят ответный удар!» Олег Чуркин, Rambler&Co
 
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
 
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...
 
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologies
 
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn System
 
«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologies«(Без)опасный Python», Иван Цыганов, Positive Technologies
«(Без)опасный Python», Иван Цыганов, Positive Technologies
 
«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндекс«Python of Things», Кирилл Борисов, Яндекс
«Python of Things», Кирилл Борисов, Яндекс
 
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...
 
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
«Клиенту и серверу нужно поговорить» Прокопов Никита, Cognician
 
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
«Кошелек или деньги: сложный выбор между памятью и процессором» Алексеенко Иг...
 

"Облачный сервис персональных рекомендаций для 20 000 магазинов — алгоритмы и технологии" Сербул Александр, 1С-Битрикс

  • 1. Облачный сервис персональных рекомендаций для >20 000 магазинов — алгоритмы и технологии Александр Сербул руководитель направления
  • 2. О чем поговорим…  Рекомендательные сервисы – суть  Снаружи: популярные алгоритмы и техники реализации  А когда много данных…  Изнутри: как устроен наш облачный сервис «1С-Битрикс BigData»  Куда двигаться дальше
  • 3. Персональные рекомендации – зачем?  Предсказать мысли, желания клиента  Если клиент готов – соблазнить его, привязать к себе  Не спамить клиента мусором, не раздражать  Соблазнять клиента – регулярно (рассылки, push) 1) Релевантность, 2) Разумность, 3) Вовремя, 4) Не пережать Нас уже прослушивают: Windows 10, Android, …
  • 4.
  • 5. Как соблазнять?  Не персональные «крючки»: - Топ продаж (best sellers) - С этим Товаром покупают (аксессуары) - С этим Товаром смотрят - Другие смотрят сейчас - Скидка на очень популярный товар Небольшой набор товаров. Хвост. Спам – для некоторых. «Mining of Massive Datasets», 9.1.2: Leskovec, Rajaraman, Ullman (Stanford University)
  • 8. Как соблазнять?  Персональные «крючки»: Рекомендуем именно вам в данный момент: - Купить, посмотреть - Люди, похожие на вас («близкие по духу») - «Хорошая» скидка, «хорошая» цена - Полезный контент - Релевантный поиск
  • 9. С целью персональных рекомендаций – понятно. Теперь сухая конкретика и код.
  • 10. Карл… Карл, я внедрил в проекте коллаборативную фильтрацию Это очень круто, пап!
  • 11. Карл… Карл, я специалист по BigData…. Это очень круто, пап! Но я так и не понял, как и почему она работает. СОВСЕМ!!!
  • 12. Content-based рекомендации  Купил пластиковые окна – теперь их предлагают на всех сайтах и смартфоне, в Windows 10 и во сне.  Купил Toyota, ищу шины, предлагают шины к Toyota вверху списка  Vector space model, tf/idf  word2vec
  • 13. word2vec, SVD/PCA  Сжимаем размерность  «Склеиваем» синонимы  Skip-gram  Continuous bag of words (CBOW)  «Похож» на матричную факторизацию
  • 14. Коллаборативная фильтрация  Предложи Товары/Услуги, которые есть у твоих друзей (User-User)  Предложи к твоим Товарам другие, связанные с ними Товары (Item-Item): «сухарики к пиву»
  • 15. Коллаборативная фильтрация - алгоритмы  User-User: поиск похожих «в лоб» (kNN), k-d tree, LSH  Item-Item: Amazon, работает гораздо быстрее  Item-Item «плюшки» - с этим Товаром покупают  Mahout Taste (матрица в памяти)  Spark MLLib (ALS) Товары в моем профиле Их связи с другими Товарами Взвешенное среднее для предсказания моих невыраженных интересов
  • 16. Коллаборативная фильтрация – сжатие Товаров  «Единый» каталог  Склеить дубликаты  Передать «смысл» между Товарами  Улучшить качество персональных рекомендаций  Семантическое сжатие размерности, аналог матричной факторизации  Скорость  Ранжирование результатов
  • 17. Minhash  Min-wise independent permutations locality sensitive hashing scheme  Снижаем размерность  Совместима с LSH (следующий слайд) Pr[ hmin(A) = hmin(B) ] = J(A,B)  Размер сигнатуры: 50-500 simhash
  • 18. Text shingling  Shingle – «черепица»  Устойчивость к вариантам, опечаткам «Штаны красные махровые в полоску» {«штан», «таны», «аны », «ны к», «ы кра», «крас», …} «Красные полосатые штаны»
  • 19. Векторизация описания Товара  Текст: «Штаны красные махровые в полоску»  Вектор «bag of words»: [0,0,0,1,0,…0,1,0] – ~ 10000 - 1000000 элементов (kernel hack)  Minhash-сигнатура после shingling:  [1243,823,-324,12312,…] – 100-500 элементов, совместима с LSH
  • 20. Locality-Sensitive Hashing (LSH)  Вероятностный метод снижения размерности  Использовали для minhashed-векторов  Banding: b – корзины, r – элементов в корзине. P{ “Векторы совпадут хотя-бы в одной корзине” }:
  • 21. Кластеризация каталога  Apache Spark  2-3 часа, 8 spot-серверов  10-20 млн. Товаров => 1 млн. кластеров  Адекватные по смыслу кластера  Персональные рекомендации - стали в разы «лучше»  DynamoDB – хранение кластроидов
  • 22. Измерение качества персональных рекомендаций  Recall, precision  Предсказываем на «старой» модели  Смотрим фактические значения профиля – на текущей модели  Считаем recall
  • 27. Кофе или … марихуана? 1.Много хороших программистов — C++ 2.Много тестировщиков — C++ 3.Много свободного времени на разработку — C++ 4.Много сводобных ночей на отладку - C++ 5.Предметная область формализована — C++ 6.Требования не меняются - C++ 7.Иначе: java ;-)
  • 29. Apache Lucene: +/- 1.(-) Нет нормальной поддержки русского языка 2.(-) Нет русской морфологии 3.(-) Документация иногда оставляет желать лучшего 4.(-) Нет решения для 100% онлайн индексации 5.(+) Компактный индекс (гигабайты) 6.(+) Лаконичное API 7.(+) Транзакционность 8.(+) Thread-safety
  • 30. Redis 1.Профиль Пользователя: десятки тэгов 2.Стемминг Портера 3.Высокочастотные слова, tf/idf 4.Алгоритмы вытеснения тэгов 5.Куда можно развивать… (word2vec, glove, синонимы ...)
  • 32. Процессы 1.Многопоточный индексатор, java/lucene 2.Amazon Kinesis – как буффер 3.Индекс в папке на диске, вытеснение 4.Как реализован “онлайн” - выдать секрет :-) 5.Раздающий Servlet
  • 33. Цифры кратко  Тысячи запросов в секунду к сервису  >20 тысяч интернет-магазинов  Ощутимый рост конверсии – до 50-80%, зависит от размера магазина  Активное использование «С этим Товаром покупают»!?  1 сервер рекомендаций (70G ОЗУ) + небольшой кластер Spark  Уникальных профилей пользователей: ~ 100 миллионов
  • 35. API. Персональная рекомендация • https://analytics.bitrix.info/crecoms/v1_0/recoms.php?op=recommend&uid=#кука#&c ount=3&aid=#хэш_лицензии# • op=recommend • uid – кука Пользователя • aid – хэш от Лицензии • сount – число рекомендаций { "id":"24aace52dc0284950bcff7b7f1b7a7f0de66aca9", "items":["1651384","1652041","1651556"] }
  • 36. API. Похожие Товары на данный • https://analytics.bitrix.info/crecoms/v1_0/recoms.php?op=simitems&aid=#хэш_лицен зии#&eid=#id_товара#&count=3&type=combined&uid=#кука# • op=simitems • uid – кука Пользователя • aid – хэш от Лицензии • eid – ID Товара • type - view|order|combined • сount – размер выдачи
  • 37. API. Топ Товаров на сайте • https://analytics.bitrix.info/crecoms/v1_0/recoms.php?op=sim_domain_items&aid=#х эш_лицензии#&domain=#домен#&count=50&type=combined&uid=#кука# • op=sim_domain_items • uid – кука Пользователя • aid – хэш от Лицензии • domain – домен сайта • type - view|order|combined • сount – размер выдачи
  • 38. Куда развиваться  Пол, возраст, ценовая категория клиента – машинное обучение  Разные виды товаров: возобновляемые, невозобновляемые  Цена товара  Внутренние циклы (готов покупать), модели Маркова  Классификация групп лояльности, кластерный анализ  Релевантный поиск
  • 39. Спасибо за внимание! Вопросы? Александр Сербул serbul@1c-bitrix.ru Alexandr Serbul AlexSerbul