How to compare GARCH volatility forecast performance?

Abierto
#607 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
25/100
Tipo de issue
Documentación
Claridad
Necesita aclaración
Estado de actividad
Estancado
Stack tecnológico
python

Línea de trabajo

Start with the linked volatility-forecasting documentation and the arch_model / ARCHModelForecast APIs named in the issue. Clarify what variance represents and what target the author should use for evaluating forecasts; done means the three questions about interpretation, MSE, and the reported fit are answered.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

I have a question regarding the evaluation of volatility forecasts using the arch_model class. I am very new, so I sincerely apologise if this is obvious, or if this is the wrong place to ask.

I want to forecast the daily volatility (for a test set of roughly 1000 obs) of stock returns using a GARCH model, and concretely using the arch package. After doing so, I want to measure the forecasting performance using the mean squared error.

I construct a model using mean adjusted and scaled returns arch_model(x_var, mean="Zero", vol="Garch", p=1, q=1) and I fit the model using model.fit(last_obs="2018-07-03", update_freq=10) to produce a fixed window forecast as in the tutorial in the documentation.

What I am having trouble with is:

  1. Correctly understanding the ARCHModelForecast object. Is it correct that the variance attribute is the prediction for the daily volatility?
  2. If yes, what value do I compare it to to calculate the MSE? My understanding for GARCH models was that you use squared returns as a proxy for volatility, but my model forecasts are nowhere near the returns, squared returns, or any other feature I have in my data set. Is it correct that I would compare the forecast values to the squared returns at the according time step to evaluate prediction performance?
  3. If yes, is the model I fitted just garbage? I copied the output for model_fit.summary() below. Any sugestions for improvements?

Before I go fiddle with different parameters, I want to make sure that my understanding of the concepts is correct.

I can post more code or an example of my dataset if this helps. Many thanks for your help!

Zero Mean - GARCH Model Results                         
=================================================================================
Dep. Variable:     Returns mean adjusted   R-squared:                       0.000
Mean Model:                    Zero Mean   Adj. R-squared:                  0.000
Vol Model:                         GARCH   Log-Likelihood:               -8545.06
Distribution:                     Normal   AIC:                           17096.1
Method:               Maximum Likelihood   BIC:                           17115.1
                                           No. Observations:                 4110
Date:                   Thu, Sep 01 2022   Df Residuals:                     4110
Time:                           11:40:24   Df Model:                            0
                              Volatility Model                             
===========================================================================
                 coef    std err          t      P>|t|     95.0% Conf. Int.
---------------------------------------------------------------------------
omega          0.0454  6.394e-02      0.710      0.478 [-7.994e-02,  0.171]
alpha[1]       0.0612  5.064e-02      1.209      0.227 [-3.804e-02,  0.160]
beta[1]        0.9319  6.049e-02     15.406  1.500e-53    [  0.813,  1.050]
===========================================================================

Covariance estimator: robust
Lenguaje dominante
Python
Estrellas
1.6k
Forks
298
Merge medio
14 h 46 min
PR fusionados (30 d)
106

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de bashtage/arch

Todos los issues de bashtage/arch

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.