關聯算法


一、概念
 
關聯算法常用於購物籃分析:找到正向、強關聯的商品集合,用來優化貨架商品擺放和捆綁銷售。
關聯算法需要明確:頻繁項集(A,B),A->B和B->A的關聯方向(正、負)與關聯程度(強、弱)。
 
頻繁項集:出現次數不小於設定閥值的商品集合
電商常用單品推薦單品,稱為頻繁2項集,形如(A,B)。

關聯算法重要定理:頻繁項集的所有非空子集也都必須是頻繁的。

比如(A,B,C)是頻繁項集,那(A,B)肯定也是頻繁項集。如果(A,B)不是頻繁項集,那(A,B,C)肯定也不是頻繁項集。

 

支持度(Support):用來找頻繁項集、計算作用度和置信度

Support(A,B)=A、B兩件商品同時出現的次數 /  總購物車次數。

分母N是固定的,所以很多文章都用分子frq(X,Y)取名"支持計數"來比較支持度小大。

支持度不小於用戶設定的最小支持度閥值的項集,稱為頻繁項集。

支持度_support

 

作用度(Lift):又名提升度,用來衡量關聯方向

傳統關聯算法是沒有作用度指標的,很多文章示例都沒有提及。
加入這個指標的用意是:看兩個商品之間的關聯是正向的還是負向的。
也就是說看一個商品的出現會提高還是會降低另一個商品的出現概率。

Life(A,B)=Support(A,B)/(Support(A)*Support(B))有A的情況下有B的概率/有B的概率。

大於1說明正相關、提高購買概率。小於1說明負相關、降低購買概率。等於1說明互不影響。

作用度_lift

比如總共100條購物記錄,A出現的次數是30次,B出現的次數是50次,AB同時出現的次數是10次,那么:

Life(A->B)=Life(B->A)=Life(A,B)=(10/100) / (30/100)*(50/100)=2/3。

對購物車中已經包含商品A/B的用戶推薦商品B/A,其購買概率(10/30)是單獨購買B/A概率(50/100)的2/3倍。

比如對購買雨衣的用戶推薦雨傘,比對未購買雨衣的用戶推薦雨傘的收益小。這個關聯是無效的、反向的。

 

置信度(Confidence):用來衡量關聯程度

Confidence(A->B)=Support(A,B)/Support(A)。即購買A后也會購物B的概率。

Confidence(A->B)<>Confidence(B->A),如果Confidence(A->B)更大,表示對已購買A的推薦B的成功率更高

可信度_confidence

 

 

 

二、總結關聯算法步驟
1.從支持度大於支持度閥值的熱銷商品里找到多個頻繁2項集(Ai,Bi);
2.計算Life(Ai,Bi),篩選出大於1的頻繁2項集(Ai,Bi);
3.計算Confidence(Ai->Bi)和Confidence(Bi->Ai),所有值高低排序;
4.找到大於置信度閥值的或者取前N個最高的(X->Y),營銷策略:對購買X的用戶推薦Y。
 

總購物記錄條數是K,A的出現次數是N1,B的出現次數是N2,A、B的出現次數是M,那么:

假設用戶設定的最小支持度閥值=J/K,Support(A,B)=M/K,如果M>J,那么(A,B)是頻繁項集。

Life(A,B)=Support(A,B)/(Support(A)*Support(B))=(M/K)/((N1/K)*(N2/K))=(M*K)/(N1*N2)。

Confidence(A->B)=Support(A,B)/Support(A)=M/N1,Confidence(B->A)=Support(A,B)/Support(B)=M/N2。
  
關聯算法(Assocaition Algorithm)的區別主要在步驟1的實現速度。
主要是數據的存儲形式與查找方式不同,導致頻繁項集的生成過程不同,進而性能不同。
根據數據的表述形式:水平、垂直、前綴樹,分別對應三種關聯算法:Apriori、Eclat 、FP growth。
Apriori要持續全表掃描數據庫,對超大型數據會出現性能問題,所以又推出了Eclat 、FP growth和其他。
sklearn沒有現成模塊支持關聯算法。可以自己寫個封裝起來,或者去網上找別人寫好的。
https://www.cnblogs.com/Allen-win/articles/7638557.html 兩種算法的數據存儲和查找比較
https://www.cnblogs.com/infaraway/p/6774521.html 三種算法的代碼實現以及性能比較
 
實際的關聯營銷會比上述關聯算法更復雜一些:會結合庫存、流量分配、支持度和置信度的權重綜合考慮。
 
 
三、關於支持度和置信度閥值的困惑
 
支持度閥值,困惑較大:
Q:小於支持度閥值的低銷量物品,為什么不用關聯營銷?也許關聯性更強。
A:如果一個物品本身購買的人就不多,再怎么提升它也不會高到哪去。低銷量物品的關聯性,偶然成分更大。
 
Q:100次購物記錄中有的物品出現10次、有的20次、有的30次,如何設置支持度閥值?
A:可以選取支持度前N%個作為支持度的閥值。
 
置信度閥值,困惑較小:
Q:購買了一個商品后同時購買另一個商品的概率,也許是30%、50%、70%。如何設置置信度閥值?
A:可以選取置信度前N個作為置信度的閥值。
 
 
四、算法示例

數據挖掘算法之關聯規則挖掘Apriori算法詳細過程

首先設定最小支持計數為2,最小支持度為2/5=40%。

第1步:掃瞄所有的事務,統計每件商品的出現次數,產生候選1-項集的集合C1

數據挖掘算法之關聯規則挖掘Apriori算法詳細過程

第2步:將C1中支持計數不小於最小支持計數2的候選1-項集選出,產生頻繁1-項集的集合L1

數據挖掘算法之關聯規則挖掘Apriori算法詳細過程

第3步:利用自身連接L1 X L1產生候選2-項集的集合C2,掃瞄所有事務,統計C2中每個候選項集的支持計數

數據挖掘算法之關聯規則挖掘Apriori算法詳細過程

第4步:通過比較,將C2中支持計數不小於最小支持計數2的候選2-項集選出,產生頻繁2-項集的集合L2

數據挖掘算法之關聯規則挖掘Apriori算法詳細過程

第5步:利用自身連接L2 X L2,產生候選3-項集的集合C3,重復上述過程,直至產生的候選項集不滿足Apriori定理。此處由於候選3-項集為空, 頻繁2-項集為最終結果。

舉個例子理解為什么候選3-項集為空:比如說L2 X L2得到其中的一個3 -項集是{啤酒,尿布,牛奶},Apriori定理說頻繁項集的所有非空子集也都必須是頻繁的,{啤酒,尿布,牛奶}包括三個子集{啤酒,尿布},{啤酒,牛奶},{尿布,牛奶},其中{啤酒,尿布},{啤酒,牛奶}是頻繁的,因為它們都出現在了L2中,但是{尿布,牛奶}不是頻繁的,因此3 -項集是{啤酒,尿布,牛奶}不滿足Apriori定理,其余理解類似。

第6步:計算每個項集的作用度,保留作用度大於1的。
作用度(啤酒->尿布/尿布->啤酒)=(3*5)/(4*4) =15/16 <1  
作用度(啤酒->牛奶/牛奶->啤酒)=(2*5)/(4*2) =5/4 >1 
作用度(尿布->嬰兒爽身粉/嬰兒爽身粉->尿布)= (2*5)/(4*2) =5/4 >1 
保留項集(啤酒,牛奶)、(尿布,嬰兒爽身粉)。
 
第7步:計算保留項集間的置信度。
置信度(啤酒→牛奶)= 2/4= 50%
置信度(牛奶→啤酒)= 2/2= 100%
置信度(尿布→嬰兒爽身粉)= 2/4= 50%
置信度(嬰兒爽身粉→尿布)= 2/2= 100%
 
第8步:取置信度>60%的進行營銷策划:
(牛奶→啤酒):對購買牛奶的用戶推薦啤酒
(嬰兒爽身粉→尿布): 對購買嬰兒爽身粉的用戶推薦尿布
 
 
也許你認為就算不推廣,他們也會有100%的概率會自己去買。何必關聯營銷?
要知道,這個置信度是會變的啊!
如果電商平台能給出快捷購買的渠道,體驗性非常好,用戶的忠誠度也會增加,置信度可能就上升了!
如果本着不管不問的態度,讓用戶自己去找,也許哪天他偷個懶或者忘了就不買了,置信度就降低了!
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM