Optimalisasi Penempatan dan Penjualan Produk Menggunakan MBA
šŸ“

Optimalisasi Penempatan dan Penjualan Produk Menggunakan MBA

Cats
Data
Tags
Portfolio
author
Last Update
Last updated June 10, 2025
Ā 
āš ļø
Saat ini masih dalam tahap editing, perapian format dokumentasi yang lebih baik. Akan di update secara berkala.
Ā 

Disclaimer!

Ā 
šŸ’”
Dataset dalam proyek ini dapat ditemukan di sini.
Ā 
Ā 
Ā 

Ā 
Ā 

Overview

Ā 
Market Basket Analysis (Analisis Keranjang Belanja) adalah teknik data mining— penggalian data untuk mengekstrak informasi, yang digunakan untuk menemukan pola dan hubungan antara item yang sering dibeli bersamaan oleh pelanggan dalam (suatu) transaksi yang sama. Analisis ini sering digunakan dalam retail untuk memahami pola pembelian pelanggan dan meningkatkan strategi pemasaran, seperti penempatan produk, bundling produk, atau promosi.
Ā 
Ā 
Ā 

Metodologi

  1. Businesses Understanding
  1. Pengumpulan dan Preprocecing Data
  1. Menentukan Parameter Analisis
  1. Pemilihan Algoritma
  1. Evaluasi Pola yang ditemukan
  1. Implementasi Hasil
Ā 
Ā 

Ā 
Ā 

1. Businesses Understanding

Ā 
Latar Belakang
Restoran X merupakan salah satu restoran kelas menengah yang terletak di Bandung, Jawa Barat. Restoran ini menyediakan berbagai macam menu makanan dan minuman untuk memenuhi kebutuhan masyarakat kota Bandung, mulai dari makanan utama seperti burgers, french fries, hingga berbagai pilihan minuman seperti green tea dan mineral water. Restoran X dikenal dengan suasana yang nyaman dan layanan yang ramah, menjadikannya pilihan tepat untuk keluarga, pekerja kantoran, maupun anak muda.
Ā 
Namun, sebulan terakhir Restoran X mulai mengalami tantangan yang signifikan. Dimana manajemen Restoran X merasa bahwa kebanyakan pelanggan hanya membeli satu produk utama (misalnya mineral water) tanpa membeli produk lain. Menyebabkan beberapa stok produk menumpuk. Hal tersebut memicu kekhawatiran akan memengaruhi penurunan rata-rata pembelian tambahan dan pemasukan Restoran.
Ā 
Untuk itu, pihak manajemen ingin memahami pola belanja pelanggan dan mencari cara untuk meningkatkan jumlah produk dalam setiap transaksi agar pemasukan restoran tetap bertambah.
Ā 
Ā 
Masalah Apa Yang Dihadapi?
Manajement Restoran X mengidentifikasikan beberapa permasalahan utama yang perlu segera ditangani:
  1. Penurunan rata-rata pembelian produk tambahan
  1. Kurangnya strategi pemasaran yang efektif
  1. Produk kombinasi yang kurang terdeteksi
  1. Stok menumpuk pada produk tertentu.
Ā 
Ā 
Tujuan yang Ingin Dicapai
Untuk mengatas tantangan tersebut, analisis memiliki beberapa tujuan utama, di antaranya:
  1. Meningkatkan rata-rata pembelian produk tambahan— Memastikan pelanggan membeli lebih dari satu produk dalam setiap transaksi.
  1. Mengoptimalkan strategi pemasaran
  1. Mengidentifikasikan kombinasi produk yang sering dibeli bersamaan.
  1. Mengurangi stok produk yang tidak produktif.
Ā 
Ā 
Rumusan Masalah
  1. Produk apa saja yang sering dibeli secara bersamaan oleh pelanggan di Restoran X?
  1. Bagaimana pola pembelian pelanggan dapat diidentifikasi untuk membantu penyusunan strategi pemasaran yang lebih efektif?
  1. Apakah terdapat produk-produk tertentu yang memiliki potensi untuk ditawarkan sebagai bundling agar meningkatkan penjualan?
