Condividi tramite


series_periods_detect()

Trova i periodi più significativi presenti in una serie temporale.

Sintassi

series_periods_detect(serie, min_period max_period num_periods ,,)

Altre informazioni sulle convenzioni di sintassi.

Parametri

Nome Digita Obbligatorio Descrizione
serie dynamic ✔️ Matrice di valori numerici, in genere l'output risultante degli operatori make-series o make_list .
min_period real ✔️ Periodo minimo per il quale eseguire la ricerca.
max_period real ✔️ Periodo massimo per il quale eseguire la ricerca.
num_periods long ✔️ Numero massimo di periodi richiesti. Questo numero sarà la lunghezza delle matrici dinamiche di output.

Importante

  • L'algoritmo può rilevare periodi contenenti almeno 4 punti e al massimo la metà della lunghezza della serie.
  • Impostare il min_period un po ' sotto e max_period un po 'sopra i periodi che si prevede di trovare nella serie temporale. Ad esempio, se si dispone di un segnale aggregato orario e si cercano periodi giornalieri e settimanali (rispettivamente 24 e 168 ore), è possibile impostare min_period=0,8*24, max_period=1,2*168 e lasciare il 20% dei margini intorno a questi periodi.
  • La serie temporale di input deve essere regolare. Ovvero, aggregato in contenitori costanti, che è sempre il caso se è stato creato usando make-series. In caso contrario, l'output è privo di significato.

Valori restituiti

La funzione restituisce una tabella con due colonne:

  • periodi: matrice dinamica contenente i periodi trovati, in unità di dimensione del contenitore, ordinati in base ai punteggi.
  • punteggi: matrice dinamica contenente valori compresi tra 0 e 1. Ogni matrice misura il significato di un punto nella rispettiva posizione nella matrice di periodi.

Esempio

La query seguente incorpora uno snapshot di un mese del traffico di un'applicazione, aggregato due volte al giorno. La dimensione del contenitore è di 12 ore.

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

Periodi di serie.

In esecuzione series_periods_detect() in questa serie, si ottiene il periodo settimanale, 14 punti di lunghezza.

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)

Output

series_periods_detect_y_periods series_periods_detect_y_periods_scores
[14,0, 0,0] [0.84, 0.0]

Nota

Il periodo giornaliero che può essere visualizzato anche nel grafico non è stato trovato perché il campionamento è troppo grossolano (dimensioni bin 12h), quindi un periodo giornaliero di 2 bin è inferiore alla dimensione minima del periodo di 4 punti, richiesto dall'algoritmo.