Персонализируй это: как мы в QIWI работаем с рекомендациями

    Всем привет!

    Меня зовут Лидия, я тимлид небольшой 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 команда? Будет интересно узнать ваше мнение.
    QIWI
    109,36
    Ведущий платёжный сервис нового поколения в России
    Поделиться публикацией

    Похожие публикации

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

      0
      Вы бы с помощью Bigdata с мошенничеством бы поборолись, потому как похоже идет в основном через Ваши виртуальные карты. Выуживаю из мошенников в ВК, когда те прикидываются продавцами в разных группах и просят внести предоплату на Ваши вирт.карты, хотя говорят что Альфовские…
        0
        Не понял, при чем тут рекомендации?
        Это сегментирование аудитории и кластерный анализ.
          0
          Для хороших рекомендаций в первую очередь важно понимать свою аудиторию. И первым шагом к построении рекомендательной системы или бонусных программ может быть как раз сегментация клиентской базы — у нас именно такой подход отлично сработал для карточных продуктов.
            0
            Замечание не в том, что это никак не соотносится, а в том, что есть отдельный тип задач, связанный именно с рекомендательными системами. И ваша статья больше про сегментацию и предварительный анализ данных, чем про рекомендации.

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

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

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

                  Но да — я согласна, что здесь одна из главных фишек — генерация гипотез.
          0
          Да уж, столкнулся я с вашей «персонализацией» и «поиском аномалий».

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

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

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

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

            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

            Самое читаемое