
算法介紹
以時間順序挖掘周期性的模式(即周期性分析)是一種重要的數據挖掘方式,在以前的研究中我們假設每個時間點只發生一個事件,然而在這篇文章中我們研究一種更普遍的模式:即在每個時間點可以發生多個事件。
在這個算法中我們需要自己設置三個參數:min_rep, max_dis, global_rep。分別代表“一個有效序列的最小重復次數”、“相鄰有效序列最大允許擾動”、“有效序列總的要求重復次數”。其實在算法最后中我們會發現,我們也可以設置另外一個參數Lmaxn,即允許的最大周期。
最后,這個算法原作者似乎認為效果不錯,->.->
問題定義
在這個部分中,我們定義一些異步周期挖掘的問題。
E代表所有事件的集合,即一個事件的集合一定是E的一個非空子集。信息庫D是一系列的時間記錄,每一個記錄用一個數組來表示(tid, X),表示在tid時刻發生了集合X中的事件。同時D的這種表示方法我們定義為水平表達格式(horizontal format),具體請看下表。同時對于另一個事件集合Y,我們定義Y是被一個時間記錄所支持需滿足:Y?X。一個有k個事件的序列一般稱為k-事件序列(k-event set)。
Time | Event Set | Time | Event Set | Time | Event Set |
---|---|---|---|---|---|
1 | A, B, C | 7 | A, B, C, D | 13 | A, C, D |
2 | B, D | 8 | A | 14 | A, C |
3 | A, C, D | 9 | A, C, D | 15 | A, D |
4 | B | 10 | A, C | 16 | A, C, D |
5 | A, C | 11 | D | 17 | A |
6 | D | 12 | A, B, C, D | 18 | A, B, C, D |
定義 1:一個以l為周期的模式是一個非空序列P=(p1,p2,…,pl),其中p1是一個事件序列,其他的或者是一個事件序列,或者是*,即可以理解為任何序列。
一個模式P若包含i個事件則被稱作i-模式(i-pattern)。特別的,我們稱1-模式為單模式(singular patterns),當i>1時我們稱之為復雜模式(complax patterns),例如(A, *, *)是一個單模式而(A, B, *)是一個2-模式,也稱為復雜模式。如果一個模式不包含任何“*”我們就稱之為滿模式(full pattern),否則就稱之為部分模式(partial pattern)。
定義 2:設有周期為了的模式P=(p1,p2,…,pl)和一個包含l個事件的集合D’=(d1,d2,…,dl),我們定義P匹配D’當且僅當對于每個j(1<=j<=l),或者pj=*,或者pj?dj。D’也可以稱為P的一個匹配項。
比如現在有一個模式P=(A, B, *),那么*顯然可以和任何事件序列匹配,于是如果我們有D=(A, B, C)就是一個P的一個匹配項。
定義 3:為了方便,我們用一個4元組(P, l, rep, pos)來定義一個模式片段P,它的周期l,開始位置是pos,并重復rep次,一般我們假設這個rep要取最大值(maximum segment)。
定義 4:一個最大片段(maximum segment)是一個有效片段當且僅當其重復次數不小于參數min_rep。
我們再定義一下擾動的概念:連個片段的擾動就是第一個片段的尾部和第二個片段的開始的位置之間的距離。例如在下圖中,S1和S3之間的擾動是8(15 – 3)。
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
A | C | B | A | E | D | A | A | B | C | A | B | C | A | A | D | A | A | B | C | A | E | C |
D1 | D1 | D1 | D2 | D2 | D2 | D3 | D3 | D3 |
|
|
|
|
|
D8 | D8 | D8 | D9 | D9 | D9 | D10 | D10 | D10 |
S1 | S1 | S1 | S1 | S1 | S1 | S1 | S1 | S1 |
|
|
|
|
|
S3 | S3 | S3 | S3 | S3 | S3 | S3 | S3 | S3 |
定義 5:假設一個時間的數據庫D和一個模式P,序列D是一系列不重合的有效序列,并且其中任意相鄰片段的擾動小于一個預定的值,我們稱之為最大擾動max_dis。一個序列被稱作是有效的當且僅當P的全部的重合的次數大于一個預定的參數global_rep。
對于Fig.1b,如果我們設min_rep = 2, global_rep = 6, max_dis = 8,那么我們將會得到兩個有效序列(S1, S2),和(S1, S3)。而我們的任務找到所有有效的周期序列,其周期在1~Lmax之間,其中Lmax由用戶給定。
算法預覽
在這個模塊中,我們從挖掘單模式的周期序列到復雜模式周期序列,展示一下在時間數據庫中異步周期序列挖掘的過程。首先一個稱為“SPMiner”被用來找所有的單模式周期序列,它的原理主要是潛在循環試探(Potential Cycle Detection)和基于哈希的表(Hash-Based Validation)。然后,兩個算法“MPMiner”和“CPMiner”被用來尋找有效的多重單模式(multievent 1-patterns)和復雜模式序列(complex patterns)。最后,所有的有效片段都可以組合在一起來檢測是否滿足要求,即最后的”APMiner”。詳細見下圖:
現在我們分步驟來講解每一步的具體方法及部分偽代碼
SPMiner:Segment Mining for Single Event Pattern
首先,我們在前面提過一種叫做水平數據格式(horizontal database layout)的數據結構,現在我們要使用一種和其相對應的垂直數據格式(vertical database format),具體請見下表,它可以大大提高我們的搜索效率。
Event | TimeList |
---|---|
A | 1, 3, 5, 7, 8, 9, 10, 12, 13, 14, 15, 16, 17, 18 |
B | 1, 2, 4, 7, 12, 18 |
C | 1, 3, 5, 7, 9, 10, 12, 13, 14, 16, 18 |
D | 2, 3, 6, 7, 9, 11, 12, 13, 15, 16, 18 |
PCD算法(Potential Cycle Detection)測探所有在1~Lmax之間的可能周期,具體看偽代碼。
HBV算法(Hash-Based Validation)可以對于每個潛在的周期p和一個事件列表e,通過遍歷一遍事件表來找出所有的單模式序列。具體看偽代碼。
Procedure of SPMiner(D, Lmax)
for each event Ei ∈ VD do:
PCD(Ei, TimeList);
for p = 1 to Lmax do
if(CheckSet[p] >= min_rep)
then HBV(Ei, Ei.TimeList, p);
Procedure of PCD(TimeList)
for i = 1 to i <= Lmax do CheckSet[i] = 1;
for each time instant Ti ∈ TimeList do
for each time instant Tj ∈ TimeList, i < j do
if((Tj - Ti) <= Lmax) then
CheckSet[Tj - Ti]++;
else break;
Procedure of HBV(EvtSet, TimeList, p)
Allocate data structure Cseg[p];
for i = 0 to p - 1 do /* Initilization */
Cseg[i].last = -Max; Cseg[i].rep = 1;
/* Validation */
for each time instant Ti ∈ TimeList do
pos = Ti % p;
if(Ti - Cseg[pos].last == p) then
Cseg[pos].rep++; Cseg[pos].last = Ti; continue;
if(Cseg[pos].rep >= min_rep) then
Output(EvtSet, p, Cseg[pos].rep, Cseg[pos].last - p * (Cseg[pos].rep - 1));
Cseg[pos].rep = 1; Cseg[pos].last = Ti;
for i = 0 to p - 1 do /* Rechecking */
if(Cseg[i].rep >= min_rep) then
Output(EvtSet, p, Cseg[i].rep, Cseg[i].last - p * (Cseg[i].rep - 1));
最后我們會得到如下的結果
Pattern | Period | Rep | Start |
---|---|---|---|
A | 1 | 7 | 12 |
A | 2 | 5 | 1 |
A | 2 | 6 | 8 |
C | 2 | 5 | 1 |
C | 2 | 5 | 10 |
D | 2 | 5 | 7 |
D | 3 | 6 | 3 |
這里我們直接介紹推薦的SBE算法(Segment-Based Enumeration)。
SBE算法的思路是,對于一個周期p,先在上表中找到周期為p的項。我們假設一個變量off = start % p,這樣我們在此步找到的組合內部off則一定相同。如果最后重合部分還大于參數min_rep,那么我們就成功的找到了一組答案了。而對于重合的部分,我們也可以根據上表在O(1)的時間內計算出來。
這一步的做法和上一步的SBE算法十分相似。
不過在上一步中我們要求off相同才能放在一組,而在這一步中我們要求off必須不同才能在一組,偽代碼如下
Procedure of CPMiner(p, SegListp, w.r.t period p)
for each segment Si ∈ SegListp; do
Node.Head = Si;
Node.Tail = all segment Sj ∈ SegList with j > i;
Node.start = Si.start;
Node.end = Si.start + (Si.rep - 1) * p;
CP(Node, p);
Subprocedure of CP_DFS(Node, p)
if(|Node.Head| == p) then return ;
for each segment Si ∈ Node.Tail do
Valid = True;
for each setment Sj ∈ Node.Head do
if((Si.start - Sj.start) % p == 0) then
Valid = false; break;
if(Valid == false) then continue;
newC.start = Si.start;
newC.end = Min{Node.end, Si.start + (Si.rep - 1) * p}; //take care
rep = ?(newC.end - newC.start) / p? + 1; //take care
if(rep >= min_rep)
newC.Head = Node.Head ∪ Si;
newC.Tail = all Sk ∈ Node.Tail with k > i;
PatternOutput(newC, p, rep)
CP_DFS(newC, p);
else if(Node.end - Node.start + 1 < p * min_rep) break;
Subprocedure of PatternOutput(Node, p, rep)
Shift = Node.end % p //take care not Node.start!
for i = 1 to p do Pattern[i] = *;
for each segment Si ∈ Node.Head do
Pattern[(Si.start - Shift) % p] = Si.EvtSet;
Output(Pattern, rep, p, Node.end - (rep - 1) * p);
就像我們在定義5中說的那樣,一個異步周期模式被定義為有一組序列互不重合。因此我們還需使用深度優先搜索來枚舉所有的組合方式?,F在假設我們把所有的片段按照開始的時間排序,一個單模式的片段如果重復次數大于global_rep,那么它本身就是一個合法答案,但是每次枚舉過程中,我們總要盡力的把新的事件加入到已有的事件序列中。同時,如果新的片段距離的開始位置距離已有片段的距離小于max_dis,那么我們也可以把它加入進去。但是一旦上述條件不符合的話,我們就可以跳出搜索了,因為我們是按照開始的時間順序有小到大排序的,這樣可以達到剪枝的效果。
數據分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
CDA數據分析師證書考試體系(更新于2025年05月22日)
2025-05-26解碼數據基因:從數字敏感度到邏輯思維 每當看到超市貨架上商品的排列變化,你是否會聯想到背后的銷售數據波動?三年前在零售行 ...
2025-05-23在本文中,我們將探討 AI 為何能夠加速數據分析、如何在每個步驟中實現數據分析自動化以及使用哪些工具。 數據分析中的AI是什么 ...
2025-05-20當數據遇見人生:我的第一個分析項目 記得三年前接手第一個數據分析項目時,我面對Excel里密密麻麻的銷售數據手足無措。那些跳動 ...
2025-05-20在數字化運營的時代,企業每天都在產生海量數據:用戶點擊行為、商品銷售記錄、廣告投放反饋…… 這些數據就像散落的拼圖,而相 ...
2025-05-19在當今數字化營銷時代,小紅書作為國內領先的社交電商平臺,其銷售數據蘊含著巨大的商業價值。通過對小紅書銷售數據的深入分析, ...
2025-05-16Excel作為最常用的數據分析工具,有沒有什么工具可以幫助我們快速地使用excel表格,只要輕松幾步甚至輸入幾項指令就能搞定呢? ...
2025-05-15數據,如同無形的燃料,驅動著現代社會的運轉。從全球互聯網用戶每天產生的2.5億TB數據,到制造業的傳感器、金融交易 ...
2025-05-15大數據是什么_數據分析師培訓 其實,現在的大數據指的并不僅僅是海量數據,更準確而言是對大數據分析的方法。傳統的數 ...
2025-05-14CDA持證人簡介: 萬木,CDA L1持證人,某電商中廠BI工程師 ,5年數據經驗1年BI內訓師,高級數據分析師,擁有豐富的行業經驗。 ...
2025-05-13CDA持證人簡介: 王明月 ,CDA 數據分析師二級持證人,2年數據產品工作經驗,管理學博士在讀。 學習入口:https://edu.cda.cn/g ...
2025-05-12CDA持證人簡介: 楊貞璽 ,CDA一級持證人,鄭州大學情報學碩士研究生,某上市公司數據分析師。 學習入口:https://edu.cda.cn/g ...
2025-05-09CDA持證人簡介 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度、美團、阿里等 ...
2025-05-07相信很多做數據分析的小伙伴,都接到過一些高階的數據分析需求,實現的過程需要用到一些數據獲取,數據清洗轉換,建模方法等,這 ...
2025-05-06以下的文章內容來源于劉靜老師的專欄,如果您想閱讀專欄《10大業務分析模型突破業務瓶頸》,點擊下方鏈接 https://edu.cda.cn/g ...
2025-04-30CDA持證人簡介: 邱立峰 CDA 數據分析師二級持證人,數字化轉型專家,數據治理專家,高級數據分析師,擁有豐富的行業經驗。 ...
2025-04-29CDA持證人簡介: 程靖 CDA會員大咖,暢銷書《小白學產品》作者,13年頂級互聯網公司產品經理相關經驗,曾在百度,美團,阿里等 ...
2025-04-28CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-27數據分析在當今信息時代發揮著重要作用。單因素方差分析(One-Way ANOVA)是一種關鍵的統計方法,用于比較三個或更多獨立樣本組 ...
2025-04-25CDA持證人簡介: 居瑜 ,CDA一級持證人國企財務經理,13年財務管理運營經驗,在數據分析就業和實踐經驗方面有著豐富的積累和經 ...
2025-04-25