Skip to content

Konki29/industrial-sensor-anomaly-detection

Repository files navigation

Predictive Bearing Failure Detection

Detección predictiva de fallos en rodamientos industriales mediante procesamiento de señales vibratorias y Machine Learning no supervisado.

Python 3.12+ scikit-learn


El Problema de Negocio

Un rodamiento que falla sin aviso puede detener una línea de producción entera. El coste no es solo la pieza (€50-500), sino las horas de paro no planificado (€10,000+/hora en industria pesada). La pregunta no es si va a fallar — todos los rodamientos fallan — sino cuándo, con tiempo suficiente para programar el mantenimiento.

La Solución

Este proyecto implementa un pipeline completo de Condition Monitoring predictivo que:

  1. Extrae la huella digital de cada segundo de vibración en 4 métricas (dominio tiempo + frecuencia)
  2. Aprende qué es "normal" con un modelo ligero entrenado exclusivamente con datos sanos
  3. Detecta la degradación ~55 horas antes del fallo catastrófico

Aplicado al dataset NASA IMS Bearing (2nd Test), el sistema genera la primera alerta consistente el 16 de febrero a las 22:22, mientras que el fallo catastrófico ocurre el 19 de febrero a las 05:42 — 2.3 días de margen operativo.

Dashboard de detección


Decisiones de Ingeniería

¿Por qué Isolation Forest y no Deep Learning?

Criterio Isolation Forest Red Neuronal (LSTM/Autoencoder)
Datos necesarios Solo datos sanos (~200 muestras) Miles de muestras + datos de fallo
Tiempo de entrenamiento < 1 segundo Minutos/horas + GPU
Interpretabilidad Alta (anomaly score directo) Baja (caja negra)
Despliegue en Edge ~50 KB en memoria ~50-500 MB + runtime
Mantenimiento Re-entrenar con fit() Re-entrenar + validar arquitectura

En un entorno industrial real, el modelo corre en un PLC o gateway IoT junto al sensor de vibración. Un Isolation Forest puede ejecutarse en un microcontrolador con 256 KB de RAM. Una red neuronal profunda necesita un servidor dedicado o conexión cloud — añadiendo latencia y un punto de fallo.

Además, en la realidad industrial casi nunca hay datos de máquinas rotas para entrenar. Las máquinas se reparan antes de que fallen catastróficamente. El aprendizaje no supervisado resuelve este problema: solo necesita saber qué aspecto tiene una máquina sana.

¿Por qué estas 4 features específicas?

Signal (20,480 puntos @ 20 kHz)
├── Dominio del Tiempo
│   ├── RMS ─────────────── Energía total de vibración
│   ├── Kurtosis ────────── Impactos secos (grietas, spalling)
│   └── Crest Factor ────── Ratio pico/RMS (detector temprano)
└── Dominio de Frecuencia
    └── Frecuencia Dominante ── Desplazamiento espectral por defecto
  • RMS sube cuando la vibración general aumenta — pero reacciona tarde, cuando el daño ya es severo.
  • Kurtosis detecta los micro-impactos de una grieta incipiente antes de que el RMS se mueva. Un rodamiento sano tiene kurtosis ~0 (distribución gaussiana). Cuando aparecen impactos, sube a valores >3.
  • Crest Factor captura picos aislados que el RMS promedia y suaviza. Es el primer indicador en moverse.
  • Frecuencia Dominante cambia de ~1009 Hz (resonancia normal del eje) a ~4500 Hz cuando aparecen frecuencias de defecto (BPFO, BPFI). Esta feature integra el análisis espectral FFT en el pipeline ML.

¿Por qué 200 muestras de entrenamiento?

Las primeras 200 muestras cubren los 2 primeros días del experimento (Feb 12-13). Esto captura:

  • Variaciones normales entre ciclos de carga
  • Fluctuaciones térmicas (día/noche)
  • Suficiente diversidad estadística para que el modelo no sobreajuste a un único estado

Usar más muestras (ej. 400) arriesga incluir el inicio de la degradación, contaminando el concepto de "normalidad".


Estructura del Proyecto

nasa_dataset/
├── 01_feature_engineering.py  # Extracción de features: señal → CSV
├── 02_anomaly_detection.py    # Isolation Forest + visualización
├── bearing_analysis_v2.py     # Análisis exploratorio (RMS trend + FFT)
├── requirements.txt           # Dependencias pinneadas
├── data/
│   └── 2nd_test/2nd_test/     # 984 archivos de vibración (NASA IMS)
└── output/
    ├── features_bearing1.csv      # 984 × 5 features extraídas
    ├── predictions_bearing1.csv   # Predicciones del modelo
    ├── anomaly_dashboard.png      # Dashboard 5 paneles
    ├── prediction_timeline.png    # Timeline normal/anomalía
    ├── rms_trend.png              # Tendencia RMS vida completa
    ├── spectral_analysis.png      # FFT sano vs fallo
    └── fft_overlay.png            # FFT superpuesta (escala log)

Quickstart

# 1. Clonar e instalar
git clone <repo-url>
cd nasa_dataset
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

# 2. Descargar dataset NASA IMS (2nd Test)
# https://www.nasa.gov/content/prognostics-center-of-excellence-data-set-repository

# 3. Ejecutar pipeline
python 01_feature_engineering.py   # → output/features_bearing1.csv
python 02_anomaly_detection.py     # → output/anomaly_dashboard.png + predicciones

Resultados

Métrica Valor
Archivos procesados 984
Features extraídas 4 (RMS, Kurtosis, Crest Factor, Freq. Dominante)
Muestras de entrenamiento 200 (solo datos sanos)
Primera alerta consistente Feb 16, 22:22
Fallo catastrófico Feb 19, 05:42
Antelación de la alerta 55.3 horas (~2.3 días)

Evolución espectral

El análisis FFT confirma la degradación a nivel de frecuencia. En estado sano, la señal tiene un único pico a ~1009 Hz (frecuencia de rotación). En el momento del fallo, aparecen múltiples picos armónicos entre 2-5 kHz correspondientes a frecuencias de defecto del rodamiento.

Análisis espectral sano vs fallo


Dataset

NASA IMS Bearing Dataset — Intelligent Maintenance Systems Center, University of Cincinnati.
4 rodamientos Rexnord ZA-2115, carga radial 6000 lbs, velocidad 2000 RPM.
Sensor: acelerómetro PCB 353B33, muestreo a 20 kHz.
Duración: 7 días continuos hasta fallo del Bearing 1 (outer race failure).


Tecnologías

  • NumPy / SciPy: Procesamiento de señal y FFT
  • pandas: Estructuración y exportación de features
  • scikit-learn: Isolation Forest + StandardScaler
  • matplotlib: Visualización de series temporales y dashboards

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages