特征工程与规则模型_特征工程

特征工程&规则模型

导语

    在诸多比赛中,常常都可以听说到一些高手避开了XGBoost、TensorFlow等高端机器学习模型,利用一些简单的数据处理就获得榜单的首位。这些简单的数据处理方法常被这些高手称为“规则”模型。

新手在接触比赛之后,费劲千辛万苦之后可能发现自己的模型的分数还远远赶不上高手的简单几行代码发现的规则模型分数。这表面上看是跟高手之间经验的差别,其实这从深层次体现了特征工程的重要性,因为规则就是强特(与目标相关性很高的特征)的提取和组合。

那么数据挖掘为什么需要特征工程,这是很多初学者在拿到数据之后,感到特别疑惑的地方。为什么不能把数据直接丢进模型当中跑呢?当然,数据直接丢进模型中跑是可以的,只是模型并不一定能学习到正确的事情。

特征工程在数据挖掘中究竟有什么样的意义呢?我想这个问题很多论坛还有公众号都比我说的要更加详细,这里我个人比较倾向于知乎上的一个答案“特征工程到底是什么?”,里面有很多厉害的高手都给出了自己的解答,而本文则是想从侧面来解析拿到一个题目或者数据之后,不妨先做一个规则模型。。里面有很多厉害的高手都给出了自己的解答,而本文则是想从侧面来解析拿到一个题目或者数据之后,不妨先做一个规则模型。

这里我先给出规则模型的定义:针对给出的数据,进行分析提取一些有用的数据或者进行数据的组合完成最后的数据分析目标所构造的模型就是规则模型。由上面我给出的定义来看,细心的你可能就发现建立规则模型是一种帮助自己深入数据和理解任务的一个有效过程。

为什么先做规则模型呢?这里我将结合今年腾讯比赛给出自己的理解。今年腾讯广告算法比赛的目的是希望选手利用历史的广告曝光信息,来预测未来某一天某种广告配置属性下面的广告的日曝光量大小。后台发送“2019腾讯比赛”,返回赛题手册链接。

01

规则模型是目标数据特点的体现

首先,规则模型有可能是目标预测数据特点一个体现。在今年腾讯广告算法的初赛中,大家发现了一个非常强的规则模型,那就是旧广告的曝光数据直接取历史曝光数据的中位数,然后新广告的曝光值直接用0来填充,这是为什么呢?我们团队在初赛中,机器学习的模型分数一直都低于规则的模型分数。那是因为我们的模型的分数并没有学习到曝光值的特点,而规则模型却学到了,因为最后测试集的曝光数据的值大部分都是很小的数值,而且有大部分可能就是0,因而新广告直接填充0最后线上分数很高,就从侧面帮助我们了解到了目标数据的特点和分布。

02

规则模型=高级的特征工程

其次,建立规则模型本身就是一个高级的特征工程。在今年腾讯广告算法大赛的复赛中,又有高手发现了一个很强的规则模型,那就是利用广告的历史曝光次数除以曝光请求总数得到历史的曝光胜率,然后利用这个胜率乘以最后测试集广告的总请求数量,就可以得到曝光数。我们团队在“发现”了这个规则模型之后,队长非常敏锐的意识到了这是一个非常有用的特征。规则模型做出来的这个特征本身不仅仅反应了广告在曝光当日的广告的覆盖量,另一方面又反应了广告相对于其他广告的竞争力。事实上,在我们采用热力图分析这个特征与目标的相关性的时候,也发现相关性达到了80%。利用上了这个特征之后,我们团队的机器学习模型的分数才真正的超过了规则模型的分数。这个规则模型的建立本身就是在挖掘预测目标跟已有数据之间的联系,所以规则模型就是在帮助选手深入理解数据和目标。

03

规则模型有助于对模型的优化

最后,规则模型还有助于对模型的优化。第一点就提到了新广告的曝光数据直接填充0,模型的分数就可以很高,这说明了数据分布很接近0,那么这就启发了很多参赛队员要对线上的准确性指标进行优化。如下图所示,可以看出准确性指标肯定是越小说明模型的分数更高。但是如果真实值和目标值都是0的话,准确性指标函数就变为0了,所以我们就需要对模型的训练loss进行平滑,参见上一篇推送文章“​​腾讯比赛总反思-附top选手的方案​​”,可以发现很多top选手在训练LGB或者NN模型的时候都进行了平滑,这样可以保证自己模型的训练loss变化跟线上的评分比较贴合,从而可以通过线下Loss变化来猜测线上的变化。

特征工程与规则模型_数据_02

规则模型不仅是优化loss函数,很多队伍还发现了如果大部分曝光值都比较小的话,可以先做分类模型然后再做回归模型。即,先将目标预测值分类成3中,分别是预测值为0,预测值为1,预测值大于1。然后再对预测值大于1的哪一类再用模型去回归具体车曝光值,事后询问相关top选手,这个方案可以提分1分左右。

特征工程与规则模型_机器学习_03

由此可见,相信你会发现规则模型对于一个数据分析任务的意义=深度理解数据+高级特征工程。