天池大赛 - 特征提取 总结

前言

做模型最重要的是选择特征,特征选择的好,换换模型就有不同的效果,再调参一下就可以提升实验结果,所以特征很重要,有些特征难以想象,可能大家认为是拍脑袋想出来的,可是它被证明就是有用的,本文参考天池大赛比赛排名靠前的同学分享的比赛心得,总结了这篇特征提取的文章,希望可以帮助大家,文章最后有参考文章链接,大家也可以去看看文章,了解一些比赛的东西。

特征

特殊节日

周末和工作日,或者节假日,这些都可以作为一个特征,但可能对于数据规模比较小的任务来说节假日可能没有什么用。但周末和周日的区分还是比较有用的。

上下班高峰

每天的7点-9点30都是上班高峰,晚上的17:30到19:30 也都是高峰时期,这个具体的时间你可以看数据得出,把样本汇出来就可以看到具体的时间情况,在某些任务里这个特征也是有用的,比如交通类的任务,跟公交、地铁有关的任务。

昨天数据

昨天的数据也可以作为预测今天的依据,但是要考虑到周末和工作日。

对特征数值划分为离散值

如果我们对特征数值进行划分,一定要知道一点:可能划分的某个区间,数据集上是没有样本的。比如:数据集中年龄的最小值是5岁,年龄最大值是60岁,我们按照5-12 、12-15、 15-18为一个区间分别代表小学、初中、高中,有可能数据集中15-18岁区间是没有数据的,没有数据,但是整个样本特征上,我们可以认为该特征是0,而不是遗忘这些数据特征。我们预测全天的每隔1个小时的数据,一天就有24个小时,用来模拟这24个小时的输出值,并且带有其他特征,但是问题来了,如果样本中没有10点-11点的数据,但其他特征都有,比如日期、是否是周末等等,单纯把数据集数值化过程中是会漏掉某部分数据集的。

周期

根据时间来找到一个周期,比如周一到周天,这样一个周期,或者当前时间前3天内的时间作为一个周期,来提取特征,此特征确定下来了就不会随着样本数据变大而做调整。
所以有可能周一的数据可以作为下一周的数据。

趋势特征

时序问题最简单就是会有一个趋势的概念,下一个时刻的趋势跟上一个时刻相关,就像是一个曲线随着时间变化,这个趋势也在变化。这个趋势选择什么区间呢,每天的数据作为一个趋势,还是小时级别作为一个趋势,这要看比赛的数据或要求。比如:我们选取小时级别作为趋势,9点的数据用来预测10点的数据,上一个小时预测下一个小时。

占比比例

有时候一个数值并不能很好的表现数据,可以用比例来展示,还可以求各种数据占比作为比例,比如收入与支出比例,收入与租房支出比例,这种占比情况,可以作为特征参与到模型中。

平均情况,最大值,最小值

这种数据统计,往往有一些还是可以起到一些作用的,但可能也对特征无感知,还可以取二次加工后的数据来取特征,或者融合多个特征求平均值作为一个特征,这些看具体业务情况尝试一些方法。

周期内平均值

某个周期的平均值,这个值会随着时间推移不断更新特征,可能会更新以前的提取分析后的特征值。

预测的一个bug

短期时序预测会涉及到一个bug,就是相邻两个时间内的结果会很相似,比如,10点的地铁入口流量可能跟9点地铁入口流量相近,这是一个比较强关联的关系,完全可以根据上一个结果加衰减因子来预测下一个结果。

天气因素

有些任务跟天气有关,天晴、下雨、温度等等,比如下雨、高温环境下,人就很少会出门,都愿意呆在家里,及时有事也不会去,但这些特征跟具体的任务挂钩,比如预测某个音乐会的人数,预测地铁、公交等交通出行的任务。

特征编码与取值众多的特征转换

对于离散的类别特征,往往需要进行必要的特征转换/编码才能将其作为特征输入到模型中。
常用的编码方式有 LabelEncoder,OneHotEncoder(sklearn里面的接口)。譬如对于”性别”这个特征(取值为男性和女性),使用这两种方式可以分别编码为{0,1}和{[1,0], [0,1]}。

对于取值较多(如几十万)的类别特征(ID特征),直接进行OneHotEncoder编码会导致特征矩阵非常巨大,影响模型效果。可以使用如下的方式进行处理:

  • 统计每个取值在样本中出现的频率,取 Top N 的取值进行 One-hot 编码,剩下的类别分到“其他“类目下,其中 N 需要根据模型效果进行调优;
  • 统计每个 ID 特征的一些统计量(譬如历史平均点击率,历史平均浏览率)等代替该 ID 取值作为特征,具体可以参考 Avazu 点击率预估比赛第二名的获奖方案;
  • 参考 word2vec 的方式,将每个类别特征的取值映射到一个连续的向量,对这个向量进行初始化,跟模型一起训练。训练结束后,可以同时得到每个ID的Embedding。具体的使用方式:Rossmann 销量预估竞赛第三名的获奖方案
  • 特征转换
    针对一些长尾分布的数据特征,可以做幂变换或者对数变换,使得模型(LR或者DNN)能更好的优化。当然,大家都知道的是,树模型(Random Forest、GBDT、xgboost等)模型对特征数值幅度不敏感。

  • 交叉特征
    交叉特征算是特征工程中非常重要的方法之一了,交叉特征是一种很独特的方式,它将两个或更多的类别属性组合成一个。当组合的特征要比单个特征更好时,这是一项非常有用的技术。数学上来说,是对类别特征的所有可能值进行交叉相乘。

假如拥有一个特征A,A有两个可能值{A1,A2}。拥有一个特征B,存在{B1,B2}等可能值。然后,A&B之间的交叉特征如下:{(A1,B1),(A1,B2),(A2,B1),(A2,B2)},并且你可以给这些组合特征取任何名字。但是需要明白每个组合特征其实代表着A和B各自信息协同作用。

一个更好地诠释好的交叉特征的实例是类似于(经度,纬度)。一个相同的经度对应了地图上很多的地方,纬度也是一样。但是一旦你将经度和纬度组合到一起,它们就代表了地理上特定的一块区域,区域中每一部分是拥有着类似的特性。这种暴力做交叉很可能导致特征稀疏的问题,这里可以参考FM、FMM以及阿里妈妈发布的MLR的做法和解决思路。

参考博客

幸福感预测
特征讲解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值