Di mana dalam alur kerja kita harus berurusan dengan data yang hilang?

16

Saya sedang membangun alur kerja untuk membuat model pembelajaran mesin (dalam kasus saya, menggunakan Python pandasdan sklearnpaket - paket) dari data yang diambil dari database yang sangat besar (di sini, Vertica melalui SQL dan pyodbc), dan langkah penting dalam proses itu melibatkan memasukkan hilang nilai-nilai prediktor. Ini sangat mudah dalam satu platform analytics atau stats --- baik itu Python, R, Stata, dll--- tapi saya ingin tahu di mana yang terbaik untuk menemukan langkah ini dalam alur kerja multi-platform.

Cukup sederhana untuk melakukan ini dengan Python, baik dengan sklearn.preprocessing.Imputerkelas, menggunakan pandas.DataFrame.fillnametode, atau dengan tangan (tergantung pada kompleksitas metode imputasi yang digunakan). Tapi karena saya akan menggunakan ini untuk puluhan atau ratusan kolom di ratusan juta catatan, saya ingin tahu apakah ada cara yang lebih efisien untuk melakukan ini secara langsung melalui SQL sebelumnya. Selain potensi efisiensi melakukan hal ini dalam platform terdistribusi seperti Vertica, ini akan memiliki manfaat tambahan yang memungkinkan kami untuk membuat saluran pipa otomatis untuk membangun versi tabel "lengkap", jadi kami tidak perlu mengisi set baru nilai yang hilang dari awal setiap kali kita ingin menjalankan model.

Saya belum dapat menemukan banyak panduan tentang ini, tetapi saya membayangkan bahwa kita dapat:

  1. buat tabel nilai-nilai pengganti (misalnya, rata-rata / median / mode, baik keseluruhan atau kelompok) untuk setiap kolom tidak lengkap
  2. bergabung dengan tabel nilai pengganti dengan tabel asli untuk menetapkan nilai pengganti untuk setiap baris dan kolom tidak lengkap
  3. gunakan serangkaian pernyataan kasus untuk mengambil nilai asli jika tersedia dan nilai pengganti sebaliknya

Apakah ini hal yang wajar untuk dilakukan di Vertica / SQL, atau adakah alasan bagus untuk tidak repot dan hanya menanganinya dengan Python saja? Dan jika yang terakhir, apakah ada alasan kuat untuk melakukan ini di panda daripada sklearn atau sebaliknya? Terima kasih!

Therriault
sumber

Jawaban:

14

Pendapat saya yang kuat tentang tugas-tugas otomatis seperti imputasi (tetapi, di sini saya dapat menyertakan juga penskalaan, pemusatan, pemilihan fitur, dll) adalah untuk menghindari cara apa pun melakukan hal-hal seperti itu tanpa memeriksa data Anda dengan cermat.

Tentu saja, setelah memutuskan jenis imputasi apa yang akan diterapkan, bisa otomatis (dengan asumsi bahwa data baru memiliki bentuk / masalah yang sama).

Jadi, sebelum apa pun, ambil keputusan yang bijak. Saya sering membuang-buang waktu untuk mengotomatisasi hal-hal ini, menghancurkan data saya. Saya akan memberikan beberapa contoh: - pasar yang dikodekan sebagai N / A, yang saya lewatkan dan anggap sebagai Utara / Amerika - angka-angka seperti -999.0, karena produsen data tidak dapat menemukan pengganti yang lebih baik untuk data yang hilang - angka seperti 0 untuk tekanan darah atau suhu tubuh, alih-alih data yang hilang (sulit untuk membayangkan manusia yang hidup dengan tekanan darah 0) - beberapa penampung untuk data yang hilang, karena fakta bahwa data tersebut dikumpulkan dari berbagai sumber

Setelah itu, Anda perlu memahami imputasi seperti apa yang lebih menyerupai informasi dari data Anda untuk tugas yang diberikan. Ini seringkali jauh lebih sulit untuk melakukannya dengan benar daripada kelihatannya.

Setelah semua hal itu, saran saya adalah untuk menunda tugas imputasi Anda ke lapisan atas di mana Anda memiliki alat untuk mereproduksi pada data baru dan memeriksa apakah asumsi untuk data baru tidak dilanggar (jika memungkinkan).

rapaio
sumber
1
Otomatisasi +1 tidak selalu membuat segalanya lebih baik, hanya lebih konsisten dan sering kali lebih cepat!
James
4

Therriault, sangat senang mendengar Anda menggunakan Vertica! Pengungkapan penuh, saya adalah ilmuwan data utama di sana :). Alur kerja yang Anda gambarkan adalah persis apa yang saya temui cukup sering dan saya benar-benar percaya pada preprocessing dataset yang sangat besar dalam database sebelum setiap pekerjaan pyODBC dan panda. Saya sarankan membuat tampilan atau tabel melalui kueri berbasis file hanya untuk memastikan pekerjaan yang dapat direproduksi. Semoga berhasil

Will Cairns
sumber