Dans cet article, nous allons passer en revue les concepts courants que nous utilisons dans l'API Timeseries Insights et vous essayer de vous 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, elle représente soit une action effectuée par un agent (par exemple, une transaction par un client ou la publication d'un article de presse), soit 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 correspondant à différentes dimensions, représentant les propriétés décrivant l'événement, telles que des étiquettes ou des mesures numériques.
- Code temporel représentant l'heure à laquelle l'événement s'est produit. Cet horodatage sera utilisé lors de l'agrégation d'événements pour former une série temporelle.
- Un 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 accepter. Une dimension peut être:
- Catégorielle. Une propriété d'événement au niveau de cette dimension peut contenir l'une des valeurs limitées/finies, généralement des chaînes. Voici quelques exemples: le nom du pays ou de l'éditeur dans un ensemble de données contenant des articles de presse, le 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 de presse, utilisation du processeur ou nombre d'erreurs pour les données de surveillance en production.
Ensemble de données
Un ensemble de données est une collection d'événements ayant un nom unique au sein d'un projet. Les requêtes sont effectuées dans le même ensemble de données.
Groupe
Vous pouvez regrouper les événements en spécifiant le même identifiant de groupe (voir Event.groupId
). Le groupe est semblable à une "session" d'activités Internet.
Le plus souvent, chaque enregistrement Event se voit attribuer un ID de groupe unique. L'ID de groupe peut également être utilisé, entre autres, dans les cas suivants:
- Identifiant d'événement du même événement (avec des horodatages identiques ou similaires) provenant de plusieurs enregistrements Event, en particulier lorsque différentes propriétés du même événement proviennent de sources différentes et n'ont pas été 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 une collection d'événements associés (généralement avec des horodatages sur une courte période). Les activités d'une session de navigation sur le Web en sont un exemple. Autre exemple : les entrées de journal d'une course en taxi.
- Un identifiant de compte utilisateur, de sorte que tous les enregistrements Événement associés au même ID de groupe appartiennent au même utilisateur.
L'objectif du groupe est de calculer des corrélations entre les événements (ou les dimensions des) du même groupe. Par exemple, si votre ensemble de données contient des données de surveillance (telles que le processeur, la RAM, etc.), un groupe peut contenir toutes les données de surveillance d'un même processus. Cela nous permettrait à terme de détecter qu'une augmentation du processeur est corrélée à un autre événement, comme une mise à jour de la version binaire à un moment antérieur.
En cas de doute ou si vous ne souhaitez pas calculer ces types de corrélations, chaque événement doit avoir un ID de groupe unique. Omettre groupId
a un effet similaire et un groupId
interne est généré en fonction du contenu et de l'horodatage.
Tranche
Une tranche est le sous-ensemble de tous les événements d'un ensemble de données qui présentent des 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, supposons que nous disposons d'un ensemble de données avec les ventes d'un revendeur international et que chaque événement est une vente ayant ces dimensions catégorielles: le pays où la vente a eu lieu, le nom du produit et le nom de l'entreprise qui l'a fabriqué. Dans ce cas, les tranches sont par exemple : toutes les ventes d'un produit donné, toutes les ventes d'un pays donné pour tous les produits fabriqués par une entreprise donnée.
Séries temporelles
Les séries temporelles sur lesquelles nous travaillons sont des séries temporelles discrètes, composées de points situés à des intervalles de temps égaux. La longueur des intervalles de temps entre des points consécutifs de la série temporelle est appelée précision de la série temporelle.
Une série temporelle est calculée comme suit:
- Pour une tranche donnée, collectez tous les événements dans l'intervalle de temps [
detectionTime - TimeseriesParams.forecastHistory
,detectionTime + granularity
]. - Regroupez ces événements en fonction de leur horodatage 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égez, pour chaque point de la série temporelle, les événements basés sur la dimension numérique spécifiée sous forme de métrique (
TimeseriesParams.metric
), qui représente la valeur de ces points. L'agrégation peut être effectuée par décompte (si aucune valeurmetric
n'est spécifiée, généralement si toutes les dimensions de l'événement sont catégorielles), en additionnant ou en calculant une moyenne (simetric
est spécifié).
Point de série temporelle
Chaque point de la série temporelle est associé à une time (heure) et à une value (valeur).
L'heure 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. La valeur value
du point est agrégée à partir des valeurs de la dimension metric
pour tous les événements intervenus au cours de la période, à 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 dans l'intervalle de temps.
Prévision
Processus de prédiction des valeurs futures pour une série temporelle donnée. La prévision utilise le début 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 (indiqué par le champ ForecastParams.horizonTime
).
Intuitivement, ce champ nous indique dans quelle mesure nous devrons effectuer des prévisions à l'avenir. Bien que nous nous intéressons surtout à la valeur du point de détection lors de la classification d'une tranche en tant qu'anomalie, nous permettons la prévision de points supplémentaires, car cela peut fournir des informations utiles à l'utilisateur.
Heure et point de détection
Le temps de détection (spécifié par QueryDataSetRequest.detectionTime
) correspond au moment où nous analysons d'éventuelles anomalies.
Le point de détection correspond au point de série temporelle au moment de la détection.
Écart attendu
En fonction de la stabilité et de la prévisibilité d'une série temporelle, nous pouvons être plus ou moins confiants quant à notre prévision. Le niveau de confiance est reflété dans le champ EvaluatedSlice.expectedDeviation
, qui spécifie un écart absolu acceptable par rapport à la valeur prévue pour le temps de détection.
Anomalie
Une tranche peut être considérée comme une anomalie si l'écart entre ses valeurs prévues et réelles au cours du temps de détection est plus élevé que ce à quoi nous nous attendions.
Nous appelons la différence entre l'écart réel et l'écart attendu est le score d'anomalie:
anomalyScore = (detectionPointActual - detectPoint Forecast) / Écart attendu
En général, les scores inférieurs à 1,0 reflètent des variations courantes compte tenu de l'historique du segment, tandis que les scores supérieurs à 1,0 nécessitent votre attention, les scores plus élevés représentant des anomalies plus sévères.
Seuil de bruit
Le score d'anomalie défini précédemment montre à quel point un écart est statistiquement pertinent par rapport à la normale. Toutefois, dans de nombreux cas, cette différence peut ne pas être importante, car la modification de la valeur absolue peut ne pas présenter d'intérêt.
Par exemple, si toutes les valeurs d'une série temporelle sont réparties uniformément dans la plage (9.9, 10.1), la valeur expectedDeviation
sera d'environ 0,1. Si detectionPointForecast
est 10.0 et que detectionPointActual
est 10.3, anomalyScore
sera 3.0.
Si des variations supérieures à la valeur absolue sont plus importantes pour vous, le seuil de bruit permet de pénaliser les tranches présentant des variations inférieures à ce seuil en pondérant le score d'anomalie:
anomalyScore = (detectionPointActual - detectPoint Forecast) / (expectedDeviation + noiseThreshold)
Étapes suivantes
- Suivez les instructions de la section Configurer l'accès complet pour créer votre propre projet.
- Tutoriel plus détaillé
- En savoir plus sur l'API REST