作者:尘沙杰少、樱落、新峰、DOTA、谢嘉嘉
特征工程--无序类别&时间信息的组合特征!
前 言
本篇文章我们会介绍10大与时间相关的组合特征,这些特征在95%涉及到时间信息的竞赛中都是极为重要的特征,也是以往Top选手与新手拉开差距的重要部分。
无序类别特征+时间特征
为了方便表示我们将A作为无序类别特征,B作为时间特征。无序类别特征与时间特征的交互往往是决定比赛走向的一大极为重要的特征,此处我们就列举在实践过程中上分最多的几大特征。
1. 基于A/B一次差值特征
该特征可以表示A出现的时间间隔;该特征在点击预估等的问题中都是非常重要的特征。如果A表示商品的话,那么基于A/B差值特征就表示A商品被浏览/购买/点击的时间差。
df['A_B_diff1'] = df['B'] - df.groupby('A')['B'].shift()
2.基于A/B二次差值特征
基于A/B一次差值特征的差值可以认为是最近的(即shift(1)的)的差值,自然我们也可以是两次的,即shift(2)的,或者多次的,但是实践中我们发现一般shift(3)及以上的效果就不是很明显了。
df['A_B_diff2'] = df['B'] - df.groupby('A')['B'].shift(2)
3.基于A与A/B一/二次差值特征的统计特征
该特征的构建是基于A/B一次/二次差值特征的,我们在A/B差值特征的基础之上再计算A关于A/B差值特征的统计特征,例如:
均值;
方差;
中位数;
偏度;
分位数(四分位数等);
众数;
skewness;
峰度系数;
其它统计特征。
该特征可以很好地反映A在时间戳上的诸多信息,如果基于A与A/B差值特征的最大值和最小值的差值很小或者方差相对很小,这就暗示可能存在较强的周期性,A可能会出现在固定的时间周期内。
df['A_A_B_diff1_sts'] = df.groupby('A')['A_B_diff1'].apply(sts)
df['A_A_B_diff2_sts'] = df.groupby('A')['A_B_diff2'].apply(sts)
4. 基于A/B差值的差值以及对应统计特征
如果说基于A/B差值特征是一阶滑动,那么基于A/B差值的差值就是二阶了,该特征一般直接加入也可以为模型带来微弱的提升。因为和基于A/B的差值是类似的,此处我们给出其计算方式,其它的不再赘述。
类似地,我们也可以做shift(N),N>1的差值,但这么做的物理意义会差一些,实际中也很少能带来提升。
df['A_B_diff1_diff'] = df['A_B_diff1'] - df.groupby('A')['A_B_diff1'].shift()
df['A_B_diff1_diff_sts'] = df.groupby('A')['A_B_diff1_diff'].apply(sts)
5.A的第一次出现时间
A的第一次出现时间也就是接触A的第一次时间,该特征具有非常强的意义。
df['A_B_first'] = df.groupby('A')['B'].first()
6.A的最后一次出现时间
A的最后一次出现时间也就是接触A的最后一次时间,该特征和第一次时间互为补充。
df['A_B_last'] = df.groupby('A')['B'].last()
7.当前距离A出现第一次时间的时间差
A从第一次被接触到最后一次被接触的时间的差值。
df['B_A_B_first_diff'] = df['B'] - df['A_B_first']
8.当前距离A最后一次出现时间的时间差
A距离最后一次接触的时间的差值。
df['B_A_B_first_last'] = df['B'] - df['A_B_last']
9.A出现的时间gap
A最后一次出现和第一次出现的时间的差值。
df['A_B_gap'] = df['A_B_last'] - df['A_B_first']
10.平均每次A出现的时间
A每次出现的平均时间。
df['A_B_first_last_div_count'] = (df['A_B_last'] - df['A_B_first']) / df['A_B_count']
小结
本篇文章我们列举了特征工程中无序类别变量与时间变量的十大重要组合特征,这些是最为重要的一组特征,也是传统策略中上分最多的一组特征,除此之外与时间特征进行组合的特征还有非常多,我们将会在本系列的下一篇中进行介绍。
往期精彩回顾
适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载机器学习的数学基础专辑温州大学《机器学习课程》视频
本站qq群851320808,加入微信群请扫码: