
用R語(yǔ)言進(jìn)行關(guān)聯(lián)分析
關(guān)聯(lián)是兩個(gè)或多個(gè)變量取值之間存在的一類(lèi)重要的可被發(fā)現(xiàn)的某種規(guī)律性。關(guān)聯(lián)分析目的是尋找給定數(shù)據(jù)記錄集中數(shù)據(jù)項(xiàng)之間隱藏的關(guān)聯(lián)關(guān)系,描述數(shù)據(jù)之間的密切度。
幾個(gè)基本概念
1. 項(xiàng)集
這是一個(gè)集合的概念,在一籃子商品中的一件消費(fèi)品即為一項(xiàng)(Item),則若干項(xiàng)的集合為項(xiàng)集,如{啤酒,尿布}構(gòu)成一個(gè)二元項(xiàng)集。
一般記為的形式,X為先決條件,Y為相應(yīng)的關(guān)聯(lián)結(jié)果,用于表示數(shù)據(jù)內(nèi)隱含的關(guān)聯(lián)性。如:,表示購(gòu)買(mǎi)了尿布的消費(fèi)者往往也會(huì)購(gòu)買(mǎi)啤酒。
關(guān)聯(lián)性強(qiáng)度如何,由三個(gè)概念——支持度、置信度、提升度來(lái)控制和評(píng)價(jià)。
例:有10000個(gè)消費(fèi)者購(gòu)買(mǎi)了商品,其中購(gòu)買(mǎi)尿布1000個(gè),購(gòu)買(mǎi)啤酒2000個(gè),購(gòu)買(mǎi)面包500個(gè),同時(shí)購(gòu)買(mǎi)尿布和面包800個(gè),同時(shí)購(gòu)買(mǎi)尿布和面包100個(gè)。
3. 支持度(Support)
支持度是指在所有項(xiàng)集中{X, Y}出現(xiàn)的可能性,即項(xiàng)集中同時(shí)含有X和Y的概率:
該指標(biāo)作為建立強(qiáng)關(guān)聯(lián)規(guī)則的第一個(gè)門(mén)檻,衡量了所考察關(guān)聯(lián)規(guī)則在“量”上的多少。通過(guò)設(shè)定最小閾值(minsup),剔除“出鏡率”較低的無(wú)意義規(guī)則,保留出現(xiàn)較為頻繁的項(xiàng)集所隱含的規(guī)則。
設(shè)定最小閾值為5%,由于{尿布,啤酒}的支持度為800/10000=8%,滿(mǎn)足基本輸了要求,成為頻繁項(xiàng)集,保留規(guī)則;而{尿布,面包}的支持度為100/10000=1%,被剔除。
4. 置信度(Confidence)
置信度表示在先決條件X發(fā)生的條件下,關(guān)聯(lián)結(jié)果Y發(fā)生的概率:
這是生成強(qiáng)關(guān)聯(lián)規(guī)則的第二個(gè)門(mén)檻,衡量了所考察的關(guān)聯(lián)規(guī)則在“質(zhì)”上的可靠性。相似的,我們需要對(duì)置信度設(shè)定最小閾值(mincon)來(lái)實(shí)現(xiàn)進(jìn)一步篩選。
具體的,當(dāng)設(shè)定置信度的最小閾值為70%時(shí),置信度為800/1000=80%,而的置信度為800/2000=40%,被剔除。
5. 提升度(lift)
提升度表示在含有X的條件下同時(shí)含有Y的可能性與沒(méi)有X這個(gè)條件下項(xiàng)集中含有Y的可能性之比:
該指標(biāo)與置信度同樣衡量規(guī)則的可靠性,可以看作是置信度的一種互補(bǔ)指標(biāo)。
R中Apriori算法
算法步驟:
1. 選出滿(mǎn)足支持度最小閾值的所有項(xiàng)集,即頻繁項(xiàng)集;
2. 從頻繁項(xiàng)集中找出滿(mǎn)足最小置信度的所有規(guī)則。
> library(arules) #加載arules包
> click_detail =read.transactions("click_detail.txt",format="basket",sep=",",cols=c(1)) #讀取txt文檔(文檔編碼為ANSI)
> rules <- apriori(click_detail, parameter =list(supp=0.01,conf=0.5,target="rules")) #調(diào)用apriori算法
> rules
set of419 rules
> inspect(rules[1:10]) #查看前十條規(guī)則
解釋
1) library(arules):加載程序包arules,當(dāng)然如果你前面沒(méi)有下載過(guò)這個(gè)包,就要先install.packages(arules)
2) click_detail =read.transactions("click_detail.txt",format="basket",sep=",",cols=c(1)):讀入數(shù)據(jù)
read.transactions(file, format =c("basket", "single"), sep = NULL,
cols = NULL, rm.duplicates =FALSE, encoding = "unknown")
file:文件名,對(duì)應(yīng)click_detail中的“click_detail.txt”
format:文件格式,可以有兩種,分別為“basket”,“single”,click_detail.txt中用的是basket。
basket: basket就是籃子,一個(gè)顧客買(mǎi)的東西都放到同一個(gè)籃子,所有顧客的transactions就是一個(gè)個(gè)籃子的組合結(jié)果。如下形式,每條交易都是獨(dú)立的。
文件形式:
item1,item2
item1
item2,item3
讀入后:
items
1 {item1,
item2}
2 {item1}
3 {item2,
item3}
single: single的意思,顧名思義,就是單獨(dú)的交易,簡(jiǎn)單說(shuō),交易記錄為:顧客1買(mǎi)了產(chǎn)品1, 顧客1買(mǎi)了產(chǎn)品2,顧客2買(mǎi)了產(chǎn)品3……(產(chǎn)品1,產(chǎn)品2,產(chǎn)品3中可以是單個(gè)產(chǎn)品,也可以是多個(gè)產(chǎn)品),如下形式:
trans1 item1
trans2 item1
trans2 item2
讀入后:
items transactionID
1 {item1} trans1
2 {item1,
item2} trans2
sep:文件中數(shù)據(jù)是怎么被分隔的,默認(rèn)為空格,click_detail里面用逗號(hào)分隔
cols:對(duì)basket, col=1,表示第一列是數(shù)據(jù)的transaction ids(交易號(hào)),如果col=NULL,則表示數(shù)據(jù)里面沒(méi)有交易號(hào)這一列;對(duì)single,col=c(1,2)表示第一列是transaction ids,第二列是item ids
rm.duplicates:是否移除重復(fù)項(xiàng),默認(rèn)為FALSE
encoding:寫(xiě)到這里研究了encoding是什么意思,發(fā)現(xiàn)前面txt可以不是”ANSI”類(lèi)型,如果TXT是“UTF-8”,寫(xiě)encoding=”UTF-8”,就OK了.
3) rules <- apriori(click_detail,parameter = list(supp=0.01,conf=0.5,target="rules")):apriori函數(shù)
apriori(data, parameter = NULL, appearance = NULL, control = NULL)
data:數(shù)據(jù)
parameter:設(shè)置參數(shù),默認(rèn)情況下parameter=list(supp=0.1,conf=0.8,maxlen=10,minlen=1,target=”rules”)
supp:支持度(support)
conf:置信度(confidence)
maxlen,minlen:每個(gè)項(xiàng)集所含項(xiàng)數(shù)的最大最小值
target:“rules”或“frequent itemsets”(輸出關(guān)聯(lián)規(guī)則/頻繁項(xiàng)集)
apperence:對(duì)先決條件X(lhs),關(guān)聯(lián)結(jié)果Y(rhs)中具體包含哪些項(xiàng)進(jìn)行限制,如:設(shè)置lhs=beer,將僅輸出lhs含有beer這一項(xiàng)的關(guān)聯(lián)規(guī)則。默認(rèn)情況下,所有項(xiàng)都將無(wú)限制出現(xiàn)。
control:控制函數(shù)性能,如可以設(shè)定對(duì)項(xiàng)集進(jìn)行升序sort=1或降序sort=-1排序,是否向使用者報(bào)告進(jìn)程(verbose=F/T)
補(bǔ)充
通過(guò)支持度控制:rules.sorted_sup = sort(rules, by=”support”)
通過(guò)置信度控制:rules.sorted_con = sort(rules, by=”confidence”)
通過(guò)提升度控制:rules.sorted_lift = sort(rules, by=”lift”)
Apriori算法
兩步法:
1. 頻繁項(xiàng)集的產(chǎn)生:找出所有滿(mǎn)足最小支持度閾值的項(xiàng)集,稱(chēng)為頻繁項(xiàng)集;
2. 規(guī)則的產(chǎn)生:對(duì)于每一個(gè)頻繁項(xiàng)集l,找出其中所有的非空子集;然后,對(duì)于每一個(gè)這樣的子集a,如果support(l)與support(a)的比值大于最小可信度,則存在規(guī)則a==>(l-a)。
頻繁項(xiàng)集產(chǎn)生所需要的計(jì)算開(kāi)銷(xiāo)遠(yuǎn)大于規(guī)則產(chǎn)生所需的計(jì)算開(kāi)銷(xiāo)
頻繁項(xiàng)集的產(chǎn)生
幾個(gè)概念:
1, 一個(gè)包含K個(gè)項(xiàng)的數(shù)據(jù)集,可能產(chǎn)生2^k個(gè)候選集
2,先驗(yàn)原理:如果一個(gè)項(xiàng)集是頻繁的,則它的所有子集也是頻繁的(理解了頻繁項(xiàng)集的意義,這句話(huà)很容易理解的);相反,如果一個(gè)項(xiàng)集是非頻繁的,則它所有子集也一定是非頻繁的。
3基于支持度(SUPPORT)度量的一個(gè)關(guān)鍵性質(zhì):一個(gè)項(xiàng)集的支持度不會(huì)超過(guò)它的子集的支持度(很好理解,支持度是共同發(fā)生的概率,假設(shè)項(xiàng)集{A,B,C},{A,B}是它的一個(gè)自己,A,B,C同時(shí)發(fā)生的概率肯定不會(huì)超過(guò)A,B同時(shí)發(fā)生的概率)。
上面這條規(guī)則就是Apriori中使用到的,如下圖,當(dāng)尋找頻繁項(xiàng)集時(shí),從上往下掃描,當(dāng)遇到一個(gè)項(xiàng)集是非頻繁項(xiàng)集(該項(xiàng)集支持度小于Minsup),那么它下面的項(xiàng)集肯定就是非頻繁項(xiàng)集,這一部分就剪枝掉了。
一個(gè)例子(百度到的一個(gè)PPT上的):
當(dāng)我在理解頻繁項(xiàng)集的意義時(shí),在R上簡(jiǎn)單的復(fù)現(xiàn)了這個(gè)例子,這里采用了eclat算法,跟apriori應(yīng)該差不多:
代碼:
item <- list(
c("bread","milk"),
c("bread","diaper","beer","eggs"),
c("milk","diaper","beer","coke"),
c("bread","milk","diaper","beer"),
c("bread","milk","diaper","coke")
)
names(item) <- paste("tr",c(1:5),sep = "")
item
trans <- as(item,"transactions") #將List轉(zhuǎn)為transactions型
rules = eclat(trans,parameter = list(supp = 0.6,
target ="frequent itemsets"),control = list(sort=1))
inspect(rules) #查看頻繁項(xiàng)集
運(yùn)行后結(jié)果:
>inspect(rules)
items support
1{beer,
diaper} 0.6
2{diaper,
milk} 0.6
3{bread,
diaper} 0.6
4{bread,
milk} 0.6
5{beer} 0.6
6{milk} 0.8
7{bread} 0.8
8{diaper} 0.8
以上就是該例子的所有頻繁項(xiàng)集,然后我發(fā)現(xiàn)少了{(lán)bread,milk,diaper}這個(gè)項(xiàng)集,回到例子一看,這個(gè)項(xiàng)集實(shí)際上只出現(xiàn)了兩次,所以是沒(méi)有這個(gè)項(xiàng)集的。
規(guī)則的產(chǎn)生
每個(gè)頻繁k項(xiàng)集能產(chǎn)生最多2k-2個(gè)關(guān)聯(lián)規(guī)則
將項(xiàng)集Y劃分成兩個(gè)非空的子集X和Y-X,使得X ->Y-X滿(mǎn)足置信度閾值
定理:如果規(guī)則X->Y-X不滿(mǎn)足置信度閾值,則X’->Y-X’的規(guī)則一定也不滿(mǎn)足置信度閾值,其中X’是X的子集
Apriori按下圖進(jìn)行逐層計(jì)算,當(dāng)發(fā)現(xiàn)一個(gè)不滿(mǎn)足置信度的項(xiàng)集后,該項(xiàng)集所有子集的規(guī)則都可以剪枝掉了。
數(shù)據(jù)分析咨詢(xún)請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
LSTM 模型輸入長(zhǎng)度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長(zhǎng)序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報(bào)考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計(jì)的實(shí)用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶(hù) ...
2025-07-11尊敬的考生: 您好! 我們誠(chéng)摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實(shí)施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價(jià)值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡(jiǎn)稱(chēng) BI)深度融合的時(shí)代,BI ...
2025-07-10SQL 在預(yù)測(cè)分析中的應(yīng)用:從數(shù)據(jù)查詢(xún)到趨勢(shì)預(yù)判? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代,預(yù)測(cè)分析作為挖掘數(shù)據(jù)潛在價(jià)值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢(xún)結(jié)束后:分析師的收尾工作與價(jià)值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢(xún)結(jié)束)并非工作的終點(diǎn),而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報(bào)考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭(zhēng)搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢(shì)性檢驗(yàn):捕捉數(shù)據(jù)背后的時(shí)間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢(shì)性檢驗(yàn)如同一位耐心的偵探,專(zhuān)注于從單 ...
2025-07-09year_month數(shù)據(jù)類(lèi)型:時(shí)間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時(shí)間是最不可或缺的維度之一,而year_month數(shù)據(jù)類(lèi)型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實(shí)戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗(yàn):數(shù)據(jù)趨勢(shì)與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢(shì)變化以及識(shí)別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國(guó)內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對(duì)策略? 長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨(dú)特的門(mén)控機(jī)制,在 ...
2025-07-07統(tǒng)計(jì)學(xué)方法在市場(chǎng)調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場(chǎng)調(diào)研是企業(yè)洞察市場(chǎng)動(dòng)態(tài)、了解消費(fèi)者需求的重要途徑,而統(tǒng)計(jì)學(xué)方法則是市場(chǎng)調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書(shū)考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動(dòng)力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專(zhuān)業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動(dòng)力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開(kāi)啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價(jià)值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03