880 likes | 1.18k Views
第八章 網路資料庫之時間序列分析. 內容概要. 簡介 循序樣式探勘 (Sequential Pattern Mining) 一般化的循序樣式探勘* (Generalized Sequential Pattern Mining) 網頁瀏覽樣式探勘 (Web Traversal Pattern Mining) 總結. 簡介. 前一章介紹如何從網路交易資料庫發掘顧客所購買的物品之間的關係時,並沒有考慮 “交易時間” 這一層關係。 事實上,分析顧客購買物品的時間點可以提供許多有用的資訊。
E N D
內容概要 • 簡介 • 循序樣式探勘 (Sequential Pattern Mining) • 一般化的循序樣式探勘* (Generalized Sequential Pattern Mining) • 網頁瀏覽樣式探勘 (Web Traversal Pattern Mining) • 總結
簡介 • 前一章介紹如何從網路交易資料庫發掘顧客所購買的物品之間的關係時,並沒有考慮 “交易時間” 這一層關係。 • 事實上,分析顧客購買物品的時間點可以提供許多有用的資訊。 • 例如,假設經過分析之後發現,顧客購買 “PC主機” 和 “螢幕” 之後,下一次會購買 “印表機”,再接下來會購買 “隨身碟” 和 “碳粉匣”。 • 根據探勘的結果,可以在每一個合適的階段提供顧客可能購買的物品之相關資訊,再配合適當的行銷手法, 以有效提升整體的銷售業績。
內容概要 • 簡介 • 循序樣式探勘 (Sequential Pattern Mining) • 一般化的循序樣式探勘* (Generalized Sequential Pattern Mining) • 網頁瀏覽樣式探勘 (Web Traversal Pattern Mining) • 總結
循序樣式探勘 • 循序樣式探勘的目的是找出顧客在不同時間點所購買的物品先後之關係。 • 例如,根據消費者每次交易所購買的產品資料與交易時間,發掘出類似下列的循序樣式:“80%的顧客如果購買PC主機和螢幕,則下一次會購買印表機”。 • 本節將介紹循序樣式探勘方法中最基礎、也是最著名的一個演算法 — AprioriAll演算法。
相關定義(1) • 一個序列 (sequence) 是項目集 (itemsets)的有序串列 (ordered list),序列 S被表示成 <s1,s2,…,sn>,其中si (1i n) 是項目集。 • 例如,<(10, 20) (30) (90)> 是一個序列,其中(10, 20)、(30) 以及 (90) 皆是項目集。 • 序列 <a1,a2,…,an> 被包含在序列 <b1,b2,…,bm> 中,假如存在整數 i1<i2< …<in滿足 a1bi1,a2bi2,…,anbin。 • 例如,序列 <(10) (90)> 被包含在 <(10, 20) (30) (90)>。反之,<(10) (90)> 不被包含在 <(10, 90)>,這是因為在序列 <(10) (90)> 中,項目集 (10) 和 (90) 是先後在不同交易中被購買的。
相關定義(2) • 若序列S包含序列S’,則稱序列S’為序列S的 “子序列” (subsequence)。 • 一個包含k個項目集的序列稱之為k-序列(k-sequence)。 • 給定一組序列S,若序列S不被包含在其它序列中,則稱它為 “最大序列” (maximal sequence)。 • 每一個最大序列則代表一個循序樣式(sequential pattern)。 • 對於每一個顧客,將他所有的交易根據交易時間排序所得到的結果就是一個“顧客序列”。
相關定義(3) • 一個序列S的 “支持度” (support) 被定義為 “包含S的顧客序列之總數佔全部顧客總數的比例”。 • 若序列滿足使用者設定的 “最小支持度” (minimum Support) 之限制,則稱之為 “大型序列” (large Sequence)。 • 一旦所有的大型序列都被發掘之後,就可以很容易地產生所有的最大序列。 • 循序樣式探勘的問題就是要找出所有的循序樣式,也就是所有的最大序列。
會員帳號 交易時間 購買的商品編號 1 2003/01/12 10, 20 1 2003/01/31 30 1 2003/03/03 40, 60 2 2003/02/05 10, 20 2 2003/05/08 30 2 2003/07/15 90 3 2003/12/03 30 3 2004/01/23 90 4 2004/02/06 10, 20, 30 5 2003/11/30 30 5 2003/12/17 60, 90 表8-1:依會員帳號和交易時間排序後的資料庫
會員帳號 顧客序列 1 <(10, 20) (30) (40, 60)> 2 <(10, 20) (30) (90)> 3 <(30) (90)> 4 <(10, 20, 30)> 5 <(30) (60, 90)> 表8-2:顧客序列資料庫
範例8-1 • 假設表8-1是從某一線上購物網站資料庫中彙整出來的資料。它所對應的顧客序列如表8-2所示。假設最小支持度為0.25,因為會員帳號總數為5,所以最小支持個數為2。 • 序列<(30)> 和<(30) (90)> 的支持個數分別為5和3,所以它們都是大型序列。 • 雖然序列<(30)> 是大型序列,但它不是最大序列。這是因為序列<(30)> 被包含在大型序列<(30) (90)> 之中。
循序樣式探勘的基本步驟 • 循序樣式探勘基本上包含下列五個步驟: • 步驟一:排序階段。 • 步驟二:大型項目集產生階段。 • 步驟三:轉換階段。 • 步驟四:大型序列產生階段。 • 步驟五:最大序列產生階段。
排序階段 • 將資料庫根據會員帳號和交易時間作排序。排序時,會員帳號當作主鍵(primary key),交易時間當作次要鍵(secondary key)。 • 依據排序之後的結果,即可產生顧客序列資料庫,如表8-2所示。
大型項目集產生階段 • 每一個大型項目集就是一個大型1-序列。應用Apriori演算法可以產生所有大型1-序列。 • 在循序樣式探勘的問題中,項目集的支持度被定義為 “曾在某次交易所購買的項目集中包含此項目集之顧客比例”。 • 假設x是一個項目集,對於每一位顧客來說,x的支持個數最多只能增加一個。 • 當大型項目集產生之後,它們會被對應至一組連續的整數。 • 對應的目的是將項目集視為一個單獨的個體,以減少比對和計算的時間。
大型項目集 支持個數 對應整數 (10) 3 1 (20) 3 2 (30) 5 3 (90) 3 4 (10, 20) 3 5 表8-3:大型項目集與對應的整數
範例8-2 • 假設最小支持個數為3。根據表8-2的顧客序列資料庫,使用Apriori演算法找出所有大型項目集,並且將它們對應到連續的整數,如表8-3所示。 • 例如,項目集(10, 20)(亦即1-序列<(10, 20)>)被包含在會員帳號 “1”、“2”、“4” 的顧客序列中,它的支持個數為3,因此它是大型項目集。 • 項目集(30, 90)(亦即1-序列<(30, 90)>)不被包含在任何的顧客序列中,因此它不是大型項目集。
轉換階段 • 在循序樣式探勘的過程中,經常需要決定某一個序列是否被包含在顧客序列中。為了加速計算的速度,可以根據下列幾個原則將顧客序列做轉換: • 若交易不包含任何大型項目集,則將它從顧客序列中移除。 • 若顧客序列不包含任何大型項目集,則將它從轉換後的資料庫移除。但是在進行相關計算時,顧客總數仍維持不變。 • 顧客序列中的每一個交易以被包含在交易中的大型項目集所成的集合來取代,表示方式為{I1,I2, …,In},其中Ij(1j n) 是大型項目集。 • 例如,假設大型項目集有(10)、(20) 和(10, 20),則交易(10, 20) 將被大型項目集的集合{(10) (20) (10, 20)} 所取代。
範例8-3 • 依據轉換原則,將表8-2的資料庫做轉換,並且將顧客序列中的項目集以對應的整數來表示,如表8-4所示。
會員帳號 轉換後的顧客序列 以對應整數來表示 1 <{(10),(20),(10, 20)} {(30)}> <{1,2,5} {3}> 2 <{(10),(20),(10, 20)} {(30)} {(90)}> <{1,2,5} {3} {4}> 3 <{(30)}{(90)}> <{3} {4}> 4 <{(10),(20),(30),(10, 20)}> <{1,2,3,5}> 5 <{(30)} {(90)}> <{3} {4}> 表8-4:轉換後的資料庫
大型序列產生階段與最大序列產生階段 • 使用ApprioriAll演算法來產生所有大型序列。 • 假設所有大型序列的集合為LS,最長的序列長度為n (亦即包含n個項目集),產生最大序列的方式如下: for (i = n; i > 1; i--) do 對於每一個i-序列S’,從LS中刪除所 有S’ 的子序列
AprioriAll 演算法的基本精神 • 假設符號LSk表示所有大型k-序列(large k-sequence) 所成的集合,CSk表示所有候選k-序列(candidate k-sequence) 所成的集合。 • AprioriAll的基本精神和Apriori演算法類似,它也是使用前一個階段所發掘的大型序列來產生下一個階段的大型序列。 • 首先找出所有大型1-序列LS1,再利用LS1產生候選2-序列CS2 ,藉由計算候選序列的支持度之後,即可產生LS2 。 • 利用LS2產生候選3-序列CS3,再找出LS3,依此類推下去,直到下一個階段無任何大型序列產生為止。
AprioriAll 性質 • 為了減少CSk的大小和將來計算的執行時間,可以應用類似Apriori 性質來減少CSk的大小。 • AprioriAll 性質:若序列C的任何大小為k-1的子序列(subsequence) 不是大型(k-1)-序列,則C必定不是大型k-序列。
候選序列的產生程序 • AprioriAll 演算法使用 “結合” 大型(k-1)-序列的方式來產生候選k-序列。 • 在“刪除”階段則使用AprioriAll 性質去除不可能是大型序列的候選序列。 • 令S1和S2是兩個大型(k-1)-序列。Si[j] 代表序列Si中的第j個項目集。 • 若S1和S2的前k-2個項目集皆相同,則S1和S2將被結合成一個候選k-序列,亦即<S1[1],S1[2], …,S1[k-1],S2[k-1]>。 • 候選k-序列<S1[1],S1[2], …, S1[k-2],S2[k-1],S1[k-1]> 也會產生,這是因為在序列中的項目集之位置不同即代表不同的序列,所以S1和S2結合時要分別考慮這兩個序列。
AprioriAll 演算法 步驟1:LS1 = 大型1-序列所成的集合; 步驟2:for (k = 2; LSk-1≠; k++) do begin 步驟3:CSk = Candidate_seq_gen(LSk-1); 步驟4:for each 在資料庫中的顧客序列C do 步驟5:對於CSk中的每一個候選序列S,若C包含S, 則將S的支持個數增加1; 步驟6:LSk =在CSk中滿足最小支持個數的候選序列 所成的集合; 步驟7:end 步驟8:return 所有大型序列中的最大序列
候選序列產生程序 Candidate_seq_gen Procedure 步驟1:for each 序列S1LSk-1 /* S1[1],S1[2], …, S1[k-1]表示在S1中的k-1個項目集*/ 步驟2:for each 序列S2 LSk-1 /* S2[1],S2[2], …, S2[k-1]表示在S2中的k-1個項目集 */ 步驟3:if (S1[1]=S2[1]) (S1[2]=S2[2]) … (S1[k-2]=S2[k-2]) 步驟4:then {C = {S1[1], S1[2], …, S1[k-2], S1[k-1], S2[k-1]}; 步驟5:if 所有C的大小為k-1的子序列都是大型(k-1)-序列 步驟6:then 將C加入CSk; 步驟7:else 刪除C;} 步驟8:return CSk= 所有候選k-序列所成的集合
範例8-4 (1) • 假設最小支持個數為3。本範例使用表8-3的大型項目集和表8-4轉換後的資料庫,說明AprioriAll演算法產生大型序列的過程。 • 使用候選序列產生程序從LS1產生候選2-序列CS2。AprioriAll 讀取資料庫中的所有顧客序列之後,即可計算CS2中每一個候選序列的支持個數。
候選2-序列 支持個數 候選2-序列 支持個數 <1, 1> 0 <3, 4> 3 <1, 2> 0 <3, 5> 0 <1, 3> 2 <4, 1> 0 <1, 4> 1 <4, 2> 0 <1, 5> 0 <4, 3> 0 <2, 1> 0 <4, 4> 0 <2, 2> 0 <4, 5> 0 <2, 3> 2 <5, 1> 0 <2, 4> 1 <5, 2> 0 <2, 5> 0 <5, 3> 2 <3, 1> 0 <5, 4> 1 <3, 2> 0 <5, 5> 0 <3, 3> 0 範例8-4 (2) • 候選2-序列以及所對應的支持個數
大型2-序列 支持個數 <3, 4> 3 範例8-4 (3) • 刪除CS2中支持個數小於最小支持個數的序列,即可得到大型2-序列LS2。 • 使用候選序列產生程序從LS2產生候選項目集CS3={<3, 4, 4>}。序列<3, 4, 4> 的支持個數為0,所以LS3=。
範例8-4 (4) • 最後得到的大型序列包括 • 大型1-序列:<1>, <2>, <3>, <4>, <5> • 大型2-序列:<3, 4> • 因為大型序列<3> 和<4> 被包含在大型序列<3, 4> 之中,因此大型序列<3> 和<4> 將被刪除。 • 最後所得到的最大序列為:<1>、<2>、<5> 和<3, 4>。根據表8-3大型項目集與對應整數之間的關係,可以將最大序列還原為<(10)>、<(20)>、<(10, 20)> 和<(30) (90)>。
內容概要 • 簡介 • 循序樣式探勘 (Sequential Pattern Mining) • 一般化的循序樣式探勘* (Generalized Sequential Pattern Mining) • 網頁瀏覽樣式探勘 (Web Traversal Pattern Mining) • 總結
簡介 • 假設有一個候選序列為 <(印表機) (隨身碟)>,某一顧客序列為 <(印表機) (碳粉匣) (隨身碟)>,其中顧客序列的 “印表機” 和 “隨身碟” 購買的時間間隔超過一年,那麼此顧客序列 “支持” 候選序列 <(印表機) (隨身碟)> 的意義將大為降低。 • 考慮移動時間視窗(sliding time window) 和時間限制條件(time constraint) 在循序樣式探勘之中,可以更符合實際應用上的需要。
傳統循序樣式探勘的限制(1) • 候選序列中同一項目集的項目只限定在同一個交易。 • 我們可以將條件放寬為 “候選序列中同一項目集的項目可以來自不同的交易,但是要滿足最大交易時間(maximum transaction-time) 和最小交易時間(minimum transaction-time) 的差值小於或等於移動時間視窗”。 • 最大交易時間” 是指在項目集中最晚被購買的商品之交易時間。 • “最小交易時間” 是指在項目集中最早被購買的商品之交易時間。
傳統循序樣式探勘的限制(2) • 缺乏時間限制條件的考慮。 • 我們可以增加條件限制,讓使用者指定序列中相鄰元素(亦即項目集) 的最大和最小時間間隔(maximum and minimum time gaps)。 • 最大時間間隔:在序列中,允許一個項目集裡最後被購買的商品時間和前一個項目集裡最先被購買的商品時間之最大差值。 • 最小時間間隔:在序列中,允許一個項目集裡最先被購買的商品時間和前一個項目集裡最後被購買的商品時間之最小差值。
移動時間視窗和時間限制條件之範例 • 假設移動時間視窗為三天。 • 若顧客購買PC主機一個禮拜後才購買印表機,則此顧客 “不支持” 序列<(PC主機,印表機)>。 • 若顧客購買印表機兩天後即購買碳粉匣,則此顧客 “支持” 序列<(印表機,碳粉匣)>。 • 假設最大和最小時間間隔分別為一個月和三天。 • 若顧客購買PC主機一年後才購買印表機,則此顧客 “不支持” 序列 <(PC主機) (印表機)>。 • 若顧客購買印表機兩天後即購買碳粉匣,則此顧客 “不支持” 序列 <(印表機) (碳粉匣)> 。 • 若顧客購買PC主機一個禮拜後即購買印表機,則此顧客 “支持” 序列 <(PC主機) (印表機)>。
移動時間視窗 • 序列中同一項目集之項目可以來自不同的交易,只要滿足項目集中項目的最大交易時間和最小交易時間的差值小於或等於移動時間視窗的條件。 • 顧客序列C=<C1 C2 … Cm>包含序列S=<S1S2 … Sn>,假如存在整數l1u1<l2u2< … <lnun,滿足下列條件: • 條件一:Si被包含在 ,1in。 • 條件二:交易時間(Cui)交易時間(Cli) 移動時間視窗,1in。
時間限制(1) • 考慮時間限制條件的目的是限定序列中相鄰的元素(亦即項目集)之間的最大和最小的時間間隔。 • 令ws、max-gap和min-gap分別表示移動時間視窗、最大時間間隔和最小時間間隔。 序列包含的定義可以擴充如下:顧客序列C=<C1C2 … Cm>包含序列S=<S1S2 … Sn>,假如存在整數l1u1<l2u2< … <lnun,滿足下列四個條件:
時間限制(2) • 條件一:Si被包含在 ,1in。 • 條件二:交易時間(Cui)交易時間(Cli) ws,1in。 • 條件三:交易時間(Cli)交易時間(Cui-1) min-gap,2in。 • 條件四:交易時間(Cui)交易時間(Cli-1) max-gap,2in。 交易時間(Cui) 代表在Si中項目交易的最晚時間,以end-time(Si)來表示,而交易時間(Cli) 則代表在Si中項目交易的最早時間,以start-time(Si)來表示。
會員帳號 交易時間 購買的項目 1 1 1 2003/01/10 2003/01/20 2003/01/23 2, 3, 5 1, 6 1 2 2 2 2 2003/02/16 2003/02/17 2003/02/21 2003/02/28 4, 5, 6 2 1, 2, 7, 8 1, 6 3 2003/12/14 1, 7, 8 表8-7:網路交易資料庫
範例8-6 • 考慮表8-7的網路交易資料庫,假設ws、max-gap和min-gap分別為一天、十天和三天。依據會員編號 “2” 的顧客序列C = <(4, 5, 6) (2) (1, 2, 7, 8) (1, 6)>,考慮下列三種情況: • C不包含序列S = <(4, 8) (6)>。(不滿足條件二) • C不包含序列S = <(2, 5) (1, 6)>。 (不滿足條件四) • C包含序列S = <(2, 5) (7, 8)>。
相關定義 • 一個包含k個項目的序列稱之為k-序列(k-sequence),亦即k代表項目的個數而非項目集的個數。 • 若序列滿足最大和最小時間間隔、移動時間視窗以及最小支持度等條件,則稱之為大型序列(large sequence) 或是循序樣式(sequential pattern)。
GSP (Generalized Sequential Patterns) 演算法 步驟1:LS1 =大型1-序列所成的集合; 步驟2:for (k = 2; LSk-1≠; k++) do begin 步驟3:CSk = 候選k-序列所成的集合; 步驟4:for each 在資料庫中的顧客序列C do 步驟5:對於CSk中的每一個候選序列S,若C包含 S,則將S的支持個數增加1; 步驟6:LSk =在CSk中滿足最小支持個數的候選序 列所成的集合; 步驟7:end • GSP演算法的架構和AprioriAll演算法的架構幾乎相同,但是在候選序列的產生上有許多差異。
連續子序列 • 給定一個序列S=<S1S2 … Sn> 以及子序列C,若下列任何一個條件成立,則C為S的一個連續子序列: • 條件(1):C是刪除S1或Sn中任何一個項目的結果。 • 條件(2):C是刪除Si中任何一個項目的結果,但是Si至少包含兩個項目,1<i<n。 • 條件(3):C是C’的一個連續子序列,而且C’是S的一個連續子序列。
範例8-7 • 假設有一個序列S = <(2, 3) (4, 5) (7) (8)>,考慮下列情況: • <(3) (4, 5) (7) (8)> 是S的一個連續子序列,因為它滿足條件(1)。 • <(2, 3) (4) (7) (8)> 是S的一個連續子序列,因為它滿足條件(2)。 • <(3) (4) (7) (8)> 是S的一個連續子序列,因為它是<(2, 3) (4) (7) (8)> 的一個連續子序列,且<(2, 3) (4) (7) (8)> 是S的一個連續子序列,所以滿足條件(3)。
候選序列的產生程序(1) • “結合” 步驟:“結合” 大型(k-1)-序列來產生候選k-序列(包含k個項目)。 • 令X1和X2是兩個大型(k-1)-序列。X1.first代表序列X1中的第一個項目,X2.last代表序列X2中的最後一個項目。 • 若X1去除X1.first的結果和X2去除X2.last的結果相同,則X1和X2將被結合成一個候選k-序列。
候選序列的產生程序(2) • 考慮下列兩種情況: • 若X2.last在X2中自成一個獨立的項目集,則將X2.last加入X1當作候選k-序列的最後一個獨立的項目集。 • 例如,假設X1和X2分別為<(1, 2) (5) (6)> 和<(2) (5) (6) (7)>,則X1和X2可以結合產生一個候選序列<(1, 2) (5) (6) (7)>。 • 若X2.last在X2中不是一個獨立的項目集,則將X2.last加入X1的最後一個項目集來產生候選k-序列。 • 例如,假設X1和X2分別為 <(1, 2) (5) (6, 7)> 和 <(2) (5) (6, 7, 8)>,則X1和X2可以結合產生一個候選序列 <(1, 2) (5) (6, 7, 8)>。 • 當考慮CS2的產生時,大型1-序列<(x)> 和<(y)> 可以分別結合產生候選序列<(x, y)> 和<(x) (y)>。
候選序列的產生程序(3) • “刪除” 步驟 • GSP根據下列性質刪除部分候選序列:若候選k-序列S的某一個連續k-1子序列不是大型(k-1)-序列,則S必定不是大型k-序列,因此就可以將S從CSk中移除。
候選序列支持個數的計算 • 計算候選序列的支持個數時,一次讀取一個顧客序列,然後將被包含在顧客序列中的候選序列之支持個數增加一個。 • 候選序列支持個數的計算主要包含下列兩個步驟︰ • 步驟一:使用雜湊樹(hash tree)資料結構來減少需要檢查的候選序列之個數。 • 步驟二:將顧客序列做轉換,以提升在檢查某一個候選序列是否為顧客序列的子序列之執行效能。
雜湊樹的架構 • 雜湊樹包含樹葉節點(leaf node) 與內部節點(interior node)。 • 一個樹葉節點包含許多序列,而一個內部節點則包含一個雜湊表(hash table)。 • 所有候選序列都被儲存在雜湊樹的樹葉節點中。
建立雜湊樹的方法 • 給定雜湊樹的分支個數、雜湊函數(hash function)、以及儲存在樹葉節點的序列個數之最大值 。雜湊樹的建立方式如下: • 步驟一:考慮候選序列中的第一個項目,從樹根節點開始執行下列步驟。 • 步驟二:對考慮的項目應用雜湊函數來計算,根據計算的結果決定往下走哪一條分支。 • 步驟三:若往下進入的節點不是樹葉節點,則繼續考慮序列中的下一個項目,並且回到上一個步驟。 • 步驟四:當進入的節點是樹葉節點時,若樹葉節點尚有儲存空間,則將序列儲存在樹葉節點中,否則將樹葉節點轉換為內部節點,並且依步驟二的方式,考慮下一個項目,重新儲存相關的序列。
範例8-8 (1) • 假設候選序列有<(2) (1)>、<(5) (1)>、<(2) (6)>、<(2,4)>、<(5,6)> 以及<(3,4)>。 • 給定雜湊樹的分支個數為2、儲存在樹葉節點的序列個數之最大值為2、雜湊函數為: “分支位置= 項目值MOD 2” (亦即計算項目值除以2的餘數)。