Skillfest 2022 — Churn Prediction — хакатон по машинному обучению, в котором была достигнута точность 91%.

Что такое прогнозирование оттока? Прогнозирование оттока – это процесс выявления потребителей, которые с наибольшей вероятностью покинут ваш бизнес или прекратят подписку на сервис, на основе того, как они используют ваш продукт.

Постановка задачи:

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

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

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

Набор данных:

Набор данных содержит около 60 000 строк из 44 функций.

Атрибуты:

Всего в наборе данных 43 переменные и целевая переменная.

  • id — Серийный номер
  • круг_ид — Код города
  • avg_revenue — средний доход, полученный пользователем
  • Onnet_MOU — Минуты использования той же сети — Голосовые вызовы
  • Offnet_MOU — Минуты использования в другой сети — Голосовые вызовы
  • roam_ic_mou — Минуты использования — Входящий вызов в роуминге
  • roam_og_mou — Минуты использования — Исходящий звонок в роуминге
  • loc_og_t2t_mou — Минуты использования — Локальные исходящие в ту же сеть
  • loc_og_t2m_mou — Минуты использования — Местные исходящие на мобильные
  • loc_og_t2f_mou — Минуты использования — Местные исходящие на стационарную линию
  • loc_og_t2c_mou — Минуты использования — Местные исходящие звонки в колл-центр
  • loc_og_mou — Минуты использования — Все местные исходящие
  • std_og_t2t_mou — Минуты использования — исходящие STD в ту же сеть
  • std_og_t2m_mou — Минуты использования — STD исходящие на мобильные
  • std_og_t2f_mou — Минуты использования — Исходящие STD на стационарную линию
  • std_og_mou — Минуты использования — Все исходящие STD
  • isd_og_mou — Минуты использования — Исходящие вызовы ISD
  • spl_og_mou — Минуты использования — Исходящие специальные номера
  • total_og_mou — Всего исходящих — MOU
  • loc_ic_t2t_mou — Минуты использования — Локальный входящий трафик в ту же сеть
  • loc_ic_t2m_mou — Минуты использования — Локальный входящий на мобильный
  • loc_ic_t2f_mou — Минуты использования — Местные входящие на стационарную линию
  • loc_ic_mou — Минуты использования — Все локальные входящие
  • std_ic_t2t_mou — Минуты использования — STD Входящие в ту же сеть
  • std_ic_t2m_mou — Минуты использования — STD Входящий на мобильный
  • std_ic_t2f_mou — Минуты использования — STD Входящие на фиксированную линию
  • std_ic_mou — Минуты использования — Все входящие STD
  • total_ic_mou — Всего входящих — MOU
  • spl_ic_mou — Минуты использования — Входящие специальные номера
  • isd_ic_mou — Минуты использования — Входящие вызовы ISD
  • total_rech_num — Среднее количество сделанных пополнений — Голос
  • total_rech_amt — Средняя сумма перезарядки — Голос
  • max_rech_amt — Максимальная сумма пополнения — Голос
  • last_day_rch_amt — Сумма последнего пополнения — Голос
  • total_rech_data — Общая сумма выполненных пополнений — Данные
  • max_rech_data — Максимальная сумма пополнений — Данные
  • count_rech_2g — Количество перезарядок 2G
  • count_rech_3g — Количество пополнений 3G
  • av_rech_amt_data — Средняя сумма пополнений — Данные
  • vol_2g_mb — объем 2G в мегабайтах
  • vol_3g_mb — объем 3G в мегабайтах
  • arpu_3g — средний доход на пользователя, использующего 3G.
  • arpu_2g — средний доход на пользователя, использующего 2G.
  • Age_network — Количество дней в этой сети
  • Сброшено — 0 означает, что клиент активен, а 1 сброшен.

Цель:

Чтобы классифицировать, уходят ли клиенты. Сброшено — 0 — клиент активен, 1 — сброшен.

Исследовательский анализ данных:

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

Кодировка:

Порядковая кодировка или кодировка метки

Данные имеют тип данных как object, так и int. Данные объектного типа преобразуются в целые числа. Итак, есть все значения int.

Дисбаланс классов:

Целевая переменная — «Churned». Два значения: «0» и «1». Распределение классов неравномерно. Многие алгоритмы обучения классификации имеют низкую точность прогнозирования для нечастого класса. Здесь значения несбалансированы, так как данные имеют 0 для 53881 и 1 для данных 6119. Мы можем создать набор данных с равным распределением классов, используя алгоритмы imblearn. Такой сбор данных позволит хорошо обобщить прогностическую модель. SMOTE (Synthetic Minority Oversampling Technique) — это хорошо известный подход к передискретизации, который отлично подходит для устранения дисбаланса классов.

Модель:

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

Результат:

Точность предсказания:

Счет в таблице лидеров: