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é?
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.
En este caso, explicaremos cómo influyen las variables explicativas en la detección de observaciones anómalas utilizando los valores SHAP.
Preguntas
- ¿Qué técnica se usa para explicar modelos de Machine Learning?
- ¿Cómo interpretar los valores SHAP?
- ¿Por qué el mismo valor de
WEEKEND
influye de manera diferente el resultado del modelo? - ¿Cómo visualizar la influencia de cada variable explicativa en la detección de anomalías entre todas las observaciones?
- ¿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)
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)
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)
¿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])
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)
Conclusiones
- Técnica para Explicar Modelos: SHAP (SHapley Additive exPlanations) para explicar la no linealidad de los modelos de Machine Learning.
- Interpretar Valores SHAP: ¿Cuánto influye, de media, cada variable explicativa en el modelo?
- 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. - 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. - 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.
Take a step forward and learn to develop algorithms and applications with our digital courses in Udemy.