iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 10
3
Data Technology

你都在公司都在幹啥R? R語言資料分析經驗分享系列 第 10

【10】當老闆問說:嗯...你只不過是改變資料結構而已,說好的分析呢?

  • 分享至 

  • xImage
  •  

沒錯,前一天的教學還只是清理資料而已,真正的分析還沒開始,我們這邊會用到Apriori 演算法,那這邊有幾個名詞要先介紹

Support (支持度) : 意思是某特定種類在所有種類的比重,例如我有100名會員,其中有20名購買過雨具,則support(雨具) = 20% 。

Confidence (信賴度) : 意思是某A種類中,含有某B種類的比重,例如我有100名會員,其中40人買過涼鞋,而這40買過涼鞋者當中,又另有10人買過雨具,則confidence(涼鞋->雨具) = 10/40 = 25% 。

Lift (提升度) : 意思為某兩者關係的比值,如果小於1 代表兩者是負相關,等於1 表示兩者獨立,大於1 表示兩者正相關,公式為confidence(A->B) / support(B) ,帶入上述例子可表示成 lift(涼鞋->雨具) = 25/20 = 1.25 。

介紹完Apriori 的幾個名詞後,就可以啟動R 的套件。

#install.packages("arules")
library(arules)

然後讀取昨天整理好的資料。

dataset = read.transactions('output/apriori.csv', sep = ',', rm.duplicates = TRUE)

我們就會看到初始化訊息。

https://ithelp.ithome.com.tw/upload/images/20171227/20107299XKzrkgCRBH.png

這邊簡單解讀,我們分析1869 筆資料,種共有72 種商品品項,其中最常出現的是男鞋,共出現了321 次,而各個會員中,曾經購買過2種品項者有497名、購買3種品項者268名,有一位使用者是超級購物狂72種品項都改過。

再來我們將各個品項的比重畫出他的支持度。

itemFrequencyPlot(dataset, topN = 72, names = FALSE, support = 0.01)

topN 設72,就是所有品項,names設為FALSE,避免圖表化出時,底下全部一堆字擠再一起,support設0.01代表如果該品項的支持度不到1%則不畫,然後我們就得到了下圖。

https://ithelp.ithome.com.tw/upload/images/20171227/201072990w447AXE4c.png

這邊可以看到最高support 的品項在15%左右,最低在8%附近,當然,我自己事後再分析時,發現我當初產生的測資有點太平均了,所以我之後的分析結果會有些缺發說服力,如果你自己的資料分析出來後support 分不差異比較大的,那麼恭喜你理論上會挖到比較有價值的資訊。

接著我丟給apriori 演算法去尋找規則,限制它這個組合支持度至少要高於5%,信賴度大於10%,最少要有2種品項。

rules = apriori(data = dataset, parameter = list(support = 0.05, confidence = 0.1, minlen=2))

https://ithelp.ithome.com.tw/upload/images/20171227/201072995xrvMy9RET.png

最後演算法找到了42項規則,於是我們將它根據lift 高低印出前10筆。

inspect(sort(rules, by = 'lift')[1:10])

得到以下結果:

https://ithelp.ithome.com.tw/upload/images/20171227/20107299eRgyQjNjnp.png

我們就拿第一筆:眼妝=> 靴子來看,這兩者品項同時出現佔所有商品品項5%,有買過眼妝的人中,有買過靴子的人佔了38%,買了眼妝的人也會買靴子的lift 為3.04。

以上就是Apriori 演算法,如果有什麼地方我敘述不清的,還請大家給點指教!

ref:
day10原始碼


上一篇
【09】當老闆提到:我很好奇,在有購買記錄的使用者中,買的商品種類有沒有什麼特徵呢?
下一篇
【11】當老闆想瞭解:我最近對台灣農產品有興趣,你可以幫我抓個資料分析嗎?
系列文
你都在公司都在幹啥R? R語言資料分析經驗分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

1
Denny Chang
iT邦新手 2 級 ‧ 2019-05-24 09:40:34

您好:
看完您的文章覺得收穫很多,想請教解讀規則方面的問題
以第2、3個規則來說:
買了靴子再買眼妝的提升度為3,買了靴子再買耳機喇叭的提升度為2.8,再lhs項都相同的情況下,提升度是可以做比較的嗎?
比方說:買靴子再買眼妝因提升度較高,所以店員應以推薦此商品為主(只看提升度的狀況下)

可以,若以提升度為考量,我會這樣做結論。

了解,非常感謝您~

0
aaronkctan93
iT邦新手 5 級 ‧ 2020-02-21 14:32:15

您好,
我遇到如圖片中的問題,執行了指令 dataset=read.transactions(.... 但結果並沒有如您文章出現 “我們就會看到初始化訊息。” , 而是出現 There were 50 or more warning (use warning() to see the first 50)
希望可以得到解答,是不是有可能哪裡漏掉了等等的問題。
感謝您~

https://ithelp.ithome.com.tw/upload/images/20200221/20110249S0x06F5DHM.png

請問你資料夾中確實有output/aprior.csv 這個檔案嗎?

yujoe iT邦新手 5 級 ‧ 2020-08-23 20:27:45 檢舉

dataset <- read.transactions('D:/output/apriori.csv', sep = ',',quote = "",rm.duplicates = TRUE)
summary(dataset)

加入quote=""就好了~同上;可能是R的版本不一樣才會有此差異

我要留言

立即登入留言