Concetti

In questo articolo esamineremo i concetti comuni con cui lavoriamo nell'API Timeseries Insights e cercheremo di fornire una spiegazione intuitiva di ciò che rappresentano.

Evento

Un evento è un punto dati e l'input non elaborato con cui funziona l'API Timeseries Insights. Rappresenta concettualmente un'azione eseguita da un agente (ad es. una transazione da parte di un client o la pubblicazione di un articolo) oppure un'osservazione (ad esempio le letture di un sensore di temperatura o l'utilizzo della CPU su una macchina).

Un evento contiene:

  • Un insieme di valori in diverse dimensioni che rappresentano le proprietà che descrivono l'evento, ad esempio etichette o misurazioni numeriche.
  • Un timestamp che rappresenta l'ora in cui si è verificato l'evento. Questo timestamp verrà utilizzato durante l'aggregazione degli eventi per formare una serie temporale.
  • Un ID gruppo.

Dimensioni

Una dimensione rappresenta un tipo di proprietà per gli eventi in un set di dati e il dominio dei valori che può assumere. Una dimensione può essere:

  • Categorico. Una proprietà evento in questa dimensione può contenere uno di valori limitati/finiti, in genere stringhe. Alcuni esempi sono: il nome del paese o dell'editore in un set di dati contenente articoli, il nome della macchina in un set di dati con dati di monitoraggio della produzione.
  • Numerico. Una misurazione o una proprietà numerica generale di un evento. Esempi: numero di visualizzazioni di pagina per gli articoli, utilizzo della CPU o numero di errori per i dati di monitoraggio della produzione.

Set di dati

Un set di dati è una raccolta di eventi con un nome univoco all'interno di un progetto. Le query vengono eseguite all'interno dello stesso set di dati.

Gruppo

Gli eventi possono essere raggruppati specificando lo stesso ID gruppo (vedi Event.groupId). Il gruppo è simile a una "sessione" di attività internet.

Più comunemente, a ogni record Eventi viene assegnato un ID gruppo univoco. I casi d'uso dell'ID gruppo includono anche, a titolo esemplificativo:

  • Un identificatore di evento per lo stesso evento (con timestamp uguali o simili) proveniente da più record Event, soprattutto se diverse proprietà dello stesso evento provengono da origini diverse e non sono unite prima di accedere al sistema. Ad esempio, più sensori che monitorano lo stesso dispositivo possono produrre, ciascuno, un record di eventi separato.
  • Un identificatore di sessione per una raccolta di eventi correlati (in genere con timestamp di un breve periodo). Un esempio sono le attività di una sessione di navigazione sul web. Un altro esempio sono le voci di log di una corsa in taxi.
  • Un identificatore di account utente, pertanto tutti i record Eventi con lo stesso ID gruppo appartengono allo stesso utente.

Lo scopo del gruppo è calcolare le correlazioni tra (dimensioni) degli eventi dello stesso gruppo. Ad esempio, se il set di dati contiene dati di monitoraggio (come CPU, RAM e così via), un gruppo potrebbe contenere tutti i dati di monitoraggio di un processo. Ciò alla fine ci consentirebbe di rilevare che un aumento della CPU è correlato a un altro evento, ad esempio un aggiornamento della versione binaria in un momento precedente.

Se hai dei dubbi o non ti interessa calcolare questi tipi di correlazione, ogni evento deve avere un ID gruppo univoco a livello globale. L'omissione di groupId ha un effetto simile e viene generato un elemento groupId interno in base ai contenuti e al timestamp.

Sezione

Una sezione è il sottoinsieme di tutti gli eventi di un set di dati con alcuni valori specificati in alcune dimensioni. Per una dimensione categorica, il valore dato è un singolo valore fisso; per una dimensione numerica, il valore dato è un intervallo.

Ad esempio, supponiamo di avere un set di dati con le vendite di un rivenditore internazionale e che ogni evento sia una vendita con queste dimensioni categoriche: il paese in cui è avvenuta la vendita, il nome del prodotto, il nome dell'azienda che lo ha realizzato. Esempi di sezioni in questo caso sono: tutte le vendite di un determinato prodotto, tutte le vendite da un determinato paese per tutti i prodotti realizzati da una determinata azienda.

Serie temporale

Le serie temporali con cui lavoriamo sono di tempo discreto, composto da punti a intervalli di tempo uguali. La lunghezza degli intervalli di tempo tra punti di serie temporali consecutivi è chiamata granularità della serie temporale.

Una serie temporale viene calcolata in base a:

  • Per una determinata sezione, raccogli tutti gli eventi nell'intervallo di tempo [detectionTime - TimeseriesParams.forecastHistory, detectionTime + granularity].
  • Raggruppa questi eventi in base a timestamp e granularità. Un evento E viene assegnato a un punto che inizia all'ora T se E.eventTime è nell'intervallo di tempo [T, T + granularity].
  • Aggregare, per ogni punto delle serie temporali, gli eventi in base alla dimensione numerica specificata come metric (TimeseriesParams.metric), che rappresenta il valore per quei punti. L'aggregazione può essere eseguita conteggiando (se non è specificato alcun metric, in genere se tutte le dimensioni dell'evento sono categoriche), sommando o calcolando la media (se metric è specificato).

Punto serie temporale

A ogni punto della serie temporale sono associati un tempo e un valore.

Il valore time è in realtà un intervallo della durata granularity con time come ora di inizio.

Se viene specificata la metrica (TimeseriesParams.metric), deve essere una dimensione numerica. Il valore value del punto viene aggregato a partire dai valori delle dimensioni nella dimensione metric di tutti gli eventi nel periodo di tempo interno, utilizzando TimeseriesParams.metricAggregationMethod.

Se non viene specificata alcuna metrica, il value del punto corrisponde al numero di eventi all'interno dell'intervallo di tempo.

Previsione

Il processo di previsione dei valori futuri per una determinata serie temporale. La previsione utilizza la parte iniziale della serie temporale come dati di addestramento per la creazione di un modello.

Orizzonte

Eseguiremo la previsione dei valori di una serie temporale a partire dal tempo di rilevamento fino all'orizzonte temporale (fornito dal campo ForecastParams.horizonTime).

Intuitivamente, questo campo ci indica quanto dobbiamo prevedere in futuro. Anche se il valore del punto di rilevamento ci interessa maggiormente quando classifichiamo una sezione come anomalia, consentiamo la previsione di punti aggiuntivi perché potrebbero fornire informazioni utili all'utente.

Tempo di rilevamento e punto di rilevamento

Il tempo di rilevamento (specificato da QueryDataSetRequest.detectionTime) è il momento in cui analizziamo eventuali anomalie.

Il punto di rilevamento è il punto della serie temporale in corrispondenza del momento di rilevamento.

Deviazione prevista

A seconda della stabilità e della prevedibilità di una serie temporale, possiamo avere una maggiore fiducia o minore sicurezza nella previsione. Il livello di confidenza si riflette nel campo EvaluatedSlice.expectedDeviation, che specifica qual è una deviazione assoluta accettabile dal valore previsto per il tempo di rilevamento.

Anomalia

Una sezione può essere considerata un'anomalia se la deviazione tra i valori previsti e quelli effettivi durante il tempo di rilevamento è superiore a quanto prevediamo.

Chiamiamo quanto dista la deviazione effettiva dalla deviazione prevista il punteggio anomalie:

anomalyScore = (detectionPointEffective - detectPoint Forecast) / expectedDeviation

In generale, i punteggi inferiori a 1,0 riflettono le variazioni comuni considerando la cronologia della sezione, mentre i punteggi superiori a 1,0 dovrebbero richiedere attenzione e i punteggi più alti che rappresentano anomalie più gravi.

Soglia di rumore

Il punteggio per anomalie come definito in precedenza mostra quanto una deviazione sia statisticamente significativa dalla normalità. Tuttavia, in molti casi questa deviazione potrebbe non essere importante perché la modifica del valore assoluto potrebbe non essere di interesse.

Ad esempio, se una serie temporale ha tutti i valori distribuiti uniformemente nell'intervallo (9,9; 10,1), expectedDeviation sarà ~0,1. Se detectionPointForecast è 10.0 e detectionPointActual è 10.3, anomalyScore sarà 3.0.

Se le modifiche che sono maggiori in termini di valore assoluto sono più importanti per te, la soglia di rumore consente di penalizzare le sezioni con modifiche inferiori a quella soglia ponderando il punteggio di anomalie:

anomalyScore = (detectionPointEffective -detectionPointment) / (expectedDeviation + noiseThreshold)

Passaggi successivi