Bitcoin & Ether Pronósticos usando Prophet


Contenido
Introducción
1. Descripción
2. Data
3. Carga de Paquetes
4. Carga de Datos
5. Primeras predicciones
6. Gráfica interactiva
7. Componentes estacionales
8. Comentarios


Introducción: 

En el siguiente entrenamiento se presenta una novedosa herramienta a traders y especialistas en criptomonedas para hacer pronósticos. En un mundo tan dinámico, una de las necesidades para estos profesionales es estar actualizados en las técnicas para el análisis de datos con posibilidades predictivas, muchas veces sin la rigurosidad técnica y teórica de los modelos robustos para este tipo de análisis que requieren de un vasto conocimiento en estadísticas o econometría como los modelos del catálogoArch-Garchpor ejemplo. 

Hace algunos meses leí sobre el paquete Prophet creado por el equipo Core Data Science de Facebook y desarrollado en código abierto. El paquete está disponible para el entorno de desarrollo integrado de Rstudio y Python. En general, es rápido y proporciona pronósticos completamente automatizados para científicos y analistas de datos en solo unas cuántas líneas de código, lo que agiliza su aplicación. 

Por estas razones, decidí ofrecerles un breve entrenamiento con Prophet realizando ejercicios predictivos con los precios de cierre del Bitcoin y Ether, comentando sus ventajas, posibles aplicaciones de apoyo para el trader profesional y sus limitaciones con respecto a otros modelos más elaborados.

No obstante, el pronóstico es una de las áreas del análisis de datos que requiere del manejo de conceptos abstractos y una base matemática rigurosa, lo que puede ser suficientemente desalentador para alejar aquellos que quieran sumergirse en las profundidades de estos métodos. 

En este sentido, Prophet ofrece una alternativa para todos aquellos aficionados que quieran iniciarse en el apasionante mundo del Pronóstico, logrando que sus predicciones se asemejen a las de un profesional, sin necesidad de tener un conocimiento denso del tema.

Sin embargo, Prophet no puede considerarse el mejor de los modelos en la mayoría de los casos. Su máximo rendimiento se consigue en series con estacionalidad, tendencia y deriva. Por ejemplo, en series temporales de ventas comerciales en volumen, donde existe un comportamiento relacionado con épocas del año, días festivos o fines de semana. 

1. Descripción: 

Se aplicará el paquete Prophet utilizando la plataforma de Rstudio para realizar el análisis de tendencia, ciclos y estacionalidad finalizando con pronósticos a las dos criptomonedas de mayor capitalización: el Bitcoin (BTC) y Ether (ETH), seleccionando el período 2016-2020, la data es de frecuencia diaria y se tomarán los precios ajustados de cierre directamente del portal investing.com. Los pronósticos se realizarán para un horizonte de 31 días. 

Packpages: 

Prophet (0.6.1)

Implementa un procedimiento para pronosticar datos de series de tiempo basados en un modelo aditivo en el que las tendencias no lineales se ajustan a las anuales, semanales y estacionalidad diaria, más efectos de vacaciones. Funciona mejor con series de tiempo que tienen fuertes efectos estacionales y varias temporadas de datos históricos. Prophet es robusto ante los datos faltantes y los cambios en la tendencia, y generalmente maneja los valores atípicos bien.

Tidyverse

El ‘tidyverse’ es un conjunto de paquetes que funcionan en armonía porque comparten representaciones de datos comunes y ‘API’ diseño. Este paquete está diseñado para facilitar la instalación y carga múltiples paquetes ‘tidyverse’ en un solo paso.

2. Data

Se utilizará una muestra de la principales criptomonedas a la fecha, el Bitcoin y Ether, desde el 2016 (año de inicio de la cripto Ether), hasta el 24 de julio del 2020. Y a partir de esa fecha un pronóstico de 31 días. 

Bitcoin: El Bitcoin es una criptomoneda (moneda que usa criptografía fuerte) originada tras el colapso inmobiliario del año 2009, según su White Paper (documento de importancia capital que describe en detalle el proyecto de cada cripto) fue creada bajo el seudónimo de Satoshi Nakamoto, a la fecha se desconoce quién o quiénes fueron sus creadores. 

Al ser operado por una entidad descentralizada se desliga del dinero tradicional emitido por gobiernos o Banca Central. Este hecho a desatado una revolución en la economía digital global que pone en duda el futuro del sistema monetario y financiero mundial que actualmente conocemos. Colocando a las criptomonedas como una alternativa que rompe los esquemas tradicionales y cada vez son más los que se interesan por ellas y se alejan del dinero fiat. 

El Bitcoin es considerada la reina de las criptomonedas por ser la de mayor capitalización. Está respaldada por una tecnología denominada Blockchain que ha demostrado su enorme potencial en diversas áreas desde simples transacciones, hasta en sistemas complejos de distribución logística.

Ether: Según el portal especializado Investopedia.com, Ether es el elemento integral de la red Ethereum blockchain que actúa como combustible de la red, manteniéndola ágil y funcional. Si bien muchos creen que el Ether es la moneda digital nativa de Ethereum (red), actúa como un medio de incentivo o forma de pago para que los participantes de la red ejecuten sus operaciones solicitadas en la red.

La red Ethereum admite la creación y ejecución de aplicaciones digitales descentralizadas ( dApps ) para uso comercial y personal. Un desarrollador que construye aplicaciones Ethereum puede necesitar pagar cargos para alojar y ejecutar las aplicaciones en la red Ethereum, y un usuario que usa dichas aplicaciones puede tener que pagar por usar la aplicación. Ether actúa como un medio para permitir tales pagos. Un desarrollador que crea una aplicación que utiliza recursos mínimos de red pagará menos Ether en comparación con el que crea aplicaciones de alto recurso.

3. Carga de paquetes

Las primeras líneas de código son para cargar en el entorno de Rstudio las funciones de los dos paquetes que se utilizarán. En caso de que los paquetes no se hayan instalado previamente se deberá aplicar el comando install.packpages(“nombre del paquete”). Y luego se hace el llamado con el comando library(nombre del paquete).

4. Carga de datos

Para estructurar la data se necesita seguir la siguiente secuencia. La primera columna (de las fechas) se identifica con la las letras “ds” y el orden será “yyyy-mm-dd” es decir año-mes-día. La siguiente columna (datos) se identifica con la letra “y”. Aquí puedes ver como estructuré los datos para el Bitcoin. Para descargarlos una vez que esté en el raw de github, clic derecho en la página guardar como texto. 
library(prophet)
library(tidyverse)

Comandos Head y Tail

El comando “head” nos muestras los datos del pricipio y “tail” los del final, esto permite saber si Rstudio leyó la base de datos completos para realizar las prácticas. El comando “summary” nos arroja un resumen de estadísticos y la distribución de los datos de la muestra.
btc_model <- read.csv("C:/Users/Personal/Desktop/Escritorio/prophet/BTC2.txt", sep=";")
head(btc_model)
##           ds     y
## 1 2016-01-01 434.0
## 2 2016-01-02 432.7
## 3 2016-01-03 428.7
## 4 2016-01-04 432.9
## 5 2016-01-05 431.8
## 6 2016-01-06 428.0
tail(btc_model)
##              ds      y
## 1648 2020-07-19 9231.2
## 1649 2020-07-20 9179.2
## 1650 2020-07-21 9402.0
## 1651 2020-07-22 9557.7
## 1652 2020-07-23 9615.0
## 1653 2020-07-24 9559.4
summary(btc_model)
##           ds             y          
##  2016-01-01:   1   Min.   :  358.9  
##  2016-01-02:   1   1st Qu.: 1068.4  
##  2016-01-03:   1   Median : 5850.0  
##  2016-01-04:   1   Mean   : 5366.5  
##  2016-01-05:   1   3rd Qu.: 8412.4  
##  2016-01-06:   1   Max.   :19187.0  
##  (Other)   :1647

5. Primeras predicciones

Su aplicación se asemeja a la utilización del Machine Learning, el packpage “prophet” se ajusta a un modelo en el marco de datos y luego desplegará el modelo usando el comando de predicción “make_future_dataframe” para recibir predicciones en el horizonte de pronóstico o los 31 días requeridos, en el comando “periods”.
modelo1 <- prophet(btc_model)
horizonte1 <- make_future_dataframe(modelo1, periods = 31)

Pronósticos

Se conocerán los valores del pronóstico utilizando el comando “predict” y crearemos un objeto denominado “forecast1” para almacenarlos y hacer el llamado. El comando “tail” enumerará las últimas observaciones pronosticadas (mes de agosto 2020) que contienen los detalles sobre la fecha (ds), el valor pronosticado (yhat) y el intervalo de confianza de la estimación: valores mínimo-máximo.
forecast1 <- predict(modelo1, horizonte1)
tail(forecast1[c('ds','yhat','yhat_lower','yhat_upper')])
##              ds     yhat yhat_lower yhat_upper
## 1679 2020-08-19 9225.263   7806.991   10662.14
## 1680 2020-08-20 9198.846   7792.746   10566.28
## 1681 2020-08-21 9204.981   7768.802   10635.46
## 1682 2020-08-22 9206.090   7743.432   10650.20
## 1683 2020-08-23 9179.436   7728.758   10609.53
## 1684 2020-08-24 9192.757   7787.754   10576.68

6. Gráfica interactiva

Con el comando “dyplot.prophet” se representa gráficamente el pronóstico que nos da información de las cifras de los datos. Se puede ajustar en detalle el alcance utilizando el control deslizante en la parte inferior del área de trazado.
dyplot.prophet(modelo1, forecast1)

Observaciones

Parece haber una probabilidad de que el precio se mantenga en el soporte de los 9000 USD$, con un mínimo promedio de 7500 USD$ y un máximo de 10500USD$ hasta la fecha del prónóstico en agosto 2020 para el  Bitcoin. Se pueden ver los valores específicos desplazándose por el área del gráfico o imprimiendo los valores en Rstudio. También podemos ver ciertos efectos de estacionalidad o día de la semana usando el comando “prophet_plot_components” .
prophet_plot_components(modelo1, forecast1)

7. Componentes estacionales

En el gráfico “trend” se puede apreciar la crecida en el precio del Bitcoin ocurrida durante el año 2018. Y a partir de finales del 2019 una estabilización de la tendencia, a pesar de los estragos ocurridos durante la pandemia 2020 el precio vuelve a estabilizarse. 

En el gráfico “weekly” días de la semana, parece haber un decrecimiento más acentuado de miércoles a jueves que en el resto de la semana. 

En el gráfico “yearly” se nota un crecimiento del precio en el último trimestre del año calendario hacia el mes de diciembre, y un decrecimiento al final del primer trimestre o finales de marzo a comienzos de abril y una estabilización de mayo a octubre. 

8. Comentarios

Prophet es ideal para realizar informes rápidos y analizar distintos tipos de datos comerciales, tráfico web, ventas y cualquier dato que tenga una frecuencia de medición diaria o sub-diaria, es decir por hora o minutos por ejemplo. Se adapta a las necesidades de analistas que requieran de una herramienta que puedan aprender a manejar rápidamente con unas pocas líneas de código en R o Python, de buen desempeño sin las especificaciones técnicas de los modelos estadísticos más elaborados.

A continuación dejo los datos arrojados para la criptomoneda Ether. Y aquí puedes descargar la data ya transformada para hacer prácticas.  
eth_model <- read.csv("C:/Users/Personal/Desktop/Escritorio/prophet/ETH.txt", sep=";")
head(eth_model)
##           ds     y
## 1 2016-03-10 11.75
## 2 2016-03-11 11.95
## 3 2016-03-12 12.92
## 4 2016-03-13 15.07
## 5 2016-03-14  12.5
## 6 2016-03-15 13.06
tail(eth_model)
##              ds      y
## 1593 2020-07-19 239.58
## 1594 2020-07-20 236.43
## 1595 2020-07-21    246
## 1596 2020-07-22 264.63
## 1597 2020-07-23 275.78
## 1598 2020-07-24 279.85
modelo2 <- prophet(eth_model)
horizonte2 <- make_future_dataframe(modelo2, periods = 31)
forecast2 <- predict(modelo2, horizonte2)
tail(forecast2[c('ds','yhat','yhat_lower','yhat_upper')])
##              ds     yhat yhat_lower yhat_upper
## 1624 2020-08-19 485.8890   45.96075   915.3161
## 1625 2020-08-20 492.4812   62.21360   942.8795
## 1626 2020-08-21 494.9013   67.47222   909.9178
## 1627 2020-08-22 493.1734   83.05533   902.0253
## 1628 2020-08-23 490.7920   66.72871   913.4172
## 1629 2020-08-24 484.2505   86.85866   908.9409
dyplot.prophet(modelo2, forecast2)
prophet_plot_components(modelo2, forecast2)



Puedes compartir este material:


Por:
Jesús Benjamín Zerpa
Economista


Excepto donde se indique lo contrario, el contenido de esta obra está bajo una licencia de Creative Commons Reconocimiento 4.0 Internacional.


Copyright © 2020 Jesús B. Zerpa | Economist & Data Scientist | Site created with RStudio 

| FINANCE | INTELLIGENCE BUSSINES | FORECASTING | TIME SERIES | FINANCIAL DASHBOARD | FINANCIAL BUDGET | SPATIAL ECONOMETRICS |