Detekce posunu dat (Preview) u datových sad

PLATÍ PRO:Sada Python SDK azureml v1

Zjistěte, jak monitorovat posun dat a nastavit upozornění, když je posun vysoký.

S monitorováním datových sad služby Azure Machine Learning (Preview) můžete:

  • Analyzujte posun v datech , abyste pochopili, jak se mění v průběhu času.
  • Monitorujte data modelu a sledujte rozdíly mezi trénováním a obsluhou datových sad. Začněte shromažďováním dat modelu z nasazených modelů.
  • Monitorujte nová data a sledujte rozdíly mezi jakoukoli základní a cílovou datovou sadou.
  • Funkce profilu v datech ke sledování toho, jak se statistické vlastnosti mění v průběhu času.
  • Nastavte upozornění na posun dat pro včasná upozornění na potenciální problémy.
  • Novou verzi datové sady vytvořte , když zjistíte, že se data příliš posunují.

K vytvoření monitorování se používá datová sada Azure Machine Learning . Datová sada musí obsahovat sloupec časového razítka.

Metriky posunu dat můžete zobrazit pomocí sady Python SDK nebo v studio Azure Machine Learning. Další metriky a přehledy jsou k dispozici prostřednictvím prostředku Aplikace Azure Insights přidruženého k pracovnímu prostoru Služby Azure Machine Learning.

Důležité

Detekce posunů dat pro datové sady je v současné době ve verzi Public Preview. Verze Preview se poskytuje bez smlouvy o úrovni služeb a nedoporučuje se pro produkční úlohy. Některé funkce se nemusí podporovat nebo mohou mít omezené možnosti. Další informace najdete v dodatečných podmínkách použití pro verze Preview v Microsoft Azure.

Požadavky

K vytváření a práci s monitorováním datových sad potřebujete:

Co je posun dat?

Posun dat je jedním z hlavních důvodů, proč se přesnost modelu v průběhu času snižuje. U modelů strojového učení je posun dat změnou vstupních dat modelu, která vede ke snížení výkonu modelu. Monitorování posunu dat pomáhá detekovat tyto problémy s výkonem modelu.

Mezi příčiny posunu dat patří:

  • Změny v nadřazeném procesu, například výměna senzoru, který mění měrné jednotky z palců na centimetry.
  • Problémy s kvalitou dat, například poškozený senzor, který vždy čte hodnotu 0.
  • Přirozený posun dat, jako je například střední změna teploty s ročními obdobími.
  • Změna vztahu mezi funkcemi nebo kovariant posun.

Azure Machine Learning zjednodušuje detekci posunů tím, že počítá jednu metriku, která abstrahuje složitost porovnávaných datových sad. Tyto datové sady můžou mít stovky funkcí a desítky tisíc řádků. Jakmile zjistíte posun, můžete přejít k podrobnostem o funkcích, které jsou příčinou posunu. Pak zkontrolujete metriky na úrovni funkcí, abyste mohli ladit a izolovat původní příčinu posunu.

Tento přístup shora dolů usnadňuje monitorování dat místo tradičních technik založených na pravidlech. Techniky založené na pravidlech, jako je povolený rozsah dat nebo povolené jedinečné hodnoty, můžou být časově náročné a náchylné k chybám.

Ve službě Azure Machine Learning používáte monitorování datových sad k detekci a upozornění na posun dat.

Monitorování datových sad

Pomocí monitorování datové sady můžete:

  • Detekujte posun dat u nových dat v datové sadě a upozorňování na jejich posun.
  • Analýza posunu historických dat
  • Profilovat nová data v průběhu času.

Algoritmus posunu dat poskytuje celkovou míru změny dat a udává, které funkce jsou zodpovědné za další šetření. Monitorování datových sad vytváří řadu dalších metrik profilací nových dat v timeseries datové sadě.

Vlastní upozornění je možné nastavit pro všechny metriky generované monitorováním prostřednictvím Aplikace Azure Insights. Monitorování datových sad lze použít k rychlému zachycení problémů s daty a zkrácení doby ladění problému identifikací pravděpodobných příčin.

Koncepčně existují tři primární scénáře pro nastavení monitorování datových sad ve službě Azure Machine Learning.

Scénář Popis
Monitorování modelu obsluhujícího data z důvodu odchylky od trénovacích dat Výsledky tohoto scénáře lze interpretovat jako monitorování přesnosti modelu proxy serverem, protože přesnost modelu se snižuje, když se obsluhující data posunou od trénovacích dat.
Monitorujte datovou sadu časových řad z důvodu posunu od předchozího časového období. Tento scénář je obecnější a dá se použít k monitorování datových sad, které se týkají nadřazeného nebo podřízeného sestavení modelu. Cílová datová sada musí obsahovat sloupec časového razítka. Základní datovou sadou může být libovolná tabulková datová sada, která má funkce společné s cílovou datovou sadou.
Proveďte analýzu minulých dat. Tento scénář slouží k pochopení historických dat a k rozhodování v nastavení monitorování datových sad.

Monitorování datových sad závisí na následujících službách Azure.

Služba Azure Description
Datová sada Drift používá datové sady Machine Learning k načtení trénovacích dat a porovnání dat pro trénování modelu. Generování profilu dat se používá k vygenerování některých hlášených metrik, jako jsou minimální, maximální, jedinečné hodnoty nebo počet jedinečných hodnot.
Kanál a výpočetní prostředky Azureml Úloha výpočtu posunu je hostovaná v kanálu azureml. Úloha se aktivuje na vyžádání nebo podle plánu, aby se spustila na výpočetních prostředcích nakonfigurovaných v době vytváření monitorování posunu.
Application Insights Drift generuje metriky do Application Insights, které patří do pracovního prostoru strojového učení.
Azure Blob Storage Drift generuje metriky ve formátu JSON do úložiště objektů blob v Azure.

Standardní a cílové datové sady

V datových sadách Azure Machine Learning monitorujete posun dat. Při vytváření monitorování datové sady budete odkazovat na:

  • Základní datová sada – obvykle trénovací datová sada pro model.
  • Cílová datová sada – obvykle vstupní data modelu – se v průběhu času porovnává s vaší standardní datovou sadou. Toto porovnání znamená, že cílová datová sada musí mít zadaný sloupec časového razítka.

Monitorování porovná základní a cílové datové sady.

Vytvoření cílové datové sady

Cílová datová sada potřebuje timeseries vlastnost nastavenou tak, že zadá sloupec časového razítka buď ze sloupce v datech, nebo virtuálního sloupce odvozeného ze vzoru cesty souborů. Vytvořte datovou sadu s časovým razítkem prostřednictvím sady Python SDK nebo studio Azure Machine Learning. Aby bylo možné do datové sady přidat timeseries vlastnost, musí být zadán sloupec představující "časové razítko". Pokud jsou vaše data rozdělená do struktury složek s informacemi o čase, například {yyyy/MM/dd}, vytvořte virtuální sloupec pomocí nastavení vzoru cesty a nastavte ho jako časové razítko oddílu, aby bylo možné používat funkce rozhraní API časových řad.

PLATÍ PRO:Sada Python SDK azureml v1

Metoda Dataset třídy with_timestamp_columns() definuje sloupec časového razítka pro datovou sadu.

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

Úplný příklad použití timeseries vlastnosti datových sad najdete v ukázkovém poznámkovém bloku nebo v dokumentaci k sadě SDK pro datové sady.

Vytvoření monitorování datové sady

Vytvoření monitorování datové sady pro detekci posunu dat v nové datové sadě a upozorňování na tento posun. Použijte sadu Python SDK nebo studio Azure Machine Learning.

PLATÍ PRO:Sada Python SDK azureml v1

Úplné podrobnosti najdete v referenční dokumentaci k sadě Python SDK o posunu dat .

Následující příklad ukazuje, jak vytvořit monitorování datové sady pomocí sady 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()

Tip

Úplný příklad nastavení datové sady a detektoru timeseries posunu dat najdete v našem ukázkovém poznámkovém bloku.

Vysvětlení výsledků posunu dat

