Datenanomalien erkennen


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

Mit der Data Exploration Workbench oder Explore können Datenanalysten große Datasets in Echtzeit interaktiv abfragen und untersuchen. Mit Explore können Sie Informationen aus Ihren Daten gewinnen und in Cloud Storage und BigQuery gespeicherte Daten abfragen. Explore verwendet eine serverlose Spark-Plattform, sodass Sie die zugrunde liegende Infrastruktur nicht verwalten und skalieren müssen.

Lernziele

In diesem Anleitung werden die folgenden Aufgaben erläutert:

  • Spark SQL Workbench von Explores zum Schreiben und Ausführen von Spark SQL-Abfragen verwenden.
  • Verwenden Sie ein JupyterLab-Notebook, um die Ergebnisse anzusehen.
  • Planen Sie Ihr Notebook für eine wiederkehrende Ausführung, damit Sie Ihre Daten auf Anomalien überwachen können.

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. Melden Sie sich bei Ihrem Google Cloud-Konto an. Wenn Sie mit Google Cloud noch nicht vertraut sind, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. Installieren Sie die Google Cloud CLI.
  3. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  4. Google Cloud-Projekt erstellen oder auswählen.

    • Erstellen Sie ein Google Cloud-Projekt:

      gcloud projects create PROJECT_ID

      Ersetzen Sie PROJECT_ID durch einen Namen für das Google Cloud-Projekt, das Sie erstellen.

    • Wählen Sie das von Ihnen erstellte Google Cloud-Projekt aus:

      gcloud config set project PROJECT_ID

      Ersetzen Sie PROJECT_ID durch den Namen Ihres Google Cloud-Projekts.

  5. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  6. Installieren Sie die Google Cloud CLI.
  7. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  8. Google Cloud-Projekt erstellen oder auswählen.

    • Erstellen Sie ein Google Cloud-Projekt:

      gcloud projects create PROJECT_ID

      Ersetzen Sie PROJECT_ID durch einen Namen für das Google Cloud-Projekt, das Sie erstellen.

    • Wählen Sie das von Ihnen erstellte Google Cloud-Projekt aus:

      gcloud config set project PROJECT_ID

      Ersetzen Sie PROJECT_ID durch den Namen Ihres Google Cloud-Projekts.

  9. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

Daten für die Erkundung vorbereiten

  1. Laden Sie die Parquet-Datei retail_offline_sales_march herunter.

    Parquet-Datei herunterladen

  2. Erstellen Sie so einen Cloud Storage-Bucket mit dem Namen offlinesales_curated:

    1. Wechseln Sie in der Google Cloud Console zur Cloud Storage-Seite Buckets.

      Zur Seite „Buckets“

    2. Klicken Sie auf Bucket erstellen.
    3. Geben Sie auf der Seite Bucket erstellen die Bucket-Informationen ein. Klicken Sie auf Weiter, um mit dem nächsten Schritt fortzufahren.
      • Geben Sie unter Bucket benennen einen Namen ein, der den Anforderungen für Bucket-Namen entspricht.
      • Gehen Sie unter Speicherort für Daten auswählen folgendermaßen vor:
        • Wählen Sie eine Option für Standorttyp aus.
        • Wählen Sie eine Standort-Option aus.
      • Wählen Sie unter Standardspeicherklasse für Ihre Daten auswählen eine Speicherklasse aus.
      • Wählen Sie unter Zugriffssteuerung für Objekte auswählen eine Option für die Zugriffssteuerung aus.
      • Geben Sie für Erweiterte Einstellungen (optional) eine Verschlüsselungsmethode, eine Aufbewahrungsrichtlinie oder Bucket-Labels an.
    4. Klicken Sie auf Erstellen.

  3. Laden Sie die heruntergeladene Datei offlinesales_march_parquet in den von Ihnen erstellten Cloud Storage-Bucket offlinesales_curated hoch. Folgen Sie dazu der Anleitung unter Objekt aus einem Dateisystem hochladen.

  4. Erstellen Sie einen Dataplex-Lake und nennen Sie ihn operations. Folgen Sie dazu der Anleitung unter Lake erstellen.

  5. Fügen Sie im Lake operations eine Zone hinzu und nennen Sie sie procurement. Folgen Sie dazu den Schritten unter Zone hinzufügen.

  6. Fügen Sie in der Zone procurement den von Ihnen erstellten Cloud Storage-Bucket offlinesales_curated als Asset hinzu. Folgen Sie dazu der Anleitung unter Asset hinzufügen.

