Прогнозирование оттока с помощью встроенных табличных алгоритмов Amazon SageMaker LightGBM, CatBoost, TabTransformer и AutoGluon-Tabular PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Прогнозирование оттока с помощью встроенных табличных алгоритмов Amazon SageMaker LightGBM, CatBoost, TabTransformer и AutoGluon-Tabular.

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

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

В этом посте мы обучаем и развертываем четыре недавно выпущенных алгоритма SageMaker—LightGBM, CatBoost, TabTransformer и AutoGluon-Tabular — в наборе данных прогнозирования оттока клиентов. Мы используем Автоматическая настройка модели SageMaker (инструмент для оптимизации гиперпараметров), чтобы найти лучшие гиперпараметры для каждой модели и сравнить их производительность на наборе тестовых данных, чтобы выбрать оптимальный.

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

Преимущества встроенных алгоритмов SageMaker

При выборе алгоритма для конкретного типа задач и данных использование встроенного алгоритма SageMaker является самым простым вариантом, поскольку это дает следующие основные преимущества:

  • Низкое кодирование – Встроенные алгоритмы требуют небольшого написания кода для запуска экспериментов. Единственные входные данные, которые вам необходимо предоставить, — это данные, гиперпараметры и вычислительные ресурсы. Это позволяет проводить эксперименты быстрее и с меньшими затратами на отслеживание результатов и изменений кода.
  • Эффективные и масштабируемые реализации алгоритмов – Встроенные алгоритмы обеспечивают распараллеливание нескольких вычислительных экземпляров и поддержку графического процессора прямо из коробки для всех применимых алгоритмов. Если у вас много данных для обучения вашей модели, большинство встроенных алгоритмов можно легко масштабировать в соответствии с потребностями. Даже если у вас уже есть предварительно обученная модель, все равно может быть проще использовать ее следствие в SageMaker и ввести уже известные вам гиперпараметры, чем переносить ее и писать сценарий обучения самостоятельно.
  • Прозрачность – Вы являетесь владельцем полученных артефактов модели. Вы можете взять эту модель и развернуть ее в SageMaker для нескольких различных шаблонов вывода (ознакомьтесь со всеми доступные типы развертывания) и легкое масштабирование и управление конечными точками, или вы можете развернуть его там, где вам это нужно.

Визуализация и предварительная обработка данных

Сначала мы собираем набор данных об оттоке клиентов. Это относительно небольшой набор данных, содержащий 5,000 записей, где каждая запись использует 21 атрибут для описания профиля клиента неизвестного оператора мобильной связи в США. Атрибуты варьируются от штата США, в котором проживает клиент, до количества звонков, которые он совершил в службу поддержки клиентов, до стоимости, выставленной им в счет за дневные звонки. Мы пытаемся предсказать, уйдет клиент или нет, что является проблемой бинарной классификации. Ниже приводится подмножество этих функций с меткой в ​​последнем столбце.

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

Прогнозирование оттока с помощью встроенных табличных алгоритмов Amazon SageMaker LightGBM, CatBoost, TabTransformer и AutoGluon-Tabular PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Затем мы предварительно обрабатываем данные, разделяем их на обучающие, проверочные и тестовые наборы и загружаем данные в Простой сервис хранения Amazon (Amazon S3).

Автоматическая настройка модели табличных алгоритмов

Гиперпараметры контролируют работу наших базовых алгоритмов и влияют на производительность модели. Этими гиперпараметрами могут быть количество слоев, скорость обучения, скорость затухания веса и отсев для моделей на основе нейронных сетей или количество листьев, итераций и максимальная глубина дерева для моделей ансамбля деревьев. Чтобы выбрать лучшую модель, мы применяем автоматическую настройку модели SageMaker к каждому из четырех обученных табличных алгоритмов SageMaker. Вам нужно только выбрать гиперпараметры для настройки и диапазон для каждого параметра для изучения. Дополнительную информацию об автоматической настройке модели см. Автоматическая настройка моделей Amazon SageMaker: использование машинного обучения для машинного обучения or Автоматическая настройка модели Amazon SageMaker: масштабируемая оптимизация без градиента.

Посмотрим, как это работает на практике.

СветGBM

Мы начинаем с автоматической настройки модели с помощью LightGBM и адаптируем этот процесс к другим алгоритмам. Как поясняется в посте Модели и алгоритмы Amazon SageMaker JumpStart теперь доступны через API, для обучения предварительно созданного алгоритма с помощью SageMaker SDK необходимы следующие артефакты:

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

Сначала мы извлекаем эти артефакты, которые зависят от model_id (lightgbm-classification-model в данном случае) и версия:

from sagemaker import image_uris, model_uris, script_uris
train_model_id, train_model_version, train_scope = "lightgbm-classification-model", "*", "training"
training_instance_type = "ml.m5.4xlarge"

# Retrieve the docker image
train_image_uri = image_uris.retrieve(region=None,
                                      framework=None,
                                      model_id=train_model_id,
                                      model_version=train_model_version,
                                      image_scope=train_scope,
                                      instance_type=training_instance_type,
                                      )                                      
# Retrieve the training script
train_source_uri = script_uris.retrieve(model_id=train_model_id,
                                        model_version=train_model_version,
                                        script_scope=train_scope
                                        )
# Retrieve the pre-trained model tarball (in the case of tabular modeling, it is a dummy file)
train_model_uri = model_uris.retrieve(model_id=train_model_id,
                                      model_version=train_model_version,
                                      model_scope=train_scope)

Затем мы получаем гиперпараметры по умолчанию для LightGBM, устанавливаем для некоторых из них выбранные фиксированные значения, такие как количество раундов повышения и метрика оценки данных проверки, и определяем диапазоны значений, в которых мы хотим искать другие. Используем параметры SageMaker ContinuousParameter и IntegerParameter для этого:

from sagemaker import hyperparameters
from sagemaker.tuner import ContinuousParameter, IntegerParameter, HyperparameterTuner

# Retrieve the default hyper-parameters for fine-tuning the model
hyperparameters = hyperparameters.retrieve_default(model_id=train_model_id,
                                                   model_version=train_model_version
                                                   )
# [Optional] Override default hyperparameters with custom values
hyperparameters["num_boost_round"] = "500"
hyperparameters["metric"] = "auc"

# Define search ranges for other hyperparameters
hyperparameter_ranges_lgb = {
    "learning_rate": ContinuousParameter(1e-4, 1, scaling_type="Logarithmic"),
    "num_boost_round": IntegerParameter(2, 30),
    "num_leaves": IntegerParameter(10, 50),
    "feature_fraction": ContinuousParameter(0, 1),
    "bagging_fraction": ContinuousParameter(0, 1),
    "bagging_freq": IntegerParameter(1, 10),
    "max_depth": IntegerParameter(5, 30),
    "min_data_in_leaf": IntegerParameter(5, 50),
}

Наконец, мы создаем Оценщик SageMaker, подайте его в ГиперараметрТюнери запустите задание по настройке гиперпараметра с помощью tuner.fit():

from sagemaker.estimator import Estimator
from sagemaker.tuner import HyperParameterTuner

# Create SageMaker Estimator instance
tabular_estimator = Estimator(
    role=aws_role,
    image_uri=train_image_uri,
    source_dir=train_source_uri,
    model_uri=train_model_uri,
    entry_point="transfer_learning.py",
    instance_count=1,
    instance_type=training_instance_type,
    max_run=360000,
    hyperparameters=hyperparameters,
)

tuner = HyperparameterTuner(
            tabular_estimator,
            "auc",
            hyperparameter_ranges_lgb,
            [{"Name": "auc", "Regex": "auc: ([0-9.]+)"}],
            max_jobs=10,
            max_parallel_jobs=5,
            objective_type="Maximize",
            base_tuning_job_name="some_name",
        )

tuner.fit({"training": training_dataset_s3_path}, logs=True)

Ассоциация max_jobs Параметр определяет, сколько всего заданий будет запущено в задании автоматической настройки модели, и max_parallel_jobs определяет, сколько параллельных заданий обучения должно быть запущено. Мы также определяем цель “Maximize” AUC модели (площадь под кривой). Чтобы глубже погрузиться в доступные параметры, предоставляемые HyperParameterTuner, Ссылаться на Гиперпараметртюнер.

Попробуйте образец тетради чтобы увидеть, как мы приступим к развертыванию и оценке этой модели на тестовом наборе.

CatBoost

Процесс настройки гиперпараметров алгоритма CatBoost такой же, как и раньше, хотя нам нужно получить артефакты модели под идентификатором catboost-classification-model и измените выбор диапазона гиперпараметров:

from sagemaker import hyperparameters

# Retrieve the default hyper-parameters for fine-tuning the model
hyperparameters = hyperparameters.retrieve_default(
    model_id=train_model_id, model_version=train_model_version
)
# [Optional] Override default hyperparameters with custom values
hyperparameters["iterations"] = "500"
hyperparameters["eval_metric"] = "AUC"

# Define search ranges for other hyperparameters
hyperparameter_ranges_cat = {
    "learning_rate": ContinuousParameter(0.00001, 0.1, scaling_type="Logarithmic"),
    "iterations": IntegerParameter(50, 1000),
    "depth": IntegerParameter(1, 10),
    "l2_leaf_reg": IntegerParameter(1, 10),
    "random_strength": ContinuousParameter(0.01, 10, scaling_type="Logarithmic"),
}

ВкладкаТрансформер

Процесс настройки гиперпараметров модели TabTransformer такой же, как и раньше, хотя нам необходимо получить артефакты модели под идентификатором pytorch-tabtransformerclassification-model и измените выбор диапазона гиперпараметров.

