efficient_apriori工具包安裝
本文使用的工具是efficient_apriori,導(dǎo)入會出現(xiàn)報錯:No module named 'efficient_apriori',則需進(jìn)行安裝工具包

直接pip install efficient_apriori會出現(xiàn)超時的報錯
需要借助鏡像源,如下也會報錯:
pip install efficient_apriori http://mirrors.aliyun.com/pypi/simple/

需要對鏡像源進(jìn)行調(diào)整,就可以成功,如下:
pip install efficient_apriori -i https://pypi.doubanio.com/simple/ --trusted-host pypi.doubanio.com pip

Apriori算法原理
在介紹Apriori算法之前,先簡單了解一下關(guān)聯(lián)規(guī)則:
Association Rules,或者是 Basket Analysis
解釋了:如果一個消費者購買了產(chǎn)品A,那么他有多大幾率會購買產(chǎn)品B?
故事:
啤酒和尿布:
沃爾瑪在分析銷售記錄時,發(fā)現(xiàn)啤酒和尿布經(jīng)常一起被購買,于是他們調(diào)整了貨架,把兩者放在一起,結(jié)果真的提升了啤酒的銷量。
原因解釋:爸爸在給寶寶買尿布的時候,會順便給自己買點啤酒?
沃爾瑪是最早通過大數(shù)據(jù)分析而受益的傳統(tǒng)零售企業(yè),對消費者購物行為進(jìn)行跟蹤和分析。
根據(jù)舉例內(nèi)容,理解支持度、置信度、提升度:
image.png
支持度:
是個百分比,指的是某個商品組合出現(xiàn)的次數(shù)與總次數(shù)之間的比例。支持度越高,代表這個組合出現(xiàn)的頻率越大。
“牛奶”的支持度=4/5=0.8
“牛奶+面包”的支持度=3/5=0.6。
置信度:
是個條件概念
指的是當(dāng)你購買了商品A,會有多大的概率購買商品B
置信度(牛奶→啤酒)=2/4=0.5
置信度(啤酒→牛奶)=2/3=0.67
提升度:
商品A的出現(xiàn),對商品B的出現(xiàn)概率提升的程度
如果我們單純看置信度(可樂→尿布)=1,也就是說可樂出現(xiàn)的時候,用戶都會購買尿布,那么當(dāng)用戶購買可樂的時候,就需要推薦尿布么?
提升度:商品A的出現(xiàn),對商品B的出現(xiàn)概率提升的程度
提升度(A→B)=置信度(A→B)/支持度(B)
提升度的三種可能:
提升度(A→B)>1:代表有提升;
提升度(A→B)=1:代表有沒有提升,也沒有下降;
提升度(A→B)<1:代表有下降。
Apriori算法原理
我們把上面案例中的商品用ID來代表,
牛奶、面包、尿布、可樂、啤酒、雞蛋的商品ID分別設(shè)置為1-6
Apriori算法就是查找頻繁項集(frequent itemset)的過程
頻繁項集:支持度大于等于最小支持度(Min Support)閾值的項集。
非頻繁項集:支持度小于最小支持度的項集
image.png
(1)
先計算K=1項的支持度
image.png
假設(shè)最小支持度=0.5,那么Item4和6不符合最小支持度的,不屬于頻繁項集
image.png
(2)
在這個基礎(chǔ)上,我們將商品兩兩組合,得到k=2項的支持度
image.png
篩選掉小于最小值支持度的商品組合
image.png
(3)
將商品進(jìn)行K=3項的商品組合,可以得到:
image.png
篩選掉小于最小值支持度的商品組合
image.png
得到K=3項的頻繁項集{1,2,3},也就是{牛奶、面包、尿布}的組合
Apriori算法的流程:
Step1,K=1,計算K項集的支持度;
Step2,篩選掉小于最小支持度的項集;
Step3,如果項集為空,則對應(yīng)K-1項集的結(jié)果為最終結(jié)果。
否則K=K+1,重復(fù)1-3步。
示例
from efficient_apriori import apriori
# 設(shè)置數(shù)據(jù)集
transactions = [('牛奶','面包','尿布'),
('可樂','面包', '尿布', '啤酒'),
('牛奶','尿布', '啤酒', '雞蛋'),
('面包', '牛奶', '尿布', '啤酒'),
('面包', '牛奶', '尿布', '可樂')]
# 挖掘頻繁項集和頻繁規(guī)則
itemsets, rules = apriori(transactions, min_support=0.5, min_confidence=1)
print("頻繁項集:", itemsets)
print("關(guān)聯(lián)規(guī)則:", rules)








