Contoh Perhitungan Manual Algoritma C4.5 untuk Klasifikasi Kepuasan Pelanggan

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).

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):

NoHargaKualitas ProdukLayanan PelangganPengalaman PembelianVarietas ProdukKeterangan
1MahalSangat BaikBaikSangat BaikLengkapPuas
2MahalBaikBaikBaikLengkapPuas
3MahalBaikBaikSangat BaikLengkapPuas
4MahalBaikKurang BaikBaikLengkapPuas
5MahalSangat BaikBaikBaikSangat LengkapPuas
6MahalKurang BaikBaikBaikLengkapPuas
7MahalKurang BaikTidak BaikKurang BaikKurang LengkapTidak Puas
8MurahBaikBaikBaikLengkapPuas
9MurahBaikKurang BaikBaikKurang LengkapPuas
10MurahKurang BaikKurang BaikBaikKurang LengkapPuas
11MurahKurang BaikKurang BaikKurang BaikKurang LengkapTidak Puas
12MurahKurang BaikTidak BaikKurang BaikKurang LengkapTidak Puas
13MurahTidak BaikTidak BaikKurang BaikKurang LengkapTidak Puas
14MahalBaikBaikBaikSangat LengkapPuas
15MurahBaikBaikSangat BaikLengkapPuas
16MurahKurang BaikBaikBaikLengkapPuas
17MurahKurang BaikKurang BaikBaikLengkapTidak Puas
18MahalKurang BaikBaikKurang BaikKurang LengkapPuas
19MurahTidak BaikKurang BaikKurang BaikKurang LengkapTidak Puas
20MahalBaikKurang BaikSangat BaikLengkapPuas

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
Metode yang dipakai di sini adalah C4.5 dengan Information Gain biasa (bukan Gain Ratio) — sama seperti yang dipakai kebanyakan penelitian skripsi sejenis. Rumus dasarnya ada di bagian berikutnya.

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:

Entropy(S) = ∑ −(|Si| / |S|) × log2(|Si| / |S|)
Belum familiar dengan notasi di atas? Ini penjelasannya:
  • 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.
Secara intuitif, Entropy itu mengukur "seberapa campur aduk" suatu kumpulan data. Nilainya antara 0 dan 1 (untuk kasus 2 kelas seperti ini):
  • 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).
Semakin kecil Entropy suatu node, semakin "bersih"/seragam data di node itu.

Karena kelas targetnya cuma dua (Puas / Tidak Puas), dari 20 data: Puas = 14, Tidak Puas = 6. Maka:

Entropy(Node 1) = −(14/20 × log2(14/20)) − (6/20 × log2(6/20))
    = −(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:

Gain(S, A) = Entropy(S) − ∑ (|Si| / |S|) × Entropy(Si)
Cara baca rumus Gain di atas: Entropy(S) adalah Entropy sebelum data dipecah (nilainya sudah dihitung di langkah sebelumnya). Bagian ∑ (|Si| / |S|) × Entropy(Si) adalah "Entropy rata-rata setelah data dipecah berdasarkan atribut A" — dihitung dengan cara: untuk tiap nilai dari atribut A, hitung Entropy subset datanya, lalu dikalikan bobot (proporsi jumlah data subset itu terhadap total), baru dijumlahkan semuanya.

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):

