Εντοπισμός πολλαπλών ανωμαλιών
Για γενικές πληροφορίες σχετικά με τον εντοπισμό πολλαπλών ανωμαλιών στην Ευφυΐα πραγματικού χρόνου, ανατρέξτε στο θέμα Εντοπισμός πολλαπλών ανωμαλιών στο Microsoft Fabric - επισκόπηση. Σε αυτό το εκπαιδευτικό βοήθημα, χρησιμοποιείτε ένα δείγμα δεδομένων για να εκπαιδεύσετε ένα μοντέλο εντοπισμού ανωμαλιών πολλαπλών συναρτημάτων χρησιμοποιώντας τον μηχανισμό Spark σε ένα σημειωματάριο Python. Στη συνέχεια, προβλέπετε ανωμαλίες εφαρμόζοντας το εκπαιδευμένο μοντέλο σε νέα δεδομένα χρησιμοποιώντας τον μηχανισμό Eventhouse. Τα πρώτα βήματα ορίζουν τα περιβάλλοντά σας και τα παρακάτω βήματα εκπαιδεύουν το μοντέλο και προβλέπουν ανωμαλίες.
Προαπαιτούμενα στοιχεία
- Ένας χώρος εργασίας με εκχωρημένους πόρους με δυνατότητα Microsoft Fabric
- Ρόλος διαχειριστή, συμβάλλοντος ή μέλουςστον χώρο εργασίας. Αυτό το επίπεδο δικαιωμάτων είναι απαραίτητο για τη δημιουργία στοιχείων όπως ένα περιβάλλον.
- Μια υπηρεσία συμβάντων στον χώρο εργασίας σας με μια βάση δεδομένων.
- Λήψη του δείγματος δεδομένων από το αποθετήριο δεδομένων GitHub
- Λήψη του σημειωματάριου από το αποθετήριο δεδομένων GitHub
Μέρος 1- Ενεργοποίηση διαθεσιμότητας OneLake
Η διαθεσιμότητα oneLake πρέπει να ενεργοποιηθεί πριν λάβετε δεδομένα στο Eventhouse. Αυτό το βήμα είναι σημαντικό, επειδή επιτρέπει στα δεδομένα πρόσληψης να γίνουν διαθέσιμα στο OneLake. Σε ένα μεταγενέστερο βήμα, αποκτάτε πρόσβαση στα ίδια δεδομένα από το Spark Notebook σας για να εκπαιδεύσετε το μοντέλο.
Από τον χώρο εργασίας σας επιλέξτε την ενότητα Eventhouse που δημιουργήσατε στα προαπαιτούμενα. Επιλέξτε τη βάση δεδομένων στην οποία θέλετε να αποθηκεύσετε τα δεδομένα σας.
Στο τμήμα παραθύρου λεπτομέρειες βάσης δεδομένων , αλλάξτε το κουμπί διαθεσιμότητας του OneLake για να στη.
Μέρος 2- Ενεργοποίηση προσθήκης Python KQL
Σε αυτό το βήμα, ενεργοποιείτε την προσθήκη python στο Eventhouse. Αυτό το βήμα απαιτείται για την εκτέλεση του κώδικα Python πρόβλεψης ανωμαλιών στο σύνολο ερωτημάτων KQL. Είναι σημαντικό να επιλέξετε τη σωστή εικόνα που περιέχει το πρόγραμμα εντοπισμού χρονικής σειράς-ανωμαλίας πακέτο.
Στην οθόνη Eventhouse, επιλέξτε >προσθηκών eventhouse από την κορδέλα.
Στο τμήμα παραθύρου Προσθήκες, αλλάξτε την επέκταση γλώσσας Python σε Ενεργοποίηση.
Επιλέξτε Python 3.11.7 DL (προεπισκόπηση).
Επιλέξτε Τέλος.
Μέρος 3- Δημιουργία περιβάλλοντος Spark
Σε αυτό το βήμα, δημιουργείτε ένα περιβάλλον Spark για την εκτέλεση του σημειωματάριου Python που εκπαιδεύει το μοντέλο εντοπισμού πολυμεταβλημένων ανωμαλιών χρησιμοποιώντας τον μηχανισμό Spark. Για περισσότερες πληροφορίες σχετικά με τη δημιουργία περιβαλλόντων, ανατρέξτε στο θέμα Δημιουργία και διαχείριση περιβαλλόντων.
Από τον χώρο εργασίας σας, επιλέξτε + Νέο στοιχείο στη συνέχεια, περιβάλλον.
Πληκτρολογήστε το όνομα MVAD_ENV για το περιβάλλον και, στη συνέχεια, επιλέξτε Δημιουργία.
Από την καρτέλα Αρχική του περιβάλλοντος, επιλέξτε Περιβάλλοντος εκτέλεσης>1.2 (Spark 3.4, Delta 2.4).
Στην περιοχή Βιβλιοθήκες, επιλέξτε Δημόσιες βιβλιοθήκες.
Επιλέξτε Προσθήκη από το PyPI.
Στο πλαίσιο αναζήτησης, πληκτρολογήστε πρόγραμμα εντοπισμού ανωμαλιών χρονολογίας-σειράς. Η έκδοση συμπληρώνεται αυτόματα με την πιο πρόσφατη έκδοση. Αυτό το πρόγραμμα εκμάθησης δημιουργήθηκε με χρήση της έκδοσης 0.3.2.
Επιλέξτε Αποθήκευση.
Επιλέξτε την Αρχική καρτέλα στο περιβάλλον.
Επιλέξτε το εικονίδιο Δημοσίευση από την κορδέλα.
Επιλέξτε Δημοσίευση όλων. Αυτό το βήμα μπορεί να διαρκέσει αρκετά λεπτά για να ολοκληρωθεί.
Μέρος 4- Λήψη δεδομένων στο Eventhouse
Τοποθετήστε τον δείκτη του ποντικιού πάνω στη βάση δεδομένων KQL όπου θέλετε να αποθηκεύσετε τα δεδομένα σας. Επιλέξτε το μενού Περισσότερα [...]>Λήψη δεδομένων>Τοπικό αρχείο.
Επιλέξτε + Νέος πίνακας και πληκτρολογήστε demo_stocks_change ως όνομα πίνακα.
Στο παράθυρο διαλόγου αποστολή δεδομένων, επιλέξτε Αναζήτηση για αρχεία και αποστείλετε το δείγμα αρχείου δεδομένων που έχει ληφθεί στα Προαπαιτούμενα
Επιλέξτε Επόμενο.
Στην ενότητα Επιθεώρηση δεδομένων, η εναλλαγή Της πρώτης γραμμής είναι η κεφαλίδα στήλης σε Ενεργό.
Επιλέξτε Τέλος.
Όταν ολοκληρωθεί η αποστολή των δεδομένων, επιλέξτε Κλείσιμο.
Μέρος 5- Αντιγραφή διαδρομής OneLake στον πίνακα
Βεβαιωθείτε ότι έχετε επιλέξει τον πίνακα demo_stocks_change . Στο τμήμα παραθύρου λεπτομέρειες πίνακα, επιλέξτε φάκελο OneLake για να αντιγράψετε τη διαδρομή 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
Αντικαταστήστε το OneLakeTableURI σύμβολο κράτησης θέσης με το 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", )
Εκτελέστε το ακόλουθο κελί για να εξαγάγετε την καταχωρημένη διαδρομή μοντέλου που θα χρησιμοποιηθεί για πρόβλεψη χρησιμοποιώντας το περιβάλλον προστατευμένης εκτέλεσης Kusto Python.
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" για να ορίσετε τη
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 με το 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 που δημιουργήθηκε σε αυτή την εκμάθηση.