1、關聯:(Association)
把兩個或者兩個以上在意義上,有密切聯繫的項組合在一起
關聯規則(Association Rules AR)
用於從大量數據中挖掘出有價值的數據項之間的相關關係
協同過濾(Collaborative Filtering,簡稱CF)
協同過濾常常被用於分辨某位特定固定可能感興趣的東西,這些結論來自於對其他相似顧客對哪些產品感興趣的分析
2、關聯規則(Association Rules)
兩個不相交的非空集合X、Y,如果有X->Y,就說X->Y是一條關聯規則
強度:支持度(support)、自信度(confidence)
效度:提升度(Lift)
3、挖掘定義
給定一個數據集,找出其中所有支持度support>=min_support、自信度
confidece>=min_confidece的關聯規則
4、支持度的計算公式
suopport(X->Y)=集合X和集合Y中的項在一條記錄中同時出現的次數/數據記錄的個數
例如:
support({啤酒}->{尿布})
=啤酒和尿布同時出現的次數/記錄數
=3/5=60%
5、自信度(Confidence)
confidence(X->Y)=集合X與集合Y中的項在一條記錄中同時出現的次數/集合X出現的個數
例如:
confidence({啤酒}->{尿布})
=啤酒喝尿布同時出現的次數/啤酒出現的次數=3/3=100%
6、自信度
confidence({尿布}->{啤酒})
=啤酒喝尿布同時出現的次數/尿布出現的次數
=3/4
=75%
7、提升度(Lift)
度量規則是否可用的指標,描述的是相對於不用規則,使用規則可以提高多少,提升度大於1 ,規則有效
計算公式
lift({A-B})=confidence({A-B})/supper(B)
例如:
lift({尿布}->{啤酒})
=confidence({尿布}->{啤酒})/support(啤酒)
=0.75/0.6=1.25
8、 計算步驟
01 掃描數據集,統計一級候選集出現的次數
清除不滿足條件的候選相集,得到一級項集(例如:出現次數大於2)
02 從一級項集中,組合二級候選相集,統計數據集中他們出現的次數
清除不滿足條件的候選相集,得到二級項集
03 從二級項集中,組合三級候選相集,統計數據集中他們出現的次數(小於確定的3次) 停止挖掘
04 將前面得到的項集作爲結果返回
9、案例代碼
import pandas
import apyori
from apyori import apriori
data=pandas.read_csv('D:\\DATA\\pycase\\number2\\8.1\\Data.csv')
# apriori與pandas包輸出數據格式不兼容,所以進行格式轉換‘,
# 以列表的形式進行分許
transactions=data.groupby(by='交易ID').apply(
lambda x: list(x.購買商品)
)
#min_support -- The minimum support of relations (float).
#min_confidence -- The minimum confidence of relations (float).
#min_lift -- The minimum lift of relations (float).
#max_length
# 調用apriori方法
results=list(
apriori(
transactions
)
# 指出度(support),先輸入空列表,再進行賦值
supports=[]
#自信度
confidences=[]
# 提升度
lifts=[]
# 基於項items_base
bases=[]
# 推導項items_add
adds=[]
for r in results:
supports.append(r.support)
confidences.append(r.ordered_statistics[0].confidence)
lifts.append(r.ordered_statistics[0].lift)
bases.append(list(r.ordered_statistics[0].items_base))
adds.append(list(r.ordered_statistics[0].items_add))
result = pandas.DataFrame({
'support': supports,
'confidence': confidences,
'lift': lifts,
'base': bases,
'add': adds
})
# 選擇支持度大於0.5,自信度大於0.5,提升度大於1
r=result[(result.lift>1)&(result.support>0.5)&(result.confidence>0.5)]