Mendeteksi anomali data


Dokumen ini menjelaskan cara menggunakan Jelajah Dataplex untuk mendeteksi anomali dalam set data transaksi retail.

Workbench eksplorasi data atau Explore memungkinkan analis data secara interaktif membuat kueri dan menjelajahi set data besar secara real time. Explore membantu Anda mendapatkan insight dari data, dan memungkinkan Anda mengkueri data yang tersimpan di Cloud Storage dan BigQuery. Explore menggunakan platform Spark serverless, sehingga Anda tidak perlu mengelola dan menskalakan infrastruktur dasar.

Tujuan

Tutorial ini menunjukkan kepada Anda cara menyelesaikan tugas-tugas berikut:

  • Gunakan workbench SQL Spark dari Explore untuk menulis dan menjalankan kueri Spark SQL.
  • Gunakan {i>notebook<i} JupyterLab untuk melihat hasilnya.
  • Jadwalkan notebook Anda untuk eksekusi berulang agar Anda dapat memantau data untuk menemukan anomali.

Biaya

Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Setelah menyelesaikan tugas yang dijelaskan dalam dokumen ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui informasi selengkapnya, lihat Pembersihan.

Sebelum memulai

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. Menginstal Google Cloud CLI.
  3. Untuk initialize gcloud CLI, jalankan perintah berikut:

    gcloud init
  4. Buat atau pilih project Google Cloud.

    • Membuat project Google Cloud:

      gcloud projects create PROJECT_ID

      Ganti PROJECT_ID dengan nama untuk project Google Cloud yang Anda buat.

    • Pilih project Google Cloud yang Anda buat:

      gcloud config set project PROJECT_ID

      Ganti PROJECT_ID dengan nama project Google Cloud Anda.

  5. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  6. Menginstal Google Cloud CLI.
  7. Untuk initialize gcloud CLI, jalankan perintah berikut:

    gcloud init
  8. Buat atau pilih project Google Cloud.

    • Membuat project Google Cloud:

      gcloud projects create PROJECT_ID

      Ganti PROJECT_ID dengan nama untuk project Google Cloud yang Anda buat.

    • Pilih project Google Cloud yang Anda buat:

      gcloud config set project PROJECT_ID

      Ganti PROJECT_ID dengan nama project Google Cloud Anda.

  9. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

Menyiapkan data untuk eksplorasi

  1. Download file Parquet, retail_offline_sales_march.

    Download file Parquet

  2. Buat bucket Cloud Storage bernama offlinesales_curated sebagai berikut:

    1. Di Konsol Google Cloud, buka halaman Bucket Cloud Storage.

      Buka halaman Bucket

    2. Klik Buat bucket.
    3. Di halaman Buat bucket, masukkan informasi bucket Anda. Untuk melanjutkan ke langkah berikutnya, klik Lanjutkan.
      • Untuk Beri nama bucket, masukkan nama yang memenuhi persyaratan penamaan bucket.
      • Untuk Pilih tempat untuk menyimpan data, lakukan tindakan berikut:
        • Pilih opsi Jenis lokasi.
        • Pilih opsi Lokasi.
      • Untuk Memilih kelas penyimpanan default untuk data Anda, pilih kelas penyimpanan.
      • Untuk Memilih cara mengontrol akses ke objek, pilih opsi Kontrol akses.
      • Untuk Setelan lanjutan (opsional), tentukan metode enkripsi, kebijakan retensi, atau label bucket.
    4. Klik Buat.

  3. Upload file offlinesales_march_parquet yang telah Anda download ke bucket Cloud Storage offlinesales_curated yang Anda buat, dengan mengikuti langkah-langkah dalam Mengupload objek dari sistem file.

  4. Buat dataplex lake dan beri nama operations, dengan mengikuti langkah-langkah di Membuat lake.

  5. Di lake operations, tambahkan zona dan beri nama procurement, dengan mengikuti langkah-langkah di bagian Menambahkan zona.

  6. Di zona procurement, tambahkan bucket Cloud Storage offlinesales_curated yang Anda buat sebagai aset dengan mengikuti langkah-langkah di bagian Add an asset.

Pilih tabel untuk dijelajahi

  1. Di konsol Google Cloud, buka halaman Explore Dataplex.

    Buka Jelajahi

  2. Di kolom Danau, pilih danau operations.

  3. Klik danau operations.

  4. Buka zona procurement lalu klik tabel untuk mempelajari metadatanya.

    Pada gambar berikut, zona pengadaan yang dipilih memiliki tabel bernama Offline, yang memiliki metadata: orderid, product, quantityordered, unitprice, orderdate, dan purchaseaddress.

    Pilih tabel untuk dijelajahi

  5. Di Spark SQL Editor, klik Add. Skrip SQL Spark akan muncul.

  6. Opsional: Buka skrip dalam tampilan tab terpisah untuk melihat metadata dan skrip baru secara berdampingan. Klik Lainnya di tab skrip baru, lalu pilih Pisahkan tab ke kanan atau Pisahkan tab ke kiri.

Jelajahi data

Lingkungan menyediakan resource komputasi serverless untuk kueri dan notebook Spark SQL Anda yang dapat dijalankan di dalam lake. Sebelum menulis kueri SQL Spark, buat lingkungan untuk menjalankan kueri Anda.

Pelajari data Anda menggunakan kueri SparkSQL berikut. Di SparkSQL Editor, masukkan kueri ke panel New Script.

Contoh 10 baris tabel

  1. Masukkan kueri berikut:

    select * from procurement.offlinesales where orderid != 'orderid' limit 10;
    
  2. Klik Run.

Mendapatkan jumlah total transaksi dalam set data

  1. Masukkan kueri berikut:

    select count(*) from procurement.offlinesales where orderid!='orderid';
    
  2. Klik Run.

Menemukan jumlah tipe produk yang berbeda dalam {i>dataset<i}

  1. Masukkan kueri berikut:

    select count(distinct product) from procurement.offlinesales where orderid!='orderid';
    
  2. Klik Run.

Temukan produk yang memiliki nilai transaksi besar

Dapatkan gambaran tentang produk yang memiliki nilai transaksi besar dengan mengelompokkan penjualan berdasarkan tipe produk dan harga jual rata-rata.

  1. Masukkan kueri berikut:

    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. Klik Run.

Gambar berikut menampilkan panel Results yang menggunakan kolom bernama product untuk mengidentifikasi item penjualan dengan nilai transaksi besar, yang ditampilkan di kolom bernama avg_sales_amount.

Lihat hasil skrip.

Mendeteksi anomali menggunakan koefisien variasi

Kueri terakhir menunjukkan bahwa laptop memiliki jumlah transaksi rata-rata yang tinggi. Kueri berikut menunjukkan cara mendeteksi transaksi laptop yang tidak anomali dalam set data.

Kueri berikut menggunakan metrik "koefisien variasi", rsd_value, untuk menemukan transaksi yang tidak biasa, dengan penyebaran nilai yang rendah dibandingkan dengan nilai rata-rata. Koefisien variasi yang lebih rendah menunjukkan lebih sedikit anomali.

  1. Masukkan kueri berikut:

    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. Klik Run.

  3. Lihat hasil skrip.

    Pada gambar berikut, panel Results menggunakan kolom yang disebut produk untuk mengidentifikasi item penjualan dengan nilai transaksi yang berada dalam koefisien variasi 0,2.

    Lihat hasil skrip.

Memvisualisasikan anomali menggunakan notebook JupyterLab

Bangun model ML untuk mendeteksi dan memvisualisasikan anomali dalam skala besar.

  1. Buat notebook.

  2. Buka notebook di tab terpisah dan tunggu hingga dimuat. Sesi saat Anda menjalankan kueri Spark SQL berlanjut.

  3. Impor paket yang diperlukan dan hubungkan ke tabel eksternal BigQuery yang berisi data transaksi. Jalankan kode berikut:

    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. Jalankan algoritma hutan isolasi untuk menemukan anomali dalam set data:

    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. Tempatkan anomali yang diprediksi menggunakan visualisasi 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()
    

Gambar ini menampilkan data transaksi dengan anomali yang ditandai dengan warna merah.

Data transaksi dengan anomali yang ditandai dengan warna merah

Menjadwalkan notebook

Explore memungkinkan Anda menjadwalkan notebook untuk dijalankan secara berkala. Ikuti langkah-langkah untuk menjadwalkan Jupyter Notebook yang Anda buat.

Dataplex membuat tugas penjadwalan untuk menjalankan notebook Anda secara berkala. Untuk memantau progres tugas, klik View Schedule.

Bagikan atau ekspor notebook ini

Explore memungkinkan Anda berbagi notebook dengan orang lain di organisasi menggunakan izin IAM.

Tinjau peran. Memberikan atau mencabut peran Dataplex Viewer (roles/dataplex.viewer), Dataplex Editor (roles/dataplex.editor), dan Dataplex Administrator (roles/dataplex.admin) kepada pengguna untuk notebook ini. Setelah Anda membagikan notebook, pengguna dengan peran pelihat atau editor di level lake dapat menavigasi ke lake dan bekerja di notebook bersama.

Untuk membagikan atau mengekspor notebook, lihat Membagikan notebook atau Mengekspor notebook.

Pembersihan

Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

Menghapus project

    Menghapus project Google Cloud:

    gcloud projects delete PROJECT_ID

Menghapus resource satu per satu

  1. Hapus bucket:
    gcloud storage buckets delete BUCKET_NAME
  2. Hapus instance:
    gcloud compute instances delete INSTANCE_NAME

Langkah selanjutnya