Conceptes de regressió lineal aplicada a sèries temporals
La regressió lineal ordinària (OLS) és probablement el model estadístic més conegut del món. La seva aplicació a sèries temporals és directa en teoria, però amaga un problema que pot invalidar les teves conclusions si no el detectes. En aquest subcapítol veuràs exactament què fa OLS, per què falla i com saber-ho.
El model: el temps com a predictor
La idea és simple: si la sèrie té tendència lineal, podem modelar-la usant l’índex temporal com a variable predictora.
- és l’intercepte: el valor esperat de la sèrie en .
- és la pendent: quant creix (o decreix) la sèrie per cada període.
- és el residu: el que el model no explica.
En Python, ajustar aquest model és directe:
import numpy as np
import pandas as pd
from statsmodels.regression.linear_model import OLS
import statsmodels.api as sm
# Sèrie d'exemple: 60 mesos de vendes amb tendència
np.random.seed(42)
t = np.arange(60)
vendes = 50 + 0.8 * t + 10 * np.sin(2 * np.pi * t / 12) + np.random.normal(0, 4, 60)
dates = pd.date_range(start='2020-01-01', periods=60, freq='ME')
serie = pd.Series(vendes, index=dates)
# Crear la variable t com a predictor
X = sm.add_constant(t) # Afegeix l'intercepte (columna d'uns)
y = serie.values
# Ajustar OLS
model = OLS(y, X)
resultat = model.fit()
print(resultat.summary())
Experimenta: ajusta la recta a mà
El visualitzador següent mostra els punts de dades amb la recta de regressió. Ajusta la pendent (β₁) i l’intercepte (β₀) amb els sliders i observa com varia la Suma d’Errors al Quadrat (SSE).
OLS minimitza exactament aquesta suma: el punt on el SSE és mínim és on OLS col·loca la recta automàticament. Intenta arribar a l’òptim movent els sliders.
Suma de errores al cuadrado
—
Els supòsits d’OLS
OLS funciona bé quan es compleixen certes condicions. En sèries temporals, la més problemàtica és la tercera:
| Supòsit | Es compleix en sèries temporals? |
|---|---|
| Linealitat: la relació és lineal | De vegades sí, si la tendència és lineal |
| Homoscedasticitat: variància constant d’errors | No sempre: pot haver-hi més volatilitat en certs períodes |
| Independència de residus | Gairebé mai: l’error d’avui depèn del d’ahir |
| Normalitat de residus | Generalment tolerable |
Detectar l’autocorrelació: el test de Durbin-Watson
El test de Durbin-Watson compara cada residu amb l’anterior per detectar autocorrelació de primer ordre. Calcula la relació entre la variació dels residus consecutius i la variació total: quan els residus consecutius s’assemblen molt, el numerador és petit i DW cau per sota de 2.
L’estadístic DW varia entre 0 i 4:
- DW ≈ 2: no hi ha autocorrelació. Bon senyal.
- DW < 1.5: autocorrelació positiva forta. Els residus consecutius s’assemblen massa.
- DW > 2.5: autocorrelació negativa. Els residus alternen de signe.
from statsmodels.stats.stattools import durbin_watson
residus = resultat.resid
dw = durbin_watson(residus)
print(f'Estadístic Durbin-Watson: {dw:.4f}')
if dw < 1.5:
print('Autocorrelació positiva detectada — els residus no són independents')
elif dw > 2.5:
print('Autocorrelació negativa detectada — els residus alternen de signe')
else:
print('Sense evidència forta d\'autocorrelació')
Apliques una regressió lineal simple a una sèrie temporal i el test de Durbin-Watson retorna DW = 0.8. Què indica això?
Resum
La regressió lineal és una eina vàlida per modelar tendències en sèries temporals, però els seus residus gairebé sempre mostren autocorrelació. El test de Durbin-Watson et permet detectar aquest problema ràpidament. La solució no és abandonar la regressió, sinó enriquir-la amb variables que capturin l’estructura temporal que la recta sola no pot. Això és exactament el que veurem al pròxim subcapítol.