series_periods_detect()

Recherche les périodes les plus significatives qui existent dans une série chronologique.

Syntax

series_periods_detect(Série,, min_period, max_periodnum_periods)

Découvrez les conventions de syntaxe.

Paramètres

Nom Type Obligatoire Description
Série dynamic ✔️ Tableau de valeurs numériques, généralement la sortie résultante des opérateurs make-series ou make_list .
min_period real ✔️ Période minimale pour laquelle effectuer une recherche.
max_period real ✔️ Période maximale pendant laquelle la recherche doit être effectuée.
num_periods long ✔️ Nombre maximal de périodes requises. Ce nombre correspond à la longueur des tableaux dynamiques de sortie.

Important

  • L’algorithme peut détecter des périodes contenant au moins 4 points et au plus la moitié de la longueur de la série.
  • Définissez le min_period un peu ci-dessous et max_period un peu au-dessus des périodes que vous prévoyez de trouver dans la série chronologique. Par exemple, si vous disposez d’un signal agrégé toutes les heures et que vous recherchez des périodes quotidiennes et hebdomadaires (24 et 168 heures respectivement), vous pouvez définir min_period=0,8*24, max_period=1,2*168, et laisser des marges de 20 % autour de ces périodes.
  • La série chronologique d’entrée doit être régulière. Autrement dit, agrégé dans des compartiments constants, ce qui est toujours le cas s’il a été créé à l’aide de make-series. Dans le cas contraire, le résultat n’est pas significatif.

Retours

La fonction génère une table avec deux colonnes :

  • periods : tableau dynamique contenant les points qui ont été trouvés, en unités de la taille du bac, classés en fonction de leurs scores.
  • scores : tableau dynamique contenant des valeurs comprises entre 0 et 1. Chaque tableau mesure l’importance d’une période dans sa position respective dans le tableau de périodes .

Exemple

La requête suivante incorpore un instantané d’un mois du trafic d’une application, agrégé deux fois par jour. La taille du bac est de 12 heures.

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

Périodes de série.

En cours d’exécution series_periods_detect() sur cette série, résultats dans la période hebdomadaire, long de 14 points.

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)

Sortie

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

Notes

La période quotidienne qui peut également être observée dans le graphique n’a pas été trouvée, car l’échantillonnage est trop grossière (taille de bac de 12h), de sorte qu’une période quotidienne de 2 bacs est inférieure à la taille minimale de période de 4 points, requise par l’algorithme.