關聯規則的挖掘與應用——Apriori和CBA算法

2020-12-06 金融科技實戰

文|光大科技大數據部 魏樂 盧格潤

1 關聯規則1.1 關聯規則基本概念1.2 Apriori算法基本思路2 關聯分類2.1 CBA關聯分類算法思路2.2 CBA算法實現總結關聯規則(Association Rules)由Agrawal等人在1993年的文獻中提及,並逐漸流行起來,主要用於發掘大量數據中項的相關關係。這種利用頻繁項集挖掘潛在關係的技術對於貨架擺放、購物推薦、捆綁銷售和新聞推薦等都很有應用價值。但在實際應用中,人們可能更願意關注由關聯規則理論挖掘出的頻繁項集,常將其用作基礎數據處理,再集成其他算法從而解決實際問題,比如說數據挖掘中常見的分類問題。關聯分類(Associative Classification)是基於關聯規則進行分類的一種集成挖掘算法,包括CMAR(Classfication based on Multiple Class - Association Rules)算法、CAEP(通過聚集模式顯露分類)、CBA(Classification Based on Associations)關聯分類算法等。其中CBA算法因為其簡單、易實現、準確率較高,被廣泛應用於各個領域。

1 關聯規則

1.1 關聯規則基本概念[1]

根據關聯規則的定義:

關聯規則是形如 的蘊涵式,其中, 和分別稱為關聯規則的前件(antecedent或left-hand-side, LHS)和後件(consequent或right-hand-side, RHS) 。其中,關聯規則 ,存在支持度和信任度。

可以看出,所謂關聯規則是和之間存在的某種關係。為了明確這種關係,進一步引入如下概念:

設 ={,,...,}是所有項目的集合,為數據事務庫,其中每個事務T是項的集合,滿足。每個事務具有唯一標識符,稱為TID。設A是由項目構成的集合,即項集。事務T包含項集A。如果項集A中包含k個項目,則稱其為k項集

項集就是項的集合。例如啤酒和尿布組成一個集合{啤酒、尿布},其中啤酒和尿布為項,{啤酒、尿布}為項集,而且是2項集。

項集中的項X、Y同時發生的概率稱之為關聯規則的支持度

項集中項X發生的情況下,則Y發生的概率為關聯規則的置信度

回到 的蘊涵式,,,如果事務資料庫中由的事務包含,則稱關聯規則 的支持度為,關聯規則的信任度為 .舉例來說:

、 支持度和置信度為:>> (50%,100%); >> (50%,50%)給定最小支持度閾值minSup和最小置信度閾值minConf。如果項集的支持度大於等於minSup,則稱其為頻繁項集。同時,項集的置信度大於等於minConf,則為強關聯規則假設本例中最小支持度閾值minSup為,最小置信度閾值minConf為。可以看到上例中,{ }是頻繁項集,但是只有 >> 為強關聯規則。

1.2 Apriori算法基本思路

關聯規則的挖掘可以分為兩步,第一步找到頻繁項集,第二步從頻繁項集中再找出滿足最小置信度的強關聯規則。整體來看,第二步比較簡單,主要算力都耗費在第一步上,如果採用統計方法,需要將所有K項集統計一遍,費時耗力。Agrawal等人於1994年發表的Apriori算法,利用了頻繁項集的先驗知識來壓縮搜索空間,成為較為有效和有影響力的經典算法之一。

頻繁項集反單調性:頻繁項集的所有非空子集都是頻繁的。即,非頻繁項集的超集一定是非頻繁的。

利用該性質,可以先對項集進行剪枝,這樣對於非頻繁項集的超級就都不用計算其支持度,減少了計算量。所以利用Apriori算法計算頻繁項集可以分為兩步:

連接步:將 和 自連接,產生候選k項集。剪枝步: 是 的超集, 中項集可以是也可以不是頻繁的,根據反單調性對 進行剪枝,得到包含所有頻繁k項集的 。為了更好的說明以上步驟,可以參看如下示例:

給定最小支持度閾值minSup為,候選項集 中 支持度只有20%,所以剪除,得到頻繁1項集 。對 做自連接,產生候選2項集 。繼續進行迭代,分別得到頻繁2項集 和候選3項集 , 不滿足最小支持度閾值剪除。則得到的最終結果為頻繁1項集 和頻繁2項集 。

2 關聯分類

關聯分類是分類數據挖掘技術中的重要分支,分類的目的是根據已有數據集通過學習找到一個目標函數,該函數將屬性集映射到目標類集。這樣對於新進樣本,就可以根據其的特徵,預測其所屬類集。

2.1 CBA關聯分類算法思路[2]

