Detectando Vazamento de Dados com SHAP

Leticia Alves
Data Hackers
Published in
5 min readMar 12, 2023
Photo by Daan Mooij on Unsplash

Detectar vazamento de dados é uma tarefa importantíssima em qualquer projeto de Machine Learning (ML). O vazamento ocorre quando informações que não deveriam estar disponíveis para o modelo estão presentes nos dados de treinamento. Alguns exemplos de vazamento de dados em modelos de Machine Learning (ML) na saúde são:

  • Em um modelo para prever o diagnóstico de Pneumonia, usamos para treinar o modelo uma variável binária com informação sobre a prescrição de antibióticos
  • Em um modelo para prever o diagnóstico de Hipertensão, usamos para treinar o modelo uma variável com informações sobre quais medicamentos o paciente está usando, incluindo anti-hipertensivos

Isso pode resultar em um modelo com bom desempenho nos dados de treinamento, mas ruim em dados novos e não vistos. Uma maneira de detectar vazamento de dados é usando SHAP (SHapley Additive exPlanations), uma ferramenta que fornece informações sobre como diferentes variáveis contribuem para o valor de saída (target) do modelo de ML.

se qualquer outra variável cujo valor não estaria realmente disponível na prática no momento em que você deseja usar o modelo para fazer uma predição, é uma variável que pode introduzir vazamento em seu modelo (tradução livre) Machine Learning Mastery[1]

Neste artigo, mostraremos de forma prática como utilizar o SHAP para detecção de vazamento de dados. Usaremos o Python e a biblioteca scikit-learn para criar um modelo de classificação para a predição do tempo de permanência no hospital quando um paciente for internado e, em seguida, usaremos o SHAP para identificar possíveis fontes de vazamento.

O que é SHAP?

SHAP é uma técnica para explicar a saída (target) de um modelo de ML quantificando a contribuição de cada variável para a predição. Os valores SHAP são um método baseado na teoria dos jogos e usado para aumentar a explicabilidade dos modelos de aprendizado de máquina [2]. O objetivo deste artigo é uma demonstração prática de como detectar vazamento de dados com SHAP. Para um entendimento mais profundo do SHAP, você pode conferir este artigo[3].

Como SHAP é calculado

Para calcular os valores SHAP para um modelo, primeiro precisamos instalar o módulo SHAP e treinar o modelo. Em seguida, criamos um objeto Explainer sobre o conjunto de teste. Assim, para cada amostra, ele calcula a contribuição de cada variável para o target. Isso envolve executar o modelo várias vezes com diferentes subconjuntos de variáveis e comparar a saída com o valor de base (a saída média em todas as amostras) para determinar a contribuição de cada variável.

Construindo o modelo de classificação

Antes de utilizarmos o SHAP para detecção de vazamento de dados, precisamos construir um modelo de classificação. Para este exemplo, usaremos o conjunto de dados AV JanataHack Healthcare Hackathon II [4], que contém informações sobre pacientes internados nos hospitais e o tempo de duração da internação. Este conjunto de dados foi originalmente utilizado para um hackathon e o objetivo era prever o tempo de internação, mas neste exemplo vamos fazer uma classificação binária que prevê longo tempo de permanência no hospital (> 30 dias). Essa previsão é importante para o administrativo dos hospitais organizarem as futuras internações, estoque de materiais, agendamento de cirurgias eletivas, etc.

Os códigos utilizados neste exemplo estão disponíveis aqui:

Pré Processamento

Antes de treinar o modelo, para este conjunto de dados, precisamos fazer algumas alterações de pré-processamento, como:

  • Descartar a coluna id
  • Lidar com valores ausentes
  • Alterar o tipo de colunas
  • Modificar o target
  • Criar variáveis dummies para colunas categóricas
  • Dividir o conjunto de dados em treino e teste (fizemos isso por último porque excluímos os valores ausentes e não inserimos nenhuma nova informação no conjunto de dados)

Treinamento do modelo

# Importando o modelo
import lightgbm as lgbm

# Treino
model_LightGBM = lgbm.LGBMClassifier(random_state=42)
model_LightGBM.fit(X_train, y_train)

# Teste
y_test_pred_LGBM = model_LightGBM.predict(X_test)

Usando SHAP para detecção de vazamento de dados

Agora que temos um modelo de classificação, podemos usar o SHAP para identificar possíveis fontes de vazamento de dados.

Primeiro, precisamos calcular os valores SHAP para o conjunto de teste:

explainer = shap.Explainer(model_LightGBM, X_train)
shap_values = explainer(X_test)

Em seguida, podemos plotar os valores SHAP para cada variável, usando a função summary_plot() :

shap.summary_plot(shap_values, plot_type='bar', max_display=30)

Isso irá gerar um gráfico de barras mostrando o valor SHAP absoluto médio para cada variável:

(imagem criada pelo autor)

Com o SHAP, podemos ver que a variável Visitors with Patient teve um grande impacto na saída do modelo em comparação com todas as outras variáveis. Quando analisamos profundamente sobre por que isso aconteceu, qual é o objetivo dessa predição e em que momento essa predição irá ocorrer no mundo real, chegamos à conclusão de que se trata de um vazamento de dados.

O objetivo deste modelo de ML é prever o tempo de internação quando o paciente é admitido no hospital. Neste momento é impossível ter a informação de quantas visitas o paciente teve, pois é uma informação futura. Isso pode ser detectado no início, quando estamos realizando a análise exploratória dos dados. Mas mesmo se deixarmos passar, isso pode ser detectado posteriormente usando o SHAP.

Conclusões

Neste artigo, vimos como usar SHAP (SHapley Additive exPlanations) para detecção de vazamento de dados, de forma prática. O SHAP fornece informações sobre como diferentes variáveis contribuem para a saída de um modelo de ML.

O uso do SHAP pode ajudar a identificar possíveis fontes de vazamento que podem ter passado despercebido, como quando temos nos dados de treinamento variáveis que ainda não estão disponíveis no momento em que a predição irá ocorrer. Se observarmos que tais variáveis possuem um valor SHAP muito elevado em comparação com os demais, isso pode indicar que há vazamento de dados. Portanto, é uma ferramenta poderosa para utilizar ao criar um modelo de ML.

Referências

  1. Jason Brownlee (2020). “Data Leakage in Machine Learning” — (acessado em 03 de Março de 2023)
  2. Scott M. Lundberg (2017). “A Unified Approach to Interpreting Model Predictions” — (acessado em 03 de Março 2023)
  3. Christoph Molnar (2023). “9.6 SHAP (SHapley Additive exPlanations)” — (acessado em 03 de Março de 2023)
  4. Blesson Densil (2020). “AV JanataHack Healthcare Hackathon II”- in Kaggle Datasets (acessado em 23 de Fevereiro de 2023)

--

--