Dincolo de Arma-Garch: Leveling Model-A-Agnostic Machine Learning și predicție conformală pentru prognoza nonparametrică a stocurilor probabilistice (ML-arch)

URMĂREȘTE-NE
16,065FaniÎmi place
1,142CititoriConectați-vă

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:

  1. Componentă medie: (y_t = mu_t + sigma_t varepsilon_t )
  2. 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")

Image-titlu-here

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

Dominic Botezariu
Dominic Botezariuhttps://www.noobz.ro/
Creator de site și redactor-șef.

Cele mai noi știri

Pe același subiect

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.