जैसा कि यहां में बताया गया है, जिसमें एक-चरणीय पूर्वानुमान लगाना शामिल है पूर्वानुमान क्षितिज बढ़ने पर परीक्षण सेट विचरण में अपरिहार्य वृद्धि से बचने का एक तरीका है। उस खंड में उल्लिखित forecast
पैकेज के लिए पहले से प्रशिक्षित मॉडल का उपयोग करके परीक्षण सेट पर एक-चरणीय पूर्वानुमान करने के तरीके हैं। क्या नए fable
पैकेज का उपयोग करके परीक्षण डेटा के लिए एक-चरणीय पूर्वानुमान करने का एक समान तरीका है? शायद new_data
वर्णित पैरामीटर यहां, उदाहरण के लिए इसे संभालता है, लेकिन मुझे यकीन नहीं है, क्योंकि h = 24
और new_data = x_test
दोनों के लिए पूर्वानुमान नीचे समान हैं:
> library(fable)
> library(fabletools)
> x <- USAccDeaths %>%
+ as_tsibble()
> x
# A tsibble: 72 x 2 [1M]
index value
<mth> <dbl>
1 1973 Jan 9007
2 1973 Feb 8106
3 1973 Mar 8928
4 1973 Apr 9137
5 1973 May 10017
6 1973 Jun 10826
7 1973 Jul 11317
8 1973 Aug 10744
9 1973 Sep 9713
10 1973 Oct 9938
# … with 62 more rows
> x_train <- x %>% filter(year(index) < 1977)
> x_test <- x %>% filter(year(index) >= 1977)
> fit <- x_train %>% model(arima = ARIMA(log(value) ~ pdq(0, 1, 1) + PDQ(0, 1, 1)))
> fit
# A mable: 1 x 1
arima
<model>
1 <ARIMA(0,1,1)(0,1,1)[12]>
> nrow(x_test)
[1] 24
> forecast(fit, h = 24)$.mean
[1] 7778.052 7268.527 7831.507 7916.845 8769.478 9144.790 10004.816 9326.874 8172.226
[10] 8527.355 8015.100 8378.166 7692.356 7191.343 7751.466 7839.085 8686.833 9062.247
[19] 9918.487 9250.101 8108.202 8463.933 7958.667 8322.497
> forecast(fit, new_data = x_test)$.mean
[1] 7778.052 7268.527 7831.507 7916.845 8769.478 9144.790 10004.816 9326.874 8172.226
[10] 8527.355 8015.100 8378.166 7692.356 7191.343 7751.466 7839.085 8686.833 9062.247
[19] 9918.487 9250.101 8108.202 8463.933 7958.667 8322.497
1 उत्तर
उत्तर और कोड
{forecast}
पैकेज में कई मॉडलों के लिए उपलब्ध model
तर्क {fable}
पैकेज में refit()
विधि के बराबर है। जब भविष्य के डेटा के साथ उपयोग किया जाता है, तो इसका उपयोग मॉडल से कई एक-चरणीय पूर्वानुमान बनाने के लिए किया जा सकता है।
library(forecast)
fit <- head(USAccDeaths, -24) %>%
auto.arima()
fit_test <- tail(USAccDeaths, 24) %>%
Arima(model = fit)
accuracy(fit_test)
#> ME RMSE MAE MPE MAPE MASE
#> Training set 22.45098 167.0648 85.59724 0.2382773 0.9327587 0.3298545
#> ACF1
#> Training set -0.0968173
library(fable)
library(dplyr)
us_accidental_deaths <- as_tsibble(USAccDeaths)
fit <- head(us_accidental_deaths, -24) %>%
model(ARIMA(value))
fit_test <- refit(fit, tail(us_accidental_deaths, 24), reestimate = FALSE)
accuracy(fit_test)
#> # A tibble: 1 x 10
#> .model .type ME RMSE MAE MPE MAPE MASE RMSSE ACF1
#> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 ARIMA(value) Training 22.5 167. 85.6 0.238 0.933 0.330 0.490 -0.0968
2020-10-13 को reprex पैकेज द्वारा बनाया गया (v0.3.0)
व्याख्या
एक मॉडल के fitted()
मान एक कदम आगे के पूर्वानुमान हैं, जिनका उपयोग 'प्रशिक्षण सटीकता' प्रदर्शन (प्रशिक्षण डेटा पर पूर्वानुमान सटीकता) का मूल्यांकन करने के लिए किया जा सकता है। हालांकि एक पकड़ है - मॉडल के अनुमानित पैरामीटर पूरे प्रशिक्षण सेट पर आधारित होते हैं और इसलिए प्रशिक्षण सटीकता अपेक्षा से बेहतर होती है (मॉडल में भविष्य के बारे में कुछ जानकारी होती है जो उपयुक्त है)।
forecast()
फ़ंक्शन का उपयोग भविष्य के समय बिंदुओं के पूर्वानुमान बनाने के लिए किया जाता है, जिनमें से मॉडल ने कभी नहीं देखा है। आप forecast(<mable>, h = 1)
का उपयोग करके एक-एक कदम आगे का पूर्वानुमान तैयार कर सकते हैं। हालांकि यह केवल एक ही पूर्वानुमान पैदा करता है। इसके बजाय, हम एक कदम आगे का पूर्वानुमान तैयार करना चाहते हैं, मॉडल में एक नया अवलोकन जोड़ना चाहते हैं, और फिर उस नए अवलोकन से परे एक और एक-चरण आगे का पूर्वानुमान तैयार करना चाहते हैं (डेटा समाप्त होने तक दोहराते हुए)।
यहीं पर refit()
फ़ंक्शन उपयोगी है। यह एक मौजूदा मॉडल लेता है, और इसे एक नए डेटासेट पर लागू करता है। इस रीफिटिंग प्रक्रिया में डेटा (fitted()
मान) पर एक-चरणीय पूर्वानुमानों की गणना करना शामिल है। reestimate = FALSE
को सेट करके, मॉडल के अनुमानित गुणांकों को नए 'भविष्य' डेटा के लिए बेहतर ढंग से अपडेट नहीं किया जाएगा। यह भविष्य के मूल्यों के बारे में कुछ जानकारी वाले मॉडल गुणांक के मुद्दे को हल करता है जिसके साथ हम पूर्वानुमान सटीकता का परीक्षण कर रहे हैं।