
Regressione come geometria + ottimizzazione intuitiva
La regressione vista come proiezione geometrica e problema di minimizzazione.
Cosa imparerai
- Risolvere le equazioni normali Xᵀ·X·β = Xᵀ·y per stimare i coefficienti OLS
- Leggere R² come quota di varianza spiegata e riconoscere la collinearità
- Applicare la penalità Ridge quando i coefficienti diventano instabili
Regressione come geometria + ottimizzazione intuitiva
Questa lezione viaggia sul binario ml-tabellare, quello in cui i dati stanno in tabelle e le risposte nascono da modelli addestrati su righe e colonne. Hai una nuvola di punti con prezzo, sconto, traffico e conversione, e il management chiede quanto pesa davvero lo sconto. La regressione promette una risposta, ma quella risposta ha senso solo se sai che geometricamente sta cercando una direzione che spiega i dati meglio di altre. Pensare la regressione come geometria ti evita due errori opposti: trattarla come una scatola magica o come una formula da applicare sempre.
Che cosa fa la regressione, senza formule
La regressione proietta il fenomeno su una struttura semplice e misura quanto errore resta fuori dalla proiezione.
La procedura, passo per passo
- Organizza i predittori nella matrice
Xe il target nel vettorey. - Formula il problema come
min ||y − Xβ||², cioè trova il punto dello spazio delle colonne più vicino ay. - Risolvi le equazioni normali
Xᵀ·X·β = Xᵀ·yper ottenere i coefficienti. - Calcola predizioni
ŷ = Xβe residuie = y − ŷ, verificando cheXᵀ·e = 0. - Leggi
R²come quota di varianza spiegata e usa la versione aggiustata se aggiungi predittori. - Se i coefficienti sono instabili per collinearità, aggiungi la penalità Ridge
λ||β||²e confronta.
La regressione come proiezione
Hai un vettore target y di dimensioni n×1 e una matrice di predittori X di dimensioni n×p. Lo spazio delle colonne di X è un sottospazio p-dimensionale di ℝⁿ. La regressione OLS, cioè i minimi quadrati ordinari, trova il punto in questo sottospazio più vicino a y in distanza euclidea.
Geometricamente: ŷ = Xβ = X(X^T·X)⁻¹·X^T·y = Hy, dove H è la matrice di proiezione detta hat.
I residui e = y − ŷ sono ortogonali allo spazio delle colonne di X. Questa ortogonalità definisce la soluzione OLS: X^T·e = 0, quindi X^T·(y − Xβ) = 0 e infine X^T·X·β = X^T·y. Queste sono le equazioni normali.
Cosa ci dice la geometria
R² = cos²(θ), dove θ è l’angolo tra y e ŷ. Più y è vicino allo spazio delle colonne, più R² è alto. Se y è già nello spazio, R² = 1.
Sulla collinearità: se due colonne di X sono quasi parallele, lo spazio delle colonne è quasi degenere. Allora X^T·X è quasi singolare e i coefficienti diventano instabili. La geometria mostra questo caso come un sottospazio schiacciato.
Aggiungere un predittore espande lo spazio delle colonne, quindi la proiezione può solo migliorare o restare uguale. R² non può mai diminuire aggiungendo predittori. Questo è il motivo per cui l’R² aggiustato penalizza il numero di predittori.
OLS come ottimizzazione
OLS risolve min_β ||y − Xβ||².
Azzerando il gradiente: −2X^T·(y − Xβ) = 0, quindi X^T·X·β = X^T·y.
Il gradiente punta nella direzione di massimo aumento dell’errore. Azzerarlo individua il minimo. Se aggiungi regolarizzazione Ridge, il problema diventa min ||y − Xβ||² + λ||β||² e la soluzione geometrica è una proiezione smorzata.
Verdetto: resta su OLS quando le colonne sono stabili e i coefficienti interpretabili, passa a Ridge quando la collinearità li rende instabili, e non confrontare mai i due modelli solo su R².
Riferimenti:
- Hastie, T., Tibshirani, R. & Friedman, J. (2009). The Elements of Statistical Learning, 2nd ed. Springer. Capitolo 3.
- Strang, G. (2019). Linear Algebra and Learning from Data. Wellesley-Cambridge Press.
Esempio SQL: costruire una vista di controllo
La vista seguente crea una base analitica con metrica, segmento e finestra temporale, così puoi confrontare periodi e gruppi senza riscrivere la logica ogni volta.
WITH base_events AS (
SELECT
user_id,
account_id,
event_type,
event_time,
DATE_TRUNC('week', event_time) AS week,
source,
device_type
FROM events
WHERE event_time >= CURRENT_DATE - INTERVAL '180 days'
AND user_id IS NOT NULL
),
weekly_user_metrics AS (
SELECT
week,
user_id,
COALESCE(source, 'unknown') AS source,
COALESCE(device_type, 'unknown') AS device_type,
COUNT(*) AS total_events,
COUNT(DISTINCT DATE(event_time)) AS active_days,
COUNT(DISTINCT event_type) AS event_diversity,
MAX(CASE WHEN event_type IN ('purchase', 'subscribe', 'activation') THEN 1 ELSE 0 END) AS reached_key_outcome
FROM base_events
GROUP BY week, user_id, source, device_type
)
SELECT
week,
source,
device_type,
COUNT(DISTINCT user_id) AS users,
ROUND(AVG(active_days), 2) AS avg_active_days,
ROUND(AVG(event_diversity), 2) AS avg_event_diversity,
ROUND(AVG(reached_key_outcome) * 100, 2) AS key_outcome_rate
FROM weekly_user_metrics
GROUP BY week, source, device_type
ORDER BY week, source, device_type;
Esempio Python: controllare stabilità e anomalie
Il controllo seguente segnala variazioni anomale settimana su settimana senza reagire a ogni oscillazione casuale.
# df contiene: week, segment, users, key_outcome_rate
# key_outcome_rate espresso in percentuale, es. 12.4
df = df.sort_values(['segment', 'week']).copy()
df['previous_rate'] = df.groupby('segment')['key_outcome_rate'].shift(1)
df['wow_change_pp'] = df['key_outcome_rate'] - df['previous_rate']
df['rolling_mean'] = df.groupby('segment')['key_outcome_rate'].transform(
lambda s: s.rolling(4, min_periods=2).mean()
)
df['rolling_std'] = df.groupby('segment')['key_outcome_rate'].transform(
lambda s: s.rolling(4, min_periods=2).std()
)
df['z_score'] = (df['key_outcome_rate'] - df['rolling_mean']) / df['rolling_std']
anomalies = df[df['z_score'].abs() >= 2].sort_values('z_score')
print(anomalies[['week', 'segment', 'key_outcome_rate', 'wow_change_pp', 'z_score']])
Il quartetto di Anscombe: perché il grafico non si salta
Nel 1973 lo statistico Francis Anscombe pubblicò quattro piccoli dataset che condividono stessa media di x (9), stessa media di y (circa 7,5), stessa correlazione (0,816) e stessa retta di regressione. Disegnati su un grafico, i quattro dataset raccontano storie opposte: uno è lineare, uno è curvo, uno è dominato da un singolo outlier e uno da un punto leva verticale. Il quartetto dimostra in modo definitivo che nessuna statistica di regressione basta da sola: senza il grafico, R² e coefficienti possono descrivere quattro realtà diverse con gli stessi numeri.
Domande per chiudere la lezione
- Quando un R² alto nasconde un modello inutile per decidere?
- Cosa segnala la collinearità tra due predittori e come la confermi?
- Perché aggiungere un predittore non fa mai scendere R²?
- Quale controllo fai prima di interpretare un coefficiente come effetto causale?
Bloccato su questo argomento o vuoi applicarlo al tuo caso? Prenota una call di 15 minuti con un analista esperto.
Percorso collegato
Lezioni da leggere insieme
Questi collegamenti portano la lezione dentro il resto del corso: basi da riprendere, passaggi successivi e connessioni tematiche tra moduli.