天猫推荐算法大赛Top 9团队
Posted 大数据挖掘DT数据分析
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了天猫推荐算法大赛Top 9团队相关的知识,希望对你有一定的参考价值。
下载数据分析更多资料
首届阿里天池大数据竞赛以天猫推荐算法大挑战为主题,提供抽样后的1千多万天猫用户,2万多个天猫品牌,总计5.7亿条经脱敏后的天猫海量真实用户的行为记录数据。所有的数据经过严格的脱敏处理,切实保障消费者与品牌商的数据隐私。选手通过建立算法模型分析用户在天猫上的行为日志,建立用户的品牌偏好,并预测他们在将来一个月内对品牌下商品的购买行为。大赛平台基于阿里云的开放数据处理服务ODPS,为高校学子提供大数据实战机会。
此次“脚踏实地”的数据竞赛,获得了高校和科研机构的强烈反响——从大数据竞赛3月10日宣布报名以来,在短短的一个月内,就迅速吸引了全球14个国家和地区7276支队伍参赛,经过了4个月的多轮选拔,有几百只队伍坚持下来了,并且取得了非常不错的成绩。而更值得关注的是,选手的成绩已经超过了内部赛的阿里工程师(ps:内部赛的周期很短)。比赛接下来将进入第三赛季,第二赛季的TOP 3选手将受邀参加天猫双十一实战,与天猫算法团队正面交锋,使用真实的第一手数据,让其算法上线接受真实流量的考验。
Give,来自浙江大学计算机学院数字媒体与企业智能计算实验室,浙大直博生。7月29号的F1成绩是6.10%,结合评委打分,最后排名第9。
CSDN:请描述你的解题思路、算法亮点以及着重攻坚方向,并具体的谈一下特征抽取、训练模型的建立,以及模型的训练思想。
Give:
解题思路:从用户的历史行为中提取特征,下一个月有购买分为类别1,未购买分为类别0。
1. 数据预处理:通过对数据进行仔细观察,发现原始数据中有两天的点击数据全部丢失,其他日期内也有部分点击数据的丢失,推测原因可能是点击的时候用户未登录,或者是在手机等设备中点击导致数据丢失。我们根据用户以往的行为记录和品牌以往的行为记录,推测用户在购买前的点击次数,对这部分的缺失数据进行填充。此外还对点击狂魔(疑似爬虫)数据进行了平滑。由于我们是在特征提取前对原始数据进行的数据预处理,因此在特征提取阶段保证了数据的一致性。
2. 特征提取:提取的方式采用map-reduce编写的代码一次提取完成,避免频繁的使用SQL进行表连接。特征包括用户特征、品牌特征、用户-品牌特征和综合类特征。用户特征反应了用户的购买力和一些行为偏向;品牌特征反应了品牌的热门程度、周期性、季节性、购买趋势以及品牌整体的行为偏向;用户-品牌特征反应了用户对这个品牌喜爱程度、购买意向;复合类特征考虑了很多心理学和业务上的特点,建立行为转移、周期、偏好等复杂的特征。
3. 正负样本采样:所有的用户-品牌特征组中,在下一个月产生了购买的比例极小(1:300+),样本分布严重不均衡,因此对负样本进行了随机采样。不同模型的最佳采样比例会有区别,RF采样比在1:8左右,GBRT采样比在1:11~1:14左右。
4. 模型:最终采用的是GBRT模型,模型思想是Boosting,Boosting算法都是一个迭代的过程,每一次新的训练都是为了改进上一次的结果。
着重攻坚方向
在这次比赛中,花费时间最多的是特征的提取,考虑什么样的用户会购买,什么样的品牌会被购买,什么样的行为预示用户会购买一个品牌。
算法亮点
1.数据预处理步骤填充了缺失的点击数据,并且填充的值是根据用户和品牌的历史行为进行填充,尽可能还原了真实的行为。
2.由于本人是资深的网购爱好者,因此从自身的经验和用户心理出发,思考了一批结合业务的特征,包括行为转移、周期、偏好等。
CSDN:谈谈比赛感想。
Give:对研究数据挖掘、信息检索等领域的很多研究者来说,数据是非常珍贵的,但是对于还在高校的人,数据是很难获得的,现有的一些公开数据集,规模上一般也都比较小。阿里巴巴拥有海量商品、卖家、用户、交易、评价的数据,这些数据是很多从事数据挖掘方面研究者梦寐以求的。经历了几个月的比赛,不论是在学术研究水平上还是心理上都有了巨大的成长。天池平台给我们这些在校的学生提供了一个很好的机会去真正接触大数据,使得我们的研究思路能够在真实的数据中进行检验。这次比赛也让我懂得了在逆境中的坚持:当第一赛季眼看要进不了第二赛季的时候,我坚持了下来;在第二赛季成绩半个多月没有进展的时候,我也坚持了下来;在换数据集前还徘徊在10名之外,但是在最后7天,一个人熬夜奋战,又冲回到了前10。
CSDN:ODPS使用感受,优点及建议。
Give:
优点:ODPS提供了丰富的机器学习算法,还有强大的计算能力。
建议:
(1)ODPS平台资源调度优化:小任务能保证在一定时间内可以分配到资源;大任务可以运行慢一些,但是保证不会报错中途停止;以团队为单位限制资源使用量。
(2)错误提示信息可以更人性化。
清水湾沙滩青年流浪者是来自香港科技大学的硕士研究生,之前在ACM/ICPC亚洲区预赛,百度之星,Google Code Jam等其他算法类大赛中均取得过不错的成绩。在最后一星期更换数据集后一直稳定在第5名左右,F1分数在6.12左右。
CSDN:请描述你的解题思路、算法亮点以及着重攻坚方向,并具体的谈一下特征抽取、训练模型的建立,以及模型的训练思想。
清水湾沙滩青年流浪者:第一赛季因为数据量小,所以主要依靠少数个特征基础上的人工规则,最终得分7.21,排名第121进入第二赛季。
第二赛季,在模型使用方面,先期主要是攻破线性Logistic Regression(LR)模型,使用大部分参赛队都没有使用的dummy coding的思路处理了所有的特征,包括使用了id类特征以及特征与特征之间的dummy conjunction来拟合非线性。并且对数值类特征采用包含式dummy coding解决了离散化后特征值长尾部分数据稀疏的问题。是所有的Top10队伍中,Logistic Regression单模型分数最高的一支队伍,这与大部分Top10队伍仅仅使用GBRT,Random Forest为主的树模型算法有较大区别。在后期发现,由于LR为代表的线性模型和GBRT为代表的树模型预测结果重合度较低,所以在模型融合阶段,仅仅使用了简单的不同类别模型线性加权和同类别模型多次抽样平均(Bagging)的方法融合了GBRT和LR两个模型就获得了较单LR或单GBRT明显的提升。
在特征抽取方面,以业务理解为主,采取人工端只增不删的原则,对于稍有业务含义的特征均直接加入模型,对于关联性较大的特征之间并不做去重,以保证足够多的信息能被模型使用,加强模型的拟合能力。在机器端使用例如L1正则化的手段来间接将机器自动化特征选择融入模型以降低过拟合的风险。这样既能保证效果又能降低人力成本。除此之外,由于线上和线下的数据的获取时间不同,尽量选取随时间变化较为稳定的特征以保证线上和线下数据分布的一致性,对于确实分布不一致但又比较重要的特征,需要尝试单独进行特殊转换处理。
由于整体算法框架简单,人工trick使用较少,鲁棒性较高,在最后一星期更换数据集后一直稳定在第5名左右,F1分数在6.12左右,是更换数据集之后分数提升最大的队伍之一,而换数据集之前3个月从未进入过前10名。是前10名队伍中唯一的一匹”黑马”。
CSDN:谈谈比赛感想。
清水湾沙滩青年流浪者:在大赛平台方面,在高校进行研究往往使用的是小数据,并且即使有大数据也完全没有并发量达到1000以上的集群让我们来跑大数据。此次比赛最大的特点就是“大数据”+“大平台”。相当于带领我们走进了一个全新的实验环境,拉近了我们与实际工业生产的距离,这对于激发学生的相关领域科研兴趣有促进作用。大赛提供的ODPS平台能满足基本的分布式计算和基本机器学习和数据挖掘算法的需求,但是仍然有一定的功能限制,导致不少选手想要自己开发创新性的算法时遇到一定困难,希望今后平台能够进一步完善能满足各种需求的接口。
在能力提升方面,我认为参加此次比赛对解决实际问题能力的提升有很大帮助。在学校做科学研究,往往过分强调创新,以创新为出发点,为了强调工作的创新性,往往忽略了创新的合理性和效果比较的严谨性,在撰写学术文章时,往往也只是说好不说坏,逐渐产生了一种学术bias,文章看多了有时会觉得很糊涂,感觉每篇文章都像是best paper,难以分出高下。而做真实大数据的比赛,不以创新为出发点,而是从实际效果出发,选择最合理的方法,着重考察学生应用所学知识解决问题的能力,在分享交流时,好的方法可以交流,不好的方法走过的坑也可以拿出来分析探讨。希望今后学术界的创新精神和工业界的效果务实精神能有一个有机结合。
大赛建议方面,一是希望大赛平台能更加完善,开放更多接口使大家能更好的实现自己的原创算法。二是希望能更多的介绍赛题的业务背景,激发大家对赛题的兴趣,也是让大家明白自己到底在做什么。
Bazinga团队由3名队员组成,他们有两位来自中科院计算所,一位来自中科院软件所。最近一次公布F1得分是6.11。
CSDN:请描述你的解题思路、算法亮点以及着重攻坚方向,并具体谈一下特征抽取、训练模型的建立,以及模型训练的思想。
Bazinga:
1. 数据分析
原始数据是天猫用户4个月的行为日志,日志的格式为(user_id,brand_id,action_type,date),其中四种行为分为用户的点击、购买、收藏和添加购物车。总共的日志条目达到了亿级,均匀分布在给定的4个月中。总的用户数为千万级,品牌数为万级。需要预测的目标是用户在下个月会对哪些品牌有购买行为。评价指标是经典的F1指标。
2. 数据清洗
经过对数据的分析我们发现用户的平均行为为50次,品牌的平均行为为2万次,品牌的信息量明显多于用户,所以在品牌层面的信息相对可靠。在用户平均行为次数为50的大背景下,我们发现少量用户的一些异常行为,主要是有些疯狂点击不购买的用户,这些用户不仅不会对预测带来收益,反而会成为我们的模型中的噪声。于是我们对数据进行了一次过滤,过滤掉了点击次数太大,而没有购买的用户的所有行为记录。在剩下的数据上去构造样本、特征并进行模型学习。
3. 建模
得到一份干净的数据后,我们就要构建本地的测试数据。现在的数据划分如下图所示。八月份的数据是不可见的线上测评数据,在线下,我们切分出7月的数据作为我们的本地测试的数据。
我们将这个问题看做是一个条件概率预测问题。就是给定历史行为,预测下个月的购买行为。这个问题可以形式化为:
由于这是个有监督的学习问题,我们需要知道构造出来的一个(用户,品牌)样本的分类标签是什么,而我们的模型是基于时序的,所以我们引入一个分割点的概念,分割点将时间轴分成两个部分,分割点的前面是用户的历史行为,分割点的后面是这个历史行为造成的结果,也就是我们所说的分类的标签。简单说来,我们用历史行为进行特征的提取,并构造样本,而这个样本是正样本还是负样本,需要看分割点后面的时间区间上这个样本对是否有购买行为。
在分割点的选取方面,我们分为了两种选取方式,一种是固定分割点,一种是滑动分割点。固定分割是一种很自然的分割方式,也是此次比赛中大部分队伍所采用的一种方式。滑动分割点是对固定分割点的一个扩展,可以产生更多的样本,充分利用历史信息。具体见下图:
4. 特征
我们构造了如下特征。
Pair Features |
User Features |
Brand Features |
|
Counting Features |
action# |
action# |
action# |
actionday# |
actionday# |
actionday# |
|
valid click# |
distinctactionbrand# |
distinctactionuser# |
|
valid click day# |
distinct firstactionbrand# |
distinct firstactionuser# |
|
actionper brand per day# |
actionper user per day# |
||
CVR Features |
cvr (buy#, click#) |
cvr (buy#, click#) |
cvr (buy#, click#) |
cvr (buy day, click day) |
cvr (buy day#, click day#) |
cvr (buy day#, click day#) |
|
cvr (distinct buy brand#, distinct click brand#) |
cvr (distinct buy user#, distinct click user#) |
||
Ratio Features |
ratio (click#, click day#) |
ratio (click a#, click b#) X C52 |
ratio (click a#, click b#) X C52 |
ratio (buy#, buy day#) |
ratio (buy a#, buy b#) X C52 |
ratio (buy a#, buy b#) X C52 |
|
Flag Features |
actionflag |
actionflag |
actionflag |
other rules |
|||
Global Features |
first / last action day |
first / last action day |
|
first / last buy day |
first / last buy day |
first / last buy day |
|
active range length |
frequent user ratio |
Counting特征指的是不同粒度上对行为数的聚合。
CVR特征指的是转化率特征。
Ratio特征是指同一种行为在不同粒度上的比例特征。
Flag特征是指一种0-1标志特征,表示是否存在这种状态,可以用来融合进各种规则。
Global特征是指与时间区间无关的全局特征。
5. 模型
主要用到的模型有GBRT和RF模型,这两种模型是基于决策树的模型,都是将若干个弱决策树用某种方式聚合成森林来进行训练和预测。不同的是GBRT是在梯度上建立决策树,用Boosting的思想进行融合;而RF是在采样出数据和特征后建立决策树,并用Bagging的思想进行融合。
6. 融合
在得到两个基础模型产生的结果后,我们用了一个简单的两级线性融合的方法对我们的模型进行融合。第一级融合是根据本地训练集的结果学出来一个lr(Logistic Regression)线性模型进行融合;第二级则是简单地对第一级的预测结果进行平均融合。
7. 流程化
所有的前面的步骤我们都进行了流程化,也就是运行一个脚本便可以从最原始的数据表,运行到最后的提交结果表。
CSDN:谈谈比赛感想。
Bazinga:这次比赛,给了我们一次体验工业界大数据的宝贵机会。与之前在实验室接触到的小规模数据集不同,大数据不仅拥有更大的数据规模,数据本身更加复杂,处理的难度更大。在参赛伊始,我们认真地分析了比赛的任务,并通过查阅资料去理解真实的业务场景。从利用简单的规则做出最早的几次提交,到后来利用机器学习的方法来提高预测的效果,我们对问题的认识进一步的加深,对数据也有更多的理解。值得一提的是,在这次比赛中,我们团队的三位成员很好地进行了团队协作。每位成员都会负责推进一块子任务,同时,我们也会保持充分的沟通,遇到困难大家一起讨论,寻找解决方案。高效的团队协作让我们一直保持着较好的成绩。大赛组委会也为我们颁发了“最佳团队奖”。
CSDN:ODPS使用感受,优点及建议。
Bazinga:ODPS具有很好的数据存储能力和计算能力,并且简单易用。但在实际使用过程中,我们也发现一些需要改进的地方。比如,可以加强一下MapReduce作业的可视化,让我们可以方便地查看当前执行的精度,预计完成时间等信息。
Kevin,清华大学博士生,研究方向为复杂工业过程智能建模与优化,发表/录用若干论文。29号封榜前为6.124%,最终排名第6。
CSDN:请描述你的解题思路、算法亮点以及着重攻坚方向,并具体的谈一下特征抽取、训练模型的建立,以及模型的训练思想。
Kevin:
解题思路。首先是分析问题的特点,将本次比赛的推荐与传统的推荐做了对比,以及对比赛与实际线上推荐进行了分析,指明了解题的基本思路。
算法亮点。算法的亮点是对不同的用户-品牌类型进行了分类,并采取了不同的处理方法。
着重攻坚方向。根据对业务及数据的分析,着重进行了特征的构造。
特征抽取、训练模型的建立,以及模型的训练思想。根据对业务及数据的分析,对特征进行构造,并基于Case分析,迭代构造新的特征。模型采用比较适合本次比赛的RF/GBRT/LR等模型。
CSDN:谈谈比赛感想。
Kevin:比赛时间很长,单干参赛,很累。整个过程下来,收获也很多,完成数据分析、数据预处理、特征提取、模型选择、参数调优、模型融合及数据后处理整个项目流程,积累了独立完整的数据挖掘实践经验。阿里巴巴第一次在ODPS平台上举办外部的大型比赛,参赛队伍是同类比赛中最多的,总体来说非常成功。
CSDN:ODPS使用感受,优点及建议。
Kevin:ODPS简单、方便、易用,只需要懂得SQL及Python就可以满足基本需求。只是提供的基础算法还不是很多,建议提供更多的算法以及接口供外部实现算法用。
Tyche团队由来自南京大学的两名硕士研究生组成,最后一天F1是6.12以上,最终成绩第五。
CSDN:请描述你的解题思路、算法亮点以及着重攻坚方向,并具体的谈一下特征抽取、训练模型的建立,以及模型的训练思想。
Tyche:
数据分析
提供的原始数据在天池集群的表t_alibaba_bigdata_user_brand_total_1中,字段分别为:user_id、brand_id、type、visit_datetime。用户4种行为类型(type)对应代码分别为:点击:0;购买:1;收藏:2;购物车:3。原始数据条数有5.7亿左右,用户1000万左右,品牌有3万左右,需要预测的目标是用户在下个月会对哪些品牌有购买行为。评价指标为经典的F1指标。对数据简要分析可以发现数据本身符合齐夫定律。
数据清洗
目的:去除一些噪声数据。在此,我们尽可能去除离群点用户(对分类器影响较大但本身正例又很少的用户)。原始数据中存在一些爬虫用户。例如去除点击量大于800,购买量为0点击量大于5000,购买量少于50的用户。
数据集划分
目的:线下测试和线上结果相关性高度一致。我们和大多数数据集划分的方式不同。在数据集划分构造时我们对时间轴切两刀,训练集、验证集、测试集都是完整的数据集,能够更好的验证模型的泛化性能。
特征提取
目的:提取对行为数据刻画显著的特征。特征的提取建立在对业务的理解的基础上,努力得到类别更加多样性,更加全面的特征。我们在这个环节突破了纯粹从业务理解提取特征的思路,转而考虑一下问题:当提取了一些类别的特征后,在对业务逻辑整体理解以及已提取的特征内在联系的基础上,思考是否可以用一种思路把已提的大部分特征统一起来?如果能做到这个,我们就可以在已有特征的基础上得到系统化的特征,而后在体系中,通过不同行为,不同时间段,不同行为指标的排列组合,可以较快的发现新类别的特征。而这些特征很可能有用。事实上我们有一半以上的有用特征都是这样发现的,我们之前只提取了92维有用的特征,最后使用了241维特征。实际中我们使用Xmind画出特征的思维导图,方便我们找到我们所说的特征之间的内在联系。
模型训练
我们使用了random forest,gbrt,logistic regression三种模型。在训练之前由于数据存在严重的类别不平衡问题,所以我们根据理论和实际对正例采用了up sampling的采样方式,负例采用down sampling的采样方式,正例个数:负例个数=2:20=1:10,效果比单纯的up sampling或者 down sampling要好。
random forest属于bagging类型的集成算法,gbrt属于boosting类型的集成算法,共同特点是模型参数好调,很多情况下性能较好。比赛中,我们队gbrt的调参根据gbrt每次优化的是上一步的残差,所以我们使用每次训练200棵树再初始化参数再训练的迭代式调参方式,大大节省了调参的时间。
另外我们针对gbrt树的棵树较大时候训练时间长的问题,先用一个欠拟合的random forest初始化gbrt的残差再用一个树的棵树不是很大的gbrt来训练,从而能够在相对短的时间内得到比用较大棵树的gbrt还要高一些的性能。
由于在工业实际操作中对实时性要求很高,logistic regression训练,预测时间都比较少,用途较广,所以借鉴有些公司采用的在使用logistic regression训练时对连续特征进行长度为16等的二进制编码的方法,得到了更好的性能。
模型融合
我们使用采样的多样性,特征的多样性,模型的多样性,分别得到模型差异化较大的多个模型然后采用stacking learning进行模型融合,在此使用的是线性模型,logistic regression。
在用stacking learning时,我们发现传统的把多个model预测的confidence做特征,使用Logistic regression学习,效果不够好。
为此我们考虑到优化的目标是F1,对confidence较高的那部分pair对,加强学习,选取confidence较大的500万pair,使用logistic regression学习
此外,将这些feature(confidence),映射到多个高斯空间中,再用以上方法学习有轻微的提高。
输出处理
考虑到比赛评价标准是F1,但大多模型优化的目标不是F1,所以我们考虑,能否针对F1,做更加精细的模型改进?
通过分析发现分类器更适用于预测结果中precision高的用户,这类用户称为规律性用户,所以我们对每个用户的预测结果进行分析,增加预测结果中precision高的用户的预测量。这相当于对不同用户在分类器中的margin做了轻微的修正。
CSDN:谈谈比赛感想。
Tyche:以前并无参加过这样的比赛,在这四个月里,由于队友是室友,大量的讨论经常在晚上,所以经常性晚睡,有时要睡时外面已经能够看到“东方之既白”。
其实能够全身心的投入到一件事情中是一种幸福。我最看重的是这份全身心投入的执着。在自己以后的学习,工作中这种精神我认为是一种宝贵的财富。
CSDN:ODPS使用感受,优点及建议。
Tyche:ODPS本身具有非常好的存储性能和计算性能,但个人建议对模型的接口再多些,我们希望能针对要解决的问题对一些模型的内部核心代码以及一些细节进行针对性的改进。
“数据心跳”,厦门大学硕士研究生,F1最后得分约为6.12%左右,最终排名第4。
CSDN:请描述你的解题思路、算法亮点以及着重攻坚方向,并具体的谈一下特征抽取、训练模型的建立,以及模型的训练思想。
数据心跳:
解题思路
首先,由于这是一个比赛,所以我们一切都以提高 F1成绩为目的。提高F1成绩,最有效直接的就是做Retargeting,也就是一个二分类问题。
对于这个二分类问题,我们发现正负类可以继续往下细分,所以我们将其转化为一个多分类的问题。
算法亮点
对多分类问题,发现可以在训练集上分成不重叠的几类。据此对数据进行拆分,分成几个子模型训练,可以集中优化效果较好的子模型,充分利用了资源,提高了效率。
攻坚方向
如何科学地将二分类问题划分为多分类问题。如果让划分既不会太细,并且划分后可以提高成绩。
特征抽取
由于个人对业务的不了解,特征抽取使用了偏工程化的提取方法。我先把各种统计粒度的特征都提取出来,以此保证特征的信息量。然后进行各种各样的特征交叉,来提高单一特征的刻画能力。
训练模型
由于这次比赛是在阿里的odps平台上,接口开放有限制,自己实现模型风险大,性价比不高。所以模型主要用的是ODPS内部的一个算法库Xlib提供的模型。这次主要的模型是GBRT(梯度渐进回归树)和RF(随机森林),主要就是用这两类模型,以及他们的组合变种。模型的训练也比较简单,不需要自己造轮子,只要调用xlib提供的算法接口,一个函数就可以完成训练过程。
模型训练思想
主要用的是两类模型。RF主要的思想就是用bagging,是一种并行的算法,用很多的弱模型组合出一个强模型。而GBRT主要的思想是boosting,是一种串行的算法,每棵树用前一棵树的残差来训练。
CSDN:谈谈比赛感想。
数据心跳:这是一个很好的比赛,也是很好一次学习机会。首先可以接触到真实的工业界大数据,这是在很多实验室梦寐以求的一件事,真实的数据也让我们动手实践,在真正的数据上探索和学习。然后是接触了阿里巴巴开发的 odps平台,这是一个很好的分布式计算平台,把很多不同的任务都统一在一个平台上,速度快,也让我们学会了很多分布式编程的技巧。最后通过这次比赛和很多牛人交流和学习,也提高了自身的能力。
CSDN:ODPS使用感受,优点及建议。
数据心跳:ODPS是一个很好的平台,他把SQL,MapReduce,MPI,统一在一个平台上,这是一个很先进的技术,在世界上也是很领先的。并且ODPS的执行速度也很快,内部提供的很多算法库效果也很好。建议的话,主要是对不同队伍的资源分配和限制问题,这次比赛,有时候会出现一个队伍,占了ODPS总资源的一半以上,希望有更合理的资源分配方案。
Fly402团队由3名硕士研究生组成,其中两位来自南京航空航天大学,一位来自东南大学,封榜前6.14%。
CSDN:请描述你的解题思路、算法亮点以及着重攻坚方向,并具体的谈一下特征抽取、训练模型的建立,以及模型的训练思想。
Fly402:
解题思路
本次比赛赛题是根据用户4个月在天猫的行为日志,建立用户的品牌偏好,并预测他们在将来一个月内对品牌下商品的购买行为。由于预测“购买”以及给定数据集的抽样方法的问题,预测未交互部分(用户历史行为没有接触的品牌)的准确度不高。所以整个比赛中的重点放在交互部分(用户历史行为接触过的品牌),然后将这个问题转为一个二分类问题,可以采用现有的有监督的分类回归算法(逻辑回归、SVM、随机森林、GBRT)等,最后基于基本的算法模型进行模型融合。
算法亮点
将训练集分为“购买过”跟“未购买过”两部分,分别训练,对预测集同样分为两部分,分别预测,最后两部分融合。
为了训练集和预测集的信息量差异,将不同时间尺度的训练集预测集分别训练预测,最后融合。
逻辑回归模型与树模型采用不一样的特征体系,使得融合效果更好。
攻坚方向
构建特征
构建训练集和预测集
数据预处理
构建本地评估框架
模型融合
特征抽取
训练样本的基本形式是一对有交互的用户品牌对,我们对这样的用户品牌对提取特征。首先,从总的分类上分为用户的特征、品牌的特征、用户对这个品牌的特征;其次,考虑用户行为的周期性,从时间维度上分为最近一个星期、半个月、一个月等不同时间段的特征;然后,根据这次比赛给定的四种行为(点击、购买、收藏、购物车),从类型维度上去提取特征。在多维度考虑的基础上,主要提取的是点击数、天数、订单数这样的特征。
这次比赛的目的是由给定的数据去促进业务的提高,从数据到业务需要算法以及特征体系的驱动,在特征抽取的过程中,最本质的一点是要去让数据“贴合”业务,反过来就要求我们从业务指标出发提取特征。参照一些电商分析网站以及自己对业务的理解,诸如用户购买力、品牌购买成本、转化率、用户对品牌的忠诚度等等指标都可以从给定的数据集得以体现。典型的,比如如何衡量品牌的购买成本,可以使用购买该品牌的用户数、回头客的数量、平均每个回头客的回头次数等等来体现这个指标。
特征抽取的最后一部分主要是在之前特征体系的基础上做一些补充,主要有:
比值类特征。主要是一些基本特征的相除,这个一般是具有直观含义的,比如用户购买某个品牌的次数除以用户总的购买次数,这可以体现这个品牌在用户整个购买行为中的地位。
均值、方差类特征。主要是一些购买次数、活跃天数等统计值的平均值或方差,可以体现某些用户某些行为的平均水平或者波动情况。
策略。Season1的时候更多的考虑通过策略来预测,Season2的时候把一部分策略转化为特征,比如最后一次购买之后的点击次数等。
模型训练
这次比赛我们团队主要使用并且起作用的模型有三个:逻辑回归、随机森林和GBRT,逻辑回归本质是一个线性模型,如果为了防止过拟合,可以添加正则化项;如果方便特征的筛选,可以使用逐步逻辑回归;逻辑回归在大数据量下精度会下降,可以通过添加大量的特征(比如哑变量的方式)来提高精度,这次比赛来看,跟随机森林和GBRT相比,逻辑回归单模型上存在天然的劣势。随机森林跟GBRT都是一种ensemble方法,随机森林是一种多棵决策树组合,最后bagging的方法;GBRT是一种boosting方法,每棵树学习的是上一棵树的残差。对于模型的训练我们团队主要有两点心得:
训练集和预测集的构造。我们通过前三个月提取特征,最后一个月标记来构造训练集;在预测的时候,我们使用四个月所有的行为构造预测集,跟训练集相比,时间尺度上不一样,但是这样会带来更多信息量、更多的用户品牌对,比三个月预测的效果好一些。在处理训练集和预测集时间尺度上不一致时,需要进行数据规格化处理,这里我们使用的是归一化方法(仅仅归一化时间尺度不一致的特征)。归一化方法对离群点比较敏感,这个过程中,需要对数据进行去噪,从而保证训练集跟预测集特征分布的一致性。去噪时,我们去除了异常点击量和异常购买量的用户品牌对。
健壮的本地测试。本地测试时,我们尝试过两种方法,一种是将原始的训练样本集划分,80%训练,20%用来本地测试,这种方法跟实际线上训练预测的关系不一样,并且训练集跟测试集的特征分布式一致的,很多问题不易察觉。另外一种方法,本地最后一个月有购买行为的用户品牌对用来测试,前三个月的数据按照线上训练预测的方式构造训练集跟预测集,这种方式时间跨度跟少一个月,但是正样本的数量以及跟线上实际情况很接近,我们主要使用这种方法来本地调参以及部分特征的调试。
CSDN:谈谈比赛感想。
Fly402:比赛历时142天,能够走到最后的队伍首先得是一只乌龟,我们很开心自己做到了这点,除此以外,通过142天的努力,我们不断学习、不断尝试、不断反思,拥抱海量真实数据,锻炼了团队合作能力,一切都是值得的!同时,我们也认识到了与优秀队伍的差距,利用这次宝贵的学习机会,取长补短,更进一步!这次比赛给的是真实数据,真实数据的处理跟平时做实验室差别很大,大数据量下的每一次尝试都需要比较大的代价,我们在比赛的过程中,也尝试了很多其他的算法,在这个数据集上效果都不好。但是通过不断摸索,我们也积累了很多大数据处理的经验。在探索大数据的路上,我们只能说,路漫漫其修远兮,吾将上下而求索!
CSDN:ODPS使用感受,优点及建议。
Fly402:
优点:
分布式集群架构,支持MapReduce和SQL语句(支持UDF扩展),程序员上手快。
提供很多数据处理、数据分析的方法以及机器学习算法,极大地方便了大数据分析与处理。
支持Python脚本,提供了各种Python函数接口,方便了自动化运行。
支持多用户管理协同分析数据,便于团队合作。
建议:
Xlab脚本编辑功能有待完善,图形化界面不是很成熟。
目前仅支持MapReduce,没有提供其他的并行化开发接口,也没有提供更多的算法接口,自己动手实现算法的难度比较大。
希望提供更强的编辑器(Vim等),提供代码管理工具(Git等)。
2nd: KLMJV KLMJV团队是来自南京航空航天大学的硕士研究生,最后获得了6.14+%的F1值。
CSDN:请描述你的解题思路、算法亮点以及着重攻坚方向,并具体的谈一下特征抽取、训练模型的建立,以及模型的训练思想。
KLMJV:对于这次比赛的问题,我也只能按照我这几个月以来的经验和学习到的知识来进行说明,有不到位或者错误的地方非常希望大家指出来,并给出改正意见,非常希望和你们交流。
大家从官网也可以了解到,这次的问题是根据用户对品牌操作的四种行为和时间来预测用户在下个月会购买的品牌,是一个购买预测问题,用户和品牌字段经过加密处理,也就是最终我们只能从用户的行为和时间上去提取关键信息来进行问题处理。
和很多拿到这个问题的同学一样,一开始都觉得是推荐问题,那么通过查阅相关资料自然而然的都是协同过滤等相关推荐算法,实际效果可想而知。具体原因我认为是品牌的转移成本,具体是什么意思呢?打个比方,一个普通的消费者,前三个月某一天购买了苹果的一款手机,根据商品相似等算法我们可能得到苹果和三星很相似,然后在第四个月系统向他推荐了三星,从一个消费者的正常心理来看,这种推荐很难促成交易的发生。也许这个比方不太恰当,但是这个例子反映的信息包括品牌的实际周期,用户对品牌的黏度,消费能力,还有时间季节等因素,我们仅仅通过赛题给出的字段很难分析出这些因素,而这些都是反映品牌的转移成本的关键因素,因为购买行为的发生不是一个单步,而是涉及到很多前因后果以及最终的整体相关性的问题。
基于以上考虑,实际上留给我们的就是挖掘买买相关,看买相关的这部分信息,从这点出发这次的问题实际上就是一个有监督的二分类问题。对于这个问题,很多队伍包括我在内都是以时间先后为默认因果关系来进行训练集和预测集的构造,涉及到相关性构造的可能只在本地评估的时候用到,例如K-折。
大家可能很关心特征的问题,这个的确是非常重要的部分,具体的内容就不透露了,这里就谈谈大的几个点吧。特征方面主要包括统计量,根据对象客观特性的拟合量以及通过模型得到的输出结果,涉及到业务特征和规律特征,大家可以根据自己的理解和参考网站用户价值分析之类的博文或者相关的文献。
模型上阿里的ODPS平台提供了诸如LR,基于DT的分类器以及SVM,Bayes等等,很遗憾的是我没有自己实现算法,大家感兴趣可以去问问Marvel他们的NN实现,这里的微改进就是利用bagging和boosting的思想对结果进行组合。大数据这块模型的选择大家可以去参看给力哥的微博,一个是maxentropyclassifier,另外一个则是DTbasedmodel,前者需要辅助大维度特征来提高精度,而后者只适合在一定维度内发挥作用。
这里我的主要精力放在了特征的选择和处理上,毕竟特征在这次比赛中是最重要的部分。这里说说特征的选择可以参考的方法,一个是看特征和目标列的相关性,特征的信息增益等指标,特征之间的相关性以及特征敲除的影响,不过这些方法只适合特征比较少的情况,在大场合应用中,很难做到那么细致,所以这也是比赛和实际应用的差别,即使模型中涉及到特征筛选的策略,这种计算的代价成本也是不小的,而且也很难做到最优。
特征的处理我认为是一个非常重要的部分,这里涉及到数据的一致性问题。因为数据最终是通过特征来体现的,因此特征处理的最终目的也是为了保证数据的一致性。
在模型训练预测中,常常会出现过拟合这个词语,这里根据我个人的理解我想说的是,过拟合指的是在某些特征量上的过拟合,而具体包括拟合了噪音,离群点等等。这块的处理方式很多,包括对模型加正则化处理,以及采取bagging,boosting等方法减少这种现象,而我认为所有这些实际和过拟合无关,而只是涉及到泛化性或者称为稳定性,其中对模型的改进涉及到的是模型所采用方法的泛化性,体现模型本身的鲁棒性,而对特征的处理所涉及的则是特征的泛化性。
泛化性都很好的特征和模型的组合,实际上留给最后融合的空间并不是很大,有一句话叫做殊途同归,最后所有的优秀组合都能得到同样的结果。但是谁都无法真正做到具有完美泛化性的模型和设计出完美的特征体系,这也是融合的意义所在,通过融合来得到更加稳定的结果。关于模型融合的方法和思想推荐大家看南大周志华老师的“ensemblemethod”,前面提到的bagging和boosting实际上就是一种融合的思想。
由于模型设计的目的本身就是为了最小化分类的错误率,其中模型参数调整的最终目的也是为了减小模型在训练样本上的错误率,因此在训练上,如果不是很好的理解了过拟合这件事情,很容易以为可以通过调参来使得本地欠拟合来提高泛化性,我觉得这不是一个正确的方向。
CSDN:谈谈比赛感想。
KLMJV:后关于这次比赛我觉得非常的有意义,在这个过程中我学到了很多东西,也同时了解到了机器学习,大数据以及相关行业更多的场景和问题,这种对比在认知上的冲击非常大,但是也让人非常的兴奋,用一个句子来表达这种心情就是:还有好多东西要学!
CSDN:ODPS使用感受,优点及建议。
KLMJV:ODPS的整体使用感觉还是相当不错的,数据处理能力很强,而且这上面提供的xlib中的各种模型对数据分析也非常实用,尽管还不是很完备。整个过程中虽然还是感觉sql的大批量查询上的效率不是很高,同时MR在自己实现算法上还不是那么方便,不过相信随着使用场景的增多,系统的优化改进,ODPS会越来越好用。
1st:Marvel Marvel,取其英文含义,奇迹。Marvel团队目前有两名队员,分别来自北京航空航天大学和中国科学院大学,F1得分为6.21。
CSDN:请描述你的解题思路、算法亮点以及着重攻坚方向,并具体的谈一下特征抽取、训练模型的建立,以及模型的训练思想。
Marvel:
解题思路:根据用户4个月在天猫的行为日志,预测用户u在将来一个月是否会购买某个品牌b。从而将问题转化为一个分类问题来解决。
算法亮点:在分类模型的选择上,我们除了使用阿里巴巴Xlab中提供的GBRT、RF、LR等模型外,还基于ODPS实现了神经网络算法。
特征提取:在特征提取过程中,我们是基于对业务的理解和对数据的分析来提取特征。特征分为四大类:行为特征、品牌特征、用户特征和交叉特征。
训练集的构造:由于feature区间和label区间的分界点的选择对模型训练有影响,我们采用滑窗的方式构造训练集。滑动了4个小集合,这四个小集合merge起来构成训练集(见图片)。
模型的训练思想:
由于这个问题中正负样本比例悬殊,我们使用了级联的思想过滤掉大量的样本来提升训练速度,同时也提升了模型准确率。在第一级选用训练和预测速度都较快的逻辑回归模型,过滤掉>80%的样本。在第二级选用拟合能力更强的GBRT、RF、神经网络等非线性模型。最后选用神经网络将第二级的非线性模型融合起来。
CSDN:谈谈比赛感想。
Marvel:通过这次比赛,我们接触到了真实的大数据,探索如何在分布式环境下做数据分析、特征提取和模型训练。每天起来查成绩、想着如何优化算法已经成为我们学习生活中的重要组成部分。期待第三赛季!
CSDN:ODPS使用感受,优点及建议。
Marvel:ODPS操作方法和Hadoop较为类似,同学们可以很快上手。从第二赛季前期排行榜的变化也可以看出,很多同学在一到两周的时间内就可以完成在ODPS上特征提取和模型训练。
ODPS的优点在于对离线的结构化数据提供了多种易用的操作接口。可以使用SQL语言操作数据,可以编写MapReduce程序来进行复杂的计算,也可以通过xlab提供的现成方法对数据进行各种统计和模型训练。
行为特征主要描述一个用户u对某个品牌b的操作历史,如操作次数、操作间隔等。行为特征提取过程中会考虑时间衰减。
品牌特征主要描述一个品牌的属性,如品牌的热度、销量、转化率。
用户特征则描述了用户的属性,如用户的活跃程度、用户转化率等。
交叉特征是基于前三类特征构造出来的新特征。例如用ub对的点击次数除以该用户u的点击次数,刻画了用户u对品牌b的偏爱程度。
以上是关于天猫推荐算法大赛Top 9团队的主要内容,如果未能解决你的问题,请参考以下文章