C4.5 adalah salah satu algoritma klasifikasi berbasis pohon keputusan (decision tree) yang paling sering dipakai dalam data mining, termasuk untuk tugas akhir/skripsi. Sayangnya, banyak yang hanya menyalin hasil akhirnya dari aplikasi/tools tanpa benar-benar paham dari mana angka-angka Entropy dan Gain itu muncul.
Tulisan ini membahas perhitungan manual algoritma C4.5 dari nol, langkah per langkah, memakai rumus dan tabel biasa — tanpa aplikasi apa pun. Studi kasusnya klasifikasi kepuasan pelanggan, dengan 20 data sampel yang sengaja dibuat beragam, supaya pohon keputusan yang terbentuk tidak berhenti di satu-dua langkah saja (biar ada gambaran nyata bagaimana proses ini berulang/rekursif sampai beberapa level ke bawah).
Daftar isi
- 1 Studi Kasus dan Data Sampel
- 2 Variabel dan Atribut yang Digunakan
- 3 Langkah 1: Menghitung Entropy Total (Node 1)
- 4 Langkah 2: Menghitung Gain Tiap Atribut (Node 1)
- 5 Langkah 3: Iterasi ke Node Berikutnya
- 6 Pohon Keputusan Final
- 7 Rules Hasil Ekstraksi Pohon
- 8 Contoh Prediksi Data Baru
- 9 Catatan: Waspada Overfitting pada Node Kecil
- 10 Referensi
- 11 Penutup
1. Studi Kasus dan Data Sampel
Studi kasusnya: sebuah usaha ingin mengetahui faktor apa yang paling memengaruhi kepuasan pelanggannya, berdasarkan hasil kuesioner. Berikut 20 data sampel yang dipakai (kolom Keterangan adalah label/kelas aktual hasil kuesioner):
| No | Harga | Kualitas Produk | Layanan Pelanggan | Pengalaman Pembelian | Varietas Produk | Keterangan |
|---|---|---|---|---|---|---|
| 1 | Mahal | Sangat Baik | Baik | Sangat Baik | Lengkap | Puas |
| 2 | Mahal | Baik | Baik | Baik | Lengkap | Puas |
| 3 | Mahal | Baik | Baik | Sangat Baik | Lengkap | Puas |
| 4 | Mahal | Baik | Kurang Baik | Baik | Lengkap | Puas |
| 5 | Mahal | Sangat Baik | Baik | Baik | Sangat Lengkap | Puas |
| 6 | Mahal | Kurang Baik | Baik | Baik | Lengkap | Puas |
| 7 | Mahal | Kurang Baik | Tidak Baik | Kurang Baik | Kurang Lengkap | Tidak Puas |
| 8 | Murah | Baik | Baik | Baik | Lengkap | Puas |
| 9 | Murah | Baik | Kurang Baik | Baik | Kurang Lengkap | Puas |
| 10 | Murah | Kurang Baik | Kurang Baik | Baik | Kurang Lengkap | Puas |
| 11 | Murah | Kurang Baik | Kurang Baik | Kurang Baik | Kurang Lengkap | Tidak Puas |
| 12 | Murah | Kurang Baik | Tidak Baik | Kurang Baik | Kurang Lengkap | Tidak Puas |
| 13 | Murah | Tidak Baik | Tidak Baik | Kurang Baik | Kurang Lengkap | Tidak Puas |
| 14 | Mahal | Baik | Baik | Baik | Sangat Lengkap | Puas |
| 15 | Murah | Baik | Baik | Sangat Baik | Lengkap | Puas |
| 16 | Murah | Kurang Baik | Baik | Baik | Lengkap | Puas |
| 17 | Murah | Kurang Baik | Kurang Baik | Baik | Lengkap | Tidak Puas |
| 18 | Mahal | Kurang Baik | Baik | Kurang Baik | Kurang Lengkap | Puas |
| 19 | Murah | Tidak Baik | Kurang Baik | Kurang Baik | Kurang Lengkap | Tidak Puas |
| 20 | Mahal | Baik | Kurang Baik | Sangat Baik | Lengkap | Puas |
Dari 20 data di atas: 14 data berlabel Puas dan 6 data berlabel Tidak Puas.
2. Variabel dan Atribut yang Digunakan
Ada 5 atribut yang dipakai sebagai bahan pertimbangan (independent variable), dan 1 variabel kelas/target:
- Harga: Murah, Mahal
- Kualitas Produk: Sangat Baik, Baik, Kurang Baik, Tidak Baik
- Layanan Pelanggan: Baik, Kurang Baik, Tidak Baik
- Pengalaman Pembelian: Sangat Baik, Baik, Kurang Baik
- Varietas Produk: Sangat Lengkap, Lengkap, Kurang Lengkap
- Keterangan (kelas/target): Puas, Tidak Puas
3. Langkah 1: Menghitung Entropy Total (Node 1)
Langkah paling pertama dalam C4.5 adalah menghitung Entropy dari keseluruhan data (disebut Node 1 / node akar), memakai rumus:
- S = kumpulan data (dataset) yang sedang dihitung. |S| (dengan tanda kurung siku) artinya jumlah data di dalam S. Misalnya |S| = 20 berarti ada 20 baris data.
- Si = bagian dari S yang termasuk kelas ke-i (di kasus ini kelasnya cuma dua: Puas dan Tidak Puas). |Si| artinya jumlah data pada kelas tersebut.
- ∑ (sigma) = simbol "jumlahkan semua". Di rumus Entropy, artinya hasil untuk tiap kelas (Puas, lalu Tidak Puas) dihitung satu-satu, baru dijumlahkan.
- log2 = logaritma basis 2 (bukan logaritma basis 10 yang biasa dipakai di kalkulator biasa). Kalau di kalkulator/Excel tidak ada tombol log basis 2 langsung, bisa dihitung lewat
log2(x) = log(x) / log(2)(pakai log basis 10 biasa), atau di Excel tinggal pakai fungsi=LOG(x, 2). - Tanda − (minus) di depan rumus ada karena hasil log dari angka pecahan (antara 0 dan 1) itu selalu negatif, jadi diberi minus supaya hasil akhir Entropy-nya jadi angka positif.
- Entropy = 0 → data sudah murni, satu kelas semua (misal: Puas semua, atau Tidak Puas semua).
- Entropy = 1 → data paling campur aduk, persis separuh-separuh (misal 50% Puas, 50% Tidak Puas).
Karena kelas targetnya cuma dua (Puas / Tidak Puas), dari 20 data: Puas = 14, Tidak Puas = 6. Maka:
= −(0,7 × log2 0,7) − (0,3 × log2 0,3)
= −(0,7 × −0,51457) − (0,3 × −1,73697)
= 0,36020 + 0,52109
= 0,88129
Nilai Entropy Total = 0,88129 ini yang akan dipakai sebagai pembanding untuk menghitung Gain di langkah berikutnya.
4. Langkah 2: Menghitung Gain Tiap Atribut (Node 1)
Setelah Entropy Total didapat, langkah berikutnya adalah menghitung Entropy dan Gain untuk masing-masing dari 5 atribut. Rumus Gain-nya:
Jadi Gain pada dasarnya mengukur: "seberapa besar berkurangnya Entropy (ketidakteraturan) kalau data dipecah berdasarkan atribut ini?" Semakin besar nilai Gain suatu atribut, semakin efektif atribut itu memisahkan data ke kelas yang benar — makanya atribut dengan Gain tertinggi yang selalu dipilih jadi pemisah (split) di tiap node.
Contoh perhitungan detail untuk atribut Harga (2 nilai: Mahal dan Murah):
= −(9/10 × log2 9/10) − (1/10 × log2 1/10) = 0,46900
Entropy(Harga=Murah) → 5 Puas, 5 Tidak Puas dari 10 data
= −(5/10 × log2 5/10) − (5/10 × log2 5/10) = 1,00000
Gain(Harga) = 0,88129 − ((10/20 × 0,46900) + (10/20 × 1,00000))
= 0,88129 − 0,73450 = 0,14679
Dengan cara yang persis sama, dihitung juga Entropy & Gain untuk 4 atribut lainnya. Berikut rangkuman lengkapnya:
| Atribut | Nilai | Jumlah (S) | Puas | Tidak Puas | Entropy | Gain |
|---|---|---|---|---|---|---|
| Harga | Mahal | 10 | 9 | 1 | 0,46900 | 0,14679 |
| Murah | 10 | 5 | 5 | 1,00000 | ||
| Kualitas Produk | Sangat Baik | 2 | 2 | 0 | 0,00000 | 0,48129 |
| Baik | 8 | 8 | 0 | 0,00000 | ||
| Kurang Baik | 8 | 4 | 4 | 1,00000 | ||
| Tidak Baik | 2 | 0 | 2 | 0,00000 | ||
| Layanan Pelanggan | Baik | 10 | 10 | 0 | 0,00000 | 0,53646 |
| Kurang Baik | 7 | 4 | 3 | 0,98523 | ||
| Tidak Baik | 3 | 0 | 3 | 0,00000 | ||
| Pengalaman Pembelian | Sangat Baik | 4 | 4 | 0 | 0,00000 | 0,45179 |
| Baik | 10 | 9 | 1 | 0,46900 | ||
| Kurang Baik | 6 | 1 | 5 | 0,65002 | ||
| Varietas Produk | Lengkap | 10 | 9 | 1 | 0,46900 | 0,26502 |
| Sangat Lengkap | 2 | 2 | 0 | 0,00000 | ||
| Kurang Lengkap | 8 | 3 | 5 | 0,95443 |
Dari kelima atribut di atas, Layanan Pelanggan punya nilai Gain paling tinggi (0,53646). Maka atribut inilah yang menjadi node akar (root) dari pohon keputusan.
5. Langkah 3: Iterasi ke Node Berikutnya
Setelah root ditentukan, cek satu per satu cabangnya. Kalau sebuah cabang datanya sudah satu kelas semua (murni, Entropy = 0), cabang itu langsung jadi daun (leaf) dan berhenti di situ. Kalau belum murni, ulangi lagi proses hitung Entropy & Gain — tapi khusus untuk subset data di cabang tersebut, dan atribut yang sudah dipakai (Layanan Pelanggan) tidak dipakai lagi.
- Layanan Pelanggan = Baik → 10 data, semuanya Puas (murni) → langsung jadi daun: Puas.
- Layanan Pelanggan = Tidak Baik → 3 data, semuanya Tidak Puas (murni) → langsung jadi daun: Tidak Puas.
- Layanan Pelanggan = Kurang Baik → 7 data, campuran (4 Puas, 3 Tidak Puas) → belum murni, perlu split lagi → jadi Node 1.2.
5.1 Node 1.2 – Layanan Pelanggan = Kurang Baik
Subset datanya 7 baris (baris no. 4, 9, 10, 11, 12, 17, 20 dari tabel awal). Entropy node ini:
= −(4/7 × log2 4/7) − (3/7 × log2 3/7) = 0,98523
Atribut yang tersisa untuk dihitung Gain-nya tinggal 4 (Harga, Kualitas Produk, Pengalaman Pembelian, Varietas Produk) — Layanan Pelanggan tidak dihitung lagi karena sudah dipakai di Node 1.
| Atribut | Nilai | Jumlah (S) | Puas | Tidak Puas | Entropy | Gain |
|---|---|---|---|---|---|---|
| Harga | Mahal | 2 | 2 | 0 | 0,00000 | 0,29169 |
| Murah | 5 | 2 | 3 | 0,97095 | ||
| Kualitas Produk | Baik | 3 | 3 | 0 | 0,00000 | 0,59167 |
| Kurang Baik | 3 | 1 | 2 | 0,91830 | ||
| Tidak Baik | 1 | 0 | 1 | 0,00000 | ||
| Pengalaman Pembelian | Baik | 4 | 3 | 1 | 0,81128 | 0,52164 |
| Kurang Baik | 2 | 0 | 2 | 0,00000 | ||
| Sangat Baik | 1 | 1 | 0 | 0,00000 | ||
| Varietas Produk | Lengkap | 3 | 2 | 1 | 0,91830 | 0,02024 |
| Kurang Lengkap | 4 | 2 | 2 | 1,00000 |
Gain tertinggi ada pada Kualitas Produk (0,59167). Cek tiap cabangnya:
- Kualitas Produk = Baik → 3 data, semuanya Puas (murni) → daun: Puas.
- Kualitas Produk = Tidak Baik → 1 data, Tidak Puas (murni) → daun: Tidak Puas.
- Kualitas Produk = Kurang Baik → 3 data, campuran (1 Puas, 2 Tidak Puas) → belum murni → jadi Node 1.2.2.
5.2 Node 1.2.2 – Kualitas Produk = Kurang Baik
Subsetnya tinggal 3 data (baris no. 10, 11, 17). Entropy-nya:
= −(1/3 × log2 1/3) − (2/3 × log2 2/3) = 0,91830
Atribut tersisa tinggal 3: Harga, Pengalaman Pembelian, Varietas Produk.
| Atribut | Nilai | Jumlah (S) | Puas | Tidak Puas | Entropy | Gain |
|---|---|---|---|---|---|---|
| Harga | Murah (semua) | 3 | 1 | 2 | 0,91830 | 0,00000 |
| Pengalaman Pembelian | Baik | 2 | 1 | 1 | 1,00000 | 0,25163 |
| Kurang Baik | 1 | 0 | 1 | 0,00000 | ||
| Varietas Produk | Kurang Lengkap | 2 | 1 | 1 | 1,00000 | 0,25163 |
| Lengkap | 1 | 0 | 1 | 0,00000 |
Maka Node 1.2.2 split berdasarkan Pengalaman Pembelian:
- Pengalaman Pembelian = Kurang Baik → 1 data, Tidak Puas (murni) → daun: Tidak Puas.
- Pengalaman Pembelian = Baik → 2 data, campuran (1 Puas, 1 Tidak Puas) → belum murni → jadi Node 1.2.2.1.
5.3 Node 1.2.2.1 – Pengalaman Pembelian = Baik
Tinggal 2 data (baris no. 10 dan 17). Entropy-nya:
= −(1/2 × log2 1/2) − (1/2 × log2 1/2) = 1,00000 (paling tidak murni yang mungkin ada)
Atribut yang tersisa tinggal Harga dan Varietas Produk:
| Atribut | Nilai | Jumlah (S) | Puas | Tidak Puas | Entropy | Gain |
|---|---|---|---|---|---|---|
| Harga | Murah (semua) | 2 | 1 | 1 | 1,00000 | 0,00000 |
| Varietas Produk | Kurang Lengkap | 1 | 1 | 0 | 0,00000 | 1,00000 |
| Lengkap | 1 | 0 | 1 | 0,00000 |
Varietas Produk menang telak dengan Gain = 1,00000 (Gain maksimum untuk kasus 2 kelas), karena kedua nilainya langsung memisahkan kelas dengan sempurna:
- Varietas Produk = Kurang Lengkap → 1 data, Puas (murni) → daun: Puas.
- Varietas Produk = Lengkap → 1 data, Tidak Puas (murni) → daun: Tidak Puas.
Sampai di sini, seluruh cabang sudah jadi daun (murni). Proses pembentukan pohon selesai.
6. Pohon Keputusan Final
Berikut visualisasi lengkap pohon keputusan hasil seluruh perhitungan di atas:
-
Node 1Split: Layanan Pelanggan
14 Puas / 6 Tidak Puas-
BaikDaunPuas (n=10)
-
Kurang BaikNode 1.2Split: Kualitas Produk
4 Puas / 3 Tidak Puas-
BaikDaunPuas (n=3)
-
Kurang BaikNode 1.2.2Split: Pengalaman Pembelian
1 Puas / 2 Tidak Puas-
BaikNode 1.2.2.1Split: Varietas Produk
1 Puas / 1 Tidak Puas-
Kurang LengkapDaunPuas (n=1)
-
LengkapDaunTidak Puas (n=1)
-
-
Kurang BaikDaunTidak Puas (n=1)
-
-
Tidak BaikDaunTidak Puas (n=1)
-
-
Tidak BaikDaunTidak Puas (n=3)
-
Terlihat bahwa pohonnya tidak simetris — cabang Layanan Pelanggan = Baik dan Tidak Baik langsung berhenti di level pertama (karena datanya sudah murni), sementara cabang Kurang Baik harus diproses lebih dalam sampai 4 level ke bawah sebelum semua datanya benar-benar murni.
7. Rules Hasil Ekstraksi Pohon
Dari pohon di atas, setiap jalur dari akar sampai daun bisa diterjemahkan jadi satu rule IF-THEN:
- JIKA Layanan Pelanggan = "Baik" MAKA Keterangan = Puas (berlaku untuk 10 data)
- JIKA Layanan Pelanggan = "Kurang Baik" DAN Kualitas Produk = "Baik" MAKA Keterangan = Puas (3 data)
- JIKA Layanan Pelanggan = "Kurang Baik" DAN Kualitas Produk = "Kurang Baik" DAN Pengalaman Pembelian = "Baik" DAN Varietas Produk = "Kurang Lengkap" MAKA Keterangan = Puas (1 data)
- JIKA Layanan Pelanggan = "Kurang Baik" DAN Kualitas Produk = "Kurang Baik" DAN Pengalaman Pembelian = "Baik" DAN Varietas Produk = "Lengkap" MAKA Keterangan = Tidak Puas (1 data)
- JIKA Layanan Pelanggan = "Kurang Baik" DAN Kualitas Produk = "Kurang Baik" DAN Pengalaman Pembelian = "Kurang Baik" MAKA Keterangan = Tidak Puas (1 data)
- JIKA Layanan Pelanggan = "Kurang Baik" DAN Kualitas Produk = "Tidak Baik" MAKA Keterangan = Tidak Puas (1 data)
- JIKA Layanan Pelanggan = "Tidak Baik" MAKA Keterangan = Tidak Puas (3 data)
8. Contoh Prediksi Data Baru
Sekarang coba pakai pohon keputusan di atas untuk memprediksi data pelanggan baru yang belum pernah masuk ke data latih. Caranya: telusuri dari akar (Node 1), cocokkan nilai atributnya dengan cabang yang sesuai, terus turun sampai ketemu daun.
Contoh 1 – Jalur pendek (berhenti di level pertama)
| Harga | Mahal |
|---|---|
| Kualitas Produk | Baik |
| Layanan Pelanggan | Baik |
| Pengalaman Pembelian | Baik |
| Varietas Produk | Lengkap |
Penelusuran: Node 1 mengecek atribut Layanan Pelanggan. Nilainya "Baik" → langsung menuju daun Puas. Atribut lain (Harga, Kualitas Produk, dst) sama sekali tidak perlu dicek, karena node ini sudah berhenti di level pertama.
Contoh 2 – Jalur panjang (sampai daun terdalam)
| Harga | Murah |
|---|---|
| Kualitas Produk | Kurang Baik |
| Layanan Pelanggan | Kurang Baik |
| Pengalaman Pembelian | Baik |
| Varietas Produk | Kurang Lengkap |
Penelusuran:
- Node 1 → Layanan Pelanggan = "Kurang Baik" → lanjut ke Node 1.2
- Node 1.2 → Kualitas Produk = "Kurang Baik" → lanjut ke Node 1.2.2
- Node 1.2.2 → Pengalaman Pembelian = "Baik" → lanjut ke Node 1.2.2.1
- Node 1.2.2.1 → Varietas Produk = "Kurang Lengkap" → sampai ke daun Puas
Data ini persis mengikuti rule nomor 3 pada daftar rule di atas. Perhatikan betapa besar pengaruh satu atribut terakhir (Varietas Produk) pada kasus ini — kalau saja nilainya "Lengkap" bukan "Kurang Lengkap", hasil akhirnya akan berbalik jadi Tidak Puas (mengikuti rule nomor 4).
9. Catatan: Waspada Overfitting pada Node Kecil
Perhatikan Node 1.2.2.1 di atas: node ini di-split hanya berdasarkan 2 data (1 Puas, 1 Tidak Puas), dan hasilnya adalah dua daun yang masing-masing cuma didukung 1 data saja.
Secara matematis ini valid (Gain-nya memang 1,00000, sempurna), tapi secara statistik, keputusan yang diambil dari satu data tunggal jelas tidak terlalu bisa diandalkan (kalau data itu diganti sedikit saja, hasilnya bisa berubah total). Ini disebut overfitting — pohon "menghafal" data latih secara berlebihan, bukan menangkap pola yang benar-benar general.
Solusi umum untuk ini di praktik nyata: menerapkan pruning (pemangkasan pohon) atau memberi syarat minimum jumlah data per node sebelum boleh displit lagi. Untuk kebutuhan skripsi/tugas akhir, poin ini sering jadi bahan diskusi menarik di bagian "keterbatasan penelitian" — terutama kalau jumlah datanya memang masih terbatas seperti pada contoh 20 data ini.
10. Referensi
Rumus Entropy dan Information Gain yang dipakai di artikel ini sama dengan yang digunakan pada beberapa penelitian/jurnal berikut, yang juga menerapkan algoritma C4.5 untuk klasifikasi kepuasan pelanggan/pasien di berbagai studi kasus:
- Adriansa, M., Yulianti, L., & Elfianty, L. (2022). Analisis Kepuasan Pelanggan Menggunakan Algoritma C4.5. Jurnal Teknik Informatika UNIKA Santo Thomas, 7(1), 115–121. https://doi.org/10.54367/jtiust.v7i1.1983
- Jannah, E., Sihombing, V., & Masrizal. (2023). Penerapan Data Mining Klasifikasi Kepuasan Pelanggan Transportasi Online Menggunakan Algoritma C4.5. MEANS (Media Informasi Analisa dan Sistem), 8(1), 1–7. https://doi.org/10.54367/means.v8i1.2569
- Susanto, A., Luktian, I., Hengky, H., Utomo, R., & Rejeki, S. (2024). Penerapan Algoritma C4.5 Terhadap Tingkat Kepuasan Pasien Pada Pelayanan Penggunaan Toilet di RSAB Harapan Kita. Jurnal Komputer Antartika, 2(3), 88–94. https://doi.org/10.70052/jka.v2i3.335
- Telaumbanuaa, D., & Kurniawati, I. (2022). Penerapan Algoritma C4.5 Untuk Klasifikasi Kepuasan Pelanggan Pada Jasa Layanan Pengiriman. Jurnal Multi Media dan IT, 6(1), 1–6. https://doi.org/10.46961/jommit.v6i1
11. Penutup
Itulah proses lengkap perhitungan manual algoritma C4.5, dari data mentah sampai pohon keputusan dan rule siap pakai, murni pakai rumus Entropy dan Information Gain tanpa bantuan aplikasi. Kalau dirangkum, alurnya selalu sama setiap iterasi:
- Hitung Entropy node saat ini.
- Kalau sudah murni (Entropy = 0) atau atribut sudah habis → jadikan daun.
- Kalau belum murni → hitung Gain semua atribut tersisa, pilih yang Gain-nya paling tinggi sebagai pemisah (split).
- Ulangi langkah 1–3 untuk tiap cabang hasil split, sampai seluruh cabang jadi daun.
Pemahaman terhadap proses manual ini penting sebelum menggunakan aplikasi atau tools apa pun untuk data mining — dengan begitu, hasil yang ditampilkan aplikasi tidak lagi terasa seperti "kotak hitam", karena kamu sudah tahu persis bagaimana setiap angka Entropy, Gain, dan struktur pohonnya terbentuk.

Posting Komentar