3rd:Fly402Fly402团队由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:KLMJVKLMJV团队是来自南京航空航天大学的硕士研究生, 最后获得了6.14+%的F1值。
CSDN:请描述你的解题思路、算法亮点以及着重攻坚方向,并具体的谈一下特征抽取、训练模型的建立,以及模型的训练思想。
KLMJV:对于这次比赛的问题,我也只能按照我这几个月以来的经验和学习到的知识来进行说明,有不到位或者错误的地方非常希望大家指出来,并给出改正意见,非常希望和你们交流。
大家从官网也可以了解到,这次的问题是根据用户对品牌操作的四种行为和时间来预测用户在下个月会购买的品牌,是一个购买预测问题,用户和品牌字段经过加密处理,也就是最终我们只能从用户的行为和时间上去提取关键信息来进行问题处理。
和很多拿到这个问题的同学一样,一开始都觉得是推荐问题,那么通过查阅相关资料自然而然的都是协同过滤等相关推荐算法,实际效果可想而知。具体原因我认为是品牌的转移成本,具体是什么意思呢?打个比方,一个普通的消费者,前三个月某一天购买了苹果的一款手机,根据商品相似等算法我们可能得到苹果和三星很相似,然后在第四个月系统向他推荐了三星,从一个消费者的正常心理来看,这种推荐很难促成交易的发生。也许这个比方不太恰当,但是这个例子反映的信息包括品牌的实际周期,用户对品牌的黏度,消费能力,还有时间季节等因素,我们仅仅通过赛题给出的字段很难分析出这些因素,而这些都是反映品牌的转移成本的关键因素,因为购买行为的发生不是一个单步,而是涉及到很多前因后果以及最终的整体相关性的问题。
基于以上考虑,实际上留给我们的就是挖掘买买相关,看买相关的这部分信息,从这点出发这次的问题实际上就是一个有监督的二分类问题。对于这个问题,很多队伍包括我在内都是以时间先后为默认因果关系来进行训练集和预测集的构造,涉及到相关性构造的可能只在本地评估的时候用到,例如K-折。
大家可能很关心特征的问题,这个的确是非常重要的部分,具体的内容就不透露了,这里就谈谈大的几个点吧。特征方面主要包括统计量,根据对象客观特性的拟合量以及通过模型得到的输出结果,涉及到业务特征和规律特征,大家可以根据自己的理解和参考网站用户价值分析之类的博文或者相关的文献。
模型上阿里的ODPS平台提供了诸如LR,基于DT的分类器以及SVM,Bayes等等,很遗憾的是我没有自己实现算法,大家感兴趣可以去问问Marvel他们的NN实现,这里的微改进就是利用bagging和boosting的思想对结果进行组合。大数据这块模型的选择大家可以去参看给力哥的微博,一个是max entropy classifier,另外一个则是DT based model,前者需要辅助大维度特征来提高精度,而后者只适合在一定维度内发挥作用。
这里我的主要精力放在了特征的选择和处理上,毕竟特征在这次比赛中是最重要的部分。这里说说特征的选择可以参考的方法,一个是看特征和目标列的相关性,特征的信息增益等指标,特征之间的相关性以及特征敲除的影响,不过这些方法只适合特征比较少的情况,在大场合应用中,很难做到那么细致,所以这也是比赛和实际应用的差别,即使模型中涉及到特征筛选的策略,这种计算的代价成本也是不小的,而且也很难做到最优。
特征的处理我认为是一个非常重要的部分,这里涉及到数据的一致性问题。因为数据最终是通过特征来体现的,因此特征处理的最终目的也是为了保证数据的一致性。
在模型训练预测中,常常会出现过拟合这个词语,这里根据我个人的理解我想说的是,过拟合指的是在某些特征量上的过拟合,而具体包括拟合了噪音,离群点等等。这块的处理方式很多,包括对模型加正则化处理,以及采取bagging,boosting等方法减少这种现象,而我认为所有这些实际和过拟合无关,而只是涉及到泛化性或者称为稳定性,其中对模型的改进涉及到的是模型所采用方法的泛化性,体现模型本身的鲁棒性,而对特征的处理所涉及的则是特征的泛化性。
泛化性都很好的特征和模型的组合,实际上留给最后融合的空间并不是很大,有一句话叫做殊途同归,最后所有的优秀组合都能得到同样的结果。但是谁都无法真正做到具有完美泛化性的模型和设计出完美的特征体系,这也是融合的意义所在,通过融合来得到更加稳定的结果。关于模型融合的方法和思想推荐大家看南大周志华老师的“ensemble method”,前面提到的bagging和boosting实际上就是一种融合的思想。
由于模型设计的目的本身就是为了最小化分类的错误率,其中模型参数调整的最终目的也是为了减小模型在训练样本上的错误率,因此在训练上,如果不是很好的理解了过拟合这件事情,很容易以为可以通过调参来使得本地欠拟合来提高泛化性,我觉得这不是一个正确的方向。
CSDN:谈谈比赛感想。
KLMJV:后关于这次比赛我觉得非常的有意义,在这个过程中我学到了很多东西,也同时了解到了机器学习,大数据以及相关行业更多的场景和问题,这种对比在认知上的冲击非常大,但是也让人非常的兴奋,用一个句子来表达这种心情就是:还有好多东西要学!
CSDN:ODPS使用感受,优点及建议。
KLMJV:ODPS的整体使用感觉还是相当不错的,数据处理能力很强,而且这上面提供的xlib中的各种模型对数据分析也非常实用,尽管还不是很完备。整个过程中虽然还是感觉sql的大批量查询上的效率不是很高,同时MR在自己实现算法上还不是那么方便,不过相信随着使用场景的增多,系统的优化改进,ODPS会越来越好用。
1st:MarvelMarvel,取其英文含义,奇迹。Marvel团队目前有两名队员,分别来自北京航空航天大学和中国科学院大学,F1得分为6.21。
CSDN:请描述你的解题思路、算法亮点以及着重攻坚方向,并具体的谈一下特征抽取、训练模型的建立,以及模型的训练思想。
Marvel:
解题思路:根据用户4个月在天猫的行为日志,预测用户u在将来一个月是否会购买某个品牌b。从而将问题转化为一个分类问题来解决。
算法亮点:在分类模型的选择上,我们除了使用阿里巴巴Xlab中提供的GBRT、RF、LR等模型外,还基于ODPS实现了神经网络算法。
特征提取:在特征提取过程中,我们是基于对业务的理解和对数据的分析来提取特征。特征分为四大类:行为特征、品牌特征、用户特征和交叉特征。
- 行为特征主要描述一个用户u对某个品牌b的操作历史,如操作次数、操作间隔等。行为特征提取过程中会考虑时间衰减。
- 品牌特征主要描述一个品牌的属性,如品牌的热度、销量、转化率。
- 用户特征则描述了用户的属性,如用户的活跃程度、用户转化率等。
- 交叉特征是基于前三类特征构造出来的新特征。例如用ub对的点击次数除以该用户u的点击次数,刻画了用户u对品牌b的偏爱程度。
训练集的构造:由于feature区间和label区间的分界点的选择对模型训练有影响,我们采用滑窗的方式构造训练集。滑动了4个小集合,这四个小集合merge起来构成训练集(见图片)。
模型的训练思想:
由于这个问题中正负样本比例悬殊,我们使用了级联的思想过滤掉大量的样本来提升训练速度,同时也提升了模型准确率。在第一级选用训练和预测速度都较快的逻辑回归模型,过滤掉>80%的样本。在第二级选用拟合能力更强的GBRT、RF、神经网络等非线性模型。最后选用神经网络将第二级的非线性模型融合起来。
CSDN:谈谈比赛感想。
Marvel:通过这次比赛,我们接触到了真实的大数据,探索如何在分布式环境下做数据分析、特征提取和模型训练。每天起来查成绩、想着如何优化算法已经成为我们学习生活中的重要组成部分。期待第三赛季!
CSDN:ODPS使用感受,优点及建议。
Marvel:ODPS操作方法和Hadoop较为类似,同学们可以很快上手。从第二赛季前期排行榜的变化也可以看出,很多同学在一到两周的时间内就可以完成在ODPS上特征提取和模型训练。
ODPS的优点在于对离线的结构化数据提供了多种易用的操作接口。可以使用SQL语言操作数据,可以编写MapReduce程序来进行复杂的计算,也可以通过xlab提供的现成方法对数据进行各种统计和模型训练。