4. 實驗
4.1. Apriori 演算法之資料庫實作(使用 MS SQL Server 2000)─手機為例
本研究將應用關聯規則探勘技術於分析購買手機的屬性,並利用 MS SQL Server 2000 實作 Apriori 演算法,其資料庫設計如圖 4-1 所 示。流程如圖 4-2 所示共有 TD、C1、C2、C3、L1、L2、L3 及 AR 等 資料表,詳細說明如下:
(1). TD 資料表:用以儲存消費者個人屬性以及手機產品屬性等資 料,例如:A1B2。在本研究中,消費者購買手機問卷的題號以 A, B, C 方式編碼,每一問題中的選項則以 1, 2, 3 方式編碼。故 A1B2 表示消費者的第一題的選項選 1 且表示第二題的選項選 2,依此 類推。
(2). C1、C2、C3 資料表:分別儲存項目集長度為 1, 2, 3 的候選項目 集以及其出現的次數。
(3). L1、L2、L3 資料表:分別儲存項目集長度為 1, 2, 3 的高頻項目 集以及其出現的次數。
(4). AR 資料表:用以儲存最後產生的關聯規則其信心度與相關係數 等資料。
圖 4-1、資料表-手機
在建立關聯規則之前,我們必須先做一些前置處理,首先從原始 資料表經過編碼後並產生TD 資料表,利用 TD 資料表產生選出候選 項目並存入 C1 資料表,若候選項目滿足本研究的最小支持度之條 件,則成為高頻項目並存入 L1 資料表。在組合 C2 資料表的項目集 (Items)過程中,利用 L1資料表的高頻項目組合,再判斷 C2資料表中 的候選項目集是否符合最小支持度,符合者則成為 L2 資料表的高頻 項目集,而在組合 C3資料表的項目集(Items)過程中,利用 L2資料表 的高頻項目集組合,再判斷 C3資料表中的候選項目集是否符合最小 支持度,符合者則成為L3資料表的高頻項目集。最後用L2之高頻項 目集儲存產生的關聯規則至AR 資料表,其內容為信心度與相關係數
等資料,由以上所敘述之流程參照圖4-2。
1 2 3 4 5 6 7
I
平均多久換手
機? 0.5 年 1 年 1.5 年 2 年 2.5 年 3 年 以上
J 性別 男 女
K 興趣 運動 音樂 電影 旅遊 閱讀
(1). 消費者手機問卷編碼如圖 4-3 所示,顯示 TD 部分資料以表 4-1 顯 示問卷編碼,其中並以「A3B1C2D2E2F1G1H4I6J1K2K3K4」這 筆資料為例,則其意義為:「大三學生,想購買的手機顏色為黑色 且為折疊款式,希望手機具備遊戲的加值服務,而購買手機地點 為通訊行,未來想購買 Sony 廠牌,希望手機強調數位相機的功 能,價位設定在六千至八千之間,平均三年才換一次手機,男生,
興趣為音樂、電影、旅遊。」
圖 4-3、手機問卷資料編碼
(2). 本研究所使用到的預存程序一共有 16 支程式,如表 4-2 所示:
表4-2、預存程序簡略說明(一)
預存程序名稱 說明
1 sp_CreateC1 篩選出長度為 1 且不重複的候選項目
2 sp_CountC1 計算長度為 1 的候選項目在 TD 出現的次數 3 sp_DetermineL1 利用支持度從 C1 篩選出高頻項目
4 sp_CreateC2 將 L1 Join 為長度為 2 且不重複的候選項目集 5 sp_CountC2 計算長度為 2 的候選項目集在 TD 出現的次數 6 sp_AntiMonotoneC2 計算長度為 2 的候選項目集是否符合反單調性 7 sp_DetermineL2 利用支持度從 C2 篩選出高頻項目集
8 sp_CreateC3 將 L2 Join 為長度為 3 且不重複的候選項目集 9 sp_CountC3 計算長度為 3 的候選項目集在 TD 出現的次數 10 sp_AntiMonotoneC3 計算長度為 3 的候選項目集是否符合反單調性 11 sp_DetermineL3 利用支持度從 C3 篩選出高頻項目集
12 sp_CreateAR 將 L2 的資料 insert 到 AR 做關聯規則 13 sp_ICountAR 計算出 ICount 欄位的值
14 sp_LCountAR 計算出 LCount 欄位的值 15 sp_RCountAR 計算出 RCount 欄位的值
16 sp_SuppConfCorrAR 計算出 Supp、Conf、Corr 欄位的值 z 產生 C1:
(1).sp_CreateC1 的運算過程
如圖4-4 所示,sp_CreateC1 程式的目的在於從資料庫中篩選 出長度為 1 的候選項目,如:A1。本研究運用預存程序(Stored Procedure)的 cursor 逐筆從資料庫找出不重複候選項目。作法如 下:運用迴圈的方式,逐筆過濾交易資料的資料項目。若所篩選 出的項目不存在於候選項目集中,則新增該項目至候選項目集 中。運用此方式,所有長度為1 的候選項目皆可加入至候選項目 集中。
圖 4-4、預存程序 sp_CreateC1-手機 (2). sp_CountC1 的運算步驟
如圖 4-5 所示,sp_CountC1 程式的目的在於累加 C1資料表 中長度為 1 候選項目的出現次數,如 A1 在第一筆、第二筆、第 四筆中各出現過一次,總計次數為 3。本研究運用預存程序從交 易資料庫逐筆抓取資料項目集如 A1 到 K4 含多個項目集,利用 SQL 的 like 語法做近似查詢判斷是否有符合之項目,並將符合之
項目依序做次數的累加,作法如下,用where 下條件,逐筆從交 易資料庫中找出相同的資料項目。運用此方式,所有長度為1 的 候選項目出現頻率皆可計算出至C1資料表中。
圖 4-5、預存程序 sp_CountC1-手機 z 產生 L1:
(1). sp_DetermineL1 的運算步驟
如圖 4-6 所示,sp_ DetermineL1 程式的目的在於從 C1資料 表中篩選出長度為1 的高頻候選項目。作法如下:運用數學運算 符號,逐筆過濾 C1 資料表中必須大於或等於@minsup(為最小支 持度*總筆數)的項目。運用此方式,逐筆篩選出符合條件之"高頻
"項目,並加入至 L1資料表中。
圖 4-6、預存程序 sp_DetermineL1-手機 z 產生 C2:
(1). sp_CreateC2 的運算步驟
如圖 4-7 所示,sp_CreateC2 程式的目的在於從 L1 中篩選組 合出長度為 2 的候選項目集,如:A1A2。本研究運用預存程序 (stored procedure)從 L1資料表中的候選項目逐筆做遞增式排序組 合。作法如下:運用結合(Join)的方式,逐筆依遞增的排序來避免
產生重複的候選項目集。運用此方式,將所篩選出長度為2 的候 選項目集,新增該項目集至C2資料表中。
圖 4-7、預存程序 sp_CreateC2-手機 (2). sp_CountC2 的運算步驟
如圖 4-8 所示,sp_CountC2 程式的目的在於累加 C2資料表 中長度為2 的候選項目集出現次數,如 A1B2 在第一筆、第二筆、
第四筆中各出現過一次,總計次數為 3。本研究運用預存程序從 交易資料庫逐筆抓取資料項目集如A1 到 K4 含多個項目集,利用 SQL 的 like 語法做近似查詢判斷是否有符合之項目集,並將符合 之項目集依序做次數的累加,作法如下,用where 下條件,逐筆 從交易資料庫中找出相同的資料項目集。運用此方式,所有長度 為 2 的 候 選 項 目 集 出 現 頻 率 皆 可 計 算 出 至 C2 資 料 表 中 。
圖 4-8、預存程序 sp_CountC2-手機 (3). sp_AntiMonotoneC2 的運算步驟
如圖 4-9 所示,sp_AntiMonotoneC2 程式的目的在於執行反 單調性。本研究運用預存程序(stored procedure)從 C2資料表中刪 除不滿足AntiMonotone 性質的候選項目集。作法如下:運用刪除 (prune)的方式,逐筆審核 C2資料表中的候選項目集。將長度為2
的候選項目集(如 A1A2)拆分為兩個長度為 1 的候選項目(如 A1、
A2)後,發現長度為 1 的候選項目並不存在於 L1 資料表中,則刪 除該候選項目集。運用此方式,所有長度為2 的候選項目集皆可 依此步驟做反單調之特性。
圖 4-9、預存程序 sp_AntiMonotoneC2-手機 z 產生 L2:
(1). sp_DetermineL2 的運算步驟
如圖 4-10 所示,sp_DetermineL2 程式的目的在於從 C2資料 表中篩選出長度為2 的高頻候選項目集。作法如下:運用數學運 算符號,逐筆過濾 C2 資料表中必須大於或等於@minsup(為最小 支持度*總筆數)的項目集。運用此方式,若所篩選出的項目集符 合條件,則該高頻項目集皆可加入至L2資料表中。
圖 4-10、預存程序 sp_DetermineL2-手機 z 產生 C3:
(1). sp_CreateC3 的運算步驟
如圖4-11 所示,sp_CreateC3 程式的目的在於從 L2中篩選組 合出長度為 3 的候選項目集,如:A1A2B1。本研究運用預存程序
從L2資料表中的候選項目集逐筆做遞增式排序組合。作法如下:
運用結合的方式,逐筆依遞增的排序來避免產生重複的候選項目 集。運用此方式,將所篩選出長度為3 的候選項目集,新增該項 目集至C3資料表中。
圖 4-11、預存程序 sp_CreateC3-手機 (2). sp_CountC3 的運算步驟
如圖4-12 所示,sp_CountC3 程式的目的在於累加 C3資料表 中長度為 3 的候選項目集出現次數,如 A1 在第一筆、第二筆、
第四筆中各出現過一次,總計次數為 3。本研究運用預存程序從 交易資料庫逐筆抓取資料項目集如A1 到 K4 含多個項目集,利用 SQL 的 like 語法做近似查詢判斷是否有符合之項目集,並將符合 之項目集依序做次數的累加,作法如下,用where 下條件,逐筆 從交易資料庫中找出相同的資料項目集。運用此方式,所有長度 為3 的候選項目集出現頻率皆可計算出至 C3資料表中。
圖 4-12、預存程序 sp_CountC3-手機
(2). Sp_AntiMonotoneC3 的運算步驟
如圖4-13 所示,sp_AntiMonotoneC3 程式的目的在於執行反 單調性。本研究運用預存程序(stored procedure)從 C3資料表中刪 除不滿足AntiMonotone 性質的候選項目集。作法如下:運用刪除 (prune)的方式,逐筆審核 C3資料表中的候選項目集。將長度為3 的候選項目集(如 A1A2B1)拆分為三個長度為 2 的候選項目(如 A1A2、A2B1、A1B1)後,發現長度為 2 的候選項目集並不存在 於L2資料表中,則刪除該候選項目集。運用此方式,所有長度為 3 的候選項目集皆可依此步驟做反單調之特性。
圖 4-13、預存程序 sp_AntiMonotoneC3-手機 z 產生 L3:
(1). sp_DetermineL3 的運算步驟
如圖4-14 所示,sp_ DetermineL3 程式的目的在於從 C3資料 表中篩選出長度為3 的高頻候選項目。作法如下:運用數學運算 符號,逐筆過濾 C3 資料表中必須大於或等於@minsup(為最小支 持度*總筆數)的項目。運用此方式,逐筆篩選出符合條件之"高頻
"項目集,加入至 L3資料表中。
圖 4-14、預存程序 sp_DetermineL3-手機 z 產生 AR:
(1). sp_CreateAR 的運算步驟
如圖4-15 所示,sp_CreateAR 程式的目的在於利用 L2資料表 中的資料來做Apriori 演算法之關聯規則分析。本研究運用預存程 序(stored procedure) 的 cursor,逐筆從 L2資料表中的高頻項目集 個別做項目分類和新增(如欄位 Itmes、LHI、RHI)。作法如下:
運用迴圈的方式,逐筆的把高頻項目集一次新增2 筆至 AR 資料 表(因為 A1B1 可以產生 A1→B1 及 B1→A1 兩項關聯規則)。以此 方式,將所篩選出長度為 2 的高頻項目集與長度為 1 的候選項 目,新增該項目集至AR 資料表中。
圖 4-15、預存程序 sp_CreateAR-手機
(2). sp_ICountAR 的運算步驟
如圖4-16 所示,sp_ICountAR 程式的目的在於計算 AR 資料 表的欄位 ICount。作法如下:運用 where 下條件,AR 資料表的 欄位Items 必須等於 L2的資料表中的欄位 Items,則 AR 資料表中 的 ICount 會等於 L2的資料表中的 Counts。運用此方式,若條件 符合,則該L2資料表中的Coumts 皆可加入至 AR 資料表之 ICount 中。
圖 4-16、預存程序 sp_ICountAR-手機 (3). sp_LCountAR 的運算步驟
圖 4-16、預存程序 sp_ICountAR-手機 (3). sp_LCountAR 的運算步驟