IoT Anomaly Detection Pipeline
Anomaly detection unsupervised su sensori industriali con clustering K-means
Pipeline IoT per anomaly detection unsupervised su 230k osservazioni multi-sensore. K-means + feature engineering temporale, F1 0.34 e ROC-AUC 0.879 (13× baseline random).
Highlights
- 230.400 osservazioni: 16 sensori × 10 giorni × 1 minuto, 19 feature derivate
- F1-Score 0.340, ROC-AUC 0.879, PR-AUC 0.315 — 13× baseline random su prevalenza anomalie 2.4%
- Approccio fully unsupervised: nessun training set etichettato richiesto
- Split temporale 7d/3d che impedisce data leakage tra training e test
- Selezione di K via silhouette score; confronto KMeans / MiniBatchKMeans / GMM
- Anomaly scoring: distanza dal centroide + soglia percentile sul training
- Inference API `detect_anomalies()` con latenza ~5 ms / 1.000 righe
- Pipeline serializzata in `.joblib` per deploy production
Cosa è il progetto
Pipeline ML unsupervised per la detection di anomalie operative su reti di sensori industriali (IoT). Allenata su 230.400 osservazioni provenienti da 16 sensori in finestra di 10 giorni con campionamento al minuto, individua pattern anomali senza necessità di etichette di anomalia — soluzione realistica nei contesti industriali dove le anomalie sono rare e poco labellabili. Repo: github.com/fedcal/IoT-Anomaly-Detection-Pipeline-ML-con-Clustering.
Architettura della pipeline
- Data ingestion: 16 sensori × 10 giorni × 1 minuto = 230.400 osservazioni
- Time-aware split: 7 giorni training, 3 giorni test (zero data leakage)
- Data wrangling: gestione missing per asset
- Feature engineering temporale: rolling statistics, differenziali, z-score normalization
- Clustering unsupervised: KMeans con K selezionato via silhouette score
- Anomaly scoring: distanza dal centroide + soglia percentile sul training
- API di inferenza:
detect_anomalies()con latenza ~5 ms / 1.000 righe
Risultati sul test set
| Metrica | Test performance |
|---|---|
| F1-Score | 0.340 |
| ROC-AUC | 0.879 |
| PR-AUC | 0.315 |
| Precision | 0.436 |
| Recall | 0.278 |
| Baseline improvement | 13× random |
Prevalenza di anomalie: 2.4% — un caso realistico di forte sbilanciamento di classe.
Use case business
Soluzione applicabile a predictive maintenance di asset industriali: pumping station, HVAC, distribuzione elettrica, motori industriali. La pipeline è plug-and-play su qualsiasi serie temporale multi-sensore: sostituendo il dataset, le funzioni di feature engineering temporale e di scoring restano valide e producono allerta operative prima del fault.
Materiale didattico incluso
Il repository include 4 notebook sequenziali e 5 documenti teorici che coprono fondamenta del clustering, scelta di K, distanze e metriche per anomaly detection unsupervised, prevenzione del data leakage in serie temporali, e trade-off tra KMeans, MiniBatchKMeans e GMM. Ogni decisione di design è motivata in documentazione.
Stack tecnologico completo
| Layer | Tecnologia | Note |
|---|---|---|
| Linguaggio | Python 3.11–3.13 | — |
| ML core | scikit-learn 1.6+ (KMeans, MiniBatchKMeans, GaussianMixture) | — |
| Feature engineering | Statistiche rolling, differenziali, z-score normalization | — |
| Split temporale | 7 giorni training / 3 giorni test (zero data leakage) | — |
| Persistence | joblib serialization (~5ms/1k rows inference) | — |
| Documentazione | Jekyll + Just-the-Docs (GitHub Pages) | — |
| Riproducibilità | RANDOM_STATE=42, versioni librerie pinnate | — |


