Cuplikan Regresi dan Klasifikasi

Model linear dan logistik yang diterapkan pada data latihan yang sama.

Daftar isi

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.

python regresi_klasifikasi.py
"""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}")
text Keluaran
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.692

Koefisien 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#