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/.
Sistem menerima 5 spesifikasi mural, memprosesnya, lalu memprediksi harga dengan dua algoritma secara paralel. Alurnya:
Karena kedua algoritma bekerja pada angka, tahap pra-pemrosesan wajib dilakukan lebih dulu.
Data kategorikal (teks) diubah menjadi angka dengan aturan tetap (deterministik):
| Fitur | Tipe | Aturan encoding |
|---|---|---|
| Ukuran bidang | numerik | dipakai langsung (m²) |
| Estimasi waktu | numerik | dipakai langsung (hari) |
| Tingkat kerumitan | ordinal | Sederhana=1, Sedang=2, Rumit=3 |
| Jenis bahan/cat | indeks | indeks biaya bahan 1,0 – 2,6 |
| Lokasi | indeks | faktor biaya kota 1,0 – 1,35 |
Hasilnya sebuah vektor fitur x = (x1, x2, x3, x4, x5).
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:
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].
Ukuran 12 m², bila pada data latih ukuran min = 2,5 dan max = 75:
MLP adalah jaringan saraf tiruan berlapis (feed-forward) yang memetakan input ke output melalui neuron-neuron berbobot. Sistem ini memakai arsitektur:
Arsitektur: 5 → 16 → 8 → 1
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:
Bias awal b = 0.
Untuk setiap layer l, keluaran tiap neuron dihitung 2 langkah: (a) penjumlahan berbobot, (b) fungsi aktivasi.
dengan a(l−1) = keluaran layer sebelumnya (untuk layer pertama, a(0) = x′ input ternormalisasi).
ReLU (Rectified Linear Unit) Nair & Hinton, 2010:
Karena ini regresi (memprediksi angka), neuron output memakai fungsi linear (tanpa ReLU):
Nilai ŷ masih dalam skala ternormalisasi [0,1].
Seberapa jauh prediksi dari nilai sebenarnya diukur dengan MSE. Untuk satu sampel dipakai bentuk ½ agar turunannya bersih:
Algoritma backpropagation Rumelhart, Hinton & Williams, 1986 menghitung gradien loss terhadap tiap bobot memakai aturan rantai (chain rule), dari output mundur ke input.
Karena output linear dan loss ½(ŷ−y′)²:
Error dirambatkan mundur, dikalikan turunan ReLU:
dengan turunan ReLU:
Suku λW adalah regularisasi L2 (λ = 0,0001) untuk mencegah overfitting. Gradien dirata-rata pada satu mini-batch berukuran 16.
Bobot diperbarui memakai optimizer Adam Kingma & Ba, 2015, yang menggabungkan momentum dan laju belajar adaptif. Misal gt gradien saat iterasi t:
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.
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
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.
Output ŷ masih [0,1], dikembalikan ke rupiah dengan kebalikan pers. (2.1):
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
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.
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.
Untuk himpunan data S pada satu simpul:
Sebuah split (fitur j, ambang t) memecah S menjadi SL = {xj ≤ t} dan SR = {xj > t}. Varians berbobot anak:
Dipilih split yang memaksimalkan penurunan varians (variance reduction):
Pembagian berhenti bila kedalaman maksimum tercapai (20) atau jumlah sampel < 2. Nilai prediksi sebuah daun = rata-rata harga sampel di daun tersebut:
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).
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).
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.
Prediksi hutan = rata-rata prediksi seluruh pohon ht:
Nilai ŷ ini (skala ternormalisasi) lalu didenormalisasi memakai pers. (3.14) untuk menjadi harga rupiah — sama seperti MLP.
Setelah dilatih, kedua model diuji pada 20% data uji (yang tidak dipakai saat latih). Tiga metrik dihitung Hastie et al., 2009:
Rata-rata selisih absolut. Makin kecil makin baik.
Akar rata-rata kuadrat error; memberi penalti lebih besar pada error besar. Dipakai sebagai kriteria pemilihan model.
Proporsi variasi harga yang berhasil dijelaskan model. Nilai mendekati 1 = makin baik.
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:
| Rumus | Berkas kode |
|---|---|
| (2.1) Normalisasi Min-Max | includes/ml/Preprocessor.php → scaleFeatures(), scaleTarget() |
| (3.1) He init | MLPRegressor.php → initParams(), gauss() |
| (3.2)–(3.4) Forward propagation | MLPRegressor.php → forward() |
| (3.5)–(3.9) Loss & backpropagation | MLPRegressor.php → fit() |
| (3.10)–(3.13) Adam optimizer | MLPRegressor.php → fit() (blok update) |
| (3.14) Denormalisasi | Preprocessor.php → inverseTarget() |
| (4.1)–(4.4) Pohon CART | DecisionTreeRegressor.php → build(), variance() |
| (4.5) Bagging & agregasi | RandomForestRegressor.php → fit(), predictOne() |
| (5.1)–(5.3) MAE, RMSE, R² | ModelManager.php → evaluate() |
| (6.1) Pemilihan model | ModelManager.php → trainAll() |
Dokumen ini bagian dari Sistem Market Mural — Penentuan Harga Otomatis dengan MLP & Random Forest Regressor.