In quale parte del flusso di lavoro dovremmo gestire i dati mancanti?


16

Sto creando un flusso di lavoro per la creazione di modelli di machine learning (nel mio caso, usando Python pandase sklearnpacchetti) 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.Imputerclasse, usando il pandas.DataFrame.fillnametodo, 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:

  1. creare una tabella di valori sostitutivi (ad esempio, media / mediana / modalità, globale o per gruppo) per ogni colonna incompleta
  2. unire la tabella dei valori sostitutivi con la tabella originale per assegnare un valore sostitutivo per ogni riga e colonna incompleta
  3. 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!

Risposte:


14

La mia forte opinione in merito alle attività automatizzate come l'imputazione (ma qui posso includere anche il ridimensionamento, il centraggio, la selezione delle funzionalità, ecc.) È di evitare in qualsiasi modo di fare tali cose senza ispezionare attentamente i dati.

Naturalmente, dopo aver deciso quale tipo di imputazione applicare, può essere automatizzato (presupponendo che i nuovi dati abbiano la stessa forma / problemi).

Quindi, prima di tutto, prendi una decisione saggia. Spesso ho perso tempo cercando di automatizzare queste cose, distruggendo i miei dati. Vi darò alcuni esempi: - un mercato codificato come N / A, che ho perso e considerato Nord / America - numeri come -999.0, perché il produttore di dati non è riuscito a trovare una migliore sostituzione per i dati mancanti - numero come 0 per pressione sanguigna o temperatura corporea, invece di dati mancanti (è difficile immaginare un essere umano vivente con 0 pressione sanguigna) - più segnaposti per dati mancanti, a causa del fatto che i dati sono stati raccolti da varie fonti

Dopodiché devi capire quale tipo di imputazione assomiglierebbe meglio alle informazioni dai tuoi dati per un determinato compito. Spesso è molto più difficile farlo nel modo giusto di quanto sembri.

Dopo tutto ciò, il mio consiglio è di ritardare il compito di imputazione a un livello superiore in cui si dispone di strumenti per riprodurre su nuovi dati e per verificare se i presupposti per i nuovi dati non vengono violati (se possibile).


1
L'automazione +1 non migliora necessariamente le cose, solo in modo più coerente e spesso più veloce!
James,

4

Therriault, davvero felice di sapere che stai usando Vertica! Divulgazione completa, io sono il capo scienziato di dati lì :). Il flusso di lavoro che descrivi è esattamente quello che incontro abbastanza frequentemente e credo fermamente nel preelaborare quei set di dati molto grandi nel database prima di qualsiasi lavoro pyODBC e panda. Suggerirei di creare una vista o una tabella tramite una query basata su file solo per garantire un lavoro riproducibile. In bocca al lupo

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.