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

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

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

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








