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

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

时间特征

时间信息是极其敏感的信息,我们在数据竞赛中看到分数前后排出现较大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

 

目录
相关文章
|
1月前
|
机器学习/深度学习 算法
LSTM时间序列预测中的一个常见错误以及如何修正
在使用LSTM进行时间序列预测时,常见错误是混淆回归和预测问题。LSTM需将时间序列转化为回归问题,通常使用窗口或多步方法。然而,窗口方法中,模型在预测未来值时依赖已知的未来值,导致误差累积。为解决此问题,应采用迭代预测和替换输入值的方法,或者在多步骤方法中选择合适的样本数量和训练大小以保持时间结构。编码器/解码器模型能更好地处理时间数据。
83 1
|
1月前
|
机器学习/深度学习 前端开发 数据可视化
R语言缺失数据变量选择LASSO回归:Bootstrap重(再)抽样插补和推算
R语言缺失数据变量选择LASSO回归:Bootstrap重(再)抽样插补和推算
|
1月前
|
数据可视化 索引 Python
数据分享|Python用PyMC3贝叶斯模型平均BMA:采样、信息准则比较和预测可视化灵长类动物的乳汁成分数据
数据分享|Python用PyMC3贝叶斯模型平均BMA:采样、信息准则比较和预测可视化灵长类动物的乳汁成分数据
|
1月前
|
存储 监控 算法
R语言贝叶斯非参数模型:密度估计、非参数化随机效应META分析心肌梗死数据
R语言贝叶斯非参数模型:密度估计、非参数化随机效应META分析心肌梗死数据
|
1月前
|
数据可视化
R语言arima,向量自回归(VAR),周期自回归(PAR)模型分析温度时间序列
R语言arima,向量自回归(VAR),周期自回归(PAR)模型分析温度时间序列
|
1月前
R语言混合时间模型预测对时间序列进行点估计
R语言混合时间模型预测对时间序列进行点估计
|
6月前
|
机器学习/深度学习 数据挖掘 Python
统计回归模型中的一些概念解释
统计回归模型中的一些概念解释
|
7月前
|
机器学习/深度学习
LSTM长时间序列预测问题解决方案,多特征输出实战 完整代码数据+视频讲解
LSTM长时间序列预测问题解决方案,多特征输出实战 完整代码数据+视频讲解
99 0
|
8月前
|
Android开发
空间选择模型--既能帮决策,还可助推断
空间选择模型--既能帮决策,还可助推断
53 0
|
机器学习/深度学习 算法
在对数据进行预处理时,怎样处理类别型特征?
在对数据进行预处理时,怎样处理类别型特征?