Создайте простую модель оттока с нуля с помощью LazyPredict

Отток - широко используемый ключевой показатель эффективности, направленный на определение скорости, с которой клиенты прекращают вести дела с организацией. Он представляет собой процент подписчиков службы, которые прекращают подписку в течение заданного периода времени. Для каждой отрасли компании могут иметь разные ставки, которые необходимо отслеживать, поскольку это может повлиять на годовой периодический доход (ARR), стоимость привлечения клиентов (CAC) и другие соответствующие KPI.

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

  • Визуализация данных;
  • Подготовка данных
  • Машинное обучение / прогнозирование.

Поехали 👇

Сначала мы импортируем библиотеки для очистки / визуализации данных, LazyPredict и SKLearn.

Набор данных, используемый в этой статье, взят из IBM («Создайте средство прогнозирования оттока клиентов с помощью Watson Studio и Jupyter Notebooks»). Он доступен на GitHub, как показано ниже. Теперь давайте посмотрим на это подробнее:

Первоначальный вид из необработанного DataFrame:

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

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

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

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

Мы почти там! Теперь давайте закончим и создадим наши манекены. В этой статье я использую функцию pd.get_dummies от Pandas.

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

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

Легкий! А теперь самое интересное: действие! Всего в трех строках мы запускаем 30 моделей машинного обучения:

Вуаля! Теперь у нас есть очень хороший обзор лучших алгоритмов для этой ситуации. Для более глубокого изучения мы рассмотрим четыре из них: AdaBoostClassifier, LogisticRegression, LinearSVC и RidgeClassifier.

На этот момент лучше присмотреться, пошагово:

Сначала мы инстанцируем модели в код, вызывая модули, которые мы импортировали в первый момент.

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

Устанавливая переменные с параметрами, мы используем метод, известный как GridSearch, с помощью которого мы можем перебирать несколько параметров, чтобы найти те, которые обладают более высокой производительностью. С помощью метода «Fit» запускается.

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

Не нужно все переписывать заново, так как это должно произойти сразу после этого.

В конце мы должны попросить модели выполнить прогноз на основе нашей зависимой переменной: оттока клиентов.

Вперед!

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

Он сообщает вам, какова вероятность того, что случайно выбранный положительный экземпляр получит более высокий рейтинг, чем случайно выбранный отрицательный экземпляр.

Наконец-то мы дошли до конца, и победителем становится…

The best performance model is Adaboost, with an AUC Score of 0.74!

Мы можем построить матрицу путаницы из AdaBoost для лучшего обзора оценок, например, Точность 0,81:

precision         recall   f1-score   support

           0       0.85      0.91      0.88      1283
           1       0.70      0.56      0.62       478

    accuracy                           0.81      1761
   macro avg       0.77      0.74      0.75      1761
weighted avg       0.81      0.78      0.81      1761

Все еще есть возможности для улучшения, например, с помощью XGBoost, большего объема данных или некоторой разработки функций. На этом все!
Следите за мной в LinkedIn через:



Спасибо за чтение!