有趣的啤酒和尿布
「啤酒與尿布」的例子相信很多人都聽說過吧,故事是這樣的:在一家超市中,人們發現了乙個特別有趣的現象,尿布與啤酒這兩種風馬牛不相及的商品居然擺在一起。但這一奇怪的舉措居然使尿布和啤酒的銷量大幅增加了。為什麼有這麼奇怪現象呢?看了資料後發現是因為美國婦女在丈夫回家前買尿布,然後丈夫順手買了自己喜歡的啤酒,所以發生了這麼有趣的事情。
關聯分析
關聯分析是一種在大規模資料集中尋找有趣關係的任務。這些任務有兩種形式:頻繁項集和關聯規則。
頻繁項集是經常出現在一塊的物品的集合;
關聯規則暗示的是兩種物品之間可能存在很強的關係。
可以結合某家店的交易清單來說明這兩個概念:
頻繁集指的就是資料集中經常一起出現的組合,比如就是頻繁集中的乙個例子,而根據上表也可以找到的關聯規則。而我們要通過關聯分析大規模資料來發現資料之間的關係,如何定義關係的強弱呢?這時候我們用支援度(support)和置信度(confidence)來定義。
公式定義
支援度:資料集中包含該項集記錄所佔的比例,上例中的支援度=2/5,的支援度=3/5。
置信度:針對像頻繁集數量》=2的情況,例如,那麼置信度=支援度()/支援度(尿布)。
關聯規則的一般步驟
找到頻繁集;
在頻繁集中通過可信度篩選獲得關聯規則。
apriori演算法假設
apriori演算法是生成頻繁集的一種演算法。apriori原理有個重要假設,如果某個項集是頻繁的,那麼它的所有子集勢必也是頻繁的。如果乙個項集是非頻繁項集,那麼它所對應的超集就全都是非頻繁項集。
乙個簡單的例子
上圖從左到右依次進行迭代,在c1**現次數為1,所以不是頻繁集,由於apriori假設,的超集也不是頻繁集(eg:,,),很明顯看出這個集合的出現次數也是1;
篩選掉來到c2,c2是對l1進行兩兩不重複組合的結果,然後再根據步驟1進行篩選非頻繁集,不斷迭代直至最後組合剩下乙個時迭代結束。
將從步驟2得到頻繁集通過計算得到關聯規則,計算方式如下:
同理,
需要注意的是,b和a的位置不同代表著的意思不一樣,就像是你買一次啤酒同時去買了十次尿布,和買了十次尿布只買了一次啤酒的感覺時很不同的。
所以利用置信度閾值(confidence threshold),將不滿足的置信度(confidence)都過濾掉,剩下的就是該資料集的強關聯規則。
總結傳統的apriori演算法的計算量很大,當商品資料量大時基本上效率很低,所以後來有fp-tree演算法優化了該演算法。
在電商平台中,常用的關聯規則應用是單品推薦單品,即一般只需要知道頻繁2項集即可。而且商品並不是全部平等銷售的,組合、搭售、買贈、企業採購等訂單都會影響頻繁集的生成,若僅用支援度衡量物品之間的關聯性,很容易導致出現假性關聯。
在關聯規則中,因為支援度表示在歷史中a和b同時購買的概率,置信度表示a推薦b的可信程度。由此可以採用提公升度=支援度(support)*置信度(confidence )的方式來表示a推薦b而a和b同時購買的概率。這樣相比於單純使用支援度更全面,同時避免了支援度中等或置信度中等的關聯規則被淘汰。
關聯規則Apriori
首先介紹的是啤酒和尿布的故事 上網自查 這是學習關聯規則必須知道的乙個故事。頻繁項集,關聯規則,支援度,置信度這四個概念貫穿apriori演算法的始終。如果乙個集合不是頻繁相集,那它的超集比然也不是頻繁相集。機器學習實戰例子 coding utf 8 from numpy import def lo...
Apriori 關聯規則演算法
關聯規則通過量化的數字描述物品甲的出現對物品乙的出現有多大的影響。它的模式屬於描述型模式,發現關聯規則的演算法屬於無監督學習的方法。其實是一種事物相關性的 通過對比支援度,進行剪枝,將支援度高的分支留下,繼續探尋關聯,直到再沒有高於最小支援度為止。應用場景比較廣泛,購物籃資料,醫療診斷,科學資料分析...
Apriori關聯規則演算法
例子 支援度 支援度是乙個百分比,指某個商品組合出現的次數與總次數之間的比例,支援度越高表示該組合出現的機率越大。在上面圖中我們可以發現 牛奶 出現了 4 次,那麼這 5 筆訂單中 牛奶 的支援度就是 4 5 0.8。同樣 牛奶 麵包 出現了 3 次,那麼這 5 筆訂單中 牛奶 麵包 的支援度就是 ...