Eu tenho um conjunto de dados com N ~ 5000 e faltando cerca de 1/2 em pelo menos uma variável importante. O principal método analítico serão os riscos proporcionais de Cox.
Eu pretendo usar várias imputações. Também estarei me dividindo em um trem e um conjunto de testes.
Devo dividir os dados e depois imputar separadamente, ou imputar e depois dividir?
Se é importante, eu vou estar usando PROC MI
no SAS
.
cross-validation
survival
multiple-imputation
train
Peter Flom - Restabelece Monica
fonte
fonte
Respostas:
Você deve dividir antes do pré-processamento ou imputação.
A divisão entre treinamento e conjunto de testes é uma tentativa de replicar a situação em que você possui informações passadas e está construindo um modelo que será testado em informações futuras ainda desconhecidas: o conjunto de treinamento substitui o passado e o conjunto de testes assume o lugar do futuro, para que você só teste seu modelo treinado uma vez.
Tendo em mente a analogia do passado / futuro, isso significa qualquer coisa que você faça para pré-processar ou processar seus dados, como imputar valores ausentes, que você deve fazer apenas no conjunto de treinamento. Você pode se lembrar do que fez no seu conjunto de treinamento se o seu conjunto de testes também precisar de pré-processamento ou imputação, para que você faça da mesma maneira nos dois conjuntos.
Adicionado a partir dos comentários: se você usar os dados de teste para afetar os dados de treinamento, os dados de teste serão usados para criar seu modelo, portanto, eles deixarão de ser dados de teste e não fornecerão um teste justo do seu modelo. Você corre o risco de se ajustar demais e foi para desencorajar isso que você separou os dados do teste em primeiro lugar
fonte
Acho melhor você se separar antes de imputar. Por exemplo, você pode atribuir valores ausentes à média da coluna. Nesse caso, se você atribuir primeiro o conjunto de dados train + válido e dividir a seguir, utilizou o conjunto de dados de validação antes de criar seu modelo, e é assim que um problema de vazamento de dados entra em cena.
Mas você pode perguntar, se eu imputar após a divisão, pode ser muito tedioso quando eu precisar fazer a validação cruzada. Minha sugestão para isso é usar o pipeline do sklearn. Ele realmente simplifica seu código e reduz a chance de cometer um erro. Consulte Pipeline
fonte
Só para adicionar o exposto, eu também favoreceria a divisão antes da imputação ou qualquer tipo de pré-processamento. Nada do que você faz com os dados do treinamento deve ser informado pelos dados do teste (a analogia é que o futuro não deve afetar o passado). Você pode se lembrar do que fez no seu conjunto de treinamento, se ele também precisar de pré-processamento ou imputação, para que você faça da mesma maneira nos dois conjuntos (a analogia é que você pode usar o passado para ajudar a prever o futuro) .
Se você usar os dados de teste para afetar os dados de treinamento de alguma forma, os dados de teste estão sendo usados para construir seu modelo; portanto, deixam de ser dados de teste e não fornecerão um teste justo de seu modelo. Você corre o risco de se adaptar, e foi para desencorajar isso que você separou os dados do teste em primeiro lugar!
Eu acho que o pacote de intercalação em r é muito útil nesse cenário. Achei especificamente que esse post é extremamente útil https://topepo.github.io/caret/model-training-and-tuning.html
fonte