我有按天分组的数据库指标,我需要预测接下来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方法还是只使用其中的一部分会有什么不同吗?
提前致谢:)
答案 0 :(得分:0)
通常,频率(或季节性,您似乎在帖子中交替使用这些词)由领域知识决定。例如,如果我在餐饮业工作,并且正在分析每小时的客户数据集,我知道我将有一个24小时的频率,在午餐时间和晚餐时间会有峰值,而另一个是168小时的频率(24 * 7)因为我的客户每周都会有一个模式。
如果由于某种原因,您不具备领域知识,则可以使用ACF和PACF以及傅里叶分析来找到适合数据的最佳频率。
有什么方法可以按周和按月显示频率?
没有Holt-Winters,没有。硬件仅包含一个季节性组成部分。对于多个季节性因素,您应该尝试使用TBATS。正如吴晓曦所指出的那样,FB Prophet可以对多个季节建模,而Google的BSTS软件包也可以。
另一件事,是我去年或整个Holt-Winters方法所用的全部还是一部分,有什么不同吗?
是的。我想建模一个季节性,那么您至少需要两倍该季节性周期才能建模(最好是更多),否则您的模型无法知道峰值是季节性变化还是一次冲动。因此,例如,要对每周的季节性进行建模,则需要至少14天的训练数据(加上用于测试的任何内容,而对于年度的季节性,则至少需要730天的数据,等等。...>
答案 1 :(得分:-1)
您似乎拥有每日数据,并且希望对未来三个月进行预测。这里的问题是,您需要每日预测还是每周预测还是仅每月预测?我想您可能需要每日或每周的预测。如果您需要每周预测,则可能更容易先按周对数据进行分组,然后再运行预测。
Facebook的新Prophet软件包是一个非常有用的日常数据工具。它将与数据框一起使用,而不是与ts项目一起使用,这使得处理起来非常容易。而且,您可以通过诸如plot_components之类的内置函数快速获取每日(如果有每小时数据的话),每周和每月的季节性。这是Facebook的快速入门教程。它们具有适用于Python和R的API。
这里有一些快速代码可以绘制与先知有关的每周和每月的季节性(如有)。
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.