Привет, Хабр!

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

Итак, в чем собственно состоит наш кейс? К нам обратился отдел маркетинга с задачей организации коммуникаций с клиентом посредством рассылки SMS с предложением рефинансирования ипотеки. Предполагалось рассылать предложения клиентам, которые ранее оставляли у нас заявку на ипотечный кредит (и она была одобрена), но оформление кредита по каким-то причинам не произошло. При этом необходимо было сегментировать клиентов, выделив в отдельную выборку высокоприоритетных, тем самым обеспечив более высокий уровень конверсии и экономию на рассылке SMS потенциально бесперспективным получателям.

Существует 3 подхода для решения задачи:

·         Look-alike-модель оценивает вероятность того, что клиент выполнит целевое действие. В качестве обучающей выборки используются известные позитивные объекты (в нашем случае набор клиентов, откликнувшихся на рефинансирование) и случайные негативные объекты (сэмплирование небольшой подвыборки из всех остальных клиентов, кто не откликнулся на предложение). Модель будет пытаться искать клиентов, похожих на тех, кто совершил целевое действие;

·         Response-модель оценивает вероятность того, что клиент выполнит целевое действие при условии коммуникации. В этом случае обучающей выборкой являются данные, собранные после некоторого взаимодействия с клиентами. В отличии от первого подхода, в нашем распоряжении имеются реальные позитивные и негативные наблюдения;

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

В нашем случае у нас были исторические данные по клиентам, пришедшим за рефинансированием, реальные позитивные и негативные наблюдения реакции клиентов по итогам первой маркетинговой волны рассылки SMS. Таким образом между look-alike и response  моделями мы выбрали response. Для uplift-модели нужен особый дизайн эксперимента изначально (помимо данных по клиентам из первой маркетинговой волны рассылки нужны были данные о тех клиентах, кто пришел за рефинансированием через другой канал), а такими данными мы не располагали, поэтому от uplift-моделирования мы отказались.

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

В обучающей выборке содержалось 68 000 записей, в тестовой выборке 13 000 записей.

В итоге был разработан алгоритм определения вероятности положительного отклика на взаимодействие на первом этапе воронки по набору параметров CRM-кампании. Положительным откликом предложили считать переход по ссылке внутри SMS. В качестве бизнес метрики выступала конверсия.

Поскольку выборка была сильно не сбалансирована относительно таргета (процент положительного отклика 1,8%), в качестве метрики машинного обучения была выбрана F-мера.

В качестве источников данных брались стандартные анкетные данные клиента: возраст, пол, доход, данные о месте проживания и работе, а также данные кредитной заявки: ставка, срок, дата обращения и некоторые другие параметры. Данные хранились внутри Oracle database. Данные хранились внутри Oracle database. Чтобы подружить python и oracle использовали cx_Oracle, sqlalchemy и oracle client.

Две недели ушло на создание самой модели, и примерно столько же на подготовку и обработку данных (включая предоставление необходимых данных заказчиками). Методы очистки данных заслуживают отдельной статьи, не будем останавливаться на этом детально. Отмечу лишь, что в данном случае мы обошлись стандартной обработкой с помощью pandas. Исходные данные Единого Хранилища  малопригодны для аналитических моделей в исходном виде, поэтому с ними пришлось повозиться:

  • Прошерстили исходные данные на предмет опечаток, грамматических и орфографических ошибок (Например, Образование «средне» вместо «среднее»);

  • Привели к единому виду семантические и синонимические изменения слов (Например, значения «образование техническое» и «техническое» по смыслу одно и тоже);

  • Устранили смысловые изменения (Например, в графе Семейное положение значения «не состою в браке», «холост», «не женат», «не замужем» по смыслу одно и тоже, поэтому заменили на единое гендерно-универсальное значение «не состою в браке»);

  • Заполнили пропуски данных (Например, для категориальных признаков, закодировали пропуски в виде новой переменной, а для числовых, так как использовали в качестве модели градиентный бустинг над решающими деревьями, заполнили пропуски сильно отрицательными значениями, если так поступить, то эти значения будут падать в отдельные листы при построении деревьев и соответственно обрабатываться отдельно);

  • Признаки с большим (более 85%) количеством пропусков из выборки исключили (Например, «место работы» и «тип организации», значение было заполнено только для 10% записей выборки). Стоит отметить, что существует много методов и алгоритмов заполнения пропусков, и что выбор как именно заполнить отсутствующие значения достаточно творческая задача. В нашем кейсе неплохо зашли методы, описанные выше.

Анализ и построение модели проводился в Jupiter notebook – удобное IDE на Рython, код можно писать по ячейкам и сразу выводить графики, таблицы быстро и в удобном виде.

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

Из алгоритмов для решения задачи мы выбрали градиентный бустинг над решающими деревьями Catboost из-за хорошего встроенного энкодера категориальных признаков. Отбор признаков производился на кросс-валидации с помощью permutation importance. Оптимизация параметров модели производилась с помощью пакета Hyperopt, в нём реализовано 3 алгоритма оптимизации: классический Random Search, метод байесовской оптимизации Tree of Parzen Estimators (TPE), и Simulated Annealing – метод имитации отжига. Hyperopt может работать с разными типами гиперпараметров – непрерывными, дискретными, категориальными и т.д, что является важным преимуществом этой библиотеки. Мы использовали TPE.

Финальное качество проверялось на отложенной тестовой выборке. F-мера на тесте составила ~0.11 (что мало, но ожидаемо из-за сильно ограниченного набора данных).

Графики logloss и F-меры:

На продуктив модель была запущена в виде A/B теста: сравнивалось взаимодействие с полностью случайными клиентами, а также с работой внешней моделью которая для нас представляла собой черный ящик. Применение модели на практике показали, что наша модель более качественно сегментирует клиентов, заинтересованных в предложении рефинансировать ипотеку, по результатам звонков Клиентам воронка на первом этапе конверсии выросла 2 раза по сравнению с ранее применяемыми методами.

Модель

Клиентов заинтересованных в предложении, %

Клиентов подавших заявку на рефинансирование, %

Клиентов с одобренной заявкой, %

Клиентов оформивших продукт, %

Дом.РФ

12,7%

21%

52%

40%

Внешняя модель

6,3%

29%

60%

37%

Случайная выборка

5,7%

20%

29%

35%

 

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

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


  1. Sm1le291
    25.08.2021 21:02

    А вам разве выгодно клиентам ипотеку рефинансировать?

    Или вы пытаетесь перетянуть клиентов других банков?


    1. Elen_Dor Автор
      26.08.2021 10:31

      В кейсе имеется в виду работа с лидами - т.е. с теми клиентами, кто подавал заявку нам, но в итоге ипотеку не взяли у нас. Да, мы рефинансируем клиентов других банков.