簡體   English   中英

使用auto.arima()和xreg進行樣本預測

[英]Out of Sample forecast with auto.arima() and xreg

我正在研究預測模型,我從2014年到當月(2018年3月)有月度數據。

我的部分數據是用於計費的列和用於報價金額的列,例如(格式化的道歉)

年 - 季 - 月 - 帳單 - 報價
2014- 2014Q1-- 201401- 100 ------------- 500
2014- 2014Q1-- 201402-150 ------------- 600
2014- 2014Q1-- 201403- 200 ------------- 700

我用它來預測月度銷售額,並嘗試每月使用xreg和報價數量。

我回顧了下面的文章,但遺漏了一些東西來完成我正在嘗試做的事: ARIMA使用auto.Arima()和xreg進行預測

問題:有人可以展示使用xreg預測OUT OF SAMPLE的示例嗎? 我知道為了實現這一點,你需要從樣本中預測你的xreg變量,但我無法弄清楚如何傳遞這些未來的值。

我在預測值后嘗試使用futurevalues $ mean之類的東西,但這不起作用。

這是我的代碼:

sales = read.csv('sales.csv')

# Below, I'm creating a training set for the models through 
#  December 2017 (48 months).
train = sales[sales$TRX_MON<=201712,]

# I will also create a test set for our data from January 2018 (3 months)
test = sales[sales$TRX_MON>201712,]

dtstr2 <- ts(train2, start=2014, frequency=12)
dtste2 <- ts(test2, start=2018, frequency=12)

fit2 <- auto.arima(dtstr2[,"BILLINGS"], xreg=dtstr2[,"QUOTES"])
fcast2 <- forecast(fit2, xreg=dtste2[,"QUOTES"], h=24)
fcast2

上面的代碼有效,但僅提供3個月的預測,例如

                  Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
Jan 2018          70                60       100      50       130
Feb 2018          80                70       110      60       140
Mar 2018          90                80       120      70       150

我已經搜索了很多博客和主題,我可以找到一個使用auto.arima的示例,其中包含xreg變量的樣本預測,並且找不到任何已完成此操作的內容。

有人可以幫忙嗎?

非常感謝你。

這是一個MWE,用於預測具有未知協變量的時間序列的樣本。 這取決於為這個問題提供的數據以及@Raad的出色答案。

library("forecast")

dta = read.csv("~/stackexchange/data/xdata.csv")[1:96,]
dta <- ts(dta, start = 1)

# to illustrate out of sample forecasting with covariates lets split the data
train <- window(dta, end = 90)
test <- window(dta, start = 91)

# fit model
covariates <- c("Customers", "Open", "Promo")
fit <- auto.arima(train[,"Sales"], xreg = train[, covariates])

從測試數據預測

fcast <- forecast(fit, xreg = test[, covariates])

但是如果我們還不知道客戶的價值呢? 期望的目標是預測客戶,然后在銷售預測中使用這些預測值。 Open和Promo受經理的控制,因此將在預測中“固定”。

customerfit <- auto.arima(train[,"Customers"], xreg = train[, c("Open","Promo")])

我將嘗試預測2周,並假設沒有促銷。

newdata <- data.frame(Open = rep(c(1,1,1,1,1,1,0), times = 2),
                          Promo = 0)

customer_fcast <- forecast(customerfit, xreg = newdata)

# the values of customer are in `customer_fcast$mean`

newdata$Customers <- as.vector(customer_fcast$mean)

以與原始數據相同的順序獲取newdata列至關重要! forecast()位置匹配回歸量

sales_fcast <- forecast(fit, xreg = as.matrix(newdata)[,c(3,1,2)])
plot(sales_fcast)

reprex包 (v0.2.0)於2018-03-29創建。

再次感謝您的幫助。

我能夠結合使用上述建議來獲得我想要的東西。

最終,我最終做的是為我的外生變量創建時間序列對象並預測它們。 然后,我采用預測的$ mean輸出並為那些(我想要預測我的原始變量的長度)創建時間序列對象,然后將它們輸入到我原來的預測模型中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM