Что такое предсказания отток

Прогнозирование оттока клиентов со scikit-learn

Показатель оттока клиентов – бизнес-термин, описывающий насколько интенсивно клиенты покидают компанию или прекращают оплачивать товары или услуги. Это ключевой показатель для многих компаний, потому что зачастую приобретение новых клиентов обходится намного дороже, чем удержание старых (в некоторых случаях от 5 до 20 раз дороже).

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

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

В то же время, моделирование оттока клиентов находит широкое применение и в других областях. Например, казино используют прогнозные модели, чтобы предсказать идеальные условия в зале, позволяющие удержать игроков в Блэкджек за столом. Аналогично, авиакомпании могут предложить клиентам, у которых есть жалобы, заменить их билет на билет первого класса. Это далеко не весь список.

В этой статье мы рассмотрим моделирование оттока клиентов с помощью Python.

Постойте, не уходите!

Оказывается, для уменьшения оттока клиентов требуются существенные ресурсы. Специалисты звонят клиентам, находящимся в «зоне риска», и мотивируют их продолжать сотрудничество.

Собрать команду таких специалистов – задача не из легких. Они должны работать слажено и уметь реагировать на широкий спектр жалоб. Главное здесь – точный таргетинг на основании возможной причины ухода. Мероприятия по удержанию должны «бить прямо в цель» и соответствовать ожидаемой прибыли, которую принесет клиент. Согласитесь, потратить $1 000 на удержание клиента, не собиравшегося уходить, было бы нерационально.

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

Джон Форман (John Forman) из компании MailChimp написал по этому поводу следующее:

«Я работаю в индустрии email-маркетинга в компании MailChimp.com. Мы помогаем компаниям рассылать информационные письма их клиентам, и каждый раз, когда кто-то использует термин «взрывная массовая рассылка» («e-mail blast»), маленькая частичка меня умирает.

Почему? Потому что электронные почтовые ящики больше не являются «черными ящиками», в которые вы словно забрасываете светошумовые гранаты. Нет, с помощью email-маркетинга (как и в случае многих других форм онлайн-взаимодействия, таких как твиты, публикации на Facebook и кампании на Pinterest) предприятия получают отклик о вовлечении аудитории на индивидуальном уровне, анализируя клики, онлайн-покупки, обмен информацией в социальных сетях и т.д. Эти данные не являются шумом. Они характеризуют ваших клиентов. Но для непосвященных, эта информация может казаться непонятным языком, например, греческим или эсперанто».

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

Мы рассмотрим простой пример – как использовать библиотеки Python для предсказания оттока клиентов и применить данное решение для оптимизации работы команды специалистов по их удержанию.

Набор данных

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

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

Читайте также:  Предсказания для россии до 2050 года

Out ⌈2⌉:

В этой статье мы будем использовать достаточно простую статистическую модель, поэтому пространство признаков почти полностью соответствует тому, что вы видите выше. Код, представленный ниже, просто исключает не интересующие нас столбцы и преобразует строковые значения в булевы значения (поскольку модели не очень хорошо работают со строковыми значениями «yes» и «no»). Остальные числовые значения остаются без изменений.

Одно небольшое замечание. Для многих предикторов важна относительная величина признаков, даже если их масштабы различны. Например, количество очков, которое баскетбольная команда набирает за игру, естественно, будет на несколько порядков больше, чем отношение количества выигранных матчей к их общему числу. Но это не означает, что второй признак в 100 раз менее значителен. Объект StandardScaler позволяет решить эту проблему при помощи нормализации, приводя значение каждого признака к диапазону от 1,0 до -1,0, предотвращая тем самым неправильное поведение моделей.

Отлично, теперь у нас есть пространство признаков «X» и набор целевых значений «y». Вперед, к прогнозам!

Насколько хороша ваша модель?

Выразить, протестировать, повторить. Процесс реализации машинного обучения может быть каким угодно, но только не статичным. Всегда есть возможность создать новые признаки, использовать новые данные, применить новые классификаторы, у каждого из которых есть специфические параметры, доступные для настройки. И после каждого изменения крайне важно иметь возможность получить ответ на вопрос: «Действительно ли новая версия лучше предыдущей?» Каким же образом это можно реализовать?