Ā 
Bagaimana cara menggunakan data untuk menyelesaikan masalah tersebut?
Setelah masalah diidentifikasikan dengan jelas, waktunya untuk menghubungkan konteks bisnis dengan pendekatan yang diambil.
Ā 
Dalam MBA, terdapat empat komponen utama, yakni:
  1. Itemset: Sekumpulan item yang muncul bersama dalam satu transaksi.
Ā 
  1. Support: mengukur seberapa sering (proporsi) sebuah itemset muncul dalam seluruh transaksi.
    1. Rumus:
Ā 
  1. Confidence: Probabilitas item tujuan dibeli bersama dengan item awal. Confidence digunakan untuk membangun aturan asosiasi, seperti "Jika ā€˜bisa begini’, maka ā€˜bisa begitu’.ā€
    1. Rumus:
      Ā 
      *Note: Support Itemset adalah nilai support dari Item awal dan tujuan.
      Ā 
  1. Lift: Indikator kekuatan hubungan antara item awal dan tujuan dibandingkan dengan kemungkinan mereka dibeli secara independen (terpisah) atau acak.
    1. Rumus:
      Ā 
      Adapun beberapa ketentuan dari lift:
      • Lift > 1: Hubungan positif (item awal dan tujuan cenderung muncul bersama).
      • Lift = 1: Tidak ada hubungan, hubungannya acak.
      • Lift < 1: Hubungan negatif (item awal dan tujuan cenderung tidak muncul bersama).
Ā 
Model Algoritma Machine Learning apa yang Digunakan?
Analisis keranjang belanja merupakan teknik data mining yang tidak memerlukan label atau target output, melainkan mencari pola tersembunyi dalam dataset. Karena itu, analisis ini termasuk ke dalam machine learning, atau lebih tepatnya masuk ke dalam kategori Unsupervised Learning (Pembelajaran tanpa label), khususnya dalam bidang Association Rule Learning (Pembelajaran Aturan Asosiasi).
Ā 
Dalam analisis ini terdapat 2 algoritma utama yang sering dipakai, yakni:
  1. Apriori: metode dalam Market Basket Analysis (MBA) yang digunakan untuk menemukan pola hubungan antar produk dalam transaksi pelanggan. Sebagai algoritma pencarian dan eksplorasi data, Apriori menggunakan metode Breadth-First Search (Pencarian Lebar) yang memiliki pendekatan dengan menelusuri semua cabang pada satu level terlebih dahulu sebelum melanjutkan ke level berikutnya.
Analogi-nya: Bayangkan Anda mengajak teman-teman dan menyebar untuk menjelajahi semua lorong di tingkat pertama sebelum turun lebih dalam ke gua.
Sehingga contoh dalam kehidupan nyata:
  • Saat mencari teman di mal, Anda pertama-tama memeriksa semua toko di lantai pertama sebelum naik ke lantai berikutnya.
  • Saat mencari buku di perpustakaan, Anda melihat semua buku di rak pertama dulu sebelum berpindah ke rak berikutnya.
Ā 
Dapat diartikan bahwa Apriori berjalan dengan mencari kombinasi produk yang sering muncul bersama (hingga selesai), lalu membentuk aturan asosiasi (hubungan sebab-akibat antara satu produk dengan produk lain).
Algoritma ini juga menggunakan prinsip Apriori Property (sifat Apriori), yang berbunyi:
"Jika sebuah kombinasi produk sering muncul, maka bagian dari kombinasi itu juga pasti sering muncul."
Ā 
Contoh: Jika kombinasi (roti, susu, mentega) sering dibeli bersama, maka kombinasi lebih kecil seperti (roti, susu) atau (susu, mentega) juga sering muncul.
Ā 
Adapun parameter yang digunakan dalam Apriori adalah support, confidence, dan lift untuk membentuk aturan asosiasi. Dan karena itu, Apriori bekerja dengan cara:
  • Menentukan produk yang sering muncul menggunakan support
  • Membentuk aturan asosiasi dengan menggunakan confidence
  • Menyaring aturan yang paling relevan menggunakan lift.
Ā 
  1. Eclat: adalah teknik pengelompokan transaksi yang hanya didasarkan pada kombinasi produk yang sering muncul dalam transaksi. Algoritma ini menggunakan metode seperti Depth-First Search (Pencarian Mendalam) yang pendekatannya adalah dengan menelusuri satu cabang hingga ke ujung sebelum kembali ke cabang lain.
Analogi-nya: Bayangkan Anda memilih satu lorong dan terus menelusuri sampai mentok sebelum kembali dan mencoba lorong lain.
Sehingga contoh nyatanya adalah seperti:
  • Saat menjelajahi labirin, Anda memilih satu jalur dan terus berjalan sampai menemui jalan buntu, lalu kembali dan mencoba jalur lain.
  • Saat memecahkan teka-teki, Anda mencoba satu solusi sampai akhir sebelum kembali dan mencoba solusi lain jika gagal.
Ā 
Algoritma ini juga menggunakan prinsip Equivalence Class Transformation (Transformasi Kelas Kesetaraan) dan Bottom-Up Lattice Traversal (Penelusuran Kisi dari Bawah ke Atas), yakni:
Mengelompokkan item berdasarkan kesamaan transaksi dan menelusuri semua kombinasi produk mulai dari yang paling sederhana (1-itemset) hingga yang lebih besar (2-itemset, 3-itemset, dst.), dengan teknik Depth-First Search (DFS).
Ā 
Adapun parameter yang digunakan dalam algoritma ini hanyalah support, karena fokusnya adalah mencari frequent itemsets (kombinasi produk yang paling sering muncul) tanpa memeriksa hubungan sebab-akibat antar produk seperti Apriori. Dan karena itu, Eclat bekerja dengan cara:
  • Membuat daftar transaksi yang berisi produk tertentu (TIDList) untuk setiap produk.
  • Menggunakan intersection (irisan) untuk mencari kombinasi produk yang sering muncul dalam banyak transaksi.
  • Menentukan produk dengan support tertinggi.
Ā 
Ā 
Dengan mempertimbangkan kelebihan dan kekurangannya, sebagaimana berikut:
  1. Apriori
      • Kelebihan:
        • Dapat menghasilkan Association Rules
        • Mendukung beberapa parameter
        • Lebih umum di industri
      • Kekurangan:
        • Lambat untuk dataset besar
        • Memakan banyak memori
  1. Eclat
      • Kelebihan:
        • Cocok untuk dataset besar, lebih cepat dibandingkan Apriori
        • Tidak memakan banyak memori
      • Kekurangan:
        • Tidak menghasilkan Association Rules, hanya mencari frequent itemsets
        • Hanya menggunakan parameter support
        • Kurang dikenal dibanding Apriori.
Ā 
Dan pertimbangan lain seperti validasi hasil dan menghindari bias algoritma. Maka, penggunaan kedua algoritma, Apriori dan Eclat, akan digunakan bersama-sama.
Ā 
Ā 
Ā 

Ā 
Ā 

2. Pengumpulan dan Preprocecing Data

Ā 
Install terlebih dahulu modul-nya:
!pip install apyori
Ā 
Import Library:
import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt from collections import Counter # Untuk menghitung frekuensi item from apyori import apriori # Untuk algoritma Apriori from collections import defaultdict # Untuk algoritma Eclat
Ā 
Palette warna ā€˜flare’ dari Seaborn yang saya simpan ke dalam variabel palette1:
notion image
Ā 
Jika Anda menggunakan Colab, pastikan Google Drive Anda sudah terpasang ke notebook Colab Anda. Anda bisa menggunakan kode di bawah ini:
from google.colab import drive drive.mount('/content/drive')
Ā 
Kemudian, load dataset transaksi Restoran X yang akan digunakan untuk MBA:
path = "/content/drive/MyDrive/Classroom Data Science/Market Basket Analysis /Assignment /latihan_Market_Basket_Optimisation.csv" data = pd.read_csv(path, header=None)
Ā 
Kode di atas berfungsi untuk membaca dataset Anda yang berada di direktori Drive dan header=None digunakan karena file dataset tersebut tidak memiliki header (nama kolom).
Ā 
output-nya:
notion image
Ā 
Lalu, lihatlah tampilan dataset, yang menunjukkan lima teratas dan terbawah. Sekilas, nilai NaN terlihat mendominasi transaksi dan karena tidak memiliki header, tiap kolom dapat diketahui dari indeks barisnya. Dimana tiap baris dapat diterjemahkan sebagai pelanggan ke (), yakni yang mempresentasikan ā€˜tiap pelanggan membeli apa saja dari transaksi di Restoran X’, di kolom.
Ā 
DariĀ informasi tersebut, dapatĀ dilihat bahwa terdapatĀ 7454Ā transaksi yang menjadiĀ sampelĀ untukĀ analisis,Ā denganĀ batasĀ maksimumĀ 30 produkĀ perĀ transaksi-nya. Kemudian, gunakan info() untuk melihat struktur dataset, termasuk tipe data dan missing values-nya untuk mengetahui persebaran tiap kolom.
notion image
Ā 
Tidak ada masalah untuk tipe data-nya, namun banyaknya nilai yang kosong sedikit memperjelas urgensi yang dialami oleh Restoran X. Sepert yang terlihat, kebanyakan pelanggan tidak membeli produk tambahan dan terisinya semua transaksi pada kolom 0, menunjukkan bahwa sedikitnya produk yang dibeli setiap pelanggan adalah satu produk saja. Hal itu tentu saja berlawanan dengan keinginan manajemen restoan yang ingn para pelanggan juga membeli produk tambahan. Karena itu, analisis produk awal yang memiliki nilai yang sangat tinggi penting untuk dilakukan.
Ā 
Pertama-tama, kita akan melihat statistik-nya untuk validasi.
Ā 
Dan karena gambaran umumnya belum terlihat dengan jelas, maka menggunakan analisis deskriptif untuk merangkum dan memahami karakteristik dasar dari data adalah hal yang tepat. Analisis ini akan memberikan wawasan awal mengenai pola, distribusi dan karakteristik dataset transaksi sebelum memasuki analisis yang lebih dalam lagi.
Ketika statistik data dijalankan, kecenderungan pelanggan menjadi semakin jelas. Hal tersebut dapat disebabkan karena kurangnya daya dari masing-masing produk terhadap pembelian produk lebih dari satu. Namun, Burgers, mineral water, dan green tea adalah produk paling populer dalam transaksi.
notion image
Ā 
Ā 
Dengan rinciannya:
  • šŸ” "Burgers" (579 kali)
  • šŸ’§ "Mineral Water" (475 kali, 367 kali, 208 kali) (banyak muncul di berbagai panjang transaksi)
  • šŸµ "Green Tea" (154 kali, 95 kali, dll.)
  • šŸŸ "French Fries" (104 kali)
  • Produk lainnya memiliki frekuensi yang lebih kecil (1 -3).
Ā 
Jika diperjelas, pembagiannya adalah seperti ini:
Ā 
notion image
Ā 
Di mana dari batas maksimum pembelian, kolom ke-19 hingga ke-29 memiliki 99,99% missing values, artinya hanya 1 transaksi yang memiliki 20 item atau lebih. Sedangkan sisanya tak lebih dari 1 hingga 5 transaksi. Sekali lagi, perlu pengoptimalan strategi untuk menangani masalah tersebut. Salah satunya adalah missing values.
Ā 
Dari hasil yang ditemukan, apakah Anda bertanya-tanya, ā€˜apakah nilai yang hilang tersebut akan dihapus?’.
Ā 
Sebelum menghapus semua nilai yang kosong dari data transaksi, saya mengambil beberapa pendekatan terlebih dahulu.
Ā 
Pertimbangannya adalah seperti ini:
  • Nilai yang kosong merepresentasikan apa?
    • Apakah yang benar-benar kosong?
    • Atau kesalahan sistem?
  • Apa akibatnya jika menghapus semua nilai yang kosong?
    • Apakah data menjadi semakin akurat?
    • Atau (justru) jadi kehilangan informasi yang berharga?
  • Apakah ada metode lain yang harusnya digunakan (sebagai solusi alternatif)?
    • Imputasi?
    • Biarkan saja?
Ā 
Dengan mempertanyakan aspek dari nilai yang kosong atau missing values, gambaran yang didapat menjadi lebih terarah dibandingkan dengan hanya langsung melakukan aksi tanpa pikiran yang matang. Karena berhubungan dengan performa algoritma nantinya, maka kedua algoritma tersebut juga harus diperhatikan. Misalnya, menjawab pertanyaan di atas; apakah arti dari nilai NaN?
Ā 
Nah, ada dua jawaban.
Ā 
Missing values dalam MBA, umumnya terjadi karena format dataset transaksi yang memiliki jumlah item atau produk berbeda-beda dalam setiap transaksi. Dalam MBA juga, data cleaning sangat penting untuk dilakukan. Namun, cara menangani missing values dalam Apriori dan Eclat bisa berbeda karena perbedaan cara kerja kedua algoritma ini.
Ā 
Dalam Apriori, nilai yang kosong diartikan sebagai item yang tidak dibeli oleh pembeli dalam transaksi. Namun, Eclat yang menggunakan DFS memerlukan TIDList, yang bergantung pada keberadaan item dalam transaksi. Jika ada nilai NaN atau nilai yang kosong dalam dataset transaksi, maka TIDList bisa salah membaca dan menyebabkan error dalam analisis.
Ā 
Selain itu, apakah data duplikat juga harus diperlakukan berbeda? Ya, tentu saja. Bedanya cara kerja kedua algoritma tersebut mengharuskan kita untuk mempersiapkannya sesuai dengan yang algoritma butuhkan.
Ā 
Oleh karenanya, analisis ini akan dimulai dengan Apriori terlebih dahulu, baru Eclat.
Ā 
Ā 
ā„¹ļø
Persiapan Data untuk masing-masing model Apriori dan Eclat akan dipisah mulai dari sini.
Ā 
Ā 

Apriori Preprocecing

transactions = [] # list kosong buat menyimpan hasil num_columns = data.shape[1] # mengambil jumlah kolom dari data # Loop utama untuk setiap baris for i in range(len(data)): # Loop cabang transactions.append([str(data.values[i, j]) for j in range(num_columns)])
Ā 

Eclat Preprocecing

Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 

Ā 
Ā 

3. Menentukan Parameter Analisis

Ā 

Apriori

Dalam algoritma Apriori, terdapat tiga parameter utama—Support, Confidence, dan Lift—yang membentuk association rules sebagai output utama. Penetapan parameter ini dipengaruhi oleh faktor seperti ukuran dataset, frekuensi transaksi, dan tujuan analisis. Jika belum ada ukuran pasti, pendekatan berbasis uji coba dapat digunakan untuk menemukan nilai optimal.
Ā 
Sementara itu, modul yang kita gunakan terdapat fungsi apriori() yang menggunakan parameter min_ seperti min_support, min_confidence, min_lift, dan min_length untuk menyaring aturan asosiasi. Penyaringan ini memastikan bahwa hanya aturan yang memenuhi ambang batas tertentu yang dipertimbangkan, sehingga hasil analisis lebih relevan dan bermakna.
Ā 
Kemudian, percobaan pertama saya adalah ini:
min_support = 0.03 min_confidence = 0.5 min_lift = 1.2 min_length = 2 max_lenght = 2
Ā 
Saya pun mencoba untuk menjalankannya. Namun ketika program selesai berjalan, hasil yang keluar adalah sebuah list kosong. Yang mengartikan kalau parameter yang saya ambil terlalu tinggi.
Ā 
Untuk itu saya mengurangi keketatannya dengan mengubah ambang batas kepercayaan atau persentase item tujuan dibeli setelah item base (awal) dibeli menjadi 30%. Lalu menurunkan juga minimum kemunculan Itemset-nya menjadi 0.01. Setelah itu menjalankannya lagi.
Ā 
Tak berselang lama aturan asosiasi keluar sebanyak 39 buah.
Ā 
notion image
Ā 
Saya melihat persebaran masing-masing parameter menggunakan histogram dan menemukan bahwa parameter yang saya ambil di percobaan kedua terasa kurang tepat. Tidak ketat seperti sebelumnya, tapi menghasilkan aturan yang terlalu longgar sehingga membuat distribusi menjadi tidak seimbang. Untuk itu saya melakukan percobaan lagi.
Ā 
Di percobaan ketiga, saya mencoba menaikkan batas kekuatan hubungan menjadi 1.5 dengan pertimbangan parameter yang saya ubah di percobaan kedua membuat aturan terlalu renggang, maka saya sedikit mempersempit kandidat dengan item base dan item add (tujuan) yang lebih sering bersama.
Ā 
notion image
Ā 
Seperti yang terlihat, persebaran pada percobaan kali ini menghasilkan distribusi yang cukup merata. Walau memang ada beberapa nilai yang terlalu tinggi. Hal itu dianggap cukup normal menilai masing-masing parameter melambangkan hubungan sebab-akibat antar produk.
Ā 
Maka, aturan yang diterima adalah sebanyak 23 aturan, dengan rincian itemset-nya sebagaimana berikut:
Ā 
notion image
Ā 
Dari 23 itemset tersebut, akan diurutkan 10 itemset berdasarkan nilai lift-nya untuk melihat item-item yang lebih sering dibeli bersamaan daripada pembelian independent. Karena Apriori cenderung menghasilkan banyak frequent itemset, termasuk yang kurang menarik atau kurang relevan. Lift membantu menyaring itemset yang benar-benar memiliki hubungan yang kuat dan menarik.
Ā 
notion image
Ā 
Ā 

Eclat

Saat ini Anda telah memasuki tahap Eclat. Dan berbeda dengan Apriori yang menggunakan model Apyori untuk sebagian besar pengerjaannya, pada tahapan ini saya mencoba pendekatan yang lebih tradisional. Dimulai dari membuat frequent 1-itemsets hingga 2-itemsets, saya akan memakai cara yang lebih manual untuk menemukan frequent itemsets-nya. Karena berbeda dengan Apriori, Eclat tidak menghasilkan aturan asosiasi dan pendekatan yang diambil pada langkah ini adalah cara yang saya gunakan untuk memperkuat pemahaman konteks dan konsep dari algoritma Eclat, maupun Market Basket Analysis sendiri.
Ā 
Oleh karena itu, beberapa kode yang ada pada file notebook mungkin akan disertakan.
Ā 
Ā 

Membuat TIDList untuk Setiap Produk Transaksi

Berdasarkan cara kerja Eclat, langkah pertama setelah Preprocecing Data adalah membuat Transaction ID List. Transaction ID List atau dikenal sebagai TIDList adalah daftar transaksi yang berisi produk tertentu. Pada algoritma ini, DFS yang memerlukan TIDList bekerja dengan cara yang lebih cepat dibandingkan dengan Apriori. Pada DFS, TIDList akan membentuk serangkai daftar yang berisi produk tertentu yang ada pada transaksi. Dimana setiap produk dalam dataset dikaitkan dengan daftar transaksi tempat produk tersebut muncul, jadi item itu akan membuat daftar transaksi yang isinya ialah ID transaksi tersebut.
Ā 
Sederhananya adalah seperti ini:
  • Transaksi 1: {Roti, Mentega, Mineral Water}
  • Transaksi 2: {Mentega, Mineral Water}
  • Transaksi 3: {Garam, Madu}
  • Transaksi 4: {Roti, Mentega}
Ā 
Maka Transactions ID List-nya adalah:
  • Roti:{1, 4}
  • Mentega:{1, 2, 4}
  • Mineral Water:{1, 2}
