Sto creando un flusso di lavoro per la creazione di modelli di machine learning (nel mio caso, usando Python pandas
e sklearn
pacchetti) da dati estratti da un database molto grande (qui, Vertica tramite SQL e pyodbc
), e un passaggio fondamentale in questo processo prevede l'imputazione mancante valori dei predittori. Questo è semplice all'interno di una singola piattaforma di analisi o statistica --- sia Python, R, Stata, ecc .--- ma sono curioso di sapere dove collocare questo passaggio in un flusso di lavoro multipiattaforma.
È abbastanza semplice farlo in Python, sia con la sklearn.preprocessing.Imputer
classe, usando il pandas.DataFrame.fillna
metodo, sia a mano (a seconda della complessità del metodo di imputazione usato). Ma dal momento che lo userò per dozzine o centinaia di colonne in centinaia di milioni di record, mi chiedo se c'è un modo più efficiente per farlo direttamente tramite SQL in anticipo. A parte le potenziali efficienze nel fare ciò in una piattaforma distribuita come Vertica, ciò avrebbe l'ulteriore vantaggio di consentirci di creare una pipeline automatizzata per la creazione di versioni "complete" di tabelle, quindi non è necessario compilare un nuovo set di valori mancanti da zero ogni volta che vogliamo eseguire un modello.
Non sono stato in grado di trovare molte indicazioni a riguardo, ma immagino che potremmo:
- creare una tabella di valori sostitutivi (ad esempio, media / mediana / modalità, globale o per gruppo) per ogni colonna incompleta
- unire la tabella dei valori sostitutivi con la tabella originale per assegnare un valore sostitutivo per ogni riga e colonna incompleta
- utilizzare una serie di istruzioni case per assumere il valore originale se disponibile e il valore sostitutivo in caso contrario
È una cosa ragionevole da fare in Vertica / SQL o c'è un buon motivo per non disturbare e gestirlo in Python? E se in quest'ultimo caso, c'è un valido motivo per farlo in Panda anziché in Sklearn o viceversa? Grazie!