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) — это хорошо известный подход к передискретизации, который отлично подходит для устранения дисбаланса классов.
Модель:
Проанализируйте корреляцию и постройте модель. Поскольку это задача обучения с учителем, здесь я использовал алгоритм случайного леса с настройкой гиперпараметров для построения модели. Случайный лес дает лучшую точность, чем другие алгоритмы.
Результат:
Точность предсказания:
Счет в таблице лидеров: