Sejauh ini kita sudah memahami cara model belajar dari data dan cara membaca alur kerja fit/predict. Section ini mengawali keluarga masalah yang paling sering dipakai di industri: regresi, yaitu supervised learning yang targetnya berupa bilangan kontinu seperti harga, suhu, atau jumlah permintaan. Chapter pembuka ini menjawab tiga pertanyaan dasar: apa itu masalah regresi, apa yang membedakannya dari klasifikasi, dan seperti apa wujud sebuah model regresi di scikit-learn. Di akhir chapter kita akan melatih model prediksi harga rumah pertama — hanya delapan baris data, tetapi pola kerjanya sama dengan model di perusahaan besar.

Regresi adalah Prediksi Nilai Kontinu #

Masalah regresi muncul setiap kali jawaban yang kita cari adalah sebuah angka pada skala kontinu, bukan sebuah kategori. “Berapa harga rumah seluas 52 m² di kompleks ini?”, “berapa megawatt permintaan listrik besok pukul 14.00?”, “berapa tahun lagi pompa pabrik itu perlu diganti?” — semuanya meminta model menghasilkan bilangan real, dan prediksi yang “hampir benar” tetap berguna. Ini berbeda dari klasifikasi yang hanya memilih satu label dari sekian pilihan; di klasifikasi tidak ada konsep “sedikit salah”.

Sebuah model regresi pada dasarnya adalah fungsi yang mendekati hubungan antara fitur dan target: model mempelajari pemetaan y ≈ f(X) dari pasangan contoh (X, y), lalu memakai f untuk menghitung nilai baru pada X yang belum pernah dilihat. Dalam bentuk paling sederhana fungsi tersebut berupa garis lurus — persis yang akan kita pakai sebentar lagi. Definisi fungsional ini juga menjelaskan kenapa istilah teknisnya function approximation: kita mendekati fungsi yang benar-benar menghubungkan luas dengan harga, dari sekian contoh transaksi yang tercatat.

Regresi vs Klasifikasi #

Kedua paradigma sama-sama supervised learning — keduanya butuh data berlabel dan sama-sama memanggil fit(X, y) lalu predict(X). Pembeda utamanya adalah tipe keluaran yang dipelajari, dan tipe itu menjalar ke metrik, algoritme, sampai cara membaca hasil.

AspekRegresiKlasifikasi
Tipe target yBilangan kontinu (harga, suhu, jumlah)Kategori/label (aman vs mencurigakan, tiga spesies iris)
Keluaran predict()Array floatArray label
Pertanyaan khas“Berapa nilainya?”“Kelas mana yang cocok?”
Metrik umumMAE, MSE, RMSE, R²Akurasi, presisi, recall, F1-score
Contoh estimatorLinearRegression, Ridge, LassoKNeighborsClassifier, LogisticRegression
Contoh kasusHarga rumah, permintaan listrik, sisa umur alatDeteksi transaksi mencurigakan, diagnosis, filter surel

Batas keduanya kadang digeser sesuai kebutuhan bisnis. Sebuah model prediksi permintaan bisa dipangkas menjadi klasifikasi “kehabisan stok atau tidak” dengan ambang batas, dan sebaliknya klasifikasi bisa dibaca sebagai probabilitas kontinu. Perpindahan seperti ini adalah keputusan perancangan, bukan sifat bawaan datanya.

Contoh Pertama: Prediksi Harga Rumah #

Mari kita turunkan definisi di atas menjadi kode yang berjalan. File konsep-regresi.py memuat delapan data penjualan rumah dari satu kompleks (luas dan harga), memanggil LinearRegression, lalu meminta prediksi untuk dua rumah baru yang tidak ada di data latih. Seluruh angka ditulis tetap sehingga hasil identik di setiap eksekusi.

python
# Contoh regresi paling kecil: memprediksi harga rumah (juta rupiah)
# dari luas (m^2) menggunakan LinearRegression scikit-learn.

import numpy as np
from sklearn.linear_model import LinearRegression

# Delapan rumah terjual di satu kompleks: luas (m^2) dan harga (juta rupiah).
# Luas dibungkus matriks 2D karena scikit-learn mengharapkan X berbentuk
# (jumlah_sampel, jumlah_fitur).
luas = np.array([[36.0], [42.0], [50.0], [58.0], [64.0], [72.0], [80.0], [90.0]])
harga = np.array([348.0, 405.0, 482.0, 551.0, 610.0, 690.0, 764.0, 861.0])

# fit() mempelajari garis harga = w * luas + b dari kedelapan data di atas.
model = LinearRegression()
model.fit(luas, harga)

print(f"Model yang dipelajari: harga = {model.coef_[0]:.2f} * luas + {model.intercept_:.2f}")
print(f"coef_      (kemiringan garis) = {model.coef_[0]:.2f} juta per m^2")
print(f"intercept_ (harga teoretis luas 0) = {model.intercept_:.2f} juta")
print()

# Dua rumah baru yang belum pernah dilihat model selama training.
luas_baru = np.array([[52.0], [68.0]])
prediksi = model.predict(luas_baru)
for l, p in zip(luas_baru.ravel(), prediksi):
    print(f"luas {l:5.1f} m^2 -> prediksi harga {p:6.1f} juta")

Output yang Dihasilkan:

text
Model yang dipelajari: harga = 9.48 * luas + 5.57
coef_      (kemiringan garis) = 9.48 juta per m^2
intercept_ (harga teoretis luas 0) = 5.57 juta

luas  52.0 m^2 -> prediksi harga  498.8 juta
luas  68.0 m^2 -> prediksi harga  650.5 juta

Bedah kode di atas baris demi baris:

  1. Baris 4–5 (import): kita meminjam LinearRegression, estimator regresi paling dasar di scikit-learn, beserta NumPy untuk menampung data.
  2. Baris 10–11 (luas, harga): inilah seluruh dataset — satu fitur (luas) dan satu target kontinu (harga). luas sengaja dibentuk matriks (n sampel, 1 fitur) karena kontrak X di scikit-learn selalu dua dimensi.
  3. Baris 14–15 (fit): di sinilah pembelajaran terjadi. LinearRegression mencari garis yang meminimalkan kuadrat selisih terhadap kedelapan titik data — mekanisme least squares yang akan kita bahas tuntas di chapter berikutnya.
  4. Baris 17–19 (coef_, intercept_): hasil belajar model hanyalah dua angka: kemiringan 9,48 (tiap tambahan 1 m² menaikkan harga sekitar 9,48 juta) dan intersep 5,57 (titik potong garis di luas nol).
  5. Baris 23–26 (predict): rumah 52 m² dan 68 m² tidak pernah dilihat model, tetapi prediksinya keluar dari garis yang dipelajari: 498,8 juta dan 650,5 juta. Nilai tengah 52 m² masuk akal karena berada di antara transaksi 50 m² (482) dan 58 m² (551).

Regresi di Dunia Nyata #

Pola kecil di atas menskalakan ke masalah sesungguhnya. Marketplace properti memakai lusinan fitur (luas, lokasi, jumlah kamar, tahun bangun, fasilitas sekitar) untuk menyarankan harga awal penjual. Operator listrik memprediksi beban puncak per jam dari data cuaca dan kalender agar pembangkit dinyalakan pas — terlalu rendah berarti pemadaman, terlalu tinggi berarti pemborosan bahan bakar. Perusahaan energi menaksir sisa umur pipa saluran migas dari sensor getaran dan tekanan, lalu menjadwalkan penggantian sebelum kerusakan terjadi. Di semua kasus itu bentuk pekerjaannya sama: kumpulkan contoh (X, y) historis, pilih model, panggil fit, lalu predict untuk masa depan.

Dengan definisi, pembeda klasifikasi, dan contoh kode pertama di tangan, kita siap membuka kotak hitam fit pada regresi linier. Bagaimana persisnya scikit-learn menemukan kemiringan 9,48 dari delapan titik data? Jawabannya adalah metode least squares — dan kita akan menghitungnya sekali manual dengan rumus, sekali lewat API, lalu membuktikan keduanya menghasilkan angka yang identik. Itulah bahasan Chapter Regresi Linier Sederhana.

Referensi Resmi #