關聯規則分析也稱爲購物籃分析,最早是爲了發現超市銷售數據庫中不同的商品之間的關聯關係。例如,一個超市的經理想要更多的瞭解顧客的購物習慣,比如“哪組商品可能會在一次購物中同時購買?”或者“某顧客購買了個人電腦,那該顧客三個月後購買數碼相機的概率有多大?”他可能會發現如果購買了麪包的顧客同時非常有可能會購買牛奶,這就導出了一條關聯規則“麪包=>牛奶”,其中麪包稱爲規則的前項而牛奶稱爲後項。通過對面包降低售價進行促銷,而適當提高牛奶的售價,關聯銷售出的牛奶就有可能增加超市整體的利潤。
關聯規則分析是數據挖掘中最活躍的研究算法之一,目的是在一個數據集中找出各項之間的關聯關係,而這種關係並沒有在數據中直接表示出來。
一、常用關聯規則方法
算法名稱 |
算法描述 |
Apriori |
關聯規則最常用也是最經典的挖掘頻繁項集的算法,其核心思想是通連接產生候選項及其支持度然後通過剪枝生成頻繁項集 |
FP-Tree |
針對Apriori算法的固有的多次掃描事務數據集的缺陷,提出的不產生候選頻繁項集的方法。Apriori和FP-Tree都是尋找頻繁項集的算法 |
Eclat算法 |
Eclat算法是一種深度優先算法,採用垂直數據表示形式,在概念格理論的基礎上利用基於前綴的等價關係將搜索空間劃分爲較小的子空間。 |
灰色關聯法 |
分析和確定各因素之間的影響程度或若干個子因素(子序列)對主因素(母序列)的貢獻度而進行的一種分析方法 |
二、Apriori算法
以超市銷售數據爲例,提取關聯規則的最大困難在於當存在很多商品時,可能的商品的組合(規則的前項與後項)的數目會達到一種令人望而卻步的程度。因而各種關聯規則分析的算法從不同方面入手,以減小可能的搜索空間的大小以及減小掃描數據的次數。Apriori算法是最經典的挖掘頻繁項集的算法,第一次實現了在大數據集上可行的關聯規則提取,其核心思想是通過連接產生候選項與其支持度,然後通過剪枝生成頻繁項集。
1.關聯規則和頻繁項集
(1)關聯規則的一般形式
(2)最小支持度和最小置信度
最小支持度是用戶或專家定義的衡量支持度的一個閾值,表示項目集在統計意義上的最低重要性;最小置信度是用戶或專家定義的衡量置信度的一個閾值,表示關聯規則的最低可靠性。同時滿足最小支持度閾值和最小置信度閾值的規則稱作強規則。
(3)項集
(4)支持度計算
實例:
#-*- coding: utf-8 -*-
#使用Apriori算法挖掘菜品訂單關聯規則
from __future__ import print_function
import pandas as pd
from apriori import * #導入自行編寫的apriori函數
inputfile = '../data/menu_orders.xls'
outputfile = '../tmp/apriori_rules.xls' #結果文件
data = pd.read_excel(inputfile, header = None)
print(u'\n轉換原始數據至0-1矩陣...')
ct = lambda x : pd.Series(1, index = x[pd.notnull(x)]) #轉換0-1矩陣的過渡函數
b = map(ct, data.as_matrix()) #用map方式執行
data = pd.DataFrame(list(b)).fillna(0) #實現矩陣轉換,空值用0填充
print(u'\n轉換完畢。')
del b #刪除中間變量b,節省內存
support = 0.2 #最小支持度
confidence = 0.5 #最小置信度
ms = '---' #連接符,默認'--',用來區分不同元素,如A--B。需要保證原始表格中不含有該字符
find_rule(data, support, confidence, ms).to_excel(outputfile) #保存結果
輸出:
2.Apriori算法:使用候選產生頻繁項集
Apriori算法的主要思想是找出存在於事務數據集中的最大的頻繁項集,在利用得到的最大頻繁項集與預先設定的最小置信度閾值生成強關聯規則。
(1)Apriori的性質
頻繁項集的所有非空子集也必須是頻繁項集。根據該性質可以得出:向不是頻繁項集I的項集中添加事務A,新的項集一定也不是頻繁項集。
(2)Apriori算法實現的兩個過程如下
-
找出所有的頻繁項集(支持度必須大於等於給定的最小支持度閾值),在這個過程中連接步和剪枝步互相融合,最終得到最大頻繁項集
-
連接步:
-
剪枝步:
-
-
由頻繁項集產生強關聯規則:由上面的過程可知未超過預定的最小支持度閾值的項集已被剔除,如果剩下的這些規則又滿足了預定的最小置信度閾值,那麼就挖掘出了強關聯規則。
實例:結合餐飲行業的實例來講解Apriori關聯規則算法挖掘的實現過程
算法過程實現圖: