Concetti

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

Evento

Un evento è un punto dati e l'input non elaborato con cui lavora l'API Timeseries Insights. Concettualmente, rappresenta un'azione eseguita da un agente (ad es. una transazione da parte di un cliente o la pubblicazione di un articolo di notizie) o un'osservazione (ad es. le letture di un sensore di temperatura o l'utilizzo della CPU su un computer).

Un evento contiene:

  • Un insieme di valori in diverse dimensioni, che rappresentano 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 per aggregare gli eventi e 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 di valori che può assumere. Una dimensione può essere:

  • Categorica. Una proprietà evento in questa dimensione può contenere uno dei valori limitati/finiti, in genere stringhe. Alcuni esempi sono: il nome del paese o del editore in un set di dati con articoli di notizie, il nome della macchina in un set di dati con dati di monitoraggio della produzione.
  • Numerico. Una misurazione o una proprietà numerica generale per un evento. Esempi: numero di visualizzazioni di pagina per gli articoli di notizie, 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 nello 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à su internet.

In genere, a ogni record Event viene assegnato un ID gruppo univoco. I casi d'uso dell'ID gruppo includono, a titolo esemplificativo:

  • Un identificatore di evento per lo stesso evento (con timestamp uguali o simili) proveniente da più record Event, in particolare quando proprietà diverse dello stesso evento provengono da origini diverse e non vengono unite prima di entrare nel sistema. Ad esempio, diversi sensori che monitorano lo stesso dispositivo possono produrre ciascuno un record di evento distinto.
  • Un identificatore di sessione per una raccolta di eventi correlati (in genere con timestamp in un breve periodo di tempo). Un esempio sono le attività di una sessione di navigazione web. Un altro esempio sono le voci di log di una corsa in taxi.
  • Un identificatore dell'account utente, in modo che tutti i record Event con lo stesso ID gruppo appartengano allo stesso utente.

Lo scopo del gruppo è calcolare le correlazioni tra (le dimensioni di) 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ò 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.

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

Sezione

Una frazione è il sottoinsieme di tutti gli eventi di un insieme di dati che hanno determinati valori in alcune dimensioni. Per una dimensione categorica, il valore specificato è un singolo valore fisso; per una dimensione numerica, il valore specificato è 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 si è verificata la vendita, il nome del prodotto, il nome della società che ha prodotto il prodotto. In questo caso, alcuni esempi di slice sono: tutte le vendite di un determinato prodotto, tutte le vendite di un determinato paese per tutti i prodotti di una determinata azienda.

Serie temporale

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

Una serie temporale viene calcolata nel seguente modo:

  • Per una determinata sezione, raccogli tutti gli eventi nell'intervallo di tempo [detectionTime - TimeseriesParams.forecastHistory, detectionTime + granularity].
  • Raggruppa questi eventi in base al timestamp e alla 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 della serie temporale, gli eventi in base alla dimensione numerica specificata come metrica (TimeseriesParams.metric), che rappresenta il valore per quei punti. L'aggregazione può essere eseguita conteggiando (se non viene specificato metric, in genere se tutte le dimensioni dell'evento sono categoriche), sommando o calcolando la media (se viene specificato metric).

Punto della serie temporale

A ogni punto della serie temporale sono associati time e value.

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 dai valori della dimensione metric di tutti gli eventi nell'intervallo di tempo interno utilizzando TimeseriesParams.metricAggregationMethod.

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

Previsione

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

Horizon

Prevediamo i valori di una serie temporale a partire dal momento del rilevamento fino all'orizzonte temporale (specificato dal campo ForecastParams.horizonTime).

Intuitivamente, questo campo ci dice quanto lontano nel futuro dobbiamo fare la previsione. Anche se ci interessa principalmente il valore del punto di rilevamento quando classifichiamo uno slice come un'anomalia, consentiamo la previsione di punti aggiuntivi poiché potrebbero fornire informazioni utili all'utente.

Data e ora del rilevamento e punto di rilevamento

La data e l'ora del rilevamento (specificate da QueryDataSetRequest.detectionTime) sono il momento in cui stiamo analizzando eventuali anomalie.

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

Deviazione prevista

A seconda della stabilità e della prevedibilità di una serie temporale, possiamo essere più o meno sicuri della nostra previsione. Il livello di confidenza è riportato nel campo EvaluatedSlice.expectedDeviation, che specifica la deviazione assoluta accettabile dal valore previsto per il momento del rilevamento.

Anomalia

Un segmento può essere considerato un'anomalia se la deviazione tra i suoi valori previsti e quelli effettivi durante il momento del rilevamento è superiore a quanto prevediamo.

La distanza tra la deviazione effettiva e quella prevista è chiamata punteggio di anomalia:

anomalyScore = (detectionPointActual - detectionPointForecast) / expectedDeviation

In generale, i punteggi inferiori a 1,0 riflettono variazioni comuni se si considera la cronologia dell'intervallo, mentre i punteggi superiori a 1,0 devono richiedere attenzione, poiché rappresentano anomalie più gravi.

Soglia di rumore

Il punteggio di anomalia, come definito in precedenza, mostra quanto sia statisticamente significativa una deviazione dalla normalità. Tuttavia, in molti casi, questa deviazione potrebbe non essere importante perché la variazione 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à pari a circa 0,1. Se detectionPointForecast è 10.0 e detectionPointActual è 10.3,anomalyScore sarà 3.0.

Se le variazioni di valore assoluto maggiore sono più importanti per te, la soglia di rumore offre un modo per penalizzare i segmenti con variazioni inferiori a quella soglia appesantendo il punteggio di anomalia:

anomalyScore = (detectionPointActual - detectionPointForecast) / (expectedDeviation + noiseThreshold)

Passaggi successivi