1. 程式人生 > >資料探勘 | 親和性分析(一)

資料探勘 | 親和性分析(一)

首先解釋一下什麼是親和性

舉一個簡單的例子:當顧客在購買一件商品時,往往還會購買另一件商品。比如我們買了麵包就還會買牛奶,買了刀就還會買叉子等等。也就是說,顧客買了商品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。但這只是所有規則中的一種規則,還有其他規則我們還沒有分析。所以,下一次,將會講如何統計所有規則