Vai al contenuto principale

Un'introduzione completa al rilevamento delle anomalie

Un tutorial per padroneggiare i fondamenti del rilevamento delle anomalie: concetti, terminologia e codice.
Aggiornato 29 set 2026  · 14 min leggi

Scopri con l'IA

ChatGPTClaudePerplexity

A tutti piace distinguersi, essere diversi. Ma non è questa la qualità che vuoi nei tuoi punti dati quando fai data science. I punti dati divergenti, o anomalie, in un dataset sono uno dei problemi di qualità dei dati più pericolosi che affliggono quasi tutti i progetti.

Questa affermazione potrebbe sorprenderti se hai lavorato solo su dataset open source già ripuliti, che spesso non includono outlier. Tuttavia, i dataset del mondo reale presentano sempre qualche differenza rispetto ai campioni normali. Sta a te rilevarli e gestirli nel modo corretto.

In questo articolo imparerai le idee fondamentali di questo processo, spesso chiamato rilevamento delle anomalie:

  1. L'effetto dannoso che le anomalie hanno sul tuo progetto.
  2. L'importanza di rilevare le anomalie.
  3. Applicazioni reali del rilevamento delle anomalie.
  4. La differenza tra anomalie, outlier e novità.
  5. Tipi di anomalie e metodi di rilevamento.
  6. Come creare algoritmi di rilevamento delle anomalie in Python.
  7. Come affrontare le sfide del rilevamento delle anomalie.

Alla fine, avrai padroneggiato i fondamenti del rilevamento delle anomalie e acquisirai la sicurezza per mitigare l'influenza dirompente degli outlier nei tuoi progetti.

Che cos'è il rilevamento delle anomalie?

Il rilevamento delle anomalie, talvolta chiamato rilevamento degli outlier, è il processo di individuare pattern o istanze in un dataset che deviano in modo significativo dal comportamento atteso o “normale”.

La definizione di dati “normali” e anomali varia sensibilmente a seconda del contesto. Ecco alcuni esempi pratici di rilevamento delle anomalie.

1. Transazioni finanziarie

Normale: Acquisti di routine e spese costanti da parte di un individuo a Londra.

Outlier: Un enorme prelievo effettuato dall'Irlanda dallo stesso conto, che lascia intendere un potenziale frode.

2. Traffico di rete in cybersecurity

Normale: Comunicazioni regolari, trasferimento dati costante e rispetto del protocollo.

Outlier: Aumento improvviso del traffico o uso di protocolli sconosciuti che segnala una potenziale violazione o malware.

3. Monitoraggio dei parametri vitali dei pazienti

Normale: Frequenza cardiaca stabile e pressione sanguigna costante

Outlier: Aumento improvviso della frequenza cardiaca e diminuzione della pressione, che indica una possibile emergenza o un guasto dell'apparecchiatura.

Il rilevamento delle anomalie include molti metodi non supervisionati per identificare campioni divergenti. I professionisti dei dati li scelgono in base al tipo di anomalia, al contesto, alla struttura e alle caratteristiche del dataset in esame. Li vedremo nelle prossime sezioni.

Applicazioni reali del rilevamento delle anomalie

Anche se abbiamo già visto alcuni esempi, vediamo ora una storia reale di come il rilevamento delle anomalie funziona in finanza.

Shaq O'Neal, quattro volte campione NBA, viene scambiato dai Miami Heat ai Phoenix Suns. Quando Shaq arriva nell'appartamento vuoto messo a disposizione dai Phoenix Suns, vuole arredarlo immediatamente nel cuore della notte. Così va al Walmart e tenta l'acquisto più grande nella storia di Walmart per 70.000 dollari. O almeno ci prova; la sua carta viene rifiutata.

Si chiede quale possa essere il problema (di certo non è al verde!). Alle 2 del mattino, la sicurezza di American Express lo chiama e gli dice che la sua carta è stata sospettata come rubata perché qualcuno stava cercando di fare un acquisto da 70.000 dollari al Walmart di Phoenix (guarda l'aneddoto per sentire l'intera storia).

