Model sering punya bentuk yang sudah kita ketahui dari teori, tetapi parameter angkanya tidak: berapa laju peluruhan obat dalam darah, berapa koefisien difusi, berapa konstanta pegas efektif? Fitting parameter menjawabnya dengan membalik arah masalah — alih-alih parameter → prediksi, kita berjalan dari data → parameter. Aturannya sederhana: pilih parameter yang membuat prediksi model sedekat mungkin dengan data, lalu buktikan bahwa kedekatan itu nyata, bukan kebetulan. Chapter ini membangun alurnya dari fungsi objektif, grid search, fminsearch, sampai pemeriksaan kualitas dan jebakan klasiknya. Cakupan kita:

  • fungsi objektif sum of squared residuals (SSR) sebagai ukuran kedekatan
  • grid search dua dimensi sebagai peta lanskap, lalu fminsearch sebagai penyempurna
  • penilaian kualitas lewat SSR dan R², serta residu yang harus tampak acak

Masalah Fitting Parameter #

Kasus kerja kita: peluruhan eksponensial y = A*exp(-lambda*t) — model yang muncul di radioaktivitas, discharge kapasitor, dan penyerapan obat. Data eksperimennya 11 titik dengan noise tetap (ditulis eksplisit, bukan RNG, supaya hasil run dapat dibandingkan baris demi baris):

matlab
t = 0:0.5:5;                                    % waktu (s), 11 titik
noise = [0.08, -0.05, 0.03, -0.07, 0.02, ...
         0.05, -0.04, 0.01, -0.06, 0.03, -0.02];
y = 2*exp(-0.7*t) + noise;                      % amplitudo terukur

Nilai A = 2 dan lambda = 0.7 di baris ketiga adalah rahasia yang kita sembunyikan dari optimizer — tugas fitting adalah menemukannya kembali dari data yang sudah tercemar noise. Alur lengkapnya:

Diagram di atas adalah siklus umum setiap fitting: prediksi → skor → perbaikan, dan setelah konvergen pemeriksaan residu memutuskan apakah modelnya pantas dipercaya. Dua kotak terakhir bukan formalitas — bagian akhir chapter menunjukkan fit yang “terlalu bagus” justru layak dicurigai.

Fungsi Objektif: SSR #

Aturannya: kedekatan model-data harus diringkas menjadi satu angka yang bisa diminimalkan — pilihan standarnya sum of squared residuals, SSR = sum((y - yPred)^2). Mekanismenya: kuadrat membuat residu positif (galat tidak saling meniadakan), menghukum residu besar lebih berat, dan menghasilkan permukaan mulus yang mudah dioptimasi. Di MATLAB, SSR menjadi anonymous function dua lapis:

matlab
model  = @(p, t) p(1)*exp(-p(2)*t);             % prediksi model
ssrFun = @(p) sum((y - model(p, t)).^2);        % SSR untuk parameter p

Baris pertama mendefinisikan prediksi sebagai fungsi parameter p = [A; lambda] dan waktu t; baris kedua memanggilnya lalu menjumlahkan kuadrat selisihnya. Pemanggilan ssrFun([1.6, 0.5]) mengembalikan satu angka — semakin kecil, semakin dekat model ke data. Seluruh pekerjaan fitting sesudah ini hanya soal mencari p yang meminimalkan fungsi itu.

Grid Search: Peta Lanskap SSR #

Aturan pengamat dulu sebelum melompat: hitung SSR pada kombinasi parameter bergrid, supaya bentuk lanskapnya terlihat sebelum memakai optimizer. Mekanismenya: double loop mengisi matriks S(i, j) — baris untuk kandidat A, kolom untuk kandidat lambda — lalu min(S(:)) menemukan sel terkecil dan ind2sub mengembalikan posisinya:

matlab
Av = [1.6, 1.8, 2.0, 2.2];                      % kandidat amplitudo A
lv = [0.5, 0.6, 0.7, 0.8];                      % kandidat laju lambda
fprintf('SSR untuk kombinasi (A, lambda):\n');
for i = 1:numel(Av)
    fprintf('A = %4.1f :', Av(i));
    for j = 1:numel(lv)
        S(i, j) = ssrFun([Av(i), lv(j)]);
        fprintf(' %7.4f', S(i, j));
    end
    fprintf('\n');
end
[Smin, idx] = min(S(:));
[baris, kolom] = ind2sub(size(S), idx);
fprintf('Grid terbaik : A = %.1f, lambda = %.1f (SSR = %.4f)\n\n', ...
    Av(baris), lv(kolom), Smin);

Output yang Dihasilkan:

text
SSR untuk kombinasi (A, lambda):
A =  1.6 :  0.3386  0.2971  0.3753  0.5122
A =  1.8 :  0.2754  0.1144  0.1203  0.2132
A =  2.0 :  0.4147  0.1087  0.0242  0.0595
A =  2.2 :  0.7565  0.2801  0.0869  0.0510
Grid terbaik : A = 2.0, lambda = 0.7 (SSR = 0.0242)

Tabelnya terbaca seperti peta: SSR mengecil menuju sel (A = 2.0, lambda = 0.7) bernilai 0.0242 — tepat di rahasia kita — lalu membesar lagi saat parameter bergeser. Grid kasar ini punya dua keterbatasan: nilai terbaiknya terkunci pada simpul grid (0.2 untuk A, 0.1 untuk lambda), dan jumlah evaluasinya tumbuh eksponensial terhadap jumlah parameter — grid 4×4 untuk dua parameter, 4⁵ = 1024 untuk lima.

