R 中的 forecast() 重复预测
forecast() in R repeats predictions
我正在尝试构建预测,以根据 Google 趋势数据预测关键字的未来值。
我的数据是2020年1月1日到2020年6月30日某个关键词的每日索引搜索量,保存在CSV文件中:
日期 |关键词
2020-01-01 | 55
2020-01-02 | 79
2020-01-03 | 29
...
2020-06-29 | 19
2020-06-30 | 32
我的 R 代码在生成预测之前似乎工作正常。
library(forecast)
data <- read.csv("<file path>.csv", header=TRUE)
#build time series data
#start and end periods of observed data
inds <- seq(as.Date("2020-01-01"), as.Date("2020-06-30"), by = "day")
#the frequency = 7 days (i.e. week)
sts <- ts(data$Keyword, start = c(2020, as.numeric(format(inds[1], "%j"))), frequency = 7)
#generate the forecast
model.ets <- ets(sts, model = "ANA")
fc.ets <- forecast(model.ets, h = 60)
plot(fc.ets)
我遇到的问题是预测只是重复相同的模式(似乎没有考虑错误,趋势 and/or 调整预测的季节性)。
我想我需要调整 forecast() 函数,但不知道该怎么做。
在这种情况下,我们有一个跨度不到一年的每日系列,似乎显示每周季节性。请注意这里给出的:https://otexts.com/fpp2/ts-objects.html [2.1 - ts 对象],给 ts 对象的频率是 52.18,即 365.25/7,一年中的周数(考虑闰年)。这种季节性排除了不能处理频率大于 24 的数据的 ets 模型的使用,除非与 STL(使用黄土的季节性和趋势分解)结合使用。因此,我建议探索其他模型。 STL + ETS(A, Ad, N) [第二最佳模型] 点预测看起来最真实,但与 TBATS(1, {0,0}, 0.92, {<52.18, 6>}) 模型 [最佳模型] 请查看并尝试以下内容:
ts_ausAirBnb <- ts(ausAirBnb$airbnb_australia_, start = min(ausAirBnb$day), frequency = 52.18)
plot(decompose(ts_ausAirBnb))
snaivefit <- snaive(ts_ausAirBnb)
snaivefcast <- forecast(snaivefit, h = 60)
aafit <- auto.arima(ts_ausAirBnb)
aafcast <- forecast(aafit, h = 60)
stlffit <- stlf(ts_ausAirBnb, h = 60)
stlfcast <- forecast(stlffit, h = 60)
stlmfit <- stlm(ts_ausAirBnb)
stlmfcast <- forecast(stlmfit, h = 60)
tbatsfit <- tbats(ts_ausAirBnb)
tbatsfcast <- forecast(tbatsfit, h = 60)
nnetfit <- nnetar(ts_ausAirBnb)
nnetfcast <- forecast(nnetfit, h = 60)
autoplot(snaivefcast)
autoplot(aafcast)
autoplot(etsfcast)
autoplot(stlfcast)
autoplot(stlffit)
autoplot(stlmfcast)
autoplot(tbatsfcast)
autoplot(nnetfcast)
我正在尝试构建预测,以根据 Google 趋势数据预测关键字的未来值。
我的数据是2020年1月1日到2020年6月30日某个关键词的每日索引搜索量,保存在CSV文件中:
日期 |关键词
2020-01-01 | 55
2020-01-02 | 79
2020-01-03 | 29
...
2020-06-29 | 19
2020-06-30 | 32
我的 R 代码在生成预测之前似乎工作正常。
library(forecast)
data <- read.csv("<file path>.csv", header=TRUE)
#build time series data
#start and end periods of observed data
inds <- seq(as.Date("2020-01-01"), as.Date("2020-06-30"), by = "day")
#the frequency = 7 days (i.e. week)
sts <- ts(data$Keyword, start = c(2020, as.numeric(format(inds[1], "%j"))), frequency = 7)
#generate the forecast
model.ets <- ets(sts, model = "ANA")
fc.ets <- forecast(model.ets, h = 60)
plot(fc.ets)
我遇到的问题是预测只是重复相同的模式(似乎没有考虑错误,趋势 and/or 调整预测的季节性)。
我想我需要调整 forecast() 函数,但不知道该怎么做。
在这种情况下,我们有一个跨度不到一年的每日系列,似乎显示每周季节性。请注意这里给出的:https://otexts.com/fpp2/ts-objects.html [2.1 - ts 对象],给 ts 对象的频率是 52.18,即 365.25/7,一年中的周数(考虑闰年)。这种季节性排除了不能处理频率大于 24 的数据的 ets 模型的使用,除非与 STL(使用黄土的季节性和趋势分解)结合使用。因此,我建议探索其他模型。 STL + ETS(A, Ad, N) [第二最佳模型] 点预测看起来最真实,但与 TBATS(1, {0,0}, 0.92, {<52.18, 6>}) 模型 [最佳模型] 请查看并尝试以下内容:
ts_ausAirBnb <- ts(ausAirBnb$airbnb_australia_, start = min(ausAirBnb$day), frequency = 52.18)
plot(decompose(ts_ausAirBnb))
snaivefit <- snaive(ts_ausAirBnb)
snaivefcast <- forecast(snaivefit, h = 60)
aafit <- auto.arima(ts_ausAirBnb)
aafcast <- forecast(aafit, h = 60)
stlffit <- stlf(ts_ausAirBnb, h = 60)
stlfcast <- forecast(stlffit, h = 60)
stlmfit <- stlm(ts_ausAirBnb)
stlmfcast <- forecast(stlmfit, h = 60)
tbatsfit <- tbats(ts_ausAirBnb)
tbatsfcast <- forecast(tbatsfit, h = 60)
nnetfit <- nnetar(ts_ausAirBnb)
nnetfcast <- forecast(nnetfit, h = 60)
autoplot(snaivefcast)
autoplot(aafcast)
autoplot(etsfcast)
autoplot(stlfcast)
autoplot(stlffit)
autoplot(stlmfcast)
autoplot(tbatsfcast)
autoplot(nnetfcast)