關聯分析演算法Apriori Python

2021-10-23 12:35:52 字數 3065 閱讀 5378

本文參考:zzzzming

在美國有這樣一家奇怪的超市,它將啤酒與尿布這樣兩個奇怪的東西放在一起進行銷售,並且最終讓啤酒與尿布這兩個看起來沒有關聯的東西的銷量雙雙增加。這家超市的名字叫做沃爾瑪。

你會不會覺得有些不可思議?雖然事後證明這個案例確實有根據,美國的太太們常叮囑她們的丈夫下班後為小孩買尿布,而丈夫們在買尿布後又隨手帶回了他們喜歡的啤酒。但這畢竟是事後分析,我們更應該關注的,是在這樣的場景下,如何找出物品之間的關聯規則。接下來就來介紹下如何使用apriori演算法,來找到物品之間的關聯規則吧。

一. apriori關聯分析概述

選擇物品間的關聯規則也就是要尋找物品之間的潛在關係。要尋找這種關係,有兩步,以超市為例

找出頻繁一起出現的物品集的集合,我們稱之為頻繁項集。比如乙個超市的頻繁項集可能有,,}

在頻繁項集的基礎上,使用關聯規則演算法找出其中物品的關聯結果。

簡單點說,就是先找頻繁項集,再根據關聯規則找關聯物品。

為什麼要先找頻繁項集呢?還是以超市為例,你想想啊,我們找物品關聯規則的目的是什麼,是為了提高物品的銷售額。如果乙個物品本身購買的人就不多,那麼你再怎麼提公升,它也不會高到哪去。所以從效率和價值的角度來說,肯定是優先找出那些人們頻繁購買的物品的關聯物品。

二. apriori演算法基礎概念

在介紹apriori演算法之前,我們需要先了解幾個概念,別擔心,我們會結合下面的例子來進行說明的。

這些是乙個超市裡面的一部分購買商品記錄:

商品清單

2.1 關聯分析的幾個概念

支援度(support):支援度可以理解為物品當前流行程度。計算方式是:

支援度 = (包含物品a的記錄數量) / (總的記錄數量)

用上面的超市記錄舉例,一共有五個交易,牛奶出現在三個交易中,故而的支援度為3/5。的支援度是4/5。牛奶和雞蛋同時出現的次數是2,故而的支援度為2/5。

置信度(confidence):置信度是指如果購買物品a,有較大可能購買物品b。計算方式是這樣:

置信度( a -> b) = (包含物品a和b的記錄數量) / (包含 a 的記錄數量)

舉例:我們已經知道,(牛奶,雞蛋)一起購買的次數是兩次,雞蛋的購買次數是4次。那麼confidence(牛奶->雞蛋)的計算方式是confidence(牛奶->雞蛋)=2 / 4。

提公升度(lift):提公升度指當銷售乙個物品時,另乙個物品銷售率會增加多少。計算方式是:

提公升度( a -> b) = 置信度( a -> b) / (支援度 a)

舉例:上面我們計算了牛奶和雞蛋的置信度confidence(牛奶->雞蛋)=2 / 4。牛奶的支援度support(牛奶)=3 / 5,那麼我們就能計算牛奶和雞蛋的支援度lift(牛奶->雞蛋)=0.83

當提公升度(a->b)的值大於1的時候,說明物品a賣得越多,b也會賣得越多。而提公升度等於1則意味著產品a和b之間沒有關聯。最後,提公升度小於1那麼意味著購買a反而會減少b的銷量。

2.2 apriori演算法介紹

apriori的作用是根據物品間的支援度找出物品中的頻繁項集。通過上面我們知道,支援度越高,說明物品越受歡迎。那麼支援度怎麼決定呢?這個是我們主觀決定的,我們會給apriori提供乙個最小支援度引數,然後apriori會返回比這個最小支援度高的那些頻繁項集。

說到這裡,有人可能會發現,既然都知道了支援度的計算公式,那直接遍歷所有組合計算它們的支援度不就可以了嗎?

是的,沒錯。確實可以通過遍歷所有組合就能找出所有頻繁項集。但問題是遍歷所有組合花的時間太多,效率太低,假設有n個物品,那麼一共需要計算2^n-1次。每增加乙個物品,數量級是成指數增長。而apriori就是一種找出頻繁項集的高效演算法。它的核心就是下面這句話:

某個項集是頻繁的,那麼它的所有子集也是頻繁的。
這句話看起來是沒什麼用,但是反過來就很有用了。

如果乙個項集是 非頻繁項集,那麼它的所有超集也是非頻繁項集。

三. apriori演算法實戰

import apyori

data =[[

'豆奶'

,'萵苣'],

['萵苣'

,'尿布'

,'葡萄酒'

,'甜菜'],

['豆奶'

,'尿布'

,'葡萄酒'

,'橙汁'],

['萵苣'

,'豆奶'

,'尿布'

,'葡萄酒'],

['萵苣'

,'豆奶'

,'尿布'

,'橙汁']]

aa = apyori.apriori(transactions=data, min_support=

0.3, min_confidence=

0.6, min_lift=

0.2)

result = apyori.apriori(transactions=data)

for i in result:

print

(i)

'''

min_support -- the minimum support of relations (float).最小支援度,可用來篩選項集

min_confidence -- the minimum confidence of relations (float).最小可信度,可用來篩選項集

min_lift -- the minimum lift of relations (float).最小提公升度

max_length -- the maximum length of the relation (integer).最大物品組合數,預設是none,不做限制。如果只需要計算兩個物品組合的話,便將這個值設定為2。

'''

以上就是關聯演算法apriori的簡單實

關聯分析演算法

關聯分析演算法 關聯分析演算法的應用非常廣泛,它可以在大規模資料集中找出一組有關聯的資料。例如 商品分析中,我們可以分析出哪些商品之間有購買的關聯,也就是買了其中乙個商品之後,顧客就很有可能買另外乙個商品。頻繁項集是指那些經常出現在一起的物品集合,那麼如何評價這裡的頻繁程度呢?我們用支援度和可信度 ...

Apriori演算法 關聯分析

apriori演算法是資料探勘演算法中的重要一員,它是通過對資料集進行關聯分析,從而分析出資料集裡項與項之間的關聯關係。演算法最簡單直接的應用,當屬對超市裡被購買的物品的關聯分析,從而挖掘出顧客購買產品及其附屬產品的關係,例如經典的尿布與啤酒,或者現在各大電商 上,當入手一樣物品後,會給推送來各種很...

關聯分析演算法Apriori介紹

apriori 演算法其名字是因為演算法基於先驗知識 prior knowledge 根據前一次找到的頻繁項來生成本次的頻繁項。apriori 是關聯分析中核心的演算法。apriori 演算法的特點 只能處理分類變數,無法處理數值型變數 資料儲存可以是交易資料格式 事務表 或者是事實表方式 資料 演...