Estou construindo um fluxo de trabalho para criar modelos de aprendizado de máquina (no meu caso, usando Python pandas
e sklearn
pacotes) 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.Imputer
classe, usando o pandas.DataFrame.fillna
mé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:
- crie uma tabela de valores substitutos (por exemplo, média / mediana / modo, geral ou por grupo) para cada coluna incompleta
- associe a tabela de valores substitutos à tabela original para atribuir um valor substituto para cada linha e coluna incompleta
- 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!