Оценщики TensorFlow (или API tf.estimator) можно использовать для разработки модели повышения градиента с использованием деревьев решений.

Модель Gradient Boosted Trees используется здесь для прогнозирования случаев отмены отеля. В частности, анализируется вклад выбранных функций в число случаев отмены бронирования как на локальном, так и на глобальном уровне.

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

В примерах, проиллюстрированных в этой статье, используется шаблон из руководства Gradient Boosted Trees: понимание модели, авторы которого (авторское право 2019, авторы TensorFlow) предоставили доступ под лицензией Apache 2.0.

Предварительная обработка данных

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

fc = tf.feature_column
CATEGORICAL_COLUMNS = ['MarketSegment', 'DepositType', 'ArrivalDateMonth']
NUMERIC_COLUMNS = ['LeadTime', 'RequiredCarParkingSpaces', 'ArrivalDateYear', 'ArrivalDateWeekNumber', 'ArrivalDateDayOfMonth']

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

Параметры модели

Модель определяется следующим образом:

params = {
  'n_trees': 50,
  'max_depth': 3,
  'n_batches_per_layer': 1,
  # You must enable center_bias = True to get DFCs. This will force the model to
  # make an initial prediction before using any features (e.g. use the mean of
  # the training labels for regression or log odds for classification when
  # using cross entropy loss).
  'center_bias': True
}
est = tf.estimator.BoostedTreesClassifier(feature_columns, **params)
# Train model.
est.train(train_input_fn, max_steps=100)
# Evaluation.
results = est.evaluate(eval_input_fn)
clear_output()
pd.Series(results).to_frame()

Результаты модели

Вот результаты модели.

Прогнозируемые вероятности

Кривая ROC

AUC достаточно высока и составляет 80%. Отзыв ниже на 55% — это означает, что из всех отмененных бронирований в наборе данных H2 — модель правильно идентифицирует 55% из них. Точность выше на 74%, что ожидаемо, поскольку большинство бронирований не отменяются, и клиент выполняет их.

Локальная интерпретируемость

Как упоминалось ранее, вклад направленных функций (DCF) используется для определения влияния каждой функции на отмену бронирования отеля.

Как подробно описано в Учебнике TensorFlow:

Sum of DFCs + bias == probabality

Вот диаграмма с подробным описанием функций:

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

Из этих диаграмм видно, что функция MarketSegment значительно снизила вероятность отмены.

В частности, бронирование, сделанное через оффлайновые туристические агентства (Offline TA/TO), особенно ассоциировалось со сниженной вероятностью отмены, что указывает на то, что этот сегмент рынка может представлять особый интерес для отелей.

Глобальная интерпретируемость

1. Важность функций на основе усиления

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

Вот важность функций в порядке усиления в этом случае.

MarketSegment, LeadTime, RequiredCarParkingSpaces и DepositType оцениваются как важные характеристики, определяющие, будет ли клиент отменять свой отель. бронирование или нет.

2. Средние абсолютные DCF

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

3. Важность функции перестановки

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

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

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

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

Вывод

Это было введение в использование классификатора Gradient Boosting Classifier в TensorFlow для решения проблемы классификации, в частности, для прогнозирования вероятности того, что клиент отменит бронирование отеля.

Приведенный выше анализ показал:

  • Различия между локальной и глобальной интерпретируемостью
  • Настройка классификатора повышения градиента с помощью tf.estimator
  • Методы оценки важности функции

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

Отказ от ответственности. Эта статья написана на условиях «как есть» и без каких-либо гарантий. Он был написан с целью дать обзор концепций науки о данных и никоим образом не должен интерпретироваться как профессиональный совет.

использованная литература