La tesis
Detección de anomalías no supervisada en telemetría de inversores fotovoltaicos, acompañada de la explicación automática mediante un SLM en local y diseñado para ejecutarse en el edge, sin necesidad de conexión a internet.
Enfoque híbrido
No todo se resuelve con IA generativa, ni todo puede inferirse únicamente con modelos de ML.
- "Un LLM sabe perfectamente interpretar telemetría de producción solar": Un modelo generativo no puede realizar inferencia al mismo ritmo que la telemetría entra en el sistema. Por otro lado no tiene memoria de series temporales multivariante, no aprende umbrales por instalación y no garantiza respuestas deterministas sobre datos numéricos.
- "Esto es ML clásico, GenAI no aporta nada": La red neuronal detecta que falla algo (qué), pero no explica por qué de forma que un humano no experto lo pueda entender.
En este TFM las dos piezas tienen un rol distinto y bien delimitado:
- ML clásico (LSTM-AE + MLP): Aprende la "normalidad" de la instalación, puntúa ventanas temporales y decide si hay anomalía. Es determinista, ligero y ejecutable en CPU.
- GenAI (gemma4:e4b local): Recibe el contexto de la ventana anómala, recupera conocimiento del dominio vía RAG y redacta una explicación estructurada para un técnico.
Ni uno ni el otro, es la combinación de ambos lo que permite capturar anomalías y transformar datos numéricos en lenguaje natural. Entonces, ¿cómo integramos Deep Learning e IA Generativa para que funcionen en conjunto?
La arquitectura
graph LR A[Simulator] -->|MQTT| B[Detector] B -->|RabbitMQ| C[Explainer] C --> D[Dashboard] B -->|MQTT| D
Simulator
Reproduce datos reales del dataset Solar Power Generation Data (Kaggle, 2 plantas, 22 inversores, intervalos de 15 min, mayo–junio 2020). Publica mensajes en un broker MQTT con el mismo ritmo que tendría una instalación real.
Detector
Representa el módulo encargado de detectar las desviaciones del comportamiento normal de la producción. Recibe ventanas de pasos (≈8 horas), puntúa con y publica anomalías de vuelta por MQTT, además de encolar el trabajo de explicación en RabbitMQ.
Explainer
Cuando están ociosos, se adjudican trabajos de explicación de la cola de RabbitMQ. Utiliza un SLM (gemma4:e4b) para generar un LLMAnalysis estructurado con clasificación de fallo (9 categorías AnomalyClassification), resumen técnico y recomendación.
LSTM-AE + MLP: por qué mejoran las métricas
El LSTM-Autoencoder bidireccional aprende a reconstruir ventanas normales. En inferencia, un error de reconstrucción alto = anomalía. El vector de entrada está compuesto por siete features:
El bottleneck comprime toda la ventana en un vector de 8 dimensiones.
El problema con el error de reconstrucción global
El modelo reconstruía bien la mayoría de features pero los fallos más frecuentes eran incoherencias en los canales de potencia. La relación DC/AC se rompe cuando hay sombreado, suciedad en el panel o fallo de inversor. Un error de reconstrucción promediado sobre las 7 features diluía esa señal.
Cabeza MLP auxiliar
Como solución se añade una cabeza MLP que predice directamente desde :
La puntuación híbrida final combina el percentil 95 del error de reconstrucción solo en los canales de potencia (DC y AC) con el error de la cabeza MLP:
La MLP es la forma más sencilla de red neuronal, una pequeña cadena de capas que recibe unos números de entrada y devuelve una predicción, y no añade coste de inferencia relevante.
Router por planta en el Detector
Cada planta solar tiene su propio perfil operativo ya que en un entorno real la orientación, sombreado o degradación de paneles varían en función de la ubicación. Un único modelo global no captura esas diferencias y la generalización silencia anomalías.
El Detector implementa un router que, al recibir cada ventana, la dirige al modelo de la planta correspondiente según el identificador (SOURCE_KEY). Cada planta tiene su propio MinMaxScaler, su propio autoencoder, su propia cabeza MLP y su propio umbral óptimo (calculado en entrenamiento para maximizar F1).
Los falsos positivos bajaron drásticamente al dejar de mezclar distribuciones de plantas distintas en un enfoque de modelo único.
Dashboard de monitorización
El componente Monitor es una app Angular 21 standalone que da visibilidad en tiempo real a todo el pipeline:
- Diagrama de pipeline: Estado de cada componente usando ng-diagrams (Simulator + Detector + Explainer). La gestión de eventos para la sumulación de la telemetría (controles de "play" y "pause" se resuelven con MQTT).
- Panel de anomalías: Listado de alertas con inversor, timestamp, score y canal más afectado.
- Tarjetas del Explainer: Cada explicación generada aparece con clasificación de fallo, resumen y recomendación. Se puede forzar una nueva explicación desde la UI.
Conclusión
El sistema demuestra que ML clásico y GenAI se complementan bien cuando se combinan usando ingeniería:
- El LSTM-AE con cabeza MLP detecta con precisión porque aprende la física de la instalación y enfoca la señal en los canales de potencia.
- El router por planta respeta que cada instalación es diferente y especializa el Detector.
- El SLM local traduce las anomalías numéricas a lenguaje interpretable por un humano.
- El dashboard cierra el ciclo dando visibilidad operativa en tiempo real.
Nada de esto hubiera funcionado con un único tipo de disciplina. La arquitectura es la respuesta.
El código del proyecto está disponible en GitHub.