教程:客户流失 - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

教程:客户流失

您可以使用简单的 CREATE MODEL 命令导出训练数据、训练模型、导入模型以及准备 Amazon Redshift 预测函数。使用 CREATE MODEL 语句将训练数据指定为表或 SELECT 语句。

以下教程演示了使用 CREATE MODEL 命令生成的 SQL 函数创建模型并针对不同场景运行一些推理查询的端到端示例。本示例中使用的完整 SQL 脚本可参见客户活动文件

使用 Amazon Redshift ML 时,请考虑以下事项:

  • 您用于创建模型的 Amazon Redshift 集群和用于暂存训练数据和模型构件的 Amazon S3 存储桶必须位于同一 Amazon 区域。

  • 要查看或下载本文档中使用的 SQL 命令以及示例中使用的示例数据集,请执行以下操作之一:

    • 下载 SQL 命令客户活动文件鲍鱼文件

    • 将 Amazon CLI 用于 Amazon S3,运行以下命令。您可以使用自己的目标路径。

      aws s3 cp s3://redshift-downloads/redshift-ml/tutorial-scripts/redshift-ml-tutorial.sql /target/path aws s3 cp s3://redshift-downloads/redshift-ml/customer_activity/customer_activity.csv /target/path aws s3 cp s3://redshift-downloads/redshift-ml/abalone_xgb/abalone_xgb.csv /target/path

以下查询通过创建表 customer_activity 并使用示例数据集摄取数据来准备训练数据。

DROP TABLE IF EXISTS customer_activity; CREATE TABLE customer_activity ( state varchar(2), account_length int, area_code int, phone varchar(8), intl_plan varchar(3), vMail_plan varchar(3), vMail_message int, day_mins float, day_calls int, day_charge float, total_charge float, eve_mins float, eve_calls int, eve_charge float, night_mins float, night_calls int, night_charge float, intl_mins float, intl_calls int, intl_charge float, cust_serv_calls int, churn varchar(6), record_date date); COPY customer_activity FROM 's3://redshift-downloads/redshift-ml/customer_activity/' REGION 'us-east-1' IAM_ROLE 'arn:aws:iam::XXXXXXXXXXXX:role/Redshift-ML' DELIMITER ',' IGNOREHEADER 1;

以下示例使用来自加利福尼亚大学 Machine Learning 数据集存储库的公开客户流失预测数据集。移动运营商拥有客户最终流失和继续使用该服务的历史记录。该示例使用此历史信息通过一个称为训练的过程来构建一个移动运营商流失的机器学习模型。训练模型后,任意客户的配置文件信息将用于训练模型。然后,Amazon Redshift 将此信息传递给模型,并使用模型来预测该客户是否会流失。此示例的数据集可参见客户活动文件

CREATE MODEL customer_churn_auto_model FROM (SELECT state, account_length, area_code, total_charge/account_length AS average_daily_spend, cust_serv_calls/account_length AS average_daily_cases, churn FROM customer_activity WHERE record_date < '2020-01-01' ) TARGET churn FUNCTION ml_fn_customer_churn_auto IAM_ROLE 'arn:aws:iam::XXXXXXXXXXXX:role/Redshift-ML'SETTINGS ( S3_BUCKET 'your-bucket' );

SELECT 查询将创建训练数据。TARGET 子句指定哪一列是 CREATE MODEL 用于学习如何预测的机器学习“标签”。其余列是用于预测的功能(输入)。在此示例中,训练数据为在 2020-01-01 之前拥有账户的客户提供功能状态、account_length、area_code、平均每日支出和平均每日案例。为了简化起见,客户在订阅的同一天取消订阅的可能性将被忽略。目标列“流失”表示客户是否仍具有有效会员资格或已暂停会员资格。

CREATE MODEL 分析输入功能与“活动”结果之间的相关性,以便使用客户的年龄、邮政编码、支出和案例等输入来提供预测客户是否处于活动状态的模型。

在后台,Amazon Redshift 默认使用 Amazon SageMaker Autopilot 进行训练。特别是,Amazon Redshift 会在客户指定的 Amazon S3 存储桶中安全地导出训练数据。如果不指定 KMS_KEY_ID,则预设情况下,会使用服务器端加密 SSE-S3 对数据进行加密。

如果您采用服务器端加密加 Amazon KMS 托管密钥 (SSE-KMS) 对您的输入进行加密,则添加以下权限:

{ "Effect": "Allow", "Action": [ "kms:Encrypt" "kms:Decrypt" ] }

有关 SageMaker 角色的更多信息,请参阅 Amazon SageMaker 开发人员指南中的 Amazon SageMaker 角色

您还需要提供 IAM_ROLE 角色来访问 Amazon S3 和 Amazon SageMaker。首先,您准备好所有的要求。然后,您可以使用 CREATE MODEL 语句。此时,Amazon Redshift 可以立即开始使用 Amazon SageMaker 来训练和调整适合您的问题类型的最佳模型。

CREATE MODEL 命令在异步模式下运行,并在将训练数据导出到 Amazon S3 时返回。模型训练和编译的其余步骤可能很耗时,并会在后台继续进行。在此操作过程中,您可以使用 STV_ML_MODEL_INFO 检查训练的状态。训练完成后,您可以使用 SHOW MODEL 检查模型信息。

有关简单使用 CREATE MODEL 的语法和功能的摘要,请参阅简单 CREATE MODEL

导出训练数据后,CREATE MODEL 命令将完成。在后台继续进行训练。要检查训练的状态,请使用 STV_ML_MODEL_INFO

select schema_name, model_name, model_state from stv_ml_model_info; schema_name | model_name | model_state -------------+---------------------------+-------------------------------------- public | customer_churn_auto_model | Train Model On SageMaker In Progress (1 row)

在 model_state 变为 Model is Ready 后,ml_fn_customer_churn_auto 功能变得可用。Amazon Redshift 使用此功能进行预测。预测函数的输入参数对应于功能的类型。在此示例中,ml_fn_customer_churn_auto 为状态输入 varchar、为 account_length 输入整数、为区域代码输入整数、为月平均支出输入小数以及为月平均案例输入小数。预测函数的输出类型与 CREATE MODEL 语句的 TARGET 列相同。

要执行预测,只需在 SQL 查询中使用预测函数即可进行推理。例如,以下查询预测最近注册的客户是否因为 2020-01-01 经历了流失。

SELECT phone, ml_fn_customer_churn_auto( state, account_length, area_code, total_charge/account_length , cust_serv_calls/account_length ) AS activeFROM customer_activity WHERE record_date > '2020-01-01';

预测函数可以出现在任何 SQL 结构中,包括 PROJECTION、WHERE、HAVING、GROUP BY 和 ORDER BY 子句中。

以下示例对不同用户案例使用上一个 CREATE MODEL 示例的推理函数,其中 Amazon Redshift 预测来自不同州的买家中因 2020-01-01 产生的流失者和非流失者的比例。

WITH inferred AS (SELECT state, ml_fn_customer_churn_auto( state, account_length, area_code, total_charge/account_length, cust_serv_calls/account_length )::varchar(6) AS active FROM customer_activity WHERE record_date > '2020-01-01' ) SELECT state, SUM(CASE WHEN active = 'True.' THEN 1 ELSE 0 END) AS churners, SUM(CASE WHEN active = 'False.' THEN 1 ELSE 0 END) AS nonchurners, COUNT(*) AS total_per_state FROM inferred GROUP BY state ORDER BY state;