概念

本文將介紹 Timeseries Insights API 中常用的概念,並嘗試以直觀的方式說明這些概念代表的意義。

活動

事件是 TimeSeries Insights API 使用的資料點和原始輸入內容。從概念上來說,事件代表某個代理程式執行的動作 (例如客戶的交易或新聞文章的發布),或是觀察到的現象 (例如溫度感應器的讀數,或電腦的 CPU 使用率)。

事件包含:

  • 跨不同維度的一組值,代表描述事件的屬性,例如標籤或數值測量。
  • 代表事件發生時間的時間戳記。這個時間戳記會在匯總事件以形成時間序列時使用。
  • 群組 ID。

維度

維度代表資料集中事件的屬性類型,以及可採用的值的網域。維度可以是:

  • 類別。這個維度的事件資源只能儲存有限/有限值,通常是字串。例如:含有新聞文章的資料集中國家/地區或發布者名稱、含有實際工作環境監控資料的資料集中機器名稱。
  • 數字。事件的測量值或一般數值屬性。例如:新聞文章的網頁瀏覽次數、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。如果 detectionPointForecast10.0,而 detectionPointActual10.3,則 anomalyScore 會是 3.0

如果您更重視絕對值較大的變化,雜訊門檻可透過降低異常分數的方式,對變化幅度低於該門檻的切片加以懲罰:

anomalyScore = (detectionPointActual - detectionPointForecast) / (expectedDeviation + noiseThreshold)

後續步驟