Analisis eksploratif bukan penghujung pekerjaan, melainkan pabrik pertanyaan yang dipindahkan ke pengujian berikutnya. Topik ini mempraktikkan pemindahan itu pada dataset latihan, yaitu temuan lonjakan pagi pada segmentasi diubah menjadi hipotesis yang dapat diuji, diperiksa sekilas pada data yang ada, dan dinyatakan batas kepercayaannya secara terbuka. Setelah membacanya, temuan EDA tidak lagi dilaporkan sebagai kesimpulan, melainkan sebagai daftar hipotesis beserta rencana pengujian masing-masing.
Perbedaan temuan dan hipotesis#
Temuan EDA mendeskripsikan data yang sudah dilihat, sedangkan hipotesis menyatakan pola yang diduga berlaku lebih luas dan akan diuji dengan data baru. Keduanya wajib dipisahkan secara eksplisit, sebab pola yang ditemukan pada satu berkas hampir selalu memuat porsi keberuntungan, dan mengklaimnya sebagai kenyataan tanpa pengujian adalah lompatan yang mahal.
Hipotesis yang layak diuji memiliki tiga bagian, yaitu pernyataan polanya, populasi yang dicakupnya, dan cara mengujinya. Contoh dari dataset latihan ini berbunyi “PM2.5 rata-rata lebih tinggi pada jam 07 sampai 09 daripada jam lain, pada data pengukuran per jam, dan diujikan dengan membandingkan dua rata-rata pada sampel hari yang lebih banyak”. Ketiga bagiannya menentukan data apa yang harus dikumpulkan berikutnya.
Pembangkitan hipotesis juga memilah arah pengujian yang tersedia. Beberapa hipotesis dijawab dengan data yang lebih banyak dari sumber yang sama, beberapa membutuhkan variabel baru seperti arah angin atau kepadatan lalu lintas, dan sebagian menuntut eksperimen sebagaimana uji A/B pada modul statistik.
Memeriksa hipotesis sekilas pada data yang ada#
Sebelum data baru dikumpulkan, hipotesis boleh diperiksa sekilas pada data yang ada, dengan catatan bahwa hasilnya adalah indikasi, bukan pengujian. Skrip berikut membandingkan rata-rata PM2.5 pada jam sibuk 07 sampai 09 dengan jam lain, per stasiun, lengkap dengan jumlah datanya.
"""Dari temuan EDA ke hipotesis yang dapat diuji."""
import pandas as pd
data = pd.read_csv(
"ukuran_udara.csv",
na_values=["kosong", "-999.0"],
dtype={"pm25": "string", "kelembapan": "string"},
)
data["pm25"] = data["pm25"].astype("float")
data["waktu"] = pd.to_datetime(data["waktu"], format="mixed", dayfirst=True)
data["stasiun"] = (
data["stasiun"].str.strip().str.replace(r"\s+", " ", regex=True).str.title()
)
sah = data[data["pm25"] < 500]
pagi = sah[sah["waktu"].dt.hour.between(7, 9)]
lain = sah[~sah["waktu"].dt.hour.between(7, 9)]
print("jam sibuk 07-09")
print(pagi.groupby("stasiun")["pm25"].agg(["count", "mean"]).round(1).to_string())
print()
print("di luar jam sibuk")
print(lain.groupby("stasiun")["pm25"].agg(["count", "mean"]).round(1).to_string())jam sibuk 07-09
count mean
stasiun
Stasiun A 2 45.4
Stasiun B 2 60.3
di luar jam sibuk
count mean
stasiun
Stasiun A 24 33.4
Stasiun B 24 55.0Indikasinya searah dengan hipotesis, yaitu rata-rata jam sibuk lebih tinggi dengan selisih 12.0 pada Stasiun A dan 5.3 pada Stasiun B, tetapi jumlah datanya menyatakan batasnya, yaitu hanya dua baris per stasiun pada kelompok jam sibuk. Dua baris tidak dapat membedakan pola dari kebetulan, sehingga angka ini dicatat sebagai indikasi yang menuntut data lebih banyak, dan pembandingan formalnya menunggu modul pengujian hipotesis.
Catatan penting yang menyertai pemeriksaan sekilas adalah baris jam 08 pada Stasiun A yang hilang, sehingga kelompok jam sibuknya berisi dua baris, bukan tiga. Perlakuan data hilang dari modul pembersihan berlaku juga di sini, sebab pengisian yang keliru justru menciptakan bukti palsu bagi hipotesis.
Memindahkan hipotesis ke rencana#
Hipotesis yang lahir dari EDA dituliskan pada bagian khusus notebook, dan satu baris rencana pengujian menyertainya, misalnya “kumpulkan tiga puluh hari pengukuran, bandingkan dua rata-rata dengan uji-t, dan tetapkan ambang signifikansi sebelum melihat datanya”. Penulisan ambang sebelum data datang adalah disiplin yang sama dengan metrik pada modul cara berpikir.
Daftar hipotesis juga diurutkan menurut biaya pengujian. Hipotesis yang cukup dijawab dengan mengunduh hari tambahan dari sumber yang sama berdiri di atas, sedangkan yang menuntut sensor baru atau eksperimen penuh menunggu keputusan pemangku kepentingan. Daftar berurut semacam ini adalah keluaran EDA yang paling sering dipakai pekerjaan berikutnya.
Pada proyek nyata, jumlah hipotesis yang wajar dari satu putaran EDA adalah tiga sampai lima, dan masing-masing dinyatakan dapat diuji atau tidak. Hipotesis yang tidak dapat diuji dengan data yang tersedia tetap dicatat, sebab ia menentukan data apa yang layak dikumpulkan di masa depan.
Kesalahan umum#
Kesalahan pertama adalah memperlakukan temuan EDA sebagai kesimpulan akhir. Pola yang ditemukan pada satu berkas adalah dugaan yang layak diuji, dan kalimat laporannya memakai kata “diduga” sampai pengujian formalnya selesai.
Kesalahan kedua adalah menguji terlalu banyak hipotesis sekaligus pada data yang sama. Setiap pemeriksaan tambahan memperbesar peluang menemukan pola palsu, dan daftar hipotesis yang diprioritaskan menutup celah itu lebih murah daripada koreksi statistiknya.
Kesalahan ketiga adalah melupakan jumlah data di belakang setiap rata-rata.
Keluaran di atas sah dan benar, tetapi dua baris per kelompok menyatakan
batasnya, dan tabel tanpa kolom count menyembunyikan batas itu dari
pembacanya.
Ringkasan#
- EDA membangkitkan hipotesis, dan setiap hipotesis berisi pola, populasi, serta cara mengujinya.
- Pemeriksaan sekilas pada data yang ada menghasilkan indikasi, bukan pengujian, dan jumlah data menyatakan batasnya.
- Rencana pengujian dituliskan bersama hipotesisnya, termasuk ambang yang diset sebelum data baru dilihat.
- Daftar hipotesis diurutkan menurut biaya pengujian dan menjadi jembatan ke modul statistik.
Referensi#
- Group by: split-apply-combine — pandas documentation — dokumentasi agregasi yang dipakai memeriksa hipotesis sekilas.
- The Art of Statistics — David Spiegelhalter, Basic Books — pembahasan jarak antara pola yang terlihat dan bukti yang cukup.