Tato část ukazuje výsledky monitorování datové sady, které najdete na stránceMonitorování datových saddatových / sad v Azure Studiu. Na této stránce můžete aktualizovat nastavení a analyzovat existující data pro konkrétní časové období.

Začněte s přehledy o rozsahu posunu dat na nejvyšší úrovni a zvýrazněním funkcí, které je potřeba dále prozkoumat.

Přehled posunu

Metric Popis
Velikost posunu dat Procento posunu mezi směrnou a cílovou datovou sadou v průběhu času V rozsahu od 0 do 100 0 označuje identické datové sady a 100 značí, že model posunu dat Azure Machine Learning dokáže tyto dvě datové sady zcela oddělit. Šum v přesném naměřeném procentu se očekává kvůli technikám strojového učení, které se používají k vygenerování tohoto rozsahu.
Hlavní funkce posunu Zobrazuje funkce z datové sady, které se nejvíce posunují, a proto nejvíce přispívají k metrice Drift Magnitude. Kvůli kovariantovému posunu se základní rozdělení funkce nemusí nutně měnit, aby měla relativně vysokou důležitost funkce.
Prahová hodnota Velikost posunu dat nad nastavenou prahovou hodnotu aktivuje výstrahy. To je možné nakonfigurovat v nastavení monitoru.

Trend velikosti posunu

Podívejte se, jak se datová sada liší od cílové datové sady v zadaném časovém období. Čím blíže 100 %, tím více se obě datové sady liší.

Trend velikosti posunu

Velikost posunu podle funkcí

Tato část obsahuje přehledy na úrovni funkcí o změně distribuce vybrané funkce a další statistiky v průběhu času.

Cílová datová sada se také profiluje v průběhu času. Statistická vzdálenost mezi základním rozdělením jednotlivých funkcí se porovnává s cílovými daty v průběhu času. Koncepčně je to podobné velikosti posunu dat. Tato statistická vzdálenost je však určena pro jednotlivé funkce, nikoli pro všechny funkce. K dispozici jsou také minimální, maximální a střední hodnoty.

V studio Azure Machine Learning kliknutím na pruh v grafu zobrazíte podrobnosti na úrovni funkce pro dané datum. Ve výchozím nastavení uvidíte distribuci základní datové sady a nejnovější distribuci úlohy stejné funkce.

Velikost posunu podle funkcí

Tyto metriky lze také načíst v sadě Python SDK prostřednictvím get_metrics() metody objektu DataDriftDetector .

Podrobnosti o funkci

Nakonec se posuňte dolů a zobrazte podrobnosti o jednotlivých funkcích. Pomocí rozevíracích seznamu nad grafem vyberte funkci a navíc vyberte metriku, kterou chcete zobrazit.

Graf a porovnání číselných funkcí

Metriky v grafu závisí na typu funkce.

  • Číselné funkce

    Metric Popis
    Wasserstein vzdálenost Minimální množství práce na transformaci rozdělení směrného plánu na cílové rozdělení
    Střední hodnota Průměrná hodnota funkce
    Min. hodnota Minimální hodnota funkce.
    Max. hodnota Maximální hodnota funkce.
  • Funkce kategorií

    Metric Popis
    Euklidská vzdálenost   Vypočítá se pro sloupce kategorií. Euklidová vzdálenost se vypočítá na dvou vektorech vygenerovaných empirickým rozdělením stejného sloupce kategorií ze dvou datových sad. Hodnota 0 označuje, že v empirických rozděleních není žádný rozdíl.  Čím více se odchyluje od hodnoty 0, tím více se tento sloupec posune. Trendy lze sledovat z grafu časové řady této metriky a mohou být užitečné při odhalování posunuté funkce.  
    Jedinečné hodnoty Počet jedinečných hodnot (kardinalita) funkce

V tomto grafu vyberte jedno datum, abyste mohli porovnat rozdělení funkce mezi cílovým a tímto datem zobrazené funkce. U číselných funkcí se zobrazí dvě rozdělení pravděpodobnosti. Pokud je funkce číselná, zobrazí se pruhový graf.

Vyberte datum, které chcete porovnat s cílem.

Metriky, upozornění a události

Metriky je možné dotazovat v prostředku Aplikace Azure Insights přidruženém k vašemu pracovnímu prostoru strojového učení. Máte přístup ke všem funkcím Application Insights, včetně nastavení vlastních pravidel upozornění a skupin akcí pro aktivaci akce, jako je Email/SMS/nabízené/hlasové oznámení nebo funkce Azure Functions. Podrobnosti najdete v úplné dokumentaci k Application Insights.

Začněte tím, že přejdete na Azure Portal a vyberete stránku Přehled pracovního prostoru. Přidružený prostředek Application Insights je úplně vpravo:

Přehled webu Azure Portal

V levém podokně v části Monitorování vyberte Protokoly (Analytics):

Přehled Application Insights

Metriky monitorování datové sady se ukládají jako customMetrics. Po nastavení monitorování datové sady můžete napsat a spustit dotaz a zobrazit je:

Dotaz Log Analytics

Po identifikaci metrik pro nastavení pravidel upozornění vytvořte nové pravidlo upozornění:

Nové pravidlo upozornění

Můžete použít existující skupinu akcí nebo vytvořit novou a definovat akci, která se má provést při splnění nastavených podmínek:

Nová skupina akcí

Řešení potíží

Omezení a známé problémy s monitorováním posunu dat:

  • Časový rozsah při analýze historických dat je omezen na 31 intervalů nastavení frekvence monitorování.

  • Omezení 200 funkcí, pokud není zadaný seznam funkcí (všechny použité funkce).

  • Výpočetní prostředky musí být dostatečně velké, aby bylo možné zpracovávat data.

  • Ujistěte se, že datová sada obsahuje data v rámci počátečního a koncového data pro danou úlohu monitorování.

  • Monitorování datových sad bude fungovat jenom u datových sad, které obsahují 50 řádků nebo více.

  • Sloupce nebo funkce v datové sadě se klasifikují jako kategorické nebo číselné na základě podmínek v následující tabulce. Pokud funkce nesplňuje tyto podmínky – například sloupec řetězce typu se 100 jedinečnými >hodnotami – funkce se z našeho algoritmu posunu dat vyřadí, ale přesto se profiluje.

    Typ funkce Datový typ Podmínka Omezení
    Kategorické řetězec Počet jedinečných hodnot ve funkci je menší než 100 a menší než 5 % počtu řádků. Hodnota Null je považována za vlastní kategorii.
    Číselné int, float Hodnoty ve funkci jsou číselného datového typu a nesplňují podmínku pro funkci kategorií. Funkce byla zrušena, pokud >má 15 % hodnot hodnotu null.
  • Pokud jste vytvořili monitorování posunu dat, ale nevidíte data na stránce Monitorování datových sad v studio Azure Machine Learning, zkuste následující postup.

    1. Zkontrolujte, jestli jste v horní části stránky vybrali správný rozsah dat.
    2. Na kartě Monitorování datových sad vyberte odkaz na experiment a zkontrolujte stav úlohy. Tento odkaz je úplně vpravo od tabulky.
    3. Pokud se úloha úspěšně dokončila, zkontrolujte protokoly ovladače a zjistěte, kolik metrik se vygenerovalo nebo jestli se nezobrazují nějaké varovné zprávy. Po kliknutí na experiment vyhledejte protokoly ovladačů na kartě Výstup a protokoly .
  • Pokud funkce sady SDK backfill() negeneruje očekávaný výstup, může být příčinou problém s ověřováním. Při vytváření výpočetních prostředků, které se mají předat do této funkce, nepoužívejte Run.get_context().experiment.workspace.compute_targets. Místo toho použijte ServicePrincipalAuthentication , jako je například následující, a vytvořte výpočetní prostředky, které do této backfill() funkce předáte:

    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")
    
  • Z kolektoru dat modelu může doručení dat do účtu úložiště objektů blob trvat až 10 minut (ale obvykle méně než). Ve skriptu nebo poznámkovém bloku počkejte 10 minut, aby se zajistilo, že se spustí níže uvedené buňky.

    import time
    time.sleep(600)
    

Další kroky