3.資料關聯 Association 關聯範例一:關聯規則基本概念 關聯範例二:購物產品關聯分析 關聯範例三:鐵達尼號關聯分析 關聯範例四:維修案例的序列分析 4 2 3 1 關聯範例三:鐵達尼號關聯分析
函數【apriori】檔案 beer.xls 5 records 6 fields 資料關聯範例一 函數【apriori】檔案 beer.xls 5 records 6 fields
關聯法則基本概念 在資料探勘的領域之中,關聯性法則(association rule)是最常被使用的方法。關聯性法則在於找出資料庫中的資料間彼此的相關聯性。 在關聯性法則之使用中,Apriori是最為著名且廣泛運用的演算法。最早是由Agrawal & Srikant 等兩位學者於1994年首先提出。 if前項antecedent(s) then後項consequent(s)
關聯規則分析 Transaction 項目列表, 每一列均為單一購物籃中的項目名稱列表,以逗點或空格相隔,項目名稱必須是英文 TID Items 1 Bread, Milk 2 Bread, Diaper, Beer, Eggs 3 Milk, Diaper, Beer, Coke 4 Bread, Milk, Diaper, Beer 5 Bread, Milk, Diaper, Coke
關聯規則分析 規則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} {Beer} (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.xls library(xlsx) library(arules) beer=read.xlsx("d:\\stella\\R\\beer.xls",header=T,sheetIndex=1) beer=as.matrix(beer) rule=apriori(beer,parameter=list(supp=0.2,conf=0.8,maxlen=5)) #default 是0.1, 0.8, 10 inspect(rule) summary(rule) inspect(head(sort(rule,by="support"),10))
apriori的執行結果
原始的關聯規則
排序後的關聯規則
資料是各項物品名稱 若購物籃資料是各項物品名稱,則以read.transactions指令輸入後,再轉換成交易檔beer2=as(beer,"transactions")
資料是物品名稱的程式碼 library(arules) beer=read.transactions("d:\\stella\\R\\beer.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.txt 786 records 15 fields 資料關聯範例二 函數【apriori】檔案 shopping.txt 786 records 15 fields
購物產品關聯分析 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?)
關聯模型注意事項 建模時可以設定支援度、信賴度等建模的細節,當門檻值過高而無法生成模型時,使用者須適度調整門檻值 執行後產生關聯規則的模型,可以查看詳細的規則內容。排序的規則有支援度(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 前項(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%,指購買後項產品佔購買前項產品的比例除以購買後項產品佔全部客戶的比例
apriori的程式碼 library(arules) shopping=read.csv("d:\\stella\\R\\shopping.txt", header=T) head(shopping) shopping=shopping[,1:10] shopping=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(rule,by="confidence"),10))
apriori的程式碼
產生4個關聯規則
目標為Alcohol的關聯規則
函數【apriori】檔案Titanic 2201 records 4 fields 資料關聯範例三 函數【apriori】檔案Titanic 2201 records 4 fields
關聯規則探勘步驟 直接用資料框架變數或將購物籃資料轉成交易檔格式,或將0或1二元檔轉成矩陣 以預設值進行初步探勘(supp=0.1,conf=0.8,maxlen=10) 調整參數設定為我們想要看的面向(Survived與否) 修剪多餘的規則 關聯規則視覺化
轉檔和初步探勘的程式碼 #apriori Titanic df=as.data.frame(Titanic) #32x5 Titan=NULL for (i in 1:4) Titan=cbind(Titan,rep(as.character(df[,i]),df$Freq)) Titan=as.data.frame(Titan) #2201x4 names(Titan)=names(df)[1:4] summary(Titan) library(arules) rule=apriori(Titan) inspect(rule)
將內建資料轉成交易檔格式
以預設值進行初步探勘
產生27個規則
調整參數與移除重複規則 #refine and pruning rules rule=apriori(Titan,parameter=list(minlen=2,supp=0.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) > 1 which(redundant) rulepruned=rulesort[!redundant] inspect(rulepruned)
限定後項參數為Survived
移除重複規則
再調整前項後項參數的程式碼 rule2=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(arulesViz) #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 (網路圖)
平行座標圖
函數【cspade】檔案 TelRepair.txt 750 cases 5915 records 3 fields 資料關聯範例四 函數【cspade】檔案 TelRepair.txt 750 cases 5915 records 3 fields
序列分析 序列(Sequence)分析的重點在於資料中必須存在先後順序的關係(例如時間) 序列分析類似於關聯規則,但還得考量時間的先後順序,也就是說著重時間的順序作資料關聯的分析, 序列分析可以提供我們針對客戶客製化行銷的預測,掌握良機,當某位客戶買了某項產品後,就已經預告將來的某個時間點會再度買我們的附加產品或服務
維修案例檔案說明 檔案TelRepair.txt包括750個維修案例,共有 5915紀錄,3個欄位 第1個欄位是ID,對應一份診斷修理報告,第2個欄位紀錄著每個ID修理診斷的順序,第3個欄位紀錄每次修理診斷的動作 每份診斷修理報告開始以代碼90表示(但只有727個案例是),成功完成修理以代碼210表示,若問題無法成功解決,則以代碼299表示 練習失敗案例檔案FailTelRepair.txt
檔案格式(不需欄名)
Modeler執行結果(成功率92%=690/750)
重複修理( 22.133% = 166/750個id)
序列分析的程式碼 # cspade TelRepair library("arulesSequences") repair=read_baskets("d:\\stella\\R\\TelRepair.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