Dst.
Ā 
Dalam matematika, hal ini mungkin lebih dikenal sebagai himpunan.
Ā 
Anda dan saya— kita sudah mendapatkan pemahaman mengenai Eclat sejauh ini, karena itu, sekaranglah saatnya untuk menerapkan dalam Python.
Ā 
Untuk menerapkannya, saya membuat tidlist , dictionary yang value-nya diatur secara default agar disimpan menjadi set. Selain itu, saya juga mengambil iterasi sebagai langkah awal. Di mana iterasi yang saya terapkan ialah pendekatan dua lapisan looping. Sebagaimana contoh TIDList yang telah dibuat, yang dibutuhkan adalah item dan ID dari transaksi. Karena itu, saya menggunakan enumerate untuk mengambil index (ID Transaksi) dan daftar itemnya. Dari daftar itulah saya melakukan iterasi kedua untuk mendapatkan masing-masing produk menggunakan item, lalu tambahkan item tersebut ke dalam dictionary tidlist sebagai key-nya dan tid (index) sebagai value.
Ā 
Sehingga kodenya adalah seperti:
tidlist = defaultdict(set) for tid, transaction in enumerate(transactions_eclat): for item in transaction: tidlist[item].add(tid) print("TIDList:") for item, tids in tidlist.items(): print(f"{item}: {tids}")
Ā 
Dan output-nya yang berjumlah 127 menu, diambil sebanyak 4 buah untuk ditampilkan:
TIDList: green grapes: {0, 3332, 7172, 7049, 6794, 5259, 4752, 3473, 7440, 3220, 533, 1429, 2459, 3484, 3613, 286, 1951, 3999, 5501, 5916, 1827, 3493, 1574, 4902, 6013, 2222, 6448, 1841, 6066, 7093, 1718, 3129, 1854, 6907, 3264, 451, 2371, 3011, 6342, 7112, 1865, 5193, 1099, 2127, 336, 3665, 6229, 7255, 216, 3289, 3932, 3424, 611, 995, 229, 5989, 3690, 2667, 5738, 3568, 4977, 5233, 7282, 884, 6646, 2679, 1273, 507, 3325} mint: {0, 3587, 1541, 3591, 10, 1549, 1555, 4115, 3610, 3618, 2084, 1575, 7212, 1077, 3638, 55, 56, 572, 1089, 1601, 1093, 594, 2643, 5719, 88, 1626, 2652, 7261, 7266, 2660, 1131, 1136, 4720, 1651, 630, 1658, 636, 5757, 638, 129, 7297, 4742, 5766, 2700, 1682, 5781, 3232, 3234, 5796, 1189, 2731, 1711, 5295, 2739, 3763, 5825, 5826, 1222, 717, 2765, 3799, 3800, 4825, 5854, 5856, 738, 739, 2276, 2280, 750, 3823, 7412, 4854, 5882, 5887, 3844, 5395, 789, 5909, 4889, 796, 1309, 3362, 806, 813, 3889, 3891, 5952, 3920, 3922, 2910, 872, 3432, 3946, 4973, 3441, 4977, 3454, 6016, 4994, 2443, 2956, 3478, 3484, 413, 1438, 1441, 5032, 5033, 5546, 941, 942, 5040, 7089, 7093, 5056, 3522, 451, 5059, 5572, 5574, 5575, 5064, 974, 985, 3547, 999, 1512, 1513, 2537, 4592, 497, 2551} french wine: {0, 6145, 3586, 5122, 6146, 6657, 4108, 1037, 4621, 7185, 2578, 532, 1045, 2075, 1570, 7204, 4646, 1072, 4656, 2611, 1591, 1084, 5697, 4163, 6725, 5703, 2120, 4680, 6221, 2130, 3670, 4088, 2662, 1639, 7275, 6764, 2159, 3702, 4215, 2169, 634, 3711, 5247, 5759, 2178, 6280, 659, 6294, 2199, 155, 667, 5787, 7325, 2719, 1184, 4767, 7327, 170, 6826, 2222, 3758, 4784, 178, 4277, 1719, 4795, 2236, 2237, 708, 2247, 2250, 2764, 6351, 3283, 4310, 4827, 5342, 223, 224, 226, 2793, 6889, 748, 1772, 3311, 2803, 6387, 4853, 5365, 4855, 2298, 4349, 7424, 4353, 3332, 5894, 1800, 4364, 5901, 1810, 7445, 798, 286, 805, 4390, 5414, 6444, 6962, 1843, 3900, 317, 5948, 6469, 4422, 5448, 3915, 6481, 6994, 853, 4438, 1884, 4957, 6495, 1897, 2411, 2924, 1902, 1393, 3954, 372, 4471, 1916, 3965, 1919, 3967, 6016, 6020, 1928, 6537, 2960, 1942, 416, 5029, 1447, 6567, 1962, 5037, 4531, 4036, 3015, 3541, 2525, 6623, 3557, 3046, 6119, 7141, 491, 3567, 5103, 6641, 3570, 4596, 4597, 6645, 2552, 6650} yams: {0, 6, 5134, 1554, 20, 5141, 1574, 551, 5180, 582, 590, 1103, 600, 5213, 4195, 5732, 1131, 2669, 5231, 125, 642, 6790, 5770, 139, 652, 654, 6801, 149, 6806, 668, 670, 678, 4777, 7347, 7362, 5830, 717, 206, 208, 2771, 6869, 5853, 6880, 5345, 1253, 5878, 6398, 2814, 4361, 786, 283, 286, 5413, 5416, 5929, 5944, 319, 2879, 2900, 347, 5980, 354, 5987, 3944, 5486, 5488, 2929, 2932, 885, 4478, 895, 411, 6047, 6058, 6060, 441, 6587, 7110, 5581, 2020, 2021, 5605, 5606, 1000, 5108, 3066} # dst
Ā 
Setelah kemunculan dari setiap produk telah ditemukan pada data transaksi, TIDList yang kita buat akan digunakan untuk mencari frequent 1-itemsets.
Ā 
Dalam mencari frequent 1-itemsets sendiri terdapat beberapa hal yang harus dipersiapkan. Yakni:
# Menghitung support untuk setiap item min_support = 0.01 # Minimal support 1% frequent_itemsets = [] frequent_itemsets_2 = [] all_frequent_itemsets = frequent_itemsets + frequent_itemsets_2
Ā 
Untuk batas support terkecil yang kita izinkan untuk kali ini, kita samakan dengan Apriori-nya yakni 1%. Kemudian, untuk panjang atau item yang kita butuhkan untuk frequent itemsets-nya juga masih dua.
Ā 
Kemudian, dari TIDList yang sudah ditemukan juga akan di filter menggunakan supportnya— karena itulah hakikat dari frequent itemsets sendiri.
Ā 
for item, tids in tidlist.items(): support = len(tids) / len(transactions_eclat) if support >= min_support: frequent_itemsets.append(([item], support)) # Menampilkan frequent itemsets print("\nFrequent 1-itemsets:") for itemset, support in frequent_itemsets[:3]: print(f"Itemset: {itemset}, Support: {support}")
Ā 
Setelah itu, hitunglah nilai support dengan membagi panjang (jumlah baris) yang mengandung tids (index produk) dengan (panjang) baris dari seluruh transaksi yang ada (pada Eclat). Sehingga didapatkan ukuran (persentase) seberapa sering item dibeli dalam transaksi, support-nya. Dari support yang telah didapatkan, ditambahkan sebuah kondisi dimana frequent 1-itemsets yang diambil ke dalam frequent_itemsets adalah yang support-nya lebih besar atau sama dengan batas toleransi terkecil support yang ditetapkan.
Ā 
Jika dijalankan, yang akan dikembalikan adalah 3 baris dari item dan nilai support-nya.
# Output Frequent 1-itemsets: Itemset: ['mint'], Support: 0.017842768983096325 Itemset: ['french wine'], Support: 0.022404078347196137 Itemset: ['yams'], Support: 0.011537429568017172
Ā 
Ā 
Jadi, frequent 1-itemsets telah didapatkan. Selanjutnya adalah mendapatkan frequent 2-itemsets menggunakan 1-itemsets ini.
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 

Menggunakan Intersection (irisan) untuk Mencari Kombinasi Produk

Setelah TIDList dibentuk, Eclat mencari kombinasi produk dengan menggunakan interseksi (irisan) TIDList. Dimana pada kasus ini, kombinasi yang diinginkan ialah sebanyak dua produk dan oleh karenanya, itemsets yang harus dibuat adalah sebanyak itu. Secara sederhana, pencarian 2-itemsets tidak memiliki banyak perbedaan dengan pencarian yang dilakukan untuk 1-itemsets dan hanya perlu penyesuaian tambahan terkait indeks produk dan produknya.
Ā 
Ā 
Ā 
Ā 
for item1, tids1 in tidlist.items(): for item2, tids2 in tidlist.items(): if item1 < item2: gabung_tids = tids1 & tids2 # interseksi (&) atau gabungkan tids1 dan tids2 support2 = len(gabung_tids) / len(transactions_eclat) if support2 >= min_support: frequent_itemsets_2.append(([item1, item2], support2)) for itemset, support in frequent_itemsets_2[:3]: print(f"Itemset: {itemset}, Support: {support}")
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 
Ā 

Ā 
Ā 

4. Pemilihan Algoritma

Ā 
Ā 

Ā 
Ā 

5. Evaluasi Pola yang ditemukan

Ā 
Ā 
Ā 

Ā 
Ā 

6. Implementasi Hasil

Ā 
Ā 
Ā 


Ā© 2024 All Right Reserved
Ā 
Ā 
Ā