前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >手把手教你轻松搞定高精度的消费者数据分析和预测

手把手教你轻松搞定高精度的消费者数据分析和预测

原创
作者头像
永洪数据科学院
修改2021-09-17 17:24:12
7120
修改2021-09-17 17:24:12
举报
文章被收录于专栏:走进敏捷BI走进敏捷BI

消费者数据分析,一直是众多企业最基础也是最重要的数据工作。如何做高精度的消费者数据分析和预测?这篇文章把这个问题讲透。

这里我们使用天池开放的数据资源(Baby Goods Info Data,资源地址: https://tianchi.aliyun.com/dataset/dataDetail?dataId=45)里下载了两个csv的数据:

  1. Tianchi_mum_baby.csv(儿童信息)
  2. Tianchi_mum_baby_trade_history.csv(交易记录)

作为体验该软件的样例数据。表结构如下2图所示。

表1 儿童信息

列名

描述

user_id

整数类型,用户ID

birthday

时间类型,出生年月日

gender

性别(“0”是女,“1”是男,“2”是未知)

表2 交易记录

列名

描述

auction_id

整数类型,交易ID

user_id

整数类型,用户ID

cat_id

整数类型,品类ID

cat1

整数类型,基础品类ID

property

文本类型,商品相关属性

buy_mount

整数类型,购买数量

day

时间戳,交易日期

通过两个表的数据,实现“根据用户购买的儿童用品交易记录预测儿童的年龄”。

后续就可以基于预测的结果向用户推荐该年龄段可能需要的商品,促成更多商品销售,用数据分析提升产品转换。笔者所使用的软件是Yonghong Desktop,最终实现做成了一幅可视化报表,如下:

接下来我们就来一起学习下,如何利用这些数据来实现分析与预测吧~

一、做好基础准备——数据的导入与探索

数据导入

数据源的格式为CSV格式,直接在Yonghong Desktop上选择下图1这个功能上传数据即可形成数据集。

图1 CSV数据导入功能
图1 CSV数据导入功能

导入后的数据集分别存放在如下位置:

图2 导入的原始数据集
图2 导入的原始数据集

数据探索

在Yonghong Desktop 上“深度分析”模块创建一个新实验,将数据集“baby”、“baby_trade_history”拖入画布,在右侧查看各个数据的元数据、探索数据功能。

可以发现:

“baby”数据集的user_id字段唯一值数量为953个,“baby_trade_history”数据集的user_id字段唯一值数量为29944个,因此只有3.18%的用户关联有baby数据的。“baby_trade_history”数据集的property字段是关于购买商品的属性信息且均已脱敏,无法知道其具体含义。

这么多的交易记录都查不到对应的儿童信息,我的想法是通过有儿童信息的交易记录,经过模型构建推理剩下那些交易记录对应的儿童信息。

二、简单五步——轻松完成数据处理

将“baby_trade_history”数据集关联有儿童信息的交易记录作为儿童年龄已标注的训练集,未关联儿童信息的记录作为待预测数据集。根据对业务和数据集的理解,儿童年龄与字段cat_id (商品品类)、cat1 (商品基础品类)、property (商品属性)、buy_mount(购买数量)相关性较高。

第一步,构造“baby_trade_history_train”数据集作为模型的训练集

它是由数据集“baby”、“baby_trade_history”数据集内部联接而成。构造数据流如下图3所示,“联接”算子的配置如图4所示。

图3 baby_trade_history_train数据集的工作流
图3 baby_trade_history_train数据集的工作流
图4 训练集的内部联接配置
图4 训练集的内部联接配置

第二步,通过交易日期和生日,算出年龄字段

在“baby_trade_history_train”数据集上通过新建计算列生成一个计算列字段age,其取值为根据字段birthday计算出的儿童年龄。该计算列:

“roundUp((dateValue(parseDate(col[‘day’],’yyyyMMdd’))-dateValue(parseDate(col[‘birthday’],’yyyyMMdd’)))/365,1)”

第三步,构造“baby_trade_history_predict”数据集作为模型推理用的待预测数据集

它是由数据集“baby”、“baby_trade_history”数据集右侧联接而成,如图5所示。

图5 测试集的右侧联接配置
图5 测试集的右侧联接配置

第四步,待预测数据集过滤掉年龄字段不为空的数据行

由于“baby_trade_history”数据集的user_id唯一值数量多于“baby”数据集的记录,右联接后“baby_trade_history_predict”数据集中关于”baby”的有大量空值,如图6所示。在该数据集上添加过滤条件滤出birthday字段含有空值的行作为“baby_trade_history_predict”数据集最终输出,过滤完的结果只剩下在baby数据集里查询不到的数据。过滤条件配置如图7所示。

图6 有空值的字段
图6 有空值的字段
图7 过滤条件
图7 过滤条件

第五步,从property字段构造新特征

property字段的数据如图8所示。

图8 baby_trade_history数据
图8 baby_trade_history数据

该字段集中了商品的所有属性名及其取值,但显然不同类型的商品,其属性必然有差异,比如用途、尺寸、重量、材质、商品细分类型等等,不同年龄段的儿童用商品必然有所不同或者儿童偏好不同,这决定了商品属性必然与年龄存在相关性。通过观察数据(图8)发现,property字段将商品属性及其取值以冒号分割同时以分号分割不同的属性,虽然属性及取值均已脱敏,但仍然有利用的价值,于是我尝试用计算列拆分该字段构造出新字段。由于商品属性较多,我分离出了几个常见的商品属性作为计算列,如图9所示,其中:property_len是商品属性个数,其内容为:len(col[‘property’])-len(substitute(col[‘property’],’;’,”))。

property_21458是属性21458对应的值,其计算列内容为:

if contains(ifNull(col[‘property’],’0′),’21458:’) then

parseInt(split(split(col[‘property’],’21458:’,2),’;’,1))/1000

else

0

end

其它属性列对应的计算列同property_21458列。

图9  property分离出的新字段(红框内)
图9 property分离出的新字段(红框内)

经过以上步骤,数据处理完成。

三、快速搭建实验——模型的构建与推理

模型构建

模型构建涉及特征工程和训练过程,在深度分析中是以实验的形式存在的。经过前面数据处理之后,搭建模型实验已经比较简单了。在Yonghong Desktop上创建一个实验,将“数据集”tab下的训练集“baby_trade_history_train”数据集和“操作”tab下“/算法/回归/决策树回归”算子及视图节点拖至实验画布,构建的实验如下图10所示,用到的节点位于图11中标注的位置。

图10 创建的模型训练实验工作流
图10 创建的模型训练实验工作流
图11 使用的算子
图11 使用的算子

决策树回归的参数配置表如图12所示,调参过程略过,这里大家可以根据对数据和业务的理解自行设置。特征列选择如图13所示,注意字段的顺序是有用的,模型应用的时候字段的含义和顺序需要与这个特征列顺序保持一致。

图12 决策树回归算法的参数配置表
图12 决策树回归算法的参数配置表
图13 特征列
图13 特征列

训练完模型后通过“多视图”节点可以查看其性能指标、特征重要性等,如下图14所示。为了后续应用训练好的模型,我通过“保存为训练模型”及时将模型保存下来(操作过程略),保存的训练模型存放于如图15所示的位置,取名为:儿童年龄预测_训练模型。

图14 模型性能指标视图
图14 模型性能指标视图
图15 保存的训练模型
图15 保存的训练模型

特别注意:在搭建模型训练实验的时候,遇到一个小坑。在“创建数据集”模块构建训练集时,如果添加计算列或者更新了计算列的计算逻辑后,在深度分析实验工作流中的训练集“baby_trade_history_train”节点上需要鼠标右键菜单点击“刷新”。

模型推理

保存了训练模型,就可以开始用它搭建模型推理服务工作流了。

第一步,新建一个实验,将预测数据集:baby_trade_history_predict,和刚保存的训练模型:儿童年龄预测_训练模型拖入画布中,创建工作流如图16所示。

第二步,配置模型应用节点。由于训练集和测试集的所选的特征字段完全一样,所以模型应用中填写的特征列与训练模型的字段和顺序完全一致,本实验中的配置如图17所示。

图16 模型推理工作流
图16 模型推理工作流
图17 模型应用算子的配置项
图17 模型应用算子的配置项

predict_age字段是新建的字段,点击图18里的icon进行创建。

图18 新建字段写入模型预测的结果
图18 新建字段写入模型预测的结果

第三步,设置制作报告可以使用的节点输出。这里显然模型应用节点的输出是我需要的,直接选择该节点即可,节点设置页面如图19所示。

图19 设置用于制作报告的节点
图19 设置用于制作报告的节点

保存该实验,取名为:儿童年龄预测实验。

四、让结果一目了然——制作可视化报告

训练数据集baby_trade_history_train里有age字段,待预测数据集里有预测结果字段predict_age。现在的一个想法,就是把所有交易记录的age和predict_age拼接到一列里,就可以得到所有交易记录的年龄(一部分是实际的,一部分是预测的)。

第一步:合并训练数据集和待预测数据集

这里又用到了自服务数据集进行数据处理,将待预测数据集baby_trade_history_predict和训练数据集baby_trade_history_train做联合得到新数据集baby_trade,如图20。

图20 联合之后的数据集baby_trade
图20 联合之后的数据集baby_trade

特别注意:联合的数据集需要字段相同,字段类型也匹配。

第二步:基于合并的数据集新建报告,并应用实验

基于baby_trade新建报告,选择绑定pane上的应用实验,如图21。

图21 应用实验入口
图21 应用实验入口

在弹出的选择实验窗口中,如图22 选择实验窗口,选择儿童年龄预测实验,并选择模型应用节点,点击确定。

图22 选择实验窗口
图22 选择实验窗口

在此绑定数据集上,出现模型应用上新增的字段,见图23。

图23 应用实验
图23 应用实验

第三步:合并age和predict_age字段

新建计算列age_new,进行拼接,见图24。

图24 字段拼接
图24 字段拼接

第四步:对每个年龄段进行分组

基于age_new字段新建数据分箱,设置见图25。

图25 数据分箱
图25 数据分箱

第五步:制作报告

用上面预测和准备的数据,即可在Yonghong Desktop上通过可视化的方式拖拽得到消费商品的年龄分布,不同年龄段的购买情况,不同年龄的商品偏好,不同商品的年龄分布,并由此做精准的商品推荐。我拖拽做了四个图表,基本在分钟级以内搞定,最终展示效果如图26所示。

图26 可视化效果
图26 可视化效果

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据导入
  • 模型构建
  • 模型推理
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档