Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In deze zelfstudie leert u hoe u een multivariate anomaliedetectiemodel traint in een Fabric notebook met behulp van voorbeeldgegevens die zijn opgeslagen in een eventhouse. Vervolgens gebruikt u het getrainde model in een KQL-queryset om nieuwe gegevens te scoren en afwijkingen te visualiseren.
Zie Overzicht van multivariate anomaliedetectie in Microsoft Fabric voor achtergrondinformatie.
Prerequisites
- Een werkruimte met een ingeschakelde Microsoft Fabric-capaciteit.
- Een werkruimterolBeheerder, Inzender of Lid. U hebt dit machtigingsniveau nodig om items zoals een omgeving te maken.
- Een evenementenhuis in uw werkruimte met een database.
- Het voorbeeldgegevensbestand.
- Het voorbeeldnotitieblok.
Deel 1: Beschikbaarheid van OneLake inschakelen
Schakel OneLake-beschikbaarheid in voordat u gegevens in het eventhouse laadt. Met deze instelling zijn de opgenomen gegevens beschikbaar in OneLake, zodat u later in de zelfstudie toegang hebt tot dezelfde tabel vanuit een notebook.
Open in uw werkruimte het eventhouse dat u hebt gemaakt in de vereisten en selecteer vervolgens de database waarin u uw gegevens wilt opslaan.
Stel in het deelvenster Databasegegevensde beschikbaarheid van OneLake in op Aan.
Deel 2: De KQL-Python-invoegtoepassing inschakelen
In deze stap schakelt u de Python-invoegtoepassing in uw eventhouse in. Deze stap is vereist om de Python code uit te voeren in de KQL-queryset in deel 9: Afwijkingen voorspellen in een KQL-queryset. Selecteer de Python afbeelding die het pakket time-series-anomaly-detector bevat.
Selecteer in het eventhouse Eventhouse>Invoegtoepassingen op het lint.
Stel in het deelvenster InvoegtoepassingenPython taalextensie in op Aan.
Selecteer Python 3.11.7 DL.
Kies Gereed.
Deel 3: Een Spark-omgeving maken
In deze stap maakt u een Spark-omgeving om het notebook uit te voeren waarmee het multivariate anomaliedetectiemodel wordt getraind. Zie Omgevingen maken en beheren voor meer informatie.
Selecteer + Nieuw item in uw werkruimte en selecteer vervolgens Omgeving.
Voer
MVAD_ENVin voor de naam van de omgeving en selecteer vervolgens Maken.Selecteer openbare bibliotheken onder Bibliotheken.
Selecteer Toevoegen in PyPI.
Typ
time-series-anomaly-detectorin het zoekvak. Voer in het vak Versie de tekst in0.3.9.Selecteer Opslaan.
Selecteer het tabblad Start in de omgeving.
Selecteer het pictogram Publiceren op het lint.
Selecteer Alles publiceren. Het kan enkele minuten duren voordat deze stap is voltooid.
Deel 4: Gegevens in het eventhouse laden
Beweeg in het eventhouse de aanwijzer over de KQL-database waar u uw gegevens wilt opslaan en selecteer vervolgens Meer menu [...]>Gegevens ophalen>Lokaal bestand.
Selecteer + Nieuwe tabel en voer de tabelnaam in
demo_stocks_change.Selecteer Bladeren naar bestanden in het dialoogvenster Uploaden en upload het voorbeeldgegevensbestand dat u hebt gedownload in Vereisten.
Klik op Volgende.
Controleer in de sectie De gegevens inspecteren of Eerste rij is kolomkop is ingesteld op Aan.
Selecteer en voltooi.
Wanneer de gegevens worden geüpload, selecteert u Sluiten.
Deel 5: Het OneLake-pad kopiëren
Selecteer de demo_stocks_change tabel. Selecteer in het deelvenster Tabeldetailsde map OneLake om het OneLake-pad naar het Klembord te kopiëren. Sla het pad op in een teksteditor voor later gebruik.
Deel 6: Het notitieblok voorbereiden
Selecteer uw werkruimte.
Selecteer Importeren>Notebook>vanaf deze computer.
Selecteer Uploaden en kies het notitieblok dat u hebt gedownload in Vereisten.
Nadat het notitieblok is geüpload, kunt u uw notitieblok zoeken en openen vanuit uw werkruimte.
Selecteer op het bovenste lint de standaard vervolgkeuzelijst Werkruimte en selecteer vervolgens de omgeving die u in de vorige stap hebt gemaakt.
Deel 7: Het notebook uitvoeren
Standaardpakketten importeren.
import numpy as np import pandas as pdSpark heeft een ABFSS-URI nodig om veilig verbinding te maken met OneLake-opslag. Definieer daarom een helperfunctie waarmee de OneLake-URI wordt geconverteerd naar een ABFSS-URI.
def convert_onelake_to_abfss(onelake_uri): if not onelake_uri.startswith('https://'): raise ValueError("Invalid OneLake URI. It should start with 'https://'.") uri_without_scheme = onelake_uri[8:] parts = uri_without_scheme.split('/') if len(parts) < 3: raise ValueError("Invalid OneLake URI format.") container_name = parts[1] path = '/'.join(parts[2:]) abfss_uri = f"abfss://{container_name}@{parts[0]}/{path}" return abfss_uriVervang
OneLakeTableURIdoor de OneLake-URI die u hebt gekopieerd in deel 5: Kopieer het OneLake-pad en laad dedemo_stocks_changetabel in een pandas-dataframe.onelake_uri = "OneLakeTableURI" # Replace with your OneLake table URI. abfss_uri = convert_onelake_to_abfss(onelake_uri) print(abfss_uri)df = spark.read.format('delta').load(abfss_uri) df = df.toPandas() df['Date'] = pd.to_datetime(df['Date']) df = df.set_index('Date').sort_index() print(df.shape) df.head(3)Voer de volgende cellen uit om de trainings- en voorspellingsdataframes voor te bereiden.
Notitie
De werkelijke voorspellingen worden uitgevoerd in het eventhouse in Deel 9: Anomalieën voorspellen in een KQL-queryset. In een productiescenario past u doorgaans een score toe op nieuwe streaminggegevens. In deze tutorial wordt de gegevensset op basis van datum opgesplitst in trainings- en voorspellingsperioden om historische en binnenkomende gegevens te simuleren.
features_cols = ['AAPL', 'AMZN', 'GOOG', 'MSFT', 'SPY'] cutoff_date = pd.Timestamp('2023-01-01')train_df = df.loc[df.index < cutoff_date, features_cols] print(train_df.shape) train_df.head(3)train_len = len(train_df) predict_len = len(df) - train_len print(f'Total samples: {len(df)}. Split to {train_len} for training, {predict_len} for testing')Voer de cellen uit om het model te trainen en op te slaan in het Fabric MLflow-modelregister.
from anomaly_detector import MultivariateAnomalyDetector model = MultivariateAnomalyDetector()sliding_window = 200 params = {"sliding_window": sliding_window}model.fit(train_df, params=params)model_name = "mvad_5_stocks_model"import mlflow with mlflow.start_run(): mlflow.log_params(params) mlflow.set_tag("Training Info", "MVAD on 5 Stocks Dataset") model_info = mlflow.pyfunc.log_model( python_model=model, artifact_path="mvad_artifacts", registered_model_name=model_name, )Voer de volgende cel uit om het geregistreerde modelpad op te halen dat u later gebruikt voor voorspelling in de KQL-Python sandbox.
from mlflow.tracking import MlflowClient client = MlflowClient() mvs = client.search_model_versions(f"name='{model_name}'") latest = max(mvs, key=lambda v: v.creation_timestamp) model_abfss = latest.source print(model_abfss)Kopieer de model-URI uit de uitvoer van de laatste cel. U gebruikt het in deel 9.
Deel 8: Een KQL-queryset maken
Zie Een KQL-queryset maken voor algemene informatie.
- Selecteer + Nieuw item>KQL Queryset in uw werkruimte.
- Voer
MultivariateAnomalyDetectionTutorialin en selecteer vervolgens Maken. - Selecteer in het oneLake-catalogusvenster de KQL-database waarin u de gegevens hebt opgeslagen.
- Selecteer Verbinding maken.
Deel 9: Afwijkingen voorspellen in een KQL-queryset
Voer de volgende
.create-or-alter functionquery uit om depredict_fabric_mvad_fl()opgeslagen functie te definiëren:.create-or-alter function with (folder = "Packages\\ML", docstring = "Predict MVAD model in Microsoft Fabric") predict_fabric_mvad_fl(samples:(*), features_cols:dynamic, artifacts_uri:string, trim_result:bool=false) { let s = artifacts_uri; let artifacts = bag_pack('MLmodel', strcat(s, '/MLmodel;impersonate'), 'conda.yaml', strcat(s, '/conda.yaml;impersonate'), 'requirements.txt', strcat(s, '/requirements.txt;impersonate'), 'python_env.yaml', strcat(s, '/python_env.yaml;impersonate'), 'python_model.pkl', strcat(s, '/python_model.pkl;impersonate')); let kwargs = bag_pack('features_cols', features_cols, 'trim_result', trim_result); let code = ```if 1: import os import shutil import mlflow work_dir = os.environ.get("UPLOAD_PATH") model_dir = work_dir + '/mvad_model' model_data_dir = model_dir + '/data' os.mkdir(model_dir) shutil.move(work_dir + '/MLmodel', model_dir) shutil.move(work_dir + '/conda.yaml', model_dir) shutil.move(work_dir + '/requirements.txt', model_dir) shutil.move(work_dir + '/python_env.yaml', model_dir) shutil.move(work_dir + '/python_model.pkl', model_dir) features_cols = kargs["features_cols"] trim_result = kargs["trim_result"] test_data = df[features_cols] model = mlflow.pyfunc.load_model(model_dir) predictions = model.predict(test_data) predict_result = pd.DataFrame(predictions) samples_offset = len(df) - len(predict_result) # this model doesn't output predictions for the first sliding_window-1 samples if trim_result: # trim the prefix samples result = df[samples_offset:] result.iloc[:,-4:] = predict_result.iloc[:, 1:] # no need to copy 1st column which is the timestamp index else: result = df # output all samples result.iloc[samples_offset:,-4:] = predict_result.iloc[:, 1:] ```; samples | evaluate python(typeof(*), code, kwargs, external_artifacts=artifacts) }Voer de volgende voorspellingsquery uit. Vervang
enter your model URI heredoor de URI die u aan het einde van Deel 7: Het notebook uitvoeren hebt gekopieerd.De query detecteert afwijkingen met meerdere variabelen voor de vijf aandelen met behulp van het getrainde model en geeft vervolgens de resultaten weer als een
anomalychart. De afwijkende punten worden weergegeven op het eerste aandeel (AAPL), maar ze vertegenwoordigen afwijkingen in het gezamenlijke gedrag van alle vijf de voorraden op een bepaalde datum.let cutoff_date=datetime(2023-01-01); let num_predictions=toscalar(demo_stocks_change | where Date >= cutoff_date | count); // number of latest points to predict let sliding_window=200; // should match the window that was set for model training let prefix_score_len = sliding_window/2+min_of(sliding_window/2, 200)-1; let num_samples = prefix_score_len + num_predictions; demo_stocks_change | top num_samples by Date desc | order by Date asc | extend is_anomaly=bool(false), score=real(null), severity=real(null), interpretation=dynamic(null) | invoke predict_fabric_mvad_fl(pack_array('AAPL', 'AMZN', 'GOOG', 'MSFT', 'SPY'), // NOTE: Update artifacts_uri to model path artifacts_uri='enter your model URI here', trim_result=true) | summarize Date=make_list(Date), AAPL=make_list(AAPL), AMZN=make_list(AMZN), GOOG=make_list(GOOG), MSFT=make_list(MSFT), SPY=make_list(SPY), anomaly=make_list(toint(is_anomaly)) | render anomalychart with(anomalycolumns=anomaly, title='Stock price changes in % with anomalies')
Het resulterende anomaliediagram lijkt op de volgende afbeelding:
Hulpmiddelen opschonen
Wanneer u klaar bent met de zelfstudie, verwijdert u de resources die u hebt gemaakt om onnodige kosten te voorkomen:
- Blader naar de startpagina van uw werkruimte.
- Verwijder de omgeving die u in deze zelfstudie hebt gemaakt.
- Verwijder het notitieblok dat u in deze zelfstudie hebt gemaakt.
- Verwijder het eventhouse of de database die in deze tutorial is gebruikt.
- Verwijder de KQL-queryset die in deze handleiding is gemaakt.