Prueba Retrospectiva o Back-Testing en Excel

La prueba retrospectiva en el modelado se refiere a un modelo de prueba que usa datos históricos. Este artículo se trata de cómo lograr hacer esto en Microsoft Excel y no del trasfondo teórico de lo que llamamos “Prueba Retrospectiva” o Backtesting.

¿Cómo llevamos a cabo el Backtesting? Rebobinamos el tiempo hasta el comienzo de nuestra serie de tiempo, calibramos los parámetros del modelo de sujeto usando los datos disponibles hasta esa instancia de tiempo, y hacemos una predicción (es decir un pronóstico) para el siguiente período.

Luego, avanzamos el tiempo, recalibramos los valores de parámetros y llevamos a cabo otra proyección, y así sucesivamente. Al final de nuestro ejercicio, tendríamos un conjunto de predicciones.

Notemos que, en cada punto, la única conjetura que hacemos es la definición general del modelo (es decir ARMA(1,1)). Aun así, calibraríamos los valores de los parámetros usando solamente la información disponible hasta ese momento.

Esta aproximación es consistente con prácticas de la vida real: primero, empezamos con un modelo inicial y llevamos a cabo un pronóstico para el siguiente período. Pasa el tiempo y se produce un nuevo período, por lo que agregamos el nuevo punto de datos al actual conjunto de datos de entrada. Recalibramos los parámetros, llevamos a cabo un pronóstico para el período siguiente, y repetimos.

¿Por qué nos debe importar esto?

Este artículo nos llevará por los pasos necesarios en Microsoft Excel para llevar a cabo un backtesting. Usaremos principalmente dos funciones incorporadas de excel: INDEX(.) y SEQUENCE(.), y sacaremos ventaja del mecanismo de tabla de datos de Excel para ejecutar diferentes escenarios.

El backtesting genera los errores de pronóstico que podrían haber ocurrido; de manera que podemos examinar de cerca el error de predicción de las series de tiempo para la correlación serial, las distribuciones, los valores atípicos, entre otros, para entender mejor la exactitud del modelo y su comportamiento.

¡Profundicemos en esto!

Para este número, usaremos un conjunto de datos sintético estacionario de 200 observaciones. El conjunto de datos sigue un proceso ARMA(1,1) como se muestra a continuación.

Conjunto de datos estacionarios sintéticos de 200 observaciones

El modelo propuesto es ARMA(1,1)

Tabla del modelo original ARMA

Procedimiento de Backtesting

Para cada repetición necesitamos hacer lo siguiente: (1) definir el conjunto de datos de entrada (como un sub conjunto de las series de tiempo originales), (2) usar el conjunto de datos en (1) calibrar los valores de parámetro del modelo ARMA(1,1), (3) usando el modelo en (2) y el conjunto de datos en (1) calcule el pronóstico para un periodo por adelantado.

1. Conjunto de datos de entrada

Para describir completamente el conjunto de datos de entrada necesitamos dos índices: empezar y finalizar, luego, usando la función SEQUENCE(.), generamos un conjunto de índices entre el comienzo y el final. Ahora, usamos la función INDEX(.) para devolvernos al rango de celdas en el conjunto de datos original, con índices de fila en el conjunto de secuencia.

Ejemplo:

=INDEX($A$3:$A$202,SEQUENCE(50,1,1,1),1)

El conjunto de datos original es $A$3:$A$202. Para seleccionar las celdas entre los índices 1 y 50.

Notemos que podemos definir un nombre para nuestros datos de entrada y hacer referencia a este nombre en el lugar del rango de celda de entrada.

2. Calibrar el Modelo

Usaremos la función ARMA_PARAM(.) de NumXL y especificaremos el tipo de retorno como=2 para parámetros calibrados.

Modelo calibrado ARMA

Notemos que ARMA_PARAM(.) devuelve una forma compacta de los parámetros del modelo, de manera que, en la figura de arriba, el proceso ARMA es:

\[\begin{array}{l} {X_t} = 1.485 + 0.401{X_{t - 1}} + 0.734{a_{t - 1}} + {a_t}\\ {a_t} \sim N(0,1.14) \end{array}\]

3. Pronóstico

Usando el conjunto de datos ARMA_FORE(.), en (1), y el modelo de los parámetros calculado en 2, podemos calcular los valores de pronóstico de 1 periodo por adelantado.

