Dela via


series_periods_detect()

Gäller för: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft 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

serieperioder.

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.