Share via


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 med startTime. Om endTime är senare än den faktiska senaste tidsstämpeln i data används den faktiska senaste tidsstämpeln som slutpunkt. Om endTime det är startTimelika 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. Om slidingWindow är k för modellträning bör minst k 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 ett slidingWindow värde:

    1. 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.
    2. 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örre slidingWindows leder till noggrannhetsvinster. En liten slidingWindow kan göra det svårt att konvergera modellen till en optimal lösning. Det är till exempel svårt att identifiera avvikelser när slidingWindow det bara finns två punkter.
  • alignMode – Justera flera variabler (tidsserier) efter tidsstämplar. Det finns två alternativ för den här parametern och InnerOuter, och standardvärdet är Outer.

    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å variabler

    timestamp Variabel-1 Variabel-2
    2020-11-01 1 1
    2020-11-02 2 2
    2020-11-04 4 4

    Outer koppla ihop två variabler

    timestamp 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 fyller nan 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 är Linear, Previous, Subsequent, Zerooch och Fixed standardvärdet är Linear.

    Alternativ Metod
    Linear Fyll nan i värden efter linjär interpolation
    Previous 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 i paddingValue.
  • paddingValue - Utfyllnadsvärdet används för att fylla nan när fillNAMethod är Fixed 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 och value, och ska lagras i en fil med kommaavgränsade värden (CSV).

  • Kolumnnamnen för CSV-filen ska vara exakt timestamp och value, 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, och series_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 inledande slidingWindow 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 och endTime 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 är slidingWindow 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 din startTime. Slutsatsdragning i sådana scenarier utförs på ett "flyttande fönster"-sätt. MVAD använder till exempel data från 2021-01-01T00:00:00Z till 2021-01-01T23:59:00Z (inklusive) för att avgöra om data i 2021-01-02T00:00:00Z är avvikande. Sedan går den framåt och använder data från 2021-01-01T00:01:00Z till 2021-01-02T00:00:00Z (inklusive) för att avgöra om data i 2021-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 av endTime (eller den faktiska senaste tidsstämpeln). Därför måste din slutsatsdragningsdatakälla innehålla data från startTime - slidingWindow och helst innehålla totalt storlek slidingWindow + ().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.

Nästa steg