Quant500 Academy

7. De la regresión lineal a la polinómica

Nivel 10: Machine Learning Aplicado al Trading

En los problemas de machine learning queremos aprender una función f que predice la salida y a partir de la entrada X. A esa f se le llama función de regresión o de clasificación, y este problema de aprendizaje se conoce en matemáticas como aproximación de funciones.

El problema de regresión es básicamente una buena forma de predecir una salida continua, aunque no pasa nada por usar una y discreta en un problema de regresión. Una y discreta lleva el problema hacia la clasificación; por ejemplo, cuando la pregunta es si y vale 0 o 1.

Calculamos una estimación de f a partir de los datos de entrenamiento, y luego traemos los datos de test y la probamos: ¿cómo de buena es esa f estimada? Como hacer eso sin ninguna pista es extremadamente difícil, simplificamos la situación dotando a f de una propiedad especial. La suposición más descarada posible es que f es lineal: y es igual a una constante más cada variable multiplicada por su coeficiente. Estimar f pasa entonces a ser equivalente a encontrar los coeficientes. Exagerando un poco, la regresión lineal consiste en mirar la nube de puntos y dibujar tu recta.

El ajuste se calcula por mínimos cuadrados, resolviendo las llamadas ecuaciones normales.

import numpy as np
import matplotlib.pyplot as plt

# Serie sintética con forma de ciclo mas deriva: piensa en una curva de
# rentabilidad acumulada que sube a largo plazo pero oscila por el camino
n = 500
x = np.arange(0, 100, 100 / n)
y_verdadero = np.sin(x / 10) / 2 + x * 0.01
y = y_verdadero + np.random.randn(n) / 4

# Matriz de diseno: columna de unos (el intercepto) + la variable
X1 = np.vstack((np.ones(n), x)).T
beta = np.linalg.solve(X1.T @ X1, X1.T @ y)   # ecuaciones normales
y_hat = X1 @ beta

plt.plot(x, y, 'o')
plt.plot(x, y_hat, linewidth=5)
plt.title('Regresión lineal en 1D')
print('Y = {:.5f} + {:.5f} X'.format(*beta))

Mirando el resultado, la recta calculada parece a la vez buena y mala:

1. ¿Explica la recta los datos originales? Mal. Nos equivocamos al elegir el modelo: vimos datos curvados y les ajustamos una recta. Eso es sesgo alto.

2. ¿Predice bien un dato nuevo? Bien. Es varianza baja: la recta apenas cambiaría con otra muestra.

La recta es simple, y lo simple es bueno, porque hace más fácil el cálculo, más fácil la interpretación, y funciona bien cuando hay pocos datos.

Regresión polinómica. Una razón por la que tantos manuales insisten en la regresión lineal es que permite ajustar formas mucho más complejas con exactamente el mismo método. La idea es simple: si queremos una curva cuadrática en lugar de una recta, añadimos el término cuadrático al modelo, y los datos de entrenamiento cambian de la misma manera: donde había una columna de unos y una columna con x, ahora hay una columna de unos, una con x y otra con x al cuadrado. El cálculo final se hace con una regresión lineal corriente, porque el modelo sigue siendo lineal en los parámetros aunque sea curvo en x.

X2 = np.vstack((np.ones(n), x, x ** 2)).T
beta2 = np.linalg.solve(X2.T @ X2, X2.T @ y)

X3 = np.hstack((X2, (x ** 3).reshape(-1, 1)))
beta3 = np.linalg.solve(X3.T @ X3, X3.T @ y)

print('Y = {:.5f} + {:.5f}X + {:.5f}X^2'.format(*beta2))
print('Y = {:.5f} + {:.5f}X + {:.5f}X^2 + {:.5f}X^3'.format(*beta3))

Aquí está la lección profunda del nivel: añadir columnas derivadas de las originales es la forma más barata de captar no linealidad sin abandonar la maquinaria lineal, y es la puerta de entrada a los modelos que extraen esas combinaciones de forma automática.

El resto de Quant500

Lo que estás aprendiendo, aplicado al índice todos los días:

La cartera del modelo, cada semana en tu correo

Cada sábado, su semana en un minuto: cómo fue, lo mejor y lo peor, y qué directivos compraron con su dinero. Y el día que el modelo se rehace, qué entra y qué sale. Es una simulación, no un consejo. Como mucho un correo a la semana, sin publicidad y sin cuenta; te das de baja con un clic. Lo hace una persona: Pol Gracia.

Cartera modelo con resultados simulados, no una recomendación personalizada. Tu correo se usa solo para esto: privacidad.

Detrás de la Academia y del resto de Quant500 hay una sola persona: Pol Gracia Serrahima.