Como posso detectar rapidamente trapaças em dados grandes?

7

Suponha que tenhamos um conjunto de dados com milhões de linhas e milhares de colunas e a tarefa seja a classificação binária. Quando executamos um modelo de regressão logística, o desempenho é muito melhor que o esperado, por exemplo, classificação quase perfeita.

Suspeitamos que existem algumas variáveis ​​de trapaça nos dados. Como posso detectá-lo rapidamente?

Aqui, trapacear variáveis ​​significa uma variável que é muito indicativa da resposta e não devemos usá-la. Por exemplo, usamos se uma pessoa faz uma chamada de atendimento ao cliente para prever se uma pessoa comprou ou não um produto.

Haitao Du
fonte
2
Sua idéia de uma "variável trapaceira" aqui parece semelhante à falácia "correlação = causalidade" (ou talvez " pós-dicção "). Mas sua proposta parece mais com "Como determinar se um preditor domina os resultados?". Isso pode ser útil para sinalizar variáveis ​​para mais QA / QC , mas não é determinante. No seu exemplo final, um registro de data e hora nos dados seria determinante (ou seja, a chamada segue a compra, portanto, "trapaceie" porque a seta causal está ao contrário).
GeoMatt22
@ GeoMatt22 obrigado pelo seu comentário, admito que a deserção não é clara. Também estou pensando se a definição deve incluir combinação linear de variáveis ​​em vez de uma variável e definir o quão forte é tratar como "trapaça".
Haitao Du
Penso que "associação forte" não pode ser usada para inferir "causal versus trapaça" de uma maneira puramente lógica. No entanto, no sentido bayesiano, o prior "bom demais para ser verdade" não parece inútil. Mas não tenho certeza de como formalizar isso :) (Em um domínio específico, acho que você pode acumular um "causal anteriorR2PDF "?)
GeoMatt22 5/17/17
nota do processo: você pode querer adiar antes de postar uma resposta, para incentivar o feedback. (Ou publicar uma nota sobre a sua intenção, como eu fiz aqui .)
GeoMatt22
11
@ hxd1011: se você estiver interessado em ver outra instância envolvendo vazamento de dados, consulte este tópico recente . Algumas referências e links adicionais fornecidos também podem ser úteis.
usεr11852

Respostas:

11

Isso às vezes é chamado de "vazamento de dados". Há um bom artigo sobre isso aqui:

Vazamento na mineração de dados: formulação, detecção e prevenção

O artigo acima tem muitos exemplos divertidos (e horripilantes) de vazamento de dados, por exemplo, uma competição de previsão de câncer em que se constatou que os números de identificação dos pacientes tinham uma previsão quase perfeita do câncer futuro, sem querer devido à forma como os grupos foram formados ao longo do estudo .

Não acho que exista uma maneira clara de identificar o vazamento de dados. O documento acima tem algumas sugestões, mas em geral é muito específico para problemas. Como exemplo, você pode definitivamente considerar apenas as correlações entre seus recursos e o destino. No entanto, às vezes você sentirá falta das coisas. Por exemplo, imagine que você está criando um detector de spam de bot para um site como o stackexchange, onde, além de recursos de coleta como tamanho da mensagem, conteúdo etc., você pode potencialmente coletar informações sobre se uma mensagem foi sinalizada por outro usuário. No entanto, se você deseja que o seu detector de bot seja o mais rápido possível, não precisará confiar nos sinalizadores de mensagens gerados pelos usuários. Naturalmente, os bots de spam acumulariam uma tonelada de sinalizadores de mensagens geradas pelo usuário, portanto seu classificador pode começar a confiar nesses sinalizadores, e menos ainda no conteúdo das mensagens. Dessa forma, você deve considerar a remoção de sinalizadores como um recurso para poder marcar bots mais rapidamente do que o esforço do usuário de origem coletiva, ou seja, antes que um grande público seja exposto a suas mensagens.

Outras vezes, você terá um recurso muito estúpido que está causando sua detecção. Há uma boa anedota aqui sobre uma história de como o Exército tentou fabricar um detector de tanque, que tinha precisão quase perfeita, mas acabou detectando dias nublados porque todas as imagens de treinamento com tanques foram tiradas em um dia nublado e todas as imagens de treinamento sem tanques foi levado em um dia claro. Um artigo muito relevante sobre isso é: "Por que devo confiar em você?": Explicando as previsões de qualquer classificador - Ribeiro, et. al.

Alex R.
fonte
11
+1 obrigado por responder minhas perguntas não bem definidas! e agora eu conheço o termo e vou ler a formulação deles!
Haitao Du
No último parágrafo: o exército aparentemente levou essa lição a sério !
GeoMatt22
2
+1 O vazamento mais comum que encontro é um vazamento do futuro. É por isso que não estou muito preocupado com a nova série de "Basta executar seus dados através do nosso algoritmo e ele criará um modelo como um cientista de dados!" produtos. O aprendizado de máquina segue o sinal, mesmo se o sinal for um vazamento.
Wayne
2

Uma maneira de detectar variáveis ​​de trapaça é construir um modelo de árvore e observar as primeiras divisões. Aqui está um exemplo simulado.

cheating_variable=runif(1e3)
x=matrix(runif(1e5),nrow = 1e3)
y=rbinom(1e3,1,cheating_variable)

d=data.frame(x=cbind(x,cheating_variable),y=y)

library(rpart)
library(partykit)
tree_fit=rpart(y~.,d)
plot(as.party(tree_fit))

insira a descrição da imagem aqui

Haitao Du
fonte