關聯分析


本節內容:

1:理解關聯分析及專業名詞

2:關聯分析指定數據結構-->transactions(事務結構)

3:關聯分析規則規定流程

4:R代碼實現規則

 

一、理解關聯分析及專業名詞

1.1:什么是關聯分析:

有一個非常有名的故事:"尿布和啤酒"。故事是這樣的:美國的婦女們經常會囑咐她們的丈夫
下班后為孩子買尿布,而丈夫在買完尿布后又要順 手買回自己愛喝的啤酒,因此啤酒和尿布在
一起被購買的機會很多。這個舉措使尿布和啤酒的銷量雙雙增加,並一直為眾商家所津津樂道。

我們從中會有疑問?為什么尿布和啤酒放在一起就提升銷量呢?
如何去發現尿布和啤酒之間的關系就是我們要講的關聯分析

1.2:要進行關聯分析要用什么方法?

Apriori algorithm是關聯規則里一項基本算法。
是由Rakesh Agrawal和Ramakrishnan Srikant兩位博士在1994年提出的關聯規則挖掘算法。 關聯規則的目的就是在一個數據集中找出項與項之間的關系,
也被稱為購物藍分析 (Market Basket analysis),因為“購物藍分析”很貼切的表達了適用該算法情景中的一個子集。

我們將每一個顧客購買的購物藍中物品稱之為,而購物籃的物品集合就叫做項集,這一次購買的東西的行為叫做事務

1.3:專業名詞

支持度(Support):定 義為 supp(X) = occur(X) / count(D) = P(X)。

   1. 解釋一:比如選秀比賽,那個支持和這個有點類似,那么多人(資料庫),其中有多少人是選擇(支持)你的,那個就是支持度;
   2. 解釋二:在100個人去超市買東西的,其中買蘋果的有9個人,那就是說蘋果在這里的支持度是 9,9/100;
   3. 解釋三:P(X),意思是事件X出現的概率;
   4. 解釋四:關聯規則當中是有絕對支持度(個數)和相對支持度(百分比)之分的。

置信度(Confidence/Strength): 定義為 conf(X->Y) = supp(X ∪ Y) / supp(X) = P(Y|X)。

買A的支持度是0.8  買B的支持度是0.6
同時買A和B的支持度是0.4
那么我們求A對B的置信度 = 0.4 / 0.8 = 0.5
##求是說夠買了A之后那么再購買B的成功率是0.5,而原本B的支持度是0.6,那么在后面的算法我們就不會生成這個關聯規則

支持度(提升度Lift)

通過置信度A對B的支持度 =  0.5 / 0.6 =0.83  
##這說明支持度降低,不應該把A和B放在一起進行銷售

頻繁集

我們指定支持度為(0.25)那么項集從1到n的項集 > 0.25就叫做頻繁集。

當購物車有2個商品:叫做2項集
當購物車有3個商品:叫做3項集

二、關聯分析指定數據結構-->(事務結構) 

要進行關聯分析那么其數據集的數據結構必須為transactions(事務結構)。

library(arules)
library(gridBase)

tr_list = list(
  c("Bread","Milk"),
  c("Bread","Beer","Milk"),
  c("Eggs","Beer","DR")
)

##重命名
names(tr_list) = paste("tr",c(1:3),sep = "")
summary(tr_list)

##變成事務類型
#使用as函數,將鏈表轉化為事務類型
trans = as(tr_list,"transactions")

如何查看事務類型的屬性

##展現事務
LIST(trans)   ##查看事務數據
inspect(trans)

image(trans)  ##可視化查看事務

trans@data

size(trans)  #每個事務中包含多少項

filter_trans = trans[size(trans)>=3] ##篩選出事務中項數大於等於3的事務
summary(filter_trans)

三、關聯分析規則規定流程

 

從1項集到N項集,求出各個項集的支持度,我們指定支持度的閾值為(0.25),當支持度小於0.25,我們就

將其項集刪除。然后就出各個的置信度和提升度判定是否要生成規則

支持度:
	Beer = 0.6  Bread=0.8 Coke=0.4
	Diaper = 0.8 Mike=0.8
	
置信度:
	Be,Br = 0.4
	求置信度Be:Be和Br都發生的概率是0.4,原本購買Br的概率是0.8
	所以0.4/0.8=0.5 就是說,夠買了Br之后那么再購買Be的成功率是0.5
	那么原本購買Be的0.6 變成了 0.5,所以就生成不了這個規則。
提升度:
	0.5/0.6 = 0.83 購買Be提升度降低

四、R代碼實現規則 

1:實現:事務轉換、查看事務數據

library(arules)
library(gridBase)
install.packages("arulesViz")
library(arulesViz)
tr_list = list(
  c("Bread","Milk"),
  c("Bread","Beer","Diaper","Eggs"),
  c("Milk","Diaper","Beer","Coke"),
  c("Bread","Milk","Diaper","Beer"),
  c("Bread","Milk","Diaper","Coke")
)

names(tr_list) = paste("tr",c(1:5),sep = "")
summary(tr_list)


##變成事務類型
#使用as函數,將鏈表轉化為事務類型
trans = as(tr_list,"transactions")
inspect(trans)

2:實現:查看單項集的支持度,還有經過支持度的篩選得到的多項集的支持度

##查看支持度
ac = itemFrequency(trans,type="relative")
summary(ac)

ec = eclat(trans,parameter = list(support=0.25,maxlen=5))  
#找到所有項集 支持度大於0.25的,maxlen[最大項集是幾項]

summary(ec)

inspect( sort(ec,by="support")) 
#查看各個項集的支持度,按支持度排序

 3:實現規則

##-----------------生成規則,---------------
#conf = 0.5[置信度要大於0.5也就是起碼不能是靠猜的買還是不買]
rules  = apriori(trans,parameter = list(supp=0.25,conf=0.5,target="rules"))

inspect(rules)
summary(rules)

#對規則的置信度進行排序
rules.sorted = sort(rules,by="confidence",decreasing = T)
inspect(rules.sorted)
##去重復規則 is_redun = is.redundant(rules.sorted) trans_punds = rules.sorted[!is_redun] inspect(trans_punds)

4:單獨針對Milk的規則

#買Milk的人 我們要怎么做推薦
mike_rules = apriori(trans,parameter = list(supp=0.2,conf=0.5,minlen=2),
        appearance = list(default="rhs",lhs="Milk"))

inspect(mike_rules)
plot(mike_rules,by="lift",main="milk_rule by lift",method="graph",
     control=list(type="items"))


##買了什么產品會推薦Mike,rhs=>右邊是milk
mike_rules_r = apriori(trans,parameter = list(supp=0.2,conf=0.5,minlen=3),
                     appearance = list(default="lhs",rhs="Milk"))

plot(mike_rules_r,by="lift",main="milk_rule by lift",method="graph",
     control=list(type="items"))

plot(c(rules.sorted,mike_rules_r),mian="RHS_milk rules") 
##繪制關聯規則的氣球圖 #兩個以上才能圖畫出來

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM