Resumen del libro de Molnar
Visualizar el valor predicho por el modelo para cada dato variando un único atributo \(S\) en cada individuo.
Feature Importance
For Dummies
Es dibujar por el valor predicho para cada dato cuando cambias su valor del atributo \(S\) por \(x\).
Siendo \(S\) el atributo a estudiar, y \(C\) el resto de atributos, la función ICE se define para cada dato como:
\[\hat{f}_{S}^{(i)}(x_S) = \hat{f}(\{x_S, x_{C}^{(i)}\})\]
Se ancla el comienzo de la función a un valor fijo para que todas las gráficas (una por cada dato) partan del mismo punto. De esta forma se puede ver la tendencia en conjunto:
\[\hat{f}_{cent}^{(i)}=\hat{f}^{(i)}-\hat{f}(\{x^a, x_{C}^{(i)}\})\]
Siendo \(x^a\) el valor ancla.
Calcular la derivada de cada función ICE.
\[\frac{d \hat{f}_{S}^{(i)}(x_S)}{dx_S} = g'(x_S)\]
Donde
\[\hat{f}(x) = g(x_S) + h(x_C)\]
Tip
Si el atributo es independiente con respecto al resto, la derivada debería ser la misma para todos los datos.
https://christophm.github.io/interpretable-ml-book/images/ice-bike-1.jpeg
https://christophm.github.io/interpretable-ml-book/images/ice-bike-centered-1.jpeg
El método de LIME busca entrenar un modelo subrogado inherentemente interpretable (comúnmente una regresión lineal) que solo contenga una región cercana al dato a explicar. Esto elimina la desventaja de intentar subrogar modelos excesivamente complejos de forma global, ya que una región más pequeña será más fácil de replicar.
Surrogate Models
For Dummies
Generar datos en una región cercana al individuo para subrogarla por un modelo lineal.
\(explanation(x) = argmin_{g \in G} L(f, g, \pi_x) + \Omega(g)\)
Donde:
https://christophm.github.io/interpretable-ml-book/images/lime-fitting-1.jpeg
https://christophm.github.io/interpretable-ml-book/images/lime-fail-1.jpeg
Una explicación por contrafácticos intenta explicar la predicción de un dato a través de revelar cómo cambiaría la predicción si cambiase el dato en uno y otro atributo.
Se basa en conseguir modificar la predicción para el dato \(x\) en un valor \(y\) buscando un dato nuevo \(x'\). Se usan algoritmos de optimización para reducir la diferencia entre \(x\) y \(x'\) según diversas medidas.
Note
También utilizados para adversarial attacks.
Counterfactuals
For Dummies
Buscar el mínimo cambio en el dato para hacer cambiar su predicción un valor preestablecido.
\[L(x, x', y', \lambda) = \lambda \cdot (\hat{f}(x') - y') + d(x, x')\]
Queremos minimizar la función de pérdida \(L\) buscando un \(x'\) que minimize la diferencia entre la predicción de \(M\) \(\hat{f}(x')\) y el valor deseado \(y'\), y que sea lo más parecido posible a \(x\): \(d(x, x')\).
Queremos resolver un problema multiobjetivo (ningún objetivo más prioritario que otro) formado por los siguientes objetivos:
\(o_1\): la distancia entre \(\hat{f}(x')\) y \(y'\)
\(o_2\): la distancia entre \(x\) y \(x'\)
\(o_3\): El número de atributos que cambian
\(o_4\): \(x'\) sea parecido a algún dato existente.
En un ejemplo de la denegación de un crédito:
age | sex | job | amount | duration |
---|---|---|---|---|
58 | f | unskilled | 6143 | 48 |
Estos serían los datos más cercanos:
age | sex | job | amount | duration | o₂ | o₃ | o₄ | f̂(x′) |
---|---|---|---|---|---|---|---|---|
-20 | skilled | -20 | -20 | 0.108 | 2 | 0.036 | 0.501 | |
-24 | skilled | -24 | -24 | 0.114 | 2 | 0.029 | 0.525 | |
-22 | skilled | -22 | -22 | 0.111 | 2 | 0.033 | 0.513 | |
-6 | skilled | -6 | -24 | 0.126 | 3 | 0.018 | 0.505 | |
-3 | skilled | -3 | -24 | 0.120 | 3 | 0.024 | 0.515 | |
-1 | skilled | -1 | -24 | 0.116 | 3 | 0.027 | 0.522 | |
-3 | m | -3 | -24 | 0.195 | 3 | 0.012 | 0.501 | |
-6 | m | -6 | -25 | 0.202 | 3 | 0.011 | 0.501 | |
-30 | m | -30 | -24 | 0.285 | 4 | 0.005 | 0.509 | |
-4 | m | -1254 | -24 | 0.204 | 4 | 0.002 | 0.506 |
Intentaremos encontrar una región cercana al dato a explicar donde la predicción del modelo sea constante. Para ello buscaremos reglas que anclen la predicción a un valor constante. Una regla se considerará un ancla si cualquier dato que cumpla la regla tiene el valor de predicción esperado.
Surrogate models
For Dummies
Misma idea que LIME pero en vez de usar modelos lineales usa reglas de decisión.
https://christophm.github.io/interpretable-ml-book/images/anchors-visualization.png
Buscar reglas o anclas que limiten el espacio es un problema computacionalmente muy costoso. Para ello se añade un \(\delta\) como la probabilidad permitida de aceptar un valor de error. \(\tau\) es el valor de precisión mínimo que se acepta.
\[P(prec(A) \geq \tau) \geq 1 - \delta\]
\[prec(A) = \mathbb{E}_{D_x(z|A)}[1_{\hat{f}(x) = \hat{f}(z)}]\]
De aquí se calcula el coverage, que es la probabilidad de que la regla se cumpla en la vecindad:
\[cov(A)=\mathbb{E}_{D_x(z)}[A(z)]\]
https://christophm.github.io/interpretable-ml-book/images/anchors1-1.png
https://christophm.github.io/interpretable-ml-book/images/anchors3-1.png
Si tratamos la predicción del modelo \(M\) como un juego donde cada atributo \(S_i\) es un jugador, y el valor de la predicción es la puntuación final del juego, se puede calcular la contribución de cada atributo al resultado final.
Esto se lleva a cabo mediante el cálculo de los shapley values, que son valores estudiados en la teoría de juegos cooperativos.
Feature Importance
For Dummies
Encontrar la importancia de cada atributo en la predicción del modelo a través de teoría de juegos.
Para calcular el shapley value \(\phi_i\) de un atributo \(S_i\) se debe calcular previamente el valor de la predicción para todos los subconjuntos de atributos que no contengan a \(S_i\).
\[\phi_i(v) = \sum_{S \subseteq N \setminus \{i\}} \frac{|S|!(|N|-|S|-1)!}{|N|!} [v(S \cup \{i\}) - v(S)]\]
Se divide el espacio de atributos en todos los subconjuntos posibles y se calcula la predicción para cada subconjunto. La aportación de un atributo se calcula a través de una media ponderada de estos valores según la fórmula de arriba.
El número de subconjuntos de atributos crece exponencialmente con el número de atributos \(2^{S_M}\). Para evitar calcular todos los valores, calculamos aleatoriamente solo algunos subconjuntos (Montecarlo):
\[\hat{\phi_j} = \frac{1}{M} \sum_{m=1}^{M} [ \hat{f}(x_{+j}^{m}) - \hat{f(x_{-j}^{m})}]\]
Donde \(x_{+j}^{m}\) es una permutación de \(x\) con el atributo \(j\) incluido, y \(x_{-j}^{m}\) es una permutación sin él.
Para un número de iteraciones \(M\) dado:
https://christophm.github.io/interpretable-ml-book/images/shapley-bike-plot-1.jpeg
SHAP es un método que utiliza los shapley values para explicar el valor de la predicción de un modelo. En este caso se genera un nuevo modelo de predicción \(g\) que predice datos según los shapley values de los atributos, a través de un nuevo dataset \(D'\), donde cada dato es solo una permutación de elementos binarios, indicando si un atributo está o no presente en esa instancia.
Es similar a generar un modelo lineal que sea similar a LIME, pero donde cada peso es calculado como la contribución (shapley value) de cada atributo a la predicción.
Surrogate Model
For Dummies
Usar los shapley values para crear un modelo lineal interpretable.
\[g(z) = \phi_0 + \sum_{j=1}^{M} \phi_j z_j\]
Queremos asegurar 3 propiedades:
Una variante que nos permite estimar los shapley values de una instancia \(x\).
Creamos una función kernel \(h_x\) que permita convertir una instancia \(z'_k \in {0,1}^M\) en una instancia computable por \(\hat{f}\).
https://christophm.github.io/interpretable-ml-book/images/shap-simplified-features.jpg
Existen distintas variantes (TreeSHAP, LinealSHAP) que permiten calcular los shapley values de formas más precisas y rápidas. Pero estas variantes no son universales, y dependen del modelo a estudiar.
Calcular los shapley values para todos los datos del dataset nos permite obtener ciertos valores globales muy útiles con respecto al modelo:
\[I_j = \frac{1}{n} \sum_{i=1}^{n} |\phi_j^{(i)}|\]
https://christophm.github.io/interpretable-ml-book/images/unnamed-chunk-39-1.jpeg
PhD xAI