文章图片
文章图片
市场营销是金融领域的一个重要方向,在机构发展新客户的过程中,不容忽视老用户的流失情况。假如获得一个新客户的成本是保留一个老客户的成本的5倍,那么将其客户流失率降低5%,其利润就可能增加25%以上。
在本文中,我们将利用无服务器架构工作流,用于数据分析,模型部署,批量推理,从而实现提前发现可能的流失客户,及时维护避免流失。
文章图片
想要了解更多亚马逊云科技最新技术发布和实践创新,敬请关注在上海、北京、深圳三地举办的2021亚马逊云科技中国峰会!点击图片报名吧~
方案概述
本文将以一个常见的使用案例,通过 Amazon Step Functions Data Science SDK创建基于无服务器架构的工作流,过程如下:
1.使用Amazon Glue进行ETL工作,生成样本数据集
2.使用Amazon SageMaker部署本地训练好的模型,用于机器学习推理
下图演示了上述Amazon Step Functions无服务器架构工作流:
文章图片
后续操作使用了下列亚马逊云科技服务:
- Amazon Step Functions
https://www.amazonaws.cn/step...
在Amazon Step Functions Data Science SDK
诞生前,只能使用基于JSON的Amazon States Language定义Amazon Step Functions;但现在可以借助此SDK使用Python代码轻松创建、执行和可视化Amazon Step Functions工作流。
- Amazon Step Functions Data Science SDK
https://docs.amazonaws.cn/zh_...
Amazon SageMaker可为开发人员和数据科学家提供构建、训练和部署不同类型机器学习模型时所需的工具。
- Amazon SageMaker
https://www.amazonaws.cn/sage...
- Amazon Glue
https://www.amazonaws.cn/glue/
该场景的使用的算法为XGBoost(eXtreme Gradient Boosting) ,它是一种监督式学习算法, 尝试将一组较简单且较弱模型的一系列估计值结合在一起,从而准确地预测目标变量,可以用来处理回归、分类(二进制和多类)和排名问题。利用XGBoost预测客户是否会流失,以及早进行干预。
1.创建Jupyter Notebook
1.1 创建Amazon SageMaker 笔记本实例,部署模型

文章图片
1.2 创建一个笔记本实例,类型选择t2.medium。选择或者创建一个IAM角色(IAM Role) 1.3 其他部分选择默认选项,点击创建(Create)

文章图片
1.4 在笔记本创建完成后,打开Jupyter,选择New,新建一个ipynb,选择内核为conda_python3 2. 使用Amazon Step Functions Data Science SDK创建和管理工作流
2.1 安装和加载所有必需的模块

文章图片
2.2 按照代码中的注释要求,替换使用您自己的 S3 bucket/prefix 后面需要将数据上传到该项目的Amazon S3存储桶,用作训练模型的数据和Model Artifact的存储

文章图片
2.3 按照代码中的注释要求,替换使用您自己的 S3 bucket/prefix 2.4 创建一个Role附加到Amazon Step Functions 关联的策略如下所示,可以根据实际使用的服务调整策略,并将策略附加到创建的Role

文章图片
2.5 设置执行的Role 为确保Amazon SageMaker可以顺利运行相关的任务,这里获取笔记本实例的执行角色(创建Amazon SageMaker 笔记本实例的时候已经创建/选择的角色)。同理Amazon Step Functions顺利运行的前提也是要有相应的执行角色,可参考上图中角色的关联资源。

文章图片
3. 验证模型
3.1 安装和加载所有必需的模块 因为需要使用joblib来加载模型,需要使用sklearn版本为0.22.1。

文章图片
3.2 读取样本数据 样本数据上传到Notebook后,可以看到共有1000行74列数据(列没有显示完),包括主键(cust_id)和用户按照时间维度统计的交易金额、在线换手率金额、在线赎回笔数等信息。

文章图片
3.3 加载模型,返回预测标签 利用逻辑回归进行客户流失率建模,使用sklearn拆分测试集和训练集,提供回归的xgboost模型。
本文中的模型已在本地训练好,在Notebook中使用joblib加载模型。

文章图片
4. 准备环境工作(执行一次)
4.1 打包容器&推送容器到ECR

文章图片
编辑Dockerfile,准备镜像。
这个过程可能需要进行很多次,因为不可避免地要修改Dockerfile或者某类程序以使得它们可以正常工作。
建议使用官方镜像文件,在此基础上添加组件,国内镜像仓库地址参考如下链接:
https://docs.amazonaws.cn/sag...
在cn-north-1下使用sklearn的训练镜像和推理镜像的路径为:
450853457545.dkr.ecr.cn-north-1.amazonaws.com.cn

文章图片

文章图片
在拉取公共镜像之前,需要做基本身份验证

文章图片
推送镜像到自有ECR镜像仓库

文章图片
4.2 上传模型文件到S3 我们需要将本地已经训练好的模型放到之前创建的s3存储桶,prefix前缀是对象名称前的完整路径。
比如一个对象model.tar.gz,
存储路径BucketName/Project/Demo/model.tar.gz,
则前缀是BucketName/Project/Demo/

文章图片

文章图片
4.3 推理脚本

文章图片
4.3.1 打包代码并上传到s3

文章图片
4.4 创建Amazon SageMaker模型对象 下图中的image_uri为4.1步骤中指定容器镜像地址,model_uri为4.2步骤中指定模型的s3路径,transform_script为4.3步骤中创建的推理脚本,code_uri为4.3.1步骤中上传在s3的代码路径。

文章图片
5. 批量转换(模型推理)
5.1 使用Amazon SageMaker Batch Transform 要获得整个数据集的推理结果,可以使用批处理变换。使用批处理转换,可以使用训练好的模型和数据集创建批处理转换作业,这些数据必须存储在Amazon S3中。
- Amazon SageMaker Batch Transform
https://docs.amazonaws.cn/sag...
批量转换管理获取推理所需的所有计算资源,并在批处理转换作业完成后将其删除。
5.1.1 输出结果整合输入id

文章图片
指定model_name,实例的数量和机型

文章图片
6. 使用Data Science SDK创建Amazon Step Functions Step
6.1 创建Glue Step,指定glue job name 下图中名为glue-demo-job-0223的Glue job是已经创建好的作业,其目的是定期生成需要推理的样本数据。

文章图片
6.2 创建Batch Transform Step,指定job name和model_name

文章图片
6.3 串联上述的步骤 导入fields模块,更改attrs属性,本文中需要更改glue和Amazon SageMaker对应的Step
(1)把resource: “arn:aws:states:::glue:startJobRun.sync”
替换为resource: “arn:aws-cn:states:::glue:startJobRun.sync”
(2)把resource: “arn:aws:states:::sagemaker:createTransformJob.sync”
替换为resource:”arn:aws-cn:states:::sagemaker:createTransformJob.sync”

文章图片

文章图片
7. 运行上述workflow,指定workflow name
7.1 操作步骤 新建名为MyInferenceRoutine01的工作流

文章图片
生成图示

文章图片
创建和执行workflow,可以看到图示不同的颜色代表不同的状态

文章图片

文章图片
可以列出失败的events,正在执行的workflow和执行成功的workflow

文章图片

文章图片

文章图片
正常执行完成后的图示:

文章图片
7.2 生成的文件 最后在s3对应的文件夹下,可以看到生成的推理文件:

文章图片
客户ID和对应的分数,可以看到,分数越低的客户流失的可能性会更高。

文章图片
8. 总结
本文讨论的是使用Amazon Step Functions Data Science SDK,从数据ETL,到模型部署,再到批量推理,创建一个基于无服务器架构的工作流。对于业务端的数据科学家来讲,这些步骤都可以在Notebook中完成,而且可以通过Amazon Step Functions监控每个任务的运行状态和日志记录,最终实现整个流程的自动化,减少数据科学家的人工重复工作,提高生产开发效率。本文涉及的示例代码下载链接:
https://github.com/hlmiao/sag...
参考资料 [1] amazon-step-functions-data-science-sdk-python
https://github.com/aws/aws-st...
[2] Amazon Step Functions Data Science SDK – Hello World
https://sagemaker-examples.re...
[3] Build a machine learning workflow using Step Functions and SageMaker
https://sagemaker-examples.re...
[4] Using the SageMaker Python SDK
https://sagemaker.readthedocs...
本篇作者

文章图片
缪翰林
亚马逊云科技解决方案架构师
负责基于亚马逊云科技的方案咨询,设计和架构评估。在运维,DevOps方面有丰富的经验,目前侧重于大数据领域的研究。
【使用Amazon Step Functions Data Science SDK创建基于无服务器架构的工作流】

文章图片
王世帅
亚马逊云科技机器学习产品技术专家
负责基于亚马逊云科技的机器学习方案的咨询与设计,对于机器学习应用等有浓厚的兴趣和热情,参与了多个客户的机器学习项目。
推荐阅读
- AI|Seq2Seq中的Attention和self-attention
- bert-modeling代码学习
- 机器学习-推荐系统中基于深度学习的混合协同过滤模型
- bert-create_pretraining_data代码学习
- 机器学习常见评价指标 -- 混淆矩阵 & Precision(精确度) & Recall(召回率) & Accuracy(准确度)
- 使用Amazon SageMaker部署CVAT AI自动图像标注系统
- 基于Amazon Machine Learning Bot 的 Named-entity Recognition 快速解决方案
- 在亚马逊云科技Marketplace上的SaaS架构设计——如何支持多产品使用单一账户中心
- Amazon DeepRacer训练日志分析范例与强化学习Reward Function设计
- Amazon Marketplace上的SaaS架构设计 ——如何支持跨多账户对接