CBA算法全稱是Classification Based on Associations,在1998年由Bing Liu等提出,是基於關聯規則進行分類的算法。這一算法首次將關聯規則用於分類,很多之後的分類算法都將其作為baseline。近年來,對CBA算法的加強改進提高了其效率,使得CBA算法能夠更廣泛地運用到實際業務場景中。

CBA算法引入了一個概念稱為類別關聯規則(CAR),這一規則在原來 的基礎上給蘊含式的後件(RHS)添加了限制條件,限制每個規則的後件只包含一個項以對應一個分類標籤,其中關聯規則的挖掘,使用了類Apriori算法。

在挖掘CARs之前,需要對特徵做離散化,這樣可將每一行數據轉化為事務記錄的形式,以鳶尾花數據集為例:

其中

{, , ,,}

為一條事務記錄。

有了這樣的事務庫,接下來便可按照如下步驟進行分類:

通過Apriori算法挖掘CARs;對所得到的CARs進行剪枝和排序;根據第一條能匹配上的類別規則獲得對應分類Apriori所挖掘出來的所有CARs並不能直接使用,因為即使是在很小的數據集上,CARs的總量依舊可能很大。除此以外,可能存在相衝突的關聯規則以及沒有默認規則也會給分類帶來困難。

為了應對這些問題,CBA採用了如下排序規則和默認策略:

置信度更大的規則優先級更高;置信度一樣,支持度更大的規則優先級更高;置信度和支持度都一樣,先產生的規則優先級更高(根據Apriori算法,前件包含更少項的規則會更早產生,因此優先級更高);對於沒有被已有規則包括在內事務記錄,把其中佔比最大的類別標籤作為後件,空集作為前件,形成默認的類別關聯規則。2.2 CBA算法實現

目前,CBA可以通過3個R算法包實現:arc[3];arulesCBA[4];rCBA[5]。

其中,arc為純R實現的算法包,arulesCBA和rCBA則分別結合了C和JAVA實現,這也使得arc的運行速度會慢於其餘兩個,不能承載過大的數據量;在特徵離散化上,arc使用了最小描述長度準則(MDLP)進行離散化處理,arulesCBA可以選擇包括MDLP、Chi2在內的多種離散化方法,rCBA則不包括內建離散化處理;對於置信度和支持度的閾值選擇上,arc和rCBA支持自動調參,而arulesCBA不支持。除此以外,rCBA支持FP-growth代替Apriori算法進行關聯規則挖掘。

這裡以arc為例介紹如何使用CBA算法進行分類:

使用鳶尾花數據集,分為80%訓練集和20%測試集data("iris")set.seed(123)iris <- iris[sample(seq(nrow(iris))), ]iris_train <- iris[1:(nrow(iris)*.8), ]iris_test <- iris[-(1:(nrow(iris)*.8)), ]載入arc包創建分類器。cba()可以自動採用最小描述長度準則對特徵進行離散化處理。cba()同樣支持自動閾值調節,根據目標規則數調節置信度和支持度的取值。library("arc")classifier <- arc::cba(iris_train, "Species")inspect(classifier@rules) lhs rhs support confidence coverage lift count lhs_length[1] {Petal.Length=[-Inf;2.45]} => {Species=setosa} 0.333333331.00000000.333333333.00000040.0001.000[2] {Sepal.Length=(5.55; Inf], Petal.Length=(2.45;4.75]} => {Species=versicolor} 0.183333331.00000000.183333333.42857122.0002.000[3] {Sepal.Width=(3.25; Inf], Petal.Width=(1.75; Inf]} => {Species=virginica} 0.058333331.00000000.058333332.6666677.0002.000[4] {Petal.Width=(1.75; Inf]} => {Species=virginica} 0.333333330.97560980.341666672.60162640.0001.000[5] {Petal.Length=(2.45;4.75]} => {Species=versicolor} 0.258333330.96875000.266666673.32142931.0001.000[6] {} => {Species=virginica} 0.375000000.37500001.000000000.0000000.3750.375使用分類器進行預測pred<-predict(classifier,iris_test)table(pred,iris_test$Species)pred setosa versicolor virginica setosa 1000 versicolor 0130 virginica 0253 總結

本文主要介紹了關聯規則以及基於關聯規則的一種關聯分類算法CBA(Classification base of Association)。

關聯規則是在支持度-置信度框架下的統計算法。Apriori算法主要利用頻繁項集反單調性對統計過程進行簡化,提高了運算效率。CBA算法是使用了類Apriori關聯規則的分類算法,其引入了類別關聯規則(CAR)的概念,這一規則在原的基礎上給蘊含式的後件添加了限制條件以對應分類標籤。參考資料

[1] 沈斌.關聯規則技術研究:浙江大學出版社,2012年: http://e.dangdang.com/products/1900292695.html

