如何在时间序列预测中使用小时数作为索引?

数据挖掘 Python 时间序列 预测 统计模型
2022-02-10 11:52:42

我有一个数据集,其中包含小时数(连续值)和我的数据集中那 1 小时内的总销售额。有关数据集的负责人,请参见下文:

t    sales
--------------
23   172.3676
24   176.3456
25   166.9039
26   153.9990
27   167.9585

我想预测未来 10 小时的销售额。我还将列 t 设置为索引。但是,当我尝试获取季节性分解时,它会显示错误:

result = seasonal_decompose(train['sales'].dropna(), model='additive', freq =12)
result.plot()
plt.show()

TypeError:seasonal_decompose() got an unexpected keyword argument 'freq'

如何处理时间序列模型中的小时数?在将其用作索引之前,我是否需要将其转换为不同的格式?还有,sales列是连续数值,需要四舍五入吗?

提前致谢!

1个回答
  1. frequencystatsmodels方法的参数seasonal_decompose()已被弃用并替换为period参数。请使用period代替frequency.

  2. 由于您提供的数据是每小时一次,因此period应该是 24。period决定了周期在季节性组件中重复的频率。例如,对于每月数据,period通常是 12。对于每小时,它可以是 24(每天)或 168(每周)。这是您应该了解的有关数据的信息。或者,您可以在进行 EDA 时尝试其他合理的值(其他示例 7 天、12 个月、52 周)。

  3. 日期应为日期时间格式,并且需要使用 设置为索引.set_index(),例如train.set_index('Date', inplace=True). 在您的情况下Datet(根据您的数据集)。

  4. 此外,代码对于连续数值应该可以正常工作。在处理每日股价数据时,它对我有用。

我认为下面的代码应该适合您,但请确保遵循第 3 步。

result = seasonal_decompose(train['sales'].dropna(), model='additive', period=24)
result.plot()
plt.show()

参考:

https://github.com/statsmodels/statsmodels/issues/3503

https://towardsdatascience.com/time-series-decomposition-and-statsmodels-parameters-69e54d035453

等待您的反馈意见。