特征优化
1. 历史平移特征(Lag Features)
历史平移特征,也称为滞后特征,是通过将时间序列数据向前或向后移动一定的时间单位(如天、月、年等)来创建的。这些特征允许模型访问过去某个时间点的数据,从而捕捉时间序列数据中的时间依赖性和周期性。例如,在预测明天的股票价格时,可能会使用昨天、前天或上周的价格作为特征。
import pandas as pd
import numpy as np
# 示例数据
data = {'date': pd.date_range(start='2023-01-01', periods=10, freq='D'),
'value': np.random.randn(10)}
df = pd.DataFrame(data)
# 创建历史平移特征
# 例如,创建前一天(lag 1)和前两天(lag 2)的value作为特征
df['lag_1'] = df['value'].shift(1)
df['lag_2'] = df['value'].shift(2)
# 注意:shift会导致NaN出现在最前面,你可能需要填充这些NaN值,或者根据你的需求进行其他处理
df.dropna(inplace=True) # 删除包含NaN的行
print(df)
2. 差分特征(Difference Features)
差分特征是通过计算时间序列中相邻数据点之间的差异来获得的。一阶差分是最常见的,它反映了数据随时间的变化率或增长/减少情况。此外,还可以计算二阶差分(即差分的一阶差分),以揭示数据变化的加速度。差分特征有助于消除时间序列中的趋势和季节性成分,使数据更加平稳,适合进行进一步的分析和建模。
# 假设df是上面创建的DataFrame
# 计算一阶差分
df['diff_1'] = df['value'].diff()
# 如果你想要计算二阶差分(即差分的一阶差分),可以这样做:
df['diff_2'] = df['diff_1'].diff()
# 注意:diff同样会导致NaN出现在最前面
df.dropna(inplace=True) # 如果你不想在数据中包含NaN
print(df)
3. 窗口统计特征(Window-based Statistical Features)
窗口统计特征是通过在时间序列上滑动一个固定大小的窗口,并在每个窗口内计算统计量(如均值、最大值、最小值、中位数、方差等)来获得的。这些特征提供了关于数据在特定时间段内行为的信息,有助于捕捉短期和长期的变化趋势。
# 假设df是上面创建的DataFrame(但在应用窗口统计之前,通常不需要删除NaN)
# 计算过去3个时间点的滚动平均值
df['rolling_mean_3'] = df['value'].rolling(window=3).mean()
# 计算过去3个时间点的滚动最大值
df['rolling_max_3'] = df['value'].rolling(window=3).max()
# 注意:rolling窗口的默认行为是保留NaN,直到窗口大小被填满
print(df)
# 如果你想要从窗口开始时就填充NaN(比如用窗口内的第一个有效值),可以使用min_periods参数
df['rolling_mean_3_minp'] = df['value'].rolling(window=3, min_periods=1).mean()
print(df)