Κοινή χρήση μέσω


Εντοπισμός πολλαπλών ανωμαλιών

Για γενικές πληροφορίες σχετικά με τον εντοπισμό πολλαπλών ανωμαλιών στην Ευφυΐα πραγματικού χρόνου, ανατρέξτε στο θέμα Εντοπισμός πολλαπλών ανωμαλιών στο Microsoft Fabric - επισκόπηση. Σε αυτό το πρόγραμμα εκμάθησης, θα χρησιμοποιήσετε ένα δείγμα δεδομένων για να εκπαιδεύσετε ένα μοντέλο εντοπισμού ανωμαλιών πολλαπλών συναρτημάτων χρησιμοποιώντας τον μηχανισμό Spark σε ένα σημειωματάριο Python. Στη συνέχεια, θα προβλέψετε ανωμαλίες εφαρμόζοντας το εκπαιδευμένο μοντέλο σε νέα δεδομένα χρησιμοποιώντας τον μηχανισμό Eventhouse. Τα πρώτα βήματα ορίζουν τα περιβάλλοντά σας και τα παρακάτω βήματα εκπαιδεύουν το μοντέλο και προβλέπουν ανωμαλίες.

Προαπαιτούμενα στοιχεία

Μέρος 1- Ενεργοποίηση διαθεσιμότητας OneLake

Η διαθεσιμότητα oneLake πρέπει να ενεργοποιηθεί πριν λάβετε δεδομένα στο Eventhouse. Αυτό το βήμα είναι σημαντικό, επειδή επιτρέπει στα δεδομένα πρόσληψης να γίνουν διαθέσιμα στο OneLake. Σε ένα μεταγενέστερο βήμα, αποκτάτε πρόσβαση στα ίδια δεδομένα από το Spark Notebook σας για να εκπαιδεύσετε το μοντέλο.

  1. Μεταβείτε στην αρχική σελίδα του χώρου εργασίας σας στην ευφυΐα σε πραγματικό χρόνο.

  2. Επιλέξτε την Ενότητα συμβάντων που δημιουργήσατε στα προαπαιτούμενα. Επιλέξτε τη βάση δεδομένων στην οποία θέλετε να αποθηκεύσετε τα δεδομένα σας.

  3. Στο πλακίδιο Λεπτομέρειες βάσης δεδομένων, επιλέξτε το εικονίδιο μολυβιού δίπλα στο στοιχείο Διαθεσιμότητα OneLake

  4. Στο δεξιό τμήμα παραθύρου, αλλάξτε το κουμπί σε Ενεργό.

  5. Επιλέξτε Τέλος.

    Στιγμιότυπο οθόνης ενεργοποίησης της διαθεσιμότητας OneLake στο Eventhouse σας.

Μέρος 2- Ενεργοποίηση προσθήκης Python KQL

Σε αυτό το βήμα, ενεργοποιείτε την προσθήκη python στο Eventhouse. Αυτό το βήμα απαιτείται για την εκτέλεση του κώδικα Python πρόβλεψης ανωμαλιών στο σύνολο ερωτημάτων KQL. Είναι σημαντικό να επιλέξετε το σωστό πακέτο που περιέχει το πακέτο εντοπισμού ανωμαλιών χρονικής σειράς.

  1. Στην οθόνη Eventhouse, επιλέξτε τη βάση δεδομένων σας και, στη συνέχεια, επιλέξτε Διαχείριση>προσθηκών από την κορδέλα..

  2. Στο τμήμα παραθύρου Προσθήκες, αλλάξτε την επέκταση γλώσσας Python σε Ενεργοποίηση.

  3. Επιλέξτε Python 3.11.7 DL (προεπισκόπηση).

  4. Επιλέξτε Τέλος.

    Στιγμιότυπο οθόνης για τον τρόπο ενεργοποίησης του πακέτου python 3.11.7 DL στο Eventhouse.

Μέρος 3- Δημιουργία περιβάλλοντος Spark

Σε αυτό το βήμα, δημιουργείτε ένα περιβάλλον Spark για την εκτέλεση του σημειωματάριου Python που εκπαιδεύει το μοντέλο εντοπισμού πολυμεταβλημένων ανωμαλιών χρησιμοποιώντας τον μηχανισμό Spark. Για περισσότερες πληροφορίες σχετικά με τη δημιουργία περιβαλλόντων, ανατρέξτε στο θέμα Δημιουργία και διαχείριση περιβαλλόντων.

  1. Στην εναλλαγή εμπειρίας, επιλέξτε Διαχείριση δεδομένων. Εάν βρίσκεστε ήδη στην εμπειρία Της μηχανικής δεδομένων, μεταβείτε στην Αρχική σελίδα.

  2. Από τα Προτεινόμενα στοιχεία για δημιουργία, επιλέξτε Περιβάλλοντα και πληκτρολογήστε το όνομα MVAD_ENV για το περιβάλλον.

    Στιγμιότυπο οθόνης δημιουργίας περιβάλλοντος στη Διαχείριση δεδομένων.

  3. Στην περιοχή Βιβλιοθήκες, επιλέξτε Δημόσιες βιβλιοθήκες.

  4. Επιλέξτε Προσθήκη από το PyPI.

  5. Στο πλαίσιο αναζήτησης, πληκτρολογήστε πρόγραμμα εντοπισμού ανωμαλιών χρονολογίας-σειράς. Η έκδοση συμπληρώνεται αυτόματα με την πιο πρόσφατη έκδοση. Αυτή η εκμάθηση δημιουργήθηκε με χρήση της έκδοσης 0.2.7, η οποία είναι η έκδοση που περιλαμβάνεται στο Kusto Python 3.11.7 DL.

  6. Επιλέξτε Αποθήκευση.

    Στιγμιότυπο οθόνης προσθήκης του πακέτου PyPI στο περιβάλλον Spark.

  7. Επιλέξτε την Αρχική καρτέλα στο περιβάλλον.

  8. Επιλέξτε το εικονίδιο Δημοσίευση από την κορδέλα.

  9. Επιλέξτε Δημοσίευση όλων. Αυτό το βήμα μπορεί να διαρκέσει αρκετά λεπτά για να ολοκληρωθεί.

    Στιγμιότυπο οθόνης δημοσίευσης του περιβάλλοντος.

Μέρος 4- Λήψη δεδομένων στο Eventhouse

  1. Τοποθετήστε τον δείκτη του ποντικιού πάνω στη βάση δεδομένων KQL όπου θέλετε να αποθηκεύσετε τα δεδομένα σας. Επιλέξτε το μενού Περισσότερα [...]>Λήψη δεδομένων>Τοπικό αρχείο.

    Στιγμιότυπο οθόνης της λήψης δεδομένων από το τοπικό αρχείο.

  2. Επιλέξτε + Νέος πίνακας και πληκτρολογήστε demo_stocks_change ως όνομα πίνακα.

  3. Στο παράθυρο διαλόγου αποστολή δεδομένων, επιλέξτε Αναζήτηση για αρχεία και αποστείλετε το δείγμα αρχείου δεδομένων που έχει ληφθεί στα Προαπαιτούμενα

  4. Επιλέξτε Επόμενο.

  5. Στην ενότητα Επιθεώρηση δεδομένων, η εναλλαγή Της πρώτης γραμμής είναι η κεφαλίδα στήλης σε Ενεργό.

  6. Επιλέξτε Τέλος.

  7. Όταν ολοκληρωθεί η αποστολή των δεδομένων, επιλέξτε Κλείσιμο.

Μέρος 5- Αντιγραφή διαδρομής OneLake στον πίνακα

Βεβαιωθείτε ότι έχετε επιλέξει τον πίνακα demo_stocks_change . Στο πλακίδιο Λεπτομέρειες πίνακα, επιλέξτε Αντιγραφή διαδρομής για να αντιγράψετε τη διαδρομή OneLake στο πρόχειρό σας. Αποθηκεύστε αυτό το αντιγραραμμένα κείμενο σε ένα πρόγραμμα επεξεργασίας κειμένου σε κάποιο σημείο για να χρησιμοποιηθεί σε μεταγενέστερο βήμα.

Στιγμιότυπο οθόνης αντιγραφής της διαδρομής OneLake.

Μέρος 6- Προετοιμασία του σημειωματάριου

  1. Στην εναλλαγή εμπειρίας, επιλέξτε Ανάπτυξη και επιλέξτε τον χώρο εργασίας σας.

  2. Επιλέξτε Εισαγωγή, Σημειωματάριο και, στη συνέχεια, Από αυτόν τον υπολογιστή.

  3. Επιλέξτε Αποστολή και επιλέξτε το σημειωματάριο που κατεβάσατε στα προαπαιτούμενα.

  4. Μετά την αποστολή του σημειωματάριου, μπορείτε να βρείτε και να ανοίξετε το σημειωματάριό σας από τον χώρο εργασίας σας.

  5. Από την επάνω κορδέλα, επιλέξτε το αναπτυσσόμενο μενού Προεπιλεγμένος χώρος εργασίας και επιλέξτε το περιβάλλον που δημιουργήσατε στο προηγούμενο βήμα.

    Στιγμιότυπο οθόνης επιλογής του περιβάλλοντος στο σημειωματάριο.

Μέρος 7- Εκτέλεση του σημειωματάριου

  1. Εισαγωγή τυπικών πακέτων.

    import numpy as np
    import pandas as pd
    
  2. Το 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
    
  3. Εισαγάγετε το 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]
    
  4. Εκτελέστε τα ακόλουθα κελιά για να προετοιμάσετε τα πλαίσια δεδομένων εκπαίδευσης και πρόβλεψης.

    Σημείωμα

    Οι πραγματικές προβλέψεις θα εκτελεστούν σε δεδομένα από την Υπηρεσία συμβάντων στο μέρος 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')
    
  5. Εκτελέστε τα κελιά για να εκπαιδεύσετε το μοντέλο και να το αποθηκεύσετε στο μητρώο μοντέλων 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)
    
  6. Αντιγράψτε το URI μοντέλου από την τελευταία έξοδο κελιού. Θα το χρησιμοποιήσετε σε ένα επόμενο βήμα αργότερα.

Μέρος 8- Ρύθμιση του συνόλου ερωτημάτων KQL

Για γενικές πληροφορίες, ανατρέξτε στο θέμα Δημιουργία συνόλου ερωτημάτων KQL.

  1. Στην εναλλαγή εμπειρίας, επιλέξτε Ευφυΐα σε πραγματικό χρόνο.
  2. Επιλέξτε τον χώρο εργασίας σας.
  3. Επιλέξτε +Νέο στοιχείο>Σύνολο ερωτημάτων KQL. Εισαγάγετε το όνομα MultivariateAnomalyDetectionTutorial.
  4. Επιλέξτε Δημιουργία.
  5. Στο παράθυρο κέντρου δεδομένων OneLake, επιλέξτε τη βάση δεδομένων KQL στην οποία αποθηκεύσατε τα δεδομένα.
  6. Επιλέξτε Σύνδεση.

Μέρος 9- Πρόβλεψη ανωμαλιών στο σύνολο ερωτημάτων KQL

  1. Αντιγράψτε/επικολλήστε και εκτελέστε το ακόλουθο ερώτημα ".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)
    }
    
  2. Αντιγράψτε/επικολλήστε το παρακάτω ερώτημα πρόβλεψης.

    1. Αντικαταστήστε το μοντέλο εξόδου URI που αντιγράφεται στο τέλος του βήματος 7.
    2. Εκτέλεση του ερωτήματος. Εντοπίζει πολυμεταβλημένες ανωμαλίες στα πέντε αποθέματα, με βάση το εκπαιδευμένο μοντέλο, και αποδίδει τα αποτελέσματα ως 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')
    

Το γράφημα ανωμαλιών που προκύπτει θα πρέπει να μοιάζει με την παρακάτω εικόνα:

Στιγμιότυπο οθόνης εξόδου πολυμεταβλημένων ανωμαλιών.

Εκκαθάριση των πόρων

Όταν ολοκληρώσετε την εκμάθηση, μπορείτε να διαγράψετε τους πόρους που δημιουργήσατε για να αποφύγετε την επιβολή άλλων δαπανών. Για να διαγράψετε τους πόρους, ακολουθήστε τα εξής βήματα:

  1. Μεταβείτε στην αρχική σελίδα του χώρου εργασίας σας.
  2. Διαγράψτε το περιβάλλον που δημιουργήθηκε σε αυτή την εκμάθηση.
  3. Διαγράψτε το σημειωματάριο που δημιουργήθηκε σε αυτή την εκμάθηση.
  4. Διαγράψτε την Eventhouse ή τη βάση δεδομένων που χρησιμοποιούνται σε αυτή την εκμάθηση.
  5. Διαγράψτε το σύνολο ερωτημάτων KQL που δημιουργήθηκε σε αυτή την εκμάθηση.