Rileva le anomalie nei dati


Questo documento descrive come utilizzare Dataplex Explore per rilevare le anomalie in un set di dati sulle transazioni di vendita al dettaglio.

Il workbench di esplorazione dei dati, o Esplora, consente ai data analyst 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 utilizza una piattaforma Spark serverless, quindi non devi gestire e scalare l'infrastruttura di base.

Obiettivi

Questo tutorial mostra come completare le seguenti attività:

  • Utilizza il workbench Spark SQL di Explore per scrivere ed eseguire query Spark SQL.
  • Utilizza un notebook JupyterLab per visualizzare i risultati.
  • Pianifica l'esecuzione ricorrente del notebook per monitorare i dati alla ricerca di anomalie.

Costi

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

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi Google Cloud utenti potrebbero avere diritto a 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.

Prepara 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 un oggetto da un file system.

  4. Crea un lake Dataplex e chiamalo operations seguendo i passaggi descritti 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 alla pagina Esplora di Dataplex.

  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. Nell'editor Spark SQL, fai clic su Aggiungi. Viene visualizzato 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 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 notebook 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.

Trova il numero di diversi tipi di prodotti nel set di dati

  1. Inserisci la seguente query:

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

Trovare i prodotti con un valore di transazione elevato

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.

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 di transazione elevato. La seguente query mostra come rilevare le transazioni relative ai 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 la dispersione dei valori è bassa 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.

    Visualizza 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 notebook.

  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 sulle transazioni con 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 periodicamente il tuo notebook. 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 notebook, gli utenti con i ruoli di visualizzatore o editor a livello di lake possono accedere al lake e lavorare sul notebook condiviso.

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

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