"Облачный сервис персональных рекомендаций для 20 000 магазинов — алгоритмы и технологии" Сербул Александр, 1С-Битрикс
1. Облачный сервис персональных рекомендаций
для >20 000 магазинов — алгоритмы и технологии
Александр Сербул
руководитель направления
2. О чем поговорим…
Рекомендательные сервисы – суть
Снаружи: популярные алгоритмы и техники реализации
А когда много данных…
Изнутри: как устроен наш облачный сервис «1С-Битрикс BigData»
Куда двигаться дальше
3. Персональные рекомендации – зачем?
Предсказать мысли, желания клиента
Если клиент готов – соблазнить его, привязать к себе
Не спамить клиента мусором, не раздражать
Соблазнять клиента – регулярно (рассылки, push)
1) Релевантность, 2) Разумность, 3) Вовремя, 4) Не пережать
Нас уже прослушивают:
Windows 10, Android, …
5. Как соблазнять?
Не персональные «крючки»:
- Топ продаж (best sellers)
- С этим Товаром покупают
(аксессуары)
- С этим Товаром смотрят
- Другие смотрят сейчас
- Скидка на очень популярный товар
Небольшой набор товаров. Хвост. Спам
– для некоторых.
«Mining of Massive Datasets», 9.1.2: Leskovec,
Rajaraman, Ullman (Stanford University)
8. Как соблазнять?
Персональные «крючки»:
Рекомендуем именно вам в данный
момент:
- Купить, посмотреть
- Люди, похожие на вас («близкие по
духу»)
- «Хорошая» скидка, «хорошая» цена
- Полезный контент
- Релевантный поиск
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. Коллаборативная фильтрация – сжатие Товаров
«Единый» каталог
Склеить дубликаты
Передать «смысл» между Товарами
Улучшить качество персональных рекомендаций
Семантическое сжатие размерности, аналог матричной
факторизации
Скорость
Ранжирование результатов
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 – хранение кластроидов
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
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. Куда развиваться
Пол, возраст, ценовая категория клиента – машинное
обучение
Разные виды товаров: возобновляемые,
невозобновляемые
Цена товара
Внутренние циклы (готов покупать), модели Маркова
Классификация групп лояльности, кластерный анализ
Релевантный поиск