特征工程--单时间变量特征

简介: 特征工程--单时间变量特征

时间特征

时间信息是极其敏感的信息,我们在数据竞赛中看到分数前后排出现较大gap的时候,第一时间需要考虑的就是时间信息,时间特征在很多竞赛中,往往可以决定排名的走势,那么当我们拿到时间相关的特征时,该如何进行思考,构建强有力的特征呢?(PS:本文我们介绍8大常见的单变量时间特征,剩下的两个可能一不小心拿金牌强特会在后续分享)。

 

1.基础周期特征(年月日特征拆解)

几乎所有的时间都可以被拆解为年-月-日-小时-分钟-秒-毫秒的形式。在大多数情况中,拆解之后的数据往往存在某些潜在规律的,比如:

  • 我们对某个城市的旅游人数进行预估,旅游是存在旺季和淡季的,这个时候拆分之后得到的月份就非常重要;
  • 我们预估店铺每天的销量,因为很多公司都会在月末发工资,这个时候拆解得到的天信息就会比较重要;
  • 我们预估用户是否会下单,那么小时特征可能就比较重要,比如这个时候已经是晚上11点了,用户在搜索旅馆的信息,那么大概率可能就会下单,相反如果是中午在搜索,那么该用户可能并不是很急,所以下单的概率就会小一些;
  • 我们预估地铁的每个小时的流量,那么早上7点到8点,晚上5点到7点,这些上下班的高峰期,流量一般就会大一些。

虽然拆解很简单,但是里面会按含有非常多的潜在重要信息,如果直接对时间信息进行Label编码,然后使用梯度提升树模型进行训练预测,是极难挖掘到此类信息的,但是拆解之后却可以极大的帮助到梯度提升树模型发现此类信息

import pandas as pd
df = pd.DataFrame()
df['dt'] = ['2020-07-03', '2020-08-09', '2020-08-29', '2020-08-19']
df['dt'] = pd.to_datetime(df['dt'])
df['year']  = df['dt'].dt.year
df['month'] = df['dt'].dt.month
df['day']   = df['dt'].dt.day
df.head()
  dt year month day
0 2020-07-03 2020 7 3
1 2020-08-09 2020 8 9
2 2020-08-29 2020 8 29
3 2020-08-19 2020 8 19

tt.png

tt.png

2.特殊周期特征(星期&节假日等)

1.星期特征

年月日特征拆解可以帮我们得到最基础的时间周期特征。那么肯定大家就就会联想到其它的时间周期特征,例如星期等信息。

tt.png

这个也较为容易理解:

  • 我们需要预测某些餐馆的人流量,那么热闹的大餐馆周六周日的人流量就会比平时多一些;而一些靠近互联网大公司附近的商场可能周末人会少很多,因为平时工作日忙,就会在附近商场吃饭,但是到了周日了,不用上班了,周围的人流量大大下降,反而使得商场附近餐馆的人流量大大下降了。

2.月和星期组合特征

有些时候,我们还会将星期特征和月份特征结合,构成简单的组合特征,怎么做呢?很简单,我们还是举个例子:

  • 我们需要预测某些餐馆的销售额,我们知道一般公司会在月末发放工资,所以每个月的最后一个周末的餐馆的销售额可能就会比平常的周末大一些。

3.节假日特征

节假日这个不仅包含国家的法定节假日,依据问题的不同,还有非常多特殊的日期,例如:

  • 如果我们的问题是预测各大电商的日GMV,那么每年的双11等特殊日期就尤为重要;
  • 如果我们的问题是预测旅游景点的客流量,那么五一、十一等节假日的日期就尤为重要;

tt.png

4.节假日和星期组合特征

节假日和星期的组合也是非常强的组合特征,在有些问题中,又是重要节日又是周末会是非常强的信息,在另外一些问题中,节假日如果是连着周六周日的,那么这些信息也都是非常重要的组合特征,因为这意味着我们的假期可能延长了,所以会是一种较强的信号。

1. df['weekday']   = df['dt'].dt.weekday
2. df.head()
  dt year month day weekday
0 2020-07-03 2020 7 3 4
1 2020-08-09 2020 8 9 6
2 2020-08-29 2020 8 29 5
3 2020-08-19 2020 8 19 2

