Delen via


series_periods_detect()

Hiermee vindt u de belangrijkste perioden die bestaan in een tijdreeks.

Syntax

series_periods_detect(Serie,, min_period, max_periodnum_periods)

Meer informatie over syntaxisconventies.

Parameters

Naam Type Vereist Beschrijving
Serie dynamic ✔️ Een matrix met numerieke waarden, meestal de resulterende uitvoer van de operatoren make-series of make_list .
min_period real ✔️ De minimale periode waarin moet worden gezocht.
max_period real ✔️ De maximale periode waarnaar moet worden gezocht.
num_periods long ✔️ Het maximale aantal vereiste perioden. Dit getal is de lengte van de dynamische uitvoermatrices.

Belangrijk

  • Het algoritme kan perioden met ten minste 4 punten en maximaal de helft van de reekslengte detecteren.
  • Stel de min_period iets hieronder in en max_period iets boven de perioden die u verwacht te vinden in de tijdreeks. Als u bijvoorbeeld een geaggregeerd signaal per uur hebt en u zoekt naar zowel dagelijkse als wekelijkse perioden (respectievelijk 24 en 168 uur), kunt u min_period=0,8*24, max_period=1,2*168 instellen en 20% marges laten rond deze perioden.
  • De invoertijdreeks moet regelmatig zijn. Dat wil gezegd, geaggregeerd in constante opslaglocaties, wat altijd het geval is als het is gemaakt met make-series. Anders is de uitvoer zinloos.

Retouren

Met de functie wordt een tabel met twee kolommen uitgevoerd:

  • perioden: een dynamische matrix met de gevonden perioden, in eenheden van de bin-grootte, geordend op hun scores.
  • scores: een dynamische matrix met waarden tussen 0 en 1. Elke matrix meet de significantie van een periode op de respectieve positie in de matrix met punten .

Voorbeeld

Met de volgende query wordt een momentopname ingesloten van een maand van het verkeer van een toepassing, die tweemaal per dag wordt geaggregeerd. De grootte van de opslaglocatie is 12 uur.

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

Reeksperioden.

Als deze reeks wordt uitgevoerd series_periods_detect() , resulteert dit in de wekelijkse periode, die 14 punten lang is.

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)

Uitvoer

series_periods_detect_y_periods series_periods_detect_y_periods_scores
[14.0, 0.0] [0.84, 0.0]

Notitie

De dagelijkse periode die ook in de grafiek kan worden weergegeven, is niet gevonden omdat de steekproef te grof is (12 uur bin-grootte), dus een dagelijkse periode van 2 bins is lager dan de minimale periodegrootte van 4 punten, vereist door het algoritme.