Random Forest: Contoh Perhitungan Manual, Gini, Bootstrap, dan Voting

Tutorial ini membahas Random Forest dan contoh perhitungan manualnya untuk klasifikasi. Contoh kasus yang digunakan adalah menentukan kelayakan kredit berdasarkan beberapa atribut calon nasabah.

Perhitungan dimulai dari bootstrap sampling, pemilihan subset fitur, perhitungan Gini Impurity, pembentukan beberapa decision tree, prediksi dari masing-masing pohon, hingga penentuan hasil akhir menggunakan majority voting.


Daftar Isi


Pengertian Random Forest

Random Forest adalah metode ensemble learning yang menggabungkan banyak decision tree. Setiap pohon dilatih menggunakan sampel data dan subset fitur yang berbeda agar antar-pohon memiliki variasi.

Untuk kasus klasifikasi, setiap pohon menghasilkan satu kelas. Hasil akhir Random Forest ditentukan dari kelas yang memperoleh suara terbanyak atau majority voting.

Rumus Gini Impurity

Pada contoh ini, kualitas pemisahan node dihitung menggunakan Gini Impurity.

$$ Gini(S) = 1 - \sum_{i=1}^{n} p_i^2 $$

Setelah data dibagi berdasarkan sebuah atribut, Gini hasil split dihitung:

$$ Gini_{split}(S,A) = \sum_{v \in Values(A)} \frac{|S_v|}{|S|} Gini(S_v) $$

Penurunan Gini:

$$ \Delta Gini = Gini(S) - Gini_{split}(S,A) $$

Atribut dengan penurunan Gini yang lebih besar menghasilkan pemisahan yang lebih baik pada node tersebut.

#01 Data Latih

Contoh menggunakan 10 data latih dengan target Kelayakan.

No Penghasilan Pekerjaan Jaminan Riwayat Kelayakan
D1 Rendah Kontrak Tidak Buruk Tidak Layak
D2 Rendah Usaha Tidak Baik Tidak Layak
D3 Sedang Kontrak Ada Baik Layak
D4 Sedang Tetap Ada Baik Layak
D5 Tinggi Tetap Ada Baik Layak
D6 Tinggi Usaha Ada Baik Layak
D7 Sedang Usaha Tidak Buruk Tidak Layak
D8 Tinggi Kontrak Tidak Baik Layak
D9 Rendah Tetap Ada Baik Layak
D10 Sedang Kontrak Tidak Baik Tidak Layak

#02 Bootstrap Sampling

Setiap decision tree dilatih menggunakan bootstrap sample, yaitu pengambilan data dengan pengembalian. Karena menggunakan pengembalian, satu data dapat muncul lebih dari satu kali di dalam sampel.

Contoh Tree 1 menggunakan indeks: D1, D2, D3, D4, D5, D5, D7, D8, D9, D10. Terlihat ada data yang muncul lebih dari satu kali. Hal ini merupakan karakteristik normal pada bootstrap sampling.

Tree Data Bootstrap
Tree 1 D1, D2, D3, D4, D5, D5, D7, D8, D9, D10
Tree 2 D1, D2, D2, D3, D4, D6, D7, D8, D9, D10
Tree 3 D1, D3, D4, D5, D6, D6, D7, D8, D9, D10

#03 Pemilihan Fitur

Selain menggunakan data bootstrap, Random Forest juga menggunakan subset fitur agar setiap pohon tidak selalu membentuk struktur yang sama.

Pada contoh manual ini, subset fitur ditentukan terlebih dahulu agar perhitungan dapat direproduksi dengan mudah. Dalam implementasi Random Forest pada library machine learning, subset fitur umumnya dipilih secara acak pada setiap split.

Tree Fitur yang Digunakan
Tree 1 Jaminan, Riwayat
Tree 2 Penghasilan, Pekerjaan
Tree 3 Riwayat, Penghasilan

#04 Perhitungan Setiap Decision Tree

Selanjutnya setiap bootstrap sample digunakan untuk membentuk decision tree. Sebelum tabel hasil ditampilkan, perhitungan Gini pada kandidat atribut ditunjukkan terlebih dahulu agar asal angkanya jelas.

Tree 1

Tree 1 memiliki 10 data bootstrap. Distribusi kelas: Tidak Layak = 4, Layak = 6.

Gini node awal: 1 - ((4/10)² + (6/10)²) = 0.48

Contoh Perhitungan Fitur Jaminan

Data dikelompokkan berdasarkan nilai Jaminan. Berikut rincian sebelum nilai Gini Split dirangkum.

Nilai Jaminan Jumlah Distribusi Kelas Gini Bobot Bobot × Gini
Tidak 5 Tidak Layak: 4, Layak: 1 0.32 5/10 = 0.5 0.5 × 0.32 = 0.16
Ada 5 Layak: 5 0 5/10 = 0.5 0.5 × 0 = 0

