APRIORI ALGORITMASI İLE KÜÇÜK BİR UYGULAMA -1
Merhaba Arkadaşlar,
Apriori öncelikle nedir bununla başlayalım... Apriori, Veri Madenciliğinde Association Rules yapısı altında beraber satılan ürünlerin arasında ilişki kontrol etmemize yarayan bir algoritmadır. Algoritma iki ana kriter üzerinden kurgulanır.
1-) Support : Araştırma yapmak istediğimiz ürünün toplam satışdaki yüzdesi.
2-) Confidence : Satışları seçilen ürünle beraber satılan ürünlerin ilgili satışlardaki
yüzdeleri.
İşte bu iki ana kritere belirli yüzdelerin üstündeki transactionları kullan demek suretiyle ikili veya daha fazla blok satışların oranları bulunarak indirimler,promosyonlar vs. yapılabilir.
Peki bu işi nasıl yapacağız.. İki adet malzemeye ihtiyaç duymaktayız.
1-) Veritabanı ve satışlarımızın bulunduğu tablo datası..
2-) Weka Data Mining programı..
Öncelikle Weka dan biraz bahsedelim. Weka Java tabnalı veri madenciliği algoritmalarını (Sınıflandırma,Kümelendirme,İlişkisel kurallar ve bunların alt algoritmalarını) belirli tablo üzerinde uygulayabildiğimiz güzel bir tool.
Download linki ile bilgisayarınıza kurabilirsiniz. Eğer bir java kullanıcısı iseniz javasız versiyonunu kurup test e başlayabilirsiniz...
Neyse amacımız yukarıda da söylediğimiz gibi mamuller arası ilişki bulabilmek bunun için önce veritabanında iki tablo açıyoruz..
Birinci tablo İlişki kurmak istediğimiz mamullerin referanslarının olacağı tablo..
GO
/****** Object: Table [dbo].[t_tanim_mamul_association] Script Date: 01/28/2011 14:19:56 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[t_tanim_mamul_association](
[Mamul1] [varchar](10) NULL,
[Mamul2] [varchar](10) NULL,
[Mamul3] [varchar](10) NULL,
[Mamul4] [varchar](10) NULL,
[Mamul5] [varchar](10) NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
İkinci tablomuz ise Weka da beraber çalışacağımız tablo..
/****** Object: Table [dbo].[t_mamul_association] Script Date: 01/28/2011 14:18:16 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[t_mamul_association](
[Tarih] [datetime] NULL,
[Satici] [varchar](6) NULL,
[Mamul1] [varchar](8) NULL,
[Mamul2] [varchar](8) NULL,
[Mamul3] [varchar](8) NULL,
[Mamul4] [varchar](8) NULL,
[Mamul5] [varchar](8) NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
Şimdi ise t_mamul_association ı dolduracağımız sql ..
Insert into dbo.t_mamul_association
(Tarih,Satici)
Select TARIH,Satici from dbo.Satis
group by Satici,Tarih
declare @ls_tarih datetime
declare @ls_satici varchar(6)
declare @ls_mamul varchar(8)
declare tarih_satici_mamul CURSOR FOR
Select Tarih,Satici,Mamul from dbo.Satis
group by Satici,Tarih,Mamul
open tarih_satici_mamul
FETCH NEXT FROM tarih_satici_mamul into
@ls_tarih,
@ls_satici,
@ls_mamul
WHILE @@FETCH_STATUS = 0
BEGIN
if exists
(Select * from dbo.t_tanim_mamul_association
where Mamul1=@ls_mamul)
begin
update dbo.t_mamul_association
set Mamul1=@ls_mamul
where
Tarih=@ls_tarih
and
Satici=@ls_satici
end
if exists
(Select * from dbo.t_tanim_mamul_association
where Mamul2=@ls_mamul)
begin
update dbo.t_mamul_association
set Mamul2=@ls_mamul
where
Tarih=@ls_tarih
and
Satici=@ls_satici
end
if exists
(Select * from dbo.t_tanim_mamul_association
where Mamul3=@ls_mamul)
begin
update dbo.t_mamul_association
set Mamul3=@ls_mamul
where
Tarih=@ls_tarih
and
Satici=@ls_satici
end
if exists
(Select * from dbo.t_tanim_mamul_association
where Mamul4=@ls_mamul)
begin
update dbo.t_mamul_association
set Mamul4=@ls_mamul
where
Tarih=@ls_tarih
and
Satici=@ls_satici
end
if exists
(Select * from dbo.t_tanim_mamul_association
where Mamul5=@ls_mamul)
begin
update dbo.t_mamul_association
set Mamul5=@ls_mamul
where
Tarih=@ls_tarih
and
Satici=@ls_satici
end
FETCH NEXT FROM tarih_dist_mamul into
@ls_tarih,
@ls_satici,
@ls_mamul
END
close tarih_satici_mamul
deallocate tarih_satici_mamul
bu şekilde tablomuzu hazırlıyoruz ve kaba olarak artık hangi mamul un beraber satıldığını artık görebiliriz.
Bir sonraki yazımızda Weka üzerinde Mining yapacağız..
Kolay Gelsin.
Apriori öncelikle nedir bununla başlayalım... Apriori, Veri Madenciliğinde Association Rules yapısı altında beraber satılan ürünlerin arasında ilişki kontrol etmemize yarayan bir algoritmadır. Algoritma iki ana kriter üzerinden kurgulanır.
1-) Support : Araştırma yapmak istediğimiz ürünün toplam satışdaki yüzdesi.
2-) Confidence : Satışları seçilen ürünle beraber satılan ürünlerin ilgili satışlardaki
yüzdeleri.
İşte bu iki ana kritere belirli yüzdelerin üstündeki transactionları kullan demek suretiyle ikili veya daha fazla blok satışların oranları bulunarak indirimler,promosyonlar vs. yapılabilir.
Peki bu işi nasıl yapacağız.. İki adet malzemeye ihtiyaç duymaktayız.
1-) Veritabanı ve satışlarımızın bulunduğu tablo datası..
2-) Weka Data Mining programı..
Öncelikle Weka dan biraz bahsedelim. Weka Java tabnalı veri madenciliği algoritmalarını (Sınıflandırma,Kümelendirme,İlişkisel kurallar ve bunların alt algoritmalarını) belirli tablo üzerinde uygulayabildiğimiz güzel bir tool.
Download linki ile bilgisayarınıza kurabilirsiniz. Eğer bir java kullanıcısı iseniz javasız versiyonunu kurup test e başlayabilirsiniz...
Neyse amacımız yukarıda da söylediğimiz gibi mamuller arası ilişki bulabilmek bunun için önce veritabanında iki tablo açıyoruz..
Birinci tablo İlişki kurmak istediğimiz mamullerin referanslarının olacağı tablo..
GO
/****** Object: Table [dbo].[t_tanim_mamul_association] Script Date: 01/28/2011 14:19:56 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[t_tanim_mamul_association](
[Mamul1] [varchar](10) NULL,
[Mamul2] [varchar](10) NULL,
[Mamul3] [varchar](10) NULL,
[Mamul4] [varchar](10) NULL,
[Mamul5] [varchar](10) NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
İkinci tablomuz ise Weka da beraber çalışacağımız tablo..
/****** Object: Table [dbo].[t_mamul_association] Script Date: 01/28/2011 14:18:16 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[t_mamul_association](
[Tarih] [datetime] NULL,
[Satici] [varchar](6) NULL,
[Mamul1] [varchar](8) NULL,
[Mamul2] [varchar](8) NULL,
[Mamul3] [varchar](8) NULL,
[Mamul4] [varchar](8) NULL,
[Mamul5] [varchar](8) NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
Şimdi ise t_mamul_association ı dolduracağımız sql ..
Insert into dbo.t_mamul_association
(Tarih,Satici)
Select TARIH,Satici from dbo.Satis
group by Satici,Tarih
declare @ls_tarih datetime
declare @ls_satici varchar(6)
declare @ls_mamul varchar(8)
declare tarih_satici_mamul CURSOR FOR
Select Tarih,Satici,Mamul from dbo.Satis
group by Satici,Tarih,Mamul
open tarih_satici_mamul
FETCH NEXT FROM tarih_satici_mamul into
@ls_tarih,
@ls_satici,
@ls_mamul
WHILE @@FETCH_STATUS = 0
BEGIN
if exists
(Select * from dbo.t_tanim_mamul_association
where Mamul1=@ls_mamul)
begin
update dbo.t_mamul_association
set Mamul1=@ls_mamul
where
Tarih=@ls_tarih
and
Satici=@ls_satici
end
if exists
(Select * from dbo.t_tanim_mamul_association
where Mamul2=@ls_mamul)
begin
update dbo.t_mamul_association
set Mamul2=@ls_mamul
where
Tarih=@ls_tarih
and
Satici=@ls_satici
end
if exists
(Select * from dbo.t_tanim_mamul_association
where Mamul3=@ls_mamul)
begin
update dbo.t_mamul_association
set Mamul3=@ls_mamul
where
Tarih=@ls_tarih
and
Satici=@ls_satici
end
if exists
(Select * from dbo.t_tanim_mamul_association
where Mamul4=@ls_mamul)
begin
update dbo.t_mamul_association
set Mamul4=@ls_mamul
where
Tarih=@ls_tarih
and
Satici=@ls_satici
end
if exists
(Select * from dbo.t_tanim_mamul_association
where Mamul5=@ls_mamul)
begin
update dbo.t_mamul_association
set Mamul5=@ls_mamul
where
Tarih=@ls_tarih
and
Satici=@ls_satici
end
FETCH NEXT FROM tarih_dist_mamul into
@ls_tarih,
@ls_satici,
@ls_mamul
END
close tarih_satici_mamul
deallocate tarih_satici_mamul
bu şekilde tablomuzu hazırlıyoruz ve kaba olarak artık hangi mamul un beraber satıldığını artık görebiliriz.
Bir sonraki yazımızda Weka üzerinde Mining yapacağız..
Kolay Gelsin.
Yorumlar
Yorum Gönder