Я получил этот набор данных через Kaggle с целью выявления факторов оттока клиентов и создания модели прогнозирования оттока клиентов.

Описательная статистика

Сначала я посмотрел на структуру набора данных, который присвоил значению telco:

Я заметил, что SeniorCitizen имеет двоичные значения, но имеет тип данных «int». Я изменил этот тип данных на factor и gsub(), чтобы заменить значения 0/1 на No и Yes соответственно. Затем я посмотрел на сводку набора данных.

Данные относительно чистые, за исключением TotalCharges, у которого 11 значений NA. Проверив значения, я заметил, что для этих значений в качестве значения Churn указано значение No. Я решил удалить эти значения NA.

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

Посмотрев на структуру и сводку данных, я создал блочную диаграмму для всех числовых атрибутов.

Эти атрибуты, кажется, не имеют выбросов, хотя TotalCharges имеет перекос влево.

Затем я нарисовал соотношение значений оттока на атрибут:

Эти графики говорят о том, что:

  • Gender, PhoneService и MultipleLines не влияют на отток.
  • По мере увеличения длительности отток клиентов увеличивается.
  • StreamingMovies и StreamingTV имеют очень похожие показатели оттока.

Зависимая переменная (Churn) имеет следующую структуру:

Эта столбчатая диаграмма показывает, что значением большинства в Отток является Нет, а значением меньшинства являетсяДа.

Обработка несбалансированных данных

Следующим моим шагом было сбалансировать данные. Это было сделано с помощью трех методов: недовыборки, передискретизации и SMOTE. Я запустил эти методы, используя пакет unbalanced в R. Ниже приведен код, который я написал для каждого метода:

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

Классификация

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

Первым шагом классификации было создание разделения поезд/тест со сбалансированными данными.

После того, как это было достигнуто, я выбрал три алгоритма: случайный лес, наивный байесовский алгоритм и метод опорных векторов (SVM).

Ниже приведены коды для каждого алгоритма.

Случайный лес:

Наивный Байес:

SVM:

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

Приведенный выше график показывает, что случайный лес дал наибольшую точность. Это говорит о том, что алгоритм Random Forest является лучшим выбором для прогнозирования значения Churn в этом наборе данных.

Ключевые результаты:

  • Телефонная связь не влияет на отток
  • Более низкие ежемесячные платежи удерживают больше клиентов
  • Те, кто платит электронным чеком, теряют больше, чем те, кто использует другие способы оплаты.
  • Random Forest обеспечивает наибольшую точность прогнозирования этого набора данных.

Спасибо за прочтение и не стесняйтесь проверить полный код на https://github.com/lanzo-siega/Telco-Customer-Churn.