Algoritma Apriori: Market Basket Analysis Data Transaksi Warung
Blog/Tips & Trik/Algoritma Apriori: Market Basket Analysis Data Transaksi Warung

Algoritma Apriori: Market Basket Analysis Data Transaksi Warung

BimaBima
·12 September 2025·11 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

TL;DR

Algoritma Apriori adalah metode data mining yang nyari kombinasi barang yang sering dibeli bareng dalam satu transaksi. Dia bekerja bertahap: cari barang populer dulu, baru bentuk pasangan dari barang-barang itu, terus naik ke kombinasi tiga barang. Hasilnya berupa aturan asosiasi yang dinilai lewat tiga angka, yaitu support, confidence, dan lift.

Algoritma Apriori adalah metode data mining yang nyari kombinasi barang yang sering dibeli bareng dalam satu transaksi.

Hasilnya dipakai buat nentuin paket bundling, tata letak rak, dan rekomendasi "sering dibeli bersama" di aplikasi belanja.

Aku bawa 10 transaksi dari warung sembako, hitung manual sampai ketemu aturan dengan lift 1,67, lalu buktiin hasilnya pakai Python.

Apa itu market basket analysis?

Market basket analysis adalah teknik nyari pola barang yang muncul bareng di satu struk belanja. Outputnya berupa aturan asosiasi, misalnya "kalau orang beli telur, dia juga beli mi instan". Algoritma Apriori adalah cara paling umum buat nemuin aturan-aturan itu tanpa harus ngecek semua kombinasi barang satu per satu.

Bedanya sama analisis penjualan biasa: kamu nggak nanya barang apa yang laku, tapi barang apa yang laku bareng.

Dua pertanyaan itu ngasih keputusan yang beda. Yang pertama nentuin stok, yang kedua nentuin promo.

Gimana cara kerja algoritma Apriori?

Apriori bekerja bertahap dari kombinasi kecil ke besar. Dia hitung dulu barang tunggal yang cukup sering muncul, buang yang jarang, lalu bentuk pasangan cuma dari barang yang lolos. Prinsipnya: kalau satu barang jarang, semua kombinasi yang memuat barang itu pasti lebih jarang lagi, jadi nggak perlu dihitung.

Pemangkasan ini yang bikin Apriori bisa jalan di data besar. Sepuluh jenis barang aja udah punya 1.023 kemungkinan kombinasi. Seratus jenis barang jumlahnya jadi angka yang nggak masuk akal buat dihitung semua.

Tiga angka yang harus kamu pahami

UkuranRumusArtinya
Supporttransaksi yang memuat A dan B / total transaksiSeberapa sering kombinasi ini muncul
Confidencesupport(A dan B) / support(A)Kalau A dibeli, seberapa sering B ikut
Liftconfidence(A ke B) / support(B)Hubungannya nyata atau cuma kebetulan

Lift adalah angka yang paling sering diabaikan pemula, dan justru dia yang paling nentuin. Lift 1 berarti dua barang itu bebas satu sama lain. Lift 1,67 berarti peluang B kebeli naik 67% kalau A ada di keranjang.

Contoh kasus: 10 transaksi Warung Bu Sari

Ini data kasir Warung Bu Sari, warung sembako di kompleks perumahan. Sepuluh struk berturut-turut di jam pagi.

StrukIsi belanja
T1indomie, telur
T2indomie, telur, kopi
T3indomie, kopi
T4kopi, gula
T5indomie, telur, kopi
T6roti, susu
T7indomie, telur
T8kopi, gula, roti
T9indomie, telur, kopi
T10roti, susu, gula

Aku pasang minimum support 0,3. Artinya kombinasi harus muncul minimal di 3 dari 10 struk biar dianggap layak.

Langkah 1: hitung support tiap barang

BarangJumlah strukSupportLolos?
indomie60,6Ya
kopi60,6Ya
telur50,5Ya
gula30,3Ya
roti30,3Ya
susu20,2Nggak

Susu gugur di putaran pertama. Semua kombinasi yang memuat susu langsung dicoret tanpa dihitung, dan itu inti prinsip Apriori.

Langkah 2: bentuk pasangan dari barang yang lolos

Lima barang yang lolos bikin 10 pasangan. Aku hitung support tiap pasangan.

PasanganJumlah strukSupportLolos?
indomie + telur50,5Ya
indomie + kopi40,4Ya
telur + kopi30,3Ya
kopi + gula20,2Nggak
gula + roti20,2Nggak
kopi + roti10,1Nggak
indomie + gula00Nggak
indomie + roti00Nggak
telur + gula00Nggak
telur + roti00Nggak

Tiga pasangan lolos. Sisanya dibuang.

Langkah 3: naik ke kombinasi tiga barang

Kandidat tiga barang cuma boleh dibentuk dari pasangan yang lolos. Cuma satu yang memenuhi syarat: indomie + telur + kopi.

Kombinasi ini muncul di T2, T5, dan T9. Support 0,3, jadi lolos.

Nggak ada kandidat empat barang, jadi pencarian berhenti di sini.

Langkah 4: bikin aturan dan hitung confidence plus lift

AturanSupportConfidenceLift
telur → indomie0,55/5 = 1,001,00 / 0,6 = 1,67
indomie → telur0,55/6 = 0,830,83 / 0,5 = 1,67
{telur, kopi} → indomie0,33/3 = 1,001,00 / 0,6 = 1,67
{indomie, kopi} → telur0,33/4 = 0,750,75 / 0,5 = 1,50
indomie → kopi0,44/6 = 0,670,67 / 0,6 = 1,11
telur → kopi0,33/5 = 0,600,60 / 0,6 = 1,00

Baris terakhir itu pelajaran paling mahal di tabel ini. Confidence 0,60 kelihatan lumayan, tapi lift-nya pas 1,00.

Artinya orang yang beli telur punya peluang beli kopi sama persis dengan orang acak di warung itu. Kopi emang laku, itu doang. Nggak ada hubungan khusus sama telur.

Kalau Bu Sari bikin paket "telur + kopi" berdasarkan confidence 60% tadi, dia bakal ngasih diskon buat pembelian yang tetap terjadi tanpa diskon.

Apa artinya buat warungnya?

Aturan terkuat: telur → indomie dengan confidence 100% dan lift 1,67. Lima struk yang ada telurnya, kelimanya juga ada indomie.

Dari data itu, ada tiga aksi yang masuk akal.

Pertama, taruh rak telur bersebelahan sama rak mi instan. Nol biaya, dan orang nggak perlu muter.

Kedua, bikin paket "Sarapan Hemat" isi 5 indomie plus 6 butir telur. Kalau harga eceran totalnya Rp 24.500 dan paketnya dijual Rp 22.900, marginnya turun sekitar Rp 1.600 per paket tapi ukuran keranjang naik.

Ketiga, jangan bikin paket telur plus kopi. Lift-nya 1,00, jadi diskonnya kebuang.

Catatan penting: 10 transaksi terlalu sedikit buat keputusan beneran. Angka lift 1,67 dari 10 struk itu latihan, bukan bukti. Buat toko asli, kumpulin minimal seribu struk dulu.

Gimana cara jalanin Apriori di Python?

Library yang paling sering dipakai buat ini adalah mlxtend. Kodenya pendek.

import pandas as pd
from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import apriori, association_rules

transaksi = [
    ["indomie", "telur"],
    ["indomie", "telur", "kopi"],
    ["indomie", "kopi"],
    ["kopi", "gula"],
    ["indomie", "telur", "kopi"],
    ["roti", "susu"],
    ["indomie", "telur"],
    ["kopi", "gula", "roti"],
    ["indomie", "telur", "kopi"],
    ["roti", "susu", "gula"],
]

te = TransactionEncoder()
matriks = te.fit(transaksi).transform(transaksi)
df = pd.DataFrame(matriks, columns=te.columns_)

