Detectar anomalias de dados


Neste documento, descrevemos como usar o Dataplex Explore para detectar anomalias em um conjunto de dados de transação de varejo.

Com o workbench de exploração de dados, ou Explorar (em inglês), os analistas de dados podem consultar e explorar interativamente grandes conjuntos de dados em tempo real. O Explorar ajuda você a receber insights dos seus dados e permite consultar dados armazenados no Cloud Storage e no BigQuery. O Explore usa uma plataforma Spark sem servidor para que você não precise gerenciar e escalonar a infraestrutura subjacente.

Objetivos

Nesta seção, mostramos como concluir as seguintes tarefas:

  • Use o workbench do Spark SQL do Explore para criar e executar consultas do Spark SQL.
  • Use um notebook do JupyterLab para ver os resultados.
  • Programe seu notebook para execução recorrente, permitindo monitorar os dados em busca de anomalias.

Custos

Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:

Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços. Novos usuários do Google Cloud podem estar qualificados para uma avaliação gratuita.

Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Saiba mais em Limpeza.

Antes de começar

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. Instale a CLI do Google Cloud.
  3. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  4. Criar ou selecionar um projeto do Google Cloud.

    • Crie um projeto do Google Cloud:

      gcloud projects create PROJECT_ID
    • Selecione o projeto do Google Cloud que você criou:

      gcloud config set project PROJECT_ID
  5. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  6. Instale a CLI do Google Cloud.
  7. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  8. Criar ou selecionar um projeto do Google Cloud.

    • Crie um projeto do Google Cloud:

      gcloud projects create PROJECT_ID
    • Selecione o projeto do Google Cloud que você criou:

      gcloud config set project PROJECT_ID
  9. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

Preparar os dados para exploração

  1. Faça o download do arquivo Parquet, retail_offline_sales_march.

    Faça o download do arquivo Parquet

  2. Crie um bucket do Cloud Storage chamado offlinesales_curated da seguinte maneira:

    1. No console do Cloud, acesse a página Buckets do Cloud Storage.

      Acessar a página "Buckets"

    2. Clique em Criar bucket.
    3. Na página Criar um bucket, insira as informações do seu bucket. Para ir à próxima etapa, clique em Continuar.
    4. Clique em Criar.

  3. Faça upload do arquivo offlinesales_march_parquet transferido por download para o bucket offlinesales_curated do Cloud Storage que você criou, seguindo as etapas em Fazer upload do objeto de um sistema de arquivos.

  4. Crie um lake do Dataplex e o nomeie como operations seguindo as etapas em Criar um lake.

  5. No lago operations, adicione uma zona e nomeie-a como procurement seguindo as etapas em Adicionar uma zona.

  6. Na zona procurement, adicione o bucket offlinesales_curated do Cloud Storage criado como um recurso, seguindo as etapas em Adicionar um recurso.

Selecione a tabela a ser explorada

  1. No Console do Google Cloud, acesse a página Explorar do Dataplex.

    Acessar "Explorar"

  2. No campo Lago, selecione o lago operations.

  3. Clique no lago operations.

  4. Navegue até a zona procurement e clique na tabela para explorar os metadados.

    Na imagem a seguir, a zona de compras selecionada tem uma tabela chamada Offline, que tem os metadados: orderid, product, quantityordered, unitprice, orderdate e purchaseaddress.

    Selecionar tabela para explorar

  5. No Editor SQL do Spark, clique em Adicionar. Um script do Spark SQL é exibido.

  6. Opcional: abra o script na visualização da guia dividida para ver os metadados e o novo script lado a lado. Clique em Mais na nova guia do script e selecione Dividir guia à direita ou Dividir guia à esquerda.

Explorar os dados

Um ambiente fornece recursos de computação sem servidor para que suas consultas e notebooks do Spark SQL sejam executados em um lake. Antes de escrever consultas do Spark SQL, crie um ambiente em que as consultas serão executadas.

Explore seus dados usando as seguintes consultas do SparkSQL. No SparkSQL Editor, insira a consulta no painel Novo script.

Amostra de 10 linhas da tabela

  1. Digite a seguinte consulta:

    select * from procurement.offlinesales where orderid != 'orderid' limit 10;
    
  2. Clique em Executar.

Encontrar o número total de transações no conjunto de dados

  1. Digite a seguinte consulta:

    select count(*) from procurement.offlinesales where orderid!='orderid';
    
  2. Clique em Executar.

Encontrar o número de tipos de produtos diferentes no conjunto de dados

  1. Digite a seguinte consulta:

    select count(distinct product) from procurement.offlinesales where orderid!='orderid';
    
  2. Clique em Executar.

Encontre os produtos que têm um grande valor de transação

Veja quais produtos têm um grande valor de transação detalhando as vendas por tipo de produto e preço médio de venda.

  1. Digite a seguinte consulta:

    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. Clique em Executar.

A imagem a seguir exibe um painel Results que usa uma coluna chamada product para identificar os itens de vendas com grandes valores de transação, mostrados na coluna avg_sales_amount.

Veja os resultados do script.

Detectar anomalias usando o coeficiente de variação

A última consulta mostrou que os laptops têm um alto valor médio de transações. A consulta a seguir mostra como detectar transações de laptops que não são anômalas no conjunto de dados.

A consulta a seguir usa a métrica "coeficiente de variação" rsd_value para encontrar transações incomuns, em que a propagação de valores é baixa em comparação com o valor médio. Um coeficiente menor de variação indica menos anomalias.

  1. Digite a seguinte consulta:

    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. Clique em Executar.

  3. Veja os resultados do script.

    Na imagem a seguir, um painel "Resultados" usa uma coluna chamada "product" para identificar os itens de vendas com valores de transação que estão dentro do coeficiente de variação de 0,2.

    Veja os resultados do script.

Visualizar anomalias usando um notebook JupyterLab

Crie um modelo de ML para detectar e visualizar anomalias em escala.

  1. Crie um notebook.

  2. Abra o notebook em uma guia separada e aguarde o carregamento. A sessão em que você executou as consultas do Spark SQL continua.

  3. Importe os pacotes necessários e conecte-se à tabela externa do BigQuery que contém os dados de transações. Execute o seguinte código:

    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. Execute o algoritmo da floresta de isolamento para descobrir as anomalias no conjunto de dados:

    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. Crie uma representação das anomalias previstas usando uma visualização de 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()
    

Esta imagem mostra os dados da transação com as anomalias destacadas em vermelho.

Dados de transações com anomalias destacadas em vermelho

Programar o notebook

Com o recurso Explorar, é possível programar a execução periódica de um notebook. Siga as etapas para programar o Jupyter Notebook que você criou.

O Dataplex cria uma tarefa de programação para executar o notebook periodicamente. Para monitorar o progresso da tarefa, clique em Ver programações.

Compartilhar ou exportar o notebook

O recurso Explorar permite compartilhar um notebook com outras pessoas da organização usando permissões do IAM.

Revise as funções. Conceda ou revogue os papéis Leitor do Dataplex (roles/dataplex.viewer), Editor do Dataplex (roles/dataplex.editor) e Administrador do Dataplex (roles/dataplex.admin) aos usuários para este notebook. Depois de compartilhar um notebook, os usuários com os papéis de leitor ou editor no nível do lake podem navegar até ele e trabalhar no notebook compartilhado.

Para compartilhar ou exportar um notebook, consulte Compartilhar um notebook ou Exportar um notebook.

Limpeza

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.

Excluir o projeto

    Exclua um projeto do Google Cloud:

    gcloud projects delete PROJECT_ID

Excluir recursos individuais

  1. Excluir o bucket:
    gsutil rb BUCKET_NAME
  2. Exclua a instância:
    gcloud compute instances delete INSTANCE_NAME

A seguir