Machine Learning · Insper

Explicabilidade

Abordagem fundamental

Em quais atributos um modelo se apoia, com que forma, e por que ele fez esta previsão?

Uma boa previsão que ninguém consegue ler

  • Random forests, gradient boosting e redes neurais venceram as últimas aulas.
  • Um ensemble de 200 árvores com boosting faz uma boa previsão, mas "por que este número?" não tem resposta que caiba numa página.

global

em quais atributos o modelo se apoia, no geral?

local

por que ele fez esta previsão para esta linha?

Exemplo da aula: California housing, o valor mediano das casas de um distrito a partir da renda, das casas e da localização. O lab: por que este solicitante de crédito foi marcado como de alto risco?

Por que explicar um modelo?

depuração

desconfie de um modelo bom demais: uma coluna vazada aparece no topo de qualquer ranking de importância

confiança

um médico, um analista de crédito ou um juiz não vai agir com base num número que não pode questionar

regulação

Lei Geral de Proteção de Dados (LGPD, Lei 13.709/2018, art. 20): direito de pedir a revisão de decisões automatizadas, com "informações claras e adequadas" sobre os critérios; o regulamento europeu de proteção de dados (GDPR, do inglês General Data Protection Regulation, art. 22) vai na mesma direção

ciência

às vezes o modelo é uma ferramenta para aprender sobre o mundo; aí a explicação é o resultado

A caixa de ferramentas desta parte

métodopergunta que respondeescopo
coeficientes, regras de árvoreo próprio modeloglobal
importância por impureza (MDI, do inglês mean decrease in impurity)quais atributos as divisões do treino mais usaram?global, árvores
importância por permutaçãoquanto o escore depende de cada atributo?global
dependência parcial (PDP, do inglês partial dependence plot)como a previsão média muda com um atributo?global
curvas ICE (expectativa condicional individual, do inglês individual conditional expectation)... e para cada linha?local, muitas linhas
valores SHAP (SHapley Additive exPlanations)quanto cada atributo afastou esta previsão da média?local → global

Métodos específicos leem o interior do modelo; os agnósticos só chamam predict. O LIME, um segundo método local, fica na abordagem avançada.

O caminho desta parte

  1. Legível primeirocoeficientes, regras de árvore, o preço da legibilidade
  2. O que importaimportância por permutação, em dados separados
  3. Com que formadependência parcial e curvas ICE
  4. Por que esta previsãovalores de Shapley, cascatas e beeswarms do SHAP
  5. Ler com cuidadonão é causalidade; certo pelos motivos errados
Cada etapa responde a uma pergunta: precisamos mesmo de uma caixa-preta? → de quais atributos o escore precisa? → como a previsão muda com um atributo? → por que esta previsão, para esta linha? → o que uma explicação pode afirmar com honestidade?
Etapa 1 · precisamos mesmo de uma caixa-preta?

Antes: você precisa de uma caixa-preta?

Três candidatos nos mesmos cinco folds, do totalmente legível ao nada legível.

Preveja. Uma regressão linear, uma árvore de profundidade 3 e um gradient boosting com 200 árvores. Quanto de R² os dois modelos legíveis perdem?

A legibilidade tem um preço, aqui

regressão linear

0,602
R² da validação cruzada (CV) ± 0,017

árvore, profundidade 3

0,526
R² da CV ± 0,016

gradient boosting

0,823
R² da CV ± 0,007 · teste 0,825
Abrir mão de vinte e dois pontos de R² é demais: aqui a caixa-preta vence. A diferença nem sempre existe: no lab, com dados de crédito, uma regressão logística e uma random forest empatam estatisticamente; aí o modelo interpretável deve ser usado (Rudin, 2019).

O que os modelos legíveis dizem

oito coeficientes

US$ 10.000 a mais de renda → +US$ 44.140 (com os outros fixos); um grau mais ao norte → −US$ 41.300.

