Gegevensdrift (preview) detecteren in gegevenssets

Meer informatie over het bewaken van gegevensdrift en het instellen van waarschuwingen wanneer de drift hoog is.

Met Azure Machine Learning monitors voor gegevenssets (preview) kunt u het volgende doen:

  • Analyseer drift in uw gegevens om te begrijpen hoe deze na een periode veranderen.
  • Modelgegevens controleren op verschillen tussen het trainen en verwerken van gegevenssets. Begin met het verzamelen van modelgegevens van geïmplementeerde modellen.
  • Controleer nieuwe gegevens op verschillen tussen een basislijn en doelgegevensset.
  • Profielfuncties in gegevens om bij te houden hoe statistische eigenschappen na een bepaalde periode veranderen.
  • Stel waarschuwingen in voor gegevensdrift voor vroege waarschuwingen voor potentiële problemen.
  • Maak een nieuwe gegevenssetversie wanneer u bepaalt dat de gegevens te veel zijn gedrift.

Er wordt een Azure Machine Learning-gegevensset gebruikt om de monitor te maken. De gegevensset moet een tijdstempelkolom bevatten.

U kunt metrische gegevens over gegevensdrift weergeven met de Python-SDK of in Azure Machine Learning-studio. Andere metrische gegevens en inzichten zijn beschikbaar via de Azure-toepassing Insights-resource die is gekoppeld aan Azure Machine Learning werkruimte.

Belangrijk

Detectie van gegevensdrift voor gegevenssets is momenteel in openbare preview. De preview-versie wordt aangeboden zonder Service Level Agreement en wordt niet aanbevolen voor productieworkloads. Misschien worden bepaalde functies niet ondersteund of zijn de mogelijkheden ervan beperkt. Zie Supplemental Terms of Use for Microsoft Azure Previews (Aanvullende gebruiksvoorwaarden voor Microsoft Azure-previews) voor meer informatie.

Vereisten

Als u gegevenssetmonitors wilt maken en hiermee wilt werken, hebt u het volgende nodig:

Wat is gegevensdrift?

Gegevensdrift is een van de belangrijkste redenen waarom de nauwkeurigheid van het model na verloop van tijd afgenomen. Voor machine learning modellen is gegevensdrift de wijziging in modelinvoergegevens die leiden tot een verslechtering van de modelprestaties. Het bewaken van gegevensdrift helpt bij het detecteren van deze prestatieproblemen van het model.

Oorzaken van gegevensdrift zijn onder andere:

  • Upstream-proceswijzigingen, zoals een sensor die wordt vervangen, die de meeteenheden wijzigt van inches in centimeters.
  • Problemen met de gegevenskwaliteit, zoals een defecte sensor die altijd 0 leest.
  • Natuurlijke afwijking in de gegevens, zoals gemiddelde temperatuurswisselingen met de jaargetijde.
  • Wijziging in relatie tussen functies of covariantieverschuiving.

Azure Machine Learning vereenvoudigt de detectie van driften door één metrische gegevens te berekenen die de complexiteit abstraheert van gegevenssets die worden vergeleken. Deze gegevenssets kunnen honderden functies en tienduizenden rijen hebben. Zodra er een afwijking is gedetecteerd, zoomt u in op welke functies de afwijking veroorzaken. Vervolgens inspecteert u metrische gegevens op functieniveau om fouten op te sporen en de hoofdoorzaak van de afwijking te isoleren.

Met deze top-down aanpak kunt u eenvoudig gegevens bewaken in plaats van traditionele technieken op basis van regels. Technieken op basis van regels, zoals het toegestane gegevensbereik of toegestane unieke waarden, kunnen tijdrovend en foutgevoelig zijn.

In Azure Machine Learning gebruikt u gegevenssetmonitors om gegevensdrift te detecteren en te waarschuwen.

Gegevenssetmonitors

Met een gegevenssetmonitor kunt u het volgende doen:

  • Detecteren en waarschuwen voor gegevensdrift op nieuwe gegevens in een gegevensset.
  • Historische gegevens analyseren op drift.
  • Profileer nieuwe gegevens gedurende een periode.

Het gegevensdriftalgoritme biedt een algemene meting van de wijziging in gegevens en een indicatie van welke functies verantwoordelijk zijn voor verder onderzoek. Gegevenssetmonitors produceren een aantal andere metrische gegevens door nieuwe gegevens in de gegevensset te timeseries profileren.

Aangepaste waarschuwingen kunnen worden ingesteld voor alle metrische gegevens die door de monitor worden gegenereerd via Azure-toepassing Insights. Gegevenssetmonitors kunnen worden gebruikt om snel gegevensproblemen te ondervangen en de tijd te verminderen om het probleem op te sporen door waarschijnlijke oorzaken te identificeren.

Conceptueel gezien zijn er drie primaire scenario's voor het instellen van gegevenssetmonitors in Azure Machine Learning.

Scenario Beschrijving
De gegevens van een model controleren op afwijking van de trainingsgegevens De resultaten van dit scenario kunnen worden geïnterpreteerd als het controleren van de nauwkeurigheid van een proxy op de nauwkeurigheid van het model, omdat de nauwkeurigheid van het model af neemt wanneer de afdrift van de trainingsgegevens.
Een gegevensset voor tijdreeksen controleren op afwijking van een vorige periode. Dit scenario is algemener en kan worden gebruikt voor het bewaken van gegevenssets die upstream of downstream van het bouwen van modellen betrokken zijn. De doel-gegevensset moet een tijdstempelkolom hebben. De basislijn-gegevensset kan elke tabellaire gegevensset zijn die functies heeft die gemeenschappelijk zijn met de doel gegevensset.
Analyses uitvoeren op eerdere gegevens. Dit scenario kan worden gebruikt om historische gegevens te begrijpen en beslissingen te nemen in instellingen voor gegevenssetmonitors.

Gegevenssetmonitors zijn afhankelijk van de volgende Azure-services.

Azure-service Description
Gegevensset Drift maakt gebruik Machine Learning gegevenssets om trainingsgegevens op te halen en gegevens voor modeltraining te vergelijken. Het genereren van een profiel van gegevens wordt gebruikt voor het genereren van enkele van de gerapporteerde metrische gegevens, zoals min, max, afzonderlijke waarden, aantal afzonderlijke waarden.
Azureml-pijplijn en -rekenkracht De driftberekenings job wordt gehost in azureml pipeline. De taak wordt op aanvraag of volgens een schema geactiveerd om te worden uitgevoerd op een rekenproces dat is geconfigureerd tijdens het maken van de driftmonitor.
Application Insights Drift stuurt metrische gegevens naar Application Insights behorend bij de machine learning werkruimte.
Azure Blob Storage Drift stuurt metrische gegevens in json-indeling naar Azure Blob Storage.

Basislijn- en doelsets

U controleert Azure machine learning gegevenssets op gegevensdrift. Wanneer u een gegevenssetmonitor maakt, verwijst u naar uw:

  • Basislijnset: meestal de trainingsset voor een model.
  • De doelgegevensset , meestal modelinvoergegevens, wordt in de tijd vergeleken met uw basislijngegevensset. Deze vergelijking betekent dat uw doel gegevensset een tijdstempelkolom moet hebben opgegeven.

De monitor vergelijkt de basislijn- en doelsets.

Doel gegevensset maken

De doelgegevensset moet de eigenschap instellen door de tijdstempelkolom op te geven vanuit een kolom in de gegevens of een virtuele kolom die is afgeleid van het padpatroon van timeseries de bestanden. Maak de gegevensset met een tijdstempel via de Python SDK of Azure Machine Learning-studio. Een kolom die een 'tijdstempel' vertegenwoordigt, moet worden opgegeven om eigenschappen aan de timeseries gegevensset toe te voegen. Als uw gegevens zijn gepartliceerd in mapstructuur met tijdgegevens, zoals {yyyy/MM/dd}, maakt u een virtuele kolom via de padpatrooninstelling en stelt u deze in als de 'partitietijdstempel' om het belang van tijdreeksfunctionaliteit te verbeteren.

De Dataset klassemethode with_timestamp_columns() definieert de tijdstempelkolom voor de gegevensset.

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')

Tip

Zie het voorbeeldnoteboek of de SDK-documentatie voor gegevenssets voor een volledig voorbeeld van het gebruik van het kenmerk timeseries van gegevenssets.

Gegevenssetmonitor maken

Maak een gegevenssetmonitor om gegevensdrift in een nieuwe gegevensset te detecteren en te waarschuwen voor gegevensdrift. Gebruik de Python SDK of Azure Machine Learning-studio.

Zie de Python SDK-referentiedocumentatie over gegevensdrift voor meer informatie.

In het volgende voorbeeld ziet u hoe u een gegevenssetmonitor maakt met behulp van de 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
dset = 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()

Tip

Zie ons voorbeeldnoteboek voor een volledig voorbeeld van het instellen van een gegevensset en timeseries gegevensdriftdetector.

Gegevensdriftresultaten begrijpen

In deze sectie ziet u de resultaten van het bewaken van een gegevensset, te vinden op de pagina Gegevenssets-gegevenssetmonitors / in Azure Studio. U kunt de instellingen bijwerken en bestaande gegevens analyseren voor een specifieke periode op deze pagina.

Begin met de inzichten op het hoogste niveau in de omvang van gegevensdrift en een markering van functies die verder moeten worden onderzocht.

Drift-overzicht

Metrisch Beschrijving
Magnitude van gegevensdrift Een afwijkingspercentage tussen de basislijn en de doelset gedurende een bepaalde periode. Tussen 0 en 100 geeft 0 identieke gegevenssets aan en 100 geeft aan dat het Azure Machine Learning gegevensdriftmodel de twee gegevenssets volledig kan onderscheiden. Ruis in het precieze percentage dat wordt gemeten, wordt verwacht vanwege machine learning technieken die worden gebruikt om deze magnitude te genereren.
Belangrijkste driftfuncties Toont de functies van de gegevensset die het meest zijn gedrift en daarom het meeste bijdragen aan de metrische gegevens van Drift Magnitude. Als gevolg van covariantieverschuiving hoeft de onderliggende distributie van een functie niet noodzakelijkerwijs te worden gewijzigd om een relatief hoog functie-belang te hebben.
Drempelwaarde Als de grootte van de gegevensdrift de drempelwaarde overschrijdt, worden er waarschuwingen getriggerd. Dit kan worden geconfigureerd in de monitorinstellingen.

Trend in magnitude van drift

Bekijk hoe de gegevensset verschilt van de doelset in de opgegeven periode. Hoe dichter bij 100%, hoe meer de twee gegevenssets verschillen.

Trend in magnitude van drift

Afwijkings magnitude op kenmerken

Deze sectie bevat inzichten op functieniveau in de wijziging in de distributie van de geselecteerde functie, evenals andere statistieken, in de tijd.

De doelgegevensset wordt ook geprofileerd in de tijd. De statistische afstand tussen de basislijndistributie van elke functie wordt vergeleken met die van de doelset in de afgelopen periode. Conceptueel gezien is dit vergelijkbaar met de magnitude van de gegevensdrift. Deze statistische afstand is echter voor een afzonderlijke functie in plaats van alle functies. Min, max en mean zijn ook beschikbaar.

Klik in Azure Machine Learning-studio op een balk in de grafiek om de details op functieniveau voor die datum weer te geven. Standaard ziet u de distributie van de basislijnset en de distributie van de meest recente run van dezelfde functie.

Afwijkings magnitude op functies

Deze metrische gegevens kunnen ook worden opgehaald in de Python-SDK via de get_metrics() methode voor een DataDriftDetector -object.

Functiedetails

Schuif tot slot omlaag om details voor elke afzonderlijke functie weer te geven. Gebruik de vervolgkeuzelijsten boven de grafiek om de functie te selecteren en selecteer daarnaast de metrische gegevens die u wilt weergeven.

Numerieke functiegrafiek en vergelijking

Metrische gegevens in de grafiek zijn afhankelijk van het type functie.

  • Numerieke functies

    Metrisch Beschrijving
    Wasserstein-afstand Minimale hoeveelheid werk voor het transformeren van basislijndistributie naar de doeldistributie.
    Gemiddelde waarde Gemiddelde waarde van de functie.
    Minimumwaarde Minimale waarde van de functie.
    Maximumwaarde Maximale waarde van de functie.
  • Categorische functies

    Metrisch Beschrijving
    Euclidische afstand Berekend voor categorische kolommen. Euclidische afstand wordt berekend op twee vectoren, gegenereerd op basis van empirische verdeling van dezelfde categorische kolom uit twee gegevenssets. 0 geeft aan dat er geen verschil is in de empirische verdelingen. Hoe meer deze afwijkt van 0, des te meer deze kolom is afgedrift. Trends kunnen worden waargenomen op grond van een tijdreeksplot van deze metrische gegevens en kunnen nuttig zijn bij het blootleggen van een drifting-functie.
    Unieke waarden Het aantal unieke waarden (kardinaliteit) van de functie.

Selecteer in deze grafiek één datum om de functiedistributie tussen het doel en deze datum voor de weergegeven functie te vergelijken. Voor numerieke kenmerken toont dit twee waarschijnlijkheidsdistributies. Als de functie numeriek is, wordt er een staafdiagram weergegeven.

Selecteer een datum om te vergelijken met het doel

