Dua model yang paling sering menjadi titik awal adalah regresi linear untuk angka dan regresi logistik untuk kategori, dan keduanya dipakai di sini pada dataset latihan yang sama dengan alur kerja empat langkah. Topik ini membaca koefisien keduanya sebagai bahasa, yaitu berapa besar pengaruh setiap feature dan ke arah mana, serta menunjukkan sinyal yang sesungguhnya ada pada data. Setelah membacanya, dua model pertama dalam proyek dapat dibangun, dibaca, dan dilaporkan dengan bahasa yang benar.
Regresi linear dan pembacaan koefisiennya#
Regresi linear menalar target angka sebagai jumlah berbobot dari feature, dan koefisiennya adalah bahasa hasilnya, yaitu berapa perubahan target bila satu feature naik satu satuan dengan feature lain tetap. Model inilah yang paling mudah diaudit karena seluruh keputusannya terbaca pada beberapa angka.
Skrip berikut melatih kedua model pada dataset latihan, dengan identitas
stasiun yang disandikan dummy melalui get_dummies agar model dapat membaca
perbedaan lingkungannya.
"""Dua model pertama: regresi linear dan regresi logistik."""
import pandas as pd
from sklearn.linear_model import LinearRegression, LogisticRegression
from sklearn.metrics import accuracy_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", "kualitas": "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()
)
data["kualitas"] = data["kualitas"].str.title()
sah = data[data["pm25"] < 500].dropna(
subset=["pm25", "suhu_c", "kelembapan", "kualitas"]
)
X = pd.get_dummies(sah[["stasiun", "suhu_c", "kelembapan"]], columns=["stasiun"])
X_latih, X_uji, y_latih, y_uji = train_test_split(
X, sah["pm25"], test_size=0.25, random_state=42
)
reg = LinearRegression().fit(X_latih, y_latih)
suku = " ".join(f"{c:+.1f}*{n}" for n, c in zip(X.columns, reg.coef_))
print(f"regresi : pm25 = {reg.intercept_:+.1f} {suku}")
X_latih2, X_uji2, y_latih2, y_uji2 = train_test_split(
X, sah["kualitas"], test_size=0.25, random_state=42, stratify=sah["kualitas"]
)
logreg = LogisticRegression(max_iter=1000).fit(X_latih2, y_latih2)
print(f"klasifikasi kelas : {sorted(logreg.classes_)}")
print(f"akurasi uji : {accuracy_score(y_uji2, logreg.predict(X_uji2)):.3f}")regresi : pm25 = +0.1 +1.3*suhu_c +0.1*kelembapan -9.8*stasiun_Stasiun A +9.8*stasiun_Stasiun B
klasifikasi kelas : ['Baik', 'Sedang']
akurasi uji : 0.692Koefisien stasiun berlawanan tanda dengan besar yang sebanding, yaitu -9.8
dan +9.8, dan itu adalah sinyal utamanya, yaitu Stasiun B secara konsisten
lebih tinggi daripada Stasiun A pada suhu dan kelembapan yang sama. Tanda
berlawanan dengan besar yang sama pada kedua koefisien dummy muncul karena
keduanya saling melengkapi dalam satu model, dan pembacaan yang lebih bersih
menjadikan satu kategori sebagai pembanding melalui drop_first=True.
Perbandingan dengan modul kapan ML membantu menegaskan posisinya, yaitu R squared 0.835 pada evaluasi yang sama, sehingga model sederhana ini cukup dipakai sebagai keputusan awal, bukan sebagai perkiraan akhir.
Regresi logistik dan peluangnya#
Regresi logistik menalar peluang sebuah kategori, dan namanya yang mengandung
“regresi” sering menyesatkan, karena keluarannya adalah kelas beserta
peluangnya, bukan angka kontinu. Dua kelas pada dataset latihan ini adalah
Baik dan Sedang, dan classes_ pada keluaran menyatakan urutan
internalnya.
Peluang mentah dari predict_proba diubah menjadi keputusan dengan ambang
0.5 secara bawaan, dan ambang itulah yang digeser ketika biaya salah positif
berbeda dengan salah negatif, sebagaimana dikerjakan pada topik evaluasi.
max_iter=1000 memberi ruang konvergensi yang cukup, karena peringatan
konvergensi adalah tanda optimisasi yang berhenti sebelum selesai.
Feature kategori masuk model lewat penyandian dummy, yaitu satu kolom biner per kategori, dan pemilihan kategori pembanding membuat koefisiennya terbaca sebagai selisih terhadap pembanding tersebut, bukan sebagai nilai mutlak.
Menyandingkan dua model pada data yang sama#
Kedua model menjawab dua pertanyaan atas data yang sama, yaitu berapa PM2.5 dan apakah kategorinya Sedang, dan menyandingkannya menegaskan bahwa pilihan model mengikuti pertanyaan. Target angka memakai regresi, target kategori memakai logistik, dan kerangka evaluasinya berbeda sebagaimana dikerjakan pada topik literasi evaluasi.
Kedalaman yang disengaja pada modul ini adalah batas lingkup, yaitu asumsi linearitas, multikolinearitas, dan pilihan regularisasi dibahas pada jalur machine learning tersendiri, sedangkan di sini kedua model berdiri sebagai alat ukur pertama yang jujur dan dapat dibaca.
Kebiasaan yang menyertai adalah melaporkan koefisien beserta satuannya, misalnya “1.3 satuan PM2.5 per derajat Celsius”, sebab angka tanpa satuan tidak dapat diperiksa ulang oleh pembaca laporan.
Kesalahan umum#
Kesalahan pertama adalah membaca koefisien dummy tanpa menyebut kategori pembandingnya. Angka -9.8 bermakna relatif terhadap pembanding yang dipilih, dan kalimat tanpa pembandingnya bermakna ganda.
Kesalahan kedua adalah memakai akurasi regresi logistik tanpa melihat
peluangnya. Dua keputusan dengan ambang berbeda menghasilkan akurasi yang
berbeda pada model yang sama, sedangkan predict_proba beserta matriks
kebingungan menyatakan penuhnya.
Kesalahan ketiga adalah menyandikan kategori dengan bilangan bulat 0, 1, 2 secara langsung. Encode itu menyatakan urutan yang tidak ada, sedangkan dummy menjaga setiap kategori berdiri sendiri.
Ringkasan#
- Regresi linear menalar angka dan koefisiennya adalah bahasanya, dengan pasangan dummy stasiun -9.8 dan +9.8 sebagai sinyal utama dataset latihan.
- Regresi logistik menalar peluang kategori, dengan ambang 0.5 bawaan yang dapat digeser menurut biaya keputusan.
- Feature kategori masuk sebagai dummy, dan kategori pembanding menentukan makna setiap koefisien.
- Dua model yang sama menegaskan pilihan model mengikuti pertanyaan, dan koefisien dilaporkan bersama satuannya.
Referensi#
- Linear Models — scikit-learn documentation — rujukan resmi regresi linear dan logistik beserta asumsinya.
- sklearn.preprocessing: one-hot encoding — scikit-learn glossary
—
rujukan penyandian kategori yang sejalan dengan
get_dummies.