Pular para o conteúdo principal
InicioTutoriaisAprendizado de máquina

Uma introdução aos valores SHAP e à interpretabilidade do aprendizado de máquina

Os modelos de aprendizado de máquina são poderosos, mas difíceis de interpretar. No entanto, os valores de SHAP podem ajudar você a entender como os recursos do modelo afetam as previsões.
Actualizado 11 de set. de 2024  · 9 min leer

Os modelos de aprendizado de máquina estão se tornando cada vez mais complexos, avançados e capazes de fazer previsões precisas. Entretanto, à medida que esses modelos se tornam "caixas-pretas", fica ainda mais difícil entender como eles chegaram a essas previsões. Isso levou a um foco crescente na interpretabilidade e explicabilidade do aprendizado de máquina.

Por exemplo, você solicitou um empréstimo em um banco, mas foi rejeitado. Você quer saber o motivo da rejeição, mas o agente de atendimento ao cliente responde que um algoritmo rejeitou a solicitação e que eles não conseguem determinar o motivo. Isso é frustrante, certo? Você merece uma explicação para a decisão que o afeta. É por isso que as empresas tentam tornar seus modelos de aprendizado de máquina mais transparentes e compreensíveis.

Uma das ferramentas mais promissoras para esse processo são os valores SHAP, que medem o quanto cada recurso (como renda, idade, pontuação de crédito etc.) contribui para a previsão do modelo. Os valores de SHAP podem ajudar você a ver quais recursos são mais importantes para o modelo e como eles afetam o resultado.

Neste tutorial, aprenderemos sobre os valores SHAP e sua função na interpretação do modelo de aprendizado de máquina. Também usaremos o pacote Shap Python para criar e analisar diferentes gráficos para interpretar modelos.

O que são os valores do SHAP?

Os valores SHAP (SHapley Additive exPlanations) são uma forma de explicar o resultado de qualquer modelo de aprendizado de máquina. Ele usa uma abordagem teórica de jogos que mede a contribuição de cada jogador para o resultado final. No aprendizado de máquina, cada recurso recebe um valor de importância que representa sua contribuição para o resultado do modelo.

Os valores de SHAP mostram como cada recurso afeta cada previsão final, a importância de cada recurso em comparação com outros e a dependência do modelo na interação entre os recursos.

Você quer começar a usar a IA generativa?

Saiba como trabalhar com LLMs em Python diretamente em seu navegador

Comece Agora

Valores SHAP no aprendizado de máquina 

Os valores de SHAP são uma maneira comum de obter uma explicação consistente e objetiva de como cada recurso afeta a previsão do modelo.

Os valores SHAP são baseados na teoria dos jogos e atribuem um valor de importância a cada recurso em um modelo. Os recursos com valores SHAP positivos afetam positivamente a previsão, enquanto aqueles com valores negativos têm um impacto negativo. A magnitude é uma medida de quão forte é o efeito.

Os valores SHAP são independentes de modelo, o que significa que podem ser usados para interpretar qualquer modelo de aprendizado de máquina, inclusive:

  • Regressão linear
  • Árvores de decisão
  • Florestas aleatórias
  • Modelos de aumento de gradiente
  • Redes neurais

As propriedades dos valores SHAP

Os valores de SHAP têm várias propriedades úteis que os tornam eficazes para interpretar modelos:

Aditividade

Os valores SHAP são aditivos, o que significa que a contribuição de cada recurso para a previsão final pode ser calculada independentemente e depois somada. Essa propriedade permite o cálculo eficiente dos valores de SHAP, mesmo para conjuntos de dados de alta dimensão.

Precisão local

Os valores de SHAP correspondem à diferença entre o resultado esperado do modelo e o resultado real para um determinado input. Isso significa que os valores de SHAP fornecem uma interpretação precisa e local da previsão do modelo para uma determinada entrada.

Falta

Os valores de SHAP são zero para recursos ausentes ou irrelevantes para uma previsão. Isso torna os valores SHAP robustos em relação a dados ausentes e garante que características irrelevantes não distorçam a interpretação.

Consistência

Os valores de SHAP não mudam quando o modelo é alterado, a menos que a contribuição de um recurso seja alterada. Isso significa que os valores de SHAP fornecem uma interpretação consistente do comportamento do modelo, mesmo quando a arquitetura ou os parâmetros do modelo são alterados.

De modo geral, os valores SHAP oferecem uma maneira consistente e objetiva de obter insights sobre como um modelo de aprendizado de máquina faz previsões e quais recursos têm a maior influência.

Como implementar valores SHAP em Python

Nesta seção, calcularemos os valores de SHAP e visualizaremos a importância do recurso, a dependência do recurso, a força e o gráfico de decisão.

Execute e edite o código deste tutorial online

Executar código

Configuração

Instale o SHAP usando o PyPI ou o conda-forge:

pip install shap

ou

conda install -c conda-forge shap

Carregar a rotatividade de clientes de telecomunicações. O conjunto de dados parece limpo, e a coluna de destino é "Churn".

import shap
import pandas as pd
import numpy as np
shap.initjs()

customer = pd.read_csv("data/customer_churn.csv")
customer.head()

Treinamento e avaliação de modelos

  1. Crie X e y usando uma coluna de destino e divida o conjunto de dados em treinamento e teste.
  2. Treine o classificador Random Forest no conjunto de treinamento.
  3. Faça previsões usando um conjunto de testes.
  4. Exibir relatório de classificação.
from sklearn.metrics import classification_report
from sklearn.model_selection import train_test_split

X = customer.drop("Churn", axis=1) # Independent variables
y = customer.Churn # Dependent variable

# Split into train and test 
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1)

# Train a machine learning model
from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier()
clf.fit(X_train, y_train)

# Make prediction on the testing data
y_pred = clf.predict(X_test)

# Classification Report
print(classification_report(y_pred, y_test))

O modelo apresentou melhor desempenho para o rótulo "0" do que para o rótulo "1" devido a um conjunto de dados desequilibrado. No geral, é um resultado aceitável com 94% de precisão.

              precision    recall  f1-score   support

           0       0.97      0.96      0.97       815
           1       0.79      0.82      0.80       130

    accuracy                           0.94       945
   macro avg       0.88      0.89      0.88       945
weighted avg       0.94      0.94      0.94       945

Confira nosso guia de classificação em aprendizado de máquina para aprender sobre classificação em aprendizado de máquina com exemplos em Python.

Configuração do SHAP Explainer

Agora vem a parte da explicação do modelo.

Primeiro, criaremos um objeto de explicação fornecendo um modelo de classificação de floresta aleatória e, em seguida, calcularemos o valor SHAP usando um conjunto de testes.

explainer = shap.Explainer(clf)
shap_values = explainer.shap_values(X_test)

Resumo do enredo

Exiba o site summary_plot usando os valores SHAP e o conjunto de testes.

shap.summary_plot(shap_values, X_test)

O gráfico de resumo mostra a importância de cada recurso no modelo. Os resultados mostram que "Status", "Reclamações" e "Frequência de uso" desempenham papéis importantes na determinação dos resultados.

Exiba o endereço summary_plot do rótulo "0".

shap.summary_plot(shap_values[0], X_test)
  • O eixo Y indica os nomes dos recursos em ordem de importância, de cima para baixo.
  • O eixo X representa o valor SHAP, que indica o grau de alteração nas probabilidades de registro.
  • A cor de cada ponto no gráfico representa o valor do recurso correspondente, com o vermelho indicando valores altos e o azul indicando valores baixos.
  • Cada ponto representa uma linha de dados do conjunto de dados original.

Se você observar o recurso "Complaints" (Reclamações), verá que ele é, em sua maioria, alto, com um valor SHAP negativo. Isso significa que um número maior de reclamações tende a afetar negativamente o resultado.

Observação: para o rótulo "1", a visualização será invertida.

Gráfico de dependência

Visualize o dependence_plot entre o recurso "Subscription Length" (duração da assinatura) e "Age" (idade).

shap.dependence_plot("Subscription Length", shap_values[0], X_test,interaction_index="Age")

Um gráfico de dependência é um tipo de gráfico de dispersão que mostra como as previsões de um modelo são afetadas por um recurso específico (comprimento da assinatura). Em média, a duração das assinaturas tem um efeito positivo no modelo.

Gráfico de força

Examinaremos a primeira amostra do conjunto de testes para determinar quais recursos contribuíram para o resultado "0". Para isso, utilizaremos um gráfico de força e forneceremos o valor esperado, o valor SHAP e a amostra de teste.

shap.plots.force(explainer.expected_value[0], shap_values[0][0,:], X_test.iloc[0, :], matplotlib = True)

Podemos ver claramente que zero reclamações e zero falhas nas chamadas contribuíram negativamente para a perda de clientes.

Vejamos as amostras de rotatividade de clientes com o rótulo "1".

shap.plots.force(explainer.expected_value[1], shap_values[1][6, :], X_test.iloc[6, :],matplotlib = True)

Você pode ver todos os recursos com o valor e a magnitude que contribuíram para a perda de clientes. Parece que até mesmo uma reclamação não resolvida pode custar caro para uma empresa de telecomunicações.

Gráfico de decisão

Agora, exibiremos o site decision_plot. Ele descreve visualmente as decisões do modelo mapeando os valores SHAP cumulativos para cada previsão.

shap.decision_plot(explainer.expected_value[1], shap_values[1], X_test.columns)

Cada linha traçada no gráfico de decisão mostra a intensidade com que os recursos individuais contribuíram para uma única previsão de modelo, explicando assim quais valores de recursos impulsionaram a previsão.

Observação: O gráfico de decisão do rótulo de destino "1" está inclinado para "1".

Exibir o gráfico de decisão para o rótulo de destino "0"

shap.decision_plot(explainer.expected_value[0], shap_values[0], X_test.columns)

O gráfico de decisão está inclinado para "0".

Aplicação de valores SHAP

Além da capacidade de interpretação e explicação do aprendizado de máquina, o valor SHAP pode ser usado para:

  1. Depuração de modelos. Ao examinar os valores de SHAP, podemos identificar quaisquer distorções ou discrepâncias nos dados que possam estar fazendo com que o modelo cometa erros.
  2. Importância do recurso. A identificação e a remoção de recursos de baixo impacto podem criar um modelo mais otimizado.
  3. Explicações de ancoragem. Podemos usar os valores de SHAP para explicar previsões individuais, destacando os recursos essenciais que causaram essa previsão. Ele pode ajudar os usuários a entender e confiar nas decisões de um modelo.
  4. Resumos de modelos. Ele pode fornecer um resumo global de um modelo na forma de um gráfico de resumo do valor SHAP. Ele fornece uma visão geral dos recursos mais importantes em todo o conjunto de dados.
  5. Detecção de vieses. A análise de valor do SHAP ajuda a identificar se determinados recursos afetam desproporcionalmente grupos específicos. Ele permite a detecção e a redução da discriminação no modelo.
  6. Auditoria de imparcialidade. Ele pode ser usado para avaliar a imparcialidade e as implicações éticas de um modelo.
  7. Aprovação regulatória. Os valores do SHAP podem ajudar a obter aprovação regulatória, explicando as decisões do modelo.

Conclusão

Exploramos os valores SHAP e como podemos usá-los para oferecer interpretabilidade aos modelos de aprendizado de máquina. Embora seja essencial ter um modelo preciso, as empresas precisam ir além da precisão e se concentrar na interpretabilidade e na transparência para ganhar a confiança dos usuários e dos órgãos reguladores.

A capacidade de explicar por que um modelo fez uma previsão específica ajuda a depurar possíveis vieses, identificar problemas de dados e justificar as decisões do modelo.

Se você é novo no aprendizado de máquina e quer se preparar para o trabalho, considere fazer o curso de Cientista de Aprendizado de Máquina com Python. Este programa ajudará você a dominar as habilidades necessárias em Python para se tornar um cientista de aprendizado de máquina e conseguir um emprego.

Obtenha uma das melhores certificações de IA

Demonstre que você pode usar a IA de forma eficaz e responsável.

Photo of Abid Ali Awan
Author
Abid Ali Awan
LinkedIn
Twitter

Sou um cientista de dados certificado que gosta de criar aplicativos de aprendizado de máquina e escrever blogs sobre ciência de dados. No momento, estou me concentrando na criação e edição de conteúdo e no trabalho com modelos de linguagem de grande porte.

Temas