Onde no fluxo de trabalho devemos lidar com dados ausentes?

16

Estou construindo um fluxo de trabalho para criar modelos de aprendizado de máquina (no meu caso, usando Python pandase sklearnpacotes) a partir de dados extraídos de um banco de dados muito grande (aqui, Vertica por meio de SQL e pyodbc), e uma etapa crítica nesse processo envolve a imputação de falta valores dos preditores. Isso é direto em uma única plataforma de análise ou estatística - seja Python, R, Stata, etc .---, mas estou curioso para saber onde é melhor localizar essa etapa em um fluxo de trabalho de várias plataformas.

É simples o suficiente para fazer isso no Python, com a sklearn.preprocessing.Imputerclasse, usando o pandas.DataFrame.fillnamétodo ou manualmente (dependendo da complexidade do método de imputação usado). Mas como vou usá-lo para dezenas ou centenas de colunas em centenas de milhões de registros, pergunto-me se há uma maneira mais eficiente de fazer isso diretamente através do SQL antes do tempo. Além das eficiências potenciais de fazer isso em uma plataforma distribuída como a Vertica, isso teria o benefício adicional de nos permitir criar um pipeline automatizado para criar versões "completas" de tabelas, portanto, não precisamos preencher um novo conjunto de valores ausentes do zero toda vez que queremos executar um modelo.

Não consegui encontrar muita orientação sobre isso, mas imagino que poderíamos:

  1. crie uma tabela de valores substitutos (por exemplo, média / mediana / modo, geral ou por grupo) para cada coluna incompleta
  2. associe a tabela de valores substitutos à tabela original para atribuir um valor substituto para cada linha e coluna incompleta
  3. use uma série de instruções de caso para obter o valor original, se disponível, e o valor substituto, caso contrário

Isso é uma coisa razoável a se fazer no Vertica / SQL, ou existe um bom motivo para não se preocupar e lidar com isso no Python? E, se este último, existe um argumento forte para fazer isso em pandas, em vez de aprender a aprender ou vice-versa? Obrigado!

Therriault
fonte

Respostas:

14

Minha opinião forte sobre tarefas automatizadas como imputação (mas aqui também posso incluir dimensionamento, centralização, seleção de recursos etc.) é evitar de alguma forma fazer essas coisas sem inspecionar cuidadosamente os dados.

Obviamente, depois de decidir que tipo de imputação aplicar, ela pode ser automatizada (supondo que os novos dados tenham a mesma forma / problemas).

Portanto, antes de qualquer coisa, tome uma decisão sábia. Muitas vezes, perdi tempo tentando automatizar essas coisas, destruindo meus dados. Vou dar alguns exemplos: - um mercado codificado como N / A, que eu perdi e que considerei norte / americano - números como -999,0, porque o produtor de dados não conseguiu encontrar um substituto melhor para os dados ausentes - número como 0 para pressão arterial ou temperatura corporal, em vez de falta de dados (é difícil imaginar um ser humano vivo com 0 pressão arterial) - vários espaços reservados para falta de dados, devido ao fato de os dados terem sido coletados de várias fontes

Depois disso, você precisa entender que tipo de imputação se pareceria melhor com as informações de seus dados para uma determinada tarefa. Muitas vezes, é muito mais difícil fazê-lo corretamente do que parece.

Depois de tudo isso, meu conselho é adiar sua tarefa de imputação para uma camada superior, onde você tem ferramentas para reproduzir novos dados e verificar se as suposições para os novos dados não são violadas (se possível).

rapaio
fonte
1
A automação +1 não necessariamente melhora as coisas, apenas de forma mais consistente e frequentemente mais rápida!
James
4

Therriault, muito feliz em saber que você está usando o Vertica! Divulgação completa, eu sou o principal cientista de dados lá :). O fluxo de trabalho que você descreve é ​​exatamente o que eu encontro com muita frequência e acredito muito no pré-processamento desses conjuntos de dados muito grandes no banco de dados antes de qualquer trabalho com pyODBC e pandas. Eu sugeriria a criação de uma exibição ou tabela por meio de uma consulta baseada em arquivo, apenas para garantir um trabalho reproduzível. Boa sorte

Will Cairns
fonte