1、3.資料關聯 Association,關聯範例三:鐵達尼號關聯分析,資料關聯範例一,函數【apriori】檔案 beer.xls5 records 6 fields,關聯法則基本概念,在資料探勘的領域之中,關聯性法則(association rule)是最常被使用的方法。關聯性法則在於找出資料庫中的資料間彼此的相關聯性。在關聯性法則之使用中,Apriori是最為著名且廣泛運用的演算法。最早是由Agrawal & Srikant 等兩位學者於1994年首先提出。if前項antecedent(s) then後項consequent(s),關聯規則分析,Transaction 項目列表, 每一列均為
2、單一購物籃中的項目名稱列表,以逗點或空格相隔,項目名稱必須是英文,關聯規則分析,規則X Y X和Y為物件的集合X稱為前項antecedents (lhs:left hand sides) Y稱為後項consequents (rhs:right hand sides)支援度support: X和Y同時出現的次數/所有交易數信賴度confidence: X和Y同時出現的次數/X出現的次數提昇lift: support/ (support(X) * (support(Y)Given X, the probability of buying Y increases規則範例:Milk, Diaper B
3、eer (s=0.4, c=0.67)Milk, Beer Diaper (s=0.4, c=1.0)Diaper, Beer Milk (s=0.4, c=0.67)Beer Milk, Diaper (s=0.4, c=0.67),資料是0或1二元檔,若您的購物籃資料是 0,1 二元檔,則直接當作輸入檔,需轉換成矩陣beer=as.matrix(beer),資料是0或1二元檔的程式碼,#Apriori beer.xlslibrary(xlsx)library(arules)beer=read.xlsx(d:stellaRbeer.xls,header=T,sheetIndex=1)beer
4、=as.matrix(beer)rule=apriori(beer,parameter=list(supp=0.2,conf=0.8,maxlen=5) #default 是0.1, 0.8, 10inspect(rule)summary(rule)inspect(head(sort(rule,by=support),10),apriori的執行結果,原始的關聯規則,排序後的關聯規則,資料是各項物品名稱,若購物籃資料是各項物品名稱,則以read.transactions指令輸入後,再轉換成交易檔beer2=as(beer,transactions),資料是物品名稱的程式碼,library(ar
5、ules)beer=read.transactions(d:stellaRbeer.txt,sep=,)beer2=as(beer,transactions)Inspect(beer2)rule=apriori(beer2,parameter=list(supp=0.2,conf=0.8,maxlen=5)inspect(head(sort(rule,by=support),10),apriori的執行結果,可依support, confidence或lift排序,資料關聯範例二,函數【apriori】檔案 shopping.txt786 records 15 fields,購物產品關聯分析,
6、shopping.txt的欄位計有15項,產品分為10個類別分別是Ready made、Frozen Food、Alcohol 、 Fresh Vegetables、 Milk、 Bakery goods 、 Fresh meat、 Toiletries、 Snacks、Tinned Goods,有買資料值為1,沒買則資料值為0沒用到的基本資料包括GENDER 、 AGE、 MARITAL、 CHILDREN、WORKING ( Currently employed?),關聯模型注意事項,建模時可以設定支援度、信賴度等建模的細節,當門檻值過高而無法生成模型時,使用者須適度調整門檻值 執行後產生
7、關聯規則的模型,可以查看詳細的規則內容。排序的規則有支援度(Support)、信賴度(Confidence) 、提昇(Lift) 等方式, 使用者可依需求選擇也可以產生自訂目標的關聯規則,Modeler 4個關聯規則的準則,R的support,前項支援度,名詞解釋 (第一個關聯規則為例),全部總共786筆資料買Milk和Frozen Food的人是85筆買Bakery goods的人是337筆買Milk和Frozen Food而且買Bakery goods的人是71筆買Milk和Frozen Food但不買Bakery goods的人是14筆後項(R的rhs) Bakery goods 前項(
8、R的lhs) Milk和Frozen Food實例 85,即符合前項的筆數,名詞解釋,支援度10.814 = 85/786,是指購買前項產品的客戶佔全部客戶的比例(R的support是指以下的規則支援度)信賴度 - 83.529 = 71/85,是指購買前項產品的客戶中也買後項產品的比例 規則支援%(即支援度x信賴度)9.033 = 10.814% x 83.529% 或= 71 / 786,指購買前項產品也買後項產品的客戶佔全部客戶的比例 提昇1.948 = (71/85)/ (337/786)或 = 83.529% / 42.875%,指購買後項產品佔購買前項產品的比例除以購買後項產品佔全
9、部客戶的比例,apriori的程式碼,library(arules)shopping=read.csv(d:stellaRshopping.txt, header=T)head(shopping)shopping=shopping,1:10shopping=na.exclude(shopping)shopping=as.matrix(shopping) rule=apriori(shopping,parameter=list(supp=0.09, conf=0.8,maxlen=5)inspect(head(sort(rule,by=support),10)inspect(head(sort(
10、rule,by=confidence),10),apriori的程式碼,產生4個關聯規則,目標為Alcohol的關聯規則,函數【apriori】檔案Titanic2201 records 4 fields,關聯規則探勘步驟,直接用資料框架變數或將購物籃資料轉成交易檔格式,或將0或1二元檔轉成矩陣以預設值進行初步探勘(supp=0.1,conf=0.8,maxlen=10)調整參數設定為我們想要看的面向(Survived與否)修剪多餘的規則關聯規則視覺化,轉檔和初步探勘的程式碼,#apriori Titanicdf=as.data.frame(Titanic) #32x5Titan=NULLfo
11、r (i in 1:4)Titan=cbind(Titan,rep(as.character(df,i),df$Freq)Titan=as.data.frame(Titan) #2201x4names(Titan)=names(df)1:4summary(Titan)library(arules)rule=apriori(Titan)inspect(rule),將內建資料轉成交易檔格式,以預設值進行初步探勘,產生27個規則,調整參數與移除重複規則,#refine and pruning rulesrule=apriori(Titan,parameter=list(minlen=2,supp=0
12、.005,conf=0.8),appearance=list(rhs=c(Survived=No,Survived=Yes),default=lhs)rulesort=sort(rule,by=lift)inspect(rulesort)subset.matrix=is.subset(rulesort,rulesort)redundant=colSums(subset.matrix) 1which(redundant)rulepruned=rulesort!redundantinspect(rulepruned),限定後項參數為Survived,移除重複規則,再調整前項後項參數的程式碼,rul
13、e2=apriori(Titan, control = list(verbose=F),parameter = list(minlen=3, supp=0.002, conf=0.2),appearance = list(default=none, rhs=c(Survived=Yes), lhs=c(Class=1st, Class=2nd, Class=3rd,Age=Child, Age=Adult)rule2.sorted= sort(rule2, by=confidence)inspect(rule2.sorted),再審視兒童的存活率和艙等,關聯規則視覺化,library(arul
14、esViz)#Heat map (熱圖)plot(rulepruned)#Balloon plot (氣球圖)plot(rulepruned,method=grouped) # Graph (網路圖)plot(rulepruned,method=graph,control =list(type=items)# Parallel coordinates plot (平行座標圖)plot(rulepruned, method = paracoord, control = list(reorder = TRUE),Heat map (熱圖),Balloon plot (氣球圖),Graph (網路圖
15、),平行座標圖,資料關聯範例四,函數【cspade】檔案 TelRepair.txt750 cases 5915 records 3 fields,序列分析,序列(Sequence)分析的重點在於資料中必須存在先後順序的關係(例如時間)序列分析類似於關聯規則,但還得考量時間的先後順序,也就是說著重時間的順序作資料關聯的分析,序列分析可以提供我們針對客戶客製化行銷的預測,掌握良機,當某位客戶買了某項產品後,就已經預告將來的某個時間點會再度買我們的附加產品或服務,維修案例檔案說明,檔案TelRepair.txt包括750個維修案例,共有 5915紀錄,3個欄位第1個欄位是ID,對應一份診斷修理報告
16、,第2個欄位紀錄著每個ID修理診斷的順序,第3個欄位紀錄每次修理診斷的動作每份診斷修理報告開始以代碼90表示(但只有727個案例是),成功完成修理以代碼210表示,若問題無法成功解決,則以代碼299表示練習失敗案例檔案FailTelRepair.txt,檔案格式(不需欄名),Modeler執行結果(成功率92%=690/750),重複修理( 22.133% = 166/750個id),序列分析的程式碼,# cspade TelRepairlibrary(arulesSequences)repair=read_baskets(d:stellaRTelRepair.txt,sep=t,info=c(sequenceID,eventID)arulesSeq=cspade(repair,parameter = list(supp=0.2),control = list(verbose=T),tmpdir=tempdir()summary(arulesSeq)as(arulesSeq,data.frame),R執行結果(成功率92%=690/750),重複修理( 22.133% = 166/750個id),練習:失敗案例 FailTelRepair.txt,