[2] Integrating Classification and Association Rule Mining: https://www.aaai.org/Papers/KDD/1998/KDD98-012.pdf

[3] arc: Association Rule Classification: https://cran.r-project.org/web/packages/arc/

[4] arulesCBA: Classification Based on Association Rules: https://cran.r-project.org/web/packages/arulesCBA/

[5] rCBA: CBA Classifier: https://cran.r-project.org/web/packages/rCBA/index.html

我們是光大科技公司的追光算法實驗室團隊,將不定期推出數據挖掘和算法相關的數據科學原創文章。團隊定位打造基於知識驅動的機器學習算法實驗室,由實踐經驗豐富的數據分析挖掘工程師和專注算法的數據科學家精心準備相關作品,志在分享結合實際業務的理論應用和算法創新,以及其中的心得體會。

相關焦點

  • 數據挖掘之關聯規則算法(Apriori)
    1 關聯規則挖掘定義大多數關聯規則挖掘算法通常採用的一種策略是,將關聯規則挖掘任務分解為如下兩個主要的子任務:頻繁項集產生(Frequent Itemset Generation關聯分析的目標發現頻繁項集;由頻繁項集產生強關聯規則,這些規則必須大於或等於最小支持度和最小置信度。
  • 十大經典數據挖掘算法—Apriori
    打開APP 十大經典數據挖掘算法—Apriori 發表於 2018-02-04 09:37:56 關聯分析 關聯分析是一類非常有用的數據挖掘方法,能從數據中挖掘出潛在的關聯關係。
  • 人工智慧之Apriori算法
    今天我們重點探討一下Apriori算法。^_^Apriori算法是經典的挖掘頻繁項集和關聯規則的數據挖掘算法,也是十大經典機器學習算法之一。Apriori算法是一種最有影響的挖掘布爾關聯規則頻繁項集的算法。其核心是基於兩階段頻集思想的遞推算法。該關聯規則在分類上屬於單維、單層、布爾關聯規則。
  • 從五個方面讓你了解人工智慧算法中的Apriori
    從五個方面讓你了解人工智慧算法中的Apriori 工程師振邦 發表於 2018-07-05 14:25:00 Apriori算法是經典的挖掘頻繁項集和關聯規則的數據挖掘算法
  • 吳信東:數據挖掘算法的經典與現代
    中科院計算所研究員沈華偉幾位特邀專家帶領了大家重溫經典,解讀他們心目中的經典機器學習與數據挖掘算法,並與大家分享了這些算法的起源、應用與影響。比較經典的算法主要有兩個,一個是K-Means,於1967年提出,另一個是BIRCH,全稱是利用層次方法的平衡迭代規約和聚類,是資料庫領域的研究者於1994年提出,其效率比K-Means更高。第三個領域是「關聯分析」,這類主題在網際網路和日常生活中廣泛存在,經典的案例是「啤酒與尿片」的故事。
  • 電子商務大數據挖掘常用算法
    運用關聯規則想要達到的主要目的就是找出每一個數據信息的內在關係,關聯規則是用在同類事件中不同項目的關聯性。在數據挖掘中,關聯分析是其主要的功能之一,它可以在市場營銷的各個領域進行應用。其中,對消費者的購買行為進行關聯規則方面的分析是關聯分析的主要應用之一,其目的是為了對消費者購買商品時的行為模式進行探詢。
  • 數據挖掘技術在中醫證候學中的應用
    使用數據挖掘技術中的關聯規則和分類算法對早中期慢性腎衰竭的證候和症狀進行分析:首先對採集的症狀和證候信息進行數字特徵化處理;然後對證候之間的關聯關係進行研究,獲得了高支持度的四組證候組合;最後分類和預測症狀和證候之間的辯證關係,得到了症狀的規則集,並計算出其中的重要症狀。實驗證明,分類結果對早中期慢性腎衰竭的症狀與證候的辯證論治具有重要的臨床指導意義。
  • 數據科學家應該知道的頂級機器學習算法
    示例問題是分類和回歸。示例算法包括邏輯回歸和反向傳播神經網絡。無監督學習在此無監督機器學習中,輸入數據未標記並且沒有已知結果。我們必須通過推導輸入數據中存在的結構來準備模型。這可能是提取一般規則。可以通過數學過程來減少冗餘。示例問題包括聚類,降維和關聯規則學習。示例算法包括Apriori算法和k-Means。
  • 二十、數據挖掘之Eclat算法介紹
    Eclat算法簡介數據格式Apriori算法和FpGrowth都是從項集格式{TID: itemset}的事物集中挖掘頻繁模式,其中TID是事物標誌符,而itemset是事物TID中購買的商品。這種數據格式成為水平數據格式。
  • 數據挖掘常用的算法
    導讀 當前,大數據的理論和應用正在國民經濟和生活的各個領域如火如荼的進行。
  • 機器學習初學者必須知道的十大算法
    可以使用特徵提取方法和特徵選擇方法來完成維度降低。特徵選擇選擇原始變量的一個子集。特徵提取執行從高維空間到低維空間的數據轉換。例如:PCA算法是一種特徵提取方法。Apriori,K-means,PCA是無監督學習的例子。
  • 機器學習-頻繁模式挖掘DHP算法詳解
    前言數據挖掘領域的頻繁模式中,Apriori算法算是經典,然而該算法有如下的問題:對資料庫多次掃描候選集數量龐大為計算候選集支持度所需負載較重所以有了很多改進算法,DHP是其中一個基於散列優化的算法,主要用於縮小Ck的項集個數原理DHP算法生效於Apriori算法的剪枝步過程中。
  • 史上最全十大機器學習算法,入門必看!
    大部分都是數據挖掘的高級從業人員,ACM KDD創新獎、IEEE ICDM研究貢獻獎的獲獎者,KDD-06,ICDM'06和SDM'06的計劃委員會成員;和ICDM'06的145名與會者。而本文中top10的算法更適用於初學者,主要是原文作者在孟買大學學習「數據倉庫與挖掘」的課程中學習到的。
  • 什麼叫數據挖掘_數據挖掘技術解析
    數據挖掘是一個多學科交叉領域,涉及神經網絡、遺傳算法、回歸、統計分析、機器學習、聚類分析、特異群分析等,開發挖掘大型海量和多維數據集的算法和系統,開發合適的隱私和安全模式,提高數據系統的使用簡便性。   數據挖掘與傳統意義上的統計學不同。統計學推斷是假設驅動的,即形成假設並在數據基礎上驗證他;數據挖掘是數據驅動的,即自動地從數據中提取模式和假設。
  • 深度解析數據挖掘在推薦系統中的應用
    實際上,在構建推薦系統的過程中會用到大量的數據挖掘算法。首先,來說下數據挖掘中的聚類分析。推薦系統裡用得最多的協同過濾算法,實際上就是數據挖掘裡的聚類算法。協同過濾的原理分為兩種,一種是基於用戶的協同過濾,就是找到與用戶A興趣相識的用戶B,然後將用戶B看過的物品推薦給用戶A。
  • 流行的機器學習算法總結,幫助你開啟機器學習算法學習之旅
    這些算法的工作方式是,為它們提供第一批數據,並且隨著時間的流逝和算法的準確性的提高,額外的數據也被引入到算法中。定期將算法應用於新數據和新經驗的過程可提高機器學習的整體效率。機器學習算法對於與分類,預測建模和數據分析相關的各種任務至關重要。「機器學習方面的突破將價值十個微軟。」
  • 超全,110+數據挖掘面試題整理(附答案)
    頻繁模式挖掘 B. 分類和預測 C. 數據預處理 D. 數據流挖掘3.當不知道數據所帶標籤時,可以使用哪種技術促使帶同類標籤的數據與帶其他標籤的數據相分離?(B) A. 分類 B. 聚類 C. 關聯分析 D. 隱馬爾可夫鏈4.什麼是KDD? (A) A. 數據挖掘與知識發現 B. 領域知識發現 C.
  • 數據挖掘(DataMining)概述
    1.數據挖掘的定義數據挖掘:指從大量的數據中通過算法搜索隱藏於其中信息的過程。數據挖掘在面向用戶的網際網路產品中發揮著及其重要的作用。數據挖掘確定挖掘目標:確定要發現的知識類型;選擇算法:根據確定的目標選擇合適的數據挖掘算法數據挖掘:運用所選算法,提取相關知識並以一定的方式表示。
  • 一篇文章讓你知道什麼是大數據挖掘技術
    數據準備:數據準備包括:選擇數據–在大型資料庫和數據倉庫目標中 提取數據挖掘的目標數據集;數據預處理–進行數據再加工,包括檢查數據的完整性及數據的一致性、去噪聲,填補丟失的域,刪除無效數據等。  數據挖掘:根據數據功能的類型和和數據的特點選擇相應的算法,在淨化和轉換過的數據集上進行數據挖掘。
  • 機器學習算法集錦:從貝葉斯到深度學習及各自優缺點
    選自static.coggle.it機器之心編譯在我們日常生活中所用到的推薦系統、智能圖片美化應用和聊天機器人等應用中,各種各樣的機器學習和數據處理算法正盡職盡責地發揮著自己的功效。本文篩選並簡單介紹了一些最常見算法類別,還為每一個類別列出了一些實際的算法並簡單介紹了它們的優缺點。