5

我有一个按天分组的数据库指标,我需要预测未来 3 个月的数据。这些数据具有季节性(我相信季节性是一周中的几天)。

我想使用 R 的 Holt Winters 方法,我需要创建一个时间序列对象,它要求频率,(我认为是 7)。但是我怎么知道我是否确定呢?有识别最佳频率的功能吗?

我在用着:

FID_TS <- ts(FID_DataSet$Value, frequency=7)

FID_TS_Observed <- HoltWinters(FID_TS)

如果我用 分解这些数据decompose(FID_TS),我有:

在此处输入图像描述

这是我的第一个预测FID_TS_Observed

在此处输入图像描述

当我回顾去年的历史时,它们在前 3 个月开始低,从第 3 个月上升到第 11 个月,然后再次下降。

也许我的每日数据,每天有每周季节性(频率=7)和每月季节性(频率=7x30=210)?我需要最后 365 天吗?

有什么办法可以按星期几和月份排列频率吗?另一件事,我把去年的全部时间或只是其中的一部分用于 Holt-Winters 方法有什么不同吗?

提前致谢 :)

4

2 回答 2

1

通常,频率(或季节性,您似乎在帖子中交替使用这些词)是由领域知识决定的。例如,如果我在餐饮业工作,并且我正在分析每小时的客户数据集,我知道我将有一个 24 小时的频率,在午餐时间和晚餐时间出现峰值,另外还有 168 小时的频率(24 * 7)因为我的客户会有一个每周模式。

如果由于某种原因,您没有领域知识,您可以使用 ACF 和 PACF 以及傅里叶分析来为您的数据找到最佳频率。

有什么办法可以按星期几和月份排列频率吗?

霍尔特-温特斯,没有。HW 只需要一个季节性成分。对于多个季节性组件,您应该尝试 TBATS。正如Xiaoxi Wu 所指出的,FB Prophet 可以对多个季节性进行建模,Google 的 BSTS 包也可以。

另一件事,我把去年的全部时间或只是其中的一部分用于 Holt-Winters 方法有什么不同吗?

是的,它确实。如果您想对季节性进行建模,那么您需要至少两倍的季节性周期才能对其进行建模(最好更多),否则您的模型无法知道峰值是季节性变化还是仅是一次脉冲. 因此,例如,要对每周的季节性进行建模,您需要至少 14 天的训练数据(加上您将用于测试的任何内容,而对于年度季节性,您将需要至少 730 天的数据,等等......

于 2018-10-30T22:50:09.147 回答
0

看起来您有每日数据,并且想要预测未来三个月。这里的问题是您需要每日预测还是每周预测或仅需要每月预测?我猜你可能需要每日或每周的预测。如果您需要每周预测,可能更容易先按周对数据进行分组,然后再运行预测。

用于日常数据的一个非常好的工具是 Facebook 的新 Prophet 包。它将使用 dataframe 而不是 ts 项目,这使得它更容易处理。您可以从一些内置函数(如 plot_components)快速获取每日(如果您有每小时数据左右)、每周和每月的季节性。这是Facebook的快速入门教程。他们有适用于 Python 和 R 的 API。

这里有一些使用 Prophet 绘制每周和每月季节性(是否有)的快速代码。

library(prophet)
library(dplyr)
df <- FID_DataSet %>% rename(ds = date, y = Value)
m <- prophet(df)
future <- make_future_dataframe(m, periods = 365)
forecast <- predict(m, future)
plot(m, forecast) # plot out the forecast
prophet_plot_components(m, forecast) # plot out the components: trend, weekly and yearly seasonality if there is any.
于 2018-10-22T19:01:12.640 回答