資料探勘 | 親和性分析(一)
首先解釋一下什麼是親和性
舉一個簡單的例子:當顧客在購買一件商品時,往往還會購買另一件商品。比如我們買了麵包就還會買牛奶,買了刀就還會買叉子等等。也就是說,顧客買了商品A,還會購買商品B,這就是親和性的簡單例子
那麼,親和性分析就是對這種規律進行分析,商家就可以將這些同時購買的物品放在一起以提升銷售額啦。當然,實際上的應用遠遠不止這些。親和性分析其實就是根據樣本個體之間的相似度,確定它們關係的親疏。像我們平時看到的電影推薦,廣告推薦等等,就是親和性分析的應用
下面開始分析一個簡單的資料集,來實現商品推薦
資料集
0 1 1 0 1
0 1 0 0 0
0 0 1 1 1
0 0 1 1 1
0 1 0 1 0
這裡每一列表示為一種商品,分別為麵包、牛奶、乳酪、蘋果和香蕉
每一行為一次購買記錄,1表示購買,0表示未購買
下面開始用Python對這個資料集進行分析
載入資料集
環境:Python3.6
使用模組:numpy
#coding: utf-8#coding: utf-8
import numpy as np
# 定義資料集檔名
dataset_filename = "affinity_dataset.txt"
# 載入資料集
X = np.loadtxt(dataset_filename)
# 列印資料集,行為交易資訊,列為商品,各列假設為麵包、牛奶、乳酪、蘋果和香蕉,1表示購買
n_samples, n_features = X.shape
print("資料集共有{0}個樣本和{1}個分支".format(n_samples, n_features))
print(X)
執行結果為:
簡單的資料查詢
現在來一個很簡單的資料查詢,那就是查詢一下有多少位顧客購買了蘋果
# 查詢多少顧客購買了蘋果
num_apple_purchases = 0 # 初始化
for sample in X:
if sample[3] == 1:
num_apple_purchases += 1
print("共有{0}人購買了蘋果".format (num_apple_purchases))
思路很簡單,若每一行第四列的值為1時,變數num_ apple_ purchases的值加一
那麼最終的值即為購買蘋果人數
執行結果為:共有39人購買了蘋果
規則查詢及優劣判斷
現在,開始來尋找一個規則
如果顧客購買了蘋果,那麼他們還購買了香蕉
用程式碼實現很簡單,其實就是統計資料集中第四列和第五列同為1的次數即可
這裡還要補充一下規則的優劣的衡量,常用的是支援度和置信度
比較簡單的支援度即資料集中規則應驗的次數,也就是成立了幾條,就是支援度
置信度就是規則成立的比例,也就是前提成立時這條規則應驗次數佔所有次數的比例
知道了這些,現在開始用程式碼來實現
# 查詢多少人既買了蘋果又買了香蕉,並記錄下規則有效和規則無效的次數
rule_valid = 0
rule_invalid = 0
for sample in X:
if sample[3] == 1: # 購買蘋果
if sample[4] == 1: # 購買香蕉
rule_valid += 1 # 規則成立,次數加一
else:
rule_invalid += 1 # 否則規則不成立
print("共有{0}人既買了蘋果又買了香蕉".format(rule_valid))
print("共有{0}人買了蘋果但沒買香蕉".format(rule_invalid))
# 計算支援度和置信度
support = rule_valid # 支援度即規則有效次數
confidence = rule_valid / num_apple_purchases # 置信度即規則有效比例
print("支援度為:{0},置信度為:{1:.3f}.".format(support, confidence))
# 置信度表示為百分比形式
print("置信度為:{0:.1f}%.".format(100 * confidence))
執行結果為:
共有24人既買了蘋果又買了香蕉
共有15人買了蘋果但沒買香蕉
支援度為:24,置信度為:0.615
置信度為:61.5%.
通過分析,我們知道了“如果顧客購買了蘋果,那麼他們還購買了香蕉”這條規則支援度為24,置信度為0.615。但這只是所有規則中的一種規則,還有其他規則我們還沒有分析。所以,下一次,將會講如何統計所有規則