天池实践手册.docx
《天池实践手册.docx》由会员分享,可在线阅读,更多相关《天池实践手册.docx(78页珍藏版)》请在冰豆网上搜索。
天池实践手册
前言
本手册从天池选手的角度出发,通过具体的案例场景引导用户使用御膳房平台进行数据开发、数据建模以及预测。
本手册将从以下几个步骤来描述如何使用御膳房进行数据分析和建模:
●课题介绍
●环境和账号
●获取数据
●实现步骤
由于是基于特定案例引导,本文展示的仅仅是ODPS和算法功能的冰山一角。
关于详细的ODPS和算法功能,可以通过在线帮助手册了解更多。
请参考ODPS在线帮助手册。
主要参考模块:
基本介绍、常用命令、SQL语法,MR语法。
关于MR的使用和配置方法请参考御膳房用户手册。
内容
前言I
内容II
1课题介绍1
1.1课题介绍1
1.1.1数据说明1
1.1.2输出要求2
1.1.3评估指标2
1.2解题思路3
2环境、账号4
2.1登录御膳房4
3获取数据6
3.1项目首页6
3.2查看数据8
4实现步骤9
4.1数据开发平台的使用(以下也称IDE)10
4.1.1准备工作10
4.1.2数据分析13
4.1.3特征工程19
4.2PAI平台45
4.2.1PAI简介45
4.2.2数据抽样47
4.2.3建模和评估52
4.2.4PAI命令及模型同步62
4.2.5线上测试集的训练和预测63
名词解释66
修订历史67
1课题介绍
1.1背景
随着移动电商业务的快速发展,用户对移动端网络的访问是随时随地的,具有更丰富的场景数据。
如何在这些巨大的信息数据中快速挖掘出对我们有用的信息已成为当前急需解决的问题。
对于移动电商来说,可以运用这些有用的信息以及个性化技术的手段,对用户进行一系列的个性化推荐,帮助用户从这些网络过量的信息里面筛出他所需要的信息,提升移动端用户的用户体验,提升个性化推荐引导的成交率,从而达到精准营销(Precisionmarketing)的目的。
如下是一个简单的个性化推荐的流程:
1.2课题介绍
本课题以阿里巴巴移动电商平台的真实用户-商品行为数据为基础,同时提供移动时代特有的位置信息。
您需要通过大数据和算法构建面向移动电子商务的商品推荐模型,挖掘数据背后丰富的内涵,为移动用户在合适的时间、合适的地点精准推荐合适的内容。
在真实的业务场景下,我们往往需要对所有商品的一个子集构建个性化推荐模型。
在完成这件任务的过程中,我们不仅需要利用用户在这个商品子集上的行为数据,往往还需要利用更丰富的用户行为数据。
如下是一个真实的业务场景:
给出一定量用户在时间段11月18日~12月18日内的移动端行为数据(D),
需要预测12月19日用户对商品子集(P)的购买数据。
具体的数据说明下面将会详细介绍。
1.2.1数据说明
提供的数据包含两个部分。
第一部分是用户在商品全集上的移动端行为数据(D),表名为tianchi_mobile_recommend_train_user,包含如下字段:
字段
字段说明
提取说明
user_id
用户标识
抽样&字段脱敏
item_id
商品标识
字段脱敏
behavior_type
用户对商品的行为类型
包括浏览、收藏、加购物车、购买,对应取值分别是1、2、3、4。
user_geohash
用户位置的空间标识,可以为空
由经纬度通过保密的算法生成
item_category
商品分类标识
字段脱敏
Time
行为时间
精确到小时级别
D集合的记录显示如下:
每一行代表了用户 user_id 对属于分类 item_category 的物品 item_id 在 time 这个时间于地点 user_geohash 发生了交互,交互类型是 behavior_type 。
behavior_type 包括浏览、收藏、加购物车、购买,对应取值分别是1、2、3、4。
给出的一共包含31天的交互数据,最后要预测第32天有哪些user会购买哪些item。
第二个部分是商品子集(P),表名为tianchi_mobile_recommend_train_item,包含如下字段:
字段
字段说明
提取说明
item_id
商品标识
抽样&字段脱敏
item_geohash
商品位置的空间标识,可以为空
由经纬度通过保密的算法生成
item_category
商品分类标识
字段脱敏
这部分的数据,是 tianchi_mobile_recommend_train_user表中出现的物品item_id的一个子集。
官方的第32天的会发生购买的 user,item 中的item都是这个数据表中的item,所以我们预测的 user,item 需要根据这个文件来过滤掉一些结果。
训练数据包含了抽样出来的一定量用户在一个月时间(11.18~12.18)之内的移动端行为数据(D),评分数据是这些用户在这个一个月之后的一天(12.19)对商品子集(P)的购买数据。
您需要使用训练数据建立推荐模型,并输出用户在接下来一天对商品子集购买行为的预测结果。
1.2.2输出要求
完成用户对商品子集P的购买预测之后,需要将结果放入指定格式的数据表(非分区表)中,要求结果表名为:
tianchi_mobile_recommendation_predict,包含user_id和item_id两列(均为string类型),要求去除重复。
表名:
tianchi_mobile_recommendation_predict
结果表样例:
字段
字段类型
示例
User_id
String
100001
Item_id
String
12900
1.2.3评估指标
比赛采用经典的精确度(precision)、召回率(recall)和F1值作为评估指标。
具体计算公式如下:
其中PredictionSet为算法预测的购买数据集合,ReferenceSet为真实的答案购买数据集合。
我们以F1值作为最终的唯一评测标准。
1.3解题思路
显然,该问题可以转为一个二分类问题:
某个用户对某个商品是否会购买?
●分类方法:
二分类
最终只有两种结果:
1:
购买;0:
不购买
●样本选取
样本选取—>有交互(即:
用户对商品有行为,包括浏览、收藏、加购、购买)的P子集。
分析在哪一天交互的样本可能会在19号购买?
16号,17号,18号?
可以基于18号的购买数据,分析16、17号的行为数据在18号购买的概率。
●特征
分析什么样的用户在什么时候对什么样的商品有过什么样的操作之后,可能会在19号购买?
比如:
是否曾经买过?
商品销量?
加购物车?
●模型
分类、回归。
如LR、RF、GBDT等。
下面我们将围绕这个课题,描述如何在御膳房平台完成一系列的实现步骤。
2环境&账号
1)登录御膳房首页。
点击右上角的<登录>,输入已经注册好的淘宝、阿里云账号,如下图所示:
图1御膳房登录界面
注:
●如果您还没有淘宝账号或者阿里云账号,可以在上图点击<注册淘宝账号>或<注册阿里云账号>完成注册。
●如果已经注册,也可以使用手机号码或邮箱登录。
2)填写注册信息。
首次登录,需填写注册信息。
单击<登录>,页面跳转到用户信息注册页面。
请使用真实信息,完成所有必填项目(手机号、Email、联系人为必填项,注:
手机号应与淘宝账号绑定),阅读并勾选“同意御膳房协议”。
图2用户信息注册
3)点击<下一步>后,您的账号已经完成了在御膳房的注册。
3获取数据
当用户登录后,即可进入天池大赛授予的特定项目,进行数据开发/处理/建模工作。
下面我们先来看看如何获取和查看数据。
3.1项目首页
可以从两个入口进入“项目”。
4)点击[御膳房–>数据中心->工作台],用户可以在这个界面查看自己对应的资产,项目名称以及角色。
点击项目名,即可进入项目。
图3-进入项目入口
(1)
5)点击[数据引擎->私有区],可以看到项目列表,点击项目名称后进入项目。
图4进入项目入口
(2)
图5进入项目入口
(2)
6)进入项目后,界面如下:
图6进入项目
3.2查看数据
7)进入项目首页后,点击[项目数据->数据资源->组织内申请的数据],即可查看组织内授权的表以及所属项目(来源项目)信息:
图7查看odps表
注:
在数据开发工作台使用具体的表的时候,必须加上所属项目前缀。
如:
用户行为表tianchi_mobile_recommend_train_user,查看到其所属项目为tianchi_data,则在数据开发工作台中引用时,需这样:
tianchi_data.tianchi_mobile_recommend_train_user。
4实现步骤
接下来我们将介绍如何完成上述课题,主要包含以下几个主要的步骤:
8)在数据开发平台利用ODPSSQL进行数据分析:
●统计总的用户行为记录
●统计所给数据中每天各种行为类型的记录数,了解每天会有多少浏览、收藏、加购、购买,观察是否有波动。
●锁定在P上有过交互的用户行为。
●分析前一天加购、收藏、浏览对后一天购买的影响。
取12/18为后一天,拿12/17的数据来验证该设想。
●计算评估指标。
●提交结果表。
9)特征工程:
可以使用ODPSSQL进行特征提取,也可以使用MR/UDF/GRAPH进行特征工程。
这里主要介绍使用UDF进行特征提取,MR/GRAPH的用法与之类似。
●Eclipse工具的下载和安装
●新建项目(MavenProject)
●程序开发以及提交
●利用UDF在数据开发工作台抽取特征,详细步骤如下:
•样本选取:
(正样本)分别以2014/12/17的购买,12/18的购买来构建验证集、测试集。
•特征工程:
利用已经构建的UDF函数来统计user-item对的点击,收藏,加购,购买次数。
•结合特征构建验证集和测试集,包含训练和测试。
•检查正负样本比例。
•转换特征的数据格式。
10)PAI平台的使用
●数据抽样
•负样本抽样1/15
•样本合并
●建模和评估,包括:
•逻辑回归
•随机森林
•预测和评估
●PAI命令的执行以及模型同步
●线上测试集的训练和预测
4.1数据开发平台的使用(以下也称IDE)
用户在数据开发工作台中以编写和运行基于ODPS的SQL、MapReduce、UDF和Graph。
其中,SQL、MapReduc和UDF的编写语法参考ODPS文档,请点击这里。
MapReduc、UDF和Graph的配置请参考这里。
4.1.1准备工作
11)进入项目首页:
图8项目首页
12)点击“数据开发”,即可进入数据开发工作台:
图9数据开发工作台
为了方便管理代码,可以新建一个文件夹,把自己的代码都放在这个文件夹中(天池历届比赛中,通常都是一个队伍所有成员共享一个project)。
13)新建文件夹。
右键点击“工作流”并点击<+文件夹>,新增一个工作文件夹,输入文件夹名称,选择文件夹位置,提交即可,如:
图10新建文件夹
14)新增工作流节点。
在数据开发工作台左侧导航选择“数据开发”。
图11数据开发图标
点击“+”图标,选择“工作流节点”。
图12“+”图标
右键点击文件夹,比如“nj_work”,并点击<+工作流节点>,在页面配置一个ODPSSQL节点如下:
图13新增工作流节点
点击<提交>,此时在新的页面上就可以编写ODPSSQL代码了。
现在我们可以查一下表tianchi_mobile_recommend_train_user的表结构,如下:
图14运行ODPS命令
点击
运行代码(或按F8键)。
注意:
对于选手而言,所有的操作只需要在开发环境运行,也就是说,不需要提交数据到生产环境,也不需要进行调度和发布。
如上述介绍,在数据开发工作台内运行的表或资源都属于开发环境,如果需要发布到生产环境,则需要通过发布管理模块将工作流节点调度并发布,方可同步到生产环境。
具体描述请参考御膳房最佳实践之数据同步章节(
4.1.2数据分析
下面我们根据上面的课题在IDE上先进行相关的数据分析。
给出一定量用户在11.18~12.18之内的移动端行为数据(D),需要预测12.19对商品子集(P)的购买数据。
行为分为四种:
1(浏览),2(收藏),3(加购物车),4(购买)。
首先,由于赛题数据来源于其他project(项目空间),为方便起见及后续在算法平台(PAI)中使用,可以考虑将项目表拷贝到本队伍所在项目空间。
SQL如下:
Createtabletianchi_mobile_recommend_train_useras
select*fromtianchi_data.tianchi_mobile_recommend_train_user;
Createtabletianchi_mobile_recommend_train_itemas
select*fromtianchi_data.tianchi_mobile_recommend_train_item;
下面我们就可以在IDE利用ODPSSQL进行相关的数据统计:
●统计D集合的数量:
selectcount(*)fromtianchi_mobile_recommend_train_user;
---包含了58亿用户的行为记录。
●统计针对P子集的用户行为数据:
create table t_mj_p_user as
select
t.*,b.item_geohashfrom tianchi_mobile_recommend_train_user t
join tianchi_mobile_recommend_train_item b on b.item_id=t.item_id and b.item_category=t.item_category;
selectcount
(1)fromt_mj_p_user;
---10.7亿
●统计所给数据中每天各种行为类型的记录数,了解每天会有多少浏览、收藏、加购、购买,观察是否有波动:
select
substr(time,1,10)asday
behavior_type
count
(1)cnt
from
tianchi_mobile_recommend_train_user
groupby
substr(time,1,10)
behavior_type;
从用户的购买行为动机和流程来看,人们通常在购买时会经历浏览→收藏/加到购物车→下单付款这一系列动作,有的可能会搜索后就直接购买,有的可能会操作得多一点,反复挑选和比较。
如果说用户都已经把宝贝加到购物车了,那么购买的概率会不会更高?
最近加到购物车的是不是应该更有可能被购买?
基于这个设想,下面我们示范下如何在数据平台上进行这个分析,并完成结果提交。
这是一个通过简单规则来判断购买从而提交结果的示例,较为简单粗暴,但可以让我们先熟悉下从拿到课题到提交结果的整个流程,以及初尝结果验证设想。
15)由于所给数据tianchi_mobile_recommend_train_user为用户在所有商品类目上的行为,而要预测的是在商品子集P上的购买,故先锁定在P上有过交互的用户行为:
create table t_mj_p_user as
select
t.*,b.item_geohashfrom tianchi_mobile_recommend_train_user t
join tianchi_mobile_recommend_train_item b on b.item_id=t.item_id and b.item_category=t.item_category;
selectcount
(1)fromt_mj_p_user;
------1074139328(用户对P子集商品的交互记录数)
selectcount
(1)fromt_mj_p_userwherebehavior_type=4;
-----9309353(其中对P子集商品有购买的记录数)
selectcount
(1)from
(select
user_id
item_id
count
(1)cnt
from
t_mj_p_user
groupby
user_id
item_id
)t;
-----202430141[user,item]对
16)分析前一天加购、收藏、浏览对后一天购买的影响。
取12/18为后一天,拿12/17的数据来验证该设想。
createtablet_mj_u_i_1dayas
select
user_id
item_id
casewhensubstr(time,1,10)='2014-12-17'andbehavior_type=1then1else0endasis_1day_view
casewhensubstr(time,1,10)='2014-12-17'andbehavior_type=2then1else0endasis_1day_fav
casewhensubstr(time,1,10)='2014-12-17'andbehavior_type=3then1else0endasis_1day_cart
casewhensubstr(time,1,10)='2014-12-17'andbehavior_type=4then1else0endasis_1day_buy
casewhensubstr(time,1,10)='2014-12-18'andbehavior_type=4then1else0endasis_buy
from
t_mj_p_user;
计算评估指标:
select
precision
recall
2*precision*recall/(precision+recall)asf1
from
(select
hit_cnt/p_cntasprecision
hit_cnt/r_cntasrecall
from
(select
sum(if(a.user_idisnotnullanda.item_idisnotnullandb.user_idisnotnullandb.item_idisnotnull,1,0))ashit_cnt--命中
if(sum(a.r_cnt)isnull,0,sum(a.r_cnt))asr_cnt--实际
if(sum(b.p_cnt)isnull,0,sum(b.p_cnt))asp_cnt--预测
from
(
selectuser_id,item_id,count
(1)asr_cnt
from
t_mj_u_i_1day
where
is_buy=1
anduser_idisnotnull
anditem_idisnotnull
groupbyuser_id,item_id
)a
fullouterjoin
(
selectuser_id,item_id,count
(1)asp_cnt
from
t_mj_u_i_1day
where
is_1day_cart=1
anduser_idisnotnull
anditem_idisnotnull
groupbyuser_id,item_id
)b
ona.user_id=b.user_idanda.item_id=b.item_id
)t
)tb;
返回如下结果,可以看到F1=2.99%,召回率高于准确率,均有较大提升空间:
图15返回结果
17)提交结果:
以比赛要求的12/19为预测日期,将用户在12/18对商品子集P加购最多的商品作为预测结果tianchi_mobile_recommendation_predict,生成该表即完成了提交,注:
大赛进行的时候,天池的评测系统会自动去扫描各project中指定命名的表(本例中即:
tianchi_mobile_recommendation_predict)并评测。
droptableifexiststianchi_mobile_recommendation_predict;
createtabletianchi_mobile_recommendation_predict
as
select
user_id
item_id
from
(
select
user_id
item_id
row_number()over(partitionbyuser_idorderbynumdesc)asrank
from
(
select
a.user_id
a.item_id
a.num
from
(
select
user_id
item_id
count
(1)asnum
from
tianchi_mobile_recommend_train_user
where
substr(time,1,10)='2014-12-18'
andbehavior_type=3
groupby
user_id
item_id
)a
join
(
selectdistinct
item_id
from
tianchi_mobile_recommend_train_item
)b
ona.item_id=b.item_id
where
b.item_idisnotnull
)c
)d
whererank<=1;
counttianchi_mobile_recommendation_predict;-----166068(与上述数据分析时所统计的每日购买数据量相仿)
基于这个提交的结果,可以拿到这样一个分数:
准确率=1%,召回率=0.9%,F1=0.96%。
说明:
上述SQL语法涉及到的主要知识点包括:
•创建表/删除表
•聚合函数count
•字符串函数substr
•Join语法
•row_number函数
•casewhen/if条件函数
关于SQL的更多语法,请参考ODPS用户