Koefisien sering dibaca sebagai jawaban atas pertanyaan bisnis — “berapa pengaruh luas terhadap harga?” — padahal angka itu lahir dari konteks yang menentukan maknanya: skala fitur, bentuk target, dan kualitas data. Chapter penutup section ini adalah bab berpikir kritis: kita akan melihat bagaimana peringkat “kepentingan fitur” bisa berubah total hanya karena standardisasi, membaca koefisien model ber-target logaritmik sebagai persentase, lalu membedah empat jebakan interpretasi yang paling sering menjebak analis — mulai dari kekeliruan korelasi menjadi kausalitas sampai ekstrapolasi keluar dari jangkauan data.
Membaca Satu Koefisien dengan Benar #
Tafsiran baku sebuah koefisien pada regresi berganda: perubahan rata-rata target ketika fitur tersebut naik satu satuan, dengan seluruh fitur lain dipegang tetap (ceteris paribus). Frasa kedua bukan basa-basi. Pada data harga rumah, koefisien luas bukan “pengaruh total luas terhadap harga” — rumah yang lebih luas cenderung juga punya kamar lebih banyak, dan bagian kontribusi itu sudah dialokasikan ke koefisien jumlah_kamar. Koefisien mengukur kontribusi tambahan di luar apa yang sudah dijelaskan fitur lain; itulah sebabnya menambah atau membuang fitur dapat mengubah koefisien fitur yang tersisa.
Tanda koefisien pun bermakna arah: positif berarti naik bersama, negatif berarti berlawanan — usia_bangunan dengan koefisien −4 terbaca “harga turun sekitar 4 juta setiap tahun tambahan usia, bila luas dan kamar tetap”. Besarannya hanya bermakna bersama satuannya: koefisien 8 untuk luas dalam meter persegi akan menjadi 0,08 bila luas dinyatakan dalam sentimeter persegi — model sama, angka berbeda.
Skala Fitur Menentukan Siapa yang Tampak Penting #
Dari sini muncul jebakan yang paling sering terjadi di laporan: membandingkan besar koefisien mentah antar fitur untuk menyimpulkan mana yang “paling berpengaruh”. Perbandingan seperti itu terikat satuan. Fitur yang satuan-besarannya kecil (jumlah kamar, 2–5) otomatis mendapat koefisien besar; fitur bersatuan besar (usia dalam tahun, luas dalam m²) otomatis mendapat koefisien kecil — padahal kontribusi nyatanya pada pergerakan harga bisa jadi justru lebih besar.
Ukuran yang lebih jujur untuk membandingkan adalah kontribusi terhadap variasi: |koefisien| × simpangan fitur — berapa juta target bergerak ketika fitur bergerak sejauh satu simpangan bakunya. Bila seluruh fitur distandarkan lebih dulu dengan StandardScaler, koefisien hasil pelatihan otomatis sama dengan kontribusi ini, dan peringkatnya menjadi sebanding apel dengan apel. Peringkat mentah dan peringkat ternormalisasi sering kali tidak sama — dan contoh kode kita akan memperlihatkan perubahan peringkat yang menohok.
Contoh Kode: Peringkat yang Berubah dan Persen dari Log #
File interpretasi-koefisien.py membangun 60 rumah sintetis dengan tiga fitur berskala beda jauh (luas, jumlah_kamar, usia_bangunan), melatih model pada fitur mentah lalu pada fitur ternormalisasi, dan mencetak peringkat “kepentingan” keduanya. Bagian kedua melatih model pada log(harga) — teknik standar saat galat membesar pada harga tinggi — dan menerjemahkan koefisien menjadi persentase lewat exp(β) − 1.
# Interpretasi koefisien: mengapa standardisasi menentukan siapa yang tampak
# "penting", dan bagaimana membaca model ber-target logaritmik sebagai persen.
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import StandardScaler
rng = np.random.default_rng(42)
n = 60
# Bagian 1 -- tiga fitur berskala sangat berbeda: luas (puluhan m^2),
# jumlah kamar (satuan), usia bangunan (tahun).
luas = rng.uniform(60.0, 120.0, size=n)
jumlah_kamar = rng.integers(2, 6, size=n).astype(float)
usia_bangunan = rng.uniform(0.0, 30.0, size=n)
harga = 8.0 * luas + 90.0 * jumlah_kamar - 4.0 * usia_bangunan \
+ rng.normal(loc=0.0, scale=25.0, size=n)
fitur = np.column_stack([luas, jumlah_kamar, usia_bangunan])
nama = ["luas", "jumlah_kamar", "usia_bangunan"]
model_mentah = LinearRegression().fit(fitur, harga)
kontribusi = np.abs(model_mentah.coef_) * fitur.std(axis=0)
print("Model pada fitur mentah (belum distandarkan):")
print(f"{'fitur':<15}{'std':>7}{'koefisien':>11}{'|koef|*std':>12}")
for j in range(3):
print(f"{nama[j]:<15}{fitur[:, j].std():>7.2f}"
f"{model_mentah.coef_[j]:>11.2f}{kontribusi[j]:>12.2f}")
# Setelah standardisasi, koefisien = koefisien mentah x std fitur,
# sehingga peringkat "kepentingan" bisa berubah total.
model_skala = LinearRegression().fit(
StandardScaler().fit_transform(fitur), harga
)
urutan_mentah = [nama[j] for j in np.argsort(-np.abs(model_mentah.coef_))]
urutan_skala = [nama[j] for j in np.argsort(-np.abs(model_skala.coef_))]
print(f"Peringkat menurut besar koefisien mentah : {' > '.join(urutan_mentah)}")
print(f"Peringkat setelah fitur distandarkan : {' > '.join(urutan_skala)}")
print()
# Bagian 2 -- target bertransformasi log: koefisien terbaca sebagai
# persen perubahan harga melalui rumus exp(beta) - 1.
luas_b = rng.uniform(60.0, 120.0, size=n)
jarak_b = rng.uniform(2.0, 20.0, size=n)
log_harga = 6.0 + 0.006 * luas_b - 0.035 * jarak_b \
+ rng.normal(loc=0.0, scale=0.03, size=n)
X_b = np.column_stack([luas_b, jarak_b])
model_log = LinearRegression().fit(X_b, log_harga)
print("Model dilatih pada log(harga), bukan harga:")
for nama_fitur, beta in zip(["luas", "jarak_ke_pusat"], model_log.coef_):
persen = (np.exp(beta) - 1.0) * 100.0
print(f" koefisien {nama_fitur:<14} = {beta:8.4f}"
f" -> efek sekitar {persen:+.2f}% per satu satuan")Output yang Dihasilkan:
Model pada fitur mentah (belum distandarkan):
fitur std koefisien |koef|*std
luas 16.88 8.25 139.15
jumlah_kamar 1.07 92.47 99.11
usia_bangunan 8.21 -4.18 34.31
Peringkat menurut besar koefisien mentah : jumlah_kamar > luas > usia_bangunan
Peringkat setelah fitur distandarkan : luas > jumlah_kamar > usia_bangunan
Model dilatih pada log(harga), bukan harga:
koefisien luas = 0.0056 -> efek sekitar +0.56% per satu satuan
koefisien jarak_ke_pusat = -0.0352 -> efek sekitar -3.46% per satu satuanBedah kode di atas baris demi baris:
- Baris 13–17 (data berskala campuran): luas bergerak puluhan (simpangan ~17), jumlah kamar hanya 2–5 (simpangan ~1), usia 0–30 tahun. Model kebenarannya diketahui: koefisien 8, 90, dan −4 pada skala asli.
- Baris 22–28 (tabel kontribusi): selain koefisien mentah, tabel mencetak simpangan tiap fitur dan hasil kali
|koefisien| × std— kontribusi terhadap variasi harga. - Baris 32–38 (peringkat dua versi):
np.argsort(-np.abs(...))mengurutkan indeks dari koefisien terbesar; peringkat mentah dibandingkan dengan peringkat setelahStandardScaler. - Baris 43–49 (target log):
log_hargadibangun linear terhadap luas dan jarak, sehinggahargasendiri berlipat secara eksponensial — struktur yang umum pada data harga dan pendapatan. - Baris 51–55 (persentase): tiap koefisien β diterjemahkan menjadi
(exp(β) − 1) × 100%— persen perubahan harga per satu satuan fitur.
Membaca Hasil: Peringkat Berubah, Persen Muncul #
Perhatikan tabel bagian pertama. Dengan koefisien mentah, jumlah_kamar tampak raja: 92,47 — sebelas kali koefisien luas yang hanya 8,25. Seorang analis yang buru-buru akan melapor “jumlah kamar adalah faktor dominan”. Tetapi kolom |koef|*std membuka kenyataan: kamar hanya menyumbang pergerakan ~99 juta per satu simpangan, sementara luas menyumbang ~139 juta — karena luas bergerak jauh lebih lebar daripada jumlah kamar. Setelah standardisasi, peringkat resmi berganti: luas > jumlah_kamar > usia_bangunan — kebalikan dari kesan pertama. Angka koefisien tidak berdusta; yang keliru adalah membandingkannya tanpa menyamakan satuan.
Bagian kedua memberi tafsiran yang ramah pembaca laporan: koefisien luas 0,0056 pada target log berarti tiap meter persegi tambahan menaikkan harga sekitar +0,56%, dan koefisien jarak_ke_pusat −0,0352 berarti tiap kilometer menjauh dari pusat kota menurunkan harga sekitar −3,46%. Untuk β kecil, exp(β) − 1 ≈ β, jadi 0,035 ≈ 3,5% — akurasi hampir persis; rumus eksak tetap dipakai agar tafsiran benar untuk koefisien besar sekalipun.
Empat Jebakan Interpretasi #
Ketelitian berskala dan bersatuan baru satu lapis pengaman. Empat jebakan berikutnya menuntut kecurigaan yang lebih besar terhadap data sendiri:
- Korelasi bukan kausalitas. Koefisien mengukur hubungan bersama dalam data, bukan mekanisme sebab-akibat. Rumah dekat stasiun bisa mahal bukan karena stasiunnya, melainkan karena kawasannya memang premium. Mengintervensi fitur (membangun stasiun baru) tidak otomatis mengubah harga sebesar koefisien.
- Ekstrapolasi di luar jangkauan data. Model dilatih pada rumah 60–120 m²; memprediksi rumah 400 m² berarti mempercayakan garis ke wilayah yang tak pernah dilihatnya. Hubungan nyata sering melengkung di ujung rentang.
- Bias variabel terlewat (omitted variable bias). Fitur penting yang tidak ikut dimasukkan membuat koefisien fitur lain menyerap pengaruhnya — koefisien
jarakbisa membengkak karena mewakili kualitas sekolah yang tidak tersedia di data. - Distorsi multikolinearitas. Dua fitur berkorelasi kuat membuat koefisien saling bertukar peran secara acak, seperti demo Chapter Regresi Linier Berganda — prediksi tetap sehat, tafsiran tidak.
Dengan ini perjalanan Section Regresi tuntas: dari definisi, least squares, matriks fitur, metrik, kurva polynomial, regularisasi, sampai disiplin membaca koefisien. Perangkat prediksi nilai kontinu kini lengkap di tangan Anda — dan pertanyaan berikutnya sudah mengetuk: bagaimana bila targetnya bukan angka, melainkan kategori? Jawabannya dibuka oleh Section berikutnya, dimulai dari Chapter Konsep Klasifikasi.
Referensi Resmi #
- Linear Models — scikit-learn User Guide — pembahasan koefisien model linier beserta catatan penafsirannya.
- sklearn.preprocessing.StandardScaler — API Reference — standardisasi yang dipakai pada contoh kode.
- Common pitfalls and recommended practices — scikit-learn User Guide — risiko kebocoran data dan ekstrapolasi yang mendampingi interpretasi koefisien.