Rileva le anomalie nei dati


Questo documento descrive come utilizzare Dataplex Explore per rilevare anomalie in un set di dati delle transazioni retail.

Il workbench per l'esplorazione dei dati, o Esplorazione, consente ai data analyst di eseguire query ed esplorare in modo interattivo grandi set di dati in tempo reale. Esplora consente di ottenere insight dai dati e di eseguire query sui dati archiviati in Cloud Storage e BigQuery. Esplora utilizza una piattaforma Spark serverless, quindi non è necessario gestire e scalare l'infrastruttura sottostante.

Obiettivi

Questo tutorial ti mostra come completare le attività seguenti:

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

Costi

In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud possono essere idonei a una prova senza costi aggiuntivi.

Una volta completate le attività descritte in questo documento, puoi evitare la fatturazione continua eliminando le risorse che hai creato. Per ulteriori informazioni, consulta la pagina Pulizia.

Prima di iniziare

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Installa Google Cloud CLI.
  3. Per initialize gcloud CLI, esegui questo comando:

    gcloud init
  4. Crea o seleziona un progetto Google Cloud.

    • Crea un progetto Google Cloud:

      gcloud projects create PROJECT_ID

      Sostituisci PROJECT_ID con un nome per il progetto Google Cloud che stai creando.

    • Seleziona il progetto Google Cloud che hai creato:

      gcloud config set project PROJECT_ID

      Sostituisci PROJECT_ID con il nome del tuo progetto Google Cloud.

  5. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  6. Installa Google Cloud CLI.
  7. Per initialize gcloud CLI, esegui questo comando:

    gcloud init
  8. Crea o seleziona un progetto Google Cloud.

    • Crea un progetto Google Cloud:

      gcloud projects create PROJECT_ID

      Sostituisci PROJECT_ID con un nome per il progetto Google Cloud che stai creando.

    • Seleziona il progetto Google Cloud che hai creato:

      gcloud config set project PROJECT_ID

      Sostituisci PROJECT_ID con il nome del tuo progetto Google Cloud.

  9. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

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. Nella console Google Cloud, vai alla pagina Bucket di Cloud Storage.

      Vai alla pagina Bucket

    2. Fai clic su Crea bucket.
    3. Nella pagina Crea un bucket, inserisci le informazioni del bucket. Per andare al passaggio successivo, fai clic su Continua.
    4. Fai clic su Crea.

  3. Carica il file offlinesales_march_parquet che hai scaricato nel bucket Cloud Storage offlinesales_curated che hai creato, seguendo i passaggi descritti in Caricare l'oggetto da un file system.

  4. Crea un lake Dataplex e assegnagli il nome operations, seguendo i passaggi in Creare un lake.

  5. Nel lake operations, aggiungi una zona e assegnale il nome procurement, seguendo i passaggi descritti 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 Aggiungere un asset.

Seleziona la tabella da esplorare

  1. Nella console Google Cloud, vai alla pagina Esplora di Dataplex.

    Vai a Esplora

  2. Nel campo Lago, seleziona il lago operations.

  3. Fai clic sul lake operations.

  4. Vai alla zona procurement e fai clic sulla tabella per esplorarne i 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. In Spark SQL Editor, fai clic su Aggiungi. Viene visualizzato uno script SQL Spark.

  6. (Facoltativo) Apri lo script in visualizzazione a schede divise per visualizzare i metadati e il nuovo script uno accanto all'altro. Fai clic su Altro nella scheda del nuovo script e seleziona Dividi scheda a destra o Dividi scheda a sinistra.

Esplora i dati

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

Esplora i tuoi 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.

Ottenere 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.

Trova il numero di tipi di prodotti 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 con un valore di transazione elevato

Fatti 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 elementi in vendita con valori di transazione di grandi dimensioni, mostrati nella colonna avg_sales_amount.

Visualizza 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 seguente query mostra come rilevare le transazioni dei laptop che non sono anomale nel set di dati.

La seguente query utilizza la metrica "coefficiente di variazione", rsd_value, per trovare transazioni non insolite, in cui lo scarto dei valori è 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 elementi di vendita con valori delle transazioni che rientrano nel coefficiente di variazione 0,2.

    Visualizza i risultati dello script.

Visualizzare le anomalie utilizzando un blocco note JupyterLab

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

  1. Crea un blocco note.

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

  3. Importa i pacchetti necessari e collegati alla tabella esterna BigQuery che contiene i dati delle 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 della foresta di isolamento per scoprire 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. Tracciare 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 delle transazioni con le anomalie evidenziate in rosso.

Dati sulle transazioni con anomalie evidenziate in rosso

Pianifica il blocco note

Esplora consente di pianificare l'esecuzione periodica di un blocco note. Segui i passaggi per pianificare il blocco note Jupyter che hai creato.

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

Condividere o esportare il blocco note

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

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

Per condividere o esportare un blocco note, vedi Condividere un blocco note o Esportare un blocco note.

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

    Elimina un progetto Google Cloud:

    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