Вообще, Amazon еще в далеком 1999 году писал о рекомендательных сервисах в своих годовых отчетах для акционеров – слово «recommendation» там появляется 10 раз. У нас в то время и интернет-магазинов толком не было. Amazon настолько крут, что статья Грега Линдена, который создавал там систему рекомендаций, «Две декады рекомендательных систем в Амазоне» [112] – одна из самых цитируемых статей, согласно сервису Google Scholar.
На меня большое впечатление произвела встреча в офисе Ozon.ru с Андреасом Вейгендом, который работал одним из ведущих аналитиков Amazon. Сейчас он преподает в Беркли и Стэнфорде, занимается консультированием гигантов e-commerce. Мне не давали покоя его слова: «Последний клик пользователя даст вам больше информации, чем вы о нем знали раньше». На тот момент я уже понимал, что социально-демографические данные ничто по сравнению с данными поведенческими. В своей статье [100] Вейгенд сказал, что наши поисковые фразы очень много говорят о нас. («We are what we search for… that a powerful compression of people’s lives is encoded in the list of their search queries».) Эта информация пригодилась мне в дальнейшем в Retail Rocket для написания «краткосрочных» персональных рекомендаций.
Итак, на сайте Ozon.ru на тот момент уже были какие-то рекомендации, созданные в свое время разработчиками, и мы решили расширить их функционал. Конечно, на тот момент отличным примером реализации рекомендаций был сайт Amazon.com. Там было очень много идей – например, выводить веса рекомендаций прямо в виджете, чтобы дать понять потенциальному покупателю, какой процент людей купили рекомендованный товар. Сейчас этого функционала на сайтах Ozon.ru и Amazon.com нет, но совсем недавно я обнаружил такой пример на немецком сайте по продаже электроники thomann.de, когда искал электронные барабаны.
В тот период были сделаны или доработаны следующие типы рекомендаций:
• с этим товаром часто покупают;
• те, кто смотрел эту страницу, затем купили;
• поисковые рекомендации;
• персональные.
С алгоритмом «C этим товаром часто покупают» произошла интересная история. Алгоритм статистически в лоб плохо работает. Тогда один из разработчиков нашел статью «Коллаборативная фильтрация товар-товар» [113] того же Грега Линдена и сам реализовал «косинус» на C#, используя мультипоточное программирование. Потому что на SQL-сервере писать косинус векторов интересов клиентов то еще удовольствие. После этого опыта я и уверовал в Великий Косинус в n-мерном пространстве векторов сессий клиентов, и это пригодилось мне в будущем.
Одной из сложных задач было измерить эффективность блоков рекомендаций, но у нас был уже купленный инструмент веб-аналитики Omniture Sitecatalyst (ныне Adobe Analytics), и с помощью анализа мерчандайзинга, о котором я писал выше, мы смогли с этим справиться. Именно это вы можете увидеть на 23-м слайде моей презентации о рекомендациях на Ozon.ru [115] – презентация не потеряла своей актуальности даже спустя 10 лет. Кстати, тогда мы достигли цифры 38 % от всех добавлений в корзину через рекомендательные блоки.
На некоторое время я забросил рекомендации, пока не оказался в Wikimart.ru – тогда поездка в офис Netflix и рассказ Эрика Колсона об их технологиях сподвигли меня на полную смену технологий. На самом деле Wikimart.ru это было не нужно, все мои старые наработки успешно работали и на базах данных. Но именно Hadoop на тот момент открыл для меня границы невозможного – масштабирование вычислений вплоть до тысячи компьютеров одновременно. Мне не нужно было переписывать алгоритмы, ускорять их – достаточно было просто добавить еще компьютеров в кластер. Примерно через два года, в октябре 2012-го, я написал текст, оригинал которого представлен ниже.
Сервис рекомендаций для интернет-магазинов
Цель
Создать простой и быстрый облачный сервис рекомендаций товаров, который можно встраивать на сайт магазина без вмешательства во внутреннюю архитектуру сайта.
Монетизация
Магазины могут платить по следующей схеме в порядке приоритета:
• оплата за заказы. Есть идея использовать анализ мерчандайзинга для точного определения покупки рекомендованного товара;
• оплата за клики;
• оплата за допсервисы, такие как предоставление персональных рекомендаций в рассылки или офлайн-данные по рекомендациям.
Типы рекомендаций
Сервис может предоставлять следующие типы рекомендаций:
• поисковые рекомендации (внешний и внутренний поиск);
• наиболее популярные товары;
• товарные рекомендации (После просмотра купили, С этим товаром часто покупают);
• персональные рекомендации на сайте и в рассылках.
Техническое описание
Сервис должен быть разделен на четыре абсолютно независимых блока:
• сервис будет собирать данные на сайте интернет-магазина с помощью JS-трекеров. Данные логируются на отдельные серверы;
• отдельно скачиваются данные (если возможно) по наличию товаров в магазине, то есть обычные yml-файлы;
• раз в сутки или чаще данные обрабатываются при помощи MapReduce. Рассчитываются рекомендации и помещаются в БД или файлы;
• отдельный веб-сервис выдает рекомендации на сайте магазина. Важно: нужно показывать только те товары, которые есть в наличии в магазине.
Внедрение
Типовое внедрение должно включать установку JS-кода на сайт:
• трекера JS для сбора данных. Если установлен Google Analytics, то отдача важных событий на сайте (транзакция, добавление в корзину и т. д.);
• сниппета, который будет тянуть данные из веб-сервисов.
Это была полностью законченная идея создания сервиса рекомендаций для любого числа магазинов. В ноябре 2012-го на конференции ко мне подошел Николай Хлебинский и предложил делать такой сервис. Самое интересное, что моего текста он до этого не видел, но его заинтересовала моя презентация [115], а летом, за пару месяцев до этого, он писал мне письма с вопросами о моих наработках, которые я оставлял без ответа, потому что не хотел раскрывать свои идеи. Но наша встреча была вопросом времени и Колиного упорства. Следующим шагом мы образовали партнерство, расписали наши доли и подписали простое соглашение между собой: в итоге Николай Хлебинский становился генеральным директором компании, Андрей Чиж техническим директором, а я директором по аналитике. Я до конца декабря уже сделал первые алгоритмы, начальные строчки которых были написаны в фудкорте ТЦ «Гагаринский» в Москве. За восемь месяцев до этого у меня родилась дочь – я шел гулять с коляской, брал с собой раскладную табуретку и писал код на планшете, сидя на улице в мороз. А уже в марте 2013-го мы запустились [116]. Мы знали, что параллельно с нами идет разработка похожего проекта crossss.ru, и хотели запуститься до них – кто первый встал, того и тапки. И нам это удалось. В то время партнеры Retail Rocket хорошо дополняли друг друга, каждый занимался своим делом и делал его на отлично, а через какое-то время мы получили инвестиции от Impulse VC – я бы рекомендовал всем хорошим проектам обращаться к ним за инвестициями.