Всем привет! Меня зовут Даша, я тимлид Data Science команды в BigData МегаФонВ этой статье мы с Егором (старший бизнес-аналитик компании GlowByte) расскажем про подход к решению задачи о персонализации тарифных планов для абонентов новой базы в рамках CVM-проекта. Поговорим о том, как с помощью ML определить оптимальные параметры тарифа для абонентов с короткой историей, и как посчитать привлекательность полученного тарифа.

Статья делится на 3 смысловых блока:

Работа с абонентской базой в рамках CVM

CVM (Customer Value Management) – это процессы и активности, направленные на максимизацию ценности клиента на каждом этапе его жизненного цикла: привлечение, развитие, удержание.

У нас в компании процесс выстроен так, что продуктовая команда отвечает за технологическое и функциональное развитие продуктов, тогда как команда CVM отвечает за их проникновение в клиентской базе, повышение лояльности и дожития клиентов. Персонализация предложений является одним из основных рычагов развития базы в CVM. Наши CVM активности укладываются в 4 основных блока (см рисунок ниже).

4 основных блока CVM активностей

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

Кому?

Новая база - это абоненты, которые недавно пришли в МегаФон (2-3 месяца с момента активации сим-карты).

Абоненты новой базы обладают следующими характерными особенностями:

  • Высокий отток и частые переходы на более дешевые тарифы

  • Простой и понятный профиль тарифа – используют тариф из актуальной доступной публичной линейки (тарифы, представленные на сайте)

  • Отсутствие дефицита на текущем тарифе как следствие невысокой утилизации пакетов минут и интернета

Что?

Персональный тарифный план - это уникальная комбинация пакетов и сервисов, подобранная под абонента.

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

  • Наполнение тарифа НЕ ХУЖЕ публичной линейки

  • Размеры пакетов зависят от текущего потребления абонента

  • Подобранные дополнительные опции и сервисы учитывают интересы абонента

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

Когда? Где? Как?

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

Пилотирование и масштабирование

Пилотный период длился 2 месяца, было запущено 4 А/Б теста. Период замера результата шел еще 3 месяца. Группы выглядили следующим образом: ЦГ - абоненты, которым мы предлагаем персональный тариф, КГ - абоненты, которые не получают никаких тарифных предложений. В качестве целевой метрики для данного кейса взяли выручку на абонента за 3 последующих месяца в ЦГ против КГ. Дополнительно отслеживались конверсия в подключение тарифа (только в ЦГ) и NPS абонентов (в обеих группах).

Гипотеза: персонализация тарифных планов с учетом потребности абонентов повысит удержание клиентов и их лояльность, и как следствие выручка в ЦГ будет выше, чем в КГ.

Важно отметить, что фактически персонализация с учетом потребности означает, что абоненту может предлагаться как более дорогой, так и более дешевый тариф (если мы видим, что абоненту было бы достаточно меньших пакетов), поэтому средний прирост выручки в ЦГ достигается не только за счет апгрейда (увеличения цены тарифа), но и увеличенного retention.

Формирование Персонального тарифа

Наша команда занимается построением моделей для персонализации тарифных планов уже более 2х лет. Базу принято разделять на новых, активных и отточных абонентов, так как различаются механики работы с каждым из сегментов и горизонт, на котором анализируется профиль и поведение абонента. Так, например, для абонентов новой базы у нас лишь несколько недель наблюдений по использованию пакетов и услуг, а профиль достаточно однородный, так как все они являются пользователями актуальной линейки тарифов (в отличие от активных абонентов с большим сроком жизни, где кол-во тарифов и их параметров исчисляется тысячами). Пайплайн, который мы опишем далее, хорошо ложится именно на работу с новой базой в силу перечисленных выше особенностей. О том, как мы работаем с базой активных и отточных мы расскажем в других статьях. 

Итак, перед нами стоит задача под каждого абонента определить наполнение и цену тарифного плана. Наполнение тарифа - это кол-во минут, ГБ, смс и дополнительные опции (например, Безлимитный интернет на социальные сети). Далее мы опишем 4 шага по формированию итогового предложения.