Gini Split Jaminan: (5/10 × 0.32) + (5/10 × 0) = 0.16

Penurunan Gini: 0.48 - 0.16 = 0.32

Contoh Perhitungan Fitur Riwayat

Data dikelompokkan berdasarkan nilai Riwayat. Berikut rincian sebelum nilai Gini Split dirangkum.

Nilai Riwayat Jumlah Distribusi Kelas Gini Bobot Bobot × Gini
Buruk 2 Tidak Layak: 2 0 2/10 = 0.2 0.2 × 0 = 0
Baik 8 Tidak Layak: 2, Layak: 6 0.375 8/10 = 0.8 0.8 × 0.375 = 0.3

Gini Split Riwayat: (2/10 × 0) + (8/10 × 0.375) = 0.3

Penurunan Gini: 0.48 - 0.3 = 0.18

Perbandingan Fitur Tree 1

Fitur Gini Split Penurunan Gini
Jaminan 0.16 0.32
Riwayat 0.3 0.18

Pohon Tree 1

Jaminan

  • Tidak → Riwayat
    • Buruk → Tidak Layak
    • Baik → Tidak Layak
  • Ada → Layak

Tree 2

Tree 2 memiliki 10 data bootstrap. Distribusi kelas: Tidak Layak = 5, Layak = 5.

Gini node awal: 1 - ((5/10)² + (5/10)²) = 0.5

Contoh Perhitungan Fitur Penghasilan

Data dikelompokkan berdasarkan nilai Penghasilan. Berikut rincian sebelum nilai Gini Split dirangkum.

Nilai Penghasilan Jumlah Distribusi Kelas Gini Bobot Bobot × Gini
Rendah 4 Tidak Layak: 3, Layak: 1 0.375 4/10 = 0.4 0.4 × 0.375 = 0.15
Sedang 4 Layak: 2, Tidak Layak: 2 0.5 4/10 = 0.4 0.4 × 0.5 = 0.2
Tinggi 2 Layak: 2 0 2/10 = 0.2 0.2 × 0 = 0

Gini Split Penghasilan: (4/10 × 0.375) + (4/10 × 0.5) + (2/10 × 0) = 0.35

Penurunan Gini: 0.5 - 0.35 = 0.15

Contoh Perhitungan Fitur Pekerjaan

Data dikelompokkan berdasarkan nilai Pekerjaan. Berikut rincian sebelum nilai Gini Split dirangkum.

Nilai Pekerjaan Jumlah Distribusi Kelas Gini Bobot Bobot × Gini
Kontrak 4 Tidak Layak: 2, Layak: 2 0.5 4/10 = 0.4 0.4 × 0.5 = 0.2
Usaha 4 Tidak Layak: 3, Layak: 1 0.375 4/10 = 0.4 0.4 × 0.375 = 0.15
Tetap 2 Layak: 2 0 2/10 = 0.2 0.2 × 0 = 0

Gini Split Pekerjaan: (4/10 × 0.5) + (4/10 × 0.375) + (2/10 × 0) = 0.35

Penurunan Gini: 0.5 - 0.35 = 0.15

Perbandingan Fitur Tree 2

Fitur Gini Split Penurunan Gini
Penghasilan 0.35 0.15
Pekerjaan 0.35 0.15

Pohon Tree 2

Penghasilan

  • Rendah → Pekerjaan
    • Kontrak → Tidak Layak
    • Usaha → Tidak Layak
    • Tetap → Layak
  • Sedang → Pekerjaan
    • Kontrak → Layak
    • Tetap → Layak
    • Usaha → Tidak Layak
  • Tinggi → Layak

Tree 3

Tree 3 memiliki 10 data bootstrap. Distribusi kelas: Tidak Layak = 3, Layak = 7.

Gini node awal: 1 - ((3/10)² + (7/10)²) = 0.42

Contoh Perhitungan Fitur Riwayat

Data dikelompokkan berdasarkan nilai Riwayat. Berikut rincian sebelum nilai Gini Split dirangkum.

Nilai Riwayat Jumlah Distribusi Kelas Gini Bobot Bobot × Gini
Buruk 2 Tidak Layak: 2 0 2/10 = 0.2 0.2 × 0 = 0
Baik 8 Layak: 7, Tidak Layak: 1 0.2188 8/10 = 0.8 0.8 × 0.2188 = 0.175

Gini Split Riwayat: (2/10 × 0) + (8/10 × 0.2188) = 0.175

Penurunan Gini: 0.42 - 0.175 = 0.245

Contoh Perhitungan Fitur Penghasilan

Data dikelompokkan berdasarkan nilai Penghasilan. Berikut rincian sebelum nilai Gini Split dirangkum.