rooms −11,65 e bedrooms +63,55 têm sinais opostos: são correlacionados (0,85), então "um quarto a mais com o número de cômodos fixo" significa converter um cômodo em quarto.

oito regras

Qualquer pessoa segue um distrito árvore abaixo:

renda acima de US$ 78.000 → US$ 457.900.

Daqui em diante, model é a caixa-preta: 200 árvores com até 16 folhas cada. O resto da aula a abre.
Etapa 2 · de quais atributos o escore precisa?

Importância por permutação: embaralhe uma coluna

  1. Tome dados separados e o escore do modelo neles.
  2. Embaralhe uma coluna: os valores ficam, o vínculo com o alvo e com o resto de cada linha se quebra.
  3. Meça a queda do escore. Repita para cada coluna (Breiman, 2001).

for col in X_test.columns:
    X_perm = X_test.copy()
    X_perm[col] = rng.permutation(X_perm[col].to_numpy())
    drops[col] = base - r2_score(y_test, model.predict(X_perm))
  
Se o modelo dependia da coluna, agora recebe lixo e o escore cai; se a ignorava, nada acontece.

Importância por permutação, à mão

4.087 distritos separados, R² = 0,825 sem nada embaralhado; cada coluna embaralhada 5 vezes. Preveja. Embaralhar uma coluna pode custar mais que 0,825?

Dois rankings do mesmo modelo

permutaçãoMDI
latitude1,3460,103
longitude1,1870,117
renda0,5320,567
ocupação0,1340,130
cômodos0,0560,024
população0,0030,009

O permutation_importance roda o mesmo laço: os números à mão (latitude 1,330, renda 0,539, população 0,002) concordam até cerca de duas casas.

Embaralhar a latitude "custa" 1,330: o R² vai de 0,825 para cerca de −0,5, bem pior do que prever a média para todo mundo.

Por que a queda pode passar de 0,825 fica na abordagem avançada: linhas impossíveis.

Dados separados, não dados de treino

Uma floresta com duas colunas de ruído: uma contínua e um cara ou coroa.

Uma random forest com duas colunas de ruído: a MDI dá 0,018 ao ruído contínuo contra 0,002 ao cara ou coroa; a permutação no treino dá a ele 0,016, no teste 0,000
MDI: ruído 0,018, cara ou coroa 0,002. Premia muitos valores distintos.
permutação no treino: ruído 0,016. Se engana do mesmo jeito.
permutação no teste: ruído −0,000. O número a reportar.
Etapa 3 · como a previsão muda com um atributo?

Dependência parcial: em que direção, com que forma?

Fixe o atributo \(j\) num valor \(v\) em todas as linhas, mantenha o resto e tire a média das previsões (Friedman, 2001):

\[ \mathrm{PD}_j(v) = \frac{1}{n}\sum_{i=1}^{n} \hat f\bigl(x_{i,1}, \dots,\, v,\, \dots, x_{i,d}\bigr) \]

\(n\): número de linhas (4.087 distritos de teste); \(x_{i,k}\): atributo \(k\) da linha \(i\), sem mudança, exceto o atributo \(j\), trocado por \(v\); \(\hat f\): a previsão do modelo.


by_hand = [model.predict(X_test.assign(income=v)).mean() for v in grid]
  

O PDP da renda, à mão

Grade: renda de 1,5 a 10 (US$ 10.000). A cada passo, todas as 4.087 linhas recebem essa renda. Preveja. O valor previsto cresce com a renda de forma constante ou satura?

ICE: uma curva por linha

Curvas ICE da renda: todo distrito ganha quando a renda sobe de US$ 20 mil para US$ 80 mil, em média +208 mil, mas de +139 mil a +269 mil conforme o distrito

Renda de US$ 20.000 para US$ 80.000: +US$ 208.000 em média (o PDP), mas de +US$ 139.000 a +US$ 269.000 distrito a distrito (percentis 5 a 95).

