關聯推薦:啤酒怎麼愛上尿布?

吾理數 發佈 2020-02-02T19:50:45+00:00

關聯組合的條件機率,比如尿布->啤酒的置信度是:在尿布出現的條件下,啤酒出現的機率= 3/4 ,也等於 『尿布->啤酒』的支持度 / 『尿布』的支持度。

聯繫是普遍存在的,關聯的存在本身是有價值的,在電商推薦中關聯推薦是最簡單最直接有效的。關聯推薦的核心有三度:支持度,置信度,提升度.

  • 支持度是衡量某一關聯的應用場景的多少
  • 置信度是衡量某一關聯在應用場景的占比
  • 提升度是衡量某一關聯推薦的應用的好壞

一個實踐操作,能讓我們在三度中,恍然大悟。

1,數據模擬

訂單號<-c('OD001','OD002','OD003','OD004','OD005') 尿布<-c(1, 0,1,1,1) 啤酒<-c(0, 0,1,1,1) 可樂<-c(1, 1,1,1,1)麵包<-c(0, 0,0,1,0) 巧克力<-c(0,1,0,1,0) buy_goods<- data.frame(訂單號, 尿布, 啤酒, 可樂, 麵包, 巧克力)有五個訂單,0/1表示訂單是包含商品。

為了更方便的利用SQL對數據進行統計,我們這裡需要將數據融合,利用melt實現數據的列轉行。melt(buy_goods, id = (c('訂單號')), variable_name =c('商品名稱'))



統計描述一下數據library(sqldf)SQL = sqldf("SELECT 商品名稱, COUNT(1) as Total FROM buy_goods_table WHERE 是否購買=1 group by 商品名稱 ORDER BY Total DESC ;")

SQL$Total=as.numeric(SQL$Total)pie(SQL$Total, labels =SQL$商品名稱,explode=0.1,col=rainbow(4), main="購買商品的分布",cex.lab=0.5, cex.axis=0.5, cex.main=1,labelcex=1, family='SimSun')

2,什麼是支持度?

即關聯組合出現的頻率,比如『尿布』在五個訂單出現的頻率=4/5;『尿布->啤酒』 在五個訂單出現的頻率=3/5;

3,什麼是置信度?關聯組合的條件機率,比如尿布->啤酒的置信度是:在尿布出現的條件下,啤酒出現的機率 = 3/4 ,也等於 『尿布->啤酒』的支持度 / 『尿布』的支持度。

4,什麼是提升度?組合推薦購買某產品機率 / 直接購買某產品的機率,就是很衡量組合推薦提高某產品的購買效果。比如『尿布->啤酒』的置信度 / 『啤酒』 的支持度 = 提升度。


一個有效的簡單關聯規則應具有較高的置信度和較高的支持度。如果規則的支持度較高,但置信度較低,則說明規則的可信度差;如果規則的置信度較高但支持度較低,則說明規則的應用機會很少。一個置信度較高但普遍性較低的規則並沒有太多的實際的應用價值。

5,怎麼找到效果好的頻繁項集 — Apriori 算法有興趣同學,可以考慮一些對等類為核心的Eclat算法


5.1,需要將數據轉成事務對象。Bt <- sqldf('SELECT 訂單號, 商品名稱 FROM buy_goods_table WHERE 是否購買=1')BuyList<-split(Bt[, '商品名稱'], Bt[,'訂單號'])library(Matrix)library(arules)BuyTrans<-as(BuyList, 'transactions') summary(BuyTrans)inspect(BuyTrans)

image(BuyTrans);

5.2,在事務對象中搜索頻繁項集,生成有效規則buyrules<-apriori(data=BuyTrans, parameter=list(support=0.5, confidence=0.6, target='frequent itemsets'))

inspect(buyrules)

找出最大的頻繁項集:buyrules<-apriori(data=BuyTrans, parameter=list(support=0.5, confidence=0.6, target='maximally frequent itemsets'))inspect(buyrules)

5.3,計算組合的提升度buyrules<-apriori(data=BuyTrans, parameter=list(support=0.5, confidence=0.6, target='rules'))

由此我們可以篩選出最有價值的關聯組合「尿布,啤酒,可樂」,「啤酒,尿布」。兩個天差地別的商品,就這樣成為了傳為佳話的一對CP。


6,讓簡單的規則可視化buyrules<-apriori(data=BuyTrans, parameter=list(support=0.5, confidence=0.6, target='frequent itemsets'))inspect(buyrules)par(family='SimSun')plot(x= buyrules, method='graph', control=list(main='購買組合可視化'))

buyrules<-apriori(data=BuyTrans, parameter=list(support=0.5, confidence=0.6, target='rules'))inspect(buyrules)plot(buyrules, method='grouped')


plot(buyrules, method='paracoord')

plot(buyrules, method='graph',control=list(arrowSize=3,main='關聯規則的可視化'))

一起加油吧

至此也感謝你的認真拜讀,喜歡點個讚就好

感謝你的閱讀,關注公.眾.號:趣味數據周刊,後台回覆:idw007,可以獲取文章數據。 和志同道合的夥伴一起學習統計學,數據分析,機器學習,走向人生巔峰,有問題可以撩我;很樂意為你效勞。

關鍵字: