NILM mas allá de la desagregación del consumo eléctrico



En el fondo, tanto las redes eléctricas como el cuerpo humano son sistemas complejos que hablan en señales. Y si sabes escuchar con atención, descubrirás que los algoritmos que separan la lavadora del microondas también pueden ayudarte a descomponer un electrocardiograma.

A continuación exploramos cómo muchas de las herramientas de Non-Intrusive Load Monitoring (NILM) tienen su espejo directo en el mundo de la fisiología y el análisis biomédico de señales.

2024 04 06 18 21 14 Construccion casera de una regleta ahorradora de energia   Buscar con Google y 6

1. Desagregación de señales complejas

En NILM descompones una medida global de potencia para identificar qué aparatos están encendidos.
En fisiología, sucede algo sorprendentemente parecido:

NILMSeñales fisiológicas
Separar lavadora + nevera + microondas de una única señal de potenciaSeparar ondas P, QRS y T en ECG, o componentes alfa/beta en EEG
Identificar transitorios o encendidosDetectar latidos, espigas neuronales, respiración
Modelar firmas de consumoModelar patrones cardíacos, respiratorios o musculares

Transferencia directa: la intuición para detectar patrones ocultos en señales ruidosas es sumamente valiosa en el análisis biomédico.

2. Extracción de características

El feature engineering es el corazón de cualquier análisis de señales.
En NILM se analiza:

  • Transitorios
  • Armónicos
  • Potencia activa/reactiva
  • Firmas temporales

En fisiología, las variables destacan por su nombre pero no por su fondo:

  • Frecuencia cardíaca instantánea
  • Variabilidad de la frecuencia (HRV)
  • Espectros EEG
  • Morfología de ondas

Transferencia: la experiencia con transformadas, ventanas, filtrado y análisis espectral encaja perfectamente.

3. Modelos de clasificación y reconocimiento de patrones

Los modelos que identifican electrodomésticos también clasifican arritmias.
NILM emplea:

  • Random Forest
  • CNN
  • LSTM
  • Autoencoders
  • HMM

Las mismas arquitecturas son comunes en fisiología para:

  • Clasificar arritmias
  • Detectar apnea
  • Identificar patrones neuronales
  • Analizar señales EMG

Transferencia: el dominio de pipelines de machine learning y deep learning es aplicable casi sin cambios.

4. Normalización, sincronización y manejo de datasets

Aquí la ventaja como ingeniero de señales es enorme:

  • Limpieza de señales
  • Alineación temporal
  • Manejo de distintas tasas de muestreo
  • Segmentación en ventanas
  • Etiquetado de eventos

Todas estas tareas son idénticas en las bases de datos de ECG, EEG, EMG o PPG.

5. De la desagregación eléctrica a la separación de fuentes fisiológicas

Técnicas como la Independent Component Analysis (ICA), la NMF o la Blind Source Separation (BSS) recuerdan directamente a la desagregación NILM:

  • ICA permite eliminar artefactos del EEG
  • NMF se usa para separar señales cardíacas
  • En EMG, se descomponen unidades motoras individuales

La familiaridad con la desagregación te da una base conceptual sólida para comprender estos métodos biomédicos.

¿Y qué no se puede transferir? NILM no sirve para diagnóstico clínico. No se puede inferir cáncer, arritmias ni patologías a partir de señales eléctricas domiciliarias. Cualquier aplicación médica requiere validación profesional y ensayos clínicos.

Pero entendiendo el NILM si se puede aportar —y mucho— en el procesamiento, modelado y análisis de señales fisiológicas.

EJEMPLOS

Para aterrizar todo lo anterior amigo lector , te propongo cuatro bloques: mapa NILM↔biomédica, pipeline tipo NILMTK para ECG/EEG y un mini‑ejemplo de “desagregación” fisiológica.

1. Mapa rápido NILM → biomédica

Concepto en NILMEquivalente biomédicoComentario
Desagregación de cargasSeparación de ondas P‑QRS‑T (ECG), ritmos alfa/beta (EEG)Separar fuentes superpuestas en un solo canal. 
Detección de eventos (on/off, transitorios)Detección de latidos, espigas neuronales, respiracionesEventos discretos dentro de una señal continua. 
Extracción de armónicos, THD, firmas espectralesAnálisis espectral ECG/EEG, HRV, bandas de frecuenciaFFT/DFT y tiempo‑frecuencia en ambos dominios. 
Modelos ML (RF, CNN, LSTM, autoencoders, HMM)Clasificación de arritmias, apnea, estados cognitivosMisma familia de modelos, distinto etiquetado. 
Preprocesado: resample, normalizar, limpiar gapsFiltrado, eliminación de artefactos, normalización, segmentaciónPipeline casi idéntico. 
Desagregación basada en eventos/frecuenciaBlind Source Separation (ICA, NMF, BSS)Separar fuentes cardíacas, musculares o cerebrales. 

2. Pipeline ECG/EEG “estilo NILMTK”