Также мы меняем обучение instance_type в ml.p3.2xlarge. TabTransformer — это модель, недавно созданная на основе исследований Amazon, которая обеспечивает возможности глубокого обучения табличных данных с использованием моделей Transformer. Чтобы эффективно обучить эту модель, нам нужен экземпляр с поддержкой графического процессора. Для получения дополнительной информации см. Применение возможностей глубокого обучения к данным в таблицах.

from sagemaker import hyperparameters
from sagemaker.tuner import CategoricalParameter

# Retrieve the default hyper-parameters for fine-tuning the model
hyperparameters = hyperparameters.retrieve_default(
    model_id=train_model_id, model_version=train_model_version
)
# [Optional] Override default hyperparameters with custom values
hyperparameters["n_epochs"] = 40  # The same hyperparameter is named as "iterations" for CatBoost
hyperparameters["patience"] = 10

# Define search ranges for other hyperparameters
hyperparameter_ranges_tab = {
    "learning_rate": ContinuousParameter(0.001, 0.01, scaling_type="Auto"),
    "batch_size": CategoricalParameter([64, 128, 256, 512]),
    "attn_dropout": ContinuousParameter(0.0, 0.8, scaling_type="Auto"),
    "mlp_dropout": ContinuousParameter(0.0, 0.8, scaling_type="Auto"),
    "input_dim": CategoricalParameter(["16", "32", "64", "128", "256"]),
    "frac_shared_embed": ContinuousParameter(0.0, 0.5, scaling_type="Auto"),
}

AutoGluon-Табулярный

В случае AutoGluon мы не проводим настройку гиперпараметров. Это сделано специально, поскольку AutoGluon фокусируется на объединении нескольких моделей с разумным выбором гиперпараметров и их укладке в несколько слоев. В конечном итоге это более эффективно, чем обучение одной модели с идеальным выбором гиперпараметров, а также дешевле в вычислительном отношении. Подробности см. AutoGluon-Tabular: надежный и точный AutoML для структурированных данных.

Поэтому мы переключаем model_id в autogluon-classification-ensembleи зафиксируйте гиперпараметр метрики оценки только на желаемом значении AUC:

from sagemaker import hyperparameters

# Retrieve the default hyper-parameters for fine-tuning the model
hyperparameters = hyperparameters.retrieve_default(
    model_id=train_model_id, model_version=train_model_version
)

hyperparameters["eval_metric"] = "roc_auc"

Вместо того, чтобы звонить tuner.fit(), мы называем estimator.fit() чтобы начать одну учебную работу.

Бенчмаркинг обученных моделей

После развертывания всех четырех моделей мы отправляем полный набор тестов в каждую конечную точку для прогнозирования и рассчитываем показатели точности, F1 и AUC для каждой (см. код в образец тетради). Мы представляем результаты в следующей таблице с важным отказом от ответственности: результаты и относительная производительность этих моделей будут зависеть от набора данных, который вы используете для обучения. Эти результаты являются репрезентативными, и хотя тенденция к более высокой производительности определенных алгоритмов основана на соответствующих факторах (например, AutoGluon интеллектуально объединяет прогнозы моделей LightGBM и CatBoost), баланс производительности может измениться при различных обстоятельствах. распространение данных.

. LightGBM с автоматической настройкой модели CatBoost с автоматической настройкой модели TabTransformer с автоматической настройкой модели AutoGluon-Табулярный
точность 0.8977 0.9622 0.9511 0.98
F1 0.8986 0.9624 0.9517 0.98
ППК 0.9629 0.9907 0.989 0.9979

Заключение

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

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


Об авторах

Прогнозирование оттока с помощью встроенных табличных алгоритмов Amazon SageMaker LightGBM, CatBoost, TabTransformer и AutoGluon-Tabular PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Доктор Синь Хуан — научный сотрудник Amazon SageMaker JumpStart и встроенных алгоритмов Amazon SageMaker. Он занимается разработкой масштабируемых алгоритмов машинного обучения. Его исследовательские интересы лежат в области обработки естественного языка, объяснимого глубокого обучения на табличных данных и надежного анализа непараметрической пространственно-временной кластеризации. Он опубликовал множество статей на конференциях ACL, ICDM, KDD и в журнале Royal Statistical Society: Series A.

Прогнозирование оттока с помощью встроенных табличных алгоритмов Amazon SageMaker LightGBM, CatBoost, TabTransformer и AutoGluon-Tabular PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.Жоао Моура является специалистом по архитектуре решений AI/ML в Amazon Web Services. Он в основном сосредоточен на примерах использования НЛП и помогает клиентам оптимизировать обучение и развертывание модели глубокого обучения. Он также является активным сторонником решений машинного обучения с низким кодом и специализированного оборудования для машинного обучения.

Отметка времени:

Больше от Машинное обучение AWS