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 specificatometric
, in genere se tutte le dimensioni dell'evento sono categoriche), sommando o calcolando la media (se viene specificatometric
).
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
- Segui la sezione Configurazione per l'accesso completo per creare il tuo progetto
- Un tutorial più dettagliato
- Scopri di più sull'API REST