初識機器學習:關聯規則
這是我參與「掘金日新計劃 · 8 月更文挑戰」的第4天,點選檢視活動詳情
關聯規則,或者關聯規則學習(Association Rule Learning)是一種在大量資料點中發現隱蔽的關聯關係的方法。能夠利用一些有趣的量度來識別資料點集中發現的強規則。
關聯規則最常見的使用場景就是購物,不管是線上還是線下,上架都希望從顧客的購物記錄中,尋找不同商品之間並非顯而易見的關係,以此來推薦商品、優化商品陳列、推送廣告等。
如何量化關聯規則:支援度、置信度和提升度
我們以超市購物的訂單資料為例,如下是一組示例資料
| 交易 | 商品 | | --- | ----------- | | 交易1 | 🍎 🍺 🍚 🍗 | | 交易2 | 🍎 🍺 🍚 | | 交易3 | 🍎 🍺 | | 交易4 | 🍎 🍺 🍐 | | 交易5 | 🍼 🍺 🍚 🍗 | | 交易6 | 🍼 🍺 🍚 | | 交易7 | 🍼 🍺 | | 交易8 | 🍼 🍺 🍐 |
支援度
支援度某個項集出現的頻率,也就是包含這個項集的交易數佔總交易數的比例。在上面的例子中,🍎 的支援度,可以表示為:支援度{🍎}=4/8
。
置信度
置信度是指當 X 項出現的時候,Y 項同時出現的概率,用 {X->Y}
表示,也就是同時包含 X 項和 Y 項的交易數佔包含 X 項的交易數的比例。
在上面的例子中,置信度{🍎->🍺}
的置信度是:置信度{🍎->🍺}=支援度{🍎,🍺}/支援度{🍎}
。根據上面的交易資料可以得出,結果為3/4
。
不過,置信度這個指標存在一個缺陷,當購買 🍎 的顧客大概率也會購買 🍺 的時候,並不一定代表兩者的關聯度比較高,也有可能,🍎 和 🍺 之間其實並沒有什麼關聯關係,只是,兩者都屬於非常暢銷的單品,因此才同時出現在了很多顧客的訂單中。
這種情況下,置信度其實給了我們錯誤的判斷,「提升度」這個指標可以幫我們規避這個問題。
提升度
提升度指的是,X 項和 Y 項同時出現的頻率,並且同時考慮了 X 項和 Y 項各自出現的頻率。它的計算方式是這樣:提升度{🍎->🍺}=支援度{🍎,🍺}/支援度{🍎}*支援度{🍺}
,結合前面的兩個指標,不難看出,實際上,提升度{🍎->🍺}=置信度{🍎->🍺}/支援度{🍺}
,結果是 1。結果是 1 則代表,兩者之間並無關聯,如果這個結果比 1 大,則代表兩者存在關聯,結果越大,提升度越高,則代表兩者關聯度越大,反之,如果這個結果小於 1,則代表兩者負相關的關係。
關聯規則的特點
在資料規模特別大的時候,偶爾會出現假關聯的情況,這個時候,為了確保關聯規則的普適性,需要對結果進行驗證。
關聯規則的一個更大的問題是,需要非常大的計算量來完成,即使只有 10 種商品,也需要對上千種組合進行計算(2^10-1=1023
),而在真實的商場超市或者線上商城中的商品數量,能夠組成的組合數會是一個天文數字。關於這個問題如何解決,我會在下一篇中介紹。
參考:《白話機器學習演算法》
- Spring 原始碼閱讀 42:AutowiredAnnotationBeanPostProcessor 分析(3)
- Spring 原始碼閱讀 41:AutowiredAnnotationBeanPostProcessor 分析(2)
- Kafka 消費者組 Rebalance 詳細過程
- Spring 原始碼閱讀 01:Resource 資源抽象
- 初識機器學習:迴歸分析
- 初識機器學習:Louvain 社群發現演算法
- 初識機器學習:關聯規則
- 使用 Redis 實現分散式鎖的方法
- Kafka 目錄裡的指令碼那麼多,它們都是用來幹什麼的?
- Kafka 消費者組位移重設的幾種方式
- LeetCode - 84. 柱狀圖中最大的矩形
- LeetCode - 22. 括號生成