Дано: информация по текущему тарифу абонента, данные о его пользовании вызовами, интернетом, дополнительными опциями. Хотим: предложение по кол-ву минут, ГБ, смс и перечень дополнительных опций, которое учитывает потребление и интересы абонента.

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

Шаг 1: Кластеризация

Для начала для каждого абонента определим его место в признаковом пространстве относительно других абонентов на основе данных о том, как он пользуется пакетами (мин, ГБ, смс) и сервисами. Кластеризация, основанная на профиле потребления, позволяет нам выделить сегменты абонентов со схожим паттерном поведения. Например, это может быть сегмент с высоким или низким потреблением интернета и звонков одновременно, а может быть и комбинация низкого потребления интернета и высокого потребления минут, и наоборот. Мы предполагаем, что внутри сегмента оказываются абоненты со схожими потребностями. Скорее всего тарифы ближайших соседей данного абонента будут близки к тарифу, закрывающему его потребности.

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

Мы построили две модели кластеризации на разных типах фичей: 1) потребления 2) история использования приложений и сайтов. Почему две? Вот несколько причин:

  • Данные отличаются по своим свойствам: признаки потребления - непрерывные значения, признаки использования приложений и посещения сайтов - бинарные флаги

  • Пересечение 2х моделей позволяет получить больше кластеров: каждый кластер на признаках потребления делится на несколько, которые дополнительно будут учитывать интересы абонентов

Кластеризация абонентов по 2-м типам признаков

Итоговый кластер абонента мы получаем как конкатенацию предиктов от двух моделей. 

Шаг 2: Поиск похожих

референсная база

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

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

Шаг 3: расчет среднего тарифа

Наше основное предположение - средневзвешенный тариф по соседям есть оптимальное предложение для данного абонента с учетом его профиля потребления и интересов.

Справедливая цена

Справедливая цена - это расчетная цена тарифа по его наполнению, которая опирается на параметры текущей публичной линейки. Для расчета справедливой цены используются стоимости 1 минуты/Гб/смс по региону, полученные методом линейной регрессии. 

Мы усредняем параметры тарифа (мин, ГБ, смс, доп опции) N абонентов-соседей из рефересной базы, взвешивая на ранг схожести (rank по косинусому расстоянию), таким образом самый похожий из N абонентов рефересной базы вносит наибольший вклад в формирование тарифа для абонента новой базы. Для полученного средневзвешенного наполнения тарифа (кол-во мин, ГБ, смс) мы дополнительно рассчитываем цену по модели справедливой цены. 

Схема пайплайна подбора Персонального тарифа

Чтобы сделать предложения еще более "персональным", при подборе доп. опций мы учитываем данные из профиля абонента: 1) дополнительные опции, которые уже подключены у абонента; 2) данные по пользованию различными приложениями и сайтами. Итоговая релевантность доп опции для абонента является суммой по компонентам 3х векторов (пример расчета приведен в таблице ниже). Вектор релевантностей превращается в итоговую комбинацию предлагаемых опций после выбора ближайшего по косинусному расстоянию доступного набора.

Пример

По таблице ниже абоненту будут предложены музыка + соцсети + перенос остатков. Pre5G не войдет, так как низкая релевантность, а YouTube не войдет, т.к. нет в продукте комбинации, которая бы совмещала все 4 опции.

музыка

соцсети

перенос остатков

YouTube

pre5G

среднее по соседям

0,2

0

0,5

0,3

0,1

текущие подключения

0

1

1

0

0

трафик

1

1

0

1

0

ИТОГО

1,2

2

1,5

1,3

0,1

Шаг 4: формирование предложения

После 3го шага для каждого абонента мы получаем сырую версию персонального тарифа. Одно из основных условий финального подбора персонального тарифа - этот тариф не хуже чем предложение в публичной линейке. То есть, на самом деле, нам необходимо скорректировать сырую версию, чтобы она точно удовлетворяла этому условию. Для этого нам надо определить метрику лучше/хуже.

