20121107 Apriori Code
-
Upload
yulianty-soleh -
Category
Documents
-
view
230 -
download
0
Transcript of 20121107 Apriori Code
-
8/18/2019 20121107 Apriori Code
1/34
BAB 5ALGORITMA A PRIORI
A. Algoritma A Priori
Algoritma a priori termasuk jenis aturan assosiasipada data mining. Selain a priori yang termasukpada golongan ini adalah metode Generalized RuleInduction dan Algoritma Hash Based .
Aturan yang menyatakan asosiasi antara beberapaatribut sering disebut sebagai affinity analysis ataumarket basket analysis .
Analisis asosiasi atau association rule miningadalah teknik data mining untuk menemukan aturan
assosiatif antara suatu kombinasi item. Contoh dariaturan assosiatif dari analisa pembelian di suatupasar swalayan adalah dapat diketahuinya berapabesar kemungkinan seorang pelanggan membeliroti bersamaan dengan susu. Dengan pengetahuantersebut pemilik pasar swalayan dapat mengaturpenempatan barangnya atau merancang kampanyepemasaran dengan memakai kupon diskon untukkombinasi barang tertentu.
Karena analisis asosiasi menjadi terkenal karenaaplikasinya untuk menganalisa isi keranjang belanja
di pasar swalayan, analisis asosiasi juga seringdisebut dengan istilah market basket analysis .
Analisis asosiasi dikenal juga sebagai salah satuteknik data mining yang menjadi dasar dariberbagai teknik data mining lainnya. Khususnyasalah satu tahap dari analisis asosiasi yang disebutanalisis pola frequensi tinggi (frequent pattern
-
8/18/2019 20121107 Apriori Code
2/34
-
8/18/2019 20121107 Apriori Code
3/34
Tahap ini mencari kombinasi item yang memenuhisyarat minimum dari nilai support dalam database.Nilai support sebuah item diperoleh dengan rumusberikut:
TransaksiTotal
Amengandungtransaksi Jumlah ASupport =)(
sedangkan nilai support dari 2 item diperoleh darirumus 2 berikut :
)(),( B AP B ASupport ∩=
Transaksi
Bdan AmengandungTransaksi B ASupport
∑∑
=),(
Tabel 5.1. Transaksi
Transaksi Item yang dibeli1 Susu, Teh, Gula2 Teh, Gula, Roti3 Teh, Gula4 Susu, Roti5 Susu, Gula, Roti6 Teh, Gula7 Gula, Kopi, Susu8 Gula, Kopi, Susu
9 Susu, Roti, Kopi10 Gula, Teh, Kopi
Sebagai contoh, ada database dari transaksibelanja pasar swalayan seperti ditunjukkan dalamTabel 5.1
-
8/18/2019 20121107 Apriori Code
4/34
Data pada Tabel 5.1 dalam database transaksionalbiasa direpresentasikan dalam bentuk sepertitampak pada Tabel 5.2
Representasi Data Transaksi dalamDatabase Transaksional
Transaksi Item yang dibeli
1 Susu1 Teh1 Gula2 Teh2 Gula2 Roti3 Teh3 Gula
4 Susu4 Roti5 Susu5 Gula5 Roti6 Teh6 Gula7 Gula7 Kopi7 Susu8 Gula
8 Kopi8 Susu9 Susu9 Roti9 Kopi10 Gula10 Teh10 Kopi
-
8/18/2019 20121107 Apriori Code
5/34
Dan bila kita bentuk dalam bentuk tabular, datatransaksi akan tampak seperti pada Tabel 5.3.
Format Tabular Data TransaksiTransaksi Teh Gula Kopi Susu Roti1 1 1 0 1 02 1 1 0 0 13 1 1 0 0 04 0 0 0 1 15 0 1 0 1 16 1 1 0 0 07 0 1 1 1 08 0 1 1 1 09 0 0 1 1 1
10 1 1 1 0 0
Misalkan D adalah himpunan transaksi yangdireperesentasikan dalam Tabel 5.1, dimanamasing-masing transaksi T dalam Dmerepresentasikan himpunan item yang beradadalam I. I adalah himpunan iterm yang dijual {Teh,Gula, Kopi, Susu, Roti}. Misalkan kita memilikihimpunan items A (misal Susu dan Gula) danhimpunan item lain B (misal Kopi). Kemudian aturanasosiasi akan berbentuk
Jika A, maka B ( A B)
Dimana antecedent A dan consequent Bmerupakan subset dari I, dan A dan B merupakanmutually exclusive dimana aturan
Jika A maka B
-
8/18/2019 20121107 Apriori Code
6/34
tidak berarti
Jika B maka A
Definisi ini tidak berlaku untuk aturan trivial seperti :
Jika beans dan Squash Maka beans
Seorang analis mungkin hanya akan mengambilaturan yang memiliki support dan/atau confidenceyang tinggi. Aturan yang kuat adalah aturan-aturanyang melebihi kriteria support dan/atau confidenceminimum . Misalnya seorang analist menginginkanaturan yang memiliki support lebih dari 20% danconfidence lebih dari 35%.
Sebuah itemset adalah himpunan item-item yangada dalam I, dan k-itemset adalah itemset yangberisi k item. Misalnya {Teh, Gula) adalah sebuah2-itemset dan {Teh, Gula, Roti) merupakan 3- itemset .
Frequent Itemset menunjukkan itemset yangmemiliki frekuensi kemunculan lebih dari nilaiminimum yang telah ditentukan (ф). Misalkan ф =2, maka semua itemset yang frekuensikemunculannya lebih dari atau sama dengan 2 kalidisebut frequent . Himpunan dari frequent k-itemset
dilambangkan dengan Fk.
Tabel 5.4 berikut ini menujukkan calon 2-itemsetdari data transaksi pada Tabel 5.1.
-
8/18/2019 20121107 Apriori Code
7/34
Calon 2-itemsetKombinasi JumlahTeh, Gula 5
Teh, Kopi 1Teh, Susu 1Teh, Roti 1Gula, Kopi 3Gula, Susu 4Gula, Roti 2Kopi, Susu 3Kopi, Roti 1Susu, Roti 3
Dari data tersebut diatas, jika ditetapkan nilai ф = 3maka
F2 = { {Teh, Gula}, {Gula, Kopi}, {Gula,Susu}, {Gula, Roti}, {Kopi, Susu},{Susu, Roti}}
Calon 3-itemsetKombinasi Jumlah
Teh, Gula, Kopi 1Teh, Gula, Susu 1Gula, Susu, Kopi 2Gula, Susu, Roti 0
Gula, Kopi, Roti 0Kopi, Susu, Roti 1
Kombinasi dari itemset dalam F2 dapat kitagabungkan menjadi calon 3-itemset. Itemset-itemset dari F2 yang dapat digabungkan adalahitemset-itemset yang memiliki kesamaan dalam k-1
-
8/18/2019 20121107 Apriori Code
8/34
-
8/18/2019 20121107 Apriori Code
9/34
Jika membeli Gula dan Kopi Maka akan
membeli Susu
Jika membeli Kopi dan Susu Maka akan
membeli Gula
Sementara itu calon aturan asosiasi dari F2 bisadilihat pada tabel 5.7
Aturan AsosiasiAturan ConfidenceJika membeli TehMaka akan membeli Gula
5/5 100%
Jila membeli GulaMaka akan membeli Teh
5/8 62.5%
Jika membeli GulaMaka akan membeli Kopi
3/8 37.5%
Jika membeli KopiMaka akan membeli Gula
3/4 75%
Jika membeli GulaMaka akan membeli Susu
4/8 50%
Jika membeli SusuMaka akan membeli Gula
4/6 67%
Jika membeli GulaMaka akan membeli Roti
2/8 25%
Jika membeli RotiMaka akan membeli Gula
2/4 50%
Jika membeli KopiMaka akan membeli Susu
3/4 75%
Jika membeli SusuMaka akan membeli Kopi
3/6 50%
Jika membeli SusuMaka akan membeli Roti
3/6 50%
Jika membeli RotiMaka akan membeli Susu
3/4 75%
-
8/18/2019 20121107 Apriori Code
10/34
dan aturan asosiasi final terurut berdasarkanSupport x Confidence terbesar dapat dilihat padaTable 5.8.
Aturan Asosiasi Final
ATURAN SUPPORT CONFIDENCESUPPORT xCONFIDENCE
Jika membeli TehMaka akan membeliGula
50% 100%
50.0%
Jila membeli GulaMaka akan membeliTeh
50% 62.50%
31.3%
Jika membeli Susu
Maka akan membeliGula
40% 67%
26.8%
Jika membeli KopiMaka akan membeliGula
30% 75%
22.5%
Jika membeli KopiMaka akan membeliSusu
30% 75%
22.5%
Jika membeli RotiMaka akan membeliSusu
30% 75%
22.5%
Jika membeli Gula
dan Kopi Maka akanmembeli Susu
20% 67%
13.4%
Jika membeli Kopidan Susu Maka akanmembeli Gula
20% 67%
13.4%
-
8/18/2019 20121107 Apriori Code
11/34
B. Contoh Aplikasi
Dalam mengimplementasikan algoritma aprioriuntuk mencari aturan asosiasi, penulismenggunakan database default saat instalasi SQLserver 2000 yaitu database Northwind , dimanadalam database tersebut terdapat diantaranya 2tabel dengan relasi seperti tampak pada Gambar5.1.
Gambar 5.1 Relasi Tabel
-
8/18/2019 20121107 Apriori Code
12/34
Tabel Orders menyimpan transaksi yang terjadidalam suatu perusahaan sedangkan tabel OrderDetails menjelaskan prodecur apa saja yang terbelidalam masing-masing transaksi pada tabel Orders .
Dalam menerapkan algoritma apriori , kamimenggunakan tabel-tabel dalam database untukmenyimpan frequent itemset . Selain itu fasilitasquery dalam database juga dimanfaatkan untukmendapatkan kombinasi item yang mungkin dalamitemset .
Langkah yang dilakukan dalam pembuatan aplikasimining aturan asosisasi dengan algoritma apriori
pada penelitian ini dijelaskan dalam flowchart yangtampak pada Gambar 5.2, Gambar 5.3, Gambar 5.4dan Gambar 5.5
-
8/18/2019 20121107 Apriori Code
13/34
Gambar 5.2 Flowchart Program untuk mendapatkankombinasi yang memenuhi (1)
-
8/18/2019 20121107 Apriori Code
14/34
Gambar 5.3. Flowchart Program untukmendapatkan kombinasi yang memenuhi(2)
-
8/18/2019 20121107 Apriori Code
15/34
Gambar 5.4 Flowchart Program untuk mendapatkankombinasi yang memenuhi(3)
-
8/18/2019 20121107 Apriori Code
16/34
Gambar 5.5 Flowchart Program untuk mendapatkankombinasi yang memenuhi(4)
Gambar 5.6 menunjukkan Rancangan Form yangdigunakan dalam impelementasi algoritma apriori.
-
8/18/2019 20121107 Apriori Code
17/34
Gambar 5.6. Rancangan Form
File aplikasi dan source code dapat di perolehdalam CD yang disertakan dalam buku ini. Untukdapat menjalankan aplikasi ini, komputer harusterinstal SQL Server 2000.
Kode program ditulis dengan bahasa pemrogramanBorland Delphi 6. Aplikasi ini berjalan diatas sistemoperasi Microsoft Windows.
Aplikasi ini membutuhkan database Northwind,yaitu database default saat menginstal SQL Server2000. Setelah SQL Server terinstal, masukkan
-
8/18/2019 20121107 Apriori Code
18/34
database Northwind dalam ODBC. Berikut iniadalah langkah yang harus dilakukan untukmenambahkan database Northwind dalam ODBC:1. Buka Control Panel – Administrative Tool –Data
Source (ODBC). Fasilitas ini dapat dilihat padaGambar 5.7
Gambar 5.7 Adminiatrative Tools
2. Pada form ODBC, tekan tombol Add. Form inidapat dilihat pada Gambar 5.8
-
8/18/2019 20121107 Apriori Code
19/34
Gambar 5.8. Form ODBC
3. Pada Form Create New Data Source pilih DriverSQL Server dan tekan Tombol Finish. Form inidapat dilihat pada gambar 5.9.
-
8/18/2019 20121107 Apriori Code
20/34
Gambar 5.9 Form Create New Data Source
4. Pada Form Create a New Data Source to SQLServer masukkan name Northwind dan pilihserver dimana databasenya diletakkankemudian tekan Tombol Next dan padahalaman selanjutnya tekan Tombol Next lagi.Form ini dapat dilihat pada Gambar 5.10
-
8/18/2019 20121107 Apriori Code
21/34
Gambar 5.10 Form Create a New Data Sourceto SQL Server
5. Pada halaman pemilihan database, ganti
database default dengan database Northwindseperti tampak pada Gambar 5.11, kemudiantekan Tombol Next dan di halaman berikutnyatekan Tombol Finish.
Gambar 5.11. Halaman Pemilihan Database
-
8/18/2019 20121107 Apriori Code
22/34
Setelah database Northwind terdaftar dalam ODBC,langkah selanjutnya adalah membuat form sepertitampak pada Gambar 5.6. Properti yang palingpenting dalam rancangan form tersebut adalahproperti database pada komponen Query danQuery1. properti tersebut harus diisi denganNorthwind untuk menghubungkan aplikasi dengandatabasenya.
Berikut ini adalah listing programnya:
program Apriori;
uses
Forms,
UApriori in 'UApriori.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
unit UApriori;
interface
usesWindows, Messages, SysUtils, Variants,
Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, DB, DBTables,
ComCtrls, IBDatabase,
IBCustomDataSet, IBQuery, ExtCtrls;
type
-
8/18/2019 20121107 Apriori Code
23/34
TForm1 = class(TForm)
Query: TQuery;
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
Label1: TLabel;Label2: TLabel;
EdtMinTransaksi: TEdit;
EdtMinConfidence: TEdit;
BitBtn1: TBitBtn;
Panel4: TPanel;
BitBtn2: TBitBtn;
Memo1: TMemo;
Bevel2: TBevel;
Bevel3: TBevel;
Bevel1: TBevel;
Label3: TLabel;
EdtTotalTransaksi: TEdit;
Query1: TQuery; procedure BitBtn1Click(Sender:
TObject);
procedure FormShow(Sender: TObject);
procedure BitBtn2Click(Sender:
TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
varForm1: TForm1;
C : integer;
implementation
uses DateUtils;
{$R *.dfm}
-
8/18/2019 20121107 Apriori Code
24/34
procedure TForm1.BitBtn1Click(Sender:
TObject);
var i,j,k,l,temp,total_transaksi,
min_transaksi : integer;
min_confidence : real;keluar : boolean ;
antecedent, konklusi : string;
begin
Memo1.Clear;
with Query do
begin
Close;
SQL.Text :=
' SELECT count(OrderId) '+
' FROM Orders ';
Open;
EdtTotalTransaksi.Text :=
Fields[0].AsString;
total_transaksi := Fields[0].AsInteger;
min_transaksi :=
StrToInt(EdtMinTransaksi.text);
min_confidence :=
StrToFloat(EdtMinConfidence.Text);
//==========mengambil item yang
memenuhi syarat (C1)=========//
C := 1;
Close;
SQL.Text := 'DROP TABLE C1';
try
ExecSQL;
except
end;
Close;
-
8/18/2019 20121107 Apriori Code
25/34
SQL.Text :=
' CREATE TABLE C1 ( '+
' ITEM1 INTEGER, '+
' JML INTEGER)';
try
ExecSQL;except
end;
Close;
SQL.Text :=
' INSERT INTO C1 '+
' SELECT ProductId, count(OrderId)
'+
' FROM [Order Details] '+
' GROUP BY Productid '+
' HAVING count(OrderId) >= ' +
IntToStr(min_transaksi) +
' ORDER BY ProductId';ExecSQL;
//===========end of mengambil item
yang memenuhi syarat (C1)==============//
//===============mengambil item yang
memenuhi syarat (C2 dst)=============//
while not keluar do
begin
inc(C);
Close;SQL.Text := 'DROP TABLE C' +
IntToStr(C);
try
ExecSQL;
except
end;
//buat tabel
-
8/18/2019 20121107 Apriori Code
26/34
-
8/18/2019 20121107 Apriori Code
27/34
' FROM C'+ IntToStr(C-1) + ' P,
C'+ IntToStr(C-1) + ' Q '+
' WHERE Q.ITEM'+ IntToStr(C-1) +
' > P.ITEM' + IntToStr(C-1) );
for i := 2 to C-1 do
SQL.Add(' AND P.ITEM' + IntToStr(i)
+ ' > P.ITEM' + IntToStr(i-1) );
SQL.Add(' ORDER BY ');
for i := 1 to C-1 do
SQL.Add (' P.ITEM' + IntToStr(i)
+', ');
SQL.Add(' Q.ITEM' + IntToStr(C-1));
try
ExecSQL;except
end;
//hapus isi tabel yg tidak memenuhi
syarat
Close;
SQL.Text := ' DELETE FROM C'+
IntToStr(C) +
' WHERE JML
-
8/18/2019 20121107 Apriori Code
28/34
if IsEmpty then keluar := true;
end; //end of while not keluar do
//===========end of mengambil item
yang memenuhi syarat (C2 dst)==========//
//===========itung confidence
===================//
for i := 2 to C-1 do
begin
Close;
SQL.Text := 'SELECT * FROM C' +
IntToStr(i) + ' ORDER BY JML DESC';
Open;
while not eof do
begin
temp := 0;
for j := i downto 1 do
beginQuery1.Close;
Query1.SQL.Text := ' SELECT JML
FROM C' + IntToStr(i-1) + ' WHERE ';
for k := 1 to i-1 do
begin
Query1.SQL.Text :=
Query1.SQL.Text + ' item' + IntToStr(k) +
' = ' ;
if temp = k then
begin
Query1.SQL.Text :=
Query1.SQL.Text + Fields[temp].AsString +
' and '; temp := temp + 2
end else
begin
Query1.SQL.Text :=
Query1.SQL.Text + Fields[temp].AsString +
' and ';
temp := temp + 1
end
-
8/18/2019 20121107 Apriori Code
29/34
end;
Query1.SQL.Text :=
copy(Query1.SQL.Text,1,
length(Query1.SQL.Text)-7);
Query1.Open;
//jika nilai confidence minimum
terpenuhi
if
FieldByName('jml').AsInteger*100/
Query1.FieldByName('jml').AsInteger >=
min_confidence then
begin
antecedent := 'JIKA membeli ';
for k := 1 to i do
begin
if k = j then
konklusi := ' MAKA akanmembeli '+ Fields[k-1].AsString +
' dengan SUPPORT '+
FormatFloat('0.00',
FieldByName('jml').AsInteger/
total_transaksi*100) +
' %' +
' dan CONFIDENCE '+
FormatFloat('0.00',FieldByName('jml').AsIn
teger * 100 /
Query1.FieldByName('jml').AsInteger) +
' %' else if ((j = 1) and (k>2))
or ((j>1) and (k>1)) then
antecedent := antecedent +
', ' + Fields[k-1].AsString
else antecedent :=
antecedent + Fields[k-1].AsString;
end;
-
8/18/2019 20121107 Apriori Code
30/34
Memo1.Lines.Add(antecedent +
konklusi);
end;
end; //end of for j := 1 to i do
Next;
end; //end of while not eofend;
end; //end of with query do
end;
procedure TForm1.FormShow(Sender: TObject);
begin
C := 0;
Memo1.Clear;
end;
procedure TForm1.BitBtn2Click(Sender:
TObject);
beginClose;
end;
end
Gambar 5.12 berikut ini adalah tampilan hasilrunning program aplikasi untukmengimplementasikan algoritma apriori.
-
8/18/2019 20121107 Apriori Code
31/34
Gambar 5.12 Aplikasi Aturan Asosiasi denganalgoritma apriori
Aturan asosiasi yang diperoleh adalah sebagaiberikut:
-
8/18/2019 20121107 Apriori Code
32/34
1. JIKA membeli 21 MAKA akan membeli 61dengan SUPPORT 0.96 % dan CONFIDENCE
20.51 %
2. JIKA membeli 61 MAKA akan membeli 21dengan SUPPORT 0.96 % dan CONFIDENCE
33.33 %3. JIKA membeli 16 MAKA akan membeli 31
dengan SUPPORT 0.84 % dan CONFIDENCE
16.28 %
4. JIKA membeli 31 MAKA akan membeli 16dengan SUPPORT 0.84 % dan CONFIDENCE
13.73 %
5. JIKA membeli 16 MAKA akan membeli 60dengan SUPPORT 0.72 % dan CONFIDENCE
13.95 %
6. JIKA membeli 60 MAKA akan membeli 16dengan SUPPORT 0.72 % dan CONFIDENCE
12.76 %
7. JIKA membeli 16 MAKA akan membeli 62dengan SUPPORT 0.72 % dan CONFIDENCE
13.95 %
8. JIKA membeli 62 MAKA akan membeli 16dengan SUPPORT 0.72 % dan CONFIDENCE
12.50 %
9. JIKA membeli 30 MAKA akan membeli 54dengan SUPPORT 0.72 % dan CONFIDENCE
18.75 %
10. JIKA membeli 54 MAKA akan membeli 30dengan SUPPORT 0.72 % dan CONFIDENCE
16.67 %
11. JIKA membeli 31 MAKA akan membeli 72
dengan SUPPORT 0.72 % dan CONFIDENCE12.76 %
12. JIKA membeli 72 MAKA akan membeli 31dengan SUPPORT 0.72 % dan CONFIDENCE
15.79 %
13. JIKA membeli 60 MAKA akan membeli 71dengan SUPPORT 0.72 % dan CONFIDENCE
12.76 %
-
8/18/2019 20121107 Apriori Code
33/34
14. JIKA membeli 71 MAKA akan membeli 60dengan SUPPORT 0.72 % dan CONFIDENCE
14.29 %
Aturan-aturan tersebut diperoleh dengan langkah-
langkah sebagai berikut:1. Mengambil ProductId dan frekunesi transaksi
terhadap produk tersebut dari tabel OrderDetails yang memenuhi minimum transaksidan dimasukkan ke dalam tabel C1. TabelOrder Details dan tabel C1 dapat dilihat padalampiran 2, sedangkan minimum transaksiditentukan oleh user pada form aplikasi, dandalam hal ini diambil nilai minimum transaksisebesar 5.
2. Membuat kombinasi item-item pada tabel C1dan dimasukkan ke dalam tabel C2 menjadicalon 2-itemset. Pada langkah ini dilakukanpula penghitungan frekuensi transaksi yangmengandung kombinasi item-item tersebut.Kombinasi item yang memiliki frekuensitransaksi kurang dari nilai minimum_transaksidihapus dari tabel C2. Isi dari tabel C2 dapatdilihat pada lampiran 2.
3. Membuat kombinasi item-item pada tabel C2dan dimasukkan ke tabel C3 menjadi calon 3-itemset. Seperti pada langkah 2, dilakukanpenghitungan frekuensi transaksi yang
mengandung kombinasi item dari calon k-itemset, dan kombinasi yang tidak memenuhinilai minimum transaksi dihapus dari tabel C3.Isi dari tabel C3 kosong, yang artinya tidakada kombinasi item yang memuhi syaratminimum transaksi.
4. Dari tabel C2 dibentuk aturan asosiasi yangberbentuk
-
8/18/2019 20121107 Apriori Code
34/34
jika nilai[item1] maka nilai[item2]
dan sebaliknya
jika nilai[item2] maka nilai[item1]
5. dari masing-masing bentuk aturan asosiasipada seluruh record yang ada di tabel C2 dilakukang perhitungan nilai confidence. Bagiaturan yang memenuhi syarat minimumconfidence akan ditampilkan, sedangkan yangtidak memenuhi tidak ditampilkan. Dalam halini, minimum confidence ditentukan sebesar10%
Aplikasi ini sudah dapat digunakan untuk mencariaturan asosiasi sampai tingkat n-antecedent. Tetapikarena data dalam database belum terlalu banyak,maka aturan asosiasi yang ditemukan baru sampai1-antecedent.