關聯規則與Apriori算法

原文鏈接:https://www.kdnuggets.com/2016/04/association-rules-apriori-algorithm-tutorial.html/2

翻譯自:Association Rules and the Apriori Algorithm: A Tutorial

當我們去商店購物時,我們通常有一個標準的購物清單,每個購物的人都有一個獨特的清單,取決於他們的需求和喜好,家庭主婦可能會爲家庭晚餐購買健康的食材,而單身漢可能會購買啤酒和薯條。瞭解這些購物模式有助於通過多種方式提高銷售額,如果有一對物品,X和Y經常被購買:

  • X和Y都可以放在同一個架子上,這樣一個物品的買家會被提示購買另一個。
  • 促銷折扣只適用於兩個項目中的一個。
  • 對於X的廣告可以針對購買Y的買家投放。
  • X和Y可以組合成一個新產品(比如套餐),比如X的套餐中包含有Y。

雖然我們可能知道某些物品經常會一起購買,但問題是,我們如何去發現這些關聯關係?(很典型的就是啤酒和尿布的問題)除了增加銷售利潤外,關聯規則還可以用於其他領域。例如,在醫學診斷中,瞭解哪些症狀容易並存,有助於提高患者的護理水平和藥物處方。

關聯規則定義

關聯規則分析是一種揭示項商品之間如何相互關聯的技術,有三個常用的指數來衡量關聯關係。

指數一:支持度(Support)

支持度表示一個項集的流行程度,用一個項集出現的事務的比例來衡量。在下面的表1中,apple的支持率是8箇中的4個,即50%。項集還可以包含多個項,例如,蘋果、啤酒、大米的支持率是8箇中的2個,即25%。

如果你發現超過一定比例的商品銷售往往會對您的利潤產生重大影響,你可以考慮將該比例作爲支持度閾值,然後,可以將支持度的值高於此閾值的項集標識爲重要項集。

指數二:置信度(Confidence)

置信度表示在X被購買的前提下,Y被購買的概率,表示爲{X -> Y},這是通過X交易的比例來衡量的,其中項目Y也出現在交易中。在表1中,{蘋果->啤酒} 的置信度爲3/4,即75%。

但是置信度指數的一個缺點是它可能會誤導關聯的重要性,因爲它只說明了蘋果有多受歡迎,而不是啤酒。如果啤酒在一般情況下也很受歡迎,那麼包含了蘋果的訂單中同時包含啤酒的可能性將更高,從而提高了置信度指數。爲了說明這兩個組成項目的基礎普及率,我們使用了第三個措施,稱爲提升度(Lift)。

指數三:提升度(Lift)

提升度表示在購買X時購買Y的可能性,同時控制Y項的流行程度。在表1中,{蘋果->啤酒} 的提升度爲1,表明了蘋果和啤酒之間沒有關聯。提升度的值大於1意味着,購買X的情況下很有可能購買Y,反之,提升度的值小於1,表示用戶購買X的時候不大可能購買Y。

我們使用來自Arules R庫的雜貨交易數據集,包含了30天內雜貨店的實際交易,下面的網絡圖顯示所選商品之間的關聯。大的圓圈表示較高的支持度,而紅色圓圈表示較高的提升度

所選項目之間的關聯,使用ArulesViz R庫可視化後,可以觀察到幾種購買模式。例如:

  • 最受歡迎的交易是琵琶和熱帶水果。
  • 另一個受歡迎的交易是洋蔥和其他蔬菜。
  • 如果有人買了肉醬,他很可能也買了酸奶。
  • 比較多的人買香腸和切片奶酪
  • 如果有人買茶,他很可能也買了水果,這可能刺激了果味茶的生產。

回想一下,置信度指數的一個缺點是它傾向於歪曲關聯的重要性。爲了證明這一點,我們返回主數據集,選擇3個包含啤酒的關聯規則:

                                                     表2. 啤酒相關的關聯規則

