Tes pemeriksaan data penting

93

Dalam peran pekerjaan saya, saya sering bekerja dengan kumpulan data orang lain, non-pakar membawakan saya data klinis dan saya membantu mereka untuk meringkasnya dan melakukan tes statistik.

Masalah yang saya miliki adalah bahwa dataset yang saya bawa hampir selalu penuh dengan kesalahan ketik, inkonsistensi, dan segala macam masalah lainnya. Saya tertarik untuk mengetahui apakah orang lain memiliki tes standar yang mereka lakukan untuk mencoba memeriksa set data yang masuk.

Saya biasa menggambar histogram dari masing-masing variabel hanya untuk melihat tetapi saya sekarang menyadari ada banyak kesalahan mengerikan yang dapat bertahan dalam tes ini. Sebagai contoh, saya memiliki dataset pengukuran berulang hari yang lalu di mana, untuk beberapa individu, ukuran yang diulang identik pada Waktu 2 seperti pada Waktu 1. Ini kemudian terbukti salah, seperti yang Anda harapkan. Dataset lain memiliki seseorang yang berubah dari sangat tidak teratur (diwakili oleh skor tinggi) menjadi bebas masalah, diwakili oleh 0 di seluruh papan. Ini tidak mungkin, walaupun saya tidak dapat membuktikannya secara pasti.

Jadi tes dasar apa yang bisa saya jalankan pada setiap dataset untuk memastikan bahwa mereka tidak memiliki kesalahan ketik dan tidak mengandung nilai yang tidak mungkin?

Terima kasih sebelumnya!

Chris Beeley
sumber
3
Pertanyaan bagus Saya menduga akan sulit untuk memberikan jawaban umum karena pemeriksaan akan tergantung pada spesifikasi set data.
mark999
2
@ mark999 Saya setuju. Saya akan tertarik untuk membaca jawaban atas pertanyaan ini. Ada beberapa strategi umum, tetapi saya menemukan bahwa banyak pengecekan adalah tentang membangun harapan spesifik domain, baik tentang seperti apa data seharusnya, dan beberapa kesalahan umum yang dapat muncul.
Jeromy Anglim
1
Pembaca di sini juga akan tertarik pada utas berikut: Pedoman jaminan kualitas dan kontrol kualitas (qa / qc) untuk database .
gung - Reinstate Monica

Jawaban:

77

Ini membantu untuk memahami bagaimana data direkam.

Biarkan saya berbagi cerita . Dahulu kala, banyak set data disimpan hanya dalam bentuk fading hardcopy. Pada masa-masa kelam itu saya membuat kontrak dengan sebuah organisasi (dengan silsilah dan ukuran besar; banyak dari Anda mungkin memiliki sahamnya) untuk mengomputerisasi sekitar 10 ^ 5 catatan data pemantauan lingkungan di salah satu pabriknya. Untuk melakukan ini, saya pribadi menandai rak laporan laboratorium (untuk menunjukkan di mana data itu berada), membuat formulir entri data, dan dikontrak dengan agen temporer untuk melek hurufpekerja mengetik data ke dalam formulir. (Ya, Anda harus membayar ekstra untuk orang yang bisa membaca.) Karena nilai dan sensitivitas data, saya melakukan proses ini secara paralel dengan dua pekerja sekaligus (yang biasanya berubah dari hari ke hari). Butuh beberapa minggu. Saya menulis perangkat lunak untuk membandingkan dua set entri, secara sistematis mengidentifikasi dan memperbaiki semua kesalahan yang muncul.

Anak laki-laki ada kesalahan! Apa yang salah? Cara yang baik untuk menggambarkan dan mengukur kesalahan adalah pada tingkat catatan dasar , yang dalam situasi ini adalah deskripsi hasil analisis tunggal (konsentrasi beberapa bahan kimia, sering) untuk sampel tertentu yang diperoleh pada titik pemantauan tertentu pada suatu tanggal tertentu. Dalam membandingkan dua set data, saya menemukan:

  • Kesalahan kelalaian : satu dataset akan menyertakan catatan, yang lain tidak. Ini biasanya terjadi karena (a) satu atau dua baris akan diabaikan di bagian bawah halaman atau (b) seluruh halaman akan dilewati.

  • Kesalahan jelas kelalaian yang benar-benar kesalahan entri data. Catatan diidentifikasi oleh nama titik pemantauan, tanggal, dan "analit" (biasanya nama kimia). Jika salah satu dari ini memiliki kesalahan ketik, itu tidak akan cocok dengan catatan lain yang terkait dengannya. Akibatnya, catatan yang benar menghilang dan catatan yang salah muncul.

  • Duplikasi palsu . Hasil yang sama dapat muncul dalam berbagai sumber, ditranskrip beberapa kali, dan tampaknya merupakan tindakan berulang yang benar ketika tidak. Duplikat mudah untuk dideteksi, tetapi memutuskan apakah itu salah tergantung pada mengetahui apakah duplikat akan muncul di dataset. Terkadang Anda tidak bisa tahu.

  • Kesalahan entri data Frank . Yang "baik" mudah ditangkap karena mereka mengubah jenis datum: menggunakan huruf "O" untuk digit "0", misalnya, mengubah angka menjadi bukan-angka. Kesalahan baik lainnya mengubah nilainya sehingga dapat dideteksi dengan uji statistik. (Dalam satu kasus, digit utama dalam "1.000.010 mg / Kg" terputus, meninggalkan nilai 10. Itu adalah perubahan besar ketika Anda berbicara tentang konsentrasi pestisida!) Kesalahan buruk sulit ditangkap karena mereka berubah nilai menjadi satu yang cocok (semacam) dengan sisa data, seperti mengetik "80" untuk "50". (Kesalahan semacam ini terjadi pada perangkat lunak OCR sepanjang waktu.)

  • Transposisi . Nilai yang benar dapat dimasukkan tetapi dikaitkan dengan kunci rekaman yang salah. Ini berbahaya, karena karakteristik statistik global dari dataset mungkin tetap tidak berubah, tetapi perbedaan palsu dapat dibuat antar kelompok. Mungkin hanya mekanisme seperti double-entry yang mampu mendeteksi kesalahan ini.

Setelah Anda mengetahui kesalahan ini dan mengetahui, atau memiliki teori, bagaimana hal itu terjadi, Anda dapat menulis skrip untuk mengendalikan set data Anda tentang kemungkinan adanya kesalahan tersebut dan menandai mereka untuk perhatian lebih lanjut. Anda tidak selalu dapat menyelesaikannya, tetapi setidaknya Anda dapat menyertakan bidang "komentar" atau "tanda kualitas" untuk menemani data selama analisis mereka nanti.

Sejak saat itu saya telah memperhatikan masalah kualitas data dan memiliki lebih banyak peluang untuk melakukan pemeriksaan komprehensif terhadap data statistik besar. Tidak ada yang sempurna; mereka semua mendapat manfaat dari pemeriksaan kualitas. Beberapa prinsip yang telah saya kembangkan selama bertahun-tahun untuk melakukan ini termasuk

  1. Kapan pun memungkinkan, buat redundansi dalam entri data dan prosedur transkripsi data: checksum, total, entri berulang: apa pun untuk mendukung pemeriksaan internal otomatis atas konsistensi.

  2. Jika mungkin, buat dan manfaatkan basis data lain yang menggambarkan seperti apa data itu: yaitu, metadata yang bisa dibaca komputer. Misalnya, dalam eksperimen obat Anda mungkin tahu sebelumnya bahwa setiap pasien akan terlihat tiga kali. Ini memungkinkan Anda untuk membuat database dengan semua catatan yang benar dan pengidentifikasi mereka dengan nilai yang hanya menunggu untuk diisi. Isi dengan data yang diberikan kepada Anda dan kemudian periksa duplikat, kelalaian, dan data tak terduga.

  3. Selalu menormalkan data Anda (khususnya, masukkan ke dalam setidaknya bentuk normal keempat ), terlepas dari bagaimana Anda berencana untuk memformat dataset untuk analisis. Ini memaksa Anda untuk membuat tabel dari setiap entitas yang berbeda secara konseptual yang Anda modelkan. (Dalam kasus lingkungan, ini akan mencakup tabel lokasi pemantauan, sampel, bahan kimia (sifat, rentang tipikal, dll.), Tes sampel tersebut (tes biasanya mencakup serangkaian bahan kimia), dan hasil individual dari tes tersebut. Dengan melakukan itu, Anda membuat banyak pemeriksaan efektif kualitas dan konsistensi data dan mengidentifikasi banyak nilai yang berpotensi hilang atau duplikat atau tidak konsisten.

    Upaya ini (yang membutuhkan keterampilan pemrosesan data yang baik tetapi langsung) sangat efektif. Jika Anda bercita-cita untuk menganalisis kumpulan data yang besar atau kompleks dan tidak memiliki pengetahuan yang baik tentang database relasional dan teorinya, tambahkan itu ke daftar hal-hal yang harus dipelajari sesegera mungkin. Itu akan membayar dividen sepanjang karir Anda.

  4. Selalu lakukan sebanyak mungkin pemeriksaan "bodoh" yang Anda bisa . Ini adalah verifikasi otomatis dari hal-hal yang jelas sehingga tanggal jatuh ke dalam periode yang diharapkan, jumlah pasien (atau bahan kimia atau apa pun) selalu bertambah dengan benar, bahwa nilai selalu masuk akal (misalnya, pH harus antara 0 dan 14 dan mungkin dalam kisaran yang jauh lebih sempit untuk, katakanlah, pembacaan pH darah), dll. Di sinilah keahlian domain dapat menjadi yang paling membantu: ahli statistik dapat dengan berani mengajukan pertanyaan bodoh dari para ahli dan mengeksploitasi jawaban untuk memeriksa data.

Tentu saja, banyak yang bisa dikatakan - pokok bahasan itu layak buku - tetapi ini cukup untuk merangsang gagasan.

whuber
sumber
5
tambahan yang bagus untuk pedoman QA / QC basis data
David LeBauer
2
Satu pertanyaan lanjutan - subjek bernilai buku - apakah ada buku?
Chris Beeley
5
+1 - whuber jawaban yang indah Saya berharap Anda punya blog :) (Saya ingin sekali menambahkan tulisan Anda ke r-bloggers.com)
Tal Galili
2
Anda harus menulis buku bahwa subjeknya bernilai!
Zach
1
Ini sangat rumit sehingga banyak perusahaan konsultan berspesialisasi dalam "pengambilan data / pembersihan / penyimpanan".
Lucas Reis
25

@whuber membuat saran bagus; Saya hanya akan menambahkan ini: Plot, plot, plot, plot. Scatterplots, histogram, boxplots, lineplots, heatmaps, dan apa pun yang dapat Anda pikirkan. Tentu saja, karena Anda telah menemukan ada kesalahan yang tidak akan terlihat pada plot apa pun tetapi itu adalah tempat yang baik untuk memulai. Pastikan Anda jelas tentang cara perangkat lunak Anda menangani data yang hilang, dll.

Bergantung pada konteksnya Anda bisa menjadi kreatif. Satu hal yang ingin saya lakukan Dengan data multivariat adalah cocok dengan beberapa jenis model faktor / PCA probabilistik (sesuatu yang akan melakukan beberapa imputasi untuk data yang hilang) dan melihat skor untuk komponen sebanyak mungkin. Poin data yang mendapat skor tinggi pada komponen / faktor yang kurang penting sering kali outlier yang mungkin tidak Anda lihat sebaliknya.

JMS
sumber
5
+1 Plotting adalah untuk statistik apa itu pemungutan suara untuk Chicago: sesuatu yang dilakukan semua orang sejak dini dan sering. ;-)
whuber
15

Hal-hal besar yang cenderung saya periksa:

  1. Jenis variabel - untuk melihat bahwa suatu angka adalah angka, dan bukan faktor / karakter (mungkin mengindikasikan beberapa masalah dengan data yang dimasukkan)
  2. Tingkat nilai yang konsisten - untuk melihat bahwa variabel dengan nama "t1" tidak menemukannya lagi dengan nama "t1" atau "t 1"
  3. Pencilan - melihat bahwa rentang nilai masuk akal. (Apakah Anda mendapatkan nilai tekanan darah 0? atau minus?). Di sini kita kadang-kadang menemukan bahwa seseorang dikodekan -5 sebagai nilai yang hilang, atau sesuatu seperti itu.
  4. Batasan linear. Saya tidak menggunakan itu, tetapi beberapa menemukan bahwa mereka ingin memiliki restrukturisasi pada dependensi dari beberapa kolom (kolom A, B harus ditambahkan ke C, atau sesuatu seperti itu). Untuk ini, Anda dapat melihat pada paket deducorrect (saya bertemu pembicara, Mark van der Loo, dalam konferensi useR terakhir - dan sangat terkesan dengan paketnya)
  5. terlalu sedikit keacakan. Terkadang nilai harus dibulatkan ke beberapa nilai, atau terpotong di beberapa titik. Jenis-jenis ini seringkali lebih jelas di sebar plot.
  6. Nilai yang hilang - memastikan bahwa yang hilang tidak terkait dengan beberapa variabel lain (hilang secara acak). Tapi saya tidak punya aturan praktis untuk diberikan di sini.
  7. Baris kosong atau baris yang sebagian besar tidak bernilai. Ini harus (biasanya) ditemukan dan dihilangkan.

Pertanyaan bagus BTW - Saya berharap untuk membaca pengalaman orang lain tentang masalah ini.

Tal Galili
sumber
10

Ketika Anda memiliki ukuran sepanjang waktu (" data longitudinal "), seringkali berguna untuk memeriksa gradien serta distribusi marginal. Gradien ini dapat dihitung pada skala yang berbeda. Secara umum, Anda dapat melakukan transformasi yang berarti pada data Anda (fourier, wavelet) dan memeriksa distribusi marjinal dari data yang diubah.

robin girard
sumber
7

Beberapa yang selalu saya lalui:

  1. Apakah ada jumlah catatan yang seharusnya ada? Misalnya, jika Anda mengambil data dari sumber lain, atau sub-set data elses seseorang, apakah angka Anda terlihat masuk akal. Anda akan berpikir ini akan dibahas, tetapi Anda akan ... terkejut.
  2. Apakah semua variabel Anda ada di sana? Apakah nilai-nilai variabel itu masuk akal? Misalnya, jika variabel Ya / Tidak / Hilang dikodekan "1,2,3" - apa artinya itu?
  3. Di mana nilai-nilai Anda yang hilang? Apakah ada beberapa variabel yang tampaknya terbebani dengan informasi yang hilang? Apakah ada mata pelajaran tertentu dengan sejumlah besar nilai yang hilang.

Itu adalah langkah pertama yang saya lalui untuk memastikan dataset bahkan siap untuk sesuatu seperti analisis data eksplorasi. Hanya duduk, berkeliaran tentang data beberapa "Apakah itu ... sepertinya benar?"

Fomite
sumber
1

Saya akan menggunakan metode pengambilan sampel penerimaan untuk setiap kolom (ini memberikan nomor cut-off di mana Anda dapat menarik garis antara kualitas tinggi dan kualitas rendah), ada kalkulator online untuk itu.

Tareq Shahwan
sumber
3
ini lebih cocok sebagai komentar daripada sebagai jawaban seperti saat ini. tolong uraikan sedikit, berikan tautan ke sumber daya atau referensi, dll.
Antoine
1
Sulit untuk melihat banyak keadaan di mana ini akan efektif dan mudah untuk menemukan banyak yang tidak berfungsi sama sekali (seperti string atau data nominal lainnya) atau mengerikan (karena sepenuhnya mengabaikan semua hubungan multivarian). Tampaknya juga sewenang-wenang, karena kecuali untuk deret waktu (dan beberapa data terkait), tidak ada urutan yang melekat dalam catatan tabel data, sedangkan banyak (jika tidak semua) metode pengambilan sampel penerimaan bergantung pada urutan.
Whuber
Nah, berikut ini kalkulator yang akan digunakan: sqconline.com/... Selama Anda menggunakan sampling penerimaan acak dapat digunakan. Jika Anda ingin menyulitkannya, Anda dapat menggunakan teknik pengambilan sampel sistematis, dan kemudian menggunakan penerimaan sampel pada setiap segmen
Tareq Shahwan