
时间序列转换工具包:用于预测分析的高级特征工程
图片由 Editor | ChatGPT 提供
引言
在时间序列分析和预测中,通常需要转换数据来揭示潜在的模式、稳定方差等特性,并提高预测模型的性能。例如,描述产品销售的时间序列可能显示出强烈的周度季节性以及促销活动的影响。在这种情况下,将原始时间戳转换为类别特征,例如星期几或节假日标志,可以帮助模型更有效地捕捉时间依赖性和上下文。
本文演示了一种中等高级的特征工程方法,用于构建有意义的时间特征和应用各种转换进行预测分析。
我们将探讨如何
- 向时间序列添加多个滞后特征。
- 纳入滚动统计量,例如在滑动时间窗口上的滚动均值。
- 应用差分来捕捉时间间隔内计数的变异。
循序渐进的实操
我们将使用自行车租赁数据集,这是一个常见的时间序列数据集,包含每日记录,如日期(dteday
)、每日自行车租赁计数(cnt
)、平均温度(temp
)、星期几(weekday
)、是否为节假日(holiday
)以及是否为工作日(workingday
)。
1 2 3 4 5 6 |
import pandas as pd url = "https://raw.githubusercontent.com/deep-learning-with-pytorch/dlwpt-code/master/data/p1ch4/bike-sharing-dataset/day.csv" df = pd.read_csv(url, parse_dates=['dteday']) df[['dteday', 'cnt', 'temp', 'weekday', 'holiday', 'workingday']].head() |
在时间序列数据中,在进行任何预处理和预测任务之前,将日期时间属性设置为索引非常重要。在本例中,dteday
属性将承担此任务,在 Pandas 中这样做的方法如下:
1 2 |
df['date'] = pd.to_datetime(df['dteday']) df.set_index('date', inplace=True) |
我们还将执行一个简单的特征工程任务(还不是非常高级):确定日期是否为周末并提取月份。
1 2 |
df['is_weekend'] = df['weekday'].isin([5, 6]).astype(int) df['month'] = df.index.month |
添加滞后特征是用于时间序列数据的特征工程技术,旨在为给定记录引入一些“短期记忆”,其中包含过去记录的信息。这样,像前几天的租赁计数这样的属性值就可以用作预测属性。
1 2 3 |
df['cnt_lag1'] = df['cnt'].shift(1) df['cnt_lag2'] = df['cnt'].shift(2) df['cnt_lag7'] = df['cnt'].shift(7) |
重要的是,shift(n)
函数不会计算指定属性在过去 *n* 天或时间点上的平均值:它只是获取属性在 *n* 时间点之前的那个值。
在时间序列预测中另一个非常有用的特征工程技术是所谓的滚动统计量,它使用滑动时间窗口来计算该窗口定义的周期内的均值或任何其他聚合值。例如,下面的代码向数据集中添加了两个属性:一个包含 7 天滚动均值——即给定属性前七天值的均值——以及一个 7 天滚动标准差。
1 2 |
df['cnt_roll7_mean'] = df['cnt'].shift(1).rolling(window=7).mean() df['cnt_roll7_std'] = df['cnt'].shift(1).rolling(window=7).std() |
滚动统计量有助于深入了解租赁计数等值随时间的变化情况,从而轻松识别趋势和变异模式。
此外,差分(计算当前属性值与其 *n* 次前的差值)也有助于揭示值随时间的变化情况,而不仅仅是查看它们的原始幅度。
这可以通过再次使用 `shift(n)` 函数并结合列级别的减法轻松完成,如下所示:
1 2 |
df['cnt_diff1'] = df['cnt'] - df['cnt'].shift(1) df['cnt_diff7'] = df['cnt'] - df['cnt'].shift(7) |
请注意,使用上面探索的三种特征转换会导致出现一些缺失值(NaN
),这是由于在数据集的前几个实例上进行移位和滚动,其中没有足够过去的可用信息来执行所需的转换。您可能需要决定如何处理它们,例如,只需从数据集中删除这些行(如果时间序列足够大,删除前几行通常不应影响预测性能)。
1 2 3 4 5 |
df_clean = df.dropna(subset=[ 'cnt_lag1', 'cnt_lag2', 'cnt_lag7', 'cnt_roll7_mean', 'cnt_roll7_std', 'cnt_diff1', 'cnt_diff7' ]) |
因此,通过一些转换驱动的特征工程操作,我们得到了一个包含大量有用的额外信息的时序数据集,可用于预测分析。干得好!
结论
本文演示了使用滞后、滚动统计和差分从时间序列数据中提取和解锁有意义的时间特征的一些策略。正确应用后,这些策略可以将您的原始时间序列数据更好地适应预测分析过程,尤其是在构建用于预测的机器学习模型时。
非常清晰且富有洞察力。
非常感谢
非常清晰且富有洞察力。
非常感谢
非常清晰且富有洞察力。
非常感谢。