Zelfstudie: Multivariate Anomaly Detection in één uur leren
Anomaly Detector multivariate Anomaly Detection (MVAD) is een geavanceerd AI-hulpprogramma voor het detecteren van afwijkingen uit een groep metrische gegevens op een manier zonder supermoed.
Over het algemeen kunt u de volgende stappen nemen om MVAD te gebruiken:
- Maak een Anomaly Detector die ondersteuning biedt voor MVAD in Azure.
- Bereid uw gegevens voor.
- Een MVAD-model trainen.
- De status van uw model opvragen.
- Detecteer afwijkingen met het getrainde MVAD-model.
- Haal de deferentieresultaten op en interpreteer deze.
In deze zelfstudie gaat u:
- Meer informatie over het voorbereiden van uw gegevens in de juiste indeling.
- Meer inzicht in het trainen en afleiden met MVAD.
- Inzicht in de invoerparameters en hoe u de resultaten van de uitvoerdeferentie interpreteert.
1. Maak een Anomaly Detector die ondersteuning biedt voor MVAD
- Een Azure-abonnement maken als u er nog geen hebt - Maak er gratis een
- Zodra u uw Azure-abonnement hebt, maakt u Anomaly Detector resource in de Azure Portal om uw API-sleutel en API-eindpunt op te halen.
Notitie
Tijdens de preview-fase is MVAD alleen beschikbaar in beperkte regio's. Maak een bladwijzer voor wat er nieuw is in Anomaly Detector up-to-date te houden met de implementaties van MVAD-regio's. U kunt ook een probleem met GitHub of contact met ons opnemen op AnomalyDetector@microsoft.com om een aanvraag voor specifieke regio's uit te brengen.
2. Gegevensvoorbereiding
Vervolgens moet u uw trainingsgegevens (en de deferencegegevens) voorbereiden.
Schema voor invoergegevens
MVAD detecteert afwijkingen in een groep metrische gegevens en we noemen elke metrische gegevens een variabele of een tijdreeks.
U kunt het voorbeeldgegevensbestand downloaden van Microsoft om het geaccepteerde schema te controleren van: https://aka.ms/AnomalyDetector/MVADSampleData
Elke variabele moet twee en slechts twee velden hebben, en , en moeten worden opgeslagen in een
timestampvalueCSV-bestand (door komma's gescheiden waarden).De kolomnamen van het CSV-bestand moeten nauwkeurig
timestampenvalue, casegevoelig zijn.De
timestampwaarden moeten voldoen aan ISO 8601; de kan gehele getallen of decimalen met een aantal decimalenvaluezijn. Een goed voorbeeld van de inhoud van een CSV-bestand:tijdstempel waarde 2019-04-01T00:00:00Z 5 2019-04-01T00:01:00Z 3,6 2019-04-01T00:02:00Z 4 ... ... Notitie
Als uw tijdstempels uren, minuten en/of seconden hebben, moet u ervoor zorgen dat ze goed worden afgerond voordat u de API's aanroept.
Als uw gegevensfrequentie bijvoorbeeld elke 30 seconden één gegevenspunt moet zijn, maar u wel tijdstempels ziet zoals '12:00:01' en '12:00:28', is het een sterk signaal dat u de tijdstempels vooraf moet verwerken naar nieuwe waarden zoals 12:00:00 en 12:00:30.
Raadpleeg de sectie 'Tijdstempel round-up' in het document best practices voor meer informatie.
De naam van het CSV-bestand wordt gebruikt als de naam van de variabele en moet uniek zijn. Bijvoorbeeld 'temperature.csv' en 'humidity.csv'.
Variabelen voor training en variabelen voor de deferentie moeten consistent zijn. Als u bijvoorbeeld , , , , en gebruikt voor de training, moet u exact dezelfde variabelen
series_1series_2voor deseries_3series_4series_5deferie verstrekken.CSV-bestanden moeten worden gecomprimeerd in een ZIP-bestand en worden geüpload naar een Azure Blob-container. Het zip-bestand kan elke want-naam hebben.
Mapstructuur
Een veelvoorkomende fout bij het voorbereiden van gegevens zijn extra mappen in het zip-bestand. Stel bijvoorbeeld dat de naam van het zip-bestand series.zip is. Nadat de bestanden naar een nieuwe map zijn gedecomprimeert, is het juiste pad naar CSV-bestanden en kan een ./series verkeerd pad ./series/series_1.csv ./series/foo/bar/series_1.csv zijn.
Het juiste voorbeeld van de mapstructuur na het decomprimeren van het zip-bestand in Windows
.
└── series
├── series_1.csv
├── series_2.csv
├── series_3.csv
├── series_4.csv
└── series_5.csv
Een onjuist voorbeeld van de mapstructuur na het decomprimeren van het zip-bestand in Windows
.
└── series
└── series
├── series_1.csv
├── series_2.csv
├── series_3.csv
├── series_4.csv
└── series_5.csv
Hulpprogramma's voor het in- en uploaden van gegevens
In deze sectie delen we enkele voorbeeldcode en hulpprogramma's die u kunt kopiëren en bewerken om toe te voegen aan uw eigen toepassingslogica die betrekking heeft op MVAD-invoergegevens.
CSV-bestanden comprimeren in * nix
zip -j series.zip series/*.csv
CSV-bestanden comprimeren in Windows
- Navigeer naar de map met alle CSV-bestanden.
- Selecteer alle CSV-bestanden die u nodig hebt.
- Klik met de rechtermuisknop op een van de CSV-bestanden en selecteer
Send to. - Selecteer
Compressed (zipped) folderin de vervolgkeuzekeuzekeuze. - Wijzig de naam van het ZIP-bestand naar behoefte.
Met Python-code & gegevens geüpload naar Azure Blob Storage
Raadpleeg dit document voor meer informatie over het uploaden van een bestand naar Azure Blob.
U kunt ook de onderstaande voorbeeldcode gebruiken om het bestand te uploaden en te uploaden. U kunt de Python-code in deze sectie kopiëren en opslaan als een .py-bestand (bijvoorbeeld ) en uitvoeren met opdrachtregels zipAndUpload.py zoals deze:
python zipAndUpload.py -s "foo\bar" -z test123.zip -c {azure blob connection string} -n container_xxxMet deze opdracht worden alle CSV-bestanden in gecomprimeerd tot
foo\baréén ZIP-bestand met de naamtest123.zip. Deze wordttest123.zipgeüpload naar de containercontainer_xxxin uw blob.python zipAndUpload.py -s "foo\bar" -z test123.zip -c {azure blob connection string} -n container_xxx -rMet deze opdracht doet u hetzelfde als hierboven, maar het ZIP-bestand wordt verwijderd nadat
test123.ziphet is geüpload.
Argumenten:
--source-folder,-s, , pad naar de bronmap met CSV-bestanden--zipfile-name,-z, de naam van het zip-bestand--connection-string,-c, connection string aan uw blob--container-name,-n, de naam van de container--remove-zipfile,-rindien aan, verwijdert u het zip-bestand
import os
import argparse
import shutil
import sys
from azure.storage.blob import BlobClient
import zipfile
class ZipError(Exception):
pass
class UploadError(Exception):
pass
def zip_file(root, name):
try:
z = zipfile.ZipFile(name, "w", zipfile.ZIP_DEFLATED)
for f in os.listdir(root):
if f.endswith("csv"):
z.write(os.path.join(root, f), f)
z.close()
print("Compress files success!")
except Exception as ex:
raise ZipError(repr(ex))
def upload_to_blob(file, conn_str, cont_name, blob_name):
try:
blob_client = BlobClient.from_connection_string(conn_str, container_name=cont_name, blob_name=blob_name)
with open(file, "rb") as f:
blob_client.upload_blob(f, overwrite=True)
print("Upload Success!")
except Exception as ex:
raise UploadError(repr(ex))
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--source-folder", "-s", type=str, required=True, help="path to source folder")
parser.add_argument("--zipfile-name", "-z", type=str, required=True, help="name of the zip file")
parser.add_argument("--connection-string", "-c", type=str, help="connection string")
parser.add_argument("--container-name", "-n", type=str, help="container name")
parser.add_argument("--remove-zipfile", "-r", action="store_true", help="whether delete the zip file after uploading")
args = parser.parse_args()
try:
zip_file(args.source_folder, args.zipfile_name)
upload_to_blob(args.zipfile_name, args.connection_string, args.container_name, args.zipfile_name)
except ZipError as ex:
print(f"Failed to compress files. {repr(ex)}")
sys.exit(-1)
except UploadError as ex:
print(f"Failed to upload files. {repr(ex)}")
sys.exit(-1)
except Exception as ex:
print(f"Exception encountered. {repr(ex)}")
try:
if args.remove_zipfile:
os.remove(args.zipfile_name)
except Exception as ex:
print(f"Failed to delete the zip file. {repr(ex)}")
3. Een MVAD-model trainen
Hier ziet u een voorbeeld van de aanvraag body en de voorbeeldcode in Python om een MVAD-model te trainen.
// Sample Request Body
{
"slidingWindow": 200,
"alignPolicy": {
"alignMode": "Outer",
"fillNAMethod": "Linear",
"paddingValue": 0
},
// This could be your own ZIP file of training data stored on Azure Blob and a SAS url could be used here
"source": "https://aka.ms/AnomalyDetector/MVADSampleData",
"startTime": "2021-01-01T00:00:00Z",
"endTime": "2021-01-02T12:00:00Z",
"displayName": "Contoso model"
}
# Sample Code in Python
########### Python 3.x #############
import http.client, urllib.request, urllib.parse, urllib.error, base64
headers = {
# Request headers
'Content-Type': 'application/json',
'Ocp-Apim-Subscription-Key': '{API key}',
}
params = urllib.parse.urlencode({})
try:
conn = http.client.HTTPSConnection('{endpoint}')
conn.request("POST", "/anomalydetector/v1.1-preview/multivariate/models?%s" % params, "{request body}", headers)
response = conn.getresponse()
data = response.read()
print(data)
conn.close()
except Exception as e:
print("[Errno {0}] {1}".format(e.errno, e.strerror))
####################################
Responscode 201 geeft aan dat de aanvraag is geslaagd.
Invoerparameters
Vereiste parameters
Deze drie parameters zijn vereist voor api-aanvragen voor training en de deference:
source- De koppeling naar uw ZIP-bestand in de Azure Blob Storage shared access signatures (SAS).startTime- De begintijd van gegevens die worden gebruikt voor training of de deferie. Als deze eerder is dan de werkelijke vroegste tijdstempel in de gegevens, wordt de daadwerkelijke vroegste tijdstempel gebruikt als beginpunt.endTime- De eindtijd van gegevens die worden gebruikt voor training of de deferie, die later moet zijn dan of gelijk moet zijn aanstartTime. Als later is dan de werkelijke meest recente tijdstempel in de gegevens, wordt de werkelijke laatste tijdstempel gebruiktendTimeals het eindpunt. AlsendTimegelijk is aan , betekent dit destartTimedeferentie van één gegevenspunt dat vaak wordt gebruikt in streamingscenario's.
Optionele parameters voor trainings-API
Andere parameters voor de trainings-API zijn optioneel:
slidingWindow- Hoeveel gegevenspunten worden gebruikt om afwijkingen te bepalen. Een geheel getal tussen 28 en 2880. De standaardwaarde is 300. Als is voor modeltraining, moeten ten minste punten toegankelijk zijn vanuit het bronbestand tijdensslidingWindowkdekdeference om geldige resultaten te krijgen.MVAD neemt een segment van gegevenspunten om te bepalen of het volgende gegevenspunt een anomalie is. De lengte van het segment is
slidingWindow. Houd twee dingen in gedachten bij het kiezen van eenslidingWindowwaarde:- De eigenschappen van uw gegevens: of deze periodiek zijn en wat de steekproeffrequentie is. Wanneer uw gegevens periodiek zijn, kunt u de lengte van 1 tot 3 cycli instellen als de
slidingWindow. Wanneer uw gegevens een hoge frequentie (kleine granulariteit) hebben, zoals op minuutniveau of tweede niveau, kunt u een relatief hogere waarde vanslidingWindowinstellen. - De balans tussen de training/de deferietijd en de mogelijke invloed op de prestaties. Een grotere
slidingWindowkan leiden tot langere training/de deference time. Er is geen garantie dat grotere s leiden totslidingWindownauwkeurigheidsverbeteringen. Een kleineslidingWindowkan ertoe leiden dat het model moeilijk kan worden geconvergeert naar een optimale oplossing. Het is bijvoorbeeld moeilijk om afwijkingen te detecteren wanneerslidingWindowslechts twee punten heeft.
- De eigenschappen van uw gegevens: of deze periodiek zijn en wat de steekproeffrequentie is. Wanneer uw gegevens periodiek zijn, kunt u de lengte van 1 tot 3 cycli instellen als de
alignMode- Meerdere variabelen (tijdreeksen) uitlijnen op tijdstempels. Er zijn twee opties voor deze parameter,Inneren , en deOuterstandaardwaarde isOuter.Deze parameter is essentieel wanneer er een onjuiste uitlijning is tussen tijdstempelreeksen van de variabelen. Het model moet de variabelen uitlijnen op dezelfde tijdstempelreeks voordat verdere verwerking wordt uitgevoerd.
Innerbetekent dat het model detectieresultaten alleen rapporteert op tijdstempels waarop elke variabele een waarde heeft, dat wil zeggen het snijpunt van alle variabelen.Outerbetekent dat het model detectieresultaten rapporteert over tijdstempels waarop een variabele een waarde heeft, dat wil zeggen de union van alle variabelen.Hier is een voorbeeld om verschillende waarden uit
alignModelte leggen.Variabele-1
tijdstempel waarde 2020-11-01 1 2020-11-02 2 2020-11-04 4 2020-11-05 5 Variabele-2
tijdstempel waarde 2020-11-01 1 2020-11-02 2 2020-11-03 3 2020-11-04 4 Innertwee variabelen lid makentijdstempel Variabele-1 Variabele-2 2020-11-01 1 1 2020-11-02 2 2 2020-11-04 4 4 Outertwee variabelen lid makentijdstempel Variabele-1 Variabele-2 2020-11-01 1 1 2020-11-02 2 2 2020-11-03 nan3 2020-11-04 4 4 2020-11-05 5 nanfillNAMethod- Denansamengevoegde tabel invullen. Mogelijk ontbreken er waarden in de samengevoegde tabel en moeten deze correct worden verwerkt. We bieden verschillende methoden om ze te vullen. De opties zijnLinear, , , en dePreviousSubsequentZeroFixedstandaardwaarde isLinear.Optie Methode LinearWaarden nanopvullen met lineaire interpolatiePreviousDe laatste geldige waarde doorgeven om hiaten op te vullen. Voorbeeld: [1, 2, nan, 3, nan, 4]->[1, 2, 2, 3, 3, 4]SubsequentGebruik de volgende geldige waarde om hiaten op te vullen. Voorbeeld: [1, 2, nan, 3, nan, 4]->[1, 2, 3, 3, 4, 4]ZeroVul nanwaarden in met 0.FixedVul nanwaarden in met een opgegeven geldige waarde die moet worden opgegeven inpaddingValue.paddingValue- De opvullingswaarde wordt gebruikt omnanop te vullen wanneer is en moet in dat geval wordenfillNAMethodFixedopgegeven. In andere gevallen is dit optioneel.displayName- Dit is een optionele parameter die wordt gebruikt om modellen te identificeren. U kunt deze bijvoorbeeld gebruiken om parameters, gegevensbronnen en andere metagegevens over het model en de invoergegevens te markeren. De standaardwaarde is een lege tekenreeks.
4. Modelstatus op halen
Omdat de trainings-API asynchroon is, krijgt u het model niet onmiddellijk nadat u de trainings-API hebt aangeroepen. U kunt echter de status van modellen opvragen op API-sleutel, waarmee alle modellen worden weergegeven, of op model-id, waarmee informatie over het specifieke model wordt weergegeven.
Een lijst met alle modellen maken
U kunt naar deze pagina verwijzen voor informatie over de aanvraag-URL en aanvraagheaders. U ziet dat we slechts 10 modellen retourneren, geordend op updatetijd, maar u kunt andere modellen bezoeken door de parameters en in te stellen $skip $top in de aanvraag-URL. Als uw aanvraag-URL bijvoorbeeld is, slaan we de 10 meest recente modellen over en retourneren https://{endpoint}/anomalydetector/v1.1-preview/multivariate/models?$skip=10&$top=20 we de volgende 20 modellen.
Een voorbeeld van een antwoord is
{
"models": [
{
"createdTime":"2020-12-01T09:43:45Z",
"displayName":"DevOps-Test",
"lastUpdatedTime":"2020-12-01T09:46:13Z",
"modelId":"b4c1616c-33b9-11eb-824e-0242ac110002",
"status":"READY",
"variablesCount":18
},
{
"createdTime":"2020-12-01T09:43:30Z",
"displayName":"DevOps-Test",
"lastUpdatedTime":"2020-12-01T09:45:10Z",
"modelId":"ab9d3e30-33b9-11eb-a3f4-0242ac110002",
"status":"READY",
"variablesCount":18
}
],
"currentCount": 1,
"maxCount": 50,
"nextLink": "<link to more models>"
}
Het antwoord bevat 4 velden, models currentCount , , en maxCount nextLink .
modelsbevat de aangemaakte tijd, de laatste bijgewerkte tijd, de model-id, de weergavenaam, het aantal variabelen en de status van elk model.currentCountbevat het aantal getrainde multivariate modellen.maxCountis het maximum aantal modellen dat wordt ondersteund door deze Anomaly Detector resource.nextLinkkan worden gebruikt om meer modellen op te halen.
Modellen op model-id op halen
Op deze pagina wordt de aanvraag-URL beschreven voor het opvragen van modelgegevens op model-id. Een voorbeeld van een antwoord ziet er als deze uit
{
"modelId": "45aad126-aafd-11ea-b8fb-d89ef3400c5f",
"createdTime": "2020-06-30T00:00:00Z",
"lastUpdatedTime": "2020-06-30T00:00:00Z",
"modelInfo": {
"slidingWindow": 300,
"alignPolicy": {
"alignMode": "Outer",
"fillNAMethod": "Linear",
"paddingValue": 0
},
"source": "<TRAINING_ZIP_FILE_LOCATED_IN_AZURE_BLOB_STORAGE_WITH_SAS>",
"startTime": "2019-04-01T00:00:00Z",
"endTime": "2019-04-02T00:00:00Z",
"displayName": "Devops-MultiAD",
"status": "READY",
"errors": [],
"diagnosticsInfo": {
"modelState": {
"epochIds": [10, 20, 30, 40, 50, 60, 70, 80, 90, 100],
"trainLosses": [0.6291328072547913, 0.1671326905488968, 0.12354248017072678, 0.1025966405868533,
0.0958492755889896, 0.09069952368736267,0.08686016499996185, 0.0860302299260931,
0.0828735455870684, 0.08235538005828857],
"validationLosses": [1.9232804775238037, 1.0645641088485718, 0.6031560301780701, 0.5302737951278687,
0.4698025286197664, 0.4395163357257843, 0.4182931482799006, 0.4057914316654053,
0.4056498706340729, 0.3849248886108984],
"latenciesInSeconds": [0.3398594856262207, 0.3659665584564209, 0.37360644340515137,
0.3513407707214355, 0.3370304107666056, 0.31876277923583984,
0.3283309936523475, 0.3503587245941162, 0.30800247192382812,
0.3327946662902832]
},
"variableStates": [
{
"variable": "ad_input",
"filledNARatio": 0,
"effectiveCount": 1441,
"startTime": "2019-04-01T00:00:00Z",
"endTime": "2019-04-02T00:00:00Z",
"errors": []
},
{
"variable": "ad_ontimer_output",
"filledNARatio": 0,
"effectiveCount": 1441,
"startTime": "2019-04-01T00:00:00Z",
"endTime": "2019-04-02T00:00:00Z",
"errors": []
},
// More variables
]
}
}
}
U ontvangt gedetailleerdere informatie over het bevraagde model. Het antwoord bevat metagegevens over het model, de trainingsparameters en diagnostische gegevens. Diagnostische informatie is handig voor het opsporen van gegevens en het traceren van de voortgang van de training.
epochIdsgeeft aan hoeveel tijdvakken het model in totaal 100 tijdvakken heeft getraind. Als het model bijvoorbeeld nog steeds de trainingsstatus heeft, kan dit betekenen dat het deepochId50e trainings epoche heeft voltooid en er nog een halve weg[10, 20, 30, 40, 50]te gaan is.trainLossesen worden gebruikt om te controleren of de voortgang van de optimalisatie convergeert. In dat geval zouden devalidationLossestwee verliezen geleidelijk moeten afnemen.latenciesInSecondsbevat de tijdskosten voor elk tijdvak en wordt elke 10 tijdvakken geregistreerd. In dit voorbeeld duurt het 10e epoche ongeveer 0,34 seconden. Dit is handig om de voltooiingstijd van de training te schatten.variableStatesgeeft een overzicht van de informatie over elke variabele. Het is een lijst gerangschikt opfilledNARatioin aflopende volgorde. Het geeft aan hoeveel gegevenspunten er worden gebruikt voor elke variabele enfilledNARatiohoeveel punten er ontbreken. Normaal gesproken moeten wefilledNARatiozo veel mogelijk verminderen. Te veel ontbrekende gegevenspunten zullen de nauwkeurigheid van het model verslechteren.- Fouten tijdens de gegevensverwerking worden in het veld
errorsopgenomen.
5. Deferentie met MVAD
Als u de de deferentie wilt uitvoeren, geeft u de blobbron op in het ZIP-bestand met de deferentiegegevens, de begintijd en de eindtijd.
De deferentie is ook asynchroon, waardoor de resultaten niet onmiddellijk worden geretourneerd. U ziet dat u in een variabele de koppeling van de resultaten moet opslaan in de antwoordheader die de bevat, zodat u mogelijk weet waar u de resultId resultaten later kunt krijgen.
Fouten worden meestal veroorzaakt door modelproblemen of gegevensproblemen. U kunt geen deferentie uitvoeren als het model niet gereed is of als de gegevenskoppeling ongeldig is. Zorg ervoor dat de trainingsgegevens en de deferentiegegevens consistent zijn, wat betekent dat ze exact dezelfde variabelen moeten zijn, maar met verschillende tijdstempels. Meer variabelen, minder variabelen of de deferie met een andere set variabelen slagen niet voor de gegevensverificatiefase en er treden fouten op. Gegevensverificatie wordt uitgesteld, zodat er alleen een foutbericht wordt weergegeven wanneer u de resultaten opvraagt.
6. De deferenceresultaten op halen
U hebt de nodig resultId om resultaten te krijgen. resultId wordt verkregen via de antwoordheader wanneer u de deferentieaanvraag indient. Deze pagina bevat instructies voor het uitvoeren van query's op de deference-resultaten.
Een voorbeeld van een antwoord ziet er als deze uit
{
"resultId": "663884e6-b117-11ea-b3de-0242ac130004",
"summary": {
"status": "READY",
"errors": [],
"variableStates": [
{
"variable": "ad_input",
"filledNARatio": 0,
"effectiveCount": 26,
"startTime": "2019-04-01T00:00:00Z",
"endTime": "2019-04-01T00:25:00Z",
"errors": []
},
{
"variable": "ad_ontimer_output",
"filledNARatio": 0,
"effectiveCount": 26,
"startTime": "2019-04-01T00:00:00Z",
"endTime": "2019-04-01T00:25:00Z",
"errors": []
},
// more variables
],
"setupInfo": {
"source": "https://aka.ms/AnomalyDetector/MVADSampleData",
"startTime": "2019-04-01T00:15:00Z",
"endTime": "2019-04-01T00:40:00Z"
}
},
"results": [
{
"timestamp": "2019-04-01T00:15:00Z",
"errors": [
{
"code": "InsufficientHistoricalData",
"message": "historical data is not enough."
}
]
},
// more results
{
"timestamp": "2019-04-01T00:20:00Z",
"value": {
"contributors": [],
"isAnomaly": false,
"severity": 0,
"score": 0.17805261260751692
}
},
// more results
{
"timestamp": "2019-04-01T00:27:00Z",
"value": {
"contributors": [
{
"contributionScore": 0.0007775013367514271,
"variable": "ad_ontimer_output"
},
{
"contributionScore": 0.0007989604079048129,
"variable": "ad_series_init"
},
{
"contributionScore": 0.0008900927229851369,
"variable": "ingestion"
},
{
"contributionScore": 0.008068144477478554,
"variable": "cpu"
},
{
"contributionScore": 0.008222036467507165,
"variable": "data_in_speed"
},
{
"contributionScore": 0.008674941549594993,
"variable": "ad_input"
},
{
"contributionScore": 0.02232242629793674,
"variable": "ad_output"
},
{
"contributionScore": 0.1583773213660846,
"variable": "flink_last_ckpt_duration"
},
{
"contributionScore": 0.9816531517495176,
"variable": "data_out_speed"
}
],
"isAnomaly": true,
"severity": 0.42135109874230336,
"score": 1.213510987423033
}
},
// more results
]
}
Het antwoord bevat de resultaatstatus, variabele informatie, de deferenceparameters en de deferenceresultaten.
variableStatesgeeft de informatie weer van elke variabele in de deferentieaanvraag.setupInfois de aanvraag body die is verzonden voor deze deferentie.resultsbevat de detectieresultaten. Er zijn drie typische typen detectieresultaten.- Foutcode
InsufficientHistoricalData. Dit gebeurt meestal alleen bij de eerste paar tijdstempels, omdat het model gegevens op een op venster gebaseerde manier de defereert en historische gegevens nodig heeft om een beslissing te nemen. Voor de eerste paar tijdstempels zijn er onvoldoende historische gegevens, zodat er geen deferentie op kan worden uitgevoerd. In dit geval kan het foutbericht worden genegeerd. "isAnomaly": falsegeeft aan dat de huidige tijdstempel geen anomalie is.severitygeeft de relatieve ernst van de anomalie aan en voor normale gegevens is dit altijd 0.scoreis de onbewerkte uitvoer van het model waarop het model een beslissing neemt die zelfs voor normale gegevenspunten niet nul kan zijn.
"isAnomaly": truegeeft een afwijking aan in het huidige tijdstempel.severitygeeft de relatieve ernst van de anomalie aan en voor abnormale gegevens is deze altijd groter dan 0.scoreis de onbewerkte uitvoer van het model waarop het model een beslissing neemt.severityis een afgeleide waarde vanscore. Elk gegevenspunt heeft eenscore.contributorsis een lijst met de bijdragescore van elke variabele. Hogere bijdragescores wijzen op een hogere kans op de hoofdoorzaak. Deze lijst wordt vaak gebruikt voor het interpreteren van afwijkingen en het diagnosticeren van de hoofdoorzaken.
- Foutcode
Notitie
Een veelvoorkomende valkuil is het nemen van alle gegevenspunten isAnomaly = true met als afwijkingen. Dat kan uiteindelijk te veel fout-positieven hebben.
U moet zowel als (of ) gebruiken om afwijkingen op te zoeken die niet ernstig zijn en isAnomaly severity (optioneel) groepering te gebruiken om de duur van de afwijkingen te controleren om willekeurige ruis score te onderdrukken. Raadpleeg de veelgestelde vragen in het document over best practices voor het verschil tussen severity en score .