Previziunile probabilistice (nu previziuni punctuale) este în special utilă pentru Testarea strategiilor de tranzacționare sau Evaluarea capitalului riscului. Deoarece prețurile acțiunilor prezintă o volatilitate stocastică latentă, acest tip de metode de prognoză se bazează pe modele parametrice clasice precum ARMA pentru media și Garch pentru volatilitate.
Acest post oferă o alternativă hibridă flexibilă la Arma-Garch, combinând abordări de predicție conformală și învățare automată cu efecte heteroskedastice condiționale autoregresive (ARCH).
Modelul descompune seria de timp în două componente:
- Componentă medie: (y_t = mu_t + sigma_t varepsilon_t )
- Component de volatilitate: ( sigma_t^2 = f ( varepsilon_ {t-1}^2, varepsilon_ {t-2}^2, …) )
unde:
- ( mu_t ) este media condițională (modelată folosind orice metodă de prognoză)
- ( sigma_t ) este volatilitatea condiționată (modelată folosind Învățare automată)
- ( Varepsilon_t ) sunt reziduuri standardizate
inovație cheie utilizează orice model de serie de timp pentru prognoză medie și metode de învățare automată + predicție conformală pentru a modela componenta de volatilitate, permițând previziuni de volatilitate mai flexibile și potențial mai precise decât modelele tradiționale GARCH. Funcția acceptă diverse metode de învățare automată prin parametri fit_func
şi predict_func
Ca și în altul ahead
modele și prin intermediul caret
pachet.
Procesul de prognoză implică:
- Montarea unui model mediu (implicit:
auto.arima
) - Modelarea reziduurilor pătrate folosind învățarea automată. Pentru ca acest lucru să funcționeze, reziduurile din modelul mediu trebuie să fie centrate, astfel încât
( mathbb {e} ( epsilon_t^2 | f_ {t-1}) )
(Practic, o regresie supravegheată a reziduurilor pătrate în întârziere) este o bună aproximare a volatilității condiționate latente
- Conformalizarea reziduurilor standardizate pentru intervale de predicție
Această nouă abordare combină interpretabilitatea modelelor tradiționale de serie de timp cu flexibilitatea învățării automate, menținând în același timp cuantificarea adecvată a incertitudinii prin predicție conformală.
Instalați pachetul:
options(repos = c( techtonique = "https://r-packages.techtonique.net", CRAN = "https://cloud.r-project.org" )) install.packages("ahead")
Să începem cu un exemplu simplu folosind datele privind prețul stocului Google din fpp2
pachet:
library(forecast) library(ahead) library(randomForest) library(e1071) library(glmnet) y <- fpp2::goog200 # Default model for volatility (Ridge regression for volatility) (obj_ridge <- ahead::mlarchf(y, h=20L, B=500L))
Pachetul acceptă diverse metode de învățare automată pentru modelarea volatilității. Iată câteva exemple:
# Random Forest (obj_rf <- ahead::mlarchf(y, fit_func = randomForest::randomForest, predict_func = predict, h=20L, B=500L)) # Support Vector Machine (obj_svm <- ahead::mlarchf(y, fit_func = e1071::svm, predict_func = predict, h=20L, B=500L)) # Elastic Net (obj_glmnet <- ahead::mlarchf(y, fit_func = glmnet::cv.glmnet, predict_func = predict, h=20L, B=500L))
Să vizualizăm prognozele:
par(mfrow=c(1, 2)) plot(obj_ridge, main="Ridge Regression") plot(obj_rf, main="Random Forest") par(mfrow=c(1, 2)) plot(obj_svm, main="Support Vector Machine") plot(obj_glmnet, main="Elastic Net")
Pachetul acceptă, de asemenea, modele din caret
Pachet, care oferă acces la sute de metode de învățare automată. Iată cum să le folosești:
y <- window(fpp2::goog200, start=100) # Random Forest via caret (obj_rf <- ahead::mlarchf(y, ml_method="ranger", h=20L)) # Gradient Boosting via caret (obj_glmboost <- ahead::mlarchf(y, ml_method="glmboost", h=20L))
Vizualizarea prognozelor:
par(mfrow=c(1, 2)) plot(obj_rf, main="Random Forest (caret)") plot(obj_glmboost, main="Gradient Boosting (caret)")
Privind căile de simulare:
par(mfrow=c(1, 2)) matplot(obj_rf$sims, type="l", main="RF Simulation Paths") matplot(obj_glmboost$sims, type="l", main="GBM Simulation Paths")
De asemenea, puteți personaliza atât modelul mediu de prognoză, cât și modelul pentru prognozarea reziduurilor standardizate:
# Using Theta method for both mean and residuals (obj_svm <- ahead::mlarchf(y, fit_func = e1071::svm, predict_func = predict, h=20L, mean_model=forecast::rwf, model_residuals=forecast::thetaf)) (obj_glmnet <- ahead::mlarchf(y, fit_func = glmnet::cv.glmnet, predict_func = predict, h=20L, mean_model=forecast::thetaf, model_residuals=forecast::thetaf)) par(mfrow=c(1, 2)) plot(obj_svm, main="SVM with Theta") plot(obj_glmnet, main="Elastic Net with Theta")
Atunci când utilizați modele non-ARIMA pentru prognoza medie, este important să verificați dacă reziduurile sunt centrate și staționare:
# Diagnostic tests for residuals print(obj_svm$resids_t_test) ## ## One Sample t-test ## ## data: resids ## t = 1.0148, df = 99, p-value = 0.3127 ## alternative hypothesis: true mean is not equal to 0 ## 95 percent confidence interval: ## -0.7180739 2.2214961 ## sample estimates: ## mean of x ## 0.7517111 print(obj_svm$resids_kpss_test) ## ## KPSS Test for Level Stationarity ## ## data: resids ## KPSS Level = 7.5912e-76, Truncation lag parameter = 4, p-value = 0.1 print(obj_glmnet$resids_t_test) ## ## One Sample t-test ## ## data: resids ## t = 1.0992, df = 100, p-value = 0.2743 ## alternative hypothesis: true mean is not equal to 0 ## 95 percent confidence interval: ## -0.6460748 2.2513707 ## sample estimates: ## mean of x ## 0.8026479 print(obj_glmnet$resids_kpss_test) ## ## KPSS Test for Level Stationarity ## ## data: resids ## KPSS Level = 0.26089, Truncation lag parameter = 4, p-value = 0.1