Εντοπισμός πολλαπλών ανωμαλιών
Για γενικές πληροφορίες σχετικά με τον εντοπισμό πολλαπλών ανωμαλιών στην Ευφυΐα πραγματικού χρόνου, ανατρέξτε στο θέμα Εντοπισμός πολλαπλών ανωμαλιών στο Microsoft Fabric - επισκόπηση. Σε αυτό το πρόγραμμα εκμάθησης, θα χρησιμοποιήσετε ένα δείγμα δεδομένων για να εκπαιδεύσετε ένα μοντέλο εντοπισμού ανωμαλιών πολλαπλών συναρτημάτων χρησιμοποιώντας τον μηχανισμό Spark σε ένα σημειωματάριο Python. Στη συνέχεια, θα προβλέψετε ανωμαλίες εφαρμόζοντας το εκπαιδευμένο μοντέλο σε νέα δεδομένα χρησιμοποιώντας τον μηχανισμό Eventhouse. Τα πρώτα βήματα ορίζουν τα περιβάλλοντά σας και τα παρακάτω βήματα εκπαιδεύουν το μοντέλο και προβλέπουν ανωμαλίες.
Προαπαιτούμενα στοιχεία
- Ένας χώρος εργασίας με εκχωρημένους πόρους με δυνατότητα Microsoft Fabric
- Ρόλος διαχειριστή, συμβάλλοντος ή μέλους στον χώρο εργασίας. Αυτό το επίπεδο δικαιωμάτων είναι απαραίτητο για τη δημιουργία στοιχείων όπως ένα περιβάλλον.
- Μια υπηρεσία συμβάντων στον χώρο εργασίας σας με μια βάση δεδομένων.
- Λήψη του δείγματος δεδομένων από το αποθετήριο δεδομένων GitHub
- Λήψη του σημειωματάριου από το αποθετήριο δεδομένων GitHub
Μέρος 1- Ενεργοποίηση διαθεσιμότητας OneLake
Η διαθεσιμότητα oneLake πρέπει να ενεργοποιηθεί πριν λάβετε δεδομένα στο Eventhouse. Αυτό το βήμα είναι σημαντικό, επειδή επιτρέπει στα δεδομένα πρόσληψης να γίνουν διαθέσιμα στο OneLake. Σε ένα μεταγενέστερο βήμα, αποκτάτε πρόσβαση στα ίδια δεδομένα από το Spark Notebook σας για να εκπαιδεύσετε το μοντέλο.
Μεταβείτε στην αρχική σελίδα του χώρου εργασίας σας στην ευφυΐα σε πραγματικό χρόνο.
Επιλέξτε την Ενότητα συμβάντων που δημιουργήσατε στα προαπαιτούμενα. Επιλέξτε τη βάση δεδομένων στην οποία θέλετε να αποθηκεύσετε τα δεδομένα σας.
Στο πλακίδιο Λεπτομέρειες βάσης δεδομένων, επιλέξτε το εικονίδιο μολυβιού δίπλα στο στοιχείο Διαθεσιμότητα OneLake
Στο δεξιό τμήμα παραθύρου, αλλάξτε το κουμπί σε Ενεργό.
Επιλέξτε Τέλος.
Μέρος 2- Ενεργοποίηση προσθήκης Python KQL
Σε αυτό το βήμα, ενεργοποιείτε την προσθήκη python στο Eventhouse. Αυτό το βήμα απαιτείται για την εκτέλεση του κώδικα Python πρόβλεψης ανωμαλιών στο σύνολο ερωτημάτων KQL. Είναι σημαντικό να επιλέξετε το σωστό πακέτο που περιέχει το πακέτο εντοπισμού ανωμαλιών χρονικής σειράς.
Στην οθόνη Eventhouse, επιλέξτε τη βάση δεδομένων σας και, στη συνέχεια, επιλέξτε Διαχείριση>προσθηκών από την κορδέλα..
Στο τμήμα παραθύρου Προσθήκες, αλλάξτε την επέκταση γλώσσας Python σε Ενεργοποίηση.
Επιλέξτε Python 3.11.7 DL (προεπισκόπηση).
Επιλέξτε Τέλος.
Μέρος 3- Δημιουργία περιβάλλοντος Spark
Σε αυτό το βήμα, δημιουργείτε ένα περιβάλλον Spark για την εκτέλεση του σημειωματάριου Python που εκπαιδεύει το μοντέλο εντοπισμού πολυμεταβλημένων ανωμαλιών χρησιμοποιώντας τον μηχανισμό Spark. Για περισσότερες πληροφορίες σχετικά με τη δημιουργία περιβαλλόντων, ανατρέξτε στο θέμα Δημιουργία και διαχείριση περιβαλλόντων.
Στην εναλλαγή εμπειρίας, επιλέξτε Διαχείριση δεδομένων. Εάν βρίσκεστε ήδη στην εμπειρία Της μηχανικής δεδομένων, μεταβείτε στην Αρχική σελίδα.
Από τα Προτεινόμενα στοιχεία για δημιουργία, επιλέξτε Περιβάλλοντα και πληκτρολογήστε το όνομα MVAD_ENV για το περιβάλλον.
Στην περιοχή Βιβλιοθήκες, επιλέξτε Δημόσιες βιβλιοθήκες.
Επιλέξτε Προσθήκη από το PyPI.
Στο πλαίσιο αναζήτησης, πληκτρολογήστε πρόγραμμα εντοπισμού ανωμαλιών χρονολογίας-σειράς. Η έκδοση συμπληρώνεται αυτόματα με την πιο πρόσφατη έκδοση. Αυτή η εκμάθηση δημιουργήθηκε με χρήση της έκδοσης 0.2.7, η οποία είναι η έκδοση που περιλαμβάνεται στο Kusto Python 3.11.7 DL.
Επιλέξτε Αποθήκευση.
Επιλέξτε την Αρχική καρτέλα στο περιβάλλον.
Επιλέξτε το εικονίδιο Δημοσίευση από την κορδέλα.
Επιλέξτε Δημοσίευση όλων. Αυτό το βήμα μπορεί να διαρκέσει αρκετά λεπτά για να ολοκληρωθεί.
Μέρος 4- Λήψη δεδομένων στο Eventhouse
Τοποθετήστε τον δείκτη του ποντικιού πάνω στη βάση δεδομένων KQL όπου θέλετε να αποθηκεύσετε τα δεδομένα σας. Επιλέξτε το μενού Περισσότερα [...]>Λήψη δεδομένων>Τοπικό αρχείο.
Επιλέξτε + Νέος πίνακας και πληκτρολογήστε demo_stocks_change ως όνομα πίνακα.
Στο παράθυρο διαλόγου αποστολή δεδομένων, επιλέξτε Αναζήτηση για αρχεία και αποστείλετε το δείγμα αρχείου δεδομένων που έχει ληφθεί στα Προαπαιτούμενα
Επιλέξτε Επόμενο.
Στην ενότητα Επιθεώρηση δεδομένων, η εναλλαγή Της πρώτης γραμμής είναι η κεφαλίδα στήλης σε Ενεργό.
Επιλέξτε Τέλος.
Όταν ολοκληρωθεί η αποστολή των δεδομένων, επιλέξτε Κλείσιμο.
Μέρος 5- Αντιγραφή διαδρομής OneLake στον πίνακα
Βεβαιωθείτε ότι έχετε επιλέξει τον πίνακα demo_stocks_change . Στο πλακίδιο Λεπτομέρειες πίνακα, επιλέξτε Αντιγραφή διαδρομής για να αντιγράψετε τη διαδρομή OneLake στο πρόχειρό σας. Αποθηκεύστε αυτό το αντιγραραμμένα κείμενο σε ένα πρόγραμμα επεξεργασίας κειμένου σε κάποιο σημείο για να χρησιμοποιηθεί σε μεταγενέστερο βήμα.
Μέρος 6- Προετοιμασία του σημειωματάριου
Στην εναλλαγή εμπειρίας, επιλέξτε Ανάπτυξη και επιλέξτε τον χώρο εργασίας σας.
Επιλέξτε Εισαγωγή, Σημειωματάριο και, στη συνέχεια, Από αυτόν τον υπολογιστή.
Επιλέξτε Αποστολή και επιλέξτε το σημειωματάριο που κατεβάσατε στα προαπαιτούμενα.
Μετά την αποστολή του σημειωματάριου, μπορείτε να βρείτε και να ανοίξετε το σημειωματάριό σας από τον χώρο εργασίας σας.
Από την επάνω κορδέλα, επιλέξτε το αναπτυσσόμενο μενού Προεπιλεγμένος χώρος εργασίας και επιλέξτε το περιβάλλον που δημιουργήσατε στο προηγούμενο βήμα.
Μέρος 7- Εκτέλεση του σημειωματάριου
Εισαγωγή τυπικών πακέτων.
import numpy as np import pandas as pd
Το Spark χρειάζεται ένα URI ABFSS για να συνδεθεί με ασφάλεια στον χώρο αποθήκευσης OneLake, επομένως το επόμενο βήμα ορίζει αυτή τη συνάρτηση για τη μετατροπή του URI OneLake σε URI ABFSS.
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.") account_name = parts[0].split('.')[0] container_name = parts[1] path = '/'.join(parts[2:]) abfss_uri = f"abfss://{container_name}@{parts[0]}/{path}" return abfss_uri
Εισαγάγετε το URI OneLake που αντιγράψατε από το Μέρος 5- Αντιγράψτε τη διαδρομή OneLake στον πίνακα για να φορτώσετε demo_stocks_change πίνακα σε ένα πλαίσιο δεδομένων pandas.
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().set_index('Date') print(df.shape) df[:3]
Εκτελέστε τα ακόλουθα κελιά για να προετοιμάσετε τα πλαίσια δεδομένων εκπαίδευσης και πρόβλεψης.
Σημείωμα
Οι πραγματικές προβλέψεις θα εκτελεστούν σε δεδομένα από την Υπηρεσία συμβάντων στο μέρος 9- Πρόβλεψη-ανωμαλίες-στο-kql-σύνολο ερωτημάτων. Σε ένα σενάριο παραγωγής, εάν κάνατε ροή δεδομένων στην υπηρεσία συμβάντων, οι προβλέψεις θα γίνονται στα νέα δεδομένα ροής. Για τον σκοπό της εκμάθησης, το σύνολο δεδομένων έχει διαιρεθεί κατά ημερομηνία σε δύο ενότητες για εκπαίδευση και πρόβλεψη. Αυτό γίνεται για την προσομοίωση ιστορικών δεδομένων και νέων δεδομένων ροής.
features_cols = ['AAPL', 'AMZN', 'GOOG', 'MSFT', 'SPY'] cutoff_date = pd.to_datetime('2023-01-01')
train_df = df[df.Date < cutoff_date] print(train_df.shape) train_df[: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')
Εκτελέστε τα κελιά για να εκπαιδεύσετε το μοντέλο και να το αποθηκεύσετε στο μητρώο μοντέλων Fabric MLflow.
import mlflow from anomaly_detector import MultivariateAnomalyDetector model = MultivariateAnomalyDetector()
sliding_window = 200 param s = {"sliding_window": sliding_window}
model.fit(train_df, params=params)
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="mvad_5_stocks_model", )
# Extract the registered model path to be used for prediction using Kusto Python sandbox mi = mlflow.search_registered_models(filter_string="name='mvad_5_stocks_model'")[0] model_abfss = mi.latest_versions[0].source print(model_abfss)
Αντιγράψτε το URI μοντέλου από την τελευταία έξοδο κελιού. Θα το χρησιμοποιήσετε σε ένα επόμενο βήμα αργότερα.
Μέρος 8- Ρύθμιση του συνόλου ερωτημάτων KQL
Για γενικές πληροφορίες, ανατρέξτε στο θέμα Δημιουργία συνόλου ερωτημάτων KQL.
- Στην εναλλαγή εμπειρίας, επιλέξτε Ευφυΐα σε πραγματικό χρόνο.
- Επιλέξτε τον χώρο εργασίας σας.
- Επιλέξτε +Νέο στοιχείο>Σύνολο ερωτημάτων KQL. Εισαγάγετε το όνομα MultivariateAnomalyDetectionTutorial.
- Επιλέξτε Δημιουργία.
- Στο παράθυρο κέντρου δεδομένων OneLake, επιλέξτε τη βάση δεδομένων KQL στην οποία αποθηκεύσατε τα δεδομένα.
- Επιλέξτε Σύνδεση.
Μέρος 9- Πρόβλεψη ανωμαλιών στο σύνολο ερωτημάτων KQL
Αντιγράψτε/επικολλήστε και εκτελέστε το ακόλουθο ερώτημα ".create-or-alter function" για να ορίσετε την
predict_fabric_mvad_fl()
αποθηκευμένη συνάρτηση:.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 model_dir = 'C:/Temp/mvad_model' model_data_dir = model_dir + '/data' os.mkdir(model_dir) shutil.move('C:/Temp/MLmodel', model_dir) shutil.move('C:/Temp/conda.yaml', model_dir) shutil.move('C:/Temp/requirements.txt', model_dir) shutil.move('C:/Temp/python_env.yaml', model_dir) shutil.move('C:/Temp/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) }
Αντιγράψτε/επικολλήστε το παρακάτω ερώτημα πρόβλεψης.
- Αντικαταστήστε το μοντέλο εξόδου URI που αντιγράφεται στο τέλος του βήματος 7.
- Εκτέλεση του ερωτήματος. Εντοπίζει πολυμεταβλημένες ανωμαλίες στα πέντε αποθέματα, με βάση το εκπαιδευμένο μοντέλο, και αποδίδει τα αποτελέσματα ως
anomalychart
. Τα ανώμαλα σημεία αποδίδονται στο πρώτο απόθεμα (AAPL), αν και αντιπροσωπεύουν πολυμεταβλημένες ανωμαλίες (δηλαδή ανωμαλίες των κοινών αλλαγών των πέντε αποθεμάτων κατά τη συγκεκριμένη ημερομηνία).
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 Changest in % with Anomalies')
Το γράφημα ανωμαλιών που προκύπτει θα πρέπει να μοιάζει με την παρακάτω εικόνα:
Εκκαθάριση των πόρων
Όταν ολοκληρώσετε την εκμάθηση, μπορείτε να διαγράψετε τους πόρους που δημιουργήσατε για να αποφύγετε την επιβολή άλλων δαπανών. Για να διαγράψετε τους πόρους, ακολουθήστε τα εξής βήματα:
- Μεταβείτε στην αρχική σελίδα του χώρου εργασίας σας.
- Διαγράψτε το περιβάλλον που δημιουργήθηκε σε αυτή την εκμάθηση.
- Διαγράψτε το σημειωματάριο που δημιουργήθηκε σε αυτή την εκμάθηση.
- Διαγράψτε την Eventhouse ή τη βάση δεδομένων που χρησιμοποιούνται σε αυτή την εκμάθηση.
- Διαγράψτε το σύνολο ερωτημάτων KQL που δημιουργήθηκε σε αυτή την εκμάθηση.