Merk
Tilgang til denne siden krever autorisasjon. Du kan prøve å logge på eller endre kataloger.
Tilgang til denne siden krever autorisasjon. Du kan prøve å endre kataloger.
Denne veiledningen viser deg hvordan du trener en multivariat anomalideteksjonsmodell i en Fabric-notebook ved å bruke eksempeldata lagret i et eventhouse. Deretter bruker du den trente modellen i et KQL-spørringssett for å score nye data og visualisere anomalier.
For bakgrunnsinformasjon, se Multivariate anomalideteksjon i Microsoft Fabric – oversikt.
Forutsetning
- Et arbeidsområde med en Microsoft Fabric-aktivert -kapasitet.
- En admin-, bidragsyter- eller medlemsarbeidsområde-rolle. Du trenger dette tillatelsesnivået for å lage elementer som et miljø.
- Et hendelseshus i arbeidsområdet med en database.
- Eksempeldatafilen.
- Eksempelnotatboken.
Del 1: Slå på tilgjengeligheten av OneLake
Slå på OneLake-tilgjengelighet før du laster inn data i eventhuset. Denne innstillingen gjør de innsamlede dataene tilgjengelige i OneLake slik at du kan få tilgang til den samme tabellen fra en notatbok senere i veiledningen.
I arbeidsområdet ditt, åpne eventhouse-programmet du opprettet i forutsetningene, og velg deretter databasen hvor du vil lagre dataene dine.
I panelet for databasedetaljer , sett OneLake-tilgjengelighet til På.
Del 2: Slå på KQL Python-pluginen
I dette steget slår du på Python-pluginen i eventhuset ditt. Dette steget kreves for å kjøre Python-koden i KQL-spørringssettet i del 9: Forutsi anomalier i et KQL-spørringssett. Velg Python-bildet som inkluderer time-series-anomaly-detector-pakken.
I eventhouse, velg Eventhouse>Plugins på båndet.
I Plugins-panelet, sett Python-språkutvidelsen til På.
Velg Python 3.11.7 DL.
Velg Ferdig.
Del 3: Skap et Spark-miljø
I dette steget lager du et Spark-miljø for å kjøre notatboken som trener multivariate anomali-deteksjonsmodellen. For mer informasjon, se Opprett og administrer miljøer.
Fra arbeidsområdet ditt, velg + Nytt element, og velg deretter Miljø.
Skriv inn
MVAD_ENVfor miljønavnet, og velg deretter Opprett.Velg Folkebiblioteker under Biblioteker.
Velg Legg til fra PyPI.
I søkefeltet, skriv
time-series-anomaly-detectorinn . I versjonsboksen, skriv inn .0.3.9Velg Lagre.
Velg Hjem-fanen i miljøet.
Velg Publiser-ikonet på båndet.
Velg Publiser alle. Dette trinnet kan ta flere minutter å fullføre.
Del 4: Last inn data i eventhuset
I eventhouse, hold musepekeren over KQL-databasen der du vil lagre dataene dine, og velg deretter Mer meny [...]>Hent data>Lokal fil.
Velg + Ny tabell, og skriv
demo_stocks_changeinn som tabellnavn.I opplastingsdialogen velger du Bla etter filer, og last opp eksempeldatafilen du lastet ned i Prerequisites.
Velg Neste.
Kontroller at Første rad er kolonneoverskrift er satt til Påi delen Undersøk dataene .
Velg Fullfør.
Når dataene lastes opp, velger du Lukk.
Del 5: Kopier OneLake-stien
Velg demo_stocks_change tabellen. Velg OneLake-mappen for å kopiere OneLake-banen til utklippstavlen i Tabelldetaljer-ruten. Lagre stien i en teksteditor for senere bruk.
Del 6: Gjør klar notatboken
Velg arbeidsområdet.
Velg Importer>notatbok>fra denne datamaskinen.
Velg Last opp, og velg notatboken du lastet ned i Prerequisites.
Når notatblokken er lastet opp, kan du finne og åpne notatblokken fra arbeidsområdet.
På øverste bånd velger du nedtrekkslisten for standard arbeidsområde , og deretter miljøet du opprettet i forrige steg.
Del 7: Kjør notatboken
Importer standardpakker.
import numpy as np import pandas as pdSpark trenger en ABFSS-URI for å koble sikkert til OneLake-lagring, så definer en hjelpefunksjon som konverterer OneLake-URI-en til en 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_uriErstatt
OneLakeTableURIut med OneLake-URI-en du kopierte i del 5: Kopier OneLake-stien, og lastdemo_stocks_changederetter tabellen inn i en pandas-dataramme.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)Kjør følgende celler for å klargjøre datarammene for opplæring og prognoser.
Merk
De faktiske prediksjonene kjøres i eventhuset i del 9: Forutsi anomalier i et KQL-spørringssett. I et produksjonsscenario scorer du vanligvis nye strømmedata. I denne veiledningen deles datasettet opp etter dato i trenings- og prediksjonsområder for å simulere historiske og innkommende data.
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')Kjør cellene for å trene modellen og lagre den i Fabric MLflow-modellregisteret.
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, )Kjør følgende celle for å få den registrerte modellstien som du senere bruker for prediksjon i 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)Kopier modell-URI-en fra utgangen i forrige celle. Du bruker det i del 9.
Del 8: Opprett et KQL-spørringssett
Hvis du vil ha generell informasjon, kan du se Opprette et KQL-spørringssett.
- I arbeidsområdet ditt, velg + Nytt element>KQL Queryset.
- Skriv inn
MultivariateAnomalyDetectionTutorial, og velg deretter Opprette. - I OneLake-katalogvinduet , velg KQL-databasen der du lagret dataene.
- Velg Koble til.
Del 9: Forutsi avvik i et KQL-spørringssett
Kjør følgende
.create-or-alter functionspørring for å definere denpredict_fabric_mvad_fl()lagrede funksjonen:.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) }Kjør følgende prediksjonsspørring. Erstatt
enter your model URI heremed URI-en du kopierte på slutten av del 7: Kjør notatboken.Spørringen oppdager multivariate anomalier på tvers av de fem aksjene ved å bruke den trente modellen, og gjengir deretter resultatene som en
anomalychart. De anomale punktene vises på den første stokken (AAPL), men de representerer anomalier i felles oppførsel for alle fem stokkene på en gitt dato.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')
Det resulterende anomalidiagrammet ligner følgende bilde:
Fjerning av ressurser
Når du er ferdig med opplæringen, slett ressursene du har laget for å unngå unødvendige kostnader:
- Bla til hjemmesiden for arbeidsområdet.
- Slett miljøet som er opprettet i denne opplæringen.
- Slett notatblokken som er opprettet i denne opplæringen.
- Slett eventhuset eller databasen som ble brukt i denne veiledningen.
- Slett KQL-spørringssettet som er opprettet i denne opplæringen.