Всем привет!

Меня зовут Лидия, я тимлид небольшой DataScience-команды в QIWI.

Мы с ребятами довольно часто сталкиваемся с задачей исследования потребностей клиентов, и в этом посте мне бы хотелось поделиться мыслями о том, как начать тему с сегментацией и какие подходы могут помочь разобраться в море неразмеченных данных.

Кого сейчас удивишь персонализацией? Отсутствие персональных предложений в продукте или сервисе уже кажется моветоном, и мы ждем те самые, отобранные только для нас, сливки везде – от ленты в Instagram до личного тарифного плана.

Однако, откуда берется тот самый контент или предложение? Если вы впервые погружаетесь в темные воды машинного обучения, то наверняка столкнетесь с вопросом – с чего начать и как выявить те самые интересы клиента. Чаще всего при наличии большой базы пользователей и отсутствии знаний об оных возникает желание пойти по двум популярным путям:

1. Разметить вручную выборку пользователей и обучить на ней модель, которая позволит определять принадлежность к этому классу или классам – в случае мультиклассового таргета.

Вариант неплохой, но на начальном этапе может заманить в ловушку – ведь мы еще не знаем, какие в принципе сегменты у нас есть и насколько они будут полезны для продвижения новых продуктовых фич, коммуникаций и прочего. Не говоря уже о том, что ручная разметка клиентов – дело достаточно затратное и иногда непростое, ведь чем больше у вас сервисов, тем большее количество данных нужно просмотреть для понимания, чем живет и дышит этот клиент. Большая вероятность, что получится нечто такое:



2. Обжегшись на варианте #1, часто выбирают вариант unsupervised-анализа без обучающей выборки.

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

Это тоже может быть полезно в случае, если вы хотите разделить вашу аудиторию на крупные группы и затем изучать каждую, либо выделить ядро и отстающие по продуктовым метрикам сегменты.

Например, в двумерном пространстве полезный результат может выглядеть следующим образом — сразу видно, какие кластеры стоит исследовать более детально.



Но чем больше метрик вы использовали для кластеризации, тем сложнее будет интерпретировать результат. И те самые предпочтения клиента все еще покрыты тайной.

Что же делать, вот вопрос? В QIWI мы не раз ломали голову над этой дилеммой, пока не пришли к любопытной модели, навеянной этой статьей. Среди прочих кейсов в статье рассказывалось о решении от Константина Воронцова для выделения латентных паттернов поведения пользователей банковских карт на базе библиотеки BigARTM.

Суть такова – транзакции клиента представлялись как набор слов и затем из полученной текстовой коллекции, где документ = клиенту, а слова = MCC-кодам (merchant category код, международная классификация торговых точек), выделялись текстовые тематики при помощи одного из инструментов Natural Language Processing (NLP) — тематического моделирования .

В нашем исполнении pipeline выглядит так:



Звучит абсолютно естественно – если мы хотим понять, чем и как живет наша аудитория, почему бы и не представить действия, которые клиенты совершают внутри нашей экосистемы, как историю, ими рассказанную. И составить путеводитель по тематикам этих историй.

Несмотря на то, что концепция выглядит изящно и просто, на практике при реализации модели пришлось столкнуться с несколькими проблемами:

  1. наличием выбросов и аномалий в данных и, как следствие, смещением тематик в сторону категорий покупок клиентов с большим оборотом,
  2. правильным определением числа топиков N,
  3. вопросом валидации результатов (возможно ли это в принципе?)

Для первой проблемы решение нашлось довольно легко – все крупные клиенты были разделены простейшим классификатором на «ядро» и «звезд» (см. картинку выше) и уже каждый из кластеров обрабатывался как отдельная текстовая коллекция.

А вот второй и третий пункт заставили задуматься – действительно, как валидировать результаты обучения без обучающей выборки? Конечно, есть метрики качества модели, но, кажется, что их недостаточно – и именно поэтому мы решили сделать очень простую вещь – проверить результаты на тех же исходных данных.

Выглядит эта проверка следующим образом: результатом классификации является набор тематик, например, вот такой:



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



И эту проверку удобно реализовать в виде дашборда – заодно у вас появится наглядный материал для генерации продуктовых гипотез – кому кэшбэк на авиабилеты, а кому скидку на кофе.

А еще в коллекции для тематического моделирования можно добавить не только транзакционные события, но и мета информацию из других моделей, тематики обращений в клиентскую поддержку и многое другое. Или использовать в качестве категориальных фич для supervised-алгоритмов – например, моделей предсказания оттока и прочее.

Конечно, в таком подходе есть свои нюансы – например, коллекция обрабатывается как bag of words и порядок покупок не учитывается, но его вполне можно компенсировать использованием N грамм или расчетом тематических меток на каждый значимый период жизни клиента (каждый месяц, например). Однако, сама идея читабельной и интерпретируемой истории о клиентах, комбинации NLP и других моделей кажется нам очень привлекательной.

А как вам эта тема? С какими сложностями или радостями сегментации сталкивается ваша data science команда? Будет интересно узнать ваше мнение.