Nilai Penghasilan Jumlah Distribusi Kelas Gini Bobot Bobot × Gini
Rendah 2 Tidak Layak: 1, Layak: 1 0.5 2/10 = 0.2 0.2 × 0.5 = 0.1
Sedang 4 Layak: 2, Tidak Layak: 2 0.5 4/10 = 0.4 0.4 × 0.5 = 0.2
Tinggi 4 Layak: 4 0 4/10 = 0.4 0.4 × 0 = 0

Gini Split Penghasilan: (2/10 × 0.5) + (4/10 × 0.5) + (4/10 × 0) = 0.3

Penurunan Gini: 0.42 - 0.3 = 0.12

Perbandingan Fitur Tree 3

Fitur Gini Split Penurunan Gini
Riwayat 0.175 0.245
Penghasilan 0.3 0.12

Pohon Tree 3

Riwayat

  • Buruk → Tidak Layak
  • Baik → Penghasilan
    • Sedang → Layak
    • Tinggi → Layak
    • Rendah → Layak

#05 Prediksi Data Uji

Data uji berikut akan diprediksi oleh masing-masing decision tree.

Penghasilan Pekerjaan Jaminan Riwayat
Tinggi Kontrak Tidak Baik

Prediksi Tree 1

Jalur keputusan: Jaminan = Tidak → Riwayat = Baik .

Hasil Tree 1 = Tidak Layak.

Prediksi Tree 2

Jalur keputusan: Penghasilan = Tinggi .

Hasil Tree 2 = Layak.

Prediksi Tree 3

Jalur keputusan: Riwayat = Baik → Penghasilan = Tinggi .

Hasil Tree 3 = Layak.

#06 Majority Voting

Setelah semua pohon memberikan prediksi, jumlah suara setiap kelas dihitung.

Hasil suara dari 3 pohon: Tidak Layak + Layak + Layak

Kelas Jumlah Suara
Layak 2
Tidak Layak 1

#07 Hasil Akhir Random Forest

Kelas dengan suara terbanyak adalah Layak. Dengan demikian, hasil klasifikasi Random Forest untuk data uji adalah Layak.

Contoh ini menggunakan 3 pohon agar perhitungan manual mudah diikuti. Pada implementasi nyata, Random Forest biasanya menggunakan jumlah pohon yang jauh lebih banyak dan parameter model dievaluasi menggunakan data validasi.

Ringkasan

Random Forest membentuk banyak decision tree dari bootstrap sample dan subset fitur yang berbeda. Setiap pohon menghasilkan prediksi sendiri. Untuk klasifikasi, seluruh prediksi kemudian digabungkan menggunakan majority voting sehingga diperoleh hasil akhir yang lebih stabil dibanding hanya menggunakan satu pohon pada banyak kasus.

FAQ Random Forest

Apa perbedaan Decision Tree dan Random Forest?

Decision Tree menggunakan satu pohon keputusan, sedangkan Random Forest menggabungkan banyak pohon dan menggabungkan prediksinya.

Apa itu bootstrap sampling?

Bootstrap sampling adalah pengambilan sampel dengan pengembalian. Karena itu, satu data dapat terpilih beberapa kali dan sebagian data dapat tidak masuk ke bootstrap sample tertentu.

Mengapa Random Forest memilih fitur secara acak?

Pemilihan subset fitur membantu menghasilkan variasi antar-pohon sehingga semua pohon tidak selalu membuat keputusan berdasarkan atribut yang sama.

Apa fungsi Gini Impurity?

Gini Impurity mengukur tingkat campuran kelas pada sebuah node. Nilai yang lebih kecil menunjukkan node yang lebih homogen.

Bagaimana Random Forest menentukan hasil klasifikasi?

Setiap decision tree memberikan satu prediksi kelas. Kelas yang memperoleh suara terbanyak dari seluruh pohon menjadi hasil akhir.

Apakah tiga pohon sudah cukup?

Tiga pohon digunakan pada tutorial ini untuk memudahkan perhitungan manual. Dalam penggunaan nyata, jumlah pohon umumnya lebih banyak dan dipilih berdasarkan evaluasi model.


Referensi

  1. Breiman, L. (2001). Random Forests. Machine Learning, 45, 5–32.
  2. Breiman, L., Friedman, J. H., Olshen, R. A. & Stone, C. J. (1984). Classification and Regression Trees. Wadsworth.

Source Code Random Forest

Berikut adalah beberapa source code yang menggunakan metode Random Forest, baik berbasis web maupun desktop.

Ada yang Ditanyakan?

Jika anda masih ada kesulitan atau kekeliruan tentang penjelasan metode di atas, bisa menghubungi kami lewat WA/Email sesuai halaman Kontak.

Jika ingin memiliki file excel dari metode di atas bisa melihat cara download di halaman Download.

Jika ingin memiliki source code dari metode di atas, baik berbasis web maupun desktop bisa melihat daftar harga donasi di halaman Daftar Source Code.

Donasi ini digunakan oleh penulis untuk membayar server dan membeli kopi sembari membuat tutorial Metode/Algoritma lainnya :).