Wählen Sie die gewünschte Tabelle aus.

  1. Rufen Sie in der Google Cloud Console die Dataplex-Seite Expl. Datenanalyse auf.

    Zu „Entdecken“

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

  3. Klicken Sie auf den Lake operations.

  4. Rufen Sie die Zone procurement auf und klicken Sie auf die Tabelle, um die zugehörigen Metadaten anzusehen.

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

    Tabelle für die Analyse auswählen

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

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

Öffentliche Daten durchsuchen

Eine Umgebung stellt serverlose Computing-Ressourcen für Ihre Spark SQL-Abfragen und -Notebooks zur Ausführung in einem Lake bereit. Bevor Sie Spark SQL-Abfragen schreiben, erstellen Sie eine Umgebung, in der Sie Ihre Abfragen ausführen können.

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

Beispiel für 10 Tabellenzeilen

  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 herausfinden, welche Produkte einen hohen Transaktionswert haben, indem Sie die Verkäufe nach Produkttyp und durchschnittlichem Verkaufspreis aufschlüsseln.

  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 die Spalte product verwendet wird, um die Verkaufsartikel mit großen Transaktionswerten zu identifizieren. Diese werden in der Spalte avg_sales_amount angezeigt.

Skriptergebnisse ansehen.

Anomalien mithilfe des Variationskoeffizienten erkennen

Die letzte Abfrage ergab, dass Laptops einen hohen durchschnittlichen Transaktionsbetrag haben. Die folgende Abfrage zeigt, wie Laptop-Transaktionen im Dataset erkannt werden, die nicht anomal sind.

Die folgende Abfrage verwendet den Messwert „Variationskoeffizient“ rsd_value, um Transaktionen zu ermitteln, die nicht ungewöhnlich sind, bei denen die Werteverteilung im Vergleich zum Durchschnittswert gering ist. Ein niedrigerer Variationskoeffizient deutet 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. Skriptergebnisse ansehen.

    In der folgenden Abbildung wird in einem Ergebnisbereich eine Spalte namens „product“ verwendet, um Verkaufsartikel mit Transaktionswerten zu identifizieren, die innerhalb des Variantenkoeffizienten 0,2 liegen.

    Skriptergebnisse ansehen.

Anomalien mit einem JupyterLab-Notebook visualisieren

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

  1. Notebook erstellen

  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 zur externen BigQuery-Tabelle her, 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 Isolationsgesamtstruktur 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 mit 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 zu sehen. Die Anomalien sind rot hervorgehoben.

Transaktionsdaten mit rot hervorgehobenen Anomalien

Notebook planen

Mit Explore können Sie die regelmäßige Ausführung eines Notebooks planen. Führen Sie die Schritte zum Planen des von Ihnen erstellten Jupyter-Notebooks aus.

Dataplex erstellt eine Planungsaufgabe, um das Notebook regelmäßig auszuführen. Klicken Sie auf Zeitpläne ansehen, um den Fortschritt der Aufgabe zu beobachten.

Notebook freigeben oder exportieren

Mit Explore können Sie ein Notebook mithilfe von IAM-Berechtigungen für andere in Ihrer Organisation freigeben.

Sehen Sie sich die Rollen an. Nutzern für dieses Notebook die Rollen Dataplex Viewer (roles/dataplex.viewer), Dataplex Editor (roles/dataplex.editor) und Dataplex Administrator (roles/dataplex.admin) zuweisen oder entziehen. Nachdem Sie ein Notebook freigegeben haben, können Nutzer mit der Rolle „Viewer“ oder „Editor“ auf Lake-Ebene zum Lake wechseln und an dem freigegebenen Notebook arbeiten.

Informationen zum Freigeben oder Exportieren eines Notebooks finden Sie unter Notebook freigeben bzw. 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

    Google Cloud-Projekt löschen:

    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