Imputazione prima o dopo la divisione in treno e prova?


18

Ho un set di dati con N ~ 5000 e circa 1/2 mancante su almeno una variabile importante. Il principale metodo analitico saranno i rischi proporzionali di Cox.

Ho intenzione di utilizzare l'imputazione multipla. Mi dividerò anche in un treno e un set di test.

Devo dividere i dati e quindi imputare separatamente, oppure imputare e quindi dividere?

Se è importante, userò PROC MIin SAS.


2
50% di valori mancanti per una variabile cruciale? Ugh. Anziché imputare, perché non creare una categoria "Mancante" per la variabile?
RobertF,

Nessuna variabile ha il 50% mancante, ma almeno il 50% manca su almeno una. Inoltre, sono continui, quindi "mancare" rovinerebbe le cose.
Peter Flom - Ripristina Monica

Ah. Mi innervosisco usando l'imputazione. Mi chiedo il merito di avere una variabile continua con valori del 50% imputati rispetto alla conversione del cont. variabile a categoriale con una categoria 'Missing' più abbastanza bin per catturare il comportamento dei valori non mancanti?
RobertF,

Non mi piace il binning delle variabili continue.
Peter Flom - Ripristina Monica

Risposte:


20

È necessario suddividere prima della pre-elaborazione o dell'imputazione.

La divisione tra training e set di test è un tentativo di replicare la situazione in cui si hanno informazioni passate e si sta costruendo un modello che verrà testato su informazioni future ancora sconosciute: il set di training prende il posto del passato e il set di test prende il luogo del futuro, quindi puoi testare il tuo modello addestrato solo una volta.

Tenendo presente l'analogia passata / futura, ciò significa che qualsiasi cosa tu faccia per pre-elaborare o elaborare i tuoi dati, come imputare valori mancanti, dovresti fare solo sul set di formazione. Puoi quindi ricordare cosa hai fatto al tuo set di allenamento se il tuo set di test necessita anche di pre-elaborazione o imputazione, in modo da farlo allo stesso modo su entrambi i set.

Aggiunto dai commenti: se si utilizzano i dati del test per influire sui dati di allenamento, i dati del test vengono utilizzati per costruire il modello, quindi cessano di essere dati di test e non forniranno un test equo del modello. Rischiate un eccesso di adattamento ed è stato per scoraggiare ciò che, in primo luogo, avete separato i dati del test


Quando dici "lo fai allo stesso modo su entrambi i set", vuoi dire: "usa lo stesso metodo per imputare i dati mancanti nel set di test, ma NON gli stessi dati"?
timwiz,

@colorlace Usa l'analogia passata / futura. Hai usato il set di allenamento in passato e imputato alcuni valori. Ora otterrai il set di test in futuro e desideri imputare alcuni dei suoi valori; presumibilmente utilizzerai lo stesso metodo di prima applicato ai dati del test (anche se sei libero di incorporare ciò che hai appreso dai dati di allenamento)
Henry,

Se "sei libero di incorporare ciò che hai appreso dai dati di addestramento", come è diverso dal non dividere prima di imputare.
timwiz,

1
@colorlace: quel punto finale è proprio quello che sto dicendo: nulla di ciò che fai con i dati di allenamento dovrebbe essere informato dai dati di test (l'analogia è che il futuro non dovrebbe influenzare il passato), ma cosa fai con i dati di test può essere informato dai dati di allenamento (l'analogia è che puoi usare il passato per predire il futuro)
Henry,

1
@colorlace: se si utilizzano i dati del test per influire sui dati di allenamento, i dati del test vengono utilizzati per costruire il modello, quindi cessano di essere dati di test e non forniranno un test equo del modello. Rischi di esagerare, ed è stato per scoraggiare questo che hai separato i dati del test in primo luogo
Henry,

1

Penso che faresti meglio a separarti prima di fare l'imputazione. Ad esempio, potresti voler imputare i valori mancanti con la media della colonna. In questo caso, se imputi prima con il set di dati train + valid e dividi successivamente, hai usato il set di dati di validazione prima di costruire il tuo modello, ecco come appare un problema di perdita di dati.

Ma potresti chiedere, se imputo dopo la divisione, potrebbe essere troppo noioso quando devo fare la validazione incrociata. Il mio suggerimento è quello di utilizzare la pipeline sklearn. Semplifica davvero il tuo codice e riduce la possibilità di fare un errore. Vedi pipeline


0

Solo per aggiungere quanto sopra, favorirei anche la suddivisione prima dell'imputazione o qualsiasi tipo di pre-elaborazione. Nulla di ciò che fai con i dati di allenamento dovrebbe essere informato dai dati di test (l'analogia è che il futuro non dovrebbe influenzare il passato). Puoi quindi ricordare cosa hai fatto al tuo set di allenamento se il tuo set di test necessita anche di pre-elaborazione o imputazione, in modo da farlo allo stesso modo su entrambi i set (l'analogia è che puoi usare il passato per aiutare a prevedere il futuro) .

Se si utilizzano i dati del test per influire in alcun modo sui dati di allenamento, i dati del test vengono utilizzati per costruire il modello, quindi cessano di essere dati di test e non forniranno un test equo del modello. Rischi di non adattarti, ed è stato per scoraggiare questo che hai separato i dati del test in primo luogo!

Penso che il pacchetto del cursore in r sia molto utile in quell'ambientazione. Ho trovato in particolare quel post estremamente utile https://topepo.github.io/caret/model-training-and-tuning.html

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.