Si creas un modelo de Machine Learning para predecir el precio de una acción:
![Representación gráfica de un modelo de árbol de decisión utilizado para predecir el precio de acciones, ilustrando cómo se divide el espacio de características para llegar a predicciones más precisas.](https://images.datons.ai/STOCK-ANALYSIS-2/P_tree.png)
¿Cómo puedes evaluar su rendimiento si lo aplicas en tu estrategia de inversión?
![Esquema ilustrativo de la aplicación de un modelo de Machine Learning en una estrategia de inversión, mostrando el proceso de toma de decisiones basado en predicciones de precios.](https://images.datons.ai/STOCK-ANALYSIS-2/P_ML_Strategy.png)
Data
Partimos de los datos bursátiles de NVIDIA
con su ticker NVDA
.
Revisa este tutorial para saber cómo preprocesar el retorno diario de una acción.
import pandas as pd
df = pd.read_csv('data.csv', index_col='Date', parse_dates=True)
![Captura de los datos bursátiles de NVIDIA, mostrando un dataset listo para el análisis y la aplicación de modelos de Machine Learning, con enfoque en la preparación y limpieza de los datos.](https://images.datons.ai/STOCK-ANALYSIS-2/D_raw.png)
Preguntas
- ¿Cómo se implementa un modelo de Machine Learning para predecir el cambio en el precio de cierre?
- ¿Cuál es el papel del parámetro
min_samples_leaf
en el algoritmoDecisionTreeRegressor
? - ¿Cómo medimos el error del modelo y qué nos dice sobre su rendimiento?
- ¿Cómo introducimos un modelo de Machine Learning en una estrategia de inversión?
- ¿Cómo evaluamos el rendimiento de la estrategia de inversión con Machine Learning?
Metodología
Selección de variables
Queremos predecir el porcentaje de cambio en el precio de cierre para mañana. Esta será la variable objetivo, y el resto serán las explicativas.
target = 'Change Tomorrow'
y = df[target]
X = df.drop(columns=target)
Modelo de Machine Learning
Usaremos el algoritmo DecisionTreeRegressor
para
predecir el cambio en el precio de cierre.
Como mínimo, queremos que haya 10 muestras al final de cada rama del
árbol, min_samples_leaf=10
.
from sklearn.tree import DecisionTreeRegressor
model = DecisionTreeRegressor(min_samples_leaf=10)
model.fit(X, y)
![Representación gráfica de un modelo de árbol de decisión utilizado para predecir el precio de acciones, ilustrando cómo se divide el espacio de características para llegar a predicciones más precisas.](https://images.datons.ai/STOCK-ANALYSIS-2/P_tree.png)
Evaluación del modelo
Con las condiciones matemáticas del modelo, calculamos las predicciones del modelo:
y_pred = model.predict(X)
Y las comparamos con los valores reales, obteniendo así el error.
error = y - y_pred
Para tener una mejor métrica de evaluación del modelo, calculamos la raíz del error cuadrático medio (RMSE); suele decirnos cuánto se desvía las predicciones del valor real en un 68% de las veces.
error2 = error ** 2
MSE = error2.mean()
RMSE = MSE ** 0.5
En nuestro caso, la predicción del porcentaje de cambio para mañana que haga el modelo, se desviará en promedio un 2.99% del valor real.
¿Supone un valor aceptable para nuestra estrategia de inversión? ¿Cómo podríamos mejorarlo?
Te leo en comentarios para diseñar el próximo tutorial.
Ahora sigamos con la implementación de la estrategia de inversión
utilizando la librería backtesting.py
.
Crear estrategia de inversión
Para implementar la estrategia de inversión, creamos una clase que
herede de las funcionalidades de backtesting.Strategy
.
Para ello, la clase requiere dos métodos: init
y
next
.
init
: inicializa la estrategia con el modelo calculado anteriormente.next
: calcula la predicción para mañana y decide si comprar, vender o no hacer nada.
from backtesting import Strategy
class MLStrategy(Strategy):
def init(self):
self.model = model
def next(self):
X_today = self.data.df.iloc[[-1]]
y_tomorrow = self.model.predict(X_today)
if y_tomorrow > RMSE:
self.buy()
elif y_tomorrow < -RMSE:
self.sell()
else:
pass
Backtest con condiciones de trading
Finalmente, simulamos la estrategia de inversión (aka backtest) con las siguientes condiciones para evaluar su rendimiento.
¿Conoces a alguien que podría interesarle este artículo? Compártelo con ellos.
from backtesting import Backtest
bt = Backtest(
X, MLStrategy, cash=1_000, commission=.002,
exclusive_orders=True, trade_on_close=True
)
results = bt.run()
En el reporte del backtest, observamos que, tras 1,533 días,
obtenemos un Equity Final
de $11,019.19.
![Resumen de los resultados de un backtest aplicando una estrategia de inversión basada en Machine Learning, destacando el equity final y el retorno total obtenido durante el periodo de prueba.](https://images.datons.ai/STOCK-ANALYSIS-2/D_backtest.png)
Aunque hubiera sido más fácil comprar y mantener la acción sin modelo
de Machine Learning; obteniendo un Return
del 1,372.08%
(vs. 1,001.92%).
¿Cómo podríamos mejorar la estrategia de inversión con Machine Learning? Te leo en comentarios.
Visualizar simulación del backtest
Finalmente, visualizamos la simulación del backtest para entender mejor el rendimiento de la estrategia de inversión.
bt.plot()
Además de las métricas de rendimiento, observamos una que es crucial
para evaluar la estrategia de inversión: el Drawdown
.
Esta métrica nos indica cuánto estaríamos dispuestos a sufrir sin cerrar la posición.
![Gráfico interactivo generado por la librería backtesting.py, ofreciendo una visualización detallada del rendimiento de la estrategia de inversión a lo largo del tiempo, incluyendo métricas clave como el drawdown.](https://images.datons.ai/STOCK-ANALYSIS-2/P_bokeh_plot.png)
En otras palabras, el Drawdown mide el riesgo de la estrategia de inversión.
Si quieres profundizar en la integración de modelos de Machine Learning en estrategias de inversión, te invito a revisar este curso.
Conclusiones
- Modelo de Machine Learning:
DecisionTreeRegressor
es un algoritmo de árboles que selecciona los patrones históricos más significativos para predecir el cambio en los precios. - Parámetro
min_samples_leaf
:min_samples_leaf=10
evita el sobreajuste asegurando una cantidad mínima de muestras en las hojas del árbol, mejorando la generalización del modelo. - Medición del Error:
RMSE
para cuantificar la desviación de las predicciones frente a los valores reales con un 68% de confianza. - Introducción en Estrategia de Inversión:
Strategy
coninit
ynext
integra las predicciones del modelo en las decisiones de trading. - Evaluación de Rendimiento:
Backtest
nos permite simular la estrategia de inversión con condiciones de trading personalizadas.
Si pudieras programar lo que quisieras, ¿qué sería?
Puede que te eche una mano creando tutoriales que te ayuden. Te leo en los comentarios.