Identifiera dataavvikelse (förhandsversion) på datauppsättningar

GÄLLER FÖR:Python SDK azureml v1

Lär dig hur du övervakar dataavvikelser och anger aviseringar när driften är hög.

Med Azure Machine Learning-datauppsättningsövervakare (förhandsversion) kan du:

  • Analysera driften i dina data för att förstå hur de ändras över tid.
  • Övervaka modelldata för skillnader mellan tränings- och serveringsdatauppsättningar. Börja med att samla in modelldata från distribuerade modeller.
  • Övervaka nya data för skillnader mellan valfri baslinje och måldatauppsättning.
  • Profilera funktioner i data för att spåra hur statistiska egenskaper ändras över tid.
  • Konfigurera aviseringar om dataavvikelser för tidiga varningar om potentiella problem.
  • Skapa en ny datamängdsversion när du fastställer att data har drivit för mycket.

En Azure Machine Learning-datauppsättning används för att skapa övervakaren. Datamängden måste innehålla en tidsstämpelkolumn.

Du kan visa dataavvikelsemått med Python SDK eller i Azure Machine Learning-studio. Andra mått och insikter är tillgängliga via Azure Application Insights-resursen som är associerad med Azure Machine Learning-arbetsytan.

Viktigt!

Dataavvikelseidentifiering för datauppsättningar finns för närvarande i offentlig förhandsversion. Förhandsversionen tillhandahålls utan ett serviceavtal och rekommenderas inte för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds eller kan vara begränsade. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.

Förutsättningar

Om du vill skapa och arbeta med datauppsättningsövervakare behöver du:

Vad är dataavvikelse?

Modellnoggrannheten försämras med tiden, till stor del på grund av dataavvikelser. För maskininlärningsmodeller är dataavvikelse den förändring i modellindata som leder till försämrad modellprestanda. Övervakning av dataavvikelser hjälper till att identifiera dessa modellprestandaproblem.

Orsaker till dataavvikelse är:

  • Överordnad process ändras, till exempel en sensor som ersätts som ändrar måttenheterna från tum till centimeter.
  • Problem med datakvalitet, till exempel att en trasig sensor alltid läser 0.
  • Naturlig drift i data, till exempel genomsnittlig temperatur som ändras med årstiderna.
  • Ändra i relation mellan funktioner eller samvariera skift.

Azure Machine Learning förenklar avvikelseidentifiering genom att beräkna ett enda mått som abstraherar komplexiteten i de datauppsättningar som jämförs. Dessa datauppsättningar kan ha hundratals funktioner och tiotusentals rader. När driften har identifierats ökar du detaljnivån för vilka funktioner som orsakar driften. Sedan inspekterar du mått på funktionsnivå för att felsöka och isolera rotorsaken till driften.

Den här metoden gör det enkelt att övervaka data i stället för traditionella regelbaserade tekniker. Regelbaserade tekniker som tillåtet dataintervall eller tillåtna unika värden kan vara tidskrävande och felbenägna.

I Azure Machine Learning använder du datauppsättningsövervakare för att identifiera och varna för dataavvikelser.

Datauppsättningsövervakare

Med en datamängdsövervakare kan du:

  • Identifiera och varna för dataavvikelser på nya data i en datauppsättning.
  • Analysera historiska data för drift.
  • Profilera nya data över tid.

Algoritmen för dataavvikelse ger ett övergripande mått på ändringar i data och anger vilka funktioner som är ansvariga för ytterligare undersökning. Datamängdsövervakare producerar många andra mått genom att profilera nya data i datamängden timeseries .

Anpassade aviseringar kan konfigureras för alla mått som genereras av övervakaren via Azure Application Insights. Datamängdsövervakare kan användas för att snabbt fånga upp dataproblem och minska tiden för att felsöka problemet genom att identifiera troliga orsaker.

Konceptuellt finns det tre primära scenarier för att konfigurera datauppsättningsövervakare i Azure Machine Learning.

Scenario Description
Övervaka en modells serveringsdata för drift från träningsdata Resultat från det här scenariot kan tolkas som övervakning av en proxy för modellens noggrannhet, eftersom modellnoggrannheten försämras när betjänande data avviker från träningsdata.
Övervaka en tidsseriedatauppsättning för drift från en tidigare tidsperiod. Det här scenariot är mer allmänt och kan användas för att övervaka datauppsättningar som ingår uppströms eller nedströms modellskapande. Måldatauppsättningen måste ha en tidsstämpelkolumn. Baslinjedatauppsättningen kan vara vilken tabelldatauppsättning som helst som har funktioner som är gemensamma med måldatauppsättningen.
Utför analys på tidigare data. Det här scenariot kan användas för att förstå historiska data och informera beslut i inställningar för datauppsättningsövervakare.

Övervakare av datauppsättningar beror på följande Azure-tjänster.

Azure-tjänst Description
Datamängd Drift använder Machine Learning-datauppsättningar för att hämta träningsdata och jämföra data för modellträning. Att generera dataprofil används för att generera några av de rapporterade måtten, till exempel min, max, distinkta värden, distinkta värden.
Azure Machine Learning-pipeline och beräkning Avvikelseberäkningsjobbet finns i en Azure Machine Learning-pipeline. Jobbet utlöses på begäran eller enligt schema för att köras på en beräkning som konfigurerats vid driftövervakningens skapandetid.
Application Insights Drift genererar mått till Application Insights som tillhör arbetsytan för maskininlärning.
Azure Blob Storage Drift genererar mått i json-format till Azure Blob Storage.

Baslinje- och måldatauppsättningar

Du övervakar Azure Machine Learning-datauppsättningar för dataavvikelse. När du skapar en datamängdsövervakare refererar du till din:

  • Baslinjedatauppsättning – vanligtvis träningsdatauppsättningen för en modell.
  • Måldatauppsättningen – vanligtvis modellindata – jämförs över tid med din baslinjedatauppsättning. Den här jämförelsen innebär att måldatauppsättningen måste ha en angiven tidsstämpelkolumn.

Övervakaren jämför baslinje- och måldatauppsättningarna.

Skapa måldatauppsättning

Måldatauppsättningen behöver den timeseries egenskap som angetts på den genom att ange tidsstämpelkolumnen antingen från en kolumn i data eller en virtuell kolumn som härletts från sökvägsmönstret för filerna. Skapa datauppsättningen med en tidsstämpel via Python SDK eller Azure Machine Learning-studio. En kolumn som representerar en "tidsstämpel" måste anges för att lägga timeseries till ett drag i datauppsättningen. Om dina data partitioneras i mappstrukturen med tidsinformation, till exempel {åååå/MM/dd}, skapar du en virtuell kolumn via sökvägsmönsterinställningen och anger den som "partitionstidsstämpeln" för att aktivera api-funktioner för tidsserier.

GÄLLER FÖR:Python SDK azureml v1

Klassmetoden Datasetwith_timestamp_columns() definierar tidsstämpelkolumnen för datamängden.

from azureml.core import Workspace, Dataset, Datastore

# get workspace object
ws = Workspace.from_config()

# get datastore object
dstore = Datastore.get(ws, 'your datastore name')

# specify datastore paths
dstore_paths = [(dstore, 'weather/*/*/*/*/data.parquet')]

# specify partition format
partition_format = 'weather/{state}/{date:yyyy/MM/dd}/data.parquet'

# create the Tabular dataset with 'state' and 'date' as virtual columns
dset = Dataset.Tabular.from_parquet_files(path=dstore_paths, partition_format=partition_format)

# assign the timestamp attribute to a real or virtual column in the dataset
dset = dset.with_timestamp_columns('date')

# register the dataset as the target dataset
dset = dset.register(ws, 'target')

Dricks

Ett fullständigt exempel på hur du använder timeseries datauppsättningar finns i exempelanteckningsboken eller SDK-dokumentationen för datauppsättningar.

Skapa datamängdsövervakare

Skapa en datamängdsövervakare för att identifiera och varna för dataavvikelser på en ny datauppsättning. Använd antingen Python SDK eller Azure Machine Learning-studio.

Som beskrivs senare körs en datamängdsövervakare med en angiven frekvens (dagligen, varje vecka, varje månad) intervall. Den analyserar nya data som är tillgängliga i måldatauppsättningen sedan den senaste körningen. I vissa fall räcker det kanske inte med en sådan analys av de senaste uppgifterna:

  • De nya data från den överordnade källan försenades på grund av en trasig datapipeline och dessa nya data var inte tillgängliga när datamängdsövervakaren kördes.
  • En tidsseriedatauppsättning hade endast historiska data och du vill analysera driftmönster i datauppsättningen över tid. Till exempel: jämför trafik som flödar till en webbplats, under både vinter- och sommarsäsonger, för att identifiera säsongsmönster.
  • Datauppsättningsövervakare har inte använts tidigare. Du vill utvärdera hur funktionen fungerar med dina befintliga data innan du konfigurerar den för att övervaka framtida dagar. I sådana scenarier kan du skicka en körning på begäran, med ett specifikt datumintervall för måldatauppsättningen, för att jämföra med baslinjedatauppsättningen.

Funktionen för återfyllnad kör ett återfyllnadsjobb för ett angivet start- och slutdatumintervall. Ett återfyllnadsjobb fyller i förväntade saknade datapunkter i en datauppsättning som ett sätt att säkerställa datanoggrannhet och fullständighet.

GÄLLER FÖR:Python SDK azureml v1

Se Referensdokumentationen för Python SDK om dataavvikelse för fullständig information.

I följande exempel visas hur du skapar en datamängdsövervakare med hjälp av Python SDK

from azureml.core import Workspace, Dataset
from azureml.datadrift import DataDriftDetector
from datetime import datetime

# get the workspace object
ws = Workspace.from_config()

# get the target dataset
target = Dataset.get_by_name(ws, 'target')

# set the baseline dataset
baseline = target.time_before(datetime(2019, 2, 1))

# set up feature list
features = ['latitude', 'longitude', 'elevation', 'windAngle', 'windSpeed', 'temperature', 'snowDepth', 'stationName', 'countryOrRegion']

# set up data drift detector
monitor = DataDriftDetector.create_from_datasets(ws, 'drift-monitor', baseline, target,
                                                      compute_target='cpu-cluster',
                                                      frequency='Week',
                                                      feature_list=None,
                                                      drift_threshold=.6,
                                                      latency=24)

# get data drift detector by name
monitor = DataDriftDetector.get_by_name(ws, 'drift-monitor')

# update data drift detector
monitor = monitor.update(feature_list=features)

# run a backfill for January through May
backfill1 = monitor.backfill(datetime(2019, 1, 1), datetime(2019, 5, 1))

# run a backfill for May through today
backfill1 = monitor.backfill(datetime(2019, 5, 1), datetime.today())

# disable the pipeline schedule for the data drift detector
monitor = monitor.disable_schedule()

# enable the pipeline schedule for the data drift detector
monitor = monitor.enable_schedule()

Dricks

Ett fullständigt exempel på hur du konfigurerar en timeseries datauppsättning och dataavvikelseidentifiering finns i vår exempelanteckningsbok.

Förstå dataavvikelseresultat

Det här avsnittet visar resultatet av övervakningen av en datamängd som finns på sidan Datauppsättningsdatauppsättningsövervakare / i Azure Studio. Du kan uppdatera inställningarna och analysera befintliga data under en viss tidsperiod på den här sidan.

Börja med insikter på den översta nivån om dataavvikelsens omfattning och en markering av funktioner som ska undersökas ytterligare.

Drift overview

Mätvärde Description
Dataavvikelse En procentandel av avvikelsen mellan baslinjen och måldatauppsättningen över tid. Den här procentandelen varierar från 0 till 100, 0 anger identiska datamängder och 100 anger att Azure Machine Learning-dataavvikelsemodellen helt kan skilja de två datamängderna åt. Brus i den exakta procentandelen som mäts förväntas på grund av maskininlärningstekniker som används för att generera den här storleken.
De viktigaste driftfunktionerna Visar de funktioner från datauppsättningen som har drivit mest och bidrar därför mest till måttet Drift Magnitude. På grund av samvariatväxling behöver den underliggande fördelningen av en funktion inte nödvändigtvis ändras för att ha relativt hög funktionsvikt.
Threshold Datadriftsstorlek utöver det angivna tröskelvärdet utlöser aviseringar. Konfigurera tröskelvärdet i övervakningsinställningarna.

Trend för driftst magnitude

Se hur datamängden skiljer sig från måldatauppsättningen under den angivna tidsperioden. Ju närmare 100 %, desto mer skiljer sig de två datauppsättningarna åt.

Drift magnitude trend

Driftsstorlek efter funktioner

Det här avsnittet innehåller insikter på funktionsnivå om ändringen i den valda funktionens distribution och annan statistik över tid.

Måldatauppsättningen profileras också över tid. Det statistiska avståndet mellan baslinjefördelningen för varje funktion jämförs med måldatauppsättningens över tid. Konceptuellt liknar detta dataavvikelsens storlek. Det här statistiska avståndet gäller dock för en enskild funktion snarare än för alla funktioner. Min, max och medelvärde är också tillgängliga.

I Azure Machine Learning-studio väljer du ett fält i diagrammet för att se information på funktionsnivå för det datumet. Som standard ser du baslinjedatauppsättningens distribution och det senaste jobbets distribution av samma funktion.

Drift magnitude by features

Dessa mått kan också hämtas i Python SDK via get_metrics() metoden för ett DataDriftDetector objekt.

Information om funktionen

Rulla slutligen ned för att visa information för varje enskild funktion. Använd listrutorna ovanför diagrammet för att välja funktionen och välj dessutom det mått som du vill visa.

Numeric feature graph and comparison

Mått i diagrammet beror på typen av funktion.

  • Numeriska funktioner

    Mätvärde Description
    Wasserstein avstånd Minsta mängd arbete för att omvandla baslinjedistributionen till målfördelningen.
    Medelvärde Genomsnittligt värde för funktionen.
    Minvärde Minsta värde för funktionen.
    Maxvärde Maximalt värde för funktionen.
  • Kategoriska funktioner

    Mätvärde Description
    Euklidiskt avstånd   Beräknas för kategoriska kolumner. Euklidiskt avstånd beräknas på två vektorer som genereras från empirisk fördelning av samma kategoriska kolumn från två datamängder. 0 anger ingen skillnad i de empiriska fördelningarna.  Ju mer den avviker från 0, desto mer har den här kolumnen drivits. Trender kan observeras från ett tidsseriediagram för det här måttet och kan vara till hjälp när du ska upptäcka en drifting-funktion.  
    Unika värden Antal unika värden (kardinalitet) för funktionen.

I det här diagrammet väljer du ett enda datum för att jämföra funktionsfördelningen mellan målet och det här datumet för den aktuella funktionen. För numeriska funktioner visar detta två sannolikhetsfördelningar. Om funktionen är numerisk visas ett stapeldiagram.

Select a date to compare to target

Mått, aviseringar och händelser

Mått kan efterfrågas i Azure Application Insights-resursen som är associerad med din maskininlärningsarbetsyta. Du har åtkomst till alla funktioner i Application Insights, inklusive konfiguration för anpassade aviseringsregler och åtgärdsgrupper för att utlösa en åtgärd som e-post/SMS/push/röst eller Azure-funktion. Mer information finns i den fullständiga Application Insights-dokumentationen.