В данной статье мы будем использовать перекрестную проверку (cross validation). Перекрестная проверка позволяет избежать переобучения (обучение и тестирование прогнозов на одних и тех же данных), обеспечивая при этом эффективное прогнозирование для каждого набора данных. Это реализуется путем систематического сокрытия различных подмножеств обучающего набора данных во время обучения моделей. После завершения обучения каждая модель тестируется на том подмножестве данных, которое было скрыто от нее при обучении. Таким образом имитируются различные наборы данных для обучения и тестирования. Если все сделано правильно, прогнозы будут «объективными».

Вот как это реализуется с помощью библиотеки scikit-learn.

Мы решили сравнить три различных алгоритма: метод опорных векторов (support vector machine, SVM), случайный лес (random forest) и метод k ближайших соседей (k-nearest neighbors, KNN). Ничего особенного здесь нет, просто подвергаем каждый алгоритм перекрестной проверке и определяем, как часто классификатор предсказывает правильный класс.

Случайный лес победил, не так ли?

Точность (precision) и полнота (recall)

Метрики не являются идеальными формулами, которые всегда выставляют высокие оценки хорошим моделям и низкие оценки плохим моделям. В сущности, они выражают некоторое «мнение» относительно эффективности модели, а человек уже самостоятельно должен делать выводы об адекватности оценки. Проблема с метрикой «правильность» (accuracy) заключается в том, что результаты не обязательно эквивалентны. Если классификатор спрогнозирует уход клиента, но клиент останется, – это не очень хорошо, но простительно. Однако если классификатор предскажет, что клиент не уйдет, я не стану предпринимать никакие действия, а клиент все же уйдет – это уже действительно плохо.

Мы используем еще одну встроенную в scikit-learn функцию для создания матрицы ошибок (confusion matrix). Матрица ошибок – это способ визуализации прогнозов классификатора, представляющий собой таблицу, демонстрирующую распределение прогнозов для данного класса. Ось X представляет истинные классы (ушел клиент или нет), а ось Y представляет классы, предсказанные моделью (прогнозы моего классификатора относительно возможного ухода клиента).

Важным вопросом является следующий: «Каково отношение количества правильно спрогнозированных уходов к общему количеству фактических уходов?» Эта метрика имеет название «полнота» (recall). По диаграммам видно, что случайный лес превосходит остальные алгоритмы по данному показателю. Притом, что было 483 фактических случая ухода клиентов (значение «1»), 330 прогнозов оказались правильными. Следовательно, «полнота» для случайного леса составляет примерно 68% (330/483 ≈ 2/3), что значительно лучше, чем результат метода опорных векторов (≈ 50%) или метода k ближайших соседей (≈ 35%).

Читайте также:  Ванга предсказание все тома

Другой важный вопрос описывает метрику под названием «точность» (precision): «Каково отношение количества правильно спрогнозированных уходов к общему количеству спрогнозированных уходов?» Случайный лес снова превосходит остальные алгоритмы и демонстрирует «точность» около 93% (330 из 356). Метод опорных векторов немного позади – 87% (235 из 269). Метод k ближайших соседей на последнем месте – около 80%.

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

Мыслить категориями вероятностей

В области принятия решений часто предпочтительнее опираться на вероятность, чем на обычную классификацию. Действительно, в таких высказываниях, как «Вероятность дождя завтра – 20%» или «Около 55% кандидатов успешно сдают экзамен калифорнийской ассоциации адвокатов» содержится намного больше информации, чем в таких высказываниях, как «Завтра не будет дождя» или «Вероятно, вы сдадите экзамен». Предсказание вероятности ухода также позволяет нам оценить ожидаемую прибыль от клиентов и потери от их ухода. К какому из клиентов следует обратиться первым делом, к тому, который платит $20 000 в год и имеет риск ухода 80%, или к тому, который платит $100 000 в год и имеет риск ухода 40%? Сколько средств необходимо потратить на каждого из них?

Мы слегка отклоняемся от области своей специализации, но чтобы получить ответы на эти вопросы, необходим немного другой подход к прогнозированию. Библиотека scikit-learn позволяет легко перейти к вероятностям. Три моих модели имеют функцию predict_proba(), встроенную в объекты их классов. Ниже представлен тот же код перекрестной проверки всего лишь с несколькими измененными строками.

Насколько хорошо хорошее?

Определить, насколько хорош предиктор, который оперирует вероятностями вместо классов, немного труднее. Допустим, мы предсказываем, что вероятность дождя завтра 20%, но при этом не можем пережить все возможные исходы. Дождь либо идет, либо нет.

В этом случае помогает то, что предикторы делают не один прогноз, а более 3 000 прогнозов. Таким образом, каждый раз, когда мы предсказываем, что событие произойдет в 20% случаев, мы можем узнать, как часто это событие происходит на самом деле. В следующем фрагменте кода библиотека Pandas помогает мне сравнить прогнозы, сделанные с помощью случайного леса, с фактическими исходами.

Out ⌈8⌉:

Случайный лес предсказал, что 75 клиентов имеют вероятность ухода, равную 0,9, и в реальности эта группа имеет показатель

Калибровка (calibration) и дискриминация (discrimination)

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

Вы, наверное, обратили внимание на две прямые, начерченные с помощью функции stat_function().

Красная линия представляет идеальный прогноз для данной группы, т.е. случай, когда предсказанная вероятность ухода клиентов равна фактической частоте данных исходов. Зеленая прямая представляет базовую вероятность ухода. Для этого набора данных она составляет около 0,15.

Смысл калибровки можно выразить следующим образом: «События, предсказанная вероятность которых составляет 60%, должны происходить в 60% случаев». Для всех клиентов, для которых я прогнозирую риск ухода в диапазоне от 30% до 40%, фактический показатель ухода должен составлять около 35%. В графическом выражении это дает возможность оценить, насколько прогнозы близки к красной линии.

Дискриминация дает представление о том, насколько прогнозы далеки от зеленой линии. Почему это важно?

Читайте также:  Предсказание ванги от бога или нет

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

В scikit-learn данные метрики не реализованы, поэтому мне пришлось сделать это самостоятельно. Ради всеобщего блага я не привожу в этой статье математику и код. Уравнения взяты из публикации Yaniv, Yates, Smith «Measures of Discrimination Skill in Probabilistic Judgment» (1991). А код модуля churn_measurements, из которого импортируются функции ниже, вы можете найти на GitHub здесь.

In ⌈10⌉:

Давайте сравним модели на основе этих метрик.

In ⌈11⌉:

В отличие от предыдущих сравнений, в данном случае случайный лес лидирует не так явно. Хотя этот алгоритм способен хорошо отличать случаи с высокой и низкой вероятностью ухода клиентов, у него есть проблемы с определением точной вероятности этих событий. Например, группа, для которой случайный лес спрогнозировал показатель оттока, равный 30%, на самом деле имеет этот показатель на уровне 14%. Очевидно, что здесь еще предстоит проделать определенную работу, но мы оставим ее для вас в качестве задания.

Практическое применение модели на платформе Yhat

Пришло время загрузить модель в облако! Чтобы продемонстрировать продвинутую функциональность, создадим тестовый набор данных из исходных данных при помощи функции test_train_split() библиотеки scikit-learn. Далее адаптируем классификатор на основе метода опорных векторов для данного случая.

In ⌈12⌉:

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

Также мы добавили несколько расчетов. Во-первых, показатель «ценность клиента» (customer worth) (сумма всех платежей, взимаемых с данного клиента). В результате комбинации этой величины с вероятностью ухода клиента получается очень важный показатель: ожидаемая утраченная прибыль в случае ухода данного клиента. Здесь важную роль играет модель, дающая точные прогнозы, поскольку данные значения невозможно получить при помощи одной только классификации.

In ⌈13⌉:

Пакетный режим Yhat

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

В компании Yhat наш принцип – это поиск способов сделать data science применимой и практичной, как можно быстрее. Поскольку функция execute() принимает и возвращает тип данных DataFrame, платформа Yhat позволяет нам использовать режим пакетной оценки (batch-scoring mode). Концепция проста. Пользователь загружает csv-файл из любого места, модель выполняется, и пользователь получает на выходе csv-файл с результатами. Это означает, что данный метод оценки клиентов по риску ухода может использовать любой сотрудник моей компании, независимо от того, какими техническими навыками он обладает, насколько хорошо разбирается в машинном обучении и какой язык программирования использует, Python или R.

После входа на cloud.yhathq.com мы выбираем свою модель, и рабочее пространство принимает вид, изображенный на рисунке ниже. Загруженный csv-файл представлял собой обучающий набор данных, созданный в предыдущем разделе. На практике, это будет новый файл, экспортируемый из нашей CRM-системы, или клиентская база данных, представленная в таком же формате, как и набор данных, который мы использовали для обучения модели.

Ждем несколько секунд, когда файл с результатами готов, загружаем его по ссылке в нижней части страницы и открываем в Excel.

Готово. Более 800 клиентов проанализированы и ранжированы в несколько кликов.

Источник

Оцените статью