series_periods_detect()

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

Sintassi

series_periods_detect(Serie,, min_period, max_periodnum_periods)

Altre informazioni sulle convenzioni di sintassi.

Parametri

Nome Tipo Obbligatoria 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 richiesto. Questo numero sarà la lunghezza delle matrici dinamiche di output.

Importante

  • L'algoritmo può rilevare i periodi contenenti almeno 4 punti e 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 sia giornalieri che 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.

Restituisce

La funzione restituisce una tabella con due colonne:

  • periodi: matrice dinamica contenente i periodi trovati, in unità delle dimensioni del bin, ordinati in base ai punteggi.
  • score: 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.

L'esecuzione series_periods_detect() in questa serie comporta un periodo settimanale di 14 punti.

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.