在Kaggle竞赛汇总日期是带有信息非常多的字段,与普通的字段不同,时序字段可以将历史的信息保留,同时带有季节性和周期性的信息。
1 与日期相关的特征
在处理时序特征时,可以根据历史数据提取出工作日和周末信息,拥有关于日、月、年等的信息对于预测值非常有用。
import pandas as pd
data = pd.read_csv('Train_SU63ISt.csv')
data['Datetime'] = pd.to_datetime(data['Datetime'],format='%d-%m-%Y %H:%M')
data['year']=data['Datetime'].dt.year
data['month']=data['Datetime'].dt.month
data['day']=data['Datetime'].dt.day
data['dayofweek_num']=data['Datetime'].dt.dayofweek
data['dayofweek_name']=data['Datetime'].dt.weekday_name
data.head()
2 与时间相关的特征
如果我们有时间戳,我们可以类似地提取更细粒度的特征。例如,我们可以确定记录数据的当天的小时或分钟,并比较营业时间和非营业时间之间的趋势。
import pandas as pd
data = pd.read_csv('Train_SU63ISt.csv')
data['Datetime'] = pd.to_datetime(data['Datetime'],format='%d-%m-%Y %H:%M')
data['Hour'] = data['Datetime'].dt.hour
data['minute'] = data['Datetime'].dt.minute
data.head()
我们可以从日期列中提取一些特征。以下是我们可以生成的完整功能列表:
3 滞后特征 Lag Features
如果我们正在预测一家公司的股票价格。前一天的股价对于做出预测很重要,时间的值受时间的值的影响很大。过去的值称为滞后数据。
import pandas as pd
data = pd.read_csv('Train_SU63ISt.csv')
data['Datetime'] = pd.to_datetime(data['Datetime'],format='%d-%m-%Y %H:%M')
data['lag_1'] = data['Count'].shift(1)
data = data[['Datetime', 'lag_1', 'Count']]
data.head()
选择的滞后值将取决于单个值与其过去值的相关性,我们也可以创建多个滞后功能,假设我们想要滞后特征1到滞后特征7。
我们可以让模型决定哪个是最有价值的。因此,如果我们训练线性回归模型,它将为滞后特征分配适当的权重(或系数):
import pandas as pd
data = pd.read_csv('Train_SU63ISt.csv')
data['Datetime'] = pd.to_datetime(data['Datetime'],format='%d-%m-%Y %H:%M')
data['lag_1'] = data['Count'].shift(1)
data['lag_2'] = data['Count'].shift(2)
data['lag_3'] = data['Count'].shift(3)
data['lag_4'] = data['Count'].shift(4)
data['lag_5'] = data['Count'].shift(5)
data['lag_6'] = data['Count'].shift(6)
data['lag_7'] = data['Count'].shift(7)
data = data[['Datetime', 'lag_1', 'lag_2', 'lag_3', 'lag_4', 'lag_5', 'lag_6', 'lag_7', 'Count']]
data.head(10)
确定相关性显着的滞后的方法不止一种。例如,我们可以使用 ACF(自相关函数)和 PACF(部分自相关函数)图。
4 滑动/滚动窗口特征
如何根据过去的值计算一些统计值?这种方法称为滚动窗口方法,因为每个数据点的窗口都不同。
由于这看起来像一个随着每个下一个点滑动的窗口,因此使用此方法生成的特征称为“滚动窗口”特征。我们将选择一个窗口大小,取窗口中值的平均值,并将其用作特征。让我们在 Python 中实现它:
import pandas as pd
data = pd.read_csv('Train_SU63ISt.csv')
data['Datetime'] = pd.to_datetime(data['Datetime'],format='%d-%m-%Y %H:%M')
data['rolling_mean'] = data['Count'].rolling(window=7).mean()
data = data[['Datetime', 'rolling_mean', 'Count']]
data.head(10)
5 扩展窗口特征
在滚动窗口的情况下,窗口的大小是恒定的,扩展窗口功能背后的想法是它考虑了所有过去的值。每一步,窗口的大小都会增加 1,因为它考虑了系列中的每个新值。
import pandas as pd
data = pd.read_csv('Train_SU63ISt.csv')
data['Datetime'] = pd.to_datetime(data['Datetime'],format='%d-%m-%Y %H:%M')
data['expanding_mean'] = data['Count'].expanding(2).mean()
data = data[['Datetime','Count', 'expanding_mean']]
data.head(10)