fminsearch dan Kualitas Fit #

Aturan penyempurna: serahkan pencarian kontinu ke fminsearch — Nelder-Mead simplex, metode tanpa turunan yang mengubah-ubah simplex parameter (refleksi, ekspansi, kontraksi) sampai SSR berhenti turun. Mekanismenya: fungsi objektif kita sudah berbentuk tepat yang diminta — satu fungsi dari vektor parameter ke satu angka — jadi cukup dilempar bersama tebakan awal:

matlab
opts  = optimset('TolX', 1e-8, 'TolFun', 1e-8);
pAwal = [1.5; 0.5];                             % tebakan awal
[pFit, ssrMin] = fminsearch(ssrFun, pAwal, opts);
fprintf('fminsearch  : A = %.4f, lambda = %.4f\n', pFit(1), pFit(2));
fprintf('SSR minimum : %.4f\n', ssrMin);

yPred = model(pFit, t);
SStot = sum((y - mean(y)).^2);
R2    = 1 - ssrMin / SStot;
res   = y - yPred;
fprintf('R^2         : %.4f\n', R2);
fprintf('Residu      : %+.3f %+.3f %+.3f (3 titik pertama)\n', res(1), res(2), res(3));

Output yang Dihasilkan:

text
fminsearch  : A = 2.0488, lambda = 0.7282
SSR minimum : 0.0204
R^2         : 0.9951
Residu      : +0.031 -0.064 +0.034 (3 titik pertama)

Mari kita bedah baris-baris kode di atas:

  1. Baris 1 (opts = optimset(...)): toleransi TolX (perubahan parameter) dan TolFun (perubahan SSR) dikecilkan ke 1e-8 agar optimizer tidak berhenti terlalu dini.
  2. Baris 2-3 (fminsearch(ssrFun, pAwal, opts)): dua keluaran yang kita ambil — parameter terbaik pFit dan nilai SSR-nya ssrMin; tebakan awal [1.5; 0.5] sengaja tidak dekat dengan jawaban, dan fminsearch tetap menemukannya.
  3. Baris 8 (SStot): variasi total data di sekitar rata-ratanya — pembanding untuk menilai seberapa banyak variasi yang dijelaskan model.
  4. Baris 9 (R2 = 1 - ssrMin/SStot): coefficient of determination — R² = 1 berarti model menangkap seluruh variasi; hasil 0.9951 berarti 99.5% variasi amplitudo dijelaskan oleh eksponensial ini.
  5. Baris 10-12 (res, fprintf): residu y - yPred dicetak untuk tiga titik pertama — nilainya kecil dan bertanda campur (+, −, +), ciri residu acak yang sehat.

Hasil A = 2.0488 dan lambda = 0.7282 berjarak 2-4% dari rahasia 2 dan 0.7 — selisih wajar sebesar noise yang kita suntikkan. SSR turun dari 0.0242 (grid) ke 0.0204 karena fminsearch bergerak kontinu di antara simpul grid.

Identifiability dan Jebakan Overfit #

Dua pertanyaan terakhir menutup analisis. Pertama, apakah parameter unik? Tidak selalu: pada model y = (a*b)*x, hanya produk a*b yang bisa ditentukan dari data — pasangan (2, 3) dan (4, 1.5) menghasilkan prediksi identik, sehingga optimizer boleh melaporkan salah satunya secara acak. Parameter seperti ini tidak identifiabel; solusinya mengurangi parameter, mengikat nilainya, atau menambah data di kondisi yang memisahkan perannya. Kasus halusnya dua decay eksponensial dengan laju hampir sama: secara matematis dua parameter, secara praktis nyaris satu.

Kedua, apakah fit yang makin rapat makin baik? Tidak juga — polynomial derajat 9 bisa melewati semua 10 titik data dengan SSR ≈ 0, tetapi kurvanya berayun liar di antara titik: model sedang menghafal noise, bukan menangkap pola. Gejalanya dan penanganannya:

GejalaDiagnosisTindakan
SSR besar, residu acaknoise pengukuran memang besarlaporkan galat, perbanyak data
residu berpola (melengkung, periodik)bentuk model kurang tepatubah model, bukan tambah parameter
SSR ≈ 0 dengan parameter banyakoverfitsederhanakan model, validasi ke data baru
parameter berubah liar antar percobaan fittidak identifiabelkurangi atau ikat parameter

Ringkasan #

Fitting membalik arah model: dari data (t, y) kita cari parameter p yang meminimalkan SSR = sum((y - model(p, t))^2). Grid search memetakan lanskapnya (minimum di sel A = 2.0, lambda = 0.7, SSR = 0.0242) dan memilih tebakan awal; fminsearch menyempurnakan secara kontinu hingga A = 2.0488, lambda = 0.7282 dengan SSR = 0.0204. Kualitas fit dibaca dari tiga sumber sekaligus: nilai SSR, R² = 1 − SSR/SStot (0.9951 di sini), dan residu yang harus acak — pola pada residu atau parameter yang tidak unik menandakan model perlu direvisi, bukan sekadar dioptimasi lebih keras. Berkas contoh.m pada bagian bawah halaman menjalankan keseluruhan analisis dalam satu script.