Machine learning membantu apabila pertanyaannya berupa prediksi, polanya terlalu rumit untuk aturan tangan, dan biaya kesalahannya lebih mahal daripada biaya membangun modelnya. Topik ini menetapkan tiga pertanyaan penyaring tersebut, membedakan model untuk prediksi dari model untuk penjelasan, dan memperagakannya pada dataset latihan dengan baseline sebagai pembanding pertama. Setelah membacanya, keputusan melatih model berhenti menjadi refleks dan menjadi pilihan yang disengaja.
Tiga penyaring sebelum melatih model#
Pertanyaan pertama adalah apakah yang dibutuhkan prediksi. Memperkirakan PM2.5 jam berikutnya adalah prediksi, sedangkan menjelaskan mengapa rata-rata Stasiun B lebih tinggi adalah penjelasan, dan dua pekerjaan itu memilih alat yang berbeda. Model prediksi dinilai dari ketepatannya pada data baru, sedangkan model penjelasan dinilai dari koefisien yang dapat diinterpretasikan dan asumsi yang dapat dipertanggungjawabkan.
Pertanyaan kedua adalah apakah polanya terlalu rumit untuk aturan tangan. Ambang sederhana yang ditulis petugas kadang mengalahkan model, dan aturan yang jelas lebih mudah diaudit daripada model yang sama hasilnya. Pertanyaan ketiga adalah hitungan biaya dan manfaat, yaitu berapa harga salah prediksi, berapa biaya data, pemeliharaan, dan kepercayaan yang dibangun, serta ada tidaknya tindakan yang menunggu prediksi tersebut.
Ketiga penyaring itu menjelaskan mengapa sebagian besar permintaan “buatkan model” berakhir tanpa model. Analisis yang menjawab pertanyaan pemangku kepentingan dengan statistik deskriptif dan visualisasi sering kali selesai lebih cepat dan lebih dapat dipercaya.
Baseline lebih dahulu, selalu#
Baseline adalah model paling sederhana yang mungkin, yaitu menebak rata-rata untuk regresi atau kelas terbanyak untuk klasifikasi, dan ia menjadi garis dasar yang harus dikalahkan. Model yang tidak mengalahkan baseline belum membawa informasi apa pun, berapa pun kerumitannya.
Simulasi berikut membandingkan baseline, regresi linear dua prediktor, dan regresi linear yang ditambah identitas stasiun sebagai feature, semuanya dinilai dengan R-squared pada data uji yang belum pernah dilihat model.
"""Baseline dulu, model sederhana kemudian: layakkah ML dipakai?"""
import pandas as pd
from sklearn.dummy import DummyRegressor
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score
from sklearn.model_selection import train_test_split
data = pd.read_csv(
"ukuran_udara.csv",
na_values=["kosong", "-999.0"],
dtype={"pm25": "string", "kelembapan": "string"},
)
data["pm25"] = data["pm25"].astype("float")
data["kelembapan"] = data["kelembapan"].str.replace(",", ".", regex=False).astype("float")
data["stasiun"] = (
data["stasiun"].str.strip().str.replace(r"\s+", " ", regex=True).str.title()
)
sah = data[data["pm25"] < 500].dropna(subset=["pm25", "suhu_c", "kelembapan"])
X_dasar = sah[["suhu_c", "kelembapan"]]
X_lengkap = pd.get_dummies(sah[["stasiun", "suhu_c", "kelembapan"]],
columns=["stasiun"])
y = sah["pm25"]
X_latih, X_uji, y_latih, y_uji = train_test_split(
X_dasar, y, test_size=0.25, random_state=42
)
_, _, y_latih2, y_uji2 = train_test_split(X_lengkap, y, test_size=0.25, random_state=42)
baseline = DummyRegressor(strategy="mean").fit(X_latih, y_latih)
sederhana = LinearRegression().fit(X_latih, y_latih)
dengan_stasiun = LinearRegression().fit(X_lengkap.loc[X_latih.index], y_latih)
print(f"baseline rata-rata : R2 uji = {r2_score(y_uji, baseline.predict(X_uji)):.3f}")
print(f"linear dua prediktor : R2 uji = {r2_score(y_uji, sederhana.predict(X_uji)):.3f}")
print(f"linear + dummy stasiun: R2 uji = {r2_score(y_uji2, dengan_stasiun.predict(X_lengkap.loc[X_uji.index])):.3f}")baseline rata-rata : R2 uji = -0.139
linear dua prediktor : R2 uji = -0.042
linear + dummy stasiun: R2 uji = 0.835Keluarannya menceritakan tiga keadaan sekaligus. Baseline bernilai negatif pada data uji karena rata-rata latih tidak pas untuk ujinya, regresi dengan suhu dan kelembapan saja tidak mengalahkan garis nol, sedangkan penambahan identitas stasiun melonjakkan R-squared ke 0.835. Sinyal yang sesungguhnya ada pada perbedaan lingkungan antar stasiun, dan hanya eksperimen bertahap seperti ini yang memperlihatkannya.
Kesimpulan kerjanya terbentuk sendiri, yaitu ML membantu pada masalah ini, tetapi modelnya sederhana, dan penambahan feature yang bermakna lebih berharga daripada model yang lebih rumit.
Prediksi, penjelasan, dan biaya kesalahan#
Model yang sama dapat dipakai untuk dua tujuan yang berbeda, dan tuntutannya berbeda. Regresi linear yang dipakai menjelaskan menuntut koefisiennya stabil dan variabelnya tidak saling menumpuk, sedangkan model yang sama dipakai memprediksi menuntut kinerja pada data baru, dan keduanya tidak saling menggantikan.
Biaya kesalahan menentukan bentuk kesalahan yang diterima. Memperkirakan PM2.5 terlalu rendah berbeda akibatnya dengan terlalu tinggi bagi penerbitan peringatan, dan perbedaan ini kelak menjadi presisi berbanding recall pada topik evaluasi. Hitungan biaya yang dituliskan sejak awal juga menjadi bahasa bersama dengan pemangku kepentingan ketika model dinilai.
Batas yang jujur menyertai keputusan melatih, yaitu data yang tersedia menentukan langit-langitnya. Dua hari pengukuran pada dataset latihan cukup untuk mempelajari pola kerjanya, dan model serius pada domain ini menuntut bulan data beserta variabel yang relevan, sebagaimana hipotesis pada modul EDA menyebut data apa yang harus dikumpulkan.
Kesalahan umum#
Kesalahan pertama adalah memulai dari model yang rumit sebelum baseline disebut. Model rumit yang mengalahkan baseline tipis membawa biaya pemeliharaan tanpa membawa nilai, dan perbandingan tiga baris pada skrip di atas menegaskan urutannya.
Kesalahan kedua adalah memakai model penjelasan sebagai prediksi dan sebaliknya. Koefisien dari model yang dipasang pada seluruh data tidak boleh dibaca sebagai kinerja prediksi, dan skor prediksi tidak boleh dibaca sebagai sebab akibat.
Kesalahan ketiga adalah mengabaikan biaya kesalahan sampai model selesai. Ukuran evaluasi yang cocok dengan biaya keputusan dipilih sebelum melatih, sebab model yang dioptimalkan pada metrik yang salah hanya efisien menuju kesimpulan yang salah.
Ringkasan#
- Tiga penyaring sebelum melatih adalah kebutuhan prediksi, kerumitan pola, dan hitungan biaya manfaat.
- Baseline yang dikalahkan adalah syarat pertama, dan keluaran latihan memperlihatkan -0.139, -0.042, lalu 0.835 setelah feature yang bermakna masuk.
- Prediksi dan penjelasan menuntut penilaian yang berbeda pada model yang sama.
- Biaya kesalahan menentukan metrik evaluasi, dan keduanya ditetapkan sebelum model dilatih.
Referensi#
- scikit-learn User Guide — scikit-learn documentation — panduan resmi yang menjadi dasar seluruh modul machine learning jalur ini.
- Python for Data Analysis, 3rd Edition — Wes McKinney, O’Reilly — bab pemodelan yang menegaskan peran data di atas model.