Публичная линейка МегаФона - это 7 тарифов, каждый с определенными размерами пакетов и ценой. Очевидно, что персональный тариф не может быть привлекательнее всех сразу, однако мы можем поставить условие, что он привлекательнее ближайшего по характеристикам тарифа. Ближайший тариф мы будем искать уже знакомым нам образом, по косинусному расстоянию между тарифами, где вектор, описывающий тариф - это кол-во мин, ГБ, смс, цена. Введем эмпирическое определение коэффициента привлекательности тарифа: 

Коэффициент привлекательности Персонального тарифа

В этой формуле мы сравниваем персональный тариф с ближайшим публичным тарифом по кол-ву мин, ГБ и цене: чем больше наполнение пакетов, и чем меньше цена, тем привлекательнее (при этом цена имеет бОльший вес, чем размеры пакетов). Если коэффициент привлекательности > 1, ура, мы можем оставить предложение как есть, но если значение <=1, нужна дополнительная корректировка. Каждое предложение корректируется по следующему алгоритму:

  1. Рассчитываем привлекательность тарифа для 2х цен: средневзвешенной и справедливой

  2. Выбираем цену, которая дает выше привлекательность

  3. Корректируем наполнения так, чтобы изменения пакетов были согласованы с изменением цены (калибруем лифты)

  4. Тарифы, которые получились дешевле, чем любой тариф на полке в регионе, меняем на самый дешевый публичный тариф в регионе

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

  • фактическое потребление мин и ГБ у абонента заведомо выше чем тот лимит, который мы ему предлагаем

  • абонент не пользуется практически мин/ГБ, а мы сильно увеличиваем лимит

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

4 шага подбора Персонального тарифа для новой базы

Что мы увидели на пилотах

Как мы уже упоминали выше, пилоты запускались в голосовом канале (обзвон оператором) на протяжении 2х месяцев. Группы были устроены следующим образом: группа А: коммуницируем предложение с Персональным тарифом, подобранным по модели; группа Б: ничего не предлагаем. Целевая метрика - выручка на абонента в последующие 3 месяца после коммуникации, вспомогательная метрика -  конверсия в принятие оффера (замеряется только для группы А, т.к. в группе Б нет коммуникации).

Уже в первые дни проведения пилота мы увидели достаточно высокую конверсию, что с точки зрения бизнеса является прокси высокой релевантности предложения. В отличие от целевой метрики (выручка), которую можно сравнить только спустя 3 месяца (период замера), конверсию и лифт цены по абонентской плате можно анализировать сразу по завершению прозвонов (т.е. через 1-2 недели, после запуска кампании).  И вот что мы увидели при анализе в первые недели после завершения пилотов:

Дешевле НЕ всегда означает привлекательнее!

Ожидания: чем ниже цена оффера по сравнению с текущим тарифом абонента, тем выше конверсии.

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

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

Распределение лифта цены на подборе НЕ равно распределению лифта среди принявших

Ожидания:

  • Среди офферов встречался рост и снижение абонентской платы, с преобладанием роста (положительный средний лифт по офферам в кампании)

  • За счет привлекательности по сравнению с публичной линейкой и грамотного учета потребности абонента, вероятность принятия оффера не зависит от того, это рост или снижение абонплаты

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

Распределение абонентов по лифту абонентской платы

В такой ситуации оставалось надеяться, что удержание клиентов скомпенсирует отрицательный средний лифт по абонентской плате и по выручке мы останемся в плюсе. Увы, анализ выручки через 3 месяца показал статзначимо отрицательную дельту в ЦГ по сравнению с КГ.

Другие key-learnings

Общий тренд: абоненты негативно реагировали на снижение пакета интернета, даже если по данным мы видим низкую утилизацию

Человеческий фактор: операторы колл-центра хуже продавали тарифы со снижением одновременно цены и пакетов, потому что это был для них новый формат

Trade-off выгодности и необходимостиоффер, который выглядит более выгодно (имеет выше коэффициент привлекательности), выигрывает по сравнению с оффером, который ближе по наполнению к необходимым размерам пакетов

А что дальше?

Пост-анализ пилотов позволил нам скорректировать эвристики по корректировки оффера на шаге 4, а также натолкнул на несколько мыслей по смене подхода к кластеризации абонентов. Сейчас у нас в работе измененная логика формирования тарифа. Ждите апдейты!