场景背景
营销推荐
营销推荐能帮助企业根据其经营策略和用户历史情况, 对企业产品的目标用户进行更加精准的定位, 预估企业产品能向哪些客户进行介绍, 哪些用户的购买率更高. 这样的推荐销售不仅能节省顾客的购买成本, 机会成本, 更能免去大部分不必要环节, 极大减少企业交易费用.
在本案例中, 我们以营销推荐场景下金融银行为例, 根据某用户的具体信息 (16 个特征) 预测该用户是否会成为银行某产品的客户(1 个标签是 / 否), 以辅助银行工作人员判断是否需向该用户推荐某产品.
机器学习助力推荐策略
机器学习凭借其强大的海量数据处理能力和特征提取能力, 成为营销推荐场景下的一个有力辅助工具. 机器学习可以通过学习大量的企业客户信息, 如客户本身的信息 (年龄, 职业, 存款等) 和客户在该企业产品下的历史购买记录, 预判该用户是否是某产品的相关受众, 以帮助企业决策是否向该用户推荐某产品.
本案例采用机器学习算法 (随机森林) 解决银行场景下的营销推荐问题.
数据集介绍
原始数据集
使用的银行客户信息来自于 Kaggle 公开数据集 Bank Marketing Dataset, 该数据集记录了 11,162 位银行客户的 17 个特征(包含 1 个标签).
本案例的任务描述为: 利用机器学习算法 (随机森林) 学习银行客户历史的 16 个特征, 达到预判标签列取值的目的(某客户是 / 否会购买该产品).
数据集具体信息如下表:
数据特征列 | 取值范围 | 特征描述 | 是否需要数据预处理 |
---|---|---|---|
age | int: 18 ~ 95 | 客户年龄 | 否 |
job | string: {management、blue-collar、technician、admin、other} | 客户工作类型 | 需 String 转 Int |
marital | string: {married、single、divorced} | 客户婚配状态 | 需 String 转 Int |
education | string: {secondary、tertiary、primary、unknown} | 受教育程度 | 需 String 转 Int |
default | string: {no、yes} | 是否有信贷违约 | 需 String 转 Int |
balance | int: -6.85K - 81.2K | 银行余额 | 否 |
housing | string: {no、yes} | 是否有房贷 | 需 String 转 Int |
loan | string: {no、yes} | 是否有个人贷款 | 需 String 转 Int |
contact | string: {cellular、unknown、telephone} | 联系方式 | 需 String 转 Int |
day | int: 1 - 31 | 最近一次和客户沟通的日期:日 | 否 |
month | string: {may、aug、jul、jun、other} | 最近一次和客户沟通的日期:月 | 需 String 转 Int |
duration | int: 2 - 3.88K | 持续时长 | 否 |
campaign | int: 1 - 63 | 与客户沟通次数 | 否 |
pdays | int: -1 - 854 | 距离上一次和客户沟通过去了多久 | 否 |
previous | int: 0 - 58 | 之前与客户沟通的总次数 | 否 |
poutcome | string: {unknown、failure、success、other} | 上一次营销活动的结果 | 需 String 转 Int |
deposit(标签列) | string: {no、yes} | 营销是否成功 | 1. 需 String 转 Int2. 需删除缺失值(若有) |
数据预处理
针对源数据集 Bank Marketing Dataset, 我们需要做以下数据预处理:
因为机器学习算法只能处理 Int 型数据, 所以源数据集中所有 String 型数据需转换为 Int 型, 可用智能钛机器学习平台提供的[算法]>[机器学习算法]>[特征转换]>[StringIndexer] 实现该目的.
因为标签数据中的缺失值会直接影响分类效果, 所以需要删除标签数据中的缺失值, 可用智能钛机器学习平台提供的[算法]>[机器学习算法]>[数据预处理]>[ReplaceMissing] 实现该目的.
以上两个数据预处理的操作均可在智能钛平台实现, 工作流截图如下:
我们将从 Kaggle 下载的源数据集进行以上预处理操作, 得到处理后的数据集: bank_transfor.CSV , 用户可直接通过公共 COS 路径对该数据进行访问(作为后续工作流的输入数据).
整体流程
工作流整体流程如下:
本场景共包含 6 个环节, 分别是:
公共数据集引入
数据集切分: 训练集, 测试集
数据特征选择
将自动特征选择后的训练数据喂给随机森林模型进行训练
将自定义特征选择后的测试集喂给训练好的模型进行测试
模型评估
详细流程
数据准备
步骤目的: 将 COS 公共存储桶中该案例所需数据集 bank_transfor.CSV 引入工作流, 然后该数据集才能在工作流中被其他节点访问.
操作步骤:
在 智能钛控制台 https://tio.cloud.tencent.com/#/my 的左侧导航栏, 选择[输入]>[数据源]>[ COS 数据集] , 按住左键不释放将该节点拖入画布中
在右侧弹出的配置栏中, 修改[节点名称] 为: 历史营销数据
在右侧弹出的配置栏中, 参数配置> 算法 IO 参数> COS 数据路径复制填写的:
${ai_dataset_lib}/bank_transform.CSV
单击[是否检查数据] , 并进行关闭
右键[历史营销数据] , 选择[起点运行] , 待运行成功(耗时约 2s)
数据集切分
步骤目的: 将数据集合按指定比例划分为训练集和测试集(训练集用于训练模型参数, 测试集用于评估模型性能)
操作步骤:
在智能钛控制台的左侧导航栏, 选择[算法]>[机器学习算法]>[ 数据预处理]>[Spliter] , 并拖入画布中
完成[历史营销数据] 输出和[Spliter] 输入之间的连线(若平台已自动完成则忽略)
在右侧弹出的配置栏中, 修改 "节点名称" 为: 数据集切分
在右侧弹出的配置栏中, 各配置信息如下:
输入文件类型: CSV(该数据文件格式为. CSV)
输入数据包含 header 信息: 是(该数据文件中首行是各数据列的名称)
输入数据分隔符: 逗号(所有. CSV 文件的模型分隔符都是逗号)
切分比例: 0.8(该数值用于指定训练集和测试集的比例为 0.8, 即 80% 的数据用户训练, 20% 的数据用于测试)
资源参数: 都可保持不变(各参数具体含义可将鼠标悬浮于参数名后的 "感叹号" 查看)
右键[数据集切分] , 选择[起点运行] , 待运行成功(耗时约 1min)
特征选择
步骤目的: 从原始数据的 16 个特征中, 选择最重要的 10 个特征(剔除部分不重要或对模型性能有副作用的特征), 本案例中采用的特征选择方式是: 基于卡方检验的特征选择.
操作步骤:
在智能钛控制台的左侧导航栏, 选择[算法]>[机器学习算法]>[ 特征选择]>[ChiSqSelector_1] , 并拖入画布中
连接[数据集切分] 左边表征训练数据的输出桩和[ChiSqSelector_1] 的输入桩
在右侧弹出的配置栏中, 配置信息如下:
输入文件类型: CSV
标签列: 16
选择特征列: 0-15
输入数据包含 header 信息: 是
输入数据分隔符: 逗号
选择的特征个数: 10
资源参数: 都可保持不变(各参数具体含义可将鼠标悬浮于参数名后的 "感叹号" 查看)
右键[ChiSqSelector_1] , 选择[起点运行] , 待运行成功(耗时约 1min)
右键[ChiSqSelector_1] , 选择[查看数据]>[查看中间结果] , 查看输出结果文件所在路径, 在 COS 控制台 https://console.cloud.tencent.com/cos5/bucket 根据文件路径, 找到相应文件并下载, 即可查看到 "16 个特征中选择出来 10 个特征的具体内容", 通过被选择的 10 个特征和原始特征作比较, 得知被选择的特征列在原始数据中的序号是:"0,2, 3,4,5,6,7,8,9,11"
模型构建
步骤目的: 采用随机森林算法解决营销推荐预测任务
操作步骤:
在智能钛控制台的左侧导航栏, 选择[算法]>[机器学习算法]>[ 分类]>[RandomForestClassifier_1] , 并拖入画布中
连接[ChiSqSelector_1] 的输出桩和[RandomForestClassifier_1] 左边第一个表征训练集的输入桩
在右侧弹出的配置栏中, 配置信息如下:
输入文件类型: CSV
特征列: 1-10
标签列: 0
输入数据包含 header 信息: 是
输入数据分隔符: 逗号
模型保存格式: ML
连接[数据集切分] 右边代表测试数据的输出桩和[RandomForestClassifier_1] 旁边小漏斗的输入桩
单击小漏斗, 在右侧弹出的配置栏中, 配置信息如下:
输入文件类型: CSV
特征列: 0,2 - 9,11(注意此处输入不要包含任何空格)
输出文件类型: CSV
输入数据包含 header 信息: 是
输入数据分隔符: 逗号
输出数据包含 header 信息: 是
输出数据分隔符: 逗号
模型导入格式: ML
右键[RandomForestClassifier_1] , 选择[起点运行] (小漏斗会自动一起运行), 待运行成功(耗时约 3min)
模型评估
步骤目的: 评估模型性能, 可视化展示评估指标
操作步骤:
在智能钛控制台的左侧导航栏, 选择[输出]>[模型评估]>[二分类任务评估] , 并拖入画布中
连接小漏斗的输出桩和[二分类任务评估] 的输入桩
在右侧弹出的配置栏中, 配置信息如下:
标签列: 6
是否打分项: 是
输入数据是否包含 header 信息: 是
输入数据分隔符: 逗号
打分列: 21
阈值: 0.5
右键[二分类任务评估] , 选择[起点运行] , 待运行成功(耗时约 1min).
右键[二分类任务评估] , 选择[查看中间结果] , 即可查看该模型在营销推荐策略任务上的性能.
来源: https://www.qcloud.com/developer/article/1509883