जैसा कि यहां में बताया गया है, जिसमें एक-चरणीय पूर्वानुमान लगाना शामिल है पूर्वानुमान क्षितिज बढ़ने पर परीक्षण सेट विचरण में अपरिहार्य वृद्धि से बचने का एक तरीका है। उस खंड में उल्लिखित 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
blacksite 12 अक्टूबर 2020, 17:49

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 को सेट करके, मॉडल के अनुमानित गुणांकों को नए 'भविष्य' डेटा के लिए बेहतर ढंग से अपडेट नहीं किया जाएगा। यह भविष्य के मूल्यों के बारे में कुछ जानकारी वाले मॉडल गुणांक के मुद्दे को हल करता है जिसके साथ हम पूर्वानुमान सटीकता का परीक्षण कर रहे हैं।

1
Mitchell O'Hara-Wild 13 अक्टूबर 2020, 09:21