Si creas un modelo de Machine Learning para predecir el precio de una acción:
¿Cómo puedes evaluar su rendimiento si lo aplicas en tu estrategia de inversión?
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)
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)
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.
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.
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.
Take a step forward and learn to develop algorithms and applications with our digital courses in Udemy.