历时四个多月的2014阿里巴巴大数据竞赛终于告一段落,在竞赛第三季即将开始之前,CSDN与排名前9的团队取得联系,并做了简要采访。而在领略天猫推荐算法大赛Top 9团队风采之前,我们首先对大赛背景进行一个简要的回顾。
首届竞赛以天猫推荐算法大挑战为主题,提供抽样后的1千多万天猫用户,2万多个天猫品牌,总计5.7亿条经脱敏后的天猫海量真实用户的行为记录数据。所有的数据经过严格的脱敏处理,切实保障消费者与品牌商的数据隐私。选手通过建立算法模型分析用户在天猫上的行为日志,建立用户的品牌偏好,并预测他们在将来一个月内对品牌下商品的购买行为。大赛平台基于阿里云的开放数据处理服务ODPS,为高校学子提供大数据实战机会。
此次“脚踏实地”的数据竞赛,获得了高校和科研机构的强烈反响――从大数据竞赛3月10日宣布报名以来,在短短的一个月内,就迅速吸引了全球14个国家和地区7276支队伍参赛,经过了4个月的多轮选拔,有几百只队伍坚持下来了,并且取得了非常不错的成绩。而更值得关注的是,选手的成绩已经超过了内部赛的阿里工程师(ps:内部赛的周期很短)。比赛接下来将进入第三赛季,第二赛季的TOP 3选手将受邀参加天猫双十一实战,与天猫算法团队正面交锋,使用真实的第一手数据,让其算法上线接受真实流量的考验。
9th:Give
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,难以分出高下。而做真实大数据的比赛,不以创新为出发点,而是从实际效果出发,选择最合理的方法,着重考察学生应用所学知识解决问题的能力,在分享交流时,好的方法可以交流,不好的方法走过的坑也可以拿出来分析探讨。希望今后学术界的创新精神和工业界的效果务实精神能有一个有机结合。
大赛建议方面,一是希望大赛平台能更加完善,开放更多接口使大家能更好的实现自己的原创算法。二是希望能更多的介绍赛题的业务背景,激发大家对赛题的兴趣,也是让大家明白自己到底在做什么。
7th:Bazinga
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# |
action day# |
action day# |
action day# |
|
valid click# |
distinct action brand# |
distinct action user# |
|
valid click day# |
distinct first action brand# |
distinct first action user# |
|
action per brand per day# |
action per 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 |
action flag |
action flag |
action flag |
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 |
主要用到的模型有GBRT和RF模型,这两种模型是基于决策树的模型,都是将若干个弱决策树用某种方式聚合成森林来进行训练和预测。不同的是GBRT是在梯度上建立决策树,用Boosting的思想进行融合;而RF是在采样出数据和特征后建立决策树,并用Bagging的思想进行融合。
6. 融合在得到两个基础模型产生的结果后,我们用了一个简单的两级线性融合的方法对我们的模型进行融合。第一级融合是根据本地训练集的结果学出来一个lr(Logistic Regression)线性模型进行融合;第二级则是简单地对第一级的预测结果进行平均融合。
7. 流程化所有的前面的步骤我们都进行了流程化,也就是运行一个脚本便可以从最原始的数据表,运行到最后的提交结果表。
CSDN:谈谈比赛感想。
Bazinga:这次比赛,给了我们一次体验工业界大数据的宝贵机会。与之前在实验室接触到的小规模数据集不同,大数据不仅拥有更大的数据规模,数据本身更加复杂,处理的难度更大。在参赛伊始,我们认真地分析了比赛的任务,并通过查阅资料去理解真实的业务场景。从利用简单的规则做出最早的几次提交,到后来利用机器学习的方法来提高预测的效果,我们对问题的认识进一步的加深,对数据也有更多的理解。值得一提的是,在这次比赛中,我们团队的三位成员很好地进行了团队协作。每位成员都会负责推进一块子任务,同时,我们也会保持充分的沟通,遇到困难大家一起讨论,寻找解决方案。高效的团队协作让我们一直保持着较好的成绩。大赛组委会也为我们颁发了“最佳团队奖”。
CSDN:ODPS使用感受,优点及建议。
Bazinga:ODPS具有很好的数据存储能力和计算能力,并且简单易用。但在实际使用过程中,我们也发现一些需要改进的地方。比如,可以加强一下MapReduce作业的可视化,让我们可以方便地查看当前执行的精度,预计完成时间等信息。
6th:Kevin
Kevin,清华大学博士生,研究方向为复杂工业过程智能建模与优化,发表/录用若干论文。29号封榜前为6.124%,最终排名第6。
CSDN:请描述你的解题思路、算法亮点以及着重攻坚方向,并具体的谈一下特征抽取、训练模型的建立,以及模型的训练思想。
Kevin:
解题思路。首先是分析问题的特点,将本次比赛的推荐与传统的推荐做了对比,以及对比赛与实际线上推荐进行了分析,指明了解题的基本思路。
算法亮点。算法的亮点是对不同的用户-品牌类型进行了分类,并采取了不同的处理方法。
着重攻坚方向。根据对业务及数据的分析,着重进行了特征的构造。
特征抽取、训练模型的建立,以及模型的训练思想。根据对业务及数据的分析,对特征进行构造,并基于Case分析,迭代构造新的特征。模型采用比较适合本次比赛的RF/GBRT/LR等模型。
CSDN:谈谈比赛感想。
Kevin:比赛时间很长,单干参赛,很累。整个过程下来,收获也很多,完成数据分析、数据预处理、特征提取、模型选择、参数调优、模型融合及数据后处理整个项目流程,积累了独立完整的数据挖掘实践经验。阿里巴巴第一次在ODPS平台上举办外部的大型比赛,参赛队伍是同类比赛中最多的,总体来说非常成功。
CSDN:ODPS使用感受,优点及建议。
Kevin:ODPS简单、方便、易用,只需要懂得SQL及Python就可以满足基本需求。只是提供的基础算法还不是很多,建议提供更多的算法以及接口供外部实现算法用。
5th:Tyche团队
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)等,最后基于基本的算法模型进行模型融合。
算法亮点
攻坚方向
特征抽取
训练样本的基本形式是一对有交互的用户品牌对,我们对这样的用户品牌对提取特征。首先,从总的分类上分为用户的特征、品牌的特征、用户对这个品牌的特征;其次,考虑用户行为的周期性,从时间维度上分为最近一个星期、半个月、一个月等不同时间段的特征;然后,根据这次比赛给定的四种行为(点击、购买、收藏、购物车),从类型维度上去提取特征。在多维度考虑的基础上,主要提取的是点击数、天数、订单数这样的特征。
这次比赛的目的是由给定的数据去促进业务的提高,从数据到业务需要算法以及特征体系的驱动,在特征抽取的过程中,最本质的一点是要去让数据“贴合”业务,反过来就要求我们从业务指标出发提取特征。参照一些电商分析网站以及自己对业务的理解,诸如用户购买力、品牌购买成本、转化率、用户对品牌的忠诚度等等指标都可以从给定的数据集得以体现。典型的,比如如何衡量品牌的购买成本,可以使用购买该品牌的用户数、回头客的数量、平均每个回头客的回头次数等等来体现这个指标。
特征抽取的最后一部分主要是在之前特征体系的基础上做一些补充,主要有:
模型训练
这次比赛我们团队主要使用并且起作用的模型有三个:逻辑回归、随机森林和GBRT,逻辑回归本质是一个线性模型,如果为了防止过拟合,可以添加正则化项;如果方便特征的筛选,可以使用逐步逻辑回归;逻辑回归在大数据量下精度会下降,可以通过添加大量的特征(比如哑变量的方式)来提高精度,这次比赛来看,跟随机森林和GBRT相比,逻辑回归单模型上存在天然的劣势。随机森林跟GBRT都是一种ensemble方法,随机森林是一种多棵决策树组合,最后bagging的方法;GBRT是一种boosting方法,每棵树学习的是上一棵树的残差。对于模型的训练我们团队主要有两点心得:
CSDN:谈谈比赛感想。
Fly402:比赛历时142天,能够走到最后的队伍首先得是一只乌龟,我们很开心自己做到了这点,除此以外,通过142天的努力,我们不断学习、不断尝试、不断反思,拥抱海量真实数据,锻炼了团队合作能力,一切都是值得的!同时,我们也认识到了与优秀队伍的差距,利用这次宝贵的学习机会,取长补短,更进一步!这次比赛给的是真实数据,真实数据的处理跟平时做实验室差别很大,大数据量下的每一次尝试都需要比较大的代价,我们在比赛的过程中,也尝试了很多其他的算法,在这个数据集上效果都不好。但是通过不断摸索,我们也积累了很多大数据处理的经验。在探索大数据的路上,我们只能说,路漫漫其修远兮,吾将上下而求索!
CSDN:ODPS使用感受,优点及建议。
Fly402:
优点:
建议:
KLMJV团队是来自南京航空航天大学的硕士研究生, 最后获得了6.14+%的F1值。
CSDN:请描述你的解题思路、算法亮点以及着重攻坚方向,并具体的谈一下特征抽取、训练模型的建立,以及模型的训练思想。
KLMJV:对于这次比赛的问题,我也只能按照我这几个月以来的经验和学习到的知识来进行说明,有不到位或者错误的地方非常希望大家指出来,并给出改正意见,非常希望和你们交流。
大家从官网也可以了解到,这次的问题是根据用户对品牌操作的四种行为和时间来预测用户在下个月会购买的品牌,是一个购买预测问题,用户和品牌字段经过加密处理,也就是最终我们只能从用户的行为和时间上去提取关键信息来进行问题处理。
和很多拿到这个问题的同学一样,一开始都觉得是推荐问题,那么通过查阅相关资料自然而然的都是协同过滤等相关推荐算法,实际效果可想而知。具体原因我认为是品牌的转移成本,具体是什么意思呢?打个比方,一个普通的消费者,前三个月某一天购买了苹果的一款手机,根据商品相似等算法我们可能得到苹果和三星很相似,然后在第四个月系统向他推荐了三星,从一个消费者的正常心理来看,这种推荐很难促成交易的发生。也许这个比方不太恰当,但是这个例子反映的信息包括品牌的实际周期,用户对品牌的黏度,消费能力,还有时间季节等因素,我们仅仅通过赛题给出的字段很难分析出这些因素,而这些都是反映品牌的转移成本的关键因素,因为购买行为的发生不是一个单步,而是涉及到很多前因后果以及最终的整体相关性的问题。
上一篇 API企业化战略部署三部曲(一)