Procedure consigliate per l'uso dell'API multivariate Rilevamento anomalie
Importante
A partire dal 20 settembre 2023 non sarà possibile creare nuove risorse Rilevamento anomalie. Il servizio Rilevamento anomalie viene ritirato il 1° ottobre 2026.
Questo articolo fornisce indicazioni sulle procedure consigliate da seguire quando si usano le API multivariate Rilevamento anomalie (MVAD). In questa esercitazione si apprenderà come:
- Utilizzo api: informazioni su come usare MVAD senza errori.
- Ingegneria dei dati: informazioni su come cucinare al meglio i dati in modo che MVAD funzioni con una maggiore precisione.
- Problemi comuni: informazioni su come evitare insidie comuni che i clienti incontrano.
- Domande frequenti: informazioni sulle risposte alle domande frequenti.
Utilizzo delle API
Seguire le istruzioni riportate in questa sezione per evitare errori durante l'uso di MVAD. Se si verificano ancora errori, fare riferimento all'elenco completo dei codici di errore per le spiegazioni e le azioni da eseguire.
Parametri di input
Parametri obbligatori
Questi tre parametri sono necessari nelle richieste api di training e inferenza:
source
- Il collegamento al file ZIP che si trova nel Archiviazione BLOB di Azure con firme di accesso condiviso (SAS).startTime
- Ora di inizio dei dati usati per il training o l'inferenza. Se è precedente al timestamp effettivo dei dati, il timestamp effettivo verrà usato come punto iniziale.endTime
- Ora di fine dei dati usati per il training o l'inferenza che deve essere successiva o uguale astartTime
. SeendTime
è successivo al timestamp più recente effettivo nei dati, il timestamp più recente effettivo verrà usato come punto finale. SeendTime
è uguale astartTime
, significa inferenza di un singolo punto dati che viene spesso usato negli scenari di streaming.
Parametri facoltativi per l'API di training
Altri parametri per l'API di training sono facoltativi:
slidingWindow
- Numero di punti dati usati per determinare le anomalie. Intero compreso tra 28 e 2.880. Il valore predefinito è 300. SeslidingWindow
èk
per il training del modello, almeno ik
punti devono essere accessibili dal file di origine durante l'inferenza per ottenere risultati validi.MVAD accetta un segmento di punti dati per decidere se il punto dati successivo è un'anomalia. La lunghezza del segmento è
slidingWindow
. Tenere presenti due aspetti quando si sceglie unslidingWindow
valore:- Le proprietà dei dati, indipendentemente dal fatto che siano periodiche e la frequenza di campionamento. Quando i dati sono periodici, è possibile impostare la lunghezza di 1 - 3 cicli come
slidingWindow
. Quando i dati hanno una frequenza elevata (granularità ridotta) come il livello di minuto o il secondo livello, è possibile impostare un valore relativamente più elevato dislidingWindow
. - Compromesso tra tempo di training/inferenza e potenziale impatto sulle prestazioni. Un valore maggiore
slidingWindow
può causare tempi di training/inferenza più lunghi. Non c'è garanzia che più grandislidingWindow
condurranno a guadagni di accuratezza. Una piccolaslidingWindow
può causare la difficile convergenza del modello in una soluzione ottimale. Ad esempio, è difficile rilevare anomalie quandoslidingWindow
ha solo due punti.
- Le proprietà dei dati, indipendentemente dal fatto che siano periodiche e la frequenza di campionamento. Quando i dati sono periodici, è possibile impostare la lunghezza di 1 - 3 cicli come
alignMode
- Come allineare più variabili (serie temporali) ai timestamp. Sono disponibili due opzioni per questo parametro,Inner
eOuter
e il valore predefinito èOuter
.Questo parametro è fondamentale quando si verifica un errore di allineamento tra le sequenze di timestamp delle variabili. Il modello deve allineare le variabili alla stessa sequenza di timestamp prima di continuare l'elaborazione.
Inner
indica che il modello invierà i risultati del rilevamento solo sui timestamp in cui ogni variabile ha un valore, ad esempio l'intersezione di tutte le variabili.Outer
indica che il modello segnala i risultati del rilevamento sui timestamp in cui qualsiasi variabile ha un valore, ad esempio l'unione di tutte le variabili.Di seguito è riportato un esempio per spiegare valori diversi
alignModel
.Variabile-1
timestamp value 2020-11-01 1 2020-11-02 2 2020-11-04 4 2020-11-05 5 Variabile-2
timestamp value 2020-11-01 1 2020-11-02 2 2020-11-03 3 2020-11-04 4 Inner
join di due variabilitimestamp Variabile-1 Variabile-2 2020-11-01 1 1 2020-11-02 2 2 2020-11-04 4 4 Outer
join di due variabilitimestamp Variabile-1 Variabile-2 2020-11-01 1 1 2020-11-02 2 2 2020-11-03 nan
3 2020-11-04 4 4 2020-11-05 5 nan
fillNAMethod
- Come compilarenan
la tabella unita. Potrebbero essere presenti valori mancanti nella tabella unita e devono essere gestiti correttamente. Forniamo diversi metodi per riempirli. Le opzioni sonoLinear
,Previous
Subsequent
,Zero
, eFixed
il valore predefinito èLinear
.Opzione Method Linear
Riempire nan
i valori in base all'interpolazione linearePrevious
Propagare l'ultimo valore valido per riempire le lacune. Esempio: [1, 2, nan, 3, nan, 4]
->[1, 2, 2, 3, 3, 4]
Subsequent
Usare il valore valido successivo per riempire le lacune. Esempio: [1, 2, nan, 3, nan, 4]
->[1, 2, 3, 3, 4, 4]
Zero
Compilare nan
i valori con 0.Fixed
Compilare nan
i valori con un valore valido specificato che deve essere specificato inpaddingValue
.paddingValue
- Il valore di riempimento viene usato per riempirenan
quandofillNAMethod
èFixed
e deve essere specificato in questo caso. In altri casi è facoltativo.displayName
- Si tratta di un parametro facoltativo usato per identificare i modelli. Ad esempio, è possibile usarlo per contrassegnare parametri, origini dati e altri metadati relativi al modello e ai relativi dati di input. Il valore predefinito è una stringa vuota.
Schema dei dati di input
MVAD rileva anomalie da un gruppo di metriche e viene chiamata ogni metrica una variabile o una serie temporale.
È possibile scaricare il file di dati di esempio da Microsoft per controllare lo schema accettato da: https://aka.ms/AnomalyDetector/MVADSampleData
Ogni variabile deve avere due soli due campi
timestamp
evalue
, e deve essere archiviata in un file con valori delimitati da virgole (CSV).I nomi delle colonne del file CSV devono essere esattamente
timestamp
e , con distinzione tra maiuscole evalue
minuscole.I
timestamp
valori devono essere conformi a ISO 8601.value
I valori possono essere numeri interi o decimali con un numero qualsiasi di cifre decimali. Un buon esempio del contenuto di un file CSV:timestamp value 2019-04-01T00:00:00Z 5 2019-04-01T00:01:00Z 3.6 2019-04-01T00:02:00Z 4 ... ... Nota
Se i timestamp hanno ore, minuti e/o secondi, assicurarsi che vengano arrotondati correttamente prima di chiamare le API.
Ad esempio, se la frequenza dei dati dovrebbe essere un punto dati ogni 30 secondi, ma vengono visualizzati timestamp come "12:00:01" e "12:00:28", è un segnale forte che è consigliabile pre-elaborare i timestamp in nuovi valori come "12:00:00" e "12:00:30".
Per informazioni dettagliate, vedere la sezione "Timestamp round-up" nel documento sulle procedure consigliate.
Il nome del file CSV verrà usato come nome della variabile e deve essere univoco. Ad esempio, "temperature.csv" e "humidity.csv".
Le variabili per il training e le variabili per l'inferenza devono essere coerenti. Ad esempio, se si usa
series_1
,series_2
,series_3
,series_4
eseries_5
per il training, è necessario fornire esattamente le stesse variabili per l'inferenza.I file CSV devono essere compressi in un file ZIP e caricati in un contenitore BLOB di Azure. Il file ZIP può avere qualsiasi nome desiderato.
Struttura delle cartelle
Un errore comune nella preparazione dei dati è costituito da cartelle aggiuntive nel file ZIP. Si supponga, ad esempio, che il nome del file ZIP sia series.zip
. Dopo aver decompresso i file in una nuova cartella ./series
, il percorso corretto dei file CSV è ./series/series_1.csv
e un percorso errato potrebbe essere ./series/foo/bar/series_1.csv
.
Esempio corretto dell'albero della directory dopo la decompressione del file ZIP in Windows
.
└── series
├── series_1.csv
├── series_2.csv
├── series_3.csv
├── series_4.csv
└── series_5.csv
Esempio errato dell'albero della directory dopo la decompressione del file ZIP in Windows
.
└── series
└── series
├── series_1.csv
├── series_2.csv
├── series_3.csv
├── series_4.csv
└── series_5.csv
Ingegneria dei dati
A questo punto è possibile eseguire il codice con le API MVAD senza errori. Cosa è possibile fare per migliorare l'accuratezza del modello?
Qualità dei dati
- Man mano che il modello apprende modelli normali dai dati cronologici, i dati di training devono rappresentare lo stato normale complessivo del sistema. È difficile per il modello apprendere questi tipi di modelli se i dati di training sono pieni di anomalie. Una soglia empirica di frequenza anomala è 1% e inferiore per una buona accuratezza.
- In generale, il rapporto di valore mancante dei dati di training deve essere inferiore al 20%. Troppi dati mancanti possono finire con valori compilati automaticamente (in genere valori lineari o valori costanti) appresi come modelli normali. Ciò può comportare il rilevamento di punti dati reali (non mancanti) come anomalie.
Quantità di dati
Il modello sottostante di MVAD ha milioni di parametri. È necessario un numero minimo di punti dati per apprendere un set ottimale di parametri. La regola empirica è che è necessario fornire 5.000 o più punti dati (timestamp) per variabile per eseguire il training del modello per una buona accuratezza. In generale, maggiore è la precisione dei dati di training. Tuttavia, nei casi in cui non si è in grado di accumulare tale quantità di dati, è comunque consigliabile sperimentare con meno dati e verificare se l'accuratezza compromessa è ancora accettabile.
Ogni volta che si chiama l'API di inferenza, è necessario assicurarsi che il file di dati di origine contenga solo punti dati sufficienti. Questo è in genere
slidingWindow
+ numero di punti dati che necessitano di risultati di inferenza. Ad esempio, in un caso di streaming in cui ogni volta che si vuole dedurre un nuovo timestamp, il file di dati può contenere solo il punto dati inizialeslidingWindow
più UN punto dati, quindi è possibile passare e creare un altro file ZIP con lo stesso numero di punti dati (slidingWindow
+ 1) ma spostando un passaggio sul lato "destro" e inviare per un altro processo di inferenza.Qualsiasi elemento al di là di questo o "prima" della finestra temporale scorrevole iniziale non influisce affatto sul risultato dell'inferenza e può causare solo il downgrade delle prestazioni. Qualsiasi elemento di seguito che può causare un
NotEnoughInput
errore.
Timestamp arrotondamento
In un gruppo di variabili (serie temporali), ogni variabile può essere raccolta da un'origine indipendente. I timestamp di variabili diverse possono non essere coerenti tra loro e con le frequenze note. Ecco un semplice esempio.
Variabile-1
timestamp | value |
---|---|
12:00:01 | 1.0 |
12:00:35 | 1,5 |
12:01:02 | 0.9 |
12:01:31 | 2.2 |
12:02:08 | 1.3 |
Variabile-2
timestamp | value |
---|---|
12:00:03 | 2.2 |
12:00:37 | 2.6 |
12:01:09 | 1.4 |
12:01:34 | 1,7 |
12:02:04 | 2.0 |
Sono disponibili due variabili raccolte da due sensori che inviano un punto dati ogni 30 secondi. Tuttavia, i sensori non inviano punti dati a una frequenza uniforme rigorosa, ma a volte in precedenza e talvolta in un secondo momento. Poiché MVAD prende in considerazione le correlazioni tra variabili diverse, i timestamp devono essere allineati correttamente in modo che le metriche riflettano correttamente la condizione del sistema. Nell'esempio precedente, i timestamp della variabile 1 e della variabile 2 devono essere correttamente arrotondati alla frequenza prima dell'allineamento.
Vediamo cosa accade se non vengono pre-elaborati. Se si imposta alignMode
su essere Outer
(ovvero l'unione di due set), la tabella unita è:
timestamp | Variabile-1 | Variabile-2 |
---|---|---|
12:00:01 | 1.0 | nan |
12:00:03 | nan |
2.2 |
12:00:35 | 1,5 | nan |
12:00:37 | nan |
2.6 |
12:01:02 | 0.9 | nan |
12:01:09 | nan |
1.4 |
12:01:31 | 2.2 | nan |
12:01:34 | nan |
1,7 |
12:02:04 | nan |
2.0 |
12:02:08 | 1.3 | nan |
nan
indica valori mancanti. Ovviamente, la tabella unita non è quella prevista. La variabile 1 e la variabile 2 interleave e il modello MVAD non può estrarre informazioni sulle correlazioni tra di esse. Se si imposta su alignMode
Inner
, la tabella unita è vuota perché non esiste un timestamp comune nella variabile 1 e nella variabile 2.
Di conseguenza, i timestamp della variabile 1 e della variabile 2 devono essere pre-elaborati (arrotondati ai timestamp di 30 secondi più vicini) e la nuova serie temporale sono:
Variabile-1
timestamp | value |
---|---|
12:00:00 | 1.0 |
12:00:30 | 1,5 |
12:01:00 | 0.9 |
12:01:30 | 2.2 |
12:02:00 | 1.3 |
Variabile-2
timestamp | value |
---|---|
12:00:00 | 2.2 |
12:00:30 | 2.6 |
12:01:00 | 1.4 |
12:01:30 | 1,7 |
12:02:00 | 2.0 |
Ora la tabella unita è più ragionevole.
timestamp | Variabile-1 | Variabile-2 |
---|---|---|
12:00:00 | 1.0 | 2.2 |
12:00:30 | 1,5 | 2.6 |
12:01:00 | 0.9 | 1.4 |
12:01:30 | 2.2 | 1,7 |
12:02:00 | 1.3 | 2.0 |
I valori di variabili diverse a chiusura dei timestamp sono ben allineati e il modello MVAD può ora estrarre informazioni di correlazione.
Limiti
Esistono alcune limitazioni nelle API di training e inferenza, per evitare errori è necessario tenere presente queste limitazioni.
Limitazioni generali
- Finestra scorrevole: 28-2880 timestamp, valore predefinito: 300. Per i dati periodici, impostare la lunghezza di 2-4 cicli come finestra scorrevole.
- Numeri variabili: per il training e l'inferenza batch, al massimo 301 variabili.
Limitazioni del training
- Timestamp: al massimo 1000000. Un numero eccessivo di timestamp può ridurre la qualità del modello. È consigliabile avere più di 5.000 timestamp.
- Granularità: la granularità minima è
per_second
.
Limitazioni dell'inferenza batch
- Timestamp: al massimo 20000, almeno 1 lunghezza della finestra temporale scorrevole.
Limitazioni dell'inferenza di streaming
- Timestamp: al massimo 2880, almeno 1 lunghezza della finestra scorrevole.
- Rilevamento dei timestamp: da 1 a 10.
Qualità del modello
Come gestire i falsi positivi e i falsi negativi in scenari reali?
È stata fornita una gravità che indica il significato delle anomalie. I falsi positivi possono essere filtrati impostando una soglia in base alla gravità. In alcuni casi è possibile che vengano visualizzati troppi falsi positivi quando si verificano spostamenti di criteri nei dati di inferenza. In questi casi potrebbe essere necessario ripetere il training di un modello sui nuovi dati. Se i dati di training contengono troppe anomalie, potrebbero esserci falsi negativi nei risultati del rilevamento. Ciò è dovuto al fatto che il modello apprende modelli dai dati di training e dalle anomalie può causare distorsioni al modello. La pulizia corretta dei dati può quindi contribuire a ridurre i falsi negativi.
Come stimare quale modello è preferibile usare in base alla perdita di training e alla perdita di convalida?
In generale, è difficile decidere quale modello è il migliore senza un set di dati etichettato. Tuttavia, è possibile sfruttare le perdite di training e convalida per ottenere una stima approssimativa e rimuovere tali modelli non valido. Prima di tutto, dobbiamo osservare se le perdite di training convergeranno. Le perdite divergenti indicano spesso una scarsa qualità del modello. In secondo luogo, i valori di perdita possono aiutare a identificare se si verifica l'underfitting o l'overfitting. I modelli sottofitting o overfitting potrebbero non avere prestazioni desiderate. Terzo, anche se la definizione della funzione di perdita non riflette direttamente le prestazioni di rilevamento, i valori di perdita possono essere uno strumento ausiliario per stimare la qualità del modello. Il valore di bassa perdita è una condizione necessaria per un modello valido, pertanto è possibile eliminare i modelli con valori di perdita elevati.
Inconvenienti comuni
Oltre alla tabella dei codici di errore, sono stati appresi dai clienti come alcuni problemi comuni durante l'uso delle API MVAD. Questa tabella consente di evitare questi problemi.
Insidia | Conseguenza | Spiegazione e soluzione |
---|---|---|
I timestamp nei dati di training e/o nei dati di inferenza non sono stati arrotondati per allinearli alla rispettiva frequenza di dati di ogni variabile. | I timestamp dei risultati dell'inferenza non sono come previsto: troppi timestamp o troppi timestamp. | Fare riferimento a Timestamp arrotondamento. |
Troppi punti dati anomali nei dati di training | L'accuratezza del modello è influenzata negativamente perché considera i punti dati anomali come modelli normali durante il training. | Empiricamente, mantenere il tasso anormale al di sotto o al di sotto dell'1% aiuterà. |
Dati di training troppo piccoli | L'accuratezza del modello è compromessa. | In modo empirico, il training di un modello MVAD richiede 15.000 o più punti dati (timestamp) per variabile per mantenere una buona accuratezza. |
Acquisizione di tutti i punti dati con isAnomaly =true come anomalie |
Troppi falsi positivi | È consigliabile usare sia isAnomaly che severity (o score ) per analizzare le anomalie che non sono gravi e (facoltativamente) usare il raggruppamento per controllare la durata delle anomalie per eliminare i rumori casuali. Per la differenza tra severity e score , vedere la sezione domande frequenti di seguito. |
Le sottocartelle vengono compresse nel file di dati per il training o l'inferenza. | I file di dati CSV all'interno di sottocartelle vengono ignorati durante il training e/o l'inferenza. | Nel file ZIP non sono consentite sottocartelle. Per informazioni dettagliate, vedere Struttura delle cartelle. |
Troppi dati nel file di dati di inferenza: ad esempio, comprimendo tutti i dati cronologici nel file ZIP dei dati di inferenza | È possibile che non vengano visualizzati errori, ma si verificano prestazioni ridotte quando si tenta di caricare il file ZIP nel BLOB di Azure e quando si tenta di eseguire l'inferenza. | Per informazioni dettagliate, vedere Quantità di dati . |
Creazione di Rilevamento anomalie risorse nelle aree di Azure che non supportano ancora MVAD e che chiamano le API MVAD | Si riceverà un errore di "risorsa non trovata" durante la chiamata alle API MVAD. | Durante la fase di anteprima, MVAD è disponibile solo in aree limitate. Aggiungere un segnalibro Novità in Rilevamento anomalie per mantenere aggiornato le implementazioni dell'area MVAD. È anche possibile segnalare un problema di GitHub o contattare Microsoft all'indirizzo AnomalyDetector@microsoft.com per richiedere aree specifiche. |
Domande frequenti
Come funziona la finestra scorrevole di MVAD?
Verranno ora usati due esempi per informazioni sul funzionamento della finestra scorrevole di MVAD. Si supponga di aver impostato slidingWindow
= 1.440 e che i dati di input abbiano una granularità di un minuto.
Scenario di streaming: si vuole stimare se il punto dati ONE in "2021-01-02T00:00:00Z" è anomalo. Il valore
startTime
eendTime
sarà lo stesso ("2021-01-02T00:00:00Z"). L'origine dati di inferenza, tuttavia, deve contenere almeno 1.440 + 1 timestamp. Poiché MVAD accetta i dati iniziali prima del punto dati di destinazione ("2021-01-02T00:00:00Z") per decidere se la destinazione è un'anomalia. La lunghezza dei dati iniziali necessari èslidingWindow
o 1.440 in questo caso. 1.440 = 60 * 24, quindi i dati di input devono iniziare dall'ultimo "2021-01-01T00:00:00Z".Scenario batch: sono disponibili più punti dati di destinazione da stimare. Il valore
endTime
sarà maggiore distartTime
. L'inferenza in tali scenari viene eseguita in modo "finestra mobile". Ad esempio, MVAD userà i dati da2021-01-01T00:00:00Z
a2021-01-01T23:59:00Z
(inclusi) per determinare se i dati in sono2021-01-02T00:00:00Z
anomali. Quindi sposta in avanti e usa i dati da2021-01-01T00:01:00Z
a2021-01-02T00:00:00Z
(inclusi) per determinare se i dati in sono2021-01-02T00:01:00Z
anomali. Si sposta nello stesso modo (prendendo 1.440 punti dati da confrontare) fino all'ultimo timestamp specificato daendTime
(o il timestamp effettivo). Pertanto, l'origine dati di inferenza deve contenere dati a partire dastartTime
-slidingWindow
e idealmente contiene in totale di dimensionislidingWindow
+ ().endTime
-startTime
Qual è la differenza tra severity
e score
?
In genere è consigliabile usare severity
come filtro per analizzare le "anomalie" che non sono così importanti per l'azienda. A seconda dello scenario e del modello di dati, le anomalie che sono meno importanti spesso hanno valori relativamente inferiori o valori elevati severity
autonomi (discontinui) severity
come picchi casuali.
Nei casi in cui si è trovata una necessità di regole più sofisticate rispetto alle soglie severity
rispetto o alla durata dei valori elevati severity
continui, è consigliabile usare score
per creare filtri più potenti. Informazioni sull'uso score
di MVAD per determinare le anomalie possono risultare utili:
Si valuta se un punto dati è anomalo sia dal punto di vista globale che locale. Se score
in un timestamp è superiore a una determinata soglia, il timestamp viene contrassegnato come anomalia. Se score
è inferiore alla soglia ma è relativamente superiore in un segmento, viene anche contrassegnato come anomalia.
Passaggi successivi
- Guide introduttive: usare la libreria client multivariata Rilevamento anomalie.
- Informazioni sugli algoritmi sottostanti che alimentano Rilevamento anomalie Multivariate