Комментарии (11)


  1. sav6622
    13.08.2019 11:42

    Вы бы с помощью Bigdata с мошенничеством бы поборолись, потому как похоже идет в основном через Ваши виртуальные карты. Выуживаю из мошенников в ВК, когда те прикидываются продавцами в разных группах и просят внести предоплату на Ваши вирт.карты, хотя говорят что Альфовские…


  1. gofat
    13.08.2019 12:22

    Не понял, при чем тут рекомендации?
    Это сегментирование аудитории и кластерный анализ.


    1. equinoxmoon Автор
      13.08.2019 12:27

      Для хороших рекомендаций в первую очередь важно понимать свою аудиторию. И первым шагом к построении рекомендательной системы или бонусных программ может быть как раз сегментация клиентской базы — у нас именно такой подход отлично сработал для карточных продуктов.


      1. gofat
        13.08.2019 15:11

        Замечание не в том, что это никак не соотносится, а в том, что есть отдельный тип задач, связанный именно с рекомендательными системами. И ваша статья больше про сегментацию и предварительный анализ данных, чем про рекомендации.

        То есть я не говорю, то статья плохая. Скорее название вводит в заблуждение.


        1. equinoxmoon Автор
          13.08.2019 15:53

          Здравое замечание, в следующий раз продумаю заголовок лучше)
          К вопросу сегментации — как вам мысль про интерпретируемые тематические кластеры?
          Мне кажется, про это мало кейсов в узких датасаенс сообществах, да и статей тоже, как и в целом про unsupervised кластеризацию.

          Возможно, в будущем еще немного расскажу про другие, не ML подходы, которые удачно работают для анализа клиентов (графовые, марковские цепи), если это будет интересно.


          1. gofat
            14.08.2019 13:22

            При «ручном» анализе вполне себе неплохой подход. Помогает сгенерировать гипотезы. Но это не обязательно тематическое моделирование, может быть другой способ кластеризации.
            При автоматизации выплывают не столь приятные минусы — со временем может меняться набор кластеров + параметры подбирать сложно.

            Статей немного, но не то, чтобы их совсем не было. Просто этот подход несколько нестабильный, т.к. в итоге он сильно зависит от последующей интерпретации пользователем.


            1. equinoxmoon Автор
              14.08.2019 14:42

              Со стабильностью на удивление оказалось неплохо — уже полтора года пользуемся этой моделью, и дополнительного тюнинга практически не требуется. Возможно тут помогает тот факт, что у нас уже стабильная аудитория и кардинальные изменения не часто случаются.
              По поводу последующей интерпретации — долго размышляли, как это сделать и минимизировать в итоге пришли к хранению не только самих меток, но и матрицы «топик — слово — » вероятность" — это позволяет отбирать тематики простым селектом.

              Но да — я согласна, что здесь одна из главных фишек — генерация гипотез.


  1. Amistad
    13.08.2019 13:47

    Да уж, столкнулся я с вашей «персонализацией» и «поиском аномалий».

    У меня Qiwi заблокировал кошелек с 1200. Ничего криминального они предъявить не смогли, просто у их СБ «есть подозрения».
    Ни финансирования ИГИЛ, ни финансирования Навального у меня не было, лишь покупки на Али. Qiwi тупо блокировал меня за частую смену IP адресов (я пользуюсь Opera VPN и Opera Turbo).
    У меня был абсолютно легальный анонимный базовый статус без верификации и это меня устраивало. А теперь qiwi незаконно ТРЕБУЮТ сделать полную верификацию и предоставить:
    – Договор с сотовым оператором
    – Фото с паспортом в руках
    – Экономическое обоснование операций
    Иначе через месяц они начнут списывать 0,5% в день от МОИХ 1200.


    1. alex_dikov
      15.08.2019 09:44

      Ну конечно, так же сложно понять, что Киви это БАНК, который действует по строгим указаниям БАНКА РОССИИ, которые придумывают это в своих мраморных чертогах.
      Это как в школе когда-то, то. Васька рядом с тобой курил, а от мамы получаешь ты — за подозрения.

      Лидия писала про крутое, рабочее решение. А все вот эти претензии «бедняг» в комментах необоснованны. Вас предупреждали: как на сайте, так и в правилах, на которые вы согласились при регистрации.


  1. Andriljo
    14.08.2019 13:11

    Пусть клиент — это документ, а мсс код — это токен. Тогда вы можете использовать unsupervised подход который заложен в word2vec. Обучить mcc2vec эмбеддинги и ранжировать документы по cosine distance, просто суммаризацией токенов как среднаа mcc2vec в документе или же тфидф взешено. Попробуйте.


    1. equinoxmoon Автор
      14.08.2019 14:47

      Да, тоже хороший вариант, спасибо! Похожую тему делали по обращением от клиентов, группировки получались очень юзабельные.
      И пожалуй, было бы интересно сравнить два результата — в чем будет разница в смысловом плане и в плане простоты реализации.