Development

Predicción del precio del Bitcoin usando LSTM con Keras y Tensorflow Parte 2

Publicado por
Jesus Rangel
Predicción del precio del Bitcoin usando LSTM con Keras y Tensorflow Parte 2
Escrito por
Jesus Rangel
Publicado en
March 26, 2024
Tiempo de lectura
Categoría
Development

Parte 5

¡Bienvenido a la parte 5!

Anteriormente en este tutorial estábamos tratando de predecir el precio del Bitcoin del día siguiente y luego usar esa predicción para tomar decisiones financieras. Existen dos problemas con este método. El primero es que la data es heterogénea, al principio los precios son bajos y la volatilidad es alta; luego los precios son altos y la volatilidad es ligeramente menor. Segundo, nos interesan los retornos; queremos saber si el precio del día siguiente va a ser mayor o menor, no el valor exacto (a menos que estuviéramos comprando/vendiendo opciones). Es por eso que vamos a transformar la data a retornos (cambios de precio).

Tal vez te estés preguntando “¿Por qué no hicimos esto desde el principio?”. Por que el fin de este tutorial no es solo aprender el cómo si no también el por qué de algunas transformaciones o del uso de algunos parámetros. Si no entendemos el por qué, no podremos obtener mejores resultados a la hora de usar éstas herramientas en otros casos.

En esta parte y la próxima sólo voy a explicar las secciones de código que sean significativamente diferentes a las de las partes anteriores. Recuerda que todo el código utilizado está en mi repositorio de github.

Para hacer las transformaciones voy a utilizar unas nuevas líneas de código al principio, justo después de eliminar las primeras 800 filas, ese valor ahora va a ser 100.

El otro cambio que haré es cambiar la cantidad de observaciones que serán utilizadas para hacer las predicciones de 20 a 12.


Obs = 12


Al principio utilizamos el error medio porcentual como parámetro a minimizar ya que antes nos interesaba la menor diferencia porcentual posible entre el precio y las predicciones. Ahora que la data está transformada, no necesitamos minimizar el error medio porcentual si no el error cuadrático medio.

En la parte 3 dije que que explicaría como elegir un optimizador en la parte 5 así que ahí vamos. Este tema puede ser muy técnico así que puedes saltarlo si quieres no confundirte o si prefieres entenderlo luego por tu cuenta, pero es muy importante a la hora de querer implementarlo en un proyecto real.

La optimización de una función de minimización se hace utilizando el descenso de gradiente estocástico (Stochastic Gradient Descent en inglés), el modelo se moverá por pasos en ciertas direcciones tratando de conseguir los valores que van a minimizar la función. En el próximo gráfico imagina que las zonas rojas son los peores valores (malas predicciones utilizando esos valores) y las zonas azules son las que tienen los mejores valores predictivos. El optimizador es una serie de reglas (en qué dirección y que tanto moverse) para que el modelo pueda conseguir las zonas azules.

Stochastic Gradient Descent

Algunos optimizadores van a conseguir la mejor zona azul (llamada óptimo global) y algunos conseguirán alguna zona azul pero no la mejor (llamada óptimo local, por ejemplo el camino que lleva al lado derecho del gráfico). Algunos optimizadores conseguirán una zona azul luego de mucho tiempo (horas) y otros lo harán muy rápidamente (minutos). Para aprender más sobre los optimizadores puedes chequear este buen post (en inglés): An overview of gradient descent optimization algorithms.

Ahora que sabemos un poco más sobre optimizadores ¿Cuál deberíamos utilizar para llegar al óptimo global lo más rápido posible?. Esto depende mucho de la data y la función a optimizar, algunos optimizadores funcionan mejor con reconocimiento de imágenes, otros con traducción de texto, etc… Por suerte para ti, probé todos los optimizadores con 1200 epochs, un batch size de 50, output_dim de 20 y el resto de los parámetros en default. Para cada optimizador guardé los erores por epoch para visualizar como avanza la minimización de la función cada vez que analiza la data. Mientras menor sean los errores (loss), mejor.

Descarga nuestro Clever UI KIT 👇

Gracias. Te será enviado un mail confirmando la inscripción
¡Ups! Algo salió mal al enviar el formulario.
Gracias. Por rellenar el formulario
¡Ups! Algo salió mal al enviar el formulario.
Gracias. Te será enviado un mail confirmando la inscripción
¡Ups! Algo salió mal al enviar el formulario.
Gracias. Te será enviado un mail confirmando la inscripción
¡Ups! Algo salió mal al enviar el formulario.
Gracias. Por rellenar el formulario
¡Ups! Algo salió mal al enviar el formulario.
Gracias. Por rellenar el formulario
¡Ups! Algo salió mal al enviar el formulario.

Crea tu propio manual de marca con esta plantilla gratuita.
¡Organiza tus activos de diseño de forma más eficiente!