IoT Anomaly Detection Pipeline
Anomaly detection unsupervised on industrial sensors with K-means clustering
Concise pipeline for IoT anomaly detection using unsupervised methods on 230k multisensor observations. K-means with temporal feature engineering, achieving F1 score of 0.34 and ROC-AUC of 0.879 (13x baseline random).
Highlights
- 230.400 observations: 16 sensors x 10 days x 1 minute, 19 derived features
- F1 Score 0.34, ROC AUC 0.88, PR AUC 0.32 - 13x Baseline Random w/ Anomaly Prevalence 2.4%
- No labeled training set required for fully unsupervised approach
- Temporal split 7d/3d that prevents data leakage between training and testing
- Selection of K via silhouette score; comparison of KMeans / MiniBatchKMeans / GMM
- Anomaly Scoring: Distance from centroid + Percentile Threshold on Training
- Inference API detect_anomalies() with latency ~5 ms / 1000 lines
- Serialized pipeline in .joblib for production deployment
What is the project?
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.
Pipeline Architecture
- 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
Test Set Results
| 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.
Inclusive learning materials included
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.
Full technology stack
| Level | Technology | Annotation |
|---|---|---|
| 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 | - |


