Salta al contenuto principale
ai Live 2026

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).

ClienteProject Work — DataMasters Machine Learning Engineer
RuoloData scientist (anomaly detection unsupervised + feature engineering temporale)
Anno2026

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

  1. Data ingestion: 16 sensori × 10 giorni × 1 minuto = 230.400 osservazioni
  2. Time-aware split: 7 giorni training, 3 giorni test (zero data leakage)
  3. Data wrangling: gestione missing per asset
  4. Feature engineering temporale: rolling statistics, differenziali, z-score normalization
  5. Clustering unsupervised: KMeans con K selezionato via silhouette score
  6. Anomaly scoring: distanza dal centroide + soglia percentile sul training
  7. API di inferenza: detect_anomalies() con latenza ~5 ms / 1.000 righe

Risultati sul test set

MetricaTest performance
F1-Score0.340
ROC-AUC0.879
PR-AUC0.315
Precision0.436
Recall0.278
Baseline improvement13× 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

LayerTecnologiaNote
LinguaggioPython 3.11–3.13
ML corescikit-learn 1.6+ (KMeans, MiniBatchKMeans, GaussianMixture)
Feature engineeringStatistiche rolling, differenziali, z-score normalization
Split temporale7 giorni training / 3 giorni test (zero data leakage)
Persistencejoblib serialization (~5ms/1k rows inference)
DocumentazioneJekyll + Just-the-Docs (GitHub Pages)
RiproducibilitàRANDOM_STATE=42, versioni librerie pinnate

Tecnologie principali

Python 3.13scikit-learn 1.6+pandas / NumPyJupyterjoblibJekyll Just-the-DocsGitHub Actions

Link al progetto

Altri progetti