Metrische gegevens, waarschuwingen en gebeurtenissen

Metrische gegevens kunnen worden opgevraagd in de Azure-toepassing Insights-resource die is gekoppeld aan uw machine learning werkruimte. U hebt toegang tot alle functies van Application Insights instellen voor aangepaste waarschuwingsregels en actiegroepen om een actie te activeren, zoals een e-mail/sms/push/spraak of Azure-functie. Raadpleeg de volledige documentatie Application Insights voor meer informatie.

Als u wilt beginnen, gaat u naar Azure Portal en selecteert u de pagina Overzicht van uw werkruimte. De gekoppelde Application Insights resource staat aan de rechterkant:

Overzicht van de Azure Portal

Selecteer Logboeken (Analyse) onder Bewaking in het linkerdeelvenster:

Overzicht van Application Insights

De metrische gegevens van de gegevenssetmonitor worden opgeslagen als customMetrics . U kunt een query schrijven en uitvoeren na het instellen van een gegevenssetmonitor om deze weer te geven:

Log Analytics-query

Nadat u metrische gegevens voor het instellen van waarschuwingsregels heeft vastgesteld, maakt u een nieuwe waarschuwingsregel:

Nieuwe waarschuwingsregel

U kunt een bestaande actiegroep gebruiken of een nieuwe maken om de actie te definiëren die moet worden ondernomen wanneer aan de voorwaarden van de set wordt voldaan:

Nieuwe actiegroep

Problemen oplossen

Beperkingen en bekende problemen voor monitors voor gegevensdrift:

  • Het tijdsbereik bij het analyseren van historische gegevens is beperkt tot 31 intervallen van de frequentie-instelling van de monitor.

  • Beperking van 200 functies, tenzij er geen functielijst is opgegeven (alle functies die worden gebruikt).

  • De rekenkracht moet groot genoeg zijn om de gegevens te verwerken.

  • Zorg ervoor dat uw gegevensset gegevens bevat binnen de begin- en einddatum voor een bepaalde monitoruitdaging.

  • Gegevenssetmonitors werken alleen voor gegevenssets met 50 rijen of meer.

  • Kolommen of functies in de gegevensset worden geclassificeerd als categorisch of numeriek op basis van de voorwaarden in de volgende tabel. Als de functie niet aan deze voorwaarden voldoet, bijvoorbeeld een kolom van het type tekenreeks met >100 unieke waarden, wordt de functie uit ons gegevensdriftalgoritme verdwenen, maar nog steeds geprofileerd.

    Functietype Gegevenstype Voorwaarde Beperkingen
    Categorische gegevens string, bool, int, float Het aantal unieke waarden in de functie is minder dan 100 en minder dan 5% van het aantal rijen. Null wordt beschouwd als een eigen categorie.
    Numerieke int, float De waarden in de functie zijn van een numeriek gegevenstype en voldoen niet aan de voorwaarde voor een categorische functie. De functie is >15% van de waarden null is.
  • Wanneer u een gegevensdriftmonitor hebt gemaakt, maar geen gegevens kunt zien op de pagina Gegevenssetmonitors in Azure Machine Learning-studio, probeert u het volgende.

    1. Controleer of u het juiste datumbereik bovenaan de pagina hebt geselecteerd.
    2. Selecteer op het tabblad Gegevenssetmonitors de koppeling experiment om de status van de run te controleren. Deze koppeling staat aan de rechterkant van de tabel.
    3. Als de run is voltooid, controleert u de logboeken van het stuurprogramma om te zien hoeveel metrische gegevens zijn gegenereerd of of er waarschuwingsberichten zijn. Zoek stuurprogrammalogboeken op het tabblad Uitvoer en logboeken nadat u op een experiment hebt geklikt.
  • Als de backfill() SDK-functie niet de verwachte uitvoer genereert, kan dit worden veroorzaakt door een verificatieprobleem. Wanneer u de berekening maakt om door te geven aan deze functie, gebruikt u niet Run.get_context().experiment.workspace.compute_targets . Gebruik in plaats daarvan ServicePrincipalAuthentication, zoals het volgende, om de rekenkracht te maken die u aan die functie backfill() doorwerkt:

    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")
    
  • Vanuit de modelgegevensverzamelaar kan het tot (maar meestal minder dan) 10 minuten duren voordat gegevens in uw Blob Storage-account binnenkomen. Wacht in een script of notebook tien minuten om ervoor te zorgen dat de onderstaande cellen worden uitgevoerd.

    import time
    time.sleep(600)
    

Volgende stappen