Metodtips för att använda API:et Multivariate Avvikelseidentifiering
Viktigt!
Från och med den 20 september 2023 kan du inte skapa nya Avvikelseidentifiering resurser. Tjänsten Avvikelseidentifiering dras tillbaka den 1 oktober 2026.
Den här artikeln innehåller vägledning om rekommenderade metoder att följa när du använder API:erna för multivariate Avvikelseidentifiering (MVAD). I den här självstudien ska du:
- API-användning: Lär dig hur du använder MVAD utan fel.
- Datateknik: Lär dig hur du bäst lagar dina data så att MVAD presterar bättre.
- Vanliga fallgropar: Lär dig hur du undviker vanliga fallgropar som kunder möter.
- Vanliga frågor och svar: Lär dig svar på vanliga frågor.
API-användning
Följ anvisningarna i det här avsnittet för att undvika fel när du använder MVAD. Om du fortfarande får fel kan du läsa den fullständiga listan över felkoder för förklaringar och åtgärder som ska utföras.
Indataparametrar
Obligatoriska parametrar
Dessa tre parametrar krävs i API-begäranden för träning och slutsatsdragning:
source
– Länken till zip-filen som finns i Azure Blob Storage med signaturer för delad åtkomst (SAS).startTime
– Starttiden för data som används för träning eller slutsatsdragning. Om den är tidigare än den faktiska tidigaste tidsstämpeln i data används den faktiska tidigaste tidsstämpeln som startpunkt.endTime
– Sluttiden för data som används för träning eller slutsatsdragning som måste vara senare än eller lika medstartTime
. OmendTime
är senare än den faktiska senaste tidsstämpeln i data används den faktiska senaste tidsstämpeln som slutpunkt. OmendTime
det ärstartTime
lika med innebär det slutsatsdragning av en enskild datapunkt som ofta används i strömningsscenarier.
Valfria parametrar för tränings-API
Andra parametrar för tränings-API är valfria:
slidingWindow
– Hur många datapunkter som används för att fastställa avvikelser. Ett heltal mellan 28 och 2 880. Standardvärdet är 300. OmslidingWindow
ärk
för modellträning bör minstk
punkter vara tillgängliga från källfilen under slutsatsdragningen för att få giltiga resultat.MVAD tar ett segment av datapunkter för att avgöra om nästa datapunkt är en avvikelse. Längden på segmentet är
slidingWindow
. Tänk på två saker när du väljer ettslidingWindow
värde:- Egenskaperna för dina data: om de är periodiska och samplingsfrekvensen. När dina data är periodiska kan du ange längden på 1–3 cykler som
slidingWindow
. När dina data har hög frekvens (liten kornighet) som minutnivå eller andra nivån kan du ange ett relativt högre värde påslidingWindow
. - Kompromissen mellan träning/inferenstid och potentiell prestandapåverkan. En större
slidingWindow
kan orsaka längre träning/inferenstid. Det finns ingen garanti för att störreslidingWindow
s leder till noggrannhetsvinster. En litenslidingWindow
kan göra det svårt att konvergera modellen till en optimal lösning. Det är till exempel svårt att identifiera avvikelser närslidingWindow
det bara finns två punkter.
- Egenskaperna för dina data: om de är periodiska och samplingsfrekvensen. När dina data är periodiska kan du ange längden på 1–3 cykler som
alignMode
– Justera flera variabler (tidsserier) efter tidsstämplar. Det finns två alternativ för den här parametern ochInner
Outer
, och standardvärdet ärOuter
.Den här parametern är kritisk när det finns feljustering mellan tidsstämpelsekvenser för variablerna. Modellen måste justera variablerna till samma tidsstämpelsekvens innan ytterligare bearbetning.
Inner
innebär att modellen endast rapporterar identifieringsresultat på tidsstämplar där varje variabel har ett värde, dvs. skärningspunkten för alla variabler.Outer
innebär att modellen rapporterar identifieringsresultat på tidsstämplar där en variabel har ett värde, dvs. union av alla variabler.Här är ett exempel för att förklara olika
alignModel
värden.Variabel-1
timestamp värde 2020-11-01 1 2020-11-02 2 2020-11-04 4 2020-11-05 5 Variabel-2
timestamp värde 2020-11-01 1 2020-11-02 2 2020-11-03 3 2020-11-04 4 Inner
koppla ihop två variablertimestamp Variabel-1 Variabel-2 2020-11-01 1 1 2020-11-02 2 2 2020-11-04 4 4 Outer
koppla ihop två variablertimestamp Variabel-1 Variabel-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
– Så här fyllernan
du i den sammanfogade tabellen. Det kan saknas värden i den sammanfogade tabellen och de bör hanteras korrekt. Vi tillhandahåller flera metoder för att fylla upp dem. Alternativen ärLinear
,Previous
,Subsequent
,Zero
och ochFixed
standardvärdet ärLinear
.Alternativ Metod Linear
Fyll nan
i värden efter linjär interpolationPrevious
Sprid det senaste giltiga värdet för att fylla luckor. Exempel: [1, 2, nan, 3, nan, 4]
->[1, 2, 2, 3, 3, 4]
Subsequent
Använd nästa giltiga värde för att fylla luckor. Exempel: [1, 2, nan, 3, nan, 4]
->[1, 2, 3, 3, 4, 4]
Zero
Fyll nan
värden med 0.Fixed
Fyll nan
i värden med ett angivet giltigt värde som ska anges ipaddingValue
.paddingValue
- Utfyllnadsvärdet används för att fyllanan
närfillNAMethod
ärFixed
och måste anges i så fall. I andra fall är det valfritt.displayName
– Det här är en valfri parameter som används för att identifiera modeller. Du kan till exempel använda den för att markera parametrar, datakällor och andra metadata om modellen och dess indata. Standardvärdet är en tom sträng.
Schema för indata
MVAD identifierar avvikelser från en grupp mått och vi kallar varje mått för en variabel eller en tidsserie.
Du kan ladda ned exempeldatafilen från Microsoft för att kontrollera det accepterade schemat från: https://aka.ms/AnomalyDetector/MVADSampleData
Varje variabel måste ha två och endast två fält,
timestamp
ochvalue
, och ska lagras i en fil med kommaavgränsade värden (CSV).Kolumnnamnen för CSV-filen ska vara exakt
timestamp
ochvalue
, skiftlägeskänsliga.Värdena
timestamp
ska överensstämma med ISO 8601.value
Det kan vara heltal eller decimaler med valfritt antal decimaler. Ett bra exempel på innehållet i en CSV-fil:timestamp värde 2019-04-01T00:00:00Z 5 2019-04-01T00:01:00Z 3,6 2019-04-01T00:02:00Z 4 ... ... Kommentar
Om dina tidsstämplar har timmar, minuter och/eller sekunder kontrollerar du att de är korrekt avrundade innan du anropar API:erna.
Om din datafrekvens till exempel ska vara en datapunkt var 30:e sekund, men du ser tidsstämplar som "12:00:01" och "12:00:28", är det en stark signal om att du bör förbearbeta tidsstämplarna till nya värden som "12:00:00" och "12:00:30".
Mer information finns i avsnittet "Tidsstämpelavrundning" i dokumentet med metodtips.
Namnet på csv-filen används som variabelnamn och bör vara unikt. Till exempel "temperature.csv" och "humidity.csv".
Variabler för träning och variabler för slutsatsdragning bör vara konsekventa. Om du till exempel använder
series_1
,series_2
,series_3
,series_4
, ochseries_5
för träning bör du ange exakt samma variabler för slutsatsdragning.CSV-filer ska komprimeras till en zip-fil och laddas upp till en Azure Blob-container. Zip-filen kan ha det namn du vill.
Mappstrukturen
Ett vanligt misstag vid förberedelse av data är extra mappar i zip-filen. Anta till exempel att namnet på zip-filen är series.zip
. När du sedan har expanderat filerna till en ny mapp ./series
är ./series/series_1.csv
rätt sökväg till CSV-filer och en fel sökväg kan vara ./series/foo/bar/series_1.csv
.
Rätt exempel på katalogträdet efter dekomprimering av zip-filen i Windows
.
└── series
├── series_1.csv
├── series_2.csv
├── series_3.csv
├── series_4.csv
└── series_5.csv
Ett felaktigt exempel på katalogträdet efter dekomprimering av zip-filen i Windows
.
└── series
└── series
├── series_1.csv
├── series_2.csv
├── series_3.csv
├── series_4.csv
└── series_5.csv
Datateknik
Nu kan du köra koden med MVAD-API:er utan fel. Vad kan göras för att förbättra modellens noggrannhet?
Datakvalitet
- Eftersom modellen lär sig normala mönster från historiska data bör träningsdata representera systemets övergripande normala tillstånd. Det är svårt för modellen att lära sig dessa typer av mönster om träningsdata är fulla av avvikelser. Ett empiriskt tröskelvärde för onormal frekvens är 1 % och lägre för god noggrannhet.
- I allmänhet bör det saknade värdeförhållandet för träningsdata vara under 20 %. För mycket data som saknas kan sluta med att automatiskt fyllda värden (vanligtvis linjära värden eller konstanta värden) lärs som normala mönster. Det kan leda till att verkliga datapunkter (som inte saknas) identifieras som avvikelser.
Datakvantitet
Den underliggande modellen för MVAD har miljontals parametrar. Den behöver ett minsta antal datapunkter för att lära sig en optimal uppsättning parametrar. Den empiriska regeln är att du behöver ange 5 000 eller fler datapunkter (tidsstämplar) per variabel för att träna modellen för god noggrannhet. I allmänhet, ju mer träningsdata, bättre noggrannhet. Men i de fall du inte kan samla in så mycket data rekommenderar vi ändå att du experimenterar med mindre data och ser om den komprometterade noggrannheten fortfarande är acceptabel.
Varje gång du anropar slutsatsdragnings-API:et måste du se till att källdatafilen innehåller tillräckligt med datapunkter. Det är normalt
slidingWindow
+ antal datapunkter som verkligen behöver slutsatsdragningsresultat. I ett direktuppspelningsfall när du till exempel varje gång du vill dra slutsatser om en ny tidsstämpel kan datafilen endast innehålla den inledandeslidingWindow
plus en datapunkten. Sedan kan du gå vidare och skapa en annan zip-fil med samma antal datapunkter (slidingWindow
+ 1) men flytta ett steg till högersidan och skicka för ett annat slutsatsdragningsjobb.Allt utöver det eller "före" det inledande skjutfönstret påverkar inte slutsatsdragningsresultatet alls och kan bara orsaka nedgradering av prestanda. Allt under detta kan leda till ett
NotEnoughInput
fel.
Tidsstämpel avrunda uppåt
I en grupp variabler (tidsserier) kan varje variabel samlas in från en oberoende källa. Tidsstämplarna för olika variabler kan vara inkonsekventa med varandra och med de kända frekvenserna. Här är ett enkelt exempel.
Variabel-1
timestamp | värde |
---|---|
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 |
Variabel-2
timestamp | värde |
---|---|
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 |
Vi har två variabler som samlas in från två sensorer som skickar en datapunkt var 30:e sekund. Sensorerna skickar dock inte datapunkter med en strikt jämn frekvens, utan ibland tidigare och ibland senare. Eftersom MVAD tar hänsyn till korrelationer mellan olika variabler måste tidsstämplar justeras korrekt så att måtten korrekt kan återspegla systemets villkor. I exemplet ovan måste tidsstämplar för variabel 1 och variabel 2 vara korrekt avrundade till frekvensen före justeringen.
Nu ska vi se vad som händer om de inte bearbetas i förväg. Om vi anger alignMode
till Outer
(vilket innebär union av två uppsättningar) är den sammanfogade tabellen:
timestamp | Variabel-1 | Variabel-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
anger saknade värden. Det är uppenbart att den sammanfogade tabellen inte är vad du kanske hade förväntat dig. Variabel 1 och variabel 2 interleave och MVAD-modellen kan inte extrahera information om korrelationer mellan dem. Om vi anger alignMode
till Inner
är den sammanfogade tabellen tom eftersom det inte finns någon vanlig tidsstämpel i variabel 1 och variabel 2.
Därför bör tidsstämplarna för variabel 1 och variabel 2 förbearbetas (avrundas till närmaste 30-sekunders tidsstämplar) och de nya tidsserierna är:
Variabel-1
timestamp | värde |
---|---|
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 |
Variabel-2
timestamp | värde |
---|---|
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 |
Nu är den sammanfogade tabellen mer rimlig.
timestamp | Variabel-1 | Variabel-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 |
Värden för olika variabler vid nära tidsstämplar är väl justerade och MVAD-modellen kan nu extrahera korrelationsinformation.
Begränsningar
Det finns vissa begränsningar i både tränings- och slutsatsdragnings-API:erna. Du bör vara medveten om dessa begränsningar för att undvika fel.
Allmänna begränsningar
- Skjutfönster: 28-2880 tidsstämplar, standardvärdet är 300. För periodiska data anger du längden på 2–4 cykler som skjutfönster.
- Variabelnummer: För träning och batchinferens, högst 301 variabler.
Träningsbegränsningar
- Tidsstämplar: Högst 1000000. För få tidsstämplar kan minska modellkvaliteten. Vi rekommenderar att du har fler än 5 000 tidsstämplar.
- Kornighet: Den minsta kornigheten är
per_second
.
Begränsningar för batchinferens
- Tidsstämplar: Högst 20000, minst 1 glidande fönsterlängd.
Begränsningar för inferens för direktuppspelning
- Tidsstämplar: Högst 2880, minst 1 skjutfönsterlängd.
- Identifiera tidsstämplar: Från 1 till 10.
Modellkvalitet
Hur hanterar man falska positiva och falska negativa i verkliga scenarier?
Vi har angett allvarlighetsgrad som anger betydelsen av avvikelser. Falska positiva identifieringar kan filtreras bort genom att ange ett tröskelvärde för allvarlighetsgraden. Ibland kan för många falska positiva identifieringar visas när det finns mönsterförskjutningar i slutsatsdragningsdata. I sådana fall kan en modell behöva tränas om på nya data. Om träningsdata innehåller för många avvikelser kan det finnas falska negativa identifieringsresultat. Det beror på att modellen lär sig mönster från träningsdata och avvikelser kan medföra bias till modellen. Korrekt datarensning kan därför bidra till att minska falska negativa identifieringar.
Hur beräknar man vilken modell som är bäst att använda enligt förlust och valideringsförlust för träning?
Generellt sett är det svårt att avgöra vilken modell som är bäst utan en märkt datauppsättning. Vi kan dock utnyttja tränings- och valideringsförlusterna för att få en grov uppskattning och ta bort dessa dåliga modeller. Först måste vi se om träningsförlusterna konvergerar. Avvikande förluster indikerar ofta dålig kvalitet på modellen. För det andra kan förlustvärden hjälpa dig att identifiera om underanpassning eller överanpassning sker. Modeller som underanpassar eller överanpassar kanske inte har önskad prestanda. För det tredje, även om definitionen av förlustfunktionen inte återspeglar identifieringsprestandan direkt, kan förlustvärden vara ett extra verktyg för att uppskatta modellkvaliteten. Lågt förlustvärde är ett nödvändigt villkor för en bra modell, vilket innebär att vi kan ta bort modeller med höga förlustvärden.
Vanliga problem
Förutom felkodstabellen har vi lärt oss från kunder som du några vanliga fallgropar när du använder MVAD-API:er. Den här tabellen hjälper dig att undvika dessa problem.
Fallgrop | Följd | Förklaring och lösning |
---|---|---|
Tidsstämplar i träningsdata och/eller slutsatsdragningsdata avrundades inte uppåt för att överensstämma med respektive datafrekvens för varje variabel. | Tidsstämplarna för slutsatsdragningsresultatet är inte som förväntat: antingen för få tidsstämplar eller för många tidsstämplar. | Se Tidsstämpel för avrundning. |
För många avvikande datapunkter i träningsdata | Modellnoggrannheten påverkas negativt eftersom den behandlar avvikande datapunkter som normala mönster under träningen. | Empiriskt, hålla den onormala frekvensen på eller under 1% kommer att hjälpa. |
För lite träningsdata | Modellnoggrannheten komprometteras. | Empiriskt kräver träning av en MVAD-modell 15 000 eller fler datapunkter (tidsstämplar) per variabel för att hålla en god noggrannhet. |
Ta alla datapunkter med isAnomaly =true som avvikelser |
För många falska positiva identifieringar | Du bör använda både isAnomaly och severity (eller score ) för att sålla ut avvikelser som inte är allvarliga och (valfritt) använda gruppering för att kontrollera avvikelsernas varaktighet för att förhindra slumpmässiga brus. Se avsnittet Vanliga frågor och svar nedan för skillnaden mellan severity och score . |
Undermappar zippads in i datafilen för träning eller slutsatsdragning. | Csv-datafilerna i undermappar ignoreras under träning och/eller slutsatsdragning. | Inga undermappar tillåts i zip-filen. Mer information finns i Mappstruktur . |
För mycket data i inferensdatafilen: till exempel komprimera alla historiska data i zip-filen för slutsatsdragningsdata | Du kanske inte ser några fel, men du får sämre prestanda när du försöker ladda upp zip-filen till Azure Blob och när du försöker köra slutsatsdragning. | Mer information finns i Datakvantitet . |
Skapa Avvikelseidentifiering resurser i Azure-regioner som inte har stöd för MVAD ännu och anropa MVAD-API:er | Du får felet "resursen hittades inte" när du anropar MVAD-API:erna. | Under förhandsversionen är MVAD endast tillgängligt i begränsade regioner. Bokmärke Nyheter i Avvikelseidentifiering för att hålla dig uppdaterad med distributioner av MVAD-regioner. Du kan också lämna in ett GitHub-problem eller kontakta oss på AnomalyDetector@microsoft.com för att begära specifika regioner. |
Vanliga frågor
Hur fungerar MVAD-skjutfönster?
Vi använder två exempel för att lära oss hur MVAD:s skjutfönster fungerar. Anta att du har angett slidingWindow
= 1 440 och att dina indata har en minuts kornighet.
Strömningsscenario: Du vill förutsäga om ONE-datapunkten "2021-01-02T00:00:00Z" är avvikande. Din
startTime
ochendTime
kommer att vara samma värde ("2021-01-02T00:00:00Z"). Din slutsatsdragningsdatakälla måste dock innehålla minst 1 440 + 1 tidsstämplar. Eftersom MVAD tar de ledande data före måldatapunkten ("2021-01-02T00:00:00Z") för att avgöra om målet är en avvikelse. Längden på de inledande data som behövs ärslidingWindow
eller 1 440 i det här fallet. 1 440 = 60 * 24, så dina indata måste börja senast "2021-01-01T00:00:00Z".Batch-scenario: Du har flera måldatapunkter att förutsäga. Din
endTime
kommer att vara större än dinstartTime
. Slutsatsdragning i sådana scenarier utförs på ett "flyttande fönster"-sätt. MVAD använder till exempel data från2021-01-01T00:00:00Z
till2021-01-01T23:59:00Z
(inklusive) för att avgöra om data i2021-01-02T00:00:00Z
är avvikande. Sedan går den framåt och använder data från2021-01-01T00:01:00Z
till2021-01-02T00:00:00Z
(inklusive) för att avgöra om data i2021-01-02T00:01:00Z
är avvikande. Den går vidare på samma sätt (tar 1 440 datapunkter att jämföra) tills den senaste tidsstämpeln som anges avendTime
(eller den faktiska senaste tidsstämpeln). Därför måste din slutsatsdragningsdatakälla innehålla data frånstartTime
-slidingWindow
och helst innehålla totalt storlekslidingWindow
+ ().endTime
-startTime
Vad är skillnaden mellan severity
och score
?
Normalt rekommenderar vi att du använder severity
som filter för att sålla ut "avvikelser" som inte är så viktiga för ditt företag. Beroende på ditt scenario och datamönster har de avvikelser som är mindre viktiga ofta relativt lägre severity
värden eller fristående (diskontinuerliga) höga severity
värden som slumpmässiga toppar.
I fall där du har hittat ett behov av mer avancerade regler än tröskelvärden mot severity
eller varaktighet för kontinuerliga höga severity
värden, kanske du vill använda score
för att skapa kraftfullare filter. Att förstå hur MVAD använder score
för att fastställa avvikelser kan vara till hjälp:
Vi överväger om en datapunkt är avvikande både globalt och lokalt. Om score
tidsstämpeln är högre än ett visst tröskelvärde markeras tidsstämpeln som en avvikelse. Om score
är lägre än tröskelvärdet men är relativt högre i ett segment markeras det också som en avvikelse.