Rilevare anomalie nei dati


Questo documento descrive come utilizzare Dataplex Esplora per rilevare le anomalie in un set di dati sulle transazioni retail.

Il workbench per l'esplorazione dei dati, o Esplora, consente agli analisti di dati di eseguire query ed esplorare in modo interattivo set di dati di grandi dimensioni in tempo reale. Esplora ti aiuta a ottenere informazioni dai tuoi dati e ti consente di eseguire query sui dati archiviati in Cloud Storage e BigQuery. Esplora gli utilizzi una piattaforma Spark serverless, quindi non devi gestire e scalare l'infrastruttura sottostante.

Obiettivi

Questo tutorial mostra come completare le seguenti attività:

  • Utilizza il workbench Spark SQL di Esplora per scrivere ed eseguire query Spark SQL.
  • Utilizza un blocco note JupyterLab per visualizzare i risultati.
  • Pianifica l'esecuzione ricorrente del tuo blocco note, in modo da poter monitorare i dati per le anomalie.

Costi

In questo documento utilizzi i seguenti componenti fatturabili di Google Cloud:

Per generare una stima dei costi basata sull'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud potrebbero essere idonei per una prova gratuita.

Al termine delle attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la sezione Pulizia.

Prima di iniziare

  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.

Preparare i dati per l'esplorazione

  1. Scarica il file Parquet, retail_offline_sales_march.

    Scarica il file Parquet

  2. Crea un bucket Cloud Storage denominato offlinesales_curated come segue:

    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. Carica il file offlinesales_march_parquet che hai scaricato nel offlinesales_curated bucket Cloud Storage che hai creato, seguendo i passaggi descritti in Caricare oggetto da un file system.

  4. Crea un lake Dataplex e denominalo operations seguendo i passaggi in Creare un lake.

  5. Nel lake operations, aggiungi una zona e assegnale il nome procurement seguendo la procedura descritta in Aggiungere una zona.

  6. Nella zona procurement, aggiungi il bucket Cloud Storage offlinesales_curated che hai creato come asset seguendo i passaggi descritti in Aggiungi un asset.

Seleziona la tabella da esplorare

  1. Nella console Google Cloud, vai a Dataplex Esplora .

  2. Nel campo Lake, seleziona il lake operations.

  3. Fai clic sul lake operations.

  4. Vai alla zona procurement e fai clic sulla tabella per esplorarne metadati.

    Nell'immagine seguente, la zona di approvvigionamento selezionata ha una tabella denominata Offline, che contiene i metadati: orderid, product, quantityordered, unitprice, orderdate e purchaseaddress.

    Seleziona la tabella da esplorare

  5. Nell'editor Spark SQL, fai clic su Aggiungi. Uno script Spark SQL .

  6. (Facoltativo) Apri lo script nella visualizzazione della scheda divisa per visualizzare i metadati e il nuovo script affiancati. Fai clic su Altro nella nuova scheda script e seleziona Dividi scheda a destra o Dividi scheda a sinistra.

esplora i dati

Un ambiente fornisce serverless le risorse di computing per l'esecuzione di query e blocchi note Spark SQL all'interno di un lake. Prima di scrivere query Spark SQL, crea un ambiente in cui eseguire le query.

Esplora i dati utilizzando le seguenti query SparkSQL. Nell'editor SparkSQL, inserisci la query nel riquadro Nuovo script.

Esempio di 10 righe della tabella

  1. Inserisci la seguente query:

    select * from procurement.offlinesales where orderid != 'orderid' limit 10;
    
  2. Fai clic su Esegui.

Ottieni il numero totale di transazioni nel set di dati

  1. Inserisci la seguente query:

    select count(*) from procurement.offlinesales where orderid!='orderid';
    
  2. Fai clic su Esegui.

Trovare il numero di tipi di prodotto diversi nel set di dati

  1. Inserisci la seguente query:

    select count(distinct product) from procurement.offlinesales where orderid!='orderid';
    
  2. Fai clic su Esegui.

Trova i prodotti che hanno un valore elevato di transazione

Fai un'idea di quali prodotti hanno un valore di transazione elevato suddividendo le vendite per tipo di prodotto e prezzo di vendita medio.

  1. Inserisci la seguente query:

    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. Fai clic su Esegui.

L'immagine seguente mostra un riquadro Results che utilizza una colonna denominata product per identificare gli articoli di vendita con valori di transazione elevati, mostrati nella colonna avg_sales_amount.

Guarda i risultati dello script.

Rilevare le anomalie utilizzando il coefficiente di variazione

L'ultima query ha mostrato che i laptop hanno un importo medio delle transazioni elevato. La la seguente query mostra come rilevare le transazioni sui laptop che non sono anomale nel set di dati.

La seguente query usa la metrica "coefficiente di variazione", rsd_value, per trovare transazioni non insolite, in cui la diffusione di è più basso rispetto al valore medio. Un coefficiente di variazione più basso indica meno anomalie.

  1. Inserisci la seguente query:

    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. Fai clic su Esegui.

  3. Visualizza i risultati dello script.

    Nell'immagine seguente, un riquadro dei risultati utilizza una colonna denominata prodotto per identificare gli articoli di vendita con valori di transazione compresi nel coefficiente di variazione di 0,2.

    Guarda i risultati dello script.

Visualizzare le anomalie utilizzando un blocco note JupyterLab

Crea un modello di ML per rilevare e visualizzare le anomalie su larga scala.

  1. Crea un blocco note.

  2. Apri il notebook in una scheda separata e attendi che venga caricato. La sessione in cui hai eseguito le query Spark SQL continua.

  3. Importa i pacchetti necessari e connettiti alla tabella esterna BigQuery contenente i dati sulle transazioni. Esegui questo codice:

    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. Esegui l'algoritmo foresta di isolamento per rilevare le anomalie nel set di dati:

    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. Grafica le anomalie previste utilizzando una visualizzazione Matplotlib:

    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()
    

Questa immagine mostra i dati sulle transazioni con le anomalie evidenziate in rosso.

Dati delle transazioni con le anomalie evidenziate in rosso

Pianifica il blocco note

Esplora ti consente di pianificare l'esecuzione periodica di un notebook. Segui i passaggi per pianificare il Jupyter Notebook che hai creato.

Dataplex crea un'attività di pianificazione per eseguire il blocco note periodicamente. Per monitorare l'avanzamento dell'attività, fai clic su Visualizza pianificazioni.

Condividere o esportare il blocco note

Esplora ti consente di condividere un notebook con altri utenti della tua organizzazione utilizzando le autorizzazioni IAM.

Esamina i ruoli. Concedi o revoca agli utenti i ruoli Dataplex Viewer (roles/dataplex.viewer), Dataplex Editor (roles/dataplex.editor) e Dataplex Administrator (roles/dataplex.admin) per questo notebook. Dopo aver condiviso un blocco note, gli utenti con i ruoli Visualizzatore o Editor a livello di lake possono accedere al lake e lavorare sul blocco note condiviso.

Per condividere o esportare un notebook, consulta Condividere un notebook o Esportare un notebook.

Esegui la pulizia

Per evitare che al tuo account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

Elimina il progetto

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

Elimina singole risorse

  1. Elimina il bucket:
    gcloud storage buckets delete BUCKET_NAME
  2. Elimina l'istanza:
    gcloud compute instances delete INSTANCE_NAME

Passaggi successivi