Explicando anomalías en mercados energéticos con modelos Machine Learning

Descubre cómo explicar la influencia de las variables explicativas de un modelo de Machine Learning que detecta anomalías utilizando los valores SHAP.

El hecho de que sea fin de semana no influye de la misma manera en la detección de anomalías en el precio de la electricidad. ¿Por qué?

Gráfico de cascada SHAP mostrando la contribución de cada variable a una predicción específica de anomalía en la fijación de precios de electricidad durante el fin de semana.
F1. Análisis SHAP para anomalías específicas

Los modelos de Machine Learning no siguen patrones lineales. Te lo explicamos paso a paso.

Data

Para cada hora de un día, el precio de la electricidad viene determinado por los mercados diario e intradiarios.

Conjunto de datos de diferentes mercados intradiarios de energía en España con propiedades de series temporales.
F2. Dataset de mercados intradiarios de energía en España

En este caso, explicaremos cómo influyen las variables explicativas en la detección de observaciones anómalas utilizando los valores SHAP.

Preguntas

  1. ¿Qué técnica se usa para explicar modelos de Machine Learning?
  2. ¿Cómo interpretar los valores SHAP?
  3. ¿Por qué el mismo valor de WEEKEND influye de manera diferente el resultado del modelo?
  4. ¿Cómo visualizar la influencia de cada variable explicativa en la detección de anomalías entre todas las observaciones?
  5. ¿Y en una observación específica?

Metodología

Modelo para detectar anomalías

Usamos el algoritmo Isolation Forest para detectar anomalías en el histórico de datos.

from sklearn.ensemble import IsolationForest

model = IsolationForest(contamination=0.01, random_state=42)
model.fit(df)
Visualización de datos mostrando anomalías detectadas en los precios de la electricidad a lo largo del tiempo, utilizando el modelo Isolation Forest.
F3. Detección de anomalías visualizada

Muy bonita la gráfica para ver cuándo se dan las anomalías. Pero más allá de visualizarlas, necesitamos explicar la influencia de las variables explicativas en su detección.

Visita este tutorial para aprender más sobre el algoritmo Isolation Forest.

Valores SHAP para explicar anomalías

Creamos un explainer para el modelo y calculamos los valores SHAP para explicar las anomalías.

import shap

explainer = shap.Explainer(model.predict, df)
shap_values = explainer(df)

Después de calcular los valores SHAP, visualizamos la importancia de las variables explicativas en la detección de anomalías.

SHAP resumen

El precio del mercado intradiario 2 es la variable más importante para detectar anomalías, con una influencia media absoluta de 0.3.

shap.plots.bar(shap_values)
Gráfico de barras SHAP indicando la importancia de las variables, siendo el mercado intradiario 2 el más influyente en la detección de anomalías.
F4. Importancia de las variables por SHAP

Además de los valores medios, podemos visualizar la gráfica resumen para comprender la influencia de las variables explicativas en cada observación.

shap.summary_plot(shap_values)
Resumen SHAP mostrando el impacto de las variables explicativas en las predicciones de anomalías para todas las observaciones, incluyendo el efecto del FIN DE SEMANA.
F5. Impacto global de las variables

¿Qué es lo más significativo?

Si nos fijamos en WEEKEND, los valores bajos (es decir, los días laborables) hacen que la predicción se vaya hacia la derecha, prediciendo observaciones normales.

En caso contrario, los fines de semana (valores altos en rojo) hacen más probable que las observaciones sean anómalas.

¿Qué conclusiones adicionales puedes identificar a partir de este análisis? Te leo en los comentarios.

SHAP al detalle

Es más, podemos analizar la influencia específica de las variables explicativas en cada observación.

¿Conoces a alguien que podría interesarle este artículo? Compártelo con ellos.

shap.plots.waterfall(shap_values[0])
Gráfico de cascada SHAP mostrando la contribución de cada variable a una predicción específica de anomalía en la fijación de precios de electricidad durante el fin de semana.
F1. Análisis SHAP de anomalías específicas

Como bien puedes apreciar, la influencia de la misma variables explicativa no siempre es la misma a pesar de tener el mismo valor (ver WEEKEND).

Recuerda que los modelos de Machine Learning no siguen patrones lineales.

SHAP interactivo

Por último, podemos visualizar el detalle de todas las observaciones en un gráfico interactivo.

shap.force_plot(explainer.expected_value, shap_values.values, df)
Gráfico interactivo SHAP detallando la influencia de las variables en la detección de anomalías para observaciones específicas, mostrando la complejidad del modelo.
F6. Detalles interactivos de SHAP

Conclusiones

  1. Técnica para Explicar Modelos: SHAP (SHapley Additive exPlanations) para explicar la no linealidad de los modelos de Machine Learning.
  2. Interpretar Valores SHAP: ¿Cuánto influye, de media, cada variable explicativa en el modelo?
  3. Influencia Diferente de WEEKEND=1: Al explicar modelos no lineales, el mismo valor de una variable explicativa puede influir de manera diferente en el resultado del modelo.
  4. Visualizar Influencia en Todas las Observaciones: shap.summary_plot(shap_values) muestra un ranking de la influencia de las variables explicativas entre todas las observaciones.
  5. Visualizar en Una Observación Específica: shap.waterfall_plot(shap_values[0]) detalla la influencia por variable en una observación específica.

Si pudieras programar lo que quisieras, ¿qué sería? Podría crear un tutorial sobre ello ;)

Hablamos abajo en los comentarios.

Great! You’ve successfully signed up.

Welcome back! You've successfully signed in.

You've successfully subscribed to datons.

Success! Check your email for magic link to sign-in.

Success! Your billing info has been updated.

Your billing was not updated.