原文:http://closure.blog.ustc.edu.cn/?p=117算法
阿里此次天猫推荐算法大赛题目的核心是给定用户对品牌的四个月的操做记录,预测下个月哪些用户对哪些品牌产生购买行为,这能够抽象为一个01分类问题,更确切的能够抽象为一个点击率预估(CTR)。与其说这是一次比赛,我以为更多的是一次认识,一次对大数据价值的深入认识,在分享本身的体会以前,我真心的感谢阿里,给咱们提供这样一种机会,让咱们在学校里能够接触真实的数据业务需求,让所学的理论能够有一次真实的实践机会。学习
关于此次比赛,我想简单分享下几个比较重要的点:大数据
第一点:特征提取,也称特征工程优化
在真实的业务场景中,特征和模型同样重要,花费一样的人力物力,作特征工程有可能比做模型和算法优化来的有效。天猫的大数据竞赛能够简单抽象为一个点击率预估问题,给定用户对品牌的操做行为,判断下个月买的可能性为多少。这里特征工程作的核心工做即构建用户对品牌的特征体系:由于原始数据集是关于用户对品牌在某个时间的某个行为操做,它是一个四维的张量,因此在提取feature的时候要充分考虑到这四个维度张量的信息。咱们最终的目标是把这四维张量压缩为一个二维的feature矩阵,并在这个feature上作模型的训练和预测。如何把这四维张量的信息通过加工提取造成一个二维的feature矩阵,这应该是作比如赛的第一步,并且是重要的一步。如今大部分选手用的都是基于业务、经验或者尝试来进行手工提取,因此这个比赛谁的业务理解深入,经验足可能会有更好的结果。blog
下面我说下咱们组的特征提取的过程:深度学习
咱们把特征集分为三个部分:第一是用户对品牌的直接特征体系,包括点击购买收藏和购物车,第一次点击购买,最后一次点击购买等;第二是用户的特征体系,包括用户总购买,总点击,点击转化比等;第三是品牌的特征体系,包括品牌购买用户,购买次数,点击转化比等等。为了把时间这一张量加入到特征体系中,咱们按照时间分片,每一个片里面提取相应的特征体系。基于一种观察,用户对品牌的购买行为和他最近的行为较为相关,因此时间片的划分应该知足最近的时间分片较细,较远的时间片划分粗粒度一些;这样就把时间这一张量的信息粗糙构建到feature中。数学
固然这只是一个很粗糙的一个特征体系的构建,还有不少的优化空间。自动化
下面我说下几个优化的点,这几点对咱们的成绩都有不小的提高:model
第一点:关于品牌或者用户的特征挖掘,简单的统计虽然对整个结果的准确性有必定提高,可是绝对不是最大的提高,一个很简单的例子:A和B两个品牌都被买了1000次,可是A品牌中不少人买了再买,而后再买,可是B品牌大部分买了一次都再也不买了,这是个很大的区别,也就是说在对品牌进行特征建模的时候,把用户的因素更加深入的结合到品牌中挖掘更加本质的特征,有点相似于寻找最优解同样,总有个方向最快通向最优解,可是如何找到这个最有方向,须要咱们深层去思考,这可能就是业务吧。方法
还有一点,A用户对B1和B2两个品牌都产生过一次操做,而且这两个品牌的特征体系基本相同,那如何判断对哪一个品牌买的可能性更大呢?这个基于简单统计的可能就难以去作,可是咱们深层的考虑下,经过协同过滤,咱们发现A用户曾经买的品牌中不少和B1产生一种联系,可是和B2品牌没啥联系,这样明显的A用户买B1的可能性就更大一些。
因此在作特征工程的时候,除了简单的数学统计外,咱们仍是要深刻思考整个业务场景,挖掘更加本质的特性,才会有更大的提高。
作好了特征工程,下面一个重要的一点就是模型选择和优化:
通常来讲,好的特征体系,不一样的模型都会有不错的效果,可是咱们仍是要根据不一样模型的特色作特定的优化。咱们在比赛中主要用到了逻辑回归、随机森林、梯度加强回归树。首先说下咱们在逻辑回归上遇到的一个大坑,对于逻辑回归要求特征具备线性可比较,一个简单的例子,一个用户对一个品牌点击了10次和100次,是否是点击100次的那个品牌必定比点击10的那个品牌要买的可能性大10倍,我想确定不是,可能买的可能性就大那么一点点而已,因此咱们要对特征进行一些变换,让其具备线性可比较性,咱们采起的措施是进行log变换,效果比原始数据要好不少。随机森林,虽然它能够适应与连续和离散的特征,且不须要特征具备线性化特征,可是连续特征给模型的训练带来很大的开销,且容易出现过拟合,若是对特征进行离散化,也许会有更好的效果,常见的就是等距和等频分箱,进行离散化处理,感受效果也不错。固然还有其余优化,好比逻辑回归中正则化调整,随机森林和GBRT的参数调优等,都会对结果有必定提高。
而后还要说一点,关于模型融合,这一点对于比赛来讲,多是决赛的最后一步:
关于模型融合,多是比赛最后阶段最重要的环节,这一环节咱们没有作的很好,可是仍是分享下组里的一些思路:其实gbrt和随机森林自己就是两个融合模型,一个是基于boosting的集成学习,一个是基于bagging的集成学习。下面说下模型的融合方案,能够分红两大方面:第一是模型内部的融合;第二是模型和模型之间的融合。关于模型内部融合,能够从如下方面考虑,第一是屡次采样,进行结果融合;第二是不一样特征子空间进行训练,结果进行融合;第三是简单模型级联融合,以线性回归为例,构建级联的线性model,每一个新的线性model是之前一个线性model的偏差为目标,作到偏差的级联消除。关于模型之间的融合,能够利用最小二乘计算最优的模型权重系数,而后进行融合。整体来讲,模型融合咱们可能须要再去深刻研究下。
最后说一些咱们没来得及作,可是值得尝试的方向:
首先关于特征提取,咱们能够对特征进行组合,造成必定富特征,也许能够提高分类器的精度,至于如何组合,目前我尚未自动化组合学习的思路,可是人工组合是一个可行的方法。
关于上述咱们介绍的从四维张量到二维特征矩阵的提取,是否是有更加自动的方法去作自动特征提取,这一方面,我调研了两个方案:一个是张量分解,把高维转化为几个低维的乘积;另一个是深度学习,无监督自学习特征,固然这两点可能作的难度要大不少。
关于gbrt,天池默认的是最小二乘的回归模型,其实这种基于gradient boosting的加强学习模型能够经过简单的转化,转化为分类模型,好比mlr(多分类逻辑回归)实际上就是一种gradient boosting的分类模型,这样可能比把分类问题强行转化为回归问题更靠谱一些。
咱们队是“冲刺了!”,二阶段第51名,虽然名次有点遗憾,可是学到了太多东西,感谢阿里!附咱们队合影,感谢可爱的队友。