Bienvenido a tu segundo tutorial de AnalÃtica Financiera. En este tutorial, estudiaremos los modelos de ajuste y pronóstico de las series de tiempo financieras. Particularmente, aplicaremos los conceptos de los componentes de las series de tiempo mediante modelos tipo ARIMA y Suavizamiento Exponencial. Generaremos varios modelos de ajuste a los datos. Para ello, vamos a partir los datos en una muestra de entrenamiento y en otra de prueba, para medir la calidad tanto de ajuste como aquellos de pronósticos. Vamos a emplear los datos de Amazon, desde agosto 2020 al 31 de marzo 2021, a partir de la fuente de datos de Yahoo Finance. A partir de la construcción de estos modelos, vamos a derivar métricas de ajuste y pronóstico a los datos, como insumo a la discusión a la selección del mejor modelo. Particularmente, ¿qué analizaremos? Analizaremos el comportamiento de los residuales, las métricas de calidad de ajuste en modelos tales como la AIC o el Criterio de Akike, y métricas de pronóstico, tales como la RaÃz del Error Cuadrático o RMSE, por sus siglas en inglés, y el Error Porcentual Absoluto Medio o MAPE, por sus siglas en inglés. Asà que, comencemos. Continuamos con este segundo tutorial de analÃtica. Recordemos que queremos generar modelos de ajuste y de pronóstico a los datos. El primer paso es tener instalada nuestras librerÃas para poder realizar el ejercicio. En este caso, me está mandado estos anuncios porque ya los tenÃa yo instalados, pero básicamente son librerÃas para poder acceder a los datos entre [inaudible] de Yahoo Finance, trabajar con este formato en series de tiempo, trabajar con funciones para identificar si tenemos series estacionarias o no, generar pronósticos y gráficos de ellos, también para identificar qué coeficientes son significativos en estas regresiones, y demás. Para calcular, también, los métricas de error para cada uno de ellos. Asegúrense que ustedes instalen estas librerÃas, yo ya las tenÃa instaladas, paquetes y librerÃas. AquÃ, mi opción de que lo maneje todos los dÃgitos a tres, y que deshabiliten los "warnings", que luego son un poco incómodos de estar viendo. El primer paso es obtener los precios de la fuente, en este caso de Amazon. Vamos a utilizar la misma función que utilizamos en el tutorial anterior, es la función "getSymbols", ponemos las fechas de cuándo a cuándo, la fuente de Yahoo Finance, y esto es que me los entregue, y aparte que los ponga en mi [inaudible]. Vamos a eliminar también los datos omitidos, mediante esto. ¿Se dan cuenta? Es muy parecido a la función que trabajamos en el tutorial anterior. En este caso, me interesan los datos de cierre, que son en la columna cuatro. Aquà ya lo estoy llamando, y podemos, entonces, tener una idea de esto, como está, graficando la serie. Vamos a identificar también su longitud porque nos interesa, como decÃamos en la introducción, hacer de la serie una parte reservada; la parte de entrenamiento, y la parte de test. Vamos a definir aquà "h" y vamos a hacer que redondee la longitud de esa serie. Vamos a agarrar el siete por ciento para la prueba, que esto lo redondea a cero dÃgitos. Generamos "h", va a ser "h" para que pronostique en todos los modelos a 12 datos y generamos, entonces, de dónde a dónde serÃa el entrenamiento: serÃa Amazon, la serie. Esto serÃa desde el inicio hasta donde termina, pero le quita esa parte que estamos reservando para la prueba. Y para el test serÃa, entonces, muy parecida a la anterior, solamente que va desde que en "p" está terminando la serie, menos lo que estamos quitando de prueba, pero le suma uno y hasta donde termina. En este caso, va a ser la parte de entrenamiento y la parte de prueba. Ya tenemos esto hecho. Ahora sà vamos a poder empezar a trabajar con los modelos. Los primeros modelos van a ser los modelos ARIMA, y una de las necesidades que tenemos que cumplir para poderlos modelar es, en el caso de ARMA, es que si las series son estacionarias. Vamos, entonces, a identificar si nuestra serie es estacionaria mediante la prueba de Aumented Dickey-Fuller test. ¿Qué es lo que nos decÃa la lectura? Es que tenemos que fijarnos en el valor de P VALUE. En este caso P VALUE es mayor al nivel de significancia 0,05, por lo tanto, ¿que estamos haciendo? No podemos rechazar la hipótesis nula que es la presencia de una raÃz unitaria. Por lo tanto, decimos que la serie no es estacionaria. ¿Qué necesitamos hacer? Vamos a diferenciarla y vamos a poner la función "diff" de "difference", de la serie y vamos a una vez eliminar el primer renglón donde tenemos un N A que se va a formar. Podemos nuevamente correr, mediante dos librerÃas aquÃ, cuál serÃa para la prueba de Aumented Dickey-Fuller Test con las diferentes librerÃas y vemos que nos otorgan el mismo resultado de P VALUE de 0,01 y 0,0. Ante este resultado, ahora sÃ, podemos rechazar la hipótesis nula de raÃz unitaria y por lo tanto ya la serie es estacionaria. En este momento ya podemos darnos una idea de cómo está la diferencia entre la serie, podemos hacer un "grid" entre el estudio que la producción de gráficos, para ver cómo era la serie original y la serie diferenciada. ¿Qué es lo que podemos ver? Que esto ya está oscilando a un cierto valor y esta no nos entregó que era no estacionaria y esta ya no va a ser estacionaria y se ve más homogénea la serie. Ya que es estacionaria, ahora sÃ, podemos definir los candidatos de los modelos a usar. Vamos a utilizar la librerÃa TSA y esa función que comentamos en la lectura que era el "aumented autocorrelation function" que es lo que me va a ayudar de manera complementaria a las gráficas de autocorrelación acf y las autocorrelaciones parciales para poder identificar en un solo objeto cuál es esa posibilidad de nivel A R M A, de ARMA. ¿Qué es lo que nos dice esta metodologÃa? Que debemos de buscar un vértice de un posible triángulo que se va a formar entre las figuras de ceros y de x. Si nosotros la corremos, vamos a elegir que nos entregue un "grid" de 15 por 10; podemos observar si la hago más grande, que tenemos por aquà una propuesta de tener un vértice. Tenemos por acá la presencia de un triangulito. ¿Podemos tener otros? La idea es tener en esta dirección este triángulo o este vértice. Y si vemos a un nivel, posiblemente a niveles más altos, este podrÃa ser un primer modelo candidato. Habrá otros posiblemente. Tenemos que proponerlos y seguir adelante. Ante esta posibilidad, tenÃamos que serÃa un ARMA ( 7, 3) pero la serie diferencial. Pero recordemos que nosotros podemos expresarla como un ARIMA. ¿Cómo cuál? Como (7, 7, 1, 3, 1) porque fue una diferenciación la que tuve que realizarle a la serie para poderla hacer estacional. ¿Podemos generar otro modelo candidato? SÃ. Vamos a utilizar el algoritmo de búsqueda de "auto arima" que lo que hace es buscar un algoritmo para buscar las combinaciones que minimicen ese AIC, ese ajuste, o esa medida de bondad de ajuste de los modelos. Si nosotros corremos este "auto arima" vemos que nos está entregando un ar1. Ninguna diferenciación propone para ello y me entrega el coeficiente. Al momento, ¿qué es lo que puedo ver? Que este segundo modelo me está dando un AIC de 1.715 y el primer modelo que estamos definiendo acá arriba como un (7, 3), aún no lo corro, vamos a modelarlo aquà abajo mediante la función ARIMA, como tal, de la función ahora no diferenciada, sino de la serie original. Ahora sÃ, voy a modelar el ARIMA: era un (7, 1, 3), lo acabo de explicar porque era una diferenciación y el método de máxima verosimilitud. Esto lo tenemos que elegir porque estamos proponiendo modelos N A y lo tenemos que hacer de esa manera porque no podemos estar observando los retrasos de los errores; por eso es que empleamos este método. Si ponemos el método tradicional que es por OLS, "ordinary least square", estarÃamos cometiendo posiblemente un error en el modelo entonces tenemos que poner ML como máxima verosimilitud. Si, en cualquiera de los dos, lo corremos, podemos pedir "summary" de estos y vean, nos está entregando un AIC de 1.717 a ese primer modelo y podemos tener la función de "tsdiag"; antes podemos ver la pertinencia de los coeficientes, porque aquà lo que me está entregando son los coeficientes, el estándar "error" de ellos, pero no me está diciendo si es significativo ante un modelo de regresión. Podemos ver mediante esta función de "coef", de ese modelo, cuáles son esos coeficientes que son significativos al 1 por ciento, al 10, al 5. En este caso, el modelo, digamos, que hasta en sus niveles altos están siendo significativos al 1 por ciento. Mediante esta función de "tsdiag", "dangerous diagnostic", podemos ver entonces el análisis a los residuales. Si hacemos esto más grande, vemos que lo ideal es que, estas son las series de residuales, no tengamos ningún retraso significativo, o sea que esto ya se ha convertido en un ruido, ruido blanco, y que los P VALUES de esa prueba de ajuste en los box me está diciendo: "Hay un problema de ajuste al modelo", pues estos P VALUES bien elevados para que la hipótesis nula que hay un buen modelo de ajuste no se esté rechazando. Lo ideal es que estos P VALUES sean lo más inflados posibles y que no estén bajos en cualquiera de estos valores de la serie. Este modelo de diagnóstico residual se ve bien. Para el segundo modelo, que era el ar1, podemos hacer exactamente lo mismo: ver la significancia de su coeficiente y ver el análisis de sus residuales. En este caso, nuevamente, vamos a tener un comportamiento muy similar al anterior, donde sigue siendo un buen modelo donde de serie de residuales no tengo ningún retraso significativo. Los P VALUES son suficientemente altos como para decir que no tenemos ningún problema de ajuste al modelo, que el modelo ajusta bien a los datos. Ahora, sà podemos pasar a la parte de pronósticos. Sosteniendo esto, vamos a volver a llamar a las librerÃas de fitAR de "tseries" y de "forecast" y vamos a poder generar dos modelos de pronóstico para el primer modelo y segundo. Vamos a generar el "forecast" del primer modelo ar de la ARIMA que comentamos y del segundo modelo que era mediante la función de "auto arima". Para cada uno de ellos lo corremos y podemos ver entonces el "summary" o el resumen de cada uno de estos modelos. ¿Qué nos está entregando? Nos está entregando nuevamente el resumen del ajuste del modelo y está haciendo el pronóstico, a lo que se le llama el "Point Forecast", que es la media de todos estos valores, a un intervalo de confianza del 80, del 95 por ciento para este primer modelo, que era entonces el ARIMA (7, 1, 3) y para el segundo modelo, de todas maneras, igualmente, me está entregando el "Point Forecast" y sus intervalos de confianza con los respectivos valores de AIC. Al momento los valores de AIC son 1.715 para el segundo y 1.717 para el primero. Digamos que no hay una diferencia tan significativa entre ellos. Para poder decidir el modelo, realmente, la decisión va a estar más en las métricas de error del pronóstico. PodrÃamos también generar una gráfica para cada uno de esos pronósticos de manera más visual y lo podrÃamos tener de esta manera para cada uno de este primer modelo y del segundo modelo. Otro gráfico que aquà se los pongo de manera opcional, que ustedes pudieran generar para tener los mismos datos en la misma serie, que lo único que hay que hacer es pasar la serie de datos a un formato de "time series" y poner las fechas correspondientes a cada uno de ellos, sabiendo que hay 154 datos en la parte de "train". Si ustedes colocan esto para cada una de las partes de "fitted", para la parte de "train", originalmente "time series", para la parte de ajuste de cada uno de esos primeros y segundos modelos y de sus valores de pronóstico, podrÃamos generar una gráfica interesante que serÃa esta, donde pueden ver entonces, cómo se verÃa la serie original, las dos series de ajuste a cada una de ellas, que serÃa el ARIMA 1, el ARIMA (7, 1, 3) y cómo se verÃan sus pronósticos; si quisieran ustedes verla de manera un poco más integral y en una sola gráfica. Miramos asà el error del pronóstico mediante las métricas RMSE y MAPE. Recordad que el RMSE es el error cuadrático medio y el MAPE es el error porcentual, en porcentaje absoluto medio; son 2 métricas que se está proponiendo para tener referencia en cuanto al sesgo y la precisión. La precisión, lo que me está diciendo más relacionado con el MAPE, es cuál es ese margen de error del pronóstico versus el real. Cuál es esa precisión del pronóstico. Y el sesgo es cuál es ese promedio histórico de los errores, o sea, si los errores son muy grandes o no, cuanto de la RMSE; por eso es que agarramos estas dos de referencia. Mediante la librerÃa "Metrics", las podemos nuevamente llamar, vamos a medir mediante la función RMSE para cada uno de estos dos modelos. Y fÃjense, ponemos de referencia la prueba, pero la serie que estaba reservada para la prueba y lo que está generando cada uno de pronóstico, cada uno de estos dos modelos. Y de igual manera para la métrica del MAPE, para la parte de la precisión. Podemos generar entonces esos dos y podemos tener al momento una idea de cómo se están comportando en una tablita. Vamos a generar un "data frame" para los modelos ARIMA (7, 1, 3) y el ar3. Vamos a llamar a los resultados que acabamos de calcular para los errores de RMSE y MAPE que los integre en un "data frame" y que nos entregue los resultados al momento. Lo que tenemos es esto. Si lo hacemos un poco más para arriba y más delante, es que tenemos el modelo ARIMA con una RMSE mucho más bajo que el ar3 y también un MAPE mucho más [inaudible]. Vamos a continuar en un momento, en una segunda parte para avanzar. Continuamos con nuestra segunda parte del tutorial. En este segundo tutorial vamos a trabajar con los modelos de "suavizamiento exponencial". Vamos a trabajar con los mismos datos de Amazon. Si ustedes gustan volverlos a llamar o seguir trabajando con ellos, es correcto. Podemos recordar cuál era esa serie, que era la serie de entrenamiento de Amazon y cuál es el requisito para esta parte de modelos que tenemos que tener los datos en un formato test o "time series". Lo único que tenemos que hacer es pasarlos con esta función "ts", de esos datos, y podemos referir la fecha de inicio y de la frecuencia. Recordamos que como era una frecuencia inferior a un año podemos tener cuántos datos estaban en ese perÃodo. Y podemos graficar esa gráfica en ese formato. ¿Cuáles son los posibles enfoques de suavizamiento? Vamos a trabajar en un primer modelo. Si ustedes se fijan en esta serie, no se demuestra una joroba o una tendencia evidente en ella, entonces vamos a trabajar con esta primera propuesta que es un "simple exponential smoothing", que lo que modela es únicamente el nivel y la serie. Corremos las lecturas y esto es un buen inicio para poder empezarla a modelar. ¿Qué es lo que nos entrega el "summary"? Nos va a entregar cuál es ese nivel de "alpha". En este caso el nivel de "alpha" es casi cercano a 1, lo cual está diciéndonos que casi tiene un suavizamiento muy bajo en cuanto al nivel. Estamos dejando que lo encuentre de manera más óptima y no nos está diciendo más porque lo único que modela en este tipo de modelos es el nivel. Nos está entregando las métricas de error y cuál es ese pronóstico. Porque le impusimos 12 de una vez al pronóstico. Podemos también generar a través de esta nuevamente el "summary" o que también nos genere ya para que generemos el objeto particular, el "forecast" de ese modelo a 12 pasos. Lo que nos entrega es el "Point Forecast" con los niveles, con los intervalos de confianza al 80 y al 95 por ciento. Podemos generar nuevamente una gráfica de ella y cómo serÃa esta si únicamente lo que está modelándome es el nivel. Por eso es que está asÃ. El segundo modelo, ¿cuál serÃa? Vamos a proponer un modelo de tendencia lineal con "holt". PodrÃamos probar aún este, aunque no hay una tendencia evidente. Entonces ponemos el "fit2" o puede ser modelo 2. Vamos a proponer mediante esta función de "holt", nuevamente, a 12 pasos adelante y nos puede generar entonces el "summary" de este. Observemos asà el valor de "alpha", muy similar al modelo anterior. "Alpha" es casi 1, lo que me está diciendo es que tiene casi un 0 suavizamiento, que esto es casi una caminata aleatoria y que beta es muy pequeño. Si beta es muy pequeño, lo que está diciendo es que la tendencia cambia muy lentamente en el tiempo, a diferencia que si tuviéramos betas muy altos, que dirÃamos que la tendencia cambia muy rápidamente. Aquà también podemos observar los coeficientes para AIC de este modelo. Podemos generar también una gráfica de este, como tal, y lo que podemos observar, nuevamente, esos datos de la serie, cómo ajustan a ello y su pronóstico, con estos intervalos de confianza, al 80 y al 95 por ciento. Podemos generar un tercer modelo. El tercer modelo que proponemos serÃa un "holtwinters" de estos mismos, pero la única diferencia es que podrÃamos tener aquà gamma de una vez como falsa, porque sabemos que no tendrÃamos una estacionalidad, pero si colocamos alpha: "NULL" y beta: "NULL" es para que calcule cuál serÃan sus valores óptimos. Entonces podemos optar por este tercer valor y ya me está generando alpha: un valor muy similar a los anteriores, casi de 1; un beta muy bajito, lo que me está diciendo que esta tendencia cambia muy lentamente en el tiempo y gamma, en este caso, "FALSE". Podemos nuevamente generar esa información de cuál es ese tercer modelo de "fit3" una vez y podemos generar, ahora sÃ, puntualmente, su pronóstico y su gráfico. Nuevamente tenemos ahà una visualización de cómo serÃa su gráfico. Podemos avanzar con un cuarto modelo. Este cuarto modelo lo vamos a llamar un modelo de ets propuesto por Hyndman. El ets para que deje también, nuevamente, determinar esa selección, para cada uno, el tipo de error que tiene, el tipo de tendencia y de estacionalidad. Vamos a elegir esta opción de "damped": FALSE. ¿Por qué? Porque la serie no demuestra un asÃntota vertical como tal. No se ve que tenga una tendencia como tantos [inaudible]. Estas son las opciones que debemos de poner para que, en este caso, que no tenga la joroba, pues ponemos FALSE. Y para cada una de las siguientes que las determine como NULL. Y estas son diferentes opciones que pueden tener. Digamos que es una opción muy estándar que pueden elegir ustedes para poder determinar estos modelos. Aquà hay algo interesante que "allow multiplicative trend": FALSE. Acuérdense que en la lectura comentábamos que usualmente estos modelos no se emplean, los de tendencia multiplicativa. Si corremos este cuarto modelo generamos un resumen de él. También ya nos está entregando, nuevamente, cual serÃan los valores para alpha. Es lo que me está identificando que este es un modelo con errores aditivos que no tenga una tendencia ni una estacionalidad como tal. Lo único que estarÃa modelando es el nivel que hace coherencia con el primero que estábamos proponiendo, que era el SES, el "simple exponential smoothing". Él nos da el parámetro para alpha, para el nivel, nuevamente muy similar a los anteriores, arriba de 0,9; 0,94. Ya que tenemos esto, podemos entonces graficarlos [inaudible] manera, generar su pronóstico al nuevo valor de 12 y podemos graficarlo de tal manera. Aquà podemos tener la opción de incluir algunos valores o toda la serie y demás, para tener un poco más de detalle en los últimos valores. Podemos calcular asÃ, el error para cada uno de estos valores y métricas de desempeño. Para cada uno de estos lo podemos calcular y también asà el métrico de Max para cada uno de estos. Y nuevamente podemos imprimir lo que llevamos al momento para los modelos ARIMA y ar3 y de los de suavizamiento exponencial. Generamos el "data frame" para cada uno de ellos y podemos observar lo que veamos al momento. Con respecto a las métricas de pronóstico, podemos observar que el modelo "holt" que modelaba el nivel básicamente porque el dato para la tendencia me daba insignificativo, entonces me daba un "holt", pero con un MAPE muy similar al que tenÃa el modelo de "holtwinters". Finalmente son modelos muy similares y podemos decir que estos superan al que tenÃamos para el ARIMA. Con respecto al MAPE, para el primero que era el más bajo que el ARIMA, el 0,1, pues tenemos que estos son también muy competitivos en cuanto a 0,08 pero son inferiores. Podemos llegar hasta aquà y serÃa lo que tendrÃamos para modelos de ajuste con modelos ARIMA y con suavizamiento exponencial. Continuamos, entonces, con el programa. Gracias.