Vazamento de dados é como um modelo fraco ganha nota de forte

·13 min de leitura

Gerei um conjunto de dados com 100 linhas e 2.000 colunas, cada valor sorteado ao acaso de uma curva em sino, e atribuí a cada linha um rótulo 0 ou 1 jogando uma moeda. Não há nada a aprender nesses dados. Nenhum modelo, por mais engenhoso, consegue superar o acaso neles, e a acurácia honesta é de 50%. Depois fiz o que muitos pipelines fazem. Olhei as 100 linhas, escolhi as 20 colunas que mais se correlacionavam com o rótulo e rodei uma validação cruzada de cinco partes com um classificador simples de centroide mais próximo nessas 20 colunas. Em 12 repetições com sementes aleatórias diferentes, a acurácia média foi de 86,5%, com variação de 83% a 90%.

Repeti o experimento com uma única mudança. A escolha das 20 colunas passou a ser feita dentro de cada parte da validação cruzada, usando apenas as linhas de treino daquela parte. A acurácia média caiu para 47,5%, com variação de 37% a 58%, que é o que se espera de jogadas de moeda. O modelo não mudou, nem os dados, nem a métrica. A única diferença foi se as linhas de teste tinham podido influenciar quais atributos o modelo via. Trevor Hastie, Robert Tibshirani e Jerome Friedman fizeram a mesma observação em "The Elements of Statistical Learning", com uma montagem parecida, numa seção intitulada "The Wrong and Right Way to Do Cross-Validation". Décadas depois, o erro continua comum o bastante para encher uma literatura.

Por que o ruído marca 86%? Com 100 linhas e 2.000 colunas candidatas, o acaso garante que algumas colunas se alinhem com os rótulos. A correlação entre uma coluna aleatória e um rótulo aleatório em 100 linhas tem desvio padrão de cerca de 0,1, e a melhor de 2.000 dessas colunas costuma ficar a mais de três desvios padrão, por volta de 0,35 em valor absoluto. Cada uma das 20 colunas escolhidas assim separa um pouco as duas classes no conjunto inteiro, e um classificador que combina 20 delas encontra um padrão que é real nesta amostra particular e ausente do mundo. A validação cruzada então testa em linhas que participaram da escolha das colunas, de modo que o padrão aparece em todas as partes. A etapa de seleção era parte do modelo, e foi treinada nas linhas de teste.

Este ensaio trata dessa família de erros, em geral chamada de vazamento (leakage): informação dos dados que o modelo não terá na hora da previsão chegando ao treino ou à avaliação. Importa mais para uma empresa do que para a academia porque o custo não é um artigo retratado. É um modelo que foi aprovado com base num número que nunca foi real.

Centenas de artigos o carregaram

Em 2022, Sayash Kapoor e Arvind Narayanan examinaram a literatura de ciência baseada em aprendizado de máquina e encontraram erros desse tipo em 17 áreas, afetando 329 artigos segundo a pré-publicação. Organizaram as falhas numa taxonomia de oito tipos de vazamento, que vão de erros de manual a problemas de pesquisa em aberto, e observaram que em alguns casos os erros levaram a conclusões desmedidamente otimistas.

O estudo de caso deles sobre a previsão de guerras civis é o mais instrutivo. Um conjunto de artigos afirmava que modelos complexos de aprendizado de máquina previam o início de guerras civis muito melhor que a regressão logística, uma técnica de décadas. Kapoor e Narayanan tentaram reproduzir as alegações e constataram que todos os artigos que faziam essa afirmação deixavam de se reproduzir por causa de vazamento de dados. Corrigido o vazamento, os modelos complexos não tinham desempenho substancialmente melhor que a regressão logística. O resultado de destaque de toda uma linha de trabalho vinha do pipeline, não do modelo.

Ninguém nessa história precisou de más intenções. O vazamento morava em detalhes que parecem inofensivos quando escritos: onde uma imputação foi ajustada, como uma divisão foi feita, qual versão de uma tabela foi usada. Pessoas que se importam muito em acertar ainda cometem esses erros, porque uma nota alta parece confirmação e nada no fluxo de trabalho habitual dispara um alarme.

Os quatro tipos que você vai encontrar

Dados de negócios produzem vazamento em padrões recorrentes. A tabela lista quatro, com o teste que expõe cada um.

TipoComo aconteceUm teste que o expõe
Vazamento de pré-processamentoEscalonamento, imputação, seleção de atributos ou reamostragem ajustados em todas as linhas antes da divisão, como no experimento acimaAjustar cada etapa só dentro da parte de treino e comparar as notas
Vazamento do alvoUm atributo registrado depois do desfecho, ou por causa dele: um campo de motivo de cancelamento num modelo de churn, uma marca de cobrança num modelo de créditoPara cada atributo, perguntar quando seu valor passou a ser conhecido em relação ao momento da previsão
Vazamento de grupoO mesmo cliente, paciente, dispositivo ou domicílio aparece no treino e no teste, e o modelo memoriza identidadesDividir por grupo, nunca por linha, e checar a sobreposição
Vazamento temporalDivisão aleatória em dados ordenados no tempo, ou atributos reconstruídos com informação posterior à data da previsãoTreinar no passado, testar no futuro e usar retratos dos atributos em cada ponto no tempo

O vazamento do alvo é o mais perigoso, porque pode ser quase perfeito. Um modelo de churn com um campo que registra "encerramento de conta iniciado" terá uma AUC perto de 1 e será inútil, já que, quando esse campo é preenchido, o cliente já foi embora. Uma boa regra prática é que, num problema de negócios difícil, uma AUC acima de 0,95 é motivo para procurar um vazamento antes de ser motivo para comemorar.

O vazamento de grupo é o mais traiçoeiro. Se um conjunto de dados tem dez consultas por paciente e as linhas são divididas ao acaso, as consultas de cada paciente caem nas duas metades, e um modelo que reconhece um paciente pelas idiossincrasias dos exames laboratoriais pontua bem nas consultas de teste. Num sistema em produção, ele encontra pacientes novos, e a habilidade que aprendeu não se transfere. O mesmo vale para clientes com muitos pedidos, para máquinas com muitas leituras de sensores e para documentos que foram divididos em muitos pedaços.

O vazamento temporal se esconde na engenharia de atributos. Uma coluna de "valor do tempo de vida do cliente" exportada hoje do data warehouse contém o futuro de cada cliente histórico. Treinar com ela para prever o churn do ano passado dá ao modelo acesso ao que aconteceu depois da data da previsão. A correção é a correção em cada ponto no tempo: todo atributo precisa ser reconstruído como teria sido visto no dia da previsão. Os repositórios de atributos existem para impor isso, e tabelas comuns raramente impõem.

Quando o problema é outro mundo

Nem todo modelo que falhou vazou. Alguns foram avaliados com honestidade num lugar e implantados em outro. Em 2021, uma equipe da Universidade de Michigan publicou uma validação externa do Epic Sepsis Model, uma ferramenta proprietária amplamente implantada em hospitais dos EUA, em 38.455 internações. Relataram uma área sob a curva de 0,63, sensibilidade de 33%, valor preditivo positivo de 12% e alertas em 18% de todos os pacientes internados. O modelo deixou de identificar 67% dos pacientes que desenvolveram sepse e, entre os casos em que os médicos ainda não haviam reconhecido a condição, identificou apenas 7%. O estudo saiu no JAMA Internal Medicine.

O fornecedor contestou como o estudo definiu sepse, argumentando que uma definição baseada em códigos de faturamento não era a clinicamente significativa, e esse é um ponto de discordância legítimo. Ele ilustra o segundo problema de um número de destaque. Um rótulo é uma definição, e um modelo pontuado contra uma definição durante o desenvolvimento pode ser julgado contra outra no hospital, no banco ou no armazém em que é usado. A leitura sensata do episódio é que um número de validação interna descreve o desempenho sob os dados e as definições do desenvolvedor, e quem compra precisa conhecer os dois antes de confiar nele.

Um atalho que o modelo consegue ver

Algumas falhas vêm de fatores de confusão que um modelo aprende em vez do que você queria. John Zech e colegas testaram em 2018 se uma rede profunda treinada para detectar pneumonia em radiografias de tórax funcionaria em hospitais diferentes do que forneceu seus dados de treino. Usaram 158.323 imagens de três instituições. Um modelo treinado com dados reunidos do NIH Clinical Center e do Mount Sinai alcançou uma AUC interna de 0,931. Em imagens da Indiana University, pontuou 0,815. A explicação estava visível nos dados. A prevalência de pneumonia era de 34,2% no Mount Sinai e de cerca de 1% nos outros dois locais, de modo que apenas adivinhar o hospital dava uma AUC de 0,861 nos dados reunidos. E a rede conseguia dizer de que hospital vinha uma imagem, com mais de 99,9% de acerto nos dois locais em que os autores testaram, embora não tenham conseguido estabelecer por completo quais pistas ela usava. Parte do que ela aprendeu foi onde a imagem foi feita.

Para uma empresa, a lição é perguntar o que mais nos dados prevê o rótulo. Um modelo de fraude pode aprender qual agência trata os sinistros. Um classificador de chamados de suporte pode aprender qual atendente escreveu o chamado. Nenhum dos dois erra no conjunto de teste, e ambos falham na primeira vez em que o negócio mudar quem senta onde.

Como pegar isso antes que a diretoria pegue

Alguns hábitos encontram a maior parte disso cedo e custam muito pouco em comparação com uma implantação ruim.

Rode o teste de embaralhamento de rótulos. Pegue o pipeline inteiro, dos dados brutos à métrica final, e rode-o de novo com os rótulos permutados ao acaso. A nota precisa cair ao nível do acaso. Se não cair, algo no pipeline está vendo informação que não deveria, que é exatamente o que o experimento do começo deste ensaio detecta. O teste não exige conhecimento do domínio e leva minutos, e é a verificação mais barata que conheço.

Conte os experimentos. Gavin Cawley e Nicola Talbot mostraram em 2010 que, quando hiperparâmetros são ajustados otimizando uma nota de validação cruzada, essa mesma nota é uma estimativa enviesada do desempenho, e a degradação por sobreajuste do critério de seleção pode ser surpreendentemente grande, muitas vezes comparável às diferenças entre algoritmos de aprendizado. Uma equipe que tenta 200 configurações e relata a melhor nota usou os dados de teste 200 vezes. A validação cruzada aninhada, ou um conjunto reservado só para o modelo final, remove o viés.

Mantenha um conjunto final reservado em que ninguém toca até o fim. Cada vez que uma equipe olha para um conjunto de teste e ajusta o modelo, o conjunto de teste vaza um pouco. Um conjunto reservado usado uma única vez, depois que todas as decisões estão congeladas, dá uma estimativa honesta. Guarde-o num lugar que a equipe de modelagem não consiga ler sem abrir um chamado.

Torne explícitos o tempo e os grupos na divisão. Escreva, na documentação do projeto, a unidade de previsão (um cliente, um pedido, uma consulta de paciente) e o momento da previsão, e construa a divisão a partir dessas duas frases. Quem revisar o modelo deve poder conferir a divisão com as frases.

Audite os atributos quanto ao momento. Para cada coluna, registre o sistema que a produz e o momento em que ela fica disponível. Atributos sem uma resposta defensável são removidos até que tenham uma.

Para projetos de estilo científico, use uma lista de verificação estruturada. Em 2024, Kapoor, Narayanan e 17 colegas publicaram o REFORMS na Science Advances, uma lista de consenso com 32 itens em oito seções, para pesquisadores, revisores e periódicos. Muitos de seus itens são perguntas que um comitê de revisão de modelos poderia adotar sem mudanças.

O mesmo erro nas avaliações de modelos de linguagem

O vazamento também aparece em avaliações de modelos de linguagem, de uma forma fácil de reconhecer hoje. Quando itens de teste estão presentes nos dados de treino, as notas medem memória. O estudo da Scale AI que escreveu problemas novos parecidos com um benchmark popular de matemática encontrou algumas famílias de modelos pontuando até 8% menos nos problemas novos. Uma versão mais sutil ocorre em sistemas com recuperação: se as perguntas de avaliação são geradas por um modelo de linguagem a partir dos mesmos documentos que o sistema recupera, e a mesma família de modelos as responde, o teste está em parte medindo a concordância do modelo consigo mesmo.

O remédio tem o mesmo formato de antes. Mantenha alguns itens de teste privados. Escreva ao menos parte da avaliação à mão, a partir de perguntas reais de usuários. E pergunte, diante de todo número impressionante, o que o modelo teve permissão para ver.

A correção organizacional

A parte difícil é o incentivo. Quem constrói um modelo quer que ele funcione, e uma nota alta confirma isso. Revisar a própria avaliação é um controle fraco. Separe os papéis sempre que possível, de modo que alguém que não construiu o pipeline escreva a divisão e rode o teste de embaralhamento. Trate um resultado bom demais como um incidente a investigar. O modelo que diz o que você esperava ouvir é o que deve ser conferido com mais rigor.

Fontes

  1. Hastie, T., Tibshirani, R., Friedman, J. (2009). The Elements of Statistical Learning, 2ª edição, seção 7.10.2, The Wrong and Right Way to Do Cross-Validation. Springer.
  2. Kapoor, S., Narayanan, A. (2022). Leakage and the Reproducibility Crisis in ML-based Science. arXiv:2207.07048; publicado na Patterns (2023).
  3. Wong, A., Otles, E., Donnelly, J. P., et al. (2021). External Validation of a Widely Implemented Proprietary Sepsis Prediction Model in Hospitalized Patients. JAMA Internal Medicine 181(8).
  4. Kapoor, S., Cantrell, E. M., Peng, K., et al. (2024). REFORMS: Consensus-based Recommendations for Machine-learning-based Science. Science Advances 10(18), eadk3452.
  5. Zhang, H., Da, J., Lee, D., et al. (2024). A Careful Examination of Large Language Model Performance on Grade School Arithmetic. NeurIPS 2024 Datasets and Benchmarks. arXiv:2405.00332.
  6. Simulação descrita no início deste ensaio: 100 linhas, 2.000 colunas de ruído, rótulos aleatórios, 20 atributos escolhidos pela separação das médias das classes, classificador de centroide mais próximo, validação cruzada de cinco partes, 12 sementes aleatórias (outubro de 2026).
  7. Zech, J. R., Badgeley, M. A., Liu, M., Costa, A. B., Titano, J. J., Oermann, E. K. (2018). Variable generalization performance of a deep learning model to detect pneumonia in chest radiographs: A cross-sectional study. PLOS Medicine 15(11).
  8. Cawley, G. C., Talbot, N. L. C. (2010). On Over-fitting in Model Selection and Subsequent Selection Bias in Performance Evaluation. Journal of Machine Learning Research 11.