Curvas ICE paralelas: o PDP conta a história toda. Em leque: o modelo aprendeu interações e a média as esconde.
Etapa 4 · por que esta previsão, para esta linha?

SHAP: por que esta previsão, para mim?

Divida uma previsão em contribuições, uma por atributo, que somam exatamente:

\[ \hat f(x) = \underbrace{\phi_0}_{\text{valor base}} + \phi_1 + \phi_2 + \dots + \phi_d \]
  • \(\phi_0\): a previsão média sobre um conjunto de fundo; \(\phi_j\): a parte do atributo \(j\) na distância \(\hat f(x) - \phi_0\).
  • Os atributos são jogadores; a previsão é o prêmio do time (Shapley, 1953; Lundberg & Lee, 2017).
  • Valor de uma coalizão \(S\), escrito \(v(S)\): fixe os atributos de \(S\) nos valores da linha, tire os outros do fundo e faça a média.
  • \(\phi_j\): a média de \(v(S \cup \{j\}) - v(S)\) sobre as coalizões em que \(j\) pode entrar, com toda ordem de chegada igualmente provável.

Um modelo de brinquedo, do tamanho de uma calculadora

\[ f = 100 + 80\,\text{rich} + 60\,\text{coastal} + 40\,\text{rich}\cdot\text{coastal} + 20\,\text{big} \quad (\mathrm{US}\$\ 1{.}000) \]
  • Fundo: quatro distritos, que valem 120, 180, 160 e 100. Então \(v(\varnothing) = 140\).
  • Explicamos um distrito rico, litorâneo e não grande: \(f(x) = 280\).
Preveja. Ser rico e litorâneo vale 40 a mais do que os dois separados. Como o Shapley deveria dividir esses 40?

Siga as setas em que "rich" entra

As 8 coalizões do modelo de brinquedo com os valores; as quatro setas em que rich entra numa coalizão contribuem +70, +90, +70, +90

\(v(\{\text{rich}\})\): fixe rich = 1 nos quatro distritos: 200, 180, 280, 180, média 210.

\[ \phi_{\text{rich}} = \tfrac13(210-140) + \tfrac16(285-195) + \tfrac16(205-135) + \tfrac13(280-190) = 80 \]

Todo número faz sentido

rich: 80

efeito principal 80 × (1 − ¼) = 60, mais metade da interação, 20

coastal: 65

45 + 20: a interação é dividida igualmente

big: −5

20 × (0 − ¼): não é grande, enquanto um quarto do fundo é

80 + 65 − 5 = 140 = 280 − 140. A única atribuição com estas quatro propriedades:

eficiência (somam) · simetria · nulidade (sem efeito → 0) · aditividade (soma de modelos → soma de valores)

O shap.TreeExplainer numa árvore que reproduz a fórmula devolve [80, 65, −5] e valor base 140.

Simulador: toda coalizão, toda ordem de chegada

Preveja. Desligue coastal. A interação continua dividida ao meio? A cascata continua terminando na previsão?

No modelo de verdade: um distrito de San Francisco

  • 8 atributos: \(2^8 = 256\) coalizões × 100 distritos do fundo = 25.600 previsões.
  • Força bruta e TreeExplainer concordam até a sexta casa decimal (maior diferença 2e-06).
\[ \underbrace{207{,}39}_{\text{valor base}} + \underbrace{222{,}35}_{\sum \phi} = 429{,}74 = \texttt{model.predict} \]
Com 20 atributos, a força bruta precisaria de um milhão de coalizões por linha. O TreeExplainer obtém os mesmos números exatos percorrendo cada árvore uma vez por linha (Lundberg et al., 2020).

Lendo uma cascata (waterfall)

Cascatas de dois distritos: San Francisco, previsto em 430 mil a partir de uma base de 207 mil; Fresno, previsto em 271 mil

