series_periods_detect()
尋找時間序列中最重要的期間。
series_periods_detect() 函式適用於偵測數據中的定期模式,例如每日、每周或每月週期。
語法
series_periods_detect(
列,
min_period max_period num_periods ,
,
)
深入瞭解 語法慣例。
參數
姓名 | 類型 | 必要 | 描述 |
---|---|---|---|
系列 | dynamic |
✔️ | 數值陣列,通常是make-series或 make_list運算子所產生的輸出。 |
min_period | real |
✔️ | 要搜尋的最小期間長度。 |
max_period | real |
✔️ | 要搜尋的最大期間長度。 |
num_periods | long |
✔️ | 要傳回的期間數上限。 這個數位是輸出動態數位的長度。 |
重要
- 演算法可以偵測包含至少 4 點和最多一半數列長度的期間。
- 設定下方的min_period一點,並max_period您預期在時間序列中找到的期間。 例如,如果您有每小時匯總的訊號,而且您同時尋找每日和每周期間(分別為 24 和 168 小時),您可以設定 min_period=0.8*24,max_period=1.2*168,並保留 20% 的邊界。
- 輸入時間序列必須是一般。 也就是說,在常數量化中匯總,如果是使用 make-series建立,則一律會發生這種情況。 否則,輸出是毫無意義的。
傳回
函式會傳回具有兩個數據行的數據表:
- 句點:動態數位,包含依其分數排序的間隔大小單位找到的期間。
- scores:動態陣列,包含介於 0 到 1 之間的值。 每個陣列都會測量句點在句點陣列中其各自位置的意義。
範例
下列查詢會內嵌應用程式流量的快照集一個月。 每天匯總兩次流量,表示量化大小為12小時。 查詢會產生一個折線圖,清楚顯示數據中的模式。
print y=dynamic([80, 139, 87, 110, 68, 54, 50, 51, 53, 133, 86, 141, 97, 156, 94, 149, 95, 140, 77, 61, 50, 54, 47, 133, 72, 152, 94, 148, 105, 162, 101, 160, 87, 63, 53, 55, 54, 151, 103, 189, 108, 183, 113, 175, 113, 178, 90, 71, 62, 62, 65, 165, 109, 181, 115, 182, 121, 178, 114, 170])
| project x=range(1, array_length(y), 1), y
| render linechart
您可以在相同的數列上執行 series_periods_detect()
函式,以識別週期性模式。 函式會搜尋指定期間範圍內的模式,並傳回兩個值。 第一個值表示偵測到的模式,其長 14 分,分數約為 .84。 另一個值是零,表示找不到其他模式。
print y=dynamic([80, 139, 87, 110, 68, 54, 50, 51, 53, 133, 86, 141, 97, 156, 94, 149, 95, 140, 77, 61, 50, 54, 47, 133, 72, 152, 94, 148, 105, 162, 101, 160, 87, 63, 53, 55, 54, 151, 103, 189, 108, 183, 113, 175, 113, 178, 90, 71, 62, 62, 65, 165, 109, 181, 115, 182, 121, 178, 114, 170])
| project x=range(1, array_length(y), 1), y
| project series_periods_detect(y, 0.0, 50.0, 2)
輸出
series_periods_detect_y_periods | series_periods_detect_y_periods_scores |
---|---|
[14, 0] | [0.84, 0] |
series_periods_detect_y_periods_scores中的值會截斷。
注意
圖表中也會顯示每日模式,但查詢不會傳回此模式,因為取樣太粗(12 小時間隔大小)。 每日期間為 2 個間隔低於演算法所需的最小期間大小 4 點。