月份暗含信息

tt.png

该特征经常适用于关于以月为单位的预估问题,例如预估某个公司每个月的产值,某个景点的旅游人数,这个时候每个月中工作日的天数以及休假的天数就是非常重要的信息。

tt.png

时间差

tt.png

 

1.相邻时间差

该特征顾明思议,就是相邻两个时间戳之间的差值,在有些问题中,例如用户浏览每个视频的开始时间戳,相邻两个时间戳的差值一般就是用户浏览视频的差值,如果差值越大,那么该用户可能对上一个视频的喜好程度往往越大,此时,相邻时间戳的就是非常有价值的特征。

tt.png

2.相邻时间差频率编码

这个是关于相邻特征差值的频率编码,该特征往往适合相邻时间差互补的一个特征,可以帮助我们更好地挖掘一些内在的信息,例如有些自律的用户在会控制自己的休闲与工作的时长,我们在统计用户的生活习惯时,发现出现大量的相邻时间差时10分钟和60分钟的,原来是该用户喜欢工作60分钟就休息10分钟,此时相邻时间差频率编码就可以协助我们发现此类信息。

tt.png

1. '''
2.     以月为单位计算基础时间差
3. '''
4. df['month_diff'] = df['month'] - df['month'].shift(1)
5. df['month_diff_cnt'] = df['month_diff'].map(df['month_diff'].value_counts())
6. df.head()
  dt year month day weekday month_diff month_diff_cnt
0 2020-07-03 2020 7 3 4 NaN NaN
1 2020-08-09 2020 8 9 6 1.0 1.0
2 2020-08-29 2020 8 29 5 0.0 2.0
3 2020-08-19 2020 8 19 2 0.0 2.0

 

目录
相关文章
|
7月前
|
机器学习/深度学习 数据采集 监控
机器学习-特征选择:如何使用递归特征消除算法自动筛选出最优特征?
机器学习-特征选择:如何使用递归特征消除算法自动筛选出最优特征?
970 0
|
7月前
|
机器学习/深度学习 算法 数据可视化
Python用KNN(K-近邻)回归、分类、异常值检测预测房价、最优K值选取、误差评估可视化
Python用KNN(K-近邻)回归、分类、异常值检测预测房价、最优K值选取、误差评估可视化
|
7月前
|
机器学习/深度学习 前端开发 数据可视化
R语言缺失数据变量选择LASSO回归:Bootstrap重(再)抽样插补和推算
R语言缺失数据变量选择LASSO回归:Bootstrap重(再)抽样插补和推算
|
7月前
|
存储 监控 算法
R语言贝叶斯非参数模型:密度估计、非参数化随机效应META分析心肌梗死数据
R语言贝叶斯非参数模型:密度估计、非参数化随机效应META分析心肌梗死数据
|
机器学习/深度学习
LSTM长时间序列预测问题解决方案,多特征输出实战 完整代码数据+视频讲解
LSTM长时间序列预测问题解决方案,多特征输出实战 完整代码数据+视频讲解
183 0
|
Android开发
空间选择模型--既能帮决策,还可助推断
空间选择模型--既能帮决策,还可助推断
92 0
|
资源调度 算法 关系型数据库
概率图推断之变量消除算法
事实证明,推理是一项颇具挑战的任务。对于很多我们感兴趣的概率,要准确回答这些问题都是NP难题。至关重要的是,推理是否容易处理取决于描述概率的图的结构。尽管有些问题很难解决,我们仍然可以通过近似推理方法获得有用的答案。
266 0
概率图推断之变量消除算法
|
机器学习/深度学习 数据采集 存储
机器学习--数据清理、数据变换、特征工程
机器学习--数据清理、数据变换、特征工程
187 0
机器学习--数据清理、数据变换、特征工程
|
机器学习/深度学习 算法 数据建模
通过遗传算法进行超参数调整和自动时间序列建模
通过遗传算法进行超参数调整和自动时间序列建模
186 0
通过遗传算法进行超参数调整和自动时间序列建模
|
机器学习/深度学习 算法 数据挖掘
特征工程入门:应该保留和去掉那些特征
特征工程入门:应该保留和去掉那些特征
216 0
特征工程入门:应该保留和去掉那些特征