Dokumentasi Algoritma Sistem Market Mural

Penjabaran matematis Multi Layer Perceptron (MLP) & Random Forest Regressor — dari rumus hingga hasil estimasi harga. Seluruh rumus dan langkah pada dokumen ini sesuai dengan implementasi kode pada folder includes/ml/.

Daftar Isi
  1. Alur Umum Sistem
  2. Tahap 1 — Pra-pemrosesan Data (Encoding & Normalisasi)
  3. Tahap 2A — Multi Layer Perceptron (MLP)
  4. Tahap 2B — Random Forest Regressor
  5. Tahap 3 — Evaluasi Model (MAE, RMSE, R²)
  6. Tahap 4 — Pemilihan Model Terbaik
  7. Pemetaan Rumus ↔ Kode Program

1. Alur Umum Sistem

Sistem menerima 5 spesifikasi mural, memprosesnya, lalu memprediksi harga dengan dua algoritma secara paralel. Alurnya:

Input (ukuran, kerumitan, bahan, lokasi, waktu) → EncodingNormalisasi Min-Max → [ MLP  &  Random Forest ] → Denormalisasi → Harga (Rp) → pilih model dengan error terkecil

Karena kedua algoritma bekerja pada angka, tahap pra-pemrosesan wajib dilakukan lebih dulu.

2. Tahap 1 — Pra-pemrosesan Data

2.1 Encoding fitur

Data kategorikal (teks) diubah menjadi angka dengan aturan tetap (deterministik):

FiturTipeAturan encoding
Ukuran bidangnumerikdipakai langsung (m²)
Estimasi waktunumerikdipakai langsung (hari)
Tingkat kerumitanordinalSederhana=1, Sedang=2, Rumit=3
Jenis bahan/catindeksindeks biaya bahan 1,0 – 2,6
Lokasiindeksfaktor biaya kota 1,0 – 1,35

Hasilnya sebuah vektor fitur x = (x1, x2, x3, x4, x5).

2.2 Normalisasi Min-Max

Skala tiap fitur berbeda jauh (mis. ukuran 3–75 vs kerumitan 1–3). Agar setara, semua diskalakan ke rentang [0, 1] memakai normalisasi Min-Max Han, Kamber & Pei, 2011:

x′ = xxminxmaxxmin (2.1)

Nilai xmin dan xmax diambil dari data latih, lalu disimpan bersama model agar input baru diproses dengan skala yang sama. Target harga y juga dinormalisasi dengan rumus yang sama menjadi y′ ∈ [0,1].

Contoh

Ukuran 12 m², bila pada data latih ukuran min = 2,5 dan max = 75:

x′ = 12 − 2,575 − 2,5 = 9,572,5 = 0,131

3. Tahap 2A — Multi Layer Perceptron (MLP)

MLP adalah jaringan saraf tiruan berlapis (feed-forward) yang memetakan input ke output melalui neuron-neuron berbobot. Sistem ini memakai arsitektur:

5 input
16 (ReLU)
8 (ReLU)
1 output

Arsitektur: 5 → 16 → 8 → 1

3.1 Inisialisasi bobot (He Initialization)

Bobot awal W diacak dari distribusi normal dengan varians yang disesuaikan jumlah input tiap neuron (nin), sesuai metode He He et al., 2015 yang cocok untuk aktivasi ReLU:

Wij ~ 𝒩(0, σ²),   σ = 2nin (3.1)

Bias awal b = 0.

3.2 Forward Propagation (perambatan maju)

Untuk setiap layer l, keluaran tiap neuron dihitung 2 langkah: (a) penjumlahan berbobot, (b) fungsi aktivasi.

(a) Penjumlahan berbobot (weighted sum)

zj(l) = i Wij(l) ai(l−1) + bj(l) (3.2)

dengan a(l−1) = keluaran layer sebelumnya (untuk layer pertama, a(0) = x′ input ternormalisasi).

(b) Fungsi aktivasi ReLU (untuk layer tersembunyi)

ReLU (Rectified Linear Unit) Nair & Hinton, 2010:

aj(l) = ReLU(zj(l)) = max(0, zj(l)) (3.3)

(c) Layer output (linear)

Karena ini regresi (memprediksi angka), neuron output memakai fungsi linear (tanpa ReLU):

ŷ = z(L) = i Wi(L) ai(L−1) + b(L) (3.4)

Nilai ŷ masih dalam skala ternormalisasi [0,1].

3.3 Fungsi Loss (Mean Squared Error)

Seberapa jauh prediksi dari nilai sebenarnya diukur dengan MSE. Untuk satu sampel dipakai bentuk ½ agar turunannya bersih:

L = 12(ŷy′(3.5)

3.4 Backpropagation (perambatan mundur)

Algoritma backpropagation Rumelhart, Hinton & Williams, 1986 menghitung gradien loss terhadap tiap bobot memakai aturan rantai (chain rule), dari output mundur ke input.

(a) Error pada layer output (δ)

Karena output linear dan loss ½(ŷ−y′)²:

δ(L) = ŷy′ (3.6)

(b) Error layer tersembunyi

Error dirambatkan mundur, dikalikan turunan ReLU:

δi(l) = (j Wij(l+1) δj(l+1)) · ReLU′(zi(l)) (3.7)

dengan turunan ReLU:

ReLU′(z) = { 1, jika z > 0  
  0, jika z ≤ 0 }
(3.8)

(c) Gradien bobot & bias

LWij(l) = ai(l−1) δj(l) + λWij(l)  ,  Lbj(l) = δj(l) (3.9)

Suku λW adalah regularisasi L2 (λ = 0,0001) untuk mencegah overfitting. Gradien dirata-rata pada satu mini-batch berukuran 16.

3.5 Optimasi bobot dengan Adam

Bobot diperbarui memakai optimizer Adam Kingma & Ba, 2015, yang menggabungkan momentum dan laju belajar adaptif. Misal gt gradien saat iterasi t:

mt = β1mt−1 + (1−β1)gt (3.10) — estimasi momen ke-1
vt = β2vt−1 + (1−β2)gt² (3.11) — estimasi momen ke-2
t = mt1 − β1t  ,  t = vt1 − β2t (3.12) — koreksi bias
θt = θt−1 − η · tt + ε (3.13) — pembaruan bobot

dengan konstanta pada sistem: laju belajar η = 0,01; β1 = 0,9; β2 = 0,999; ε = 10−8. θ mewakili tiap bobot/bias. Langkah 3.2–3.5 diulang selama 500 epoch.

3.6 Contoh perhitungan (jaringan mini 2→2→1)

Forward pass

Misal input x′ = (0,5 ; 0,8), bobot & bias:

W1 = [[0,3 ; −0,2],[0,4 ; 0,1]], b1 = [0,1 ; −0,1]; W2 = [0,6 ; −0,5], b2 = 0,2.

Layer tersembunyi (pers. 3.2 & 3.3):

z1 = 0,5·0,3 + 0,8·0,4 + 0,1 = 0,57 → a1 = ReLU(0,57) = 0,57

z2 = 0,5·(−0,2) + 0,8·0,1 + (−0,1) = −0,12 → a2 = ReLU(−0,12) = 0

Layer output (pers. 3.4):

ŷ = 0,57·0,6 + 0·(−0,5) + 0,2 = 0,542

Backward pass

Bila target y′ = 0,5 → δ(L) = 0,542 − 0,5 = 0,042 (pers. 3.6)

Gradien: ∂L/∂W21 = a1·δ = 0,57·0,042 = 0,0239

δ neuron tersembunyi 1: z1 > 0 → ReLU′=1, maka δ = 0,042·0,6·1 = 0,0252 (pers. 3.7)

Neuron 2: z2 ≤ 0 → ReLU′=0 → δ = 0 (neuron "mati" untuk sampel ini). Nilai-nilai gradien ini kemudian dimasukkan ke Adam (pers. 3.10–3.13) untuk memperbarui bobot.

3.7 Denormalisasi → Harga Rupiah

Output ŷ masih [0,1], dikembalikan ke rupiah dengan kebalikan pers. (2.1):

Harga = ŷ · (ymaxymin) + ymin (3.14)

Contoh

Bila ŷ = 0,092 dan pada data latih harga min = Rp1.070.000, max = Rp35.050.000:

Harga = 0,092 · (35.050.000 − 1.070.000) + 1.070.000 = 0,092 · 33.980.000 + 1.070.000 = Rp4.196.160

4. Tahap 2B — Random Forest Regressor

Random Forest Breiman, 2001 adalah gabungan (ensemble) banyak pohon regresi. Tiap pohon dilatih pada sampel data acak, lalu prediksi akhir = rata-rata semua pohon. Sistem ini memakai T = 120 pohon.

4.1 Pohon Regresi (CART)

Tiap pohon dibangun dengan algoritma CART Breiman et al., 1984. Pohon membagi data secara rekursif dengan aturan fitur ≤ ambang. Ambang dipilih agar keragaman (varians) nilai harga di anak-cabang sekecil mungkin.

(a) Varians simpul

Untuk himpunan data S pada satu simpul:

Var(S) = 1|S| i∈S (yiȳS)²  ,  ȳS = 1|S|i∈S yi (4.1)

(b) Kriteria pemisahan (variance reduction)

Sebuah split (fitur j, ambang t) memecah S menjadi SL = {xjt} dan SR = {xj > t}. Varians berbobot anak:

Varanak = |SL||S| Var(SL) + |SR||S| Var(SR) (4.2)

Dipilih split yang memaksimalkan penurunan varians (variance reduction):

ΔVar = Var(S) − Varanak  →  pilih (j, t) dengan ΔVar terbesar (4.3)

(c) Nilai daun (leaf)

Pembagian berhenti bila kedalaman maksimum tercapai (20) atau jumlah sampel < 2. Nilai prediksi sebuah daun = rata-rata harga sampel di daun tersebut:

cdaun = ȳdaun (4.4)

Contoh perhitungan variance reduction

Enam mural dengan harga (juta): S = {1,2 ; 1,5 ; 2,0 ; 5,0 ; 5,5 ; 6,0}

ȳS = 21,2 / 6 = 3,533  →  Var(S) = 24,03/6 = 4,006 (pers. 4.1)

Split pada ukuran (misal ambang tertentu) → SL={1,2 ; 1,5 ; 2,0}, SR={5,0 ; 5,5 ; 6,0}:

ȳL=1,567; Var(SL)=0,109  ·  ȳR=5,5; Var(SR)=0,167

Varanak = (3/6)·0,109 + (3/6)·0,167 = 0,138 (pers. 4.2)

ΔVar = 4,006 − 0,138 = 3,868 → penurunan besar, split ini sangat baik (pers. 4.3).

Prediksi: daun kiri = 1,567 jt, daun kanan = 5,5 jt (pers. 4.4).

4.2 Bagging (Bootstrap Aggregating)

Agar 120 pohon berbeda, tiap pohon dilatih pada sampel bootstrap Breiman, 1996: n data diambil acak dengan pengembalian dari data latih (sehingga sebagian data terduplikasi, sebagian tak terpakai).

4.3 Random Feature Subset

Pada setiap split, hanya mtry = 4 fitur (dari 5) yang dipilih acak sebagai kandidat. Ini membuat pohon-pohon tidak seragam dan mengurangi korelasi antar-pohon — inti keunggulan Random Forest.

4.4 Agregasi — prediksi akhir

Prediksi hutan = rata-rata prediksi seluruh pohon ht:

ŷ = 1T t=1T ht(x)  ,   T = 120 (4.5)

Nilai ŷ ini (skala ternormalisasi) lalu didenormalisasi memakai pers. (3.14) untuk menjadi harga rupiah — sama seperti MLP.

📌 Kenapa hasil RF "bertangga"? Karena tiap pohon hanya bisa mengeluarkan nilai rata-rata daun (pers. 4.4), dan tidak bisa memprediksi di luar rentang harga data latih (tidak bisa extrapolate). Ini kelebihan pada data ber-pola tangga/kategori, namun kekurangan pada permukaan harga yang mulus.

5. Tahap 3 — Evaluasi Model

Setelah dilatih, kedua model diuji pada 20% data uji (yang tidak dipakai saat latih). Tiga metrik dihitung Hastie et al., 2009:

Mean Absolute Error (MAE)

MAE = 1n i=1n |yiŷi| (5.1)

Rata-rata selisih absolut. Makin kecil makin baik.

Root Mean Squared Error (RMSE)

RMSE = 1n i=1n (yiŷi (5.2)

Akar rata-rata kuadrat error; memberi penalti lebih besar pada error besar. Dipakai sebagai kriteria pemilihan model.

Koefisien Determinasi (R²)

R² = 1 − i(yiŷi i(yiȳ (5.3)

Proporsi variasi harga yang berhasil dijelaskan model. Nilai mendekati 1 = makin baik.

6. Tahap 4 — Pemilihan Model Terbaik

Sistem membandingkan RMSE kedua model dan memilih yang RMSE-nya terkecil sebagai model rekomendasi (ditandai is_recommended di database), lalu harga dari model itu dipakai sebagai harga final:

Model terpilih = arg minm ∈ {MLP, RF} RMSEm (6.1)
Karena pembagian data latih/uji dilakukan acak tiap pelatihan, model pemenang dapat berubah antar sesi training. Inilah alasan sistem selalu melatih & membandingkan kedua algoritma, bukan mengandalkan satu saja.

7. Pemetaan Rumus ↔ Kode Program

RumusBerkas kode
(2.1) Normalisasi Min-Maxincludes/ml/Preprocessor.phpscaleFeatures(), scaleTarget()
(3.1) He initMLPRegressor.phpinitParams(), gauss()
(3.2)–(3.4) Forward propagationMLPRegressor.phpforward()
(3.5)–(3.9) Loss & backpropagationMLPRegressor.phpfit()
(3.10)–(3.13) Adam optimizerMLPRegressor.phpfit() (blok update)
(3.14) DenormalisasiPreprocessor.phpinverseTarget()
(4.1)–(4.4) Pohon CARTDecisionTreeRegressor.phpbuild(), variance()
(4.5) Bagging & agregasiRandomForestRegressor.phpfit(), predictOne()
(5.1)–(5.3) MAE, RMSE, R²ModelManager.phpevaluate()
(6.1) Pemilihan modelModelManager.phptrainAll()

Dokumen ini bagian dari Sistem Market Mural — Penentuan Harga Otomatis dengan MLP & Random Forest Regressor.