Una sigla, due significati, decine di applicazioni
Nel mondo della data science esistono acronimi che cambiano completamente significato a seconda del contesto.
Uno dei casi più interessanti è il termine MAD.
Chi lavora nel forecasting, nella supply chain o nel machine learning supervisionato tende a interpretarlo come Mean Absolute Deviation, una misura dell’errore medio commesso da un modello predittivo.
Chi invece si occupa di statistica robusta, data cleaning e anomaly detection pensa immediatamente alla Median Absolute Deviation, uno degli strumenti più efficaci per misurare la dispersione dei dati in presenza di outlier.
Le due metriche condividono l’uso delle deviazioni assolute ma rispondono a domande completamente diverse:
- Quanto sbaglia il mio modello?
- Quanto sono dispersi i miei dati?
- Esistono anomalie che meritano attenzione?
Comprendere entrambe le interpretazioni del MAD significa possedere uno strumento fondamentale per l’analisi dei dati moderna.
1. Mean Absolute Deviation: misurare l’errore di previsione
Nel contesto del forecasting il MAD rappresenta la distanza media tra i valori osservati e quelli previsti.
La formula è:
[math]MAD=\frac{1}{n}\sum_{i=1}^{n}|x_i-\hat{x}_i|[/math]
dove:
[math]x_i[/math] è il valore reale;
[math]\hat{x}_i[/math] è il valore previsto;
[math]n[/math] è il numero di osservazioni.
Il valore assoluto elimina il segno dell’errore.
Una previsione troppo alta e una troppo bassa vengono considerate allo stesso modo.
💡 Nota terminologica: MAD o MAE?
Se lavori nel Machine Learning moderno (ad esempio utilizzando framework come Scikit-Learn o TensorFlow), molto probabilmente conoscerai questa metrica come MAE (Mean Absolute Error). Nei testi storici di forecasting, operations management e supply chain si incontra invece frequentemente la denominazione MAD (Mean Absolute Deviation). All’atto pratico le due formule coincidono perfettamente: misurano entrambe l’errore medio in valore assoluto. In questo articolo manterremo il termine MAD proprio per esplorare la sua omonimia con la statistica robusta.
Esempio: previsione delle vendite
Immaginiamo che un e-commerce venda cuffie wireless.
| Giorno | Vendite reali | Vendite previste |
|---|---|---|
| Lunedì | 100 | 110 |
| Martedì | 120 | 130 |
| Mercoledì | 90 | 95 |
| Giovedì | 150 | 140 |
| Venerdì | 130 | 120 |
Gli errori assoluti sono:
| Giorno | Errore assoluto |
|---|---|
| Lunedì | 10 |
| Martedì | 10 |
| Mercoledì | 5 |
| Giovedì | 10 |
| Venerdì | 10 |
La somma è:
[math]10+10+5+10+10=45[/math]
Pertanto:
[math]MAD=45/5=9[/math]
In media il modello sbaglia di circa 9 unità al giorno.
Questo rende il risultato estremamente intuitivo da comunicare a manager e stakeholder.
Perché il MAD piace ai manager?
Una delle ragioni principali è la sua interpretabilità.
Dire:
“Il modello ha un MAD pari a 9”
significa semplicemente:
“Le previsioni sbagliano mediamente di 9 unità.”
Non occorrono trasformazioni matematiche aggiuntive.
MAD contro RMSE: perché usare l’uno o l’altro?
Nel machine learning, il confronto più frequente è con la Root Mean Square Error (RMSE):
[math]RMSE=\sqrt{\frac{1}{n}\sum_{i=1}^{n}(x_i-\hat{x}_i)^2}[/math]
Elevando gli errori al quadrato, l’RMSE penalizza in modo severo gli errori più grandi. Se un modello commette piccoli errori costanti ([math]MAD=5[/math]) e un altro è solitamente preciso ma commette un singolo errore disastroso (avendo comunque un [math]MAD=5[/math]), l’RMSE evidenzierà immediatamente la criticità del secondo. In sintesi: il MAD misura l’errore “tipico”, mentre l’RMSE funge da campanello d’allarme per gli errori “catastrofici”.
MAD vs MAPE: assoluto o percentuale?
Se hai esperienza in Google Analytics, demand forecasting o marketing analytics, avrai sicuramente familiarità con un’altra metrica fondamentale: il MAPE (Mean Absolute Percentage Error).
La formula del MAPE rapporta l’errore al valore reale, restituendo un dato percentuale:
[math]\displaystyle \begin{aligned} MAPE=\frac{100}{n}\sum_{i=1}^{n}\left|\frac{x_i-\hat{x}_i}{x_i}\right| \end{aligned}[/math]
Qual è la differenza pratica rispetto al MAD (o MAE)?
Tutto dipende da come devi comunicare il dato e dal contesto aziendale.
Consideriamo una previsione in cui il Valore reale è 100 e l’Errore commesso dal modello è 10:
- MAD = 10: Ti dice di quante unità hai sbagliato. Restituisce un errore espresso nella stessa unità di misura dei dati originali (es. 10 paia di scarpe, 10 barili di petrolio, 10 click).
- MAPE = 10%: Ti dice in proporzione quanto hai sbagliato. Restituisce un errore in percentuale, ignorando l’unità di misura.
Quando usare l’uno o l’altro?
Usa il MAD quando hai bisogno di dimensionare operativamente l’errore. Ad esempio: “Sbagliamo di 10 scatole al giorno, quindi dobbiamo aumentare la scorta di sicurezza di 10 scatole.”
Usa il MAPE quando devi confrontare le prestazioni del modello su serie storiche di grandezze diverse. Dire “Il modello ha un errore del 10%” è immediato e comprensibile anche per chi non conosce i volumi assoluti di vendita.
Tuttavia, il MAPE ha un limite noto: va in crisi (o restituisce infinito) se il valore reale della domanda è pari a zero, situazione in cui il MAD rimane invece solido e calcolabile.
Applicazione nella Supply Chain
Immaginiamo di gestire un magazzino farmaceutico.
Una sottostima della domanda genera:
- stock-out;
- ritardi nelle consegne;
- perdita di clienti.
Una sovrastima produce:
- immobilizzazione del capitale;
- costi di stoccaggio;
- rischio di scadenza dei prodotti.
Il MAD misura quanto il sistema di previsione si allontana mediamente dalla realtà operativa.
Molte aziende utilizzano il MAD come KPI periodico per valutare la qualità dei modelli di demand forecasting.
Applicazione nel Machine Learning
Supponiamo di prevedere:
- prezzi immobiliari;
- consumi energetici;
- tempi di consegna.
Un MAD basso indica che il modello produce errori contenuti e facilmente interpretabili.
Per questo motivo il MAD è spesso preferito quando il risultato deve essere comunicato a utenti non tecnici.
2. Median Absolute Deviation: la statistica robusta
Nel contesto statistico il MAD assume un significato completamente diverso.
Qui non misura errori di previsione.
Misura la dispersione dei dati attorno alla mediana.
La formula è:
[math]MAD=\operatorname{median}(|x_i-\operatorname{median}(X)|)[/math]
Come si calcola
Consideriamo il dataset:
[math]10,11,12,13,14[/math]
La mediana è:
[math]12[/math]
Le deviazioni assolute sono:
[math]2,1,0,1,2[/math]
La mediana di queste deviazioni è:
[math]1[/math]
Pertanto:
[math]MAD=1[/math]
Perché è così importante?
Perché la mediana è molto resistente agli outlier.
Consideriamo ora:
[math]10,11,12,13,1000[/math]
La media viene trascinata verso l’alto.
La deviazione standard esplode.
La mediana resta:
[math]12[/math]
Le deviazioni assolute diventano:
[math]2,1,0,1,988[/math]
La mediana è ancora:
[math]1[/math]
Il MAD rimane praticamente invariato.
Il problema della deviazione standard
La deviazione standard è estremamente sensibile ai valori estremi.
Pensiamo a un sistema bancario.
La maggior parte delle transazioni varia tra:
20 €
100 €
500 €
Poi compare una transazione da:
500.000 €
La deviazione standard aumenta enormemente.
Il rischio è interpretare come “normale” una variabilità che in realtà deriva da un singolo evento straordinario.
Il MAD evita questo problema.
Applicazione: rilevamento delle frodi
Le banche utilizzano sistemi automatici per individuare operazioni sospette.
Supponiamo che un cliente spenda normalmente:
[math]40,55,60,45,50[/math]
Improvvisamente compare una transazione da:
[math]4000[/math]
La mediana rimane vicina ai valori abituali.
Il MAD resta piccolo.
La nuova operazione appare immediatamente come anomala.
Questo principio è alla base di numerosi sistemi di fraud detection.
La connessione con la distribuzione normale
Per dati normalmente distribuiti esiste una relazione importante:
[math]\sigma\approx1.4826\times MAD[/math]
Questa costante consente di utilizzare il MAD come stima robusta della deviazione standard.
È una delle ragioni per cui la metrica è molto diffusa nella statistica moderna.
MAD e Anomaly Detection
Uno degli utilizzi più potenti è il rilevamento automatico degli outlier.
Si costruisce il cosiddetto Modified Z-Score:
[math]M_i=0.6745\frac{x_i-\operatorname{median}(X)}{MAD}[/math]
Regola pratica:
- [math]|M| > 3[/math] → possibile anomalia;
- [math]|M| > 3.5[/math] → outlier molto probabile.
Questo approccio è ampiamente utilizzato in:
- cybersecurity;
- monitoraggio industriale;
- IoT;
- manutenzione predittiva;
- sistemi antifrode.
Caso reale: sensori industriali
Un impianto produttivo registra la temperatura di una macchina.
Valori normali:
[math]79,80,81,80,79,82,81[/math]
Un sensore difettoso produce:
[math]130[/math]
La media aumenta.
La deviazione standard aumenta.
Il MAD rimane stabile e segnala immediatamente l’osservazione anomala.
Per questo motivo molte architetture IoT moderne adottano tecniche robuste basate sulla Median Absolute Deviation.
Data Engineering e Data Cleaning
Prima di addestrare un modello di machine learning è necessario pulire i dati.
La presenza di outlier può:
- alterare le statistiche;
- peggiorare il training;
- generare bias.
Un workflow tipico prevede:
- Calcolo della mediana.
- Calcolo del MAD.
- Individuazione degli outlier.
- Correzione o rimozione dei record anomali.
Questa procedura è più affidabile rispetto all’utilizzo esclusivo della deviazione standard.
Confronto finale
| Aspetto | Mean Absolute Deviation | Median Absolute Deviation |
| Scopo | Misura errore | Misura dispersione |
| Contesto | Forecasting | Statistica robusta |
| Riferimento | Valore previsto | Mediana |
| Sensibilità outlier | Moderata | Molto bassa |
| Uso tipico | KPI di forecasting | Anomaly detection |
| Ambito | Machine Learning, BI, Supply Chain | Data Cleaning, EDA, Fraud Detection |
Conclusioni
Dietro la sigla MAD si nascondono due strumenti estremamente diversi ma ugualmente fondamentali.
Il Mean Absolute Deviation aiuta a capire quanto un modello sbaglia e rappresenta uno dei KPI più intuitivi nel forecasting, nella supply chain e nell’analisi predittiva.
La Median Absolute Deviation è invece una delle misure di dispersione più robuste disponibili e costituisce un pilastro delle moderne tecniche di anomaly detection, data cleaning e fraud analytics.
In un’epoca in cui le decisioni aziendali vengono prese sulla base dei dati, conoscere entrambe le interpretazioni del MAD significa possedere due strumenti complementari: uno per valutare la qualità delle previsioni e uno per comprendere la struttura reale dei dati, anche quando questi sono contaminati da rumore, errori o anomalie.
Quando NON usare il MAD: i limiti nascosti di entrambe le metriche
Un’analisi dati davvero onesta non si limita a elencare i vantaggi di uno strumento, ma ne traccia chiaramente i confini. Sia il Mean che il Median Absolute Deviation hanno dei punti deboli strutturali. Saper riconoscere i contesti in cui queste metriche falliscono è fondamentale per evitare di prendere decisioni strategiche basate su indicatori fuorvianti.
1. Quando evitare il Mean Absolute Deviation (Forecasting)
Il più grande pregio del Mean Absolute Deviation — la sua linearità — diventa il suo peggior difetto quando i grandi errori hanno un costo catastrofico per l’azienda.
Il MAD tratta tutti gli errori allo stesso modo. Per questa metrica, commettere un errore di 10 unità per 10 volte (somma errori = 100) o commettere un singolo errore da 100 unità in mezzo a 9 previsioni perfette (somma errori = 100) produce esattamente lo stesso risultato.
Nella realtà aziendale, però, le cose non stanno così:
- Nella supply chain, mancare una previsione di 100 unità in un colpo solo può significare il blocco totale di una linea di produzione o lo stock-out di un farmaco salvavita. I 10 piccoli errori da 10 unità, invece, vengono facilmente assorbiti dalle scorte di sicurezza ordinaria.
Se l’obiettivo del modello è penalizzare severamente i grandi scivoloni, il MAD ti lascerà scoperto.
La soluzione: In questi scenari è nettamente preferibile usare l’RMSE (Root Mean Square Error). Elevando gli scarti al quadrato, l’RMSE amplifica i grandi errori e costringe il modello a ottimizzare le previsioni per evitare picchi di errore inaccettabili.
2. Quando evitare il Median Absolute Deviation (Statistica Robusta)
Il Median Absolute Deviation è il re indiscusso della protezione dagli outlier, ma non dovresti usarlo ad occhi chiusi se i tuoi dati sono puliti e seguono una distribuzione normale (gaussiana), o se hai bisogno di proprietà algebriche classiche.
I limiti del MAD mediano emergono in tre situazioni specifiche:
- Perdita di efficienza statistica: Se un dataset non contiene outlier ed è distribuito in modo gaussiano, la deviazione standard classica ([math]\sigma[/math]) è matematicamente più efficiente del MAD. Usare il MAD in un contesto perfettamente pulito significa “sprecare” informazioni e ottenere una stima meno precisa della reale variabilità dei dati.
- Rigidità matematica: Dal punto di vista del calcolo puro, la mediana e i valori assoluti sono spigolosi. Non sono facilmente derivabili e non si prestano a manipolazioni algebriche avanzate. Se devi sviluppare modelli matematici complessi o calcolare intervalli di confidenza teorici rigorosi, la media e la deviazione standard offrono proprietà matematiche molto più comode e consolidate.
- Ignoranza intenzionale: A volte gli outlier non sono “rumore da eliminare”, ma segnali vitali. Se stai monitorando i tempi di risposta di un server web, un picco isolato di 5 secondi (outlier) rispetto alla norma di 50 millisecondi è proprio ciò che devi analizzare. Il MAD ignorerebbe quel picco, mentre la deviazione standard salirebbe immediatamente, dandoti l’allarme.
La soluzione: Se il dataset è privo di anomalie evidenti, se la distribuzione è simmetrica o se stai ponendo le basi per un’analisi statistica inferenziale classica, affidati alla cara vecchia Deviazione Standard.
Quale metrica scegliere?
La teoria è fondamentale, ma la pratica richiede scelte rapide. Se ti trovi davanti a un nuovo dataset o devi impostare un KPI per il tuo modello predittivo, usa questo albero decisionale per non sbagliare:
1. Stai valutando l’errore di un modello predittivo?
-
Sì, e voglio un numero facile da spiegare al business: Usa il Mean Absolute Deviation (o MAE). Ti dice di quante unità stai sbagliando mediamente.
-
Sì, e voglio l’errore in percentuale per confrontare prodotti diversi: Usa il MAPE. Ottimo per le dashboard, ma attento ai valori reali pari a zero.
-
Sì, ma commettere un singolo errore enorme mi costa carissimo: Usa l’RMSE. La penalizzazione quadratica terrà il tuo modello lontano dagli scivoloni estremi.
2. Stai pulendo i dati o analizzando la loro dispersione (Data Quality)?
-
Sì, e i miei dati sono sporchi, pieni di rumore o possibili frodi: Usa la Median Absolute Deviation. Isolerà gli outlier senza farsi corrompere.
-
Sì, ma i miei dati sono puliti, verificati e seguono una distribuzione normale (gaussiana): Torna alla Deviazione Standard ($\sigma$). Ti garantirà una solidità e un’efficienza matematica superiori.
Implementazione in Python
Implementiamo sia il Mean Absolute Deviation (MAE/Forecast) che il Median Absolute Deviation (Robust Stats) in Python, utilizzando NumPy e Pandas.
Per rendere l’esercizio concreto, utilizzeremo un dataset simulato che rappresenta le vendite reali di un prodotto aziendale a confronto con le previsioni generate da un modello predittivo, inserendo intenzionalmente un forte outlier (un picco anomalo) per mostrare la differenza di comportamento delle metriche.
1. Setup del Dataset e Ambiente
Iniziamo definendo i dati. Supponiamo di analizzare le vendite di 7 giorni. Il giorno 5 si è verificato un picco anomalo di vendite (outlier a 500 unità) non previsto dal modello.
import numpy as np
import pandas as pd
# Dati reali di vendita (con un forte outlier al giorno 5)
valori_reali = np.array([100, 120, 115, 110, 500, 130, 125])
# Previsioni del modello (il forecast)
previsioni = np.array([105, 115, 118, 112, 120, 125, 122])
# Creazione di un DataFrame Pandas per l'approccio tabellare
df = pd.DataFrame({
'Reale': valori_reali,
'Previsto': previsioni
})
2. Implementazione del Mean Absolute Deviation (Forecasting)
Ricordiamo la formula: [math]\text{MAD} = \frac{1}{n} \sum |x_i – \hat{x}_i|[/math]. Vogliamo calcolare la media degli scostamenti assoluti tra il valore reale e il valore predetto.
Approccio con NumPy
Con NumPy sfruttiamo la vettorizzazione per calcolare l’errore in una sola riga di codice, senza cicli for.
def mean_absolute_deviation_forecast(reale, previsto):
# Calcolo del valore assoluto delle differenze e successiva media
return np.mean(np.abs(reale - previsto))
mad_forecast_np = mean_absolute_deviation_forecast(valori_reali, previsioni)
print(f"Mean Absolute Deviation (NumPy): {mad_forecast_np:.2f}")
Output:
Mean Absolute Deviation (NumPy): 57.57
Approccio con Pandas
In Pandas possiamo calcolare la metrica applicando direttamente le funzioni sulle colonne del DataFrame, sfruttando la naturale vettorizzazione delle operazioni. In alternativa, è possibile integrare nel workflow librerie esterne come scikit‑learn, che mettono a disposizione funzioni dedicate per il calcolo dell’errore e si inseriscono facilmente in pipeline di machine learning più strutturate.
# Metodo matematico diretto su colonne
differenze_assolute = (df['Reale'] - df['Previsto']).abs()
mad_forecast_pd = differenze_assolute.mean()
print(f"Mean Absolute Deviation (Pandas): {mad_forecast_pd:.2f}")
Mean Absolute Deviation (Pandas): 57.57
3. Implementazione del Median Absolute Deviation (Robust Statistics)
Ricordiamo la formula: [math]\text{MAD} = \text{median}(|x_i – \text{median}(X)|)[/math]. In questo caso analizziamo la dispersione intrinseca dei soli valori_reali per capire quanto siano distribuiti attorno alla loro mediana, ignorando l’effetto distorsivo dell’outlier.
Approccio con NumPy
NumPy non ha una funzione nativa chiamata direttamente mad, ma la logica a due step si scrive agilmente:
def median_absolute_deviation_robust(dati):
# 1. Calcolo della mediana dei dati
mediana_dati = np.median(dati)
# 2. Calcolo degli scostamenti assoluti dalla mediana
scostamenti_assoluti = np.abs(dati - mediana_dati)
# 3. Calcolo della mediana degli scostamenti
return np.median(scostamenti_assoluti)
mad_robust_np = median_absolute_deviation_robust(valori_reali)
print(f"Median Absolute Deviation (NumPy): {mad_robust_np:.2f}")
# Output: 10.00
Approccio con Pandas
Nota di attenzione: Nelle versioni storiche di Pandas esisteva il metodo .mad(), che però calcolava lo scostamento medio dalla media ed è stato rimosso per evitare confusioni. Per il Median Absolute Deviation robusto su Pandas si procede così:
# 1. Calcolo la mediana della colonna
mediana_reale = df['Reale'].median()
# 2. Calcolo la mediana degli scostamenti assoluti
mad_robust_pd = (df['Reale'] - mediana_reale).abs().median()
print(f"Median Absolute Deviation (Pandas): {mad_robust_pd:.2f}")
# Output: 10.00
💡 Reality Check: L’effetto dell’Outlier a confronto
Per capire l’impatto matematico e la robustezza delle due metriche sul dataset d’esempio, mettiamo a confronto i risultati ottenuti con le metriche classiche (come la Deviazione Standard):
# Calcolo della Deviazione Standard classica per confronto
deviazione_standard = np.std(valori_reali)
print(f"--- CONFRONTO METRICHE ---")
print(f"Deviazione Standard Classica (σ): {deviazione_standard:.2f}")
print(f"Median Absolute Deviation (Robust): {mad_robust_np:.2f}")
--- CONFRONTO METRICHE ---
Deviazione Standard Classica (σ): 134.45
Median Absolute Deviation (Robust): 10.00
Cosa notiamo dall’Output?
- La Deviazione Standard ([math]\sigma[/math]) schizza a ~134.45. Questo accade perché eleva al quadrato gli scarti; il giorno 5 (vendite a 500 invece di ~120) distorce completamente l’indice di variabilità, facendo sembrare l’intero set di dati estremamente instabile.
- Il Median Absolute Deviation si attesta a 10.00. La mediana dei dati reali è [math]120[/math]. Gli scostamenti assoluti da 120 sono: [20, 0, 5, 10, 380, 10, 5]. Se ordiniamo questi scostamenti ([0, 5, 5, 10, 10, 20, 380]), il valore centrale (la mediana) è esattamente 10. L’outlier catastrofico ([math]380[/math]) è stato isolato e non ha influenzato la misura di dispersione centrale.
Se devi automatizzare un processo di Data Cleaning o di Anomaly Detection su grandi volumi di dati (es. serie storiche o log transazionali), l’implementazione del Median Absolute Deviation combinata con il fattore di consistenza ([math]1.4826 \times \text{MAD}[/math]) ti permetterà di impostare soglie di accettazione matematicamente solide e protette dai falsi positivi.
💡 Perché questo esercizio è così significativo? La doppia faccia dell’Outlier
Il dataset simulato non è casuale: introduce un evento “Cigno Nero” esattamente a metà della settimana lavorativa (vendite reali a 500 unità contro una previsione di 120). Dal punto di vista applicativo, questo scenario è brillante perché evidenzia una tensione tipica in azienda.
Da un lato (Il Business/Forecasting): Vogliamo che il nostro KPI di errore sia severo. Se la logistica si è persa una vendita di 380 unità aggiuntive, è un danno enorme. La Mean Absolute Deviation sale a 57.57, riflettendo correttamente il fatto che il modello “ha bucato” una previsione vitale.
Dall’altro lato (Il Data Quality): Se dobbiamo descrivere il comportamento normale dei nostri clienti, quel picco di 500 è quasi certamente dovuto a una commessa anomala (es. un cliente B2B) o a un errore di registrazione. La variabilità strutturale delle vendite B2C non è cambiata. In questo caso vogliamo che la metrica rimanga fredda e impassibile. La Median Absolute Deviation a 10.00 ci dice esattamente questo: “Non preoccuparti, al netto degli eventi straordinari, la tua oscillazione normale è di appena 10 unità”.
Usare la deviazione standard (che schizza a 134) per pulire i dati ci porterebbe a includere il valore 500 nel range di “normalità futura”, avvelenando i futuri addestramenti del modello. Ecco perché il MAD (mediano) è la rete di salvataggio di ogni buon Data Engineer.
Articoli di approfondimento
👉Outlier: cosa sono, come trovarli e rimuoverli con Pandas (IQR e Z-score)
👉Cosa sono i percentili e i quartili e come si calcolano
👉Deviazione standard: calcolo pratico ed esempi di gestione scorte per aziende
👉Dataset di qualità: dalla raccolta dati alla pulizia per la tua AI
👉Isolation Forest in Python: come rilevare anomalie senza dati di addestramento





