Imputasi sebelum atau sesudah pemisahan ke dalam kereta dan ujian?

18

Saya memiliki satu set data dengan N ~ 5000 dan sekitar 1/2 hilang pada setidaknya satu variabel penting. Metode analitik utama adalah bahaya proporsional Cox.

Saya berencana untuk menggunakan beberapa imputasi. Saya juga akan membagi menjadi set kereta dan tes.

Haruskah saya membagi data dan kemudian menghubungkannya secara terpisah, atau menghubungkan dan kemudian membagi?

Jika hal itu penting, saya akan menggunakan PROC MIdi SAS.

Peter Flom - Pasang kembali Monica
sumber
2
50% nilai yang hilang untuk variabel penting? Ugh. Daripada menyalahkan, mengapa tidak membuat kategori 'Hilang' untuk variabel?
RobertF
Tidak ada satu variabel pun yang 50% hilang, tetapi sekitar 50% tidak ada pada setidaknya satu variabel. Juga, mereka terus menerus, jadi "hilang" akan mengacaukan segalanya.
Peter Flom - Pasang kembali Monica
Ah. Saya merasa gugup menggunakan imputasi. Saya bertanya-tanya tentang manfaat memiliki variabel kontinu dengan nilai 50% diperhitungkan vs mengkonversi kont. variabel ke kategorikal dengan kategori 'Hilang' plus tempat sampah yang cukup untuk menangkap perilaku nilai-nilai yang tidak hilang?
RobertF
Saya tidak suka binning variabel kontinu.
Peter Flom - Reinstate Monica

Jawaban:

20

Anda harus berpisah sebelum pra-pemrosesan atau imputasi.

Pembagian antara pelatihan dan set tes adalah upaya untuk mereplikasi situasi di mana Anda memiliki informasi masa lalu dan sedang membangun model yang akan Anda uji pada informasi yang belum diketahui di masa mendatang: set pelatihan menggantikan masa lalu dan set tes mengambil tempat masa depan, sehingga Anda hanya bisa menguji model terlatih Anda sekali.

Dengan mengingat analogi masa lalu / masa depan, ini berarti apa pun yang Anda lakukan untuk melakukan pra-proses atau memproses data Anda, seperti memasukkan nilai-nilai yang hilang, yang harus Anda lakukan pada pelatihan yang ditetapkan saja. Anda kemudian dapat mengingat apa yang Anda lakukan pada set pelatihan Anda jika set tes Anda juga perlu pra-pemrosesan atau imputasi, sehingga Anda melakukannya dengan cara yang sama pada kedua set.

Ditambahkan dari komentar: jika Anda menggunakan data uji untuk mempengaruhi data pelatihan, maka data uji digunakan untuk membangun model Anda, sehingga tidak lagi menjadi data uji dan tidak akan memberikan uji yang adil terhadap model Anda. Anda berisiko overfitting, dan itu untuk mencegah ini bahwa Anda memisahkan data tes di tempat pertama

Henry
sumber
Ketika Anda mengatakan "Anda melakukannya dengan cara yang sama pada kedua set", apakah maksud Anda: "menggunakan metode yang sama untuk memasukkan data yang hilang dalam set tes, tetapi BUKAN data yang sama"?
timwiz
@ colorlace Gunakan analogi masa lalu / masa depan. Anda menggunakan set pelatihan di masa lalu, dan menghitung beberapa nilai. Anda sekarang mendapatkan set tes di masa depan, dan ingin menyalahkan beberapa nilainya; Anda mungkin akan menggunakan metode yang sama seperti sebelumnya diterapkan pada data tes (meskipun Anda bebas untuk memasukkan apa yang Anda pelajari dari data pelatihan)
Henry
Jika Anda "bebas menggabungkan apa yang Anda pelajari dari data pelatihan", lalu bagaimana bedanya dengan tidak memisahkan sebelum memasukkannya.
timwiz
1
@ colorlace: titik akhir itu persis seperti yang saya katakan: tidak ada yang Anda lakukan dengan data pelatihan yang harus diinformasikan oleh data tes (analoginya adalah bahwa masa depan tidak boleh mempengaruhi masa lalu), tetapi apa yang Anda lakukan dengan data uji dapat diinformasikan oleh data pelatihan (analoginya adalah Anda dapat menggunakan masa lalu untuk membantu memprediksi masa depan)
Henry
1
@colorlace - jika Anda menggunakan data uji untuk memengaruhi data pelatihan, maka data uji digunakan untuk membangun model Anda, sehingga tidak lagi menjadi data uji dan tidak akan memberikan uji yang adil terhadap model Anda. Anda berisiko overfitting, dan itu untuk mencegah ini bahwa Anda memisahkan data tes di tempat pertama
Henry
1

Saya pikir Anda sebaiknya berpisah sebelum melakukan imputasi. Misalnya, Anda mungkin ingin memasukkan nilai yang hilang dengan rata-rata kolom. Dalam hal ini, jika Anda menyalahkan pertama dengan set data kereta + yang valid dan membelah selanjutnya, maka Anda telah menggunakan set data validasi sebelum Anda membangun model Anda, yang merupakan bagaimana masalah kebocoran data muncul dalam gambar.

Tetapi Anda mungkin bertanya, jika saya menyalahkan setelah pemisahan, mungkin terlalu membosankan ketika saya perlu melakukan validasi silang. Saran saya untuk itu adalah menggunakan pipa sklearn. Ini benar-benar menyederhanakan kode Anda, dan mengurangi kemungkinan melakukan kesalahan. Lihat Saluran Pipa

cc458
sumber
0

Hanya untuk menambahkan di atas saya juga akan lebih suka spliting sebelum memasukkan atau jenis pra-pemrosesan. Tidak ada yang Anda lakukan dengan data pelatihan yang harus diinformasikan oleh data tes (analoginya adalah bahwa masa depan seharusnya tidak mempengaruhi masa lalu). Anda kemudian dapat mengingat apa yang Anda lakukan pada set pelatihan Anda jika set tes Anda juga perlu pra-pemrosesan atau imputasi, sehingga Anda melakukannya dengan cara yang sama pada kedua set (analoginya adalah Anda dapat menggunakan masa lalu untuk membantu memprediksi masa depan) .

Jika Anda menggunakan data uji untuk mempengaruhi data pelatihan dengan cara apa pun, maka data uji digunakan untuk membangun model Anda, sehingga tidak lagi menjadi data uji dan tidak akan memberikan uji yang adil terhadap model Anda. Anda berisiko pas, dan itu untuk mencegah ini bahwa Anda memisahkan data tes di tempat pertama!

Saya pikir paket caret di r sangat berguna dalam pengaturan itu. Saya menemukan secara spesifik bahwa posting itu sangat membantu https://topepo.github.io/caret/model-training-and-tuning.html

ALEX.VAMVAS
sumber