{啤酒->蘇打水} 規則的置信度最高,爲20%。然而,啤酒和蘇打水經常出現在所有交易中(見表3),因此它們的關聯可能只是僥倖而已。這是由{啤酒->蘇打水}的提升值確定的,即1,表示啤酒和蘇打水之間沒有關聯。

                     表3.商品單獨的支持度

另一方面,由於一般男性化妝品的購買量很少,{啤酒->男性化妝品} 規則的置信度很低,但是,從比較高的提升度指數2.6推斷,當有人購買男性化妝品時,他很可能也會購買啤酒,反過來說,{啤酒->漿果} 也是正確的,當提升值低於1時,我們可以得出結論,如果有人購買漿果,他可能會厭惡啤酒。

很容易計算出單個項目集的流行度,比如{啤酒->蘇打水}。但是,營業者通常不會詢問單個項集。相反,所有者更希望擁有一個流行項目集的完整列表。要獲得這個列表,需要計算每個可能的項目配置的支持值,然後短列滿足最小支持閾值的項目集。

在一個只有10個商品的商店中,要檢查的可能搭配總數將達到1023個,這個數字在一個有數百個商品的商店中呈指數增長。

那麼有沒有辦法減少需要考慮的商品配置數量?

Apriori 算法

先驗(Apriori)原理可以減少我們要檢驗的項集的數量,簡單的描述先驗原則就是:

如果一個項集不經常出現,那麼它的所有超集也必須不經常出現。

這意味着,如果發現{啤酒}不常見,我們可以期望{啤酒->披薩)也同樣或更不常見。所以,在合併流行項集列表時,我們不需要考慮{啤酒->比薩},也不需要考慮包含啤酒的任何其他項集配置。

查找高支持度的項集

使用先驗原理,使用先驗原理,可以縮減需要檢查的項集的數量,並且可以通過以下步驟獲得常用項集的列表:

  • 從只包含單個項的項集開始,例如{蘋果}和{梨}。
  • 考慮項集的支持度,保留滿足最小支持度的項集,並刪除掉不滿足閾值的項集。
  • 使用步驟2中保留的項集,生成所有可能的項集配置。
  • 重複第2步和第三步操作,直到沒有新的項集出現。

這個迭代過程在下面的動畫GIF中進行了說明:

使用先驗算法減少候選項集

可以從動畫中看到,apple的支持度較低,因此它被刪除了,不需要考慮包含apple的所有其他項集配置,這個操作可以減少一半以上的項集數量。

這裏需要注意,您在步驟1中選擇的支持度閾值可以基於正式分析的經驗或者是過去歷史的經驗,如果你發現超過一定比例的商品銷售往往會對您的利潤產生重大影響,可以考慮將該比例作爲支持度閾值(稱爲最小支持度)。

查找高置信度和支持度的項集

我們在前面已經看到了如何使用Apriori算法來識別高支持的項集,同理也可用於識別高置信度或提升的項目關聯,一旦確定了高支持度項集,找到具有高置信度或提升度的規則就不需要進行計算,因爲置信度和提升度的值是使用支持值計算的。

以尋找高置信度規則爲例,如果規則 {啤酒, 薯條->蘋果} 置信度比較低,所有其他同樣的組成項並且蘋果在右邊的規則,也會有低的置信度。特別是,

{啤酒->蘋果,薯條}

{薯條->蘋果,啤酒}

也會有一個比較低的置信度,和之前一樣,可以使用Apriori算法修剪較低級別的候選項規則,從而減少需要檢查的候選規則。

侷限性

計算代價很高。儘管Apriori算法減少了要考慮的候選項集的數量,但是當存儲庫存較大或支持閾值較低時,這個數量仍然可能很大。但是,另一種解決方案是可以通過使用高級數據結構(如哈希表)來減少比較的數量,以便更有效地對候選項集進行排序。

虛假的聯想。對大量庫存的分析將涉及更多的項集配置,並且可能需要降低支持閾值來檢測某些關聯。然而,降低支持度閾值也可能增加檢測到的虛假關聯的數量。爲了確保已識別的關聯是可歸納的,可以首先從培訓數據集中提取關聯,然後在單獨的測試數據集中評估它們的支持度和置信度。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章