Pronosticar tráfico aéreo real
Esto combina la recursión con la pseudoinversa de la sección 07. Ajusta un modelo que predice cada mes a partir de los 12 anteriores y luego aliméntalo con su propia salida:
y = flights['passengers'].to_numpy(float) # 144 meses reales, 1949-1960
p = 12
rows = np.array([y[i:i+p] for i in range(len(y) - p)])
X = np.column_stack([np.ones(len(rows)), rows])
w = np.linalg.pinv(X) @ y[p:] # mínimos cuadrados, igual que en la sección 07
history = list(y[-p:])
for _ in range(12): # recursión: realimentar las predicciones
nxt = w[0] + np.dot(w[1:], history[-p:])
history.append(nxt)
# [465.2 429.1 455.1 491.0 527.8 589.4 679.7 661.3 575.3 509.5 438.6 470.7]
El pronóstico reproduce la forma estacional del tráfico aéreo real: bajo en invierno, con pico en verano. Aprendió esa forma de 132 ventanas de entrenamiento reales.