sering = apriori(df, min_support=0.3, use_colnames=True)
aturan = association_rules(sering, metric="lift", min_threshold=1.0)

print(aturan[["antecedents", "consequents", "support", "confidence", "lift"]]
      .sort_values("lift", ascending=False)
      .round(3))

Angka yang keluar sama persis dengan tabel hitung manual di atas. Aturan telur ke indomie muncul dengan confidence 1,0 dan lift 1,667.

Satu catatan versi: di mlxtend rilis baru, fungsi association_rules minta argumen tambahan num_itemsets. Kalau kodemu error, tambahin num_itemsets=len(df). Rinciannya ada di dokumentasi resmi mlxtend.

Cara nyiapin data kasir jadi format transaksi

Data kasir biasanya datang dalam bentuk panjang: satu baris per item, dengan kolom nomor struk. Ubah dulu jadi daftar per struk.

transaksi = (df_kasir
             .groupby("no_struk")["nama_barang"]
             .apply(list)
             .tolist())

Fungsi groupby di pandas ngerjain pengelompokan ini dalam satu baris. Kalau kamu belum akrab sama konsepnya, baca dulu soal aggregate function dan dokumentasi groupby pandas.

Gimana cara hitung support pasangan di Excel?

Buat data kecil, kamu nggak butuh Python. Susun dulu tabel biner: satu baris per struk, satu kolom per barang, isinya 1 kalau barang itu dibeli.

Support pasangan tinggal ngitung berapa baris yang punya 1 di dua kolom sekaligus.

=SUMPRODUCT(B2:B11, C2:C11) / COUNT(B2:B11)

Kolom B itu indomie, kolom C itu telur. SUMPRODUCT ngaliin tiap pasang nilai lalu jumlahin hasilnya, jadi cuma baris yang dua-duanya 1 yang kehitung.

Buat support barang tunggal, COUNTIF lebih pas dan lebih gampang dibaca.

Cara ini mentok di kombinasi tiga barang, karena jumlah kolom bantunya naik cepat. Tapi buat ngerti mekanismenya, ini paling jelas.

Kesalahan umum waktu pakai Apriori

  1. Cuma baca confidence. Barang yang laku banget bakal punya confidence tinggi di hampir semua aturan. Selalu cek lift.
  2. Minimum support kekecilan. Set 0,001 di data ribuan transaksi bikin ribuan aturan keluar dan nggak ada yang sempat kamu baca.
  3. Ngitung barang, bukan struk. Kalau satu struk beli 3 indomie, itu tetap satu kemunculan. Buang duplikat dalam struk sebelum ngitung.
  4. Nyampur periode promo dan non-promo. Pola belanja waktu diskon beda jauh. Pisahkan periodenya atau aturanmu bakal nyeritain promo, bukan perilaku asli.
  5. Nganggap asosiasi sebagai sebab-akibat. Telur dan indomie muncul bareng bukan berarti telur nyebabin orang beli indomie. Dua-duanya bahan sarapan yang sama.

Sebelum semua itu, cek dulu kondisi datanya. Nama barang yang ditulis "Indomie", "indomie", dan "INDOMIE GORENG" bakal dihitung sebagai tiga barang berbeda, dan itu urusan data quality yang harus beres duluan.

FAQ

Apa bedanya support, confidence, dan lift?

Support ngukur seberapa sering kombinasi barang muncul dari seluruh transaksi. Confidence ngukur seberapa sering barang B ikut kebeli kalau barang A dibeli. Lift ngebandingin confidence tadi sama peluang B kebeli secara acak. Lift di atas 1 berarti hubungannya nyata, lift sekitar 1 berarti dua barang itu bebas satu sama lain.

Berapa minimum support yang bagus?

Nggak ada angka baku, dan itu tergantung jumlah transaksimu. Buat data kecil di bawah 100 transaksi, mulai dari 0,2 sampai 0,3. Buat data ribuan transaksi, 0,01 aja udah lumayan karena satu persen dari 50 ribu transaksi itu 500 kejadian. Turunin pelan-pelan sampai jumlah aturannya masih bisa kamu baca.

Kenapa algoritmanya disebut Apriori?

Namanya datang dari prinsip yang dia pakai: kalau satu kombinasi barang jarang muncul, semua kombinasi lebih besar yang memuatnya pasti lebih jarang lagi. Pengetahuan awal ini dipakai buat mangkas kandidat sebelum dihitung. Tanpa pemangkasan itu, jumlah kombinasi yang harus dicek naik meledak.

Apriori bisa jalan di Excel nggak?

Bisa buat data kecil, misalnya di bawah 200 transaksi dan 10 jenis barang. Kamu susun tabel biner dengan 1 dan 0 per barang, lalu hitung support pasangan pakai SUMPRODUCT. Yang berat itu kombinasi tiga barang ke atas. Buat data kasir asli yang ribuan baris, pindah ke Python jauh lebih hemat waktu.

Aturan dengan confidence 100% pasti berguna?

Belum tentu. Confidence 100% bisa muncul dari barang yang cuma kebeli tiga kali dan kebetulan selalu bareng. Cek dulu support-nya. Baca ketiga angka bareng-bareng, dan kasih perhatian ekstra ke lift karena dia yang ngasih tau hubungannya nyata atau cuma efek barang populer.

Rangkuman

Apriori nyaring kombinasi bertahap: barang populer dulu, baru pasangan, baru trio. Yang jarang dibuang sejak awal biar hitungannya ringan.

Support, confidence, dan lift harus dibaca bertiga. Lift yang mepet 1 itu tanda kamu lagi ngeliat barang laku, bukan pola belanja.

Coba pakai data kasir tempatmu kerja atau data penjualan latihan. Sepuluh menit ngitung support bisa ngubah cara toko nyusun raknya.

Mau lanjut ke teknik klasifikasi? Baca algoritma Naive Bayes dan contoh hitung manualnya, atau latihan narik data transaksi per struk di NgulikSQL.

Coba Langsung

Mau praktek langsung? Mulai latihan SQL gratis

Latihan interaktif, langsung di browser.

Buka NgulikSQL →
Bagikan:
Bima
Ditulis oleh

Bima

Founder & Data Professional

Founder Ngulik Data. Passionate about making data analysis accessible for everyone.

Artikel terkait

Pandas groupby: Agregasi Data ala Pivot di Python (2026)
Tips & Trik
20 Juli 2026•9 menit baca

Pandas groupby: Agregasi Data ala Pivot di Python (2026)

groupby ngelompokin baris berdasarkan kolom, lalu ngitung ringkasan per grup kayak total atau rata-rata. Ini pivot-nya pandas.

BimaBima
Pandas to_excel: Ekspor DataFrame ke Excel (2026)
Tips & Trik
18 Juli 2026•8 menit baca

Pandas to_excel: Ekspor DataFrame ke Excel (2026)

to_excel nyimpen DataFrame pandas jadi file Excel .xlsx. Ini cara pakainya, dari satu sheet sampai banyak sheet, plus setelan yang bikin hasilnya rapi.

BimaBima
Pandas read_excel: Baca File Excel di Python
Tips & Trik
16 Juli 2026•8 menit baca

Pandas read_excel: Baca File Excel di Python

pandas read_excel baca file Excel jadi DataFrame, bisa pilih sheet tertentu dan lompatin baris judul yang berantakan. Ini cara pakai plus parameter penting dengan contoh data toko.

BimaBima
Kembali ke Blog
Ngulik Data logoNgulik Data

Platform edukasi data lengkap untuk professionals Indonesia. Belajar SQL, Data Analysis, dan lebih banyak lagi dengan praktek langsung dan feedback real-time.

© 2026 Ngulik Data. Semua hak dilindungi.

TAUTAN
BantuanHargaDatasetBlogAfiliasi
LEGAL
Syarat & KetentuanKebijakan Privasi
Ngulik Data
DatasetLeaderboardBlogStore