Capaian Pembelajaran
Setelah minggu ini kamu bisa:
- Membangun FP-Tree dari data transaksi secara manual.
- Menjelaskan cara kerja FP-Growth (conditional pattern base & conditional FP-tree).
- Membandingkan kinerja Apriori vs. FP-Growth.
- Membangkitkan aturan asosiasi dari frequent itemset.
- Menilai aturan dengan lift, leverage, conviction dan menafsirkannya untuk strategi bisnis.
1. Motivasi
Apriori lambat karena (1) membangkitkan sangat banyak kandidat dan (2) men-scan database berulang kali. FP-Growth (Han, Pei & Yin, 2000):
- Hanya 2 kali scan database.
- Tanpa pembangkitan kandidat — memakai pendekatan divide-and-conquer.
- Data dikompres ke struktur pohon prefix: FP-Tree (Frequent Pattern Tree).
2. Membangun FP-Tree
- Scan 1: hitung support tiap item; buang item tidak frequent; susun F-list = item frequent diurutkan support menurun (seri → urut nama).
- Scan 2: untuk setiap transaksi, buang item tidak frequent, urutkan sesuai F-list, lalu sisipkan sebagai jalur dari akar (
null). Prefix yang sama berbagi node → count bertambah. - Header table: untuk tiap item simpan daftar (node-link) semua node item tersebut di pohon.
Contoh (Han & Kamber, min_sup count = 2)
Support: I2:7, I1:6, I3:6, I4:2, I5:2 → F-list = I2, I1, I3, I4, I5
| TID | Item asli | Terurut F-list |
|---|---|---|
| T100 | I1, I2, I5 | I2, I1, I5 |
| T200 | I2, I4 | I2, I4 |
| T300 | I2, I3 | I2, I3 |
| T400 | I1, I2, I4 | I2, I1, I4 |
| T500 | I1, I3 | I1, I3 |
| T600 | I2, I3 | I2, I3 |
| T700 | I1, I3 | I1, I3 |
| T800 | I1, I2, I3, I5 | I2, I1, I3, I5 |
| T900 | I1, I2, I3 | I2, I1, I3 |
FP-Tree hasil:
null
├── I2:7
│ ├── I1:4
│ │ ├── I5:1
│ │ ├── I4:1
│ │ └── I3:2
│ │ └── I5:1
│ ├── I4:1
│ └── I3:2
└── I1:2
└── I3:2
9 transaksi (22 item) dikompres menjadi 10 node.
3. Menambang FP-Tree (FP-Growth)
Proses item dari bawah F-list (paling jarang) ke atas. Untuk item a:
- Conditional pattern base (CPB) dari
a: kumpulan prefix path dari akar menuju setiap nodea, dengan count = count nodea. - Bangun conditional FP-tree dari CPB (buang item yang count totalnya < min_sup).
- Tambang secara rekursif; setiap pola yang ditemukan diberi akhiran (suffix)
a.
Contoh untuk I5
- CPB(I5) = { ⟨I2, I1⟩ : 1, ⟨I2, I1, I3⟩ : 1 }
- Hitung: I2 = 2, I1 = 2, I3 = 1 (< 2, buang)
- Conditional FP-tree:
null → I2:2 → I1:2 - Pola: {I2, I5}:2, {I1, I5}:2, {I2, I1, I5}:2
Ringkasan tiap item
| Item | Conditional pattern base | Conditional FP-tree | Frequent pattern |
|---|---|---|---|
| I5 | {I2,I1:1}, {I2,I1,I3:1} | ⟨I2:2, I1:2⟩ | {I2,I5}:2, {I1,I5}:2, {I2,I1,I5}:2 |
| I4 | {I2,I1:1}, {I2:1} | ⟨I2:2⟩ | {I2,I4}:2 |
| I3 | {I2,I1:2}, {I2:2}, {I1:2} | ⟨I2:4, I1:2⟩, ⟨I1:2⟩ | {I2,I3}:4, {I1,I3}:4, {I2,I1,I3}:2 |
| I1 | {I2:4} | ⟨I2:4⟩ | {I2,I1}:4 |
Hasilnya sama persis dengan Apriori (13 frequent itemset) — hanya caranya yang berbeda.
4. Apriori vs. FP-Growth
| Aspek | Apriori | FP-Growth |
|---|---|---|
| Strategi | Generate-and-test, breadth-first | Divide-and-conquer, depth-first |
| Scan database | k+1 kali | 2 kali |
| Kandidat | Sangat banyak | Tidak ada |
| Memori | Menyimpan kandidat | Menyimpan pohon (bisa besar jika data sangat beragam) |
| Kecepatan | Lambat pada min_sup rendah | Umumnya jauh lebih cepat |
| Implementasi | Sederhana | Lebih rumit |
5. Dari Frequent Itemset ke Aturan
Untuk setiap frequent itemset L dan setiap subset tak kosong A ⊂ L:
bentuk aturan A ⇒ (L − A), simpan jika confidence ≥ min_conf.
Contoh L = {I1, I2, I5} (support 2/9):
| Aturan | Confidence |
|---|---|
| {I1, I2} ⇒ {I5} | 2/4 = 50% |
| {I1, I5} ⇒ {I2} | 2/2 = 100% |
| {I2, I5} ⇒ {I1} | 2/2 = 100% |
| {I1} ⇒ {I2, I5} | 2/6 = 33% |
| {I2} ⇒ {I1, I5} | 2/7 = 29% |
| {I5} ⇒ {I1, I2} | 2/2 = 100% |
6. Confidence Saja Bisa Menyesatkan
Contoh klasik: 10.000 transaksi; 6.000 membeli game, 7.500 membeli video, 4.000 membeli keduanya.
- confidence(game ⇒ video) = 4000/6000 = 66.7% → tampak kuat.
- Tetapi P(video) = 75%! Membeli game justru menurunkan peluang membeli video.
Maka perlu metrik korelasi:
| Metrik | Rumus | Interpretasi |
|---|---|---|
| Lift | s(A∪B) / (s(A)·s(B)) = conf(A⇒B) / s(B) |
= 1 independen; > 1 korelasi positif; < 1 negatif |
| Leverage | s(A∪B) − s(A)·s(B) |
= 0 independen; > 0 positif |
| Conviction | (1 − s(B)) / (1 − conf(A⇒B)) |
= 1 independen; ∞ jika conf = 1; makin besar makin kuat |
Untuk contoh game–video: lift = 0.4 / (0.6 · 0.75) = 0.89 < 1 → korelasi negatif.
Contoh perhitungan lengkap
s(roti) = 0.40, s(mentega) = 0.30, s(roti ∪ mentega) = 0.24.
- confidence(roti ⇒ mentega) = 0.24 / 0.40 = 0.60
- lift = 0.24 / (0.40 · 0.30) = 2.0 → pembeli roti 2× lebih mungkin membeli mentega dibanding rata-rata
- leverage = 0.24 − 0.12 = 0.12
- conviction = (1 − 0.30) / (1 − 0.60) = 1.75
Lift bersifat simetris (lift(A⇒B) = lift(B⇒A)); confidence dan conviction tidak.
7. Dari Aturan ke Strategi Bisnis
| Temuan | Strategi |
|---|---|
| lift tinggi, support tinggi | Bundling, penempatan berdekatan |
| lift tinggi, support rendah | Rekomendasi personal / niche |
| confidence tinggi A ⇒ B, B murah | Promo silang: beli A dapat diskon B |
| lift < 1 | Produk substitusi — jangan dibundel |
Ringkasan
- FP-Growth: 2 scan, tanpa kandidat; FP-Tree memadatkan transaksi berbagi prefix.
- Tambang dari item paling jarang: CPB → conditional FP-tree → rekursif.
- Aturan: A ⇒ L − A; saring dengan min_conf.
- Gunakan lift/leverage/conviction — confidence tinggi belum tentu korelasi positif.
Bacaan
- Han, Kamber & Pei — Bab 6.2.4 (FP-Growth) dan 6.3 (Pattern Evaluation).
- Han, Pei & Yin (2000) — Mining Frequent Patterns without Candidate Generation.
Tugas Minggu Ini
- Kerjakan
lab.ipynb(perbandingan waktu Apriori vs. FP-Growth). - Kerjakan kuis (di web, atau baca
quiz.json). - Isi
exercise.py, lalu cek:python check.py 5