Entropy(Harga=Mahal) → 9 Puas, 1 Tidak Puas dari 10 data
  = −(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:

AtributNilaiJumlah (S)PuasTidak PuasEntropyGain
HargaMahal10910,469000,14679
Murah10551,00000
Kualitas ProdukSangat Baik2200,000000,48129
Baik8800,00000
Kurang Baik8441,00000
Tidak Baik2020,00000
Layanan PelangganBaik101000,000000,53646
Kurang Baik7430,98523
Tidak Baik3030,00000
Pengalaman PembelianSangat Baik4400,000000,45179
Baik10910,46900
Kurang Baik6150,65002
Varietas ProdukLengkap10910,469000,26502
Sangat Lengkap2200,00000
Kurang Lengkap8350,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.

Node 1 → split berdasarkan Layanan Pelanggan. Nilai atribut ini ada 3: Baik, Kurang Baik, dan Tidak Baik — masing-masing jadi cabang yang perlu dicek lagi kemurniannya.

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:

Entropy(Node 1.2) → 4 Puas, 3 Tidak Puas dari 7 data
= −(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.

AtributNilaiJumlah (S)PuasTidak PuasEntropyGain
HargaMahal2200,000000,29169
Murah5230,97095
Kualitas ProdukBaik3300,000000,59167
Kurang Baik3120,91830
Tidak Baik1010,00000
Pengalaman PembelianBaik4310,811280,52164
Kurang Baik2020,00000
Sangat Baik1100,00000
Varietas ProdukLengkap3210,918300,02024
Kurang Lengkap4221,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:

Entropy(Node 1.2.2) → 1 Puas, 2 Tidak Puas dari 3 data
= −(1/3 × log2 1/3) − (2/3 × log2 2/3) = 0,91830

Atribut tersisa tinggal 3: Harga, Pengalaman Pembelian, Varietas Produk.

AtributNilaiJumlah (S)PuasTidak PuasEntropyGain
HargaMurah (semua)3120,918300,00000
Pengalaman PembelianBaik2111,000000,25163
Kurang Baik1010,00000
Varietas ProdukKurang Lengkap2111,000000,25163
Lengkap1010,00000
Perhatikan: Harga otomatis Gain-nya 0 karena seluruh 3 data di node ini nilainya Murah semua — tidak ada variasi nilai untuk dibandingkan, jadi atribut ini tidak berguna sebagai pemisah di node ini. Sementara Pengalaman Pembelian dan Varietas Produk nilai Gain-nya sama persis (0,25163) — ini disebut tie (seri). Aturan yang dipakai konsisten di seluruh perhitungan ini: kalau seri, atribut yang lebih dulu urutannya (Pengalaman Pembelian) yang dipilih.

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:

Entropy(Node 1.2.2.1) → 1 Puas, 1 Tidak Puas dari 2 data
= −(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:

AtributNilaiJumlah (S)PuasTidak PuasEntropyGain
HargaMurah (semua)2111,000000,00000
Varietas ProdukKurang Lengkap1100,000001,00000
Lengkap1010,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 1
    Split: Layanan Pelanggan
    14 Puas / 6 Tidak Puas
    • Baik
      Daun
      Puas (n=10)
    • Kurang Baik
      Node 1.2
      Split: Kualitas Produk
      4 Puas / 3 Tidak Puas
      • Baik
        Daun
        Puas (n=3)
      • Kurang Baik
        Node 1.2.2
        Split: Pengalaman Pembelian
        1 Puas / 2 Tidak Puas
        • Baik
          Node 1.2.2.1
          Split: Varietas Produk
          1 Puas / 1 Tidak Puas
          • Kurang Lengkap
            Daun
            Puas (n=1)
          • Lengkap
            Daun
            Tidak Puas (n=1)
        • Kurang Baik
          Daun
          Tidak Puas (n=1)
      • Tidak Baik
        Daun
        Tidak Puas (n=1)
    • Tidak Baik
      Daun
      Tidak 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:

  1. JIKA Layanan Pelanggan = "Baik" MAKA Keterangan = Puas (berlaku untuk 10 data)
  2. JIKA Layanan Pelanggan = "Kurang Baik" DAN Kualitas Produk = "Baik" MAKA Keterangan = Puas (3 data)
  3. JIKA Layanan Pelanggan = "Kurang Baik" DAN Kualitas Produk = "Kurang Baik" DAN Pengalaman Pembelian = "Baik" DAN Varietas Produk = "Kurang Lengkap" MAKA Keterangan = Puas (1 data)
  4. JIKA Layanan Pelanggan = "Kurang Baik" DAN Kualitas Produk = "Kurang Baik" DAN Pengalaman Pembelian = "Baik" DAN Varietas Produk = "Lengkap" MAKA Keterangan = Tidak Puas (1 data)
  5. JIKA Layanan Pelanggan = "Kurang Baik" DAN Kualitas Produk = "Kurang Baik" DAN Pengalaman Pembelian = "Kurang Baik" MAKA Keterangan = Tidak Puas (1 data)
  6. JIKA Layanan Pelanggan = "Kurang Baik" DAN Kualitas Produk = "Tidak Baik" MAKA Keterangan = Tidak Puas (1 data)
  7. JIKA Layanan Pelanggan = "Tidak Baik" MAKA Keterangan = Tidak Puas (3 data)
Total ada 7 rule, sama dengan jumlah daun pada pohon. Dua rule pertama (Layanan Pelanggan = Baik, dan kombinasi dengan Kualitas Produk = Baik) saja sudah mencakup 13 dari 20 data (65%) — ini menunjukkan Layanan Pelanggan dan Kualitas Produk adalah dua faktor paling dominan dalam menentukan kepuasan pelanggan pada data ini.

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)

HargaMahal
Kualitas ProdukBaik
Layanan PelangganBaik
Pengalaman PembelianBaik
Varietas ProdukLengkap

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.

Hasil Prediksi: Puas

Contoh 2 – Jalur panjang (sampai daun terdalam)

HargaMurah
Kualitas ProdukKurang Baik
Layanan PelangganKurang Baik
Pengalaman PembelianBaik
Varietas ProdukKurang Lengkap

Penelusuran:

  1. Node 1 → Layanan Pelanggan = "Kurang Baik" → lanjut ke Node 1.2
  2. Node 1.2 → Kualitas Produk = "Kurang Baik" → lanjut ke Node 1.2.2
  3. Node 1.2.2 → Pengalaman Pembelian = "Baik" → lanjut ke Node 1.2.2.1
  4. Node 1.2.2.1 → Varietas Produk = "Kurang Lengkap" → sampai ke daun Puas
Hasil Prediksi: 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:

  1. 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
  2. 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
  3. 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
  4. 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
Keempat rujukan di atas memakai rumus dasar yang persis sama (Entropy berbasis log2 dan Information Gain), hanya berbeda studi kasus dan jumlah atributnya. Bagus untuk perbandingan kalau ingin melihat variasi penerapan algoritma C4.5 di kasus nyata lain.

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:

  1. Hitung Entropy node saat ini.
  2. Kalau sudah murni (Entropy = 0) atau atribut sudah habis → jadikan daun.
  3. Kalau belum murni → hitung Gain semua atribut tersisa, pilih yang Gain-nya paling tinggi sebagai pemisah (split).
  4. 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