Datenanomalien erkennen


In diesem Dokument wird beschrieben, wie Sie mit Dataplex Explore Anomalien in einem Datensatz mit Einzelhandelstransaktionen erkennen.

Mit der Workbench für die explorative Datenanalyse (Explore) können Datenanalysten große Datensätze interaktiv in Echtzeit abfragen und untersuchen. Mit Explore können Sie Statistiken zu Ihren Daten erstellen 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:

  • 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.
  • Sie können Ihr Notebook für eine wiederkehrende Ausführung planen, um Ihre Daten auf Anomalien zu prüfen.

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.

Hinweis

  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 explorative Datenanalyse 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 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 geben Sie ihm den Namen operations. Folgen Sie dazu der Anleitung unter Lake erstellen.

  5. Fügen Sie dem See operations eine Zone hinzu und geben Sie ihr den Namen procurement. Folgen Sie dazu der Anleitung unter Zone hinzufügen.

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

Tabelle für die explorative Datenanalyse auswählen

  1. Rufen Sie in der Google Cloud Console die Seite Explore (Expl. Datenanalyse) von Dataplex auf.

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

  3. Klicken Sie auf den See operations.

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

    Auf dem folgenden Bild enthält die ausgewählte Beschaffungszone die Tabelle Offline mit den 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 Script im Splitscreen-Modus, um die Metadaten und das neue Script nebeneinander zu sehen. Klicken Sie auf dem neuen Scripttab auf das Dreipunkt-Menü  Mehr und wählen Sie Tab nach rechts aufteilen oder Tab nach links aufteilen aus.

Öffentliche Daten durchsuchen

Eine Umgebung stellt serverlose Computing-Ressourcen für Ihre Spark SQL-Abfragen und ‑Notebooks bereit, die in einem Lake ausgeführt werden. Bevor Sie Spark SQL-Abfragen schreiben, erstellen Sie eine Umgebung, in der Sie Ihre Abfragen ausführen.

Mit den folgenden SparkSQL-Abfragen können Sie Ihre Daten untersuchen. Geben Sie im SparkSQL-Editor die Abfrage im Bereich Neues Script ein.

Beispiel für 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 Datensatz abrufen

  1. Geben Sie die folgende Abfrage ein:

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

Anzahl der verschiedenen Produkttypen im Datensatz 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 hohem Transaktionswert ermitteln

Sie können sich ein Bild davon machen, 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.

Auf dem folgenden Bild ist ein Results-Bereich zu sehen, in dem die Artikel mit hohen Transaktionswerten in der Spalte avg_sales_amount anhand der Spalte product identifiziert werden.

Ergebnisse des Scripts ansehen

Anomalien mit dem Variationskoeffizienten erkennen

Die letzte Abfrage hat gezeigt, 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“, rsd_value, verwendet, um Transaktionen zu finden, die nicht ungewöhnlich sind und bei denen die Streuung der Werte im Vergleich zum Mittelwert niedrig ist. Ein niedrigerer 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. Ergebnisse des Scripts ansehen

    Im folgenden Bild wird in einem Ergebnisbereich die Spalte „Produkt“ verwendet, um die Verkaufsartikel mit Transaktionswerten zu identifizieren, die innerhalb des Variationskoeffizienten von 0,2 liegen.

    Ergebnisse des Scripts ansehen

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 Notizbuch 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 Isolation Forest-Algorithmus aus, um die Anomalien im Datensatz zu ermitteln:

    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. Zeichnen Sie die vorhergesagten Anomalien mit einer Matplotlib-Visualisierung auf:

    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, wobei die Anomalien rot hervorgehoben sind.

Transaktionsdaten mit Anomalien, rot hervorgehoben

Notebook planen

Im Explore können Sie ein Notebook so planen, dass es regelmäßig ausgeführt wird. Folgen Sie der Anleitung, um das von Ihnen erstellte Jupyter-Notebook zu planen.

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

Notebook freigeben oder exportieren

In Explore können Sie ein Notizbuch mit anderen Nutzern in Ihrer Organisation über IAM-Berechtigungen teilen.

Prüfen Sie die Rollen. Weisen Sie Nutzern für dieses Notebook die Rollen „Dataplex-Betrachter“ (roles/dataplex.viewer), „Dataplex-Bearbeiter“ (roles/dataplex.editor) und „Dataplex-Administrator“ (roles/dataplex.admin) zu oder widerrufen Sie sie. Nachdem Sie ein Notebook freigegeben haben, können Nutzer mit der Rolle „Betrachter“ oder „Bearbeiter“ auf Ebene des Datensees den Datensee aufrufen und am freigegebenen Notebook arbeiten.

Weitere 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