San Francisco (430 mil): longitude +185,6 e latitude −64,6, então localização +121,0; ocupação baixa +66,3; casas antigas +34,2; uma renda comum, +2,6.

Fresno (271 mil): uma renda alta (7,22) soma +145,2; localização −88,3.

O mesmo atributo empurra para cima numa linha e para baixo em outra: uma explicação local é sobre esta linha.

Global: explicações locais empilhadas

Beeswarm de 300 distritos: rendas altas empurram a previsão para cima, ocupação alta e latitudes ao norte a empurram para baixo

300 distritos × 8 valores SHAP. Média de |SHAP|, em US$ 1.000: latitude 76,6, longitude 64,1, renda 44,2, ocupação 22,5 ...

O beeswarm mostra também a direção: rendas altas à direita, ocupações altas e latitudes ao norte à esquerda.

Etapa 5 · o que uma explicação pode afirmar com honestidade?

Explicação ≠ causalidade

  • "A ocupação baixa (1,98 pessoa por domicílio) soma US$ 66.300 ao preço previsto do distrito de San Francisco" (o valor SHAP dela) é uma afirmação verdadeira sobre o modelo.
  • Não quer dizer que tirar gente de uma casa a deixa mais cara: domicílios lotados são um marcador de bairros mais pobres.
  • Para auditoria: se um modelo de crédito se apoia no Código de Endereçamento Postal (CEP), ele pode estar usando o CEP como proxy de renda ou de raça.
Para afirmar que um atributo causa um resultado, você precisa de experimentos ou de inferência causal, não de SHAP.

Certo pelos motivos errados

Hospital A: pacientes graves demais para ficar de pé fazem o exame no aparelho portátil. Hospital B: aparelhos atribuídos ao acaso.

Preveja. Um modelo treinado no hospital A acerta 93,4% numa validação do A. Quanto ele acerta no hospital B?

hospital B

53,8%
mal passa de uma moeda

importância por permutação

aparelho 0,393; marcadores médicos 0,012 no máximo

só os marcadores

73,0% no A, 74,7% no B

Nenhuma validação no A poderia ter avisado. A explicação avisou; só o conhecimento do domínio diz que essa dependência não vai sobreviver.

Resumo

  1. Legível primeiro: se um modelo interpretável é tão bom quanto nos mesmos folds, use-o.
  2. Importância por permutação, em dados separados: quanto o escore precisa de cada atributo.
  3. PDP para a forma média de um efeito, ICE para as linhas por trás dela; curvas em leque indicam interações.
  4. SHAP: contribuições que somam exatamente previsão − valor base; empilhadas, um ranking global com direções.
  5. Uma explicação descreve o modelo, não o mundo; quando um atributo domina, pergunte quando esse valor é registrado?
perguntamétodo
de quais atributos o escore precisa?importância por permutação, em dados separados
como a previsão muda com um atributo?PDP + ICE
por que esta previsão, para esta linha?cascata SHAP
Lab fundamental · cerca de 40 min, em duplas

Explicando decisões de crédito, passos 1 a 7

  • German credit: 1.000 empréstimos, 20 atributos, 30% deram errado.
  • Scorecard ou floresta, nos mesmos folds (ROC AUC, área sob a curva ROC, do inglês receiver operating characteristic); depois, abrir a floresta: MDI contra permutação, PDP e ICE, SHAP no geral e para o solicitante de maior risco.
  • Baixe o notebook do lab e abra no Jupyter ou no Colab (Arquivo → Fazer upload de notebook).
  • Em cada passo, responda o Preveja antes de rodar.
  • Simulações: permutação nas linhas de treino (passo 4) e um fundo só de bons empréstimos (passo 7).

Ritmo: passos 1 a 3 em 10 min; passo 4 e a primeira simulação em 10 min; passos 5 e 6 em 10 min; passo 7 e a segunda simulação em 10 min.