Calculando los valores de pronóstico para 1 periodo por adelantado.

Notemos que hemos generado el pronóstico de media, el error de pronóstico, y el intervalo de confianza.

Tabla de Datos

Ahora hemos acabado de completar el cálculo de uno de los pasos. Usaremos la función de “Tabla de Datos” de Excel para hacer el mismo cálculo matemático para los periodos restantes hasta el paso 200.

Primero necesitamos preparar la tabla de resultados:

Estableciendo una tabla de datos

Ahora, seleccionemos toda la tabla de datos empezando con la tabla de resultados e incluyendo la columna final del índice, como pueden ver a continuación:

Seleccionando el rango de las celdas de tablas de datos

Ahora, pasémonos a la barra de herramientas de “Datos” y localicemos el ítem “Tabla de Datos” bajo “Análisis what if (y si)”.

Menú de la tabla de datos de Excel

El dialogo de "Tabla de Datos" aparece. Ubiquemos la celda de “columna de entrada”, ingresemos la referencia del conjunto de datos del índice “finalizado”, y luego hagamos clic en el botón OK.

La tabla de datos de la ventana de dialogo

La tabla de datos sustituirá el valor del índice finalizado con los valores en nuestra tabla de datos y guardará los resultados.

Tabla de datos resultante con errores actuales

Notemos que se genera "Std. Error" por causa de la función ARMA_FORE(.) mientras que la columna ubicacada más a la derecha ("Error") es el error entre el pronóstico y el valor actual realizado.

Prueba retrospectiva o Back-Testing

Primero examinaremos los resultados de pronóstico de backtesting visualmente para los valores realizados propiamente dichos, y luego profundizaremos en las propiedades estadísticas.

Gráfica de datos del pronóstico de vs actual

El área sombreada en el gráfico corresponde a un intervalo de confianza del pronóstico de un 95%.

La gráfica exhibe un buen ajuste de modelo y, por lo tanto, exactitud del pronóstico.

Luego examinemos las propiedades estadísticas del error de pronóstico (Pronostico – Actual) usando un resumen de estadísticas en la barra de herramientas de NumXL.

Resumen estadístico de errores de Backtesting

La tabla de resumen estadístico indica que el error de pronóstico es ruido Gaussiano con media cero y una desviación estándar de 1.0.

Backtesting KDE vs. Gaussian

En conclusión, ARMA(1,1) es un modelo apropiado para el conjunto de datos dado.

¿Qué sigue?

¿Para este momento quizás se estén preguntando sobre los valores de los parámetros del modelo? ¿Son estables?

Primero, construimos una segunda "Tabla de Datos," pero en la fila de resultados están los valores de parámetros del modelo, y ejecutaremos la tabla de datos tal como hicimos anteriormente.

Parámetros de la tabla de datos

Ahora analicemos los valores de cada parámetro como hicimos con el error de pronóstico.

Backcasting ARMA (1,1) mu Backcasting ARMA (1,1) - sigma plot
Backcasting ARMA (1,1) -phi Backcasting ARMA (1,1) - theta plot

Los valores de los parámetros (excepto Theta) exhiben estabilidad y una tendencia hacia un valor constante. Los valores theta (de coeficiente MA) son más volátiles pero están limitados entre 0.6 y 0.9.

Luego debemos examinar las estadísticas descriptivas y las distribuciones de valores de parámetros subyacentes, pero dejaremos este ejercicio para que lo hagan ustedes.

Por favor, refiéranse a la hoja de cálculo adjunta para el análisis del conjunto de datos.

Conclusión

Este artículo ha mostrado los pasos para llevar a cabo una prueba retrospectiva o backtesting para un modelo predictivo con un cálculo mínimo o intermedio. Hemos usado las funciones incorporadas de Excel como INDEX(.) y SEQUENCE(.) y hemos sacado ventaja de la función de “Tabla de Datos” para llevar a cabo un cálculo completo para todos los índices pre-definidos.

Una vez obtuvimos los resultados del backtesting, nos enfocamos en el análisis estadístico y evaluamos sus propiedades y distribución para descubrir cualquier sesgo en el resultado (por ejemplo, la correlación serial).

  Archivos adjuntos

Comentarios

Inicie sesión para dejar un comentario.

¿Fue útil este artículo?
Usuarios a los que les pareció útil: 0 de 0