Dans cet article, nous allons passer en revue les concepts courants que nous utilisons dans l'API Timeseries Insights et essayer de fournir une explication intuitive de ce qu'ils représentent.
Événement
Un événement est un point de données et l'entrée brute avec laquelle l'API Timeseries Insights fonctionne. Conceptuellement, il représente une action effectuée par un agent (par exemple, une transaction par un client ou la publication d'un article d'actualité) ou une observation (par exemple, les mesures d'un capteur de température ou l'utilisation du processeur sur une machine).
Un événement contient:
- Ensemble de valeurs pour différentes dimensions, représentant des propriétés qui décrivent l'événement, telles que des libellés ou des mesures numériques.
- Code temporel correspondant à l'heure à laquelle l'événement s'est produit. Ce code temporel est utilisé lors de l'agrégation d'événements pour former une série temporelle.
- ID de groupe.
Dimension
Une dimension représente un type de propriété pour les événements d'un ensemble de données et le domaine de valeurs qu'il peut prendre. Une dimension peut être:
- Catégorielle. Une propriété d'événement dans cette dimension peut contenir l'une des valeurs limitées/finies, généralement des chaînes. Exemples: nom du pays ou de l'éditeur dans un ensemble de données contenant des articles d'actualité, nom de la machine dans un ensemble de données contenant des données de surveillance de la production.
- Numérique. Mesure ou propriété numérique générale d'un événement. Exemples: nombre de pages vues pour les articles d'actualités, utilisation du processeur ou nombre d'erreurs pour les données de surveillance de la production.
Ensemble de données
Un ensemble de données est une collection d'événements portant un nom unique dans un projet. Les requêtes sont effectuées dans le même ensemble de données.
Groupe
Vous pouvez regrouper des événements en spécifiant le même ID de groupe (voir Event.groupId
). Le groupe est semblable à une "session" d'activités Internet.
Le plus souvent, chaque enregistrement Événement reçoit un ID de groupe unique. Voici quelques exemples de cas d'utilisation de l'ID de groupe (liste non exhaustive) :
- Identifiant d'événement pour le même événement (avec les mêmes codes temporels ou des codes similaires) à partir de plusieurs enregistrements Event, en particulier lorsque différentes propriétés du même événement proviennent de différentes sources et ne sont pas fusionnées avant d'entrer dans le système. Par exemple, plusieurs capteurs surveillant le même appareil peuvent chacun produire un enregistrement d'événement distinct.
- Identifiant de session pour un ensemble d'événements associés (généralement avec des codes temporels sur une courte période). Par exemple, les activités d'une session de navigation Web. Un autre exemple est les entrées de journal d'un trajet en taxi.
- Identifiant de compte utilisateur. Tous les enregistrements Event ayant le même ID de groupe appartiennent au même utilisateur.
L'objectif du groupe est de calculer les corrélations entre les événements (dimensions) du même groupe. Par exemple, si votre ensemble de données contient des données de surveillance (comme le processeur, la RAM, etc.), un groupe peut contenir toutes les données de surveillance d'un processus. Cela nous permettrait de détecter qu'une augmentation de l'utilisation du processeur est corrélée à un autre événement, tel qu'une mise à jour de la version binaire à un moment donné.
En cas de doute ou si vous n'êtes pas intéressé par le calcul de ces types de corrélations, chaque événement doit disposer d'un ID de groupe unique au niveau mondial. L'omission de groupId
a un effet similaire, et un groupId
interne est généré en fonction du contenu et du code temporel.
Tranche
Un segment est le sous-ensemble de tous les événements d'un ensemble de données qui présentent certaines valeurs données pour certaines dimensions. Pour une dimension catégorielle, la valeur donnée est une valeur fixe unique. Pour une dimension numérique, la valeur donnée est une plage.
Par exemple, imaginons que vous disposiez d'un ensemble de données contenant les ventes d'un marchand international. Chaque événement est une vente qui comporte les dimensions catégorielles suivantes: le pays où la vente a eu lieu, le nom du produit et le nom de l'entreprise qui l'a fabriqué. Voici des exemples de tranches dans ce cas : toutes les ventes d'un produit donné, toutes les ventes d'un pays donné pour tous les produits d'une entreprise donnée.
Séries temporelles
Les séries temporelles avec lesquelles nous travaillons sont de type temps discret, composées de points à des intervalles de temps égaux. La longueur des intervalles de temps entre les points de série temporelle consécutifs est appelée granularité de la série temporelle.
Une série temporelle est calculée comme suit:
- Pour un segment donné, collectez tous les événements de l'intervalle de temps [
detectionTime - TimeseriesParams.forecastHistory
,detectionTime + granularity
]. - Regroupez ces événements en fonction de leur code temporel et de leur précision. Un événement E est attribué à un point qui commence à l'heure T si
E.eventTime
se trouve dans l'intervalle de temps [T
,T + granularity
]. - Agrégation, pour chaque point de la série temporelle, des événements en fonction de la dimension numérique spécifiée en tant que métrique (
TimeseriesParams.metric
), qui représente la valeur de ces points. L'agrégation peut être effectuée par comptage (si aucunmetric
n'est spécifié, généralement si toutes les dimensions de l'événement sont catégorielles), par addition ou par moyenne (simetric
est spécifié).
Point de série temporelle
Chaque point de la série temporelle est associé à un temps et à une valeur.
La durée est en fait un intervalle de longueur granularity
avec time
comme heure de début.
Si metric (TimeseriesParams.metric
) est spécifié, il doit s'agir d'une dimension numérique. Le value
du point est agrégé à partir des valeurs de dimension dans la dimension metric
de tous les événements au cours de l'intervalle de temps, à l'aide de TimeseriesParams.metricAggregationMethod
.
Si aucune métrique n'est spécifiée, la valeur value
du point correspond au nombre d'événements au cours de l'intervalle de temps.
Prévision
Processus permettant de prédire les valeurs futures d'une série temporelle donnée. La prévision utilise la partie initiale de la série temporelle comme données d'entraînement pour créer un modèle.
Horizon
Nous allons prévoir les valeurs d'une série temporelle à partir de l'heure de détection jusqu'à l'horizon temporel (donné par le champ ForecastParams.horizonTime
).
Intuitif, ce champ nous indique jusqu'à quand nous devrions effectuer des prévisions. Bien que nous soyons principalement intéressés par la valeur du point de détection lorsque nous classons une tranche comme une anomalie, nous permettons de prévoir des points supplémentaires, car ils peuvent fournir des informations utiles à l'utilisateur.
Heure et point de détection
L'heure de détection (spécifiée par QueryDataSetRequest.detectionTime
) correspond au moment où nous analysons les anomalies potentielles.
Le point de détection correspond au point de la série temporelle au moment de la détection.
Écart prévu
En fonction de la stabilité et de la prévisibilité d'une série temporelle, nous pouvons être plus ou moins confiants dans nos prévisions. Le niveau de confiance est reflété dans le champ EvaluatedSlice.expectedDeviation
, qui spécifie l'écart absolu acceptable par rapport à la valeur que nous avons prévue pour le moment de la détection.
Anomalie
Un segment peut être considéré comme une anomalie si l'écart entre ses valeurs prévues et réelles au moment de la détection est supérieur à ce que nous attendons.
L'écart entre l'écart réel et l'écart attendu est appelé score d'anomalie:
anomalyScore = (detectionPointActual - detectionPointForecast) / expectedDeviation
En règle générale, les scores inférieurs à 1,0 reflètent des variations courantes compte tenu de l'historique de la tranche, tandis que les scores supérieurs à 1,0 doivent attirer l'attention, les scores plus élevés représentant des anomalies plus graves.
Seuil de bruit
Le score d'anomalie, tel que défini précédemment, indique dans quelle mesure une déviation est statistiquement significative par rapport à la normale. Toutefois, dans de nombreux cas, cette déviation peut ne pas être importante, car la variation de la valeur absolue peut ne pas être intéressante.
Par exemple, si toutes les valeurs d'une série temporelle sont distribuées uniformément dans la plage (9,9, 10,1), la valeur expectedDeviation
sera d'environ 0,1. Si detectionPointForecast
est 10.0 et detectionPointActual
est 10.3, anomalyScore
est 3.0.
Si les changements de valeur absolue sont plus importants pour vous, le seuil de bruit vous permet de pénaliser les segments dont les changements sont inférieurs à ce seuil en diminuant le score d'anomalie:
anomalyScore = (detectionPointActual - detectionPointForecast) / (expectedDeviation + noiseThreshold)
Étape suivante
- Suivez la procédure Configurer pour un accès complet pour créer votre propre projet.
- Tutoriel plus détaillé
- En savoir plus sur l'API REST