STUDI KASUS
Kembali lagi dengan permasalahan pemilik supermarket yang sudah dibahas di apriori, kali ini kita akan membantunya mencari hubungan anatra 2 produk (tentu saja bisa diubah lebih dari 2 produk). Kita akan mengolah data transaksi sebanyak 7501 buah. Hasil akhirnya adalah kita bisa merekomendasikan item mana saja yang harus didekatkan dan mana yang tetap berdasarkan nilai hubungan tertingginya.
Sebelum memulai melalui bahasa Python dan R, silakan download dataset untuk eclat di link ini.
Bahasa Python
# Mengimpor library import numpy as np import matplotlib.pyplot as plt import pandas as pd # Mengimpor dataset dataset = pd.read_csv('optimisasi_retail.csv', header = None ) jumlah_baris = dataset.shape[0] jumlah_kolom = dataset.shape[1] transaksi = [[str(dataset.values[i,j]) for j in range(0, jumlah_kolom) if str(dataset.values[i,j])!='nan'] for i in range(0, jumlah_baris)] # Membuat variabel items yang berisikan transaksi yang tidak terduplikasi items = list() for t in transaksi: for x in t: if(not x in items): items.append(x) # Membuat list bernama eclat yang merupakan pasangan 2 item, dengan nilai support awal nol (0) eclat = list() for i in range(0, len(items)): for j in range(i+1, len(items)): eclat.append([(items[i],items[j]),0]) # Menghitung nilai support untuk setiap pasangan 2 item for p in eclat: for t in transaksi: if(p[0][0] in t) and (p[0][1] in t): p[1] += 1 p[1] = p[1]/len(transaksi) # Merubah hasil eclat ke dalam data frame dan mengurutkannya berdasarkan nilai support tertinggi Hasil_eclat = pd.DataFrame(eclat, columns = ['rule','support']).sort_values(by = 'support', ascending = False)
Penjelasan:
- Line 2-4 mengimpor library yang diperlukan.
- Line 7 mengimpor datasetnya
- Line 8-9 menghitung jumlah kolom dan baris yang nantinya digunakan di line 10. Shape adalah metode untuk melihat jumlah baris dan kolom, dengan penulisan shape[baris,kolom]. Sehingga jika ingin mencari baris ditulis shape[0], dan kolom shape[1].
- Line 10 mendefinisikan variabel transaksi dengan tidak mengikutkan data yang bernilai kosong (tidak ada transaksi).
Cara membaca line 10 adalah sebagai berikut:
Pertama kita memilih semua values (nilai) yang ada di dataset dnegan cara mengiterasi dari kiri ke kanan (iterasi berdasarkan kolom). Kita hanya memilih values yang bukan berisi data kosong, dengan cara menuliskan if
str(dataset.values[i,j])!='nan'
setelah perintah di belakangnya. Perlu diperhatikan bahwa [str(dataset.values[i,j]) for
j in
range(0, jumlah_kolom) if
str(dataset.values[i,j])!='nan']
adalah satu kesatuan (dimulai dari kurung kotak buka dan diakhiri juga dengan kurung kotak tutup – brackets).
Selanjutnya, kita juga melanjutkan iterasi
baris (semua transaksi yang ada) berdasarkan hasil dari iterasi kolom di atas dengan cukup menuliskan for
i in
range(0, jumlah_baris)
setelahnya.
- Line 14 mendefinisikan variabel items sebagai list kosong. Nantinya kita gunakan variabel ini di line selanjutnya.
- Line 15-18 melakukan iterasi baris dan kolom sehingga setip baris di items tidak ada yang sama.
Cara membaca line 15-18 adalah sebagai berikut:
Pertama kita melakukan iterasi dari semua items (baris) yang ada di transaksi dengan iterator t, mulai dari index 0 sampai 7500. Variabel transaksi adalah sebagai berikut:
Setelah itu ia mengiterasi kolom dengan iterator x. Misal ketika ia berada di indeks 0 pada transaksi, maka ia akan mengiterasi semua item yang ada di indeks tersebut yaitu udang, almond, alpukat, dst.
Kemudian, di indeks x (misal sekarang ia berada di indeks udang), jika udang tidak ada di variabel items, maka udang akan dimasukkan ke variabel items yang didefinisikan di line 14. Begitu pula dengan item selanjutnya yaitu almond, alpukat, dll. Namun jika item yang diiterasi sudah ada di variabel items, maka cukup dilewati saja dan tidak ditambahkan ke items. Jika benar, maka variabel items tampak sebagai berikut:
- Line 21 mendefinisikan variabel eclat sebagai sebuah list kosong yang nantinya akan digunakan di line selanjutnya.
- Line 22 melakukan looping (iterasi) dari semua baris items dengan iterator i, kemudian item di i dipasangkan dengan item di j, dengan iterasi yang dimulai dari indeks i+1 (item di baris bawahnya i). Kemudian setelah dipasangkan ditambah lagi list selanjutnya sebagai nilai support awal (inisial) yaitu nol. Nantinya nilai support ini akan terus bertambah jika pasangannya ditemukan lagi di baris selanjutnya pada variabel transaksi.
- Line 27 melakukan iterasi lagi, dengan maksud setiap ditemukan pasangan lagi di baris di bawahnya, maka nilai support akan ditambahkan 1 (+=1).
Cara membaca p[0][0] yaitu pertama kita lihat item pertama (indeks dimulai dari nol) dari variabel p. Jika sudah, item pertama tadi kita lihat lagi item indeks pertama di dalamnya. Dengan demikian p[0][1] artinya, item pertama dari variabel p, dan item kedua dari item pertama variabel p tadi. Semoga tidak pusing ya =)
Jika benar, maka variabel eclat tampak sebagai berikut:
Melalui tampilan di atas, kita bisa lihat bahwa setiap pasangan (misal udang dengan almond) memiliki nilai support masing-masing. Namun, variabel eclat ini belum kita urutkan dari nilai support terbesar ke terkecil. Oleh karena itu kita buat variabel Hasil_eclat di line bawahnya.
- Line 34 mendefinisikan variabel Hasil_eclat dengan maksud merubahnya dari list menjadi dataframe melalui library panda yang sudah didefinisikan di line 4. Kolomnya kita beri nama ‘rule’ dan ‘support’. Kemudian kita urutkan berdasarkan nilai support dari besar ke kecil dengan menentukan parameter
ascending =
False.
Jika sudah, maka tampilan dari variabel Hasil_eclat adalah sebagai berikut:
Sekarang kita memiliki urutan pasangan 2 items yang diurutkan berdasarkan nilai supportnya masing-masing. Peringkat pertama adalah produk air mineral-spageti, dilanjutkan peringkat kedua air mineral-coklat, dan seterusnya. Dengan demikian, kita serahkan hasil analisis eclat ini ke pemilik supermarket atau pengambil keputusannya, apakah ia akan mendekatkan air dengan spageti misalnya atau tidak. Tentunya keputusan yang diambil harus penuh pertimbangan dan apakah akan mempengaruhi lini lain dari bisnis atau tidak.
Untuk melanjutkan membaca, silakan klik lanjut ke halaman selanjutnya di bawah ini.