導語
關聯(lián)規(guī)則:
是反映一個事物與其他事物之間的相互依存性和關聯(lián)性
常用于實體商店或在線電商的推薦系統(tǒng):通過對顧客的購買記錄數(shù)據(jù)庫進行關聯(lián)規(guī)則挖掘,最終目的是發(fā)現(xiàn)顧客群體的購買習慣的內在共性,例如購買產(chǎn)品A的同時也連帶購買產(chǎn)品B的概率,根據(jù)挖掘結果,調整貨架的布局陳列、設計促銷組合方案,實現(xiàn)銷量的提升,最經(jīng)典的應用案例莫過于<啤酒和尿布>。關聯(lián)規(guī)則分析中的關鍵概念包括:支持度(Support)、置信度(Confidence)與提升度(Lift)。
支持度(support)
支持度 (Support)支持度是兩件商品
(
X
?
Y
)
(X \bigcap Y)
(X?Y)在總銷售筆數(shù)(N)中出現(xiàn)的概率,即A與B同時被購買的概率
S
u
p
p
o
r
t
(
X
?
Y
)
=
F
r
e
q
(
X
?
Y
)
N
Support(X \bigcap Y)=\frac{Freq(X \bigcap Y)}{N}
Support(X?Y)=NFreq(X?Y)?
舉例說明:
比如某超市2016年有100w筆銷售,顧客購買可樂又購買薯片有20w筆,顧客購買可樂又購買面包有10w筆
- 可樂和薯片的關聯(lián)規(guī)則的支持度是:20%
- 可樂和面包的支持度是10%
置信度(confidence)
置信度是購買X后再購買Y的條件概率。簡單來說就是交集部分Y在X中比例,如果比例大說明購買X的客戶很大期望會購買Y商品
C
o
n
f
i
d
e
n
c
e
=
F
r
e
q
(
X
?
Y
)
F
r
e
q
(
X
)
Confidence=\frac{Freq(X \bigcap Y)}{Freq (X)}
Confidence=Freq(X)Freq(X?Y)?
舉例說明:
某超市2016年可樂購買次數(shù)40w筆,購買可樂又購買了薯片是30w筆,顧客購買可樂又購買面包有10w筆
- 購買可樂又會購買薯片的置信度是75%
- 購買可樂又購買面包的置信度是25%
提升度(lift)
提升度表示先購買X對購買Y的概率的提升作用,用來判斷規(guī)則是否有實際價值,即使用規(guī)則后商品在購物車中出現(xiàn)的次數(shù)是否高于商品單獨出現(xiàn)在購物車中的頻率
L
i
f
t
=
S
u
p
p
o
r
t
(
X
?
Y
)
S
u
p
p
o
r
t
(
X
)
?
S
u
p
p
o
r
t
(
Y
)
Lift=\frac{Support(X \bigcap Y)}{Support(X)*Support(Y)}
Lift=Support(X)?Support(Y)Support(X?Y)?
舉例說明:
可樂和薯片的關聯(lián)規(guī)則的支持度是20%,購買可樂的支持度是3%,購買薯片的支持度是5%
- 提升度是1.33
{X→Y}的提升度大于1,這表示如果顧客購買了商品X,那么可能也會購買商品Y;而提升度小于1則表示如果顧客購買了商品X,那么不太可能再購買商品Y
有這三個指標,如何選擇商品的組合,是需要對支持度,置信度,提升度綜合指標來看待商品組合。沒有固定的數(shù)值衡量
mlxtend實現(xiàn)Apriori算法
數(shù)據(jù)集選擇:Grocery Store Data Set
數(shù)據(jù)集為10000多個購買商品的訂單。該數(shù)據(jù)集包含11商品:果醬、麥琪、糖、咖啡、奶酪、茶、波恩維塔、玉米片、面包、餅干和牛奶。
import pandas as pd
data=pd.read_csv('GroceryStoreDataSet.csv',names=['products'],header=None)
data.head(10)
data=list(data['products'].apply(lambda x:x.split(',')))
data
轉換數(shù)據(jù)類型TransactionEncoder類似于獨熱編碼,每個值轉換為一個唯一的bool值)
from mlxtend.preprocessing import TransactionEncoder
d=TransactionEncoder()
d_data=d.fit(data).transform(data)
df=pd.DataFrame(d_data,columns=d.columns_)
df
TransactionEncoder類似于獨熱編碼,每個值轉換為一個唯一的bool值)
求支持度
from mlxtend.frequent_patterns import apriori
df1=apriori(df,min_support=0.01,use_colnames=True)
df1.sort_values(by='support',ascending=False)
求置信度與提升度
association_rules方法判斷置信度,這里提取confidence大于0.9的
from mlxtend.frequent_patterns import association_rules
association_rule = association_rules(df1,metric='confidence',min_threshold=0.9)
列中的columns參數(shù)含義如下:
- antecedents:商品X組合
- consequents:商品Y組合
購買關聯(lián)的關系是{X -> Y} - antecedent support:商品X組合支持度
- consequent support:商品Y組合支持度
- support:{X -> Y}支持度
- confidence:{X -> Y}置信度
- lift:{X -> Y}提升度
- leverage:規(guī)則杠桿率,表示當商品X組合與商品Y組合獨立分布時,商品X組合與商品Y組合一起出現(xiàn)的次數(shù)比預期多多少。
- conviction:{X -> Y}確信度,與提升度類似,但用差值表示。
確信度值越大,則商品X組合與商品Y組合的關聯(lián)性越強。 以上三個值都是越大關聯(lián)強度也就越大,inf表示無窮大。
注意是商品組合
單個商品與單個商品之間的關系
篩選商品組合,選出只有一個商品的antecedents,和consequents。
association_rule['X_length']=association_rule['antecedents'].apply(lambda x:len(x))
association_rule['Y_length']=association_rule['consequents'].apply(lambda x:len(x))
association_rule=association_rule[(association_rule['X_length']==1) & (association_rule['Y_length']==1) ]
文章來源:http://www.zghlxwxcb.cn/news/detail-470149.html
也可以單獨對antecedents的商品組合,分析,觀察antecedent support值,找出關聯(lián)性最大的情況文章來源地址http://www.zghlxwxcb.cn/news/detail-470149.html
到了這里,關于python數(shù)據(jù)分析 - 關聯(lián)規(guī)則Apriori算法的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!