Я уже писал, что одно из преимуществ ML – огромная скорость по сравнению с людьми. Так вот, сервисы, подобные Amazon Mechanical Turk, позволяют использовать труд тысячи людей для решения задачи. Это может быть разметка обучающих примеров, как сделал LinkedIn, или проверка миллионов рекомендаций магазина, как делали мы, – кстати, наши задания по рекомендациям исполнители любили, они были им интересны. Поисковые системы используют такие ресурсы для проверки своей поисковой выдачи. Яндекс вывел в свет свой сервис под названием «Толока» и сделал его общедоступным.
Подобные сервисы работают следующим образом. Заказчик загружает задание и датасет к нему, пишет инструкцию, назначает цену. В датасет можно добавить контрольные примеры. Они пригодятся, чтобы отсеять халявщиков, которые могут выполнять задания быстрее, случайно щелкая по ответам. Поэтому рекомендую обязательно использовать контрольные примеры. После выполнения всех формальностей исполнители получают возможность выполнять задания и получать за это деньги. По моему мнению, заработать там сложно, но как подработка – это вполне себе вариант (вот оно, рабство XXI века – люди на службе AI). От цены за задание зависит количество откликнувшихся исполнителей.
Для каждой задачи требуется свой инструмент. Если делать собственными силами долго, не хватает данных, то сервисы наподобие «Толоки» могут стать хорошим решением. Они позволяют очень хорошо масштабировать задачу и получать результат с приемлемым качеством. Да, за это придется заплатить, но сэкономленное время может с лихвой окупиться.
В 2016 году на конференции ACM Recsys я обратил внимание, что компании Netflix и Quora не рекомендуют пользоваться распределенными системами машинного обучения [68]. Причина проста – они работают намного медленнее, чем параллельные вычисления на одной машине. Я сам столкнулся с этим, когда мы считали GBRT (Gradient Boosting Regression Tree) модель, используя наш вычислительный кластер и библиотеку MLLib в Spark. В тот момент мы пробовали это делать на одной машине, в память данные не поместились, поэтому воспользовались распределенным алгоритмом. Все бы хорошо, но он считал модель два часа. Это слишком долго, учитывая, что модель была совсем несложная. Тогда мы оптимизировали данные и попробовали посчитать на локальной библиотеке Smile на Java. Все посчиталось за пять минут.
Проблемы с распределенными алгоритмами происходят из-за медленной сетевой скорости. Различным нодам кластера приходится постоянно координироваться между собой, передавать данные и параметры по обычной локальной сети. Скорость работы с памятью примерно в 50 раз быстрее гигабитной сети, поэтому локальные вычисления на одной машине работают значительно быстрее. Да и одна машина стоит гораздо дешевле, чем использование дорогого кластера.
Recency, Frequency и Monetary
Впервые с закономерностями поведения клиентов я познакомился в книге Джима Ново [71]. Джим рассказывал в книге о не знакомом мне тогда способе сегментации RFM: Recency (давность), Frequency (частота) и Monetary (деньги).
Recency – давность какого-либо действия клиента. Для сегментации очень важно эмпирическое свойство Recency – чем меньше времени прошло с момента последней активности клиента, тем вероятней, что он повторит действие. Например, пусть Recency – это давность последнего заказа клиента. Нужно сравнить двух клиентов: у первого давность последнего заказа – 30 дней (30 дней назад он сделал свой последний заказ), у второго – 70 дней. Как вы думаете, какой клиент с большей вероятностью повторит заказ? Правильно, первый (давность – 30 дней).
Frequency – количество действий, которые совершил клиент. Для нас важно свойство Frequency – чем больше каких-либо действий совершит клиент, тем больше вероятность того, что он повторит их в будущем. В литературе и на сайтах основателей этого метода не ограничивается временной интервал, в течение которого измеряется Frequency. По своему опыту скажу, что ограничивать этот интервал нужно. Например, считать Frequency только в течение 360 дней, предшествовавших дате анализа. Пусть Frequency – количество заказов, сделанных в течение 360 дней: у первого клиента – 10 заказов, у второго клиента – 5 заказов. Понятно, что у первого клиента вероятность сделать в будущем заказ выше, чем у второго.
Monetary – сумма денег, которую потратил клиент. Здесь все, как у Frequency, – нужно постараться ограничить время, в течение которого измеряется величина; и чем больше денег было потрачено, тем больше вероятность того, что клиент вновь сделает заказ. На практике Monetary обычно не используют, так как этот показатель сильно коррелирует с Frequency. Поэтому RFM-сегментация в большинстве случаев называется RF-сегментацией.
Читать дальше
Конец ознакомительного отрывка
Купить книгу