Kom igång genom att gå till Azure-portalen och välja arbetsytans översiktssida. Den associerade Application Insights-resursen finns längst till höger:

Azure portal overview

Välj Loggar (Analys) under Övervakning i den vänstra rutan:

Application insights overview

Datamängdens övervakningsmått lagras som customMetrics. Du kan skriva och köra en fråga när du har konfigurerat en datamängdsövervakare för att visa dem:

Log analytics query

När du har identifierat mått för att konfigurera aviseringsregler skapar du en ny aviseringsregel:

New alert rule

Du kan använda en befintlig åtgärdsgrupp eller skapa en ny för att definiera den åtgärd som ska vidtas när de angivna villkoren uppfylls:

New action group

Felsökning

Begränsningar och kända problem för övervakare av dataavvikelser:

  • Tidsintervallet vid analys av historiska data är begränsat till 31 intervall i övervakarens frekvensinställning.

  • Begränsning av 200 funktioner, såvida inte en funktionslista inte har angetts (alla funktioner som används).

  • Beräkningsstorleken måste vara tillräckligt stor för att hantera data.

  • Se till att datamängden har data inom start- och slutdatumet för ett visst övervakningsjobb.

  • Datauppsättningsövervakare fungerar bara på datauppsättningar som innehåller 50 rader eller mer.

  • Kolumner eller funktioner i datamängden klassificeras som kategoriska eller numeriska baserat på villkoren i följande tabell. Om funktionen inte uppfyller dessa villkor – till exempel en kolumn med typsträng med >100 unika värden – tas funktionen bort från vår algoritm för dataavvikelse, men är fortfarande profilerad.

    Funktionstyp Datatyp Villkor Begränsningar
    Kategoriska sträng Antalet unika värden i funktionen är mindre än 100 och mindre än 5 % av antalet rader. Null behandlas som en egen kategori.
    Numeriska int, float Värdena i funktionen är av numerisk datatyp och uppfyller inte villkoret för en kategorisk funktion. Funktionen har tagits bort om >15 % av värdena är null.
  • När du har skapat en övervakare av dataavvikelser men inte kan se data på sidan Datauppsättningsövervakare i Azure Machine Learning-studio kan du prova följande.

    1. Kontrollera om du har valt rätt datumintervall överst på sidan.
    2. På fliken Datauppsättningsövervakare väljer du experimentlänken för att kontrollera jobbstatusen. Den här länken finns längst till höger i tabellen.
    3. Om jobbet har slutförts kontrollerar du drivrutinsloggarna för att se hur många mått som har genererats eller om det finns några varningsmeddelanden. Hitta drivrutinsloggar på fliken Utdata + loggar när du har valt ett experiment.
  • Om SDK-funktionen backfill() inte genererar förväntade utdata kan det bero på ett autentiseringsproblem. När du skapar beräkningen för att skicka till den här funktionen ska du inte använda Run.get_context().experiment.workspace.compute_targets. Använd i stället ServicePrincipalAuthentication , till exempel följande för att skapa den beräkning som du skickar till den backfill() funktionen:

    auth = ServicePrincipalAuthentication(
            tenant_id=tenant_id,
            service_principal_id=app_id,
            service_principal_password=client_secret
            )
    ws = Workspace.get("xxx", auth=auth, subscription_id="xxx", resource_group="xxx")
    compute = ws.compute_targets.get("xxx")
    
  • Från modelldatainsamlaren kan det ta upp till 10 minuter innan data tas emot i ditt bloblagringskonto. Det tar dock vanligtvis mindre tid. I ett skript eller en notebook-fil väntar du 10 minuter för att säkerställa att cellerna nedan körs.

    import time
    time.sleep(600)
    

Nästa steg