Datenanomalien erkennen


In diesem Dokument wird beschrieben, wie Sie mit Dataplex-Explores erkennen, Anomalien in einem Einzelhandelstransaktions-Dataset.

Die Workbench für die Datenerkundung (Explore) ermöglicht es Fachkräften für Datenanalyse, große Datasets in Echtzeit. Mit dem explorativen Analysetool gewinnen Sie Erkenntnisse aus Ihren Daten und können Daten, die in Cloud Storage und BigQuery gespeichert sind. Anwendungsbereiche eine serverlose Spark-Plattform, sodass Sie die zugrunde liegende Infrastruktur.

Lernziele

In diesem Anleitung werden die folgenden Aufgaben erläutert:

  • Verwenden Sie die Spark SQL-Workbench von Explore, um Spark SQL-Abfragen zu schreiben und auszuführen.
  • Verwenden Sie ein JupyterLab-Notebook, um die Ergebnisse aufzurufen.
  • Planen Sie Ihr Notebook für eine wiederkehrende Ausführung, Daten auf Anomalien.

Kosten

In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Nach Abschluss der in diesem Dokument beschriebenen Aufgaben können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.

Hinweise

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.
  3. To initialize the gcloud CLI, run the following command:

    gcloud init
  4. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Install the Google Cloud CLI.
  7. To initialize the gcloud CLI, run the following command:

    gcloud init
  8. Create or select a Google Cloud project.

    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  9. Make sure that billing is enabled for your Google Cloud project.

Daten für die Erkundung vorbereiten

  1. Laden Sie die Parquet-Datei retail_offline_sales_march herunter.

    Parquet-Datei herunterladen

  2. So erstellen Sie einen Cloud Storage-Bucket mit dem Namen offlinesales_curated:

    1. In the Google Cloud console, go to the Cloud Storage Buckets page.

      Go to Buckets page

    2. Click Create bucket.
    3. On the Create a bucket page, enter your bucket information. To go to the next step, click Continue.
      • For Name your bucket, enter a name that meets the bucket naming requirements.
      • For Choose where to store your data, do the following:
        • Select a Location type option.
        • Select a Location option.
      • For Choose a default storage class for your data, select a storage class.
      • For Choose how to control access to objects, select an Access control option.
      • For Advanced settings (optional), specify an encryption method, a retention policy, or bucket labels.
    4. Click Create.

  3. Laden Sie die heruntergeladene Datei offlinesales_march_parquet in den offlinesales_curated von Ihnen erstellter Cloud Storage-Bucket, durch folgen Sie den Schritten unter Objekt aus einem Dateisystem hochladen.

  4. Erstellen Sie einen Dataplex-Lake und nennen Sie ihn operations. Gehen Sie dazu so vor: die Schritte unter Lake erstellen.

  5. Fügen Sie im operations-Lake eine Zone hinzu und nennen Sie sie procurement, indem Sie die Schritte unter Zone hinzufügen aus.

  6. Fügen Sie in der Zone procurement den Parameter offlinesales_curated hinzu. Cloud Storage-Bucket, den Sie als Asset erstellt haben, indem Sie Informationen zum Hinzufügen von Assets

Wählen Sie die Tabelle aus, die Sie sich ansehen möchten

  1. Rufen Sie in der Google Cloud Console die Dataplex-Funktion Explore auf. Seite.

  2. Wählen Sie im Feld See den See operations aus.

  3. Klicken Sie auf den See operations.

  4. Gehen Sie zur Zone procurement und klicken Sie auf die Tabelle, um deren Metadaten.

    In der folgenden Abbildung hat die ausgewählte Beschaffungszone eine Tabelle namens Offline mit den folgenden Metadaten: orderid, product, quantityordered, unitprice, orderdate und purchaseaddress.

    Tabelle zum Untersuchen auswählen

  5. Klicken Sie im Spark SQL Editor auf Hinzufügen. Ein Spark SQL-Script wird angezeigt.

  6. Optional: Öffnen Sie das Skript in der geteilten Tabansicht, um die Metadaten und das neue Skript nebeneinander. Klicken Sie auf Mehr im neuen Skript Tab und wählen Sie Tab rechts teilen oder Tab links teilen aus.

Öffentliche Daten durchsuchen

Eine Umgebung bietet Rechenressourcen für Ihre Spark SQL-Abfragen und Notebooks zur Ausführung in einem Lake. Bevor Sie Spark SQL-Abfragen schreiben, erstellen Sie eine Umgebung. in dem Ihre Abfragen ausgeführt werden sollen.

Untersuchen Sie Ihre Daten mit den folgenden SparkSQL-Abfragen. Im SparkSQL Editor: Geben Sie die Abfrage im Bereich Neues Skript ein.

Beispiel 10 Zeilen der Tabelle

  1. Geben Sie die folgende Abfrage ein:

    select * from procurement.offlinesales where orderid != 'orderid' limit 10;
    
  2. Klicken Sie auf Ausführen.

Gesamtzahl der Transaktionen im Dataset abrufen

  1. Geben Sie die folgende Abfrage ein:

    select count(*) from procurement.offlinesales where orderid!='orderid';
    
  2. Klicken Sie auf Ausführen.

Die Anzahl der verschiedenen Produkttypen im Dataset ermitteln

  1. Geben Sie die folgende Abfrage ein:

    select count(distinct product) from procurement.offlinesales where orderid!='orderid';
    
  2. Klicken Sie auf Ausführen.

Produkte mit einem hohen Transaktionswert finden

Sie können sich ein Bild davon machen, welche Produkte einen hohen Transaktionswert haben, indem Sie die Verkäufe nach Produkttyp und durchschnittlichen Verkaufspreis.

  1. Geben Sie die folgende Abfrage ein:

    select product,avg(quantityordered * unitprice) as avg_sales_amount from procurement.offlinesales where orderid!='orderid' group by product order by avg_sales_amount desc;
    
  2. Klicken Sie auf Ausführen.

In der folgenden Abbildung sehen Sie einen Results-Bereich, in dem eine Spalte namens product, um Verkaufsartikel mit hohen Transaktionswerten zu identifizieren, wie in die Spalte avg_sales_amount.

Sehen Sie sich die Skriptergebnisse an.

Anomalien mithilfe des Variationskoeffizienten erkennen

Die letzte Abfrage ergab, dass Laptops einen hohen durchschnittlichen Transaktionsbetrag haben. In der folgenden Abfrage wird veranschaulicht, wie Laptoptransaktionen erkannt werden, die im Datensatz nicht anormal sind.

In der folgenden Abfrage wird der Messwert „Variationskoeffizient“ verwendet. rsd_value, um ungewöhnliche Transaktionen zu ermitteln, bei denen die Werte im Vergleich zum Durchschnittswert niedrig sind. Einen niedrigeren Variationskoeffizient weist auf weniger Anomalien hin.

  1. Geben Sie die folgende Abfrage ein:

    WITH stats AS (
    SELECT product,
          AVG(quantityordered * unitprice)  AS avg_value,
          STDDEV(quantityordered * unitprice) / AVG(quantityordered * unitprice) AS rsd_value
    FROM procurement.offlinesales
    GROUP BY product)
    SELECT orderid, orderdate, product, (quantityordered * unitprice) as sales_amount,
        ABS(1 - (quantityordered * unitprice)/ avg_value) AS distance_from_avg
    FROM procurement.offlinesales INNER JOIN stats USING (product)
    WHERE rsd_value <= 0.2
    ORDER BY distance_from_avg DESC
    LIMIT 10
    
  2. Klicken Sie auf Ausführen.

  3. Sehen Sie sich die Skriptergebnisse an.

    In der folgenden Abbildung wird in einem Ergebnisbereich eine Spalte namens „product“ verwendet, die Verkaufsartikel mit Transaktionswerten identifizieren, die in der Variante enthalten sind einen Koeffizienten von 0,2.

    Sehen Sie sich die Skriptergebnisse an.

Anomalien mit einem JupyterLab-Notebook visualisieren

Erstellen Sie ein ML-Modell, um Anomalien im großen Maßstab zu erkennen und zu visualisieren.

  1. Erstellen Sie ein Notebook.

  2. Öffnen Sie das Notebook in einem separaten Tab und warten Sie, bis es geladen ist. Die Sitzung, in der Sie die Spark SQL-Abfragen ausgeführt haben, wird fortgesetzt.

  3. Importieren Sie die erforderlichen Pakete und stellen Sie eine Verbindung zu BigQuery her. externe Tabelle, die die Transaktionsdaten enthält. Führen Sie den folgenden Code aus:

    from google.cloud import bigquery
    from google.api_core.client_options import ClientOptions
    import os
    import warnings
    warnings.filterwarnings('ignore')
    import pandas as pd
    
    project = os.environ['GOOGLE_CLOUD_PROJECT']
    options = ClientOptions(quota_project_id=project)
    client = bigquery.Client(client_options=options)
    client = bigquery.Client()
    
    #Load data into DataFrame
    
    sql = '''select * from procurement.offlinesales limit 100;'''
    df = client.query(sql).to_dataframe()
    
  4. Führen Sie den Algorithmus der Isolations-Gesamtstruktur aus, um die Anomalien im Dataset zu erkennen:

    to_model_columns = df.columns[2:4]
    from sklearn.ensemble import IsolationForest
    clf=IsolationForest(n_estimators=100, max_samples='auto', contamination=float(.12), \
                            max_features=1.0, bootstrap=False, n_jobs=-1, random_state=42, verbose=0)
    clf.fit(df[to_model_columns])
    pred = clf.predict(df[to_model_columns])
    df['anomaly']=pred
    outliers=df.loc[df['anomaly']==-1]
    outlier_index=list(outliers.index)
    #print(outlier_index)
    #Find the number of anomalies and normal points here points classified -1 are anomalous
    print(df['anomaly'].value_counts())
    
  5. Stellen Sie die vorhergesagten Anomalien mithilfe einer Matplotlib-Visualisierung dar:

    import numpy as np
    from sklearn.decomposition import PCA
    pca = PCA(2)
    pca.fit(df[to_model_columns])
    res=pd.DataFrame(pca.transform(df[to_model_columns]))
    Z = np.array(res)
    plt.title("IsolationForest")
    plt.contourf( Z, cmap=plt.cm.Blues_r)
    b1 = plt.scatter(res[0], res[1], c='green',
                    s=20,label="normal points")
    b1 =plt.scatter(res.iloc[outlier_index,0],res.iloc[outlier_index,1], c='green',s=20,  edgecolor="red",label="predicted outliers")
    plt.legend(loc="upper right")
    plt.show()
    

Auf diesem Bild sind die Transaktionsdaten mit rot hervorgehobenen Anomalien zu sehen.

Transaktionsdaten mit rot hervorgehobenen Anomalien

Notebook planen

Mit dem explorativen Analysetool können Sie die regelmäßige Ausführung eines Notebooks planen. Folgen die Schritte zum Planen des von Ihnen erstellten Jupyter-Notebooks

Dataplex erstellt eine geplante Aufgabe, um Ihr Notebook regelmäßig auszuführen. Klicken Sie zum Überwachen des Aufgabenfortschritts auf Zeitpläne ansehen

Notebook freigeben oder exportieren

Mit „Erkunden“ können Sie ein Notebook über IAM-Berechtigungen:

Prüfen Sie die Rollen. Dataplex-Betrachter gewähren oder widerrufen (roles/dataplex.viewer), Dataplex-Bearbeiter (roles/dataplex.editor) und Dataplex-Administrator (roles/dataplex.admin) Rollen für Nutzer dieses Notebooks. Nachdem Sie eine können Nutzer mit den Rollen „Viewer“ oder „Editor“ auf Lake-Ebene auf den Lake und arbeiten am freigegebenen Notebook.

Informationen zum Freigeben oder Exportieren eines Notebooks finden Sie unter Notebook freigeben oder Notebook exportieren.

Bereinigen

Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.

Projekt löschen

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

Einzelne Ressourcen löschen

  1. Löschen Sie den Bucket:
    gcloud storage buckets delete BUCKET_NAME
  2. Löschen Sie die Instanz:
    gcloud compute instances delete INSTANCE_NAME

Nächste Schritte