使用 Amazon SageMaker 内置表格算法 LightGBM、CatBoost、TabTransformer 和 AutoGluon-Tabular PlatoBlockchain 数据智能进行客户流失预测。垂直搜索。人工智能。

使用 Amazon SageMaker 内置表格算法 LightGBM、CatBoost、TabTransformer 和 AutoGluon-Tabular 进行流失预测

亚马逊SageMaker 提供了一套 内置算法, 预训练模型预建的解决方案模板 帮助数据科学家和机器学习 (ML) 从业者快速开始训练和部署 ML 模型。 这些算法和模型可用于有监督和无监督学习。 它们可以处理各种类型的输入数据,包括表格、图像和文本。

客户流失是从电信到银行等众多公司都面临的问题,在这些公司中,客户通常会流失给竞争对手。 保留现有客户而不是获取新客户符合公司的最佳利益,因为吸引新客户的成本通常要高得多。 移动运营商有客户继续使用服务或最终流失的历史记录。 我们可以使用移动运营商流失的历史信息来训练 ML 模型。 训练完这个模型后,我们可以将任意客户的个人资料信息(与我们用来训练模型的个人资料信息相同)传递给模型,并让它预测这个客户是否会流失。

在这篇文章中,我们训练和部署 最近发布的四种 SageMaker 算法—LightGBM、CatBoost、TabTransformer 和 AutoGluon-Tabular — 在流失预测数据集上。 我们用 SageMaker 自动模型调整 (超参数优化工具)为每个模型找到最佳超参数,并在保持测试数据集上比较它们的性能以选择最佳超参数。

您还可以将此解决方案用作模板来搜索最先进的表格算法集合,并使用超参数优化来找到最佳的整体模型。 您可以轻松地将示例数据集替换为您自己的数据集,以解决您感兴趣的实际业务问题。如果您想直接跳转到我们在本文中介绍的 SageMaker SDK 代码,可以参考以下内容 示例Jupyter笔记本.

SageMaker 内置算法的优势

在为特定类型的问题和数据选择算法时,使用 SageMaker 内置算法是最简单的选择,因为这样做有以下主要好处:

  • 低编码 – 内置算法需要很少的编码即可开始运行实验。 您需要提供的唯一输入是数据、超参数和计算资源。 这使您可以更快地运行实验,并减少跟踪结果和代码更改的开销。
  • 高效且可扩展的算法实现 – 内置算法具有跨多个计算实例的并行化,并且 GPU 支持开箱即用,适用于所有适用算法。 如果您有大量数据可用于训练模型,大多数内置算法都可以轻松扩展以满足需求。 即使您已经有一个预训练的模型,在 SageMaker 中使用它的推论并输入您已经知道的超参数可能仍然更容易,而不是移植它并自己编写训练脚本。
  • 用户评论透明 – 您是生成的模型工件的所有者。 您可以采用该模型并将其部署在 SageMaker 上,以获得多种不同的推理模式(查看所有 可用的部署类型) 和简单的端点扩展和管理,或者您可以将它部署在您需要的任何地方。

数据可视化和预处理

首先,我们收集客户流失数据集。 这是一个相对较小的数据集,包含 5,000 条记录,其中每条记录使用 21 个属性来描述未知美国移动运营商的客户资料。 属性范围从客户居住的美国州,到他们拨打客户服务的电话数量,到他们为白天通话计费的费用。 我们试图预测客户是否会流失,这是一个二元分类问题。 以下是这些特征的一个子集,标签作为最后一列。

以下是每列的一些见解,特别是所选特征的汇总统计信息和直方图。

使用 Amazon SageMaker 内置表格算法 LightGBM、CatBoost、TabTransformer 和 AutoGluon-Tabular PlatoBlockchain 数据智能进行客户流失预测。垂直搜索。人工智能。

然后我们对数据进行预处理,将其拆分为训练集、验证集和测试集,并将数据上传到 亚马逊简单存储服务 (亚马逊S3)。

表格算法的自动模型调整

超参数控制我们的底层算法如何操作并影响模型的性能。 这些超参数可以是基于神经网络的模型的层数、学习率、权重衰减率和 dropout,也可以是树集成模型的叶数、迭代和最大树深度。 为了选择最佳模型,我们将 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 参数 ContinuousParameterIntegerParameter 为了这:

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算法上超参数调优的过程和之前一样,虽然我们需要检索ID下的模型工件 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模型的超参数调优过程和之前一样,虽然我们需要检索ID下的模型工件 pytorch-tabtransformerclassification-model 并更改超参数的范围选择。

我们也改变训练 instance_typeml.p3.2xlarge. TabTransformer 是最近源自亚马逊研究的模型,它使用 Transformer 模型将深度学习的力量带入表格数据。 为了以有效的方式训练这个模型,我们需要一个 GPU 支持的实例。 有关详细信息,请参阅 将深度学习的力量带入表格中的数据.

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_idautogluon-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
AUC 0.9629 0.9907 0.989 0.9979

结论

在这篇文章中,我们训练了四种不同的 SageMaker 内置算法,以低编码工作量解决客户流失预测问题。 我们使用 SageMaker 自动模型调整来找到训练这些算法的最佳超参数,并在选定的流失预测数据集上比较它们的性能。 您可以使用相关的 样本笔记本 作为模板,用您自己的数据集替换数据集以解决您想要的基于表格数据的问题。

确保在 SageMaker 上尝试这些算法,并查看示例笔记本,了解如何使用其他可用的内置算法 GitHub上.


关于作者

使用 Amazon SageMaker 内置表格算法 LightGBM、CatBoost、TabTransformer 和 AutoGluon-Tabular PlatoBlockchain 数据智能进行客户流失预测。垂直搜索。人工智能。黄鑫博士 是 Amazon SageMaker JumpStart 和 Amazon SageMaker 内置算法的应用科学家。 他专注于开发可扩展的机器学习算法。 他的研究兴趣是自然语言处理、表格数据的可解释深度学习以及非参数时空聚类的稳健分析。 他在 ACL、ICDM、KDD 会议和皇家统计学会:A 系列期刊上发表了多篇论文。

使用 Amazon SageMaker 内置表格算法 LightGBM、CatBoost、TabTransformer 和 AutoGluon-Tabular PlatoBlockchain 数据智能进行客户流失预测。垂直搜索。人工智能。若昂·莫拉 是 Amazon Web Services 的 AI/ML 专家解决方案架构师。 他主要专注于 NLP 用例并帮助客户优化深度学习模型训练和部署。 他还是低代码 ML 解决方案和 ML 专用硬件的积极支持者。

时间戳记:

更多来自 AWS机器学习