Ci sono tantissime altre applicazioni reali del rilevamento delle anomalie oltre alla finanza e al rilevamento delle frodi:

  • Cybersecurity
  • Sanità
  • Monitoraggio di macchinari industriali
  • Rilevamento delle intrusioni di rete
  • Monitoraggio delle reti energetiche
  • E-commerce e analisi del comportamento degli utenti
  • Controllo qualità nella manifattura

Il rilevamento delle anomalie è intrecciato in profondità con i servizi che usiamo ogni giorno e spesso non ce ne accorgiamo nemmeno.

L'importanza del rilevamento delle anomalie nella data science

I dati sono la risorsa più preziosa nella data science e le anomalie sono le minacce più dirompenti alla loro qualità. Dati di scarsa qualità significano pessimi:

  • Test statistici
  • Dashboard
  • Modelli di machine learning
  • Decisioni

e, in definitiva, fondamenta compromesse per prendere decisioni informate.

Le anomalie distorcono le analisi statistiche introducendo pattern inesistenti, che portano a conclusioni errate e previsioni inaffidabili. Essendo spesso valori estremi in un dataset, le anomalie tendono a alterare le due caratteristiche più importanti delle distribuzioni: media e deviazione standard.

Poiché il funzionamento interno di quasi tutti i modelli di machine learning si basa molto su queste due metriche, un rilevamento tempestivo delle anomalie è cruciale.

Tipi di anomalie

Il rilevamento delle anomalie comprende due grandi pratiche: rilevamento degli outlier e rilevamento delle novità.

Gli outlier sono punti dati anomali o estremi che esistono solo nei dati di addestramento. Al contrario, le novità sono istanze nuove o mai viste prima rispetto ai dati originali (di training).

Per esempio, considera un dataset di temperature giornaliere in una città. La maggior parte dei giorni, le temperature vanno da 20 °C a 30 °C. Tuttavia, un giorno c'è un picco di 40 °C. Questa temperatura estrema è un outlier perché devìa in modo significativo dall'intervallo consueto.

Ora immagina che la città installi una nuova stazione meteo più accurata. Di conseguenza, il dataset inizia a registrare costantemente temperature leggermente più alte, tra 25 °C e 35 °C. Questo aumento prolungato è una novità, che rappresenta un nuovo pattern introdotto dal sistema di monitoraggio migliorato.

Anomalie, invece, è un termine ampio che include sia outlier sia novità. Può essere usato per definire qualsiasi istanza anomala in qualsiasi contesto.

Identificare il tipo di anomalie è fondamentale, perché ti permette di scegliere l'algoritmo giusto per rilevarle.

Tipi di outlier

Così come esistono due tipi di anomalie, ci sono anche due tipi di outlier: univariati e multivariati. In base al tipo, useremo diversi algoritmi di rilevamento.

  1. Outlier univariati esistono in una singola variabile o caratteristica, considerata isolatamente. Sono valori estremi o anomali che deviano dall'intervallo tipico per quella specifica caratteristica.
  2. Outlier multivariati si trovano combinando i valori di più variabili contemporaneamente.

Per esempio, considera un dataset di prezzi delle case in un quartiere. La maggior parte delle case costa tra 200.000 e 400.000 dollari, ma c'è la Casa A con un prezzo eccezionalmente alto di 1.000.000 di dollari. Analizzando solo il prezzo, la Casa A è chiaramente un outlier.

Ora aggiungiamo due variabili al dataset: metratura e numero di camere da letto. Considerando metratura, camere da letto e prezzo, è la Casa B a sembrare strana:

  • Ha metà della metratura della casa media.
  • Ha una sola camera da letto.
  • Costa in cima alla fascia, 380.000 dollari.

Se guardiamo queste variabili singolarmente, sembrano ordinarie. Solo mettendole insieme scopriamo che la Casa B è chiaramente un outlier multivariato.

Metodi di rilevamento delle anomalie e quando usare ciascuno

Gli algoritmi di rilevamento delle anomalie differiscono in base al tipo di outlier e alla struttura del dataset.

Per il rilevamento di outlier univariati, i metodi più diffusi sono:

  1. Z-score (punteggio standard): lo z-score misura di quante deviazioni standard un punto dati si discosta dalla media. In genere, le istanze con z-score superiore a 3 vengono considerate outlier.
  2. Intervallo interquartile (IQR): l'IQR è l'intervallo tra il primo quartile (Q1) e il terzo quartile (Q3) di una distribuzione. Quando un'istanza si trova oltre Q1 o Q3 per un certo multiplo dell'IQR, viene considerata outlier. Il multiplo più comune è 1,5, che definisce l'intervallo degli outlier come [Q1–1,5 * IQR, Q3 + 1,5 * IQR].
  3. Z-score modificati: simili agli z-score, ma usano la mediana e una misura chiamata Median Absolute Deviation (MAD) per trovare gli outlier. Poiché media e deviazione standard sono facilmente influenzate dagli outlier, gli z-score modificati sono generalmente più robusti.

Per gli outlier multivariati, in genere usiamo algoritmi di machine learning. Grazie alla loro profondità e potenza, riescono a trovare pattern intricati in dataset complessi:

  1. Isolation Forest: usa una collezione di alberi di isolamento (simili ai decision tree) che dividono ricorsivamente i dataset complessi finché ogni istanza non è isolata. Le istanze che vengono isolate più velocemente sono considerate outlier.
  2. Local Outlier Factor (LOF): il LOF misura la deviazione di densità locale di un campione rispetto ai suoi vicini. I punti con densità significativamente più bassa vengono scelti come outlier.
  3. Tecniche di clustering: tecniche come k-means o il clustering gerarchico dividono il dataset in gruppi. I punti che non appartengono a nessun gruppo o che formano piccoli cluster a sé stanti sono considerati outlier.
  4. Angle-based Outlier Detection (ABOD): ABOD misura gli angoli tra punti individuali. Istanze con angoli anomali possono essere considerate outlier.

Oltre al tipo di anomalie, dovresti considerare le caratteristiche del dataset e i vincoli di progetto. Per esempio, Isolation Forest funziona bene su quasi ogni dataset ma è più lento e richiede più calcolo, in quanto metodo a insieme. Al confronto, LOF è molto veloce in addestramento ma potrebbe non performare bene quanto Isolation Forest.

Puoi vedere un confronto dei più comuni algoritmi di rilevamento delle anomalie su 55 dataset dal pacchetto Python Outlier Detection (PyOD).

Costruire un modello di rilevamento delle anomalie in Python

Come per praticamente qualsiasi compito, esistono molte librerie in Python per eseguire il rilevamento delle anomalie. Le migliori candidate sono:

  • Python Outlier Detection (PyOD)
  • Scikit-learn

Mentre scikit-learn offre cinque classici algoritmi di machine learning (che puoi usare sia per outlier univariati che multivariati), PyOD include oltre 30 algoritmi, da metodi semplici come MAD a modelli complessi di deep learning. Puoi anche usare TensorFlow o PyTorch per modelli personalizzati, ma vanno oltre lo scopo di questo articolo.

Rilevamento di anomalie univariate

Preferisco pyod per la sua ricca libreria di algoritmi e un'API coerente con sklearn. Bastano poche righe di codice per trovare ed estrarre outlier da un dataset con PyOD. Ecco un esempio di utilizzo di MAD su un dataset univariato:

import pandas as pd
import seaborn as sns
from pyod.models.mad import MAD

# Load a sample dataset
diamonds = sns.load_dataset("diamonds")
# Extract the feature we want
X = diamonds[["price"]]

# Initialize and fit a model
mad = MAD().fit(X)

# Extract the outlier labels
labels = mad.labels_

>>> pd.Series(labels).value_counts()
0    49708
1     4232
Name: count, dtype: int64

Passiamo il codice riga per riga. Per prima cosa carichiamo le librerie necessarie per la manipolazione dei dati, il caricamento del dataset e pyod per il modello di rilevamento degli outlier. Poi, dopo aver caricato il dataset Diamonds integrato in Seaborn, estraiamo i prezzi dei diamanti.

Quindi inizializziamo e addestriamo in una sola riga un modello MAD (Median Absolute Deviation) su X. Successivamente estraiamo le etichette di inlier e outlier usando l'attributo labels_ di mad in labels.

Quando stampiamo il conteggio dei valori di labels alla fine, vediamo che 49708 appartengono alla categoria 0 (inlier), mentre 4232 alla 1 (outlier). Se vogliamo rimuovere gli outlier dal dataset originale, possiamo usare il subset di pandas su diamonds:

outlier_free = diamonds[labels == 0]

>>> len(outlier_free)
49708

labels == 0 crea un array di valori True/False (array booleano) in cui True indica un inlier.

Rilevamento di anomalie multivariate

Il processo per creare un modello multivariato di rilevamento delle anomalie è analogo. Ma il rilevamento di outlier multivariati richiede passaggi aggiuntivi se sono presenti variabili categoriali:

>>> diamonds.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 53940 entries, 0 to 53939
Data columns (total 10 columns):
#   Column   Non-Null Count  Dtype  
---  ------   --------------  -----  
0   carat    53940 non-null  float64
1   cut      53940 non-null  category
2   color    53940 non-null  category
3   clarity  53940 non-null  category
4   depth    53940 non-null  float64
5   table    53940 non-null  float64
6   price    53940 non-null  int64  
7   x        53940 non-null  float64
8   y        53940 non-null  float64
9   z        53940 non-null  float64
dtypes: category(3), float64(6), int64(1)
memory usage: 3.0 MB

Dato che pyod si aspetta tutte le feature numeriche, dobbiamo codificare le variabili categoriali. Useremo Sklearn per farlo:

from sklearn.preprocessing import OrdinalEncoder

# Initialize the encoder
oe = OrdinalEncoder()

# Extract the categorical feature names
cats = diamonds.select_dtypes(include="category").columns.tolist()

# Encode the categorical features
cats_encoded = oe.fit_transform(diamonds[cats])

# Replace the old values with encoded values
diamonds.loc[:, cats] = cats_encoded

>>> diamonds.head()

Dataset dei diamanti

Rivediamo il codice riga per riga. Innanzitutto importiamo la classe OrdinalEncoder, che codifica le feature categoriali ordinali, e la inizializziamo. Le feature ordinali sono variabili con categorie naturali e ordinate, come nel caso delle misure di qualità dei diamanti. Il taglio (cut) e la purezza (clarity) sono ordinali, mentre il colore no. Ma per non complicare, lo considereremo ordinale per ora.

Quindi estraiamo i nomi delle feature categoriali usando il metodo select_dtypes dei DataFrame Pandas. Incateniamo gli attributi .columns e .tolist() per ottenere i nomi delle colonne in una lista chiamata cats.

Poi usiamo la lista per trasformare le feature desiderate con oe. Infine, con un comodo trucco di Pandas usando .loc, sostituiamo i vecchi valori testuali con quelli numerici.

Prima di addestrare un modello multivariato, estrarremo l'array di feature X. Lo scopo del dataset diamonds è prevedere il prezzo dei diamanti date le loro caratteristiche. Quindi, X conterrà tutte le colonne tranne price:

X = diamonds.drop("price", axis=1)
y = diamonds[["price"]]
Now, let’s build and fit the model:
from pyod.models.iforest import IForest

# Create a model with 10000 trees
iforest = IForest(n_estimators=10000)
iforest.fit(X)  # This will take a minute

# Extract the labels
labels = iforest.labels_

Più alberi ha lo stimatore IForest, più tempo richiede per adattarsi al dataset.

Dopo aver ottenuto le etichette, possiamo rimuovere gli outlier dai dati originali:

X_outlier_free = X[labels == 0]
y_outlier_free = X[labels == 0]

>>> len(X_outlier_free)
48546

>>> # The length of the original dataset
>>> len(diamonds)
53940

Il modello ha trovato oltre 5000 outlier!

Sfide nel rilevamento delle anomalie

Il rilevamento delle anomalie può presentare sfide maggiori rispetto ad altri compiti di machine learning a causa della sua natura non supervisionata. Tuttavia, la maggior parte di queste sfide può essere mitigata con vari metodi (vedi la prossima sezione per le risorse).

Nel rilevamento degli outlier, dobbiamo porci due domande:

  • Gli outlier trovati sono davvero outlier?
  • Il modello ha trovato tutti gli outlier nei dati?

Nel learning supervisionato, possiamo verificare facilmente se il modello funziona bene confrontando le sue previsioni sui dati di test con le etichette reali. Ma non possiamo fare lo stesso nel rilevamento degli outlier, perché non ci sono etichette pronte all'uso che ci dicano quali campioni sono inlier e quali outlier.

Quindi, alcuni o molti dei +5000 outlier trovati nel dataset dei diamanti potrebbero non essere realmente outlier! Non c'è modo di saperlo con certezza. Potrebbe aver etichettato alcuni inlier come outlier e allo stesso tempo aver perso alcuni outlier reali.

Questo problema di non conoscere il livello di contaminazione (la percentuale di outlier in un dataset) è il più grande nel rilevamento delle anomalie. Per questo non possiamo misurare affidabilmente le prestazioni dei classificatori di outlier, né verificare i loro risultati.

Per questo motivo, tutti gli stimatori in pyod hanno un parametro chiamato contamination, impostato di default a 0,1. Come machine learning engineer, devi regolare tu stesso questo parametro.

Certo, a volte ci sono alternative. Per esempio, il modello IsolationForest offerto da Sklearn ha un algoritmo interno per trovare automaticamente il livello di contaminazione. Ma IsolationForest non è una bacchetta magica per tutti i problemi di rilevamento degli outlier.

Un'altra criticità nel rilevamento delle anomalie è lo sbilanciamento dei dati. Le anomalie sono spesso rare rispetto alle istanze normali, causando dataset sbilanciati. Questo squilibrio può rendere difficile distinguere tra vere anomalie e irregolarità all'interno della classe maggioritaria.

Affrontare questi problemi (e molti altri che non abbiamo trattato) richiede la scelta di algoritmi adatti, il tuning degli iperparametri, la selezione delle feature, la gestione dello sbilanciamento delle classi e così via.

Riepilogo e prossimi passi

Abbiamo concluso la tua (probabile) prima introduzione al mondo affascinante del rilevamento delle anomalie. I concetti e le competenze fondamentali di questo tutorial possono portarti lontano nell'esplorazione dell'argomento.

Per approfondire, ecco alcune risorse da consultare:


Bexruz (Bex) Tuychiev's photo
Author
Bexruz (Bex) Tuychiev
LinkedIn

Sono un creator di contenuti sulla data science con oltre 2 anni di esperienza e uno dei più seguiti su Medium. Mi piace scrivere articoli dettagliati su AI e ML con un pizzico di sarcasmo, perché bisogna pur fare qualcosa per renderli un po’ meno noiosi. Ho pubblicato oltre 130 articoli e un corso su DataCamp, con un altro in arrivo. I miei contenuti sono stati visti da oltre 5 milioni di persone, 20.000 delle quali sono diventate follower sia su Medium che su LinkedIn. 

Argomenti
Data Science

Approfondisci oggi la tua comprensione del rilevamento delle anomalie!

Corso

Rilevamento delle anomalie in Python

4 ore
7.5K
Scopri le anomalie nell'analisi dei tuoi dati e dai una spinta al tuo kit di strumenti statistici Python in questo corso di quattro ore.
Vedi i dettagliRight Arrow
Inizia Il Corso
Mostra altroRight Arrow
Correlato

blog

Che cos'è Snowflake? Guida per principianti alla piattaforma dati cloud

Esplora le basi di Snowflake, la piattaforma dati cloud. Scopri la sua architettura, le sue funzionalità e come integrarla nelle tue pipeline di dati.
Tim Lu's photo

Tim Lu

12 min

blog

Tokenizzazione nel NLP: come funziona, sfide e casi d'uso

Guida al preprocessing NLP nel machine learning. Copriamo spaCy, i transformer di Hugging Face e come funziona la tokenizzazione in casi d'uso reali.
Abid Ali Awan's photo

Abid Ali Awan

10 min

blog

I 15 migliori server MCP remoti che ogni AI builder dovrebbe conoscere nel 2026

Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Abid Ali Awan's photo

Abid Ali Awan

15 min

Mostra AltroMostra Altro