Korelasi bilang “jam belajar dan nilai naik bersama”; regresi melangkah lebih jauh: “setiap tambahan satu jam menambah nilai 4.9 poin”. Model linear mengubah hubungan menjadi angka yang bisa dipakai memprediksi, menganggarkan, dan merencanakan — inti dari analisis data bisnis. Chapter ini membangun model y = a + bx dari fondasi, menghitungnya dua cara, lalu mengaudit kualitasnya. Cakupan materinya:

  • Model linear dan metode least squares
  • Solusi lewat operator backslash A\b dan polyfit
  • Prediksi dengan polyval serta tafsir slope dan intercept
  • Kualitas fit: R² dan analisis residu

Model Linear dan Least Squares #

Model yang kita pasang berbentuk y = a + b·x: intercept a adalah level dasar, slope b adalah perubahan y per satu satuan x. Masalahnya, data nyata tidak jatuh tepat pada satu garis, jadi kita butuh kriteria “terbaik”. Metode least squares memilih garis yang meminimumkan jumlah kuadrat residu — selisih antara data dan prediksi, dijumlahkan dalam bentuk kuadratnya agar simpangan besar dihukum lebih berat.

Mekanismenya di MATLAB: bentuk matriks desain A = [1, x] (kolom pertama konstanta untuk intercept, kolom kedua variabel x) membuat sistem persamaan overdetermined — 8 baris data, 2 koefisien. Operator backslash A\b mendeteksi sistem seperti ini dan otomatis menyelesaikannya sebagai masalah least squares. Dataset kita: anggaran iklan bulanan sebuah toko versus unit terjual.

Solusi dengan Operator Backslash #

matlab
iklan = [1 2 3 4 5 6 7 8];         % ratusan ribu rupiah
jual  = [52 59 66 70 76 82 85 90]; % unit terjual
n = numel(iklan);
A = [ones(n,1), iklan(:)];
b = A \ jual(:);
fprintf('intercept = %.4f\n', b(1));
fprintf('slope     = %.4f\n', b(2));

Output yang Dihasilkan:

text
intercept = 48.3929
slope     = 5.3571

Mari kita bedah baris-baris kode di atas:

  1. Baris 3 (ones(n,1)): kolom satu menyalakan intercept — tanpa kolom ini, garis dipaksa melewati titik nol.
  2. Baris 3 (iklan(:)): operator (:) memaksa x menjadi kolom; jual(:) di baris berikutnya sama, karena A\b menuntut vektor kolom berdimensi cocok.
  3. Baris 4 (A \ jual(:)): matriks A berukuran 8×2 — lebih banyak persamaan daripada variabel; backslash menyelesaikan least squares tanpa kita merumuskannya.

polyfit dan polyval #

Jalur kedua: polyfit(x, y, 1) memasang polinomial derajat 1 — regresi linear — dan mengembalikan koefisien [slope, intercept] (urutan pangkat menurun, kebalikan dari kebiasaan y = a + bx). polyval mengevaluasi polinomial hasilnya pada x baru.

matlab
p = polyfit(iklan, jual, 1);
fprintf('polyfit : slope = %.4f, intercept = %.4f\n', p(1), p(2));
pred45 = polyval(p, 4.5);
pred10 = polyval(p, 10);
fprintf('prediksi iklan 4.5 -> %.4f unit\n', pred45);
fprintf('prediksi iklan 10  -> %.4f unit\n', pred10);

Output yang Dihasilkan:

text
polyfit : slope = 5.3571, intercept = 48.3929
prediksi iklan 4.5 -> 72.5000 unit
prediksi iklan 10  -> 101.9643 unit

Mari kita bedah baris-baris kode di atas:

  1. Baris 1 (polyfit(iklan, jual, 1)): derajat 1 = garis lurus; hasilnya persis koefisien backslash — dua jalur, satu definisi least squares.
  2. Baris 3 (polyval(p, 4.5)): x = 4.5 berada di antara data (1..8) — interpolasi; hasil 72.5 unit.
  3. Baris 4 (polyval(p, 10)): x = 10 di luar rentang data — ekstrapolasi; angka 101.96 hanya sah jika garis terus berlaku (lihat peringatan di akhir chapter).

Membaca Koefisien #

Angka koefisien baru berguna setelah diterjemahkan ke bahasa bisnis. Slope 5.3571 berarti setiap tambahan Rp100 ribu anggaran iklan dikaitkan dengan 5.36 unit penjualan tambahan; intercept 48.3929 adalah level penjualan saat iklan nol — di luar rentang data kita, jadi tafsirannya harus hati-hati.

KoefisienNilaiTafsir
slope5.3571+1 ratus ribu iklan → +5.36 unit terjual
intercept48.3929level dasar saat iklan = 0 (ekstrapolasi)

Kualitas Fit: R² dan Residu #

Model yang belum diaudit bukan model. Dua alat auditnya: R² — proporsi variasi y yang dijelaskan model — dan residu — sisa galat per titik. Mekanismenya: R² = 1 − SSE/SST dengan SSE jumlah kuadrat residu dan SST variasi total data terhadap mean-nya; R² = 1 berarti prediksi sempurna.

matlab
yhat   = polyval(p, iklan);
residu = jual - yhat;
SSE = sum(residu.^2);
SST = sum((jual - mean(jual)).^2);
fprintf('SSE = %.4f, SST = %.4f\n', SSE, SST);
fprintf('R^2 = 1 - SSE/SST = %.6f\n', 1 - SSE/SST);
fprintf('std residu = %.4f unit\n', std(residu));
for k = 1:n
  fprintf('iklan %d: residu = %.4f\n', iklan(k), residu(k));
end

Output yang Dihasilkan:

text
SSE = 10.6429, SST = 1216.0000
R^2 = 1 - SSE/SST = 0.991248
std residu = 1.2330 unit
iklan 1: residu = -1.7500
iklan 2: residu = -0.1071
iklan 3: residu = 1.5357
iklan 4: residu = 0.1786
iklan 5: residu = 0.8214
iklan 6: residu = 1.4643
iklan 7: residu = -0.8929
iklan 8: residu = -1.2500

Mari kita bedah baris-baris kode di atas:

  1. Baris 1 (polyval(p, iklan)): prediksi model pada setiap titik data — nilai di garis, bukan data aslinya.
  2. Baris 2 (jual - yhat): residu per titik; tanda positif berarti data di atas garis.
  3. Baris 5-6 (1 - SSE/SST): R² = 0.9912 — 99.1% variasi penjualan terjelaskan oleh anggaran iklan; sisanya 0.9% masuk residu.
  4. Hasil loop: residu bergantian tanda tanpa pola sistematis — indikasi garis lurus adalah bentuk yang memadai; bila residu berpola lengkung, model perlu derajat lebih tinggi.
  5. std(residu): 1.23 unit — galat tipikal prediksi; berguna sebagai “margin of error” bisnis.

Bahaya Ekstrapolasi #

Prediksi x = 10 (101.96 unit) terlihat meyakinkan karena angkanya presisi — padahal fondasinya rapuh. Model dilatih pada data iklan 1..8; di luar rentang itu, dunia nyata sering berubah kelas: audiens iklan jenuh, pasar menyaturasi, pesaing merespons.

Ringkasan #

Regresi linear memasang garis y = a + bx lewat least squares: operator backslash pada matriks desain dan polyfit menghasilkan koefisien yang sama, polyval mengevaluasi prediksi. Slope dan intercept diterjemahkan ke bahasa bisnis, kualitas diaudit lewat R² = 1 − SSE/SST dan pola residu. Ekstrapolasi di luar rentang data adalah area bahaya yang harus diakui. Model linear hanya permulaan — ketika hubungan berbelok atau banyak variabel ikut bermain, kita membutuhkan keluarga model yang lebih kaya.