2016-02-26 166 views
1

我的目標是預測兩個不同頻道的每日註冊數量。每日時間序列預測,每週和每年週期

本週的季節性很強,特別是週末,也觀察到了年度效應。此外,我還有一些特別活動日,與其他日子有很大不同。

首先,我在這兩個通道上應用了TBATS模型。

x.msts <- msts(Channel1_reg,seasonal.periods=c(7,365.25)) 
# fit model 
fit <- tbats(x.msts) 
fit 
plot(fit) 
forecast_channel1 <- forecast(fit,h=30) 

第一道:

TBATS(0, {2,3}, -, {<7,3>, <365.25,2>}) 

Call: tbats(y = x.msts) 

Parameters 
    Lambda: 0 
    Alpha: 0.0001804516 
    Gamma-1 Values: -1.517954e-05 1.004701e-05 
    Gamma-2 Values: -3.059654e-06 -2.796211e-05 
    AR coefficients: 0.249944 0.544593 
    MA coefficients: 0.215696 -0.361379 -0.21082 

二通道:

BATS(0, {2,2}, 0.929, -) 

Call: tbats(y = y.msts) 

Parameters 
    Lambda: 0 
    Alpha: 0.1652762 
    Beta: -0.008057904 
    Damping Parameter: 0.928972 
    AR coefficients: -0.586163 -0.676921 
    MA coefficients: 0.924758 0.743675 

如果我預測第二通道,我只得到空值,而不是任何預測。

  1. 請問您爲什麼這麼做?
  2. 你有什麼建議如何在特定的日子裏建立這個模型?

謝謝大家!

回答

0

tbatsbats有時不穩定,您的第二個模型顯示無限的預測。已經有一些關於類似問題的錯誤報告。

在任何情況下,如果您想使用事件信息,您最好用ARMA錯誤構建一個諧波迴歸模型。

例如,假設您的活動信息記錄爲虛擬變量event1。然後模型可以如下安裝:

harmonics <- fourier(x.msts, K=c(2,2)) 
fit1 <- auto.arima(x.msts, lambda=0, 
    xreg=cbind(harmonics,event1), seasonal=FALSE) 
f1 <- forecast(fit1, 
    xreg=cbind(fourierf(x.msts, K=c(2,2), h=200), rep(0,200))) 

這假定該事件不會發生在接下來的200天(因此200 0)。我已經使用了2周和2年的諧波。調整這些以最小化模型的AICc。

該模型實際上非常類似於您正在擬合的TBATS模型,只是lambda值已經被指定而不是估計,並且季節性隨時間而變化,而不是被允許進化。優點是諧波迴歸模型趨於更穩定,並且允許包含協變量。

+0

我已經閱讀了你的許多出版物,很高興看到你是幫助我的人,謝謝@RobHyndman教授! :) 按照你的建議,我在l_holidays和f_holidays中創建了一個過去的事件和未來的事件。 /* '諧波< - 傅立葉(x2.msts,K = C(3,2)) fit2_harm < - auto.arima(x2.msts,λ-= 0, XREG = cbind(諧波,l_holidays),季節性= FALSE) f2 < - 預測(fit2_harm, xreg = cbind(fourierf(x2.msts,K = c(3,2),h = fcast_int),f_holidays))* * 模型性能和細節: http://tinyurl.com/zush5lm – ponthu

+0

你對這種模式有什麼看法?以某種方式識別異常值並像事件一樣在單獨的協變量中處理它們會有好處嗎? – ponthu