關聯規則挖掘是一種識別不一樣項目之間潛在關係的技術。以超級市場爲例,客戶能夠在這裏購買各類商品。一般,客戶購買的商品有一種模式。例如,有嬰兒的母親購買嬰兒產品,如牛奶和尿布。少女能夠購買化妝品,而單身漢能夠購買啤酒和薯條等。總之,交易涉及一種模式。若是能夠識別在不一樣交易中購買的物品之間的關係,則能夠產生更多的利潤。git
例如,若是項目A和項目B的購買頻率更高,則能夠採起幾個步驟來增長利潤。例如:github
識別產品之間的關聯的過程稱爲關聯規則挖掘。算法
已經開發出不一樣的統計算法來實現關聯規則挖掘,而Apriori就是這樣一種算法。在本文中,咱們將研究Apriori算法背後的理論,稍後將在Python中實現Apriori算法。ide
先驗算法理論函數
支持度spa
支持是指商品的默認受歡迎程度,能夠經過查找包含特定商品的交易數量除以交易總數來計算。假設咱們想找到對項目B的支持。能夠將其計算爲:3d
Support(B) = (Transactions containing (B))/(Total Transactions)
code
例如,若是在1000個事務中,有100個事務包含Ketchup,則對項目Ketchup的支持能夠計算爲:blog
Support(Ketchup) = (Transactions containingKetchup)/(Total Transactions) Support(Ketchup) = 100/1000 = 10%
事務
置信度
置信度是指若是購買了商品A,也購買了商品B的可能性。能夠經過找到一塊兒購買A和B的交易數量除以購買A的交易總數來計算。從數學上講,它能夠表示爲:
Confidence(A→B) = (Transactions containing both (AandB))/(Transactions containing A)
回到咱們的問題,咱們有50筆交易,漢堡和番茄醬是一塊兒購買的。在150筆交易中,會購買漢堡。而後咱們能夠發現購買漢堡時購買番茄醬的可能性能夠表示爲Burger-> Ketchup的置信度,而且能夠用數學公式寫成:
Confidence(Burger→Ketchup) = (Transactions containing both (BurgerandKetchup))/(Transactions containing A) Confidence(Burger→Ketchup) =50/150=33.3%
提高度
Lift(A -> B)
指當出售A時B的出售比例的增長。提高(A –> B)能夠經過除Confidence(A -> B)
以來計算Support(B)
。從數學上講,它能夠表示爲:
Lift(A→B) = (Confidence (A→B))/(Support (B))
回到咱們的漢堡和番茄醬問題,Lift(Burger -> Ketchup)
能夠計算爲:
Lift(Burger→Ketchup) = (Confidence (Burger→Ketchup))/(Support (Ketchup)) Lift(Burger→Ketchup) = 33.3/10 = 3.33
Lift基本上告訴咱們,一塊兒購買漢堡和番茄醬的可能性是僅購買番茄醬的可能性的3.33倍。
對於大量數據,成千上萬的交易中可能有數百個項目。Apriori算法嘗試爲每種可能的項目組合提取規則。例如,能夠爲項目1和項目2,項目1和項目3,項目1和項目4,而後是項目2和項目3,項目2和項目4,而後是項目1,項目2和項目3的組合計算提高。項目3;相似地,項目1,項目2和項目4,依此類推。
從理論上講,如今是時候看看Apriori算法了。在本節中,咱們將使用Apriori算法查找規則,這些規則描述了在法國零售商店一週進行7500次交易的不一樣產品之間的關聯。
另外一個有趣的一點是,咱們不須要編寫腳原本爲全部可能的項目組合計算支撐度,置信度和提高度。咱們將使用一個現成的庫,其中全部代碼都已實現。
我指的是apyori庫,能夠在這裏找到源。我建議您在繼續以前,在Python庫的默認路徑中下載並安裝該庫。
注意:本文中的全部腳本均已使用Spyder IDE for Python 執行。
請按照如下步驟在Python中實現Apriori算法:
導入庫
與往常同樣,第一步是導入所需的庫。
導入數據集
如今,咱們導入數據集執行如下腳本:
store_data = pd.read_csv('D:\\Datasets\\store_data.csv')
讓咱們調用該head()
函數以查看數據集:
store_data.head()
上面的屏幕快照中顯示了數據集的摘要。若是仔細查看數據,咱們能夠看到標題其實是第一個事務。每行對應一個交易,每列對應於在該特定交易中購買的商品。在NaN
告訴咱們,列所表明的項目在具體的交易沒有購買。
在此數據集中沒有標題行。 以下所示:
store_data = pd.read_csv('D:\\Datasets\\store_data.csv', header=None)
如今執行head()
函數:
store_data.head()
如今,咱們將使用Apriori算法來找出哪些商品一般一塊兒出售,以便商店全部者能夠採起行動將相關商品放在一塊兒或一塊兒作廣告 。
數據處理
咱們將要使用的Apriori庫要求咱們的數據集採用列表列表的形式,其中整個數據集是一個大列表,而數據集中的每一個事務都是外部大列表中的一個內部列表。
應用
下一步是將Apriori算法應用於數據集。爲此,咱們可使用apriori
從apyori庫導入的類。
在第二行中,咱們將apriori
類找到的規則轉換爲,list
由於這樣更容易查看結果。
查看結果
首先讓咱們找到apriori
該類挖掘的規則總數。執行如下腳本:上面的腳本應返回48。每一個項目對應一個規則。
讓咱們打印association_rules
列表中的第一項以查看第一條規則。執行如下腳本:輸出應以下所示:
RelationRecord(items=frozenset({'light cream','chicken'}), support=0.004532728969470737, ordered_statistics[OrderedStatistic(items_base=frozenset({'light cream'}), items_add=frozenset({'chicken'}), confidence=0.29059829059829057, lift=4.84395061728395)])
列表中的第一項是包含三項的列表自己。列表的第一項顯示規則中的雜貨項目。
例如,從第一項開始,咱們能夠看到淡奶油和雞肉一般一塊兒購買。這是有道理的,由於購買淡奶油的人對本身吃的東西很謹慎,所以他們更有可能購買雞肉即白肉而不是紅肉即牛肉。或這可能意味着淡奶油一般用於雞肉食譜中。
第一條規則的支持值爲0.0045。該數字是經過將含淡奶油的交易次數除以交易總數得出的。該規則的置信度爲0.2905,這代表在全部包含輕奶油的交易中,29.05%的交易也包含雞肉。最終,提高4.84告訴咱們,與默認銷售雞肉的可能性相比,購買淡奶油的顧客購買雞肉的可能性高4.84倍。
如下腳本以更清晰的方式顯示每一個規則的規則,支撐,置信度和提高:
若是執行上述腳本,您將看到apriori
該類返回的全部規則。apriori
該類返回的前四個規則以下所示:
Rule: light cream -> chickenSupport: 0.004532728969470737Confidence: 0.29059829059829057Lift: 4.84395061728395=====================================Rule: mushroom cream sauce -> escalopeSupport: 0.005732568990801126Confidence: 0.3006993006993007Lift: 3.790832696715049=====================================Rule: escalope -> pastaSupport: 0.005865884548726837Confidence: 0.3728813559322034Lift: 4.700811850163794=====================================Rule: ground beef -> herb & pepperSupport: 0.015997866951073192Confidence: 0.3234501347708895Lift: 3.2919938411349285=====================================
咱們已經討論了第一條規則。如今讓咱們討論第二條規則。第二條規則指出,常常購買蘑菇奶油醬和無骨牛排。蘑菇奶油醬的支持量是0.0057。
關聯規則挖掘算法(例如Apriori)對於查找數據項之間的簡單關聯很是有用。它們易於實現而且具備很高的解釋能力。