series_periods_detect()
Gäller för: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Hittar de viktigaste perioderna inom en tidsserie.
Funktionen series_periods_detect() är användbar för att identifiera periodiska mönster i data, till exempel dagliga, veckovisa eller månatliga cykler.
Syntax
series_periods_detect(
serie,
min_period,
max_period,
num_periods)
Läs mer om syntaxkonventioner.
Parametrar
Namn | Typ | Krävs | Beskrivning |
---|---|---|---|
serie | dynamic |
✔️ | En matris med numeriska värden, vanligtvis resultatet av eller make_list operatorer. |
min_period | real |
✔️ | Den minsta tidslängd som sökningen ska utföras för. |
max_period | real |
✔️ | Den maximala periodlängd som sökningen ska utföras för. |
num_periods | long |
✔️ | Det maximala antalet perioder som ska returneras. Det här talet är längden på de dynamiska matriserna för utdata. |
Viktig
- Algoritmen kan identifiera perioder som innehåller minst 4 punkter och högst hälften av seriens längd.
- Ställ in min_period lite nedan och max_period lite över de perioder som du förväntar dig att hitta i tidsserien. Om du till exempel har en aggregerad signal per timme och letar efter både dagliga och veckovisa perioder (24 respektive 168 timmar) kan du ange min_period=0,8*24, max_period=1,2*168 och lämna 20% marginaler runt dessa perioder.
- Indatatidsserien måste vara vanlig. D.v.s. aggregerade i konstanta lagerplatser, vilket alltid är fallet om det har skapats med hjälp av make-series. Annars är utdata meningslösa.
Returnerar
Funktionen returnerar en tabell med två kolumner:
- perioder: En dynamisk matris som innehåller de punkter som hittades, i enheter av lagerplatsstorleken, ordnade efter deras poäng.
- poäng: En dynamisk matris som innehåller värden mellan 0 och 1. Varje matris mäter betydelsen av en period i sin respektive position i de perioderna matris.
Exempel
Följande fråga bäddar in en ögonblicksbild av programtrafik i en månad. Mängden trafik aggregeras två gånger om dagen, vilket innebär att bin-storleken är 12 timmar. Frågan skapar ett linjediagram som tydligt visar ett mönster i data.
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
Du kan köra funktionen series_periods_detect()
i samma serie för att identifiera de återkommande mönstren. Funktionen söker efter mönster i det angivna periodintervallet och returnerar två värden. Det första värdet anger ett identifierat mönster som är 14 punkter långt med en poäng på cirka .84. Det andra värdet är noll som anger att inget ytterligare mönster hittades.
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)
utdata
series_periods_detect_y_periods | series_periods_detect_y_periods_scores |
---|---|
[14, 0] | [0.84, 0] |
Värdet i series_periods_detect_y_periods_scores trunkeras.
Not
Det finns också ett dagligt mönster som visas i diagrammet, men det returneras inte av frågan eftersom samplingen är för grov (12h bin-storlek). En daglig period på 2 lagerplatser är lägre än den minsta periodstorleken på 4 punkter, vilket krävs av algoritmen.