Меня зовут Лидия, я тимлид небольшой DataScience-команды в QIWI.
Мы с ребятами довольно часто сталкиваемся с задачей исследования потребностей клиентов, и в этом посте мне бы хотелось поделиться мыслями о том, как начать тему с сегментацией и какие подходы могут помочь разобраться в море неразмеченных данных.
Кого сейчас удивишь персонализацией? Отсутствие персональных предложений в продукте или сервисе уже кажется моветоном, и мы ждем те самые, отобранные только для нас, сливки везде – от ленты в Instagram до личного тарифного плана.
Однако, откуда берется тот самый контент или предложение? Если вы впервые погружаетесь в темные воды машинного обучения, то наверняка столкнетесь с вопросом – с чего начать и как выявить те самые интересы клиента. Чаще всего при наличии большой базы пользователей и отсутствии знаний об оных возникает желание пойти по двум популярным путям:
1. Разметить вручную выборку пользователей и обучить на ней модель, которая позволит определять принадлежность к этому классу или классам – в случае мультиклассового таргета.
Вариант неплохой, но на начальном этапе может заманить в ловушку – ведь мы еще не знаем, какие в принципе сегменты у нас есть и насколько они будут полезны для продвижения новых продуктовых фич, коммуникаций и прочего. Не говоря уже о том, что ручная разметка клиентов – дело достаточно затратное и иногда непростое, ведь чем больше у вас сервисов, тем большее количество данных нужно просмотреть для понимания, чем живет и дышит этот клиент. Большая вероятность, что получится нечто такое:

2. Обжегшись на варианте #1, часто выбирают вариант unsupervised-анализа без обучающей выборки.
Если оставить за бортом шутки про эффективность kmeans, то можно отметить один важный момент, объединяющий все методы кластеризации без обучения – они просто позволяют вам объединить клиентов на основании близости по выбранным метрикам. Например, количеству покупок, числу дней жизни, балансу и другому.
Это тоже может быть полезно в случае, если вы хотите разделить вашу аудиторию на крупные группы и затем изучать каждую, либо выделить ядро и отстающие по продуктовым метрикам сегменты.
Например, в двумерном пространстве полезный результат может выглядеть следующим образом — сразу видно, какие кластеры стоит исследовать более детально.

Но чем больше метрик вы использовали для кластеризации, тем сложнее будет интерпретировать результат. И те самые предпочтения клиента все еще покрыты тайной.
Что же делать, вот вопрос? В QIWI мы не раз ломали голову над этой дилеммой, пока не пришли к любопытной модели, навеянной этой статьей. Среди прочих кейсов в статье рассказывалось о решении от Константина Воронцова для выделения латентных паттернов поведения пользователей банковских карт на базе библиотеки BigARTM.
Суть такова – транзакции клиента представлялись как набор слов и затем из полученной текстовой коллекции, где документ = клиенту, а слова = MCC-кодам (merchant category код, международная классификация торговых точек), выделялись текстовые тематики при помощи одного из инструментов Natural Language Processing (NLP) — тематического моделирования .
В нашем исполнении pipeline выглядит так:

Звучит абсолютно естественно – если мы хотим понять, чем и как живет наша аудитория, почему бы и не представить действия, которые клиенты совершают внутри нашей экосистемы, как историю, ими рассказанную. И составить путеводитель по тематикам этих историй.
Несмотря на то, что концепция выглядит изящно и просто, на практике при реализации модели пришлось столкнуться с несколькими проблемами:
- наличием выбросов и аномалий в данных и, как следствие, смещением тематик в сторону категорий покупок клиентов с большим оборотом,
- правильным определением числа топиков N,
- вопросом валидации результатов (возможно ли это в принципе?)
Для первой проблемы решение нашлось довольно легко – все крупные клиенты были разделены простейшим классификатором на «ядро» и «звезд» (см. картинку выше) и уже каждый из кластеров обрабатывался как отдельная текстовая коллекция.
А вот второй и третий пункт заставили задуматься – действительно, как валидировать результаты обучения без обучающей выборки? Конечно, есть метрики качества модели, но, кажется, что их недостаточно – и именно поэтому мы решили сделать очень простую вещь – проверить результаты на тех же исходных данных.
Выглядит эта проверка следующим образом: результатом классификации является набор тематик, например, вот такой:

Здесь питоновский список – это набор самых вероятных ключевых MCC-категорий покупок для данной темы (из матрицы «слово – тематика»). Если посмотреть отдельно на покупки в категории airlines and air carriers, вполне логично, что клиенты с темой «путешественники» будут составлять основную долю ее пользователей.

И эту проверку удобно реализовать в виде дашборда – заодно у вас появится наглядный материал для генерации продуктовых гипотез – кому кэшбэк на авиабилеты, а кому скидку на кофе.
А еще в коллекции для тематического моделирования можно добавить не только транзакционные события, но и мета информацию из других моделей, тематики обращений в клиентскую поддержку и многое другое. Или использовать в качестве категориальных фич для supervised-алгоритмов – например, моделей предсказания оттока и прочее.
Конечно, в таком подходе есть свои нюансы – например, коллекция обрабатывается как bag of words и порядок покупок не учитывается, но его вполне можно компенсировать использованием N грамм или расчетом тематических меток на каждый значимый период жизни клиента (каждый месяц, например). Однако, сама идея читабельной и интерпретируемой истории о клиентах, комбинации NLP и других моделей кажется нам очень привлекательной.
А как вам эта тема? С какими сложностями или радостями сегментации сталкивается ваша data science команда? Будет интересно узнать ваше мнение.
Комментарии (11)
gofat
13.08.2019 12:22Не понял, при чем тут рекомендации?
Это сегментирование аудитории и кластерный анализ.equinoxmoon Автор
13.08.2019 12:27Для хороших рекомендаций в первую очередь важно понимать свою аудиторию. И первым шагом к построении рекомендательной системы или бонусных программ может быть как раз сегментация клиентской базы — у нас именно такой подход отлично сработал для карточных продуктов.
gofat
13.08.2019 15:11Замечание не в том, что это никак не соотносится, а в том, что есть отдельный тип задач, связанный именно с рекомендательными системами. И ваша статья больше про сегментацию и предварительный анализ данных, чем про рекомендации.
То есть я не говорю, то статья плохая. Скорее название вводит в заблуждение.equinoxmoon Автор
13.08.2019 15:53Здравое замечание, в следующий раз продумаю заголовок лучше)
К вопросу сегментации — как вам мысль про интерпретируемые тематические кластеры?
Мне кажется, про это мало кейсов в узких датасаенс сообществах, да и статей тоже, как и в целом про unsupervised кластеризацию.
Возможно, в будущем еще немного расскажу про другие, не ML подходы, которые удачно работают для анализа клиентов (графовые, марковские цепи), если это будет интересно.gofat
14.08.2019 13:22При «ручном» анализе вполне себе неплохой подход. Помогает сгенерировать гипотезы. Но это не обязательно тематическое моделирование, может быть другой способ кластеризации.
При автоматизации выплывают не столь приятные минусы — со временем может меняться набор кластеров + параметры подбирать сложно.
Статей немного, но не то, чтобы их совсем не было. Просто этот подход несколько нестабильный, т.к. в итоге он сильно зависит от последующей интерпретации пользователем.equinoxmoon Автор
14.08.2019 14:42Со стабильностью на удивление оказалось неплохо — уже полтора года пользуемся этой моделью, и дополнительного тюнинга практически не требуется. Возможно тут помогает тот факт, что у нас уже стабильная аудитория и кардинальные изменения не часто случаются.
По поводу последующей интерпретации — долго размышляли, как это сделать и минимизировать в итоге пришли к хранению не только самих меток, но и матрицы «топик — слово — » вероятность" — это позволяет отбирать тематики простым селектом.
Но да — я согласна, что здесь одна из главных фишек — генерация гипотез.
Amistad
13.08.2019 13:47Да уж, столкнулся я с вашей «персонализацией» и «поиском аномалий».
У меня Qiwi заблокировал кошелек с 1200. Ничего криминального они предъявить не смогли, просто у их СБ «есть подозрения».
Ни финансирования ИГИЛ, ни финансирования Навального у меня не было, лишь покупки на Али. Qiwi тупо блокировал меня за частую смену IP адресов (я пользуюсь Opera VPN и Opera Turbo).
У меня был абсолютно легальный анонимный базовый статус без верификации и это меня устраивало. А теперь qiwi незаконно ТРЕБУЮТ сделать полную верификацию и предоставить:
– Договор с сотовым оператором
– Фото с паспортом в руках
– Экономическое обоснование операций
Иначе через месяц они начнут списывать 0,5% в день от МОИХ 1200.alex_dikov
15.08.2019 09:44Ну конечно, так же сложно понять, что Киви это БАНК, который действует по строгим указаниям БАНКА РОССИИ, которые придумывают это в своих мраморных чертогах.
Это как в школе когда-то, то. Васька рядом с тобой курил, а от мамы получаешь ты — за подозрения.
Лидия писала про крутое, рабочее решение. А все вот эти претензии «бедняг» в комментах необоснованны. Вас предупреждали: как на сайте, так и в правилах, на которые вы согласились при регистрации.
Andriljo
14.08.2019 13:11Пусть клиент — это документ, а мсс код — это токен. Тогда вы можете использовать unsupervised подход который заложен в word2vec. Обучить mcc2vec эмбеддинги и ранжировать документы по cosine distance, просто суммаризацией токенов как среднаа mcc2vec в документе или же тфидф взешено. Попробуйте.
equinoxmoon Автор
14.08.2019 14:47Да, тоже хороший вариант, спасибо! Похожую тему делали по обращением от клиентов, группировки получались очень юзабельные.
И пожалуй, было бы интересно сравнить два результата — в чем будет разница в смысловом плане и в плане простоты реализации.
sav6622
Вы бы с помощью Bigdata с мошенничеством бы поборолись, потому как похоже идет в основном через Ваши виртуальные карты. Выуживаю из мошенников в ВК, когда те прикидываются продавцами в разных группах и просят внести предоплату на Ваши вирт.карты, хотя говорят что Альфовские…