Из книги Борьба с оттоком данных Карла Голда

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

Продолжение части 1, в которой представлена ​​модель машинного обучения XGBoost и то, как ее можно использовать для прогнозирования оттока. Этот пост демонстрирует код и некоторые результаты для реальных данных. Весь код из Fighting Churn With Data можно найти по адресу https://github.com/carl24k/fight-churn. Ниже в главе 9, листинге 6, показана перекрестная проверка XGBoost для регрессии в python.

import pandas as pd 
import pickle from sklearn.model_selection 
import GridSearchCV, TimeSeriesSplit from sklearn.metrics 
import make_scorer 
import xgboost as xgb #A 
from listing_8fitlogistic_regression import prepare_data 
from listing_9fittop_decile_lift import calc_lift

def crossvalidate_xgb(data_set_path,n_test_split): 
    
    X,y = prepare_data(data_set_path,ext='',as_retention=False) #B 
    tscv = TimeSeriesSplit(n_splits=n_test_split)
    xgb_model = xgb.XGBClassifier(objective='binary:logistic') #C
    score_models = {
        'lift': make_scorer(calc_lift, needs_proba=True), 
        'AUC': 'roc_auc'
    } 
    test_params = { 
        'max_depth': [1,2,4,6], #D 
        'learning_rate': [0.1,0.2,0.3,0.4], #E 
        'n_estimators': [20,40,80,120], #F 
        'min_child_weight' : [3,6,9,12]
    } #G 

    gsearch = GridSearchCV(estimator=xgb_model,n_jobs=-1,     
                           scoring=score_models, #H 
                           cv=tscv, 
                           verbose=1, 
                           return_train_score=False, 
                           param_grid=test_params,
                           refit='AUC') #I 
    gsearch.fit(X.values,y) #J 
    result_df = pd.DataFrame(gsearch.cv_results_) #K    
    result_df.sort_values('mean_test_AUC', 
                          ascending=False,inplace=True) #L 
    save_path = data_set_path.replace('.csv', '_crossval_xgb.csv')    
    result_df.to_csv(save_path, index=False) 
    pickle_path = data_set_path.replace('.csv', '_xgb_model.pkl') #M    
    with open(pickle_path, 'wb') as fid:       
        pickle.dump(gsearch.best_estimator, fid) #N 
  • A Импортирует XGBoost, который находится в отдельном пакете
  • B Большая часть этой функции такая же, как в листинге 9.5, регрессионная перекрестная проверка.
  • C Создает объект XGBClassifier для бинарного результата
  • D Проверяет глубину дерева от 1 до 6
  • E тестирует скорость обучения от 0,1 до 0,4
  • F проверяет количество оценщиков от 20 до 120
  • G проверяет минимальный вес от 3 до 12
  • H Создает объект GridSearchCV с объектом модели XGBoost и проверяет параметры
  • I подбирает лучшую модель в соответствии с AUC после перекрестной проверки
  • J передается как значение, а не DataFrame, чтобы избежать известной проблемы с пакетом на момент написания этой статьи
  • K Переносит результаты в DataFrame
  • L Сортирует результат, чтобы сначала получить лучший AUC
  • M Создает рассол лучшего результата
  • N Лучший результат — в поле best_estimator объекта GridSearchCV.

Основные шаги

  1. Подготавливает данные
  2. Создает экземпляр модели (в данном случае модель XGBoost)
  3. Определяет используемые функции измерения точности (подъем и AUC).
  4. Определяет последовательности параметров для тестирования
  5. Передает их в объект GridSearchCV и вызывает функцию fit
  6. Сохраняет результаты (без дополнительного анализа, как при перекрестной проверке регрессии).

Одно важное и слегка тонкое различие между листингом 1 и перекрестной проверкой регрессии заключается в том, что набор данных будет создан из исходных немасштабированных метрик, и в нем не используются оценки или группы, как для регрессии. Повторное масштабирование метрик для XGBoost (или деревьев решений, как правило) бессмысленно, потому что точки отсечения в правилах также работают с метриками независимо от масштаба или перекоса. И группировка коррелированных метрик не дает никакой пользы. Фактически, это может повредить производительности модели машинного обучения этого типа. Группировка коррелированных метрик полезна для интерпретации и помогает избежать проблем, которые коррелированные метрики могут вызвать при регрессии.

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

Сравнение точности XGBoost с регрессией

Поскольку XGBoost требует гораздо больше времени для соответствия большему количеству параметров, следует ожидать, что он обеспечивает некоторое улучшение точности прогнозирования. Это ожидание подтверждается на рисунке 1, на котором сравниваются AUC и рост, достигнутые с помощью моделей регрессии и XGBoost, для данных моделирования из Fighting Churn With Data, а также для трех реальных наборов данных для компаний. Улучшение AUC колеблется от 0,02 до 0,06, и XGBoost всегда дает более точный прогноз, чем регрессия. По подъемной силе улучшение составляет от 0,1 до 0,5.

Являются ли эти улучшения значительными? Помните, что полный диапазон AUC, который вы, скорее всего, увидите при прогнозировании оттока, составляет от 0,6 до 0,8. Таким образом, максимальная AUC на 0,2 больше минимальной, и в относительном выражении улучшение AUC на 0,02 представляет собой примерно десятипроцентное улучшение с точки зрения общего возможного диапазона. Точно так же улучшение AUC на 0,05 составляет двадцать пять процентов разницы между худшим и лучшим в своем классе, и это действительно значительные улучшения. Тем не менее, прогнозирование не идеально, даже с машинным обучением. Вот почему я советую, чтобы прогнозирование оттока с помощью машинного обучения вряд ли оправдало шумиху в области машинного обучения.

ВЫВОДЫ Хотя алгоритмы машинного обучения могут давать гораздо более точные прогнозы, чем регрессионные, отток всегда сложно предсказать из-за таких факторов, как субъективность, неполная информация, редкость и посторонние факторы, влияющие на сроки оттока.

Сравнение расширенных и базовых показателей

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

Для сравнения смоделированных наборов данных социальных сетей существуют дополнительные версии команды проверки перекрестной проверки, которые выполняются на исходном наборе данных. То есть вы запускаете набор данных без дополнительных метрик или базовых метрик. Чтобы выполнить перекрестную проверку регрессии для базового набора данных метрик из Fighting Churn With Data, используйте следующее:

fight-churn/listings/run_churn_listing.py --chapter 9 --listing 5 --version 1

Это создает таблицу перекрестной проверки. Вы, вероятно, обнаружите, что максимальная точность любой модели несколько ниже для данных только с базовыми метриками по сравнению с данными с расширенными метриками. Как показано на гистограмме на рис. 2, максимальная точность, которую я получил при моделировании регрессии только с основными показателями, составила 0,63; для регрессии смоделированных данных с расширенными показателями максимальное значение AUC составило 0,75: разница 0,12. Время, потраченное на создание расширенных показателей, было потрачено не зря. На самом деле точность регрессии с расширенными метриками значительно лучше, чем у XGBoost с базовыми метриками, а дополнительные улучшения от алгоритма машинного обучения относительно невелики.

Вы также можете выполнить ту же проверку модели XGBoost, запустив вторую версию команды перекрестной проверки XGBoost со следующими аргументами:

fight-churn/listings/run_churn_listing.py --chapter 9 --listing 6 --version 1

В этом случае вы, вероятно, обнаружите, что прогнозы XGBoost немного лучше с расширенными показателями. Для моего моделирования я получил AUC 0,774, используя XGBoost только с базовыми показателями, по сравнению с 0,797 для XGBoost с расширенными показателями: улучшение, связанное с расширенными показателями, составляет 0,023.

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

  1. В первом случае точность регрессии значительно повышается за счет расширенных метрик, но XGBoost не получает никаких улучшений, и в целом XGBoost является лучшим. Это показывает, что вы не всегда можете ожидать, что расширенные показатели улучшат машинное обучение.
  2. Во втором тематическом исследовании и регрессия, и XGBoost значительно улучшены за счет добавления расширенных метрик. Точность регрессии с расширенными метриками примерно такая же, как точность XGBoost только с базовыми метриками. Точность XGBoost с расширенными метриками является самой высокой из всех на значительную величину: примерно на 0,1 больше, чем регрессия с базовыми метриками.
  3. В третьем примере регрессия с использованием расширенных метрик имеет более высокую точность, чем XGBoost без расширенных метрик. Но наивысшая точность достигается XGBoost с использованием расширенных метрик: улучшение более чем на 0,1 по сравнению с базовыми метриками и регрессией. Этот кейс больше всего похож на симуляцию социальной сети.

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

Это все для этой статьи. Если вы хотите узнать больше о книге, вы можете просмотреть ее содержание на нашей браузерной платформе liveBook здесь. Получите скидку 37% на Борьба с оттоком с помощью данных, введя fccgold в поле кода скидки при оформлении заказа на manning.com.

Первоначально опубликовано на https://freecontent.manning.com.