1. 程式人生 > >R語言關聯分析之啤酒和尿布

R語言關聯分析之啤酒和尿布

mea mar 簡單 active 兩個 mark 情況 rgb efault

關聯分析

概述

啤酒和尿布的故事,我估計大家都聽過,這是數據挖掘裏面最經典的案例之一。它分析的方法就關聯分析。

關聯分析,顧名思義,就是研究不同商品之前的關系。這裏就發現了啤酒和尿布這兩個看起來毫不相關的東西直接存在的微妙關系。

最經典的關聯分析算法之一就是Apriori算法,也是數據挖掘十大算法之一。在R中就有一個包可以做關聯分析——arules和arulesViz,前者用於關聯規則的數字化生成而後者是前者的擴展包,它提供了幾種對關聯分析結果可視化技術,從分析到可視化一站式完成。

在了解學習關聯分析之前,我們需要知道以下幾個名詞。

項集

英文名itemset,它是一個集合,舉個例子,一個商場的所有商品的就是一個集合,也是一個項集。

關聯規則

英文名Association Rule。一般記為X->Y,X成為關聯規則的先決條件,Y稱為關聯規則的結果。關聯規則有三個核心概念:支持度,置信度,提升度。

支持度

英文名Support。它表示的是項集{X,Y}同時含有X, Y的概率。該指標是建立強關聯規則的第一個門檻,衡量所考察關聯規則在量上的多少。我們可以通過最小閾值的設定,來剔除那些支持度較小的

置信度

英文名 Confidence。是第二個門檻,在這裏我們也可以設置最小閾值。置信度表示在關聯規則的先決條件X發生的條件下,Y發生的概率。如果跟前面的項集的概念聯系到一塊,置信度的意思就是如果在含有X的項集裏面也含有Y的可能性。
confidence(X—>Y)=P(Y|X)=P(X, Y)/P(X)

提升度

英文名lift。提升度可以看做是對置信度的一個補充。置信度是在X發生的情況下,Y發生的概率。而提升度是在X發生的情況下,Y發生的概率與沒有這個條件下項集中出現Y的可能性之比。
當lift為1時,表示X和Y相互獨立,當lift值越大,關聯性越強。

關聯分析步驟

  • 選出滿足支持度最小的閾值的所有項集。即頻繁項集。該閾值一般設為5%—10%。

  • 從頻繁項集中找出最小置信度的所有規則。置信度的閾值一般設置的比較高,如70%—90%。當然你要是想獲取較多的關聯規則,該閾值可以設置的較低。

apriori算法

arules包提供的apriori算法函數原型如下:

apriori(data, parameter = NULL, appearance = NULL, control = NULL)

現在來給大家介紹一下這些參數

參數作用
data數據
parameter參數可以是一個列表,可以對支持度,置信度,每個項集所含項數的最大值最小值,以及輸出結果等重要參數進行設置
appearance可以對先決條件X和關聯條件Y中具體包含的那些項目進行限制。默認是沒有限制的。
control控制算法的性能,也可以進行排序和報告進程。

現在就來分析一下啤酒和尿布的案例,arules包含有一個Groceries的數據集,該數據集是某雜貨店一個月的真實交易數據,我今天就有這份數據來看看啤酒和尿布的故事是不是都是大人們編出來騙我們的。

library(arules)
data("Groceries")

由於數據集中酒的種類比較多,有canned beer,bottled beer,wine等,所以我直接把尿布napkins作為後繼。

rules<-apriori(Groceries,parameter = list(supp=0.001,conf=0.22),
                appearance = list(rhs="napkins",default="lhs"))

在不斷調整支持度和置信度,最終調到0.001和0.22,結果還是比較理想的,如果再大一點,生成的頻繁項集就會比較少,而且更重要的沒有包含啤酒的的項集,如果再小一點,生成的項集又太多,但包含啤酒的項集也不是很多。此時支持度為0.001,置信度為0.22,總共有53個頻繁項集,但只有一條包含啤酒的頻繁項集。當把支持度或置信度再調大一點,就沒有包含酒的頻繁項。

現在使用arulesViz包對結果進行可視化

library(arulesViz)
plot(rules)

技術分享圖片


關聯規則點的顏色深淺有提升度lift值得高低來決定的。
從圖片中可以看到提升度高的,支持度比較低,置信度較高。

plot(x, method = NULL, measure = "support", shading = "lift", 
    interactive = NULL, engine = "default", data = NULL, control = NULL, ...)

如果我們要查看每個點所代表的項集,可以使用參數interactive。這樣繪制的圖形是交互式的。點擊inspect就可以獲取選定點的詳細信息,點擊一個點,再點filter按鈕,然後點擊右側顏色條,就可以將小於該關聯規則lift的其他關聯規則點都過濾掉。
當一塊點比較密集時,可以選兩個點構成一個矩形區域,再點擊zoom in就可把該區域放大,點擊zoom out就會縮小。點擊end就是退出。可以看下面的演示圖。

plot(rules, interactive=TRUE)

技術分享圖片


這個包對結果的可視化效果還是很棒的,函數也提供了許多參數。下面是我簡單繪制的,僅供“觀賞”。

plot(rules6, method = "grouped")

技術分享圖片

其中measure參數可以控制散點的大小和顏色。

plot(rules6, method = "grouped",measure = "lift")

技術分享圖片

plot(rules6, method = "graph")

技術分享圖片

還有其他參數,在用的時候可以再好好研究。

分析完之後我有種被騙的感覺,為什麽會這樣,53個頻繁項集,但只有一條包含啤酒的頻繁項集。也許關聯最強的不用分析我們都知道,關聯最強的也許就是常識,往往那些關聯不太強且容易被忽視到的才是最值得我們去發現的。

退一步想想,也許因為該數據量太小,只有一個月的,另外,這是數據來自一個grocery,並不是像沃爾瑪那種supermarket,而且這個雜貨店也不一定是美國的。所以大家可以把這篇文章看做是一個關聯算法的練習

註:

作者:王亨

公眾號:跟著菜鳥一起學R語言

原文鏈接:http://blog.csdn.net/wzgl__wh/


R語言關聯分析之啤酒和尿布