本文將介紹 Timeseries Insights API 中常用的概念,並嘗試以直觀的方式說明這些概念代表的意義。
活動
事件是 TimeSeries Insights API 使用的資料點和原始輸入內容。從概念上來說,事件代表某個代理程式執行的動作 (例如客戶的交易或新聞文章的發布),或是觀察到的現象 (例如溫度感應器的讀數,或電腦的 CPU 使用率)。
事件包含:
維度
維度代表資料集中事件的屬性類型,以及可採用的值的網域。維度可以是:
- 類別。這個維度的事件資源只能儲存有限/有限值,通常是字串。例如:含有新聞文章的資料集中國家/地區或發布者名稱、含有實際工作環境監控資料的資料集中機器名稱。
- 數字。事件的測量值或一般數值屬性。例如:新聞文章的網頁瀏覽次數、CPU 使用率,或是實際工作環境監控資料的錯誤數量。
資料集
資料集是專案中具有專屬名稱的事件集合。查詢會在同一個資料集內執行。
群組
您可以指定相同的群組 ID (請參閱 Event.groupId
),將事件分組。群組類似於網路活動的「工作階段」。
通常,每個 Event 記錄都會獲得專屬的群組 ID。群組 ID 的用途包括但不限於:
- 來自多個 Event 記錄的相同事件 (具有相同或相似的時間戳記) 的事件 ID,特別是當相同事件的不同屬性來自不同來源,且未在進入系統前合併時。舉例來說,監控同一部裝置的多個感應器,每個感應器都可能產生個別的事件記錄。
- 一系列相關事件 (通常會附上短時間內的時間戳記) 的工作階段 ID。舉例來說,網頁瀏覽工作階段的活動。另一個例子是計程車行程的記錄項目。
- 使用者帳戶 ID,因此所有具有相同群組 ID 的 Event 記錄都屬於同一位使用者。
群組的用途是計算同一群組中事件 (維度) 之間的相關性。舉例來說,如果資料集儲存監控資料 (例如 CPU、RAM 等),則群組可儲存來自單一程序的所有監控資料。這樣一來,我們就能偵測 CPU 使用量增加與其他事件的關聯性,例如先前某個時間點的二進位版本更新。
如果不確定,或是不想計算這類相關性,則每個事件都應具有全域唯一的群組 ID。省略 groupId
會產生類似的效果,系統會根據內容和時間戳記產生內部 groupId
。
配量
切片是資料集的子集,其中包含在某些維度中具有特定值的所有事件。對於類別維度,給定的值是單一固定值;對於數值維度,給定的值是範圍。
舉例來說,假設我們有一份資料集,其中包含國際零售商的銷售資料,而每個事件都是銷售,其中包含下列類別維度:銷售發生的國家/地區、產品名稱、製造產品的公司名稱。此處的切片範例包括:特定產品的所有銷售量、特定公司生產的所有產品在特定國家/地區的所有銷售量。
時間序列
我們使用的時間序列是離散時間,由等時間間隔的點組成。連續時間序列點之間的時間間隔長度稱為時間序列的精細程度。
時間序列的計算方式如下:
- 針對特定切片,收集 [
detectionTime - TimeseriesParams.forecastHistory
,detectionTime + granularity
] 時間間隔中的所有事件。 - 根據時間戳記和精細程度將這些事件分組。如果
E.eventTime
位於 [T
,T + granularity
] 時間間隔內,系統會將事件 E 指派至從 T 時間開始的點。 - 針對時間序列中的每個時間點,匯總以指定數值維度為指標 (
TimeseriesParams.metric
) 的事件,代表這些時間點的值。匯總作業可以透過計數 (如果未指定metric
,通常是事件的所有維度都是類別) 或求和/平均 (如果已指定metric
) 完成。
時間序列點
每個時間序列點都會與相關的時間和值相關聯。
time 實際上是長度為 granularity
的間隔,其中 time
是開始時間。
如果指定 指標 (TimeseriesParams.metric
),則必須是數值維度。系統會使用 TimeseriesParams.metricAggregationMethod
,從時間範圍內所有事件的 metric
維度中,匯總維度值的 value
。
如果未指定指標,點的 value
就是時間間隔內的事件數。
預測
預測特定時間序列的未來值。預測功能會使用時間序列的開頭部分做為訓練資料,用於建構模型。
地平線
我們會從偵測時間開始,預測時間序列的值,直到時間範圍 (由 ForecastParams.horizonTime
欄位提供)。
這個欄位會告訴我們,我們應該預測未來多久的時間。雖然我們在將切片歸類為異常值時,主要會關注偵測點的值,但我們也會預測額外的點,因為這可能會為使用者提供實用的資訊。
偵測時間和偵測點
偵測時間 (由 QueryDataSetRequest.detectionTime
指定) 是我們分析任何潛在異常狀況的時間點。
偵測點是偵測時間的時間序列點。
預期偏差
根據時間序列的穩定性和可預測性,我們對預測的信心程度可能會有所不同。可信度會反映在 EvaluatedSlice.expectedDeviation
欄位中,該欄位會指定偵測時間的預測值的絕對偏差可接受值。
異常狀況
如果切片在偵測期間的預測值與實際值之間的差異高於預期值,就會視為異常值。
我們將實際偏差與預期偏差的差距稱為異常分數:
anomalyScore = (detectionPointActual - detectionPointForecast) / expectedDeviation
一般來說,分數低於 1.0 代表資料片段的歷史記錄中常見的變化,而分數高於 1.0 則需要特別留意,分數越高,異常程度越嚴重。
雜訊門檻
先前定義的異常分數會顯示偏離正常值的統計顯著程度。不過,在許多情況下,這個偏差可能不重要,因為絕對值的變化可能不受關注。
舉例來說,如果時間序列的所有值均平均分佈在 (9.9, 10.1) 範圍內,則 expectedDeviation
會是 ~0.1。如果 detectionPointForecast
是 10.0,而 detectionPointActual
是 10.3,則 anomalyScore
會是 3.0。
如果您更重視絕對值較大的變化,雜訊門檻可透過降低異常分數的方式,對變化幅度低於該門檻的切片加以懲罰:
anomalyScore = (detectionPointActual - detectionPointForecast) / (expectedDeviation + noiseThreshold)