Inspirado en un flujo típico con NILMTK (carga dataset → limpieza → features → modelo → métricas), un pipeline mínimo podría ser:

  1. Adquisición y carga
    • ECG: importar registros (por ejemplo PhysioNet) en formato WFDB/CSV.
    • EEG: importar archivos crudos (.bdf, .edf) con MNE‑Python.
  2. Preprocesado
    • Filtrado band‑pass (p.ej. 0.5–40 Hz en ECG, 1–30 Hz en EEG).
    • Eliminación de artefactos:
      • ECG: suprimir tendencia, ruido de red.
      • EEG: artefactos oculares con ICA o SSP.
    • Resample a una frecuencia común (como haces con REDD/UK‑DALE).
  3. Segmentación en ventanas
    • Ventanas deslizantes (p.ej. 5–10 s) o latido a latido (ECG) / epoch de 1–5 s (EEG).
  4. Extracción de características
    • ECG:
      • Intervalos RR, HRV en el tiempo/frecuencia.
      • Amplitud/duración de QRS, onda T.
    • EEG:
      • Potencia en bandas (delta, theta, alfa, beta, gamma) por FFT/welch.
    • Técnicas que ya dominas: FFT/DFT, ventanas, estadísticas de las ventanas, tiempo‑frecuencia.
  5. Modelo de clasificación / detección
    • Clásicos: SVM, Random Forest, HMM para secuencias (similar a appliance states).
    • Deep: CNN/LSTM para latidos (arritmias) o epochs EEG (estado cognitivo/sueño).
  6. Evaluación
    • Métricas muy parecidas: accuracy, F1, sensibilidad/especificidad, AUC.
    • La lógica de comparar modelos/datasets que ya usas en NILMTK se traslada casi 1:1.​

Cómo “portar” skills de NILM a salud, se traduce casi mecánicamente:

  • Diseño de datasets y pipelines reproducibles → construcción de bases ECG/EEG bien documentadas (metadatos, protocolos de adquisición).
  • Preprocesado avanzado (ruido, gaps, resample) → limpieza de artefactos fisiológicos, unificando sampling rates y referencias de canal.
  • Feature engineering en potencia y armónicos → HRV, espectros EEG, medidas no lineales (entropía, fractalidad) usando exactamente las mismas herramientas numéricas.
  • Evaluación de algoritmos y benchmarking con NILMTK → comparación sistemática de modelos ECG/EEG en varios datasets públicos.
  • Desarrollo hardware (oZm/OMPM) → diseños de front‑end para biosensores de bajo coste, sistemas de adquisición multi‑canal, compresión on‑device de features (como haces con armónicos).

Lo que cambia es: el dominio (fisiología, anatomía, criterios clínicos) y la validación (regulación, ensayos, ética), donde necesitas aliados clínicos.

3. Ejemplo: “desagregar” EMG/EEG con ICA/NMF

Un paralelismo directo con NILM es usar BSS para separar fuentes fisiológicas de un agregado multi‑canal.

Escenario EEG (artefactos vs actividad cerebral)

  • Entrada: matriz XX con canales EEG mezclando actividad cerebral + parpadeos + ruido muscular.
  • Objetivo: separar “fuentes” independientes:
    • Componente 1: parpadeos (picos frontales de baja frecuencia).
    • Componente 2: contracción muscular (alta frecuencia).
    • Componentes restantes: actividad cortical.
  • Técnica:
    • Aplicar ICA (por ejemplo FastICA) para factorizar X=ASX=AS.
    • Identificar componentes artefactuales por su topografía y espectro, anularlos y reconstruir la señal limpia.

Esto es conceptualmente lo mismo que separar “componentes” de la señal de potencia (cada carga con su firma) y luego reconstruir un agregado sin cierto appliance.

Escenario EMG (unidades motoras)

  • Multi‑canal EMG recoge mezcla de varias unidades motoras y ruido.
  • ICA/NMF se usan para:
    • Mejorar clasificación de gestos al separar fuentes musculares.
    • Reducir dimensionalidad conservando sinergias motoras.

Aquí la analogía con NILM es aún más clara: cada unidad motora se comporta como una “carga” cuya contribución quieres estimar a partir de una mezcla observada.

2024 03 28 18 42 33 DOMOTICA ELECTRONICA GENERAL ENERGIA Ejemplo del programa de interfaz con window

Instalación de NILMTK y nilmtk-contrib en Windows 11: retos y solución definitiva con WSL y pyenv


En este blog hemos hablado en muchísimas ocasiones del paquete NILMTK, el famoso paquete open software para implementar la desagregacion de la energia .NILMTK es un toolkit de código abierto para Non-Intrusive Load Monitoring (NILM), cuya utilidad principal es desagregar el consumo eléctrico de una vivienda en los diferentes electrodomésticos usando solo la lectura de un medidor general. ¿Qué significa esto?

  • NILM (Non-Intrusive Load Monitoring): Técnica que estima cuánta energía consume cada aparato sin necesidad de instalar sensores individuales en cada uno.
  • NILMTK (Toolkit): Es una biblioteca en Python que ofrece algoritmos, datasets y herramientas para investigar, probar y comparar métodos de desagregación energética.

Utilidad práctica

  • Investigación en Smart Grids: Permite estudiar hábitos de consumo eléctrico sin desplegar muchos medidores.
  • Eficiencia energética: Ayuda a identificar qué aparatos consumen más y cuándo, facilitando estrategias de ahorro.
  • Aplicaciones comerciales: Puede generar facturas detalladas a partir de un único medidor, útil para compañías eléctricas o proyectos de domótica.
  • Desarrollo académico: Es usado en universidades y centros de investigación para probar nuevos algoritmos de machine learning aplicados al consumo energético.

NILMTK convierte una sola lectura de energía en información detallada por aparato, lo que lo hace valioso para investigación, eficiencia y gestión energética. Todo esto esta muy bien ….pero instalar NILMTK y nilmtk-contrib en Windows 11 puede convertirse en una tarea complicada debido a incompatibilidades de versiones de Python y dependencias antiguas usadas por las librerías. Si bien la opción inicial recomendada suele ser crear un entorno conda con Python 3.7, con frecuencia surgen problemas al manejar las versiones correctas de dependencias como numpy y pandas , por eso otro camino puede ser usar WSL ,el cual vamos a explorar en este post, pero antes veamos los problemas a los qeu nos enfrentamos con la instalación clásica con la herramienta Conda/miniconda.

Problemas frecuentes al usar Conda en Windows

Debido a que NILMTK requiere versiones específicas, comúnmente se intenta crear un entorno conda con Python 3.7:

conda create -n nilmtk-env python=3.7
conda activate nilmtk-env
conda install -c nilmtk nilmtk=0.4.3 numpy=1.19.5 -y

No obstante, se presentan errores como LibMambaUnsatisfiableError porque la dependencia hmmlearn no está disponible en el canal nilmtk. Agregar el canal conda-forge y combinar instalaciones con conda y pip es la solución habitual:

conda config --add channels conda-forge
conda config --set channel_priority flexible
conda install hmmlearn numpy=1.19.5 -y
pip install nilmtk==0.4.3 --no-deps

Sin embargo, incluso con estos ajustes, la instalación en Windows puede ser inestable. Además, NILMTK no está oficialmente publicado en PyPI, por lo que la instalación desde código fuente usando pip es habitual, lo que puede generar otras complicaciones relacionadas con versiones de Python y dependencias de construcción como hatchling.

La solución definitiva: usar WSL con pyenv y Python 3.11.5

La forma más estable es instalar NILMTK dentro de WSL (Windows Subsystem for Linux), usando pyenv para gestionar una versión compatible de Python, concretamente la 3.11.5. Esto permite:

  • Evitar conflictos de versiones de dependencias antiguas.
  • Usar la infraestructura Linux más compatible para herramientas científicas.
  • Integrar sin problemas con Visual Studio Code y Jupyter.

Pasos clave para esta instalación en WSL

  1. Prepara WSL con las dependencias básicas para compilar Python
sudo apt update && sudo apt upgrade -y
sudo apt install -y build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev \
libsqlite3-dev wget curl llvm libncurses-dev xz-utils tk-dev libffi-dev liblzma-dev python3-openssl git
  1. Instala pyenv y configúralo en tu shell
curl https://pyenv.run | bash

Incluye al final de ~/.bashrc:

export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

Carga la configuración actual:

source ~/.bashrc
  1. Instala Python 3.11.5 y crea un entorno virtual específico para NILMTK
pyenv install 3.11.5
pyenv virtualenv 3.11.5 nilmtk-env
pyenv activate nilmtk-env
  1. Actualiza pip y instala las dependencias fundamentales
pip install --upgrade pip setuptools wheel
pip install numpy pandas hmmlearn h5py matplotlib networkx nose tables tqdm
pip install git+https://github.com/nilmtk/nilm_metadata.git
  1. Clona el código fuente de NILMTK y nilmtk-contrib e instálalos
git clone https://github.com/nilmtk/nilmtk.git
git clone https://github.com/nilmtk/nilmtk-contrib.git

cd nilmtk
pip install -e . --no-deps
cd ..

cd nilmtk-contrib
pip install -r requirements.txt --no-deps
pip install -e . --no-deps
cd ..
  1. Configura Jupyter para usar el nuevo entorno
pip install jupyter ipykernel
python -m ipykernel install --user --name=nilmtk-env --display-name "Python (nilmtk-env)"
  1. Integra con Visual Studio Code

Abre VS Code desde la terminal WSL con el entorno activado:

pyenv activate nilmtk-env
code .

Selecciona el intérprete Python ubicado en:

text/home/carlo/.pyenv/versions/3.11.5/envs/nilmtk-env/bin/python

Y en los notebooks selecciona el kernel "Python (nilmtk-env)".

Conclusión

Aunque instalar NILMTK y nilmtk-contrib en Windows 11 presenta numerosos retos por incompatibilidades de versiones y dependencias, usar WSL combinado con pyenv y Python 3.11.5 proporciona un entorno estable, funcional y que integra bien con VS Code y Jupyter.

Este es el método recomendado para investigadores y desarrolladores que buscan máxima compatibilidad y facilidad para trabajar con NILMTK en Windows.