Прогнозирование оттока клиентов за определенный период времени

#machine-learning #scikit-learn #classification #data-science #analytics

#машинное обучение #scikit-learn #классификация #наука о данных #аналитика

Вопрос:

В имеющемся у меня наборе данных есть 2 столбца среди прочих. Существует service_start_date и service_end_date подписка. Целевой столбец — has_churned это логическое значение.

Как мне приступить к разделению поездов / значений / тестов? Должно ли это зависеть от времени? Например, все данные до 3 месяцев являются обучением, а последние 3 месяца — проверкой или они могут быть случайными?

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

Ответ №1:

Похоже, ваша конечная цель — предсказать отток на заданный временной горизонт. В этой задаче у вас будет моментальный снимок данных в момент времени t и используйте его для прогнозирования. Вам необходимо воспроизвести эти условия в вашем обучающем наборе данных, но давайте сначала поговорим о том, что такое «зависит от времени».

A) Как зависит время вашего набора данных?

Ваш набор данных развивается со временем, но я не думаю, что время здесь должно быть зависимой переменной. Действительно, что может (непрерывное) время рассказать вам о вероятности оттока клиентов? Вы можете преобразовать свой набор данных, чтобы устранить зависимость от времени. Вот как:

  • Я думаю, что когда вы используете service_start_date и service_end_date , что действительно важно для прогнозирования оттока, так это знать о продолжительности обслуживания. Вы можете выполнить некоторую разработку функций и service_start_date time_from_subscription постепенно заменять service_end_date time_to_end_of_subscription их . Однако это подразумевает, что вы создаете набор данных на заданную дату, я расскажу об этом в части B. Однако будьте осторожны, если ваша услуга имеет только одну возможную продолжительность, у вас будут избыточные функции, поэтому в этом случае вам следует сохранить только одну.
  • Если время может повлиять на вашу подписку на обслуживание, вы, конечно, можете закодировать это по-другому. Например, если ваш сервис является пробной версией Amazon Prime, люди могут подписаться на него, чтобы воспользоваться им в рождественский период, а затем отказаться. Это можно закодировать, включив месяц в качестве категориальной переменной.

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

Б) Как создать обучающий набор данных?

Если возможно преобразовать набор данных, как описано чуть выше, будет проще создать набор данных поезда. Чтобы имитировать задачу прогнозирования, вам придется использовать одну или несколько дат для создания снимков данных и объединения этих снимков в один обучающий набор данных (фактически вы будете делать выборку с течением времени). Переменные time_from_subscription time_to_end_of_subscription и, возможно, другие будут отличаться в зависимости от снимков. Цель также будет другой, вам придется использовать что-то вроде churn_in_three_months вместо have_churned .

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

Последнее замечание: если вы используете стратегию, которую я описал здесь, вам следует быть осторожным с оценочными показателями, которые вы будете использовать. Действительно, предположим, что вы прогнозируете churn_in_three_months=True , но в обучающем наборе churn_in_three_months=False данных . Если клиент действительно отказался через три месяца и одну неделю, это все еще плохой прогноз?