Membangun dan menggunakan model klasifikasi pada data sensus


Dalam tutorial ini, Anda menggunakan model regresi logistik biner dalam ML BigQuery untuk memprediksi rentang pendapatan individu berdasarkan data demografis mereka. Model regresi logistik biner memprediksi apakah suatu nilai termasuk dalam salah satu dari dua kategori, dalam hal ini apakah pendapatan tahunan seseorang turun di atas atau di bawah $50.000.

Tutorial ini menggunakan set data bigquery-public-data.ml_datasets.census_adult_income. {i>Dataset<i} ini berisi informasi demografis dan pendapatan penduduk AS dari tahun 2000 dan 2010.

Tujuan

Dalam tutorial ini, Anda akan melakukan tugas-tugas berikut:

  • Membuat model regresi logistik.
  • Mengevaluasi model.
  • Membuat prediksi menggunakan model tersebut.
  • Jelaskan hasil yang dihasilkan oleh model.

Biaya

Tutorial ini menggunakan komponen Google Cloud yang dapat ditagih, termasuk:

  • BigQuery
  • BigQuery ML

Untuk informasi selengkapnya tentang biaya BigQuery, lihat halaman harga BigQuery.

Untuk informasi selengkapnya tentang biaya BigQuery ML, lihat harga BigQuery ML.

Sebelum memulai

  1. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

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

  3. Aktifkan API BigQuery.

    Mengaktifkan API

Izin yang diperlukan

Untuk membuat model menggunakan BigQuery ML, Anda memerlukan izin IAM berikut:

  • bigquery.jobs.create
  • bigquery.models.create
  • bigquery.models.getData
  • bigquery.models.updateData
  • bigquery.models.updateMetadata

Untuk menjalankan inferensi, Anda memerlukan izin berikut:

  • bigquery.models.getData pada model
  • bigquery.jobs.create

Pengantar

Tugas umum dalam machine learning adalah mengklasifikasikan data menjadi salah satu dari dua jenis yang dikenal sebagai label. Misalnya, retailer mungkin ingin memprediksi apakah pelanggan tertentu akan membeli produk baru, berdasarkan informasi lain tentang pelanggan tersebut. Dalam hal ini, kedua label tersebut mungkin adalah will buy dan won't buy. Retailer dapat membuat set data sedemikian rupa sehingga satu kolom mewakili kedua label dan juga berisi informasi pelanggan seperti lokasi pelanggan, pembelian sebelumnya, dan preferensi yang dilaporkan. Retailer kemudian dapat menggunakan model regresi logistik biner yang menggunakan informasi pelanggan ini untuk memprediksi label mana yang paling mewakili setiap pelanggan.

Dalam tutorial ini, Anda akan membuat model regresi logistik biner yang memprediksi apakah pendapatan responden Sensus AS masuk ke dalam salah satu dari dua rentang berdasarkan atribut demografis responden.

Membuat set data

Buat set data BigQuery untuk menyimpan model Anda:

  1. Di konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di panel Explorer, klik nama project Anda.

  3. Klik View actions > Create dataset.

    Buat set data.

  4. Di halaman Create dataset, lakukan hal berikut:

    • Untuk Dataset ID, masukkan census.

    • Untuk Location type, pilih Multi-region, lalu pilih US (multiple regions in United States).

      Set data publik disimpan di US multi-region. Agar mudah, simpanlah set data Anda di lokasi yang sama.

    • Jangan ubah setelan default lainnya, lalu klik Create dataset.

Memeriksa data

Periksa set data dan identifikasi kolom mana yang akan digunakan sebagai data pelatihan untuk model regresi logistik. Jalankan kueri GoogleSQL untuk menampilkan 100 baris dari tabel census_adult_income:

  1. Di konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, jalankan kueri berikut ini:

    SELECT
      age,
      workclass,
      marital_status,
      education_num,
      occupation,
      hours_per_week,
      income_bracket,
      functional_weight
    FROM
      `bigquery-public-data.ml_datasets.census_adult_income`
    LIMIT
      100;
  3. Hasilnya akan terlihat seperti berikut:

    Data Sensus

Hasil kueri menunjukkan bahwa kolom income_bracket dalam tabel census_adult_income hanya memiliki salah satu dari dua nilai: <=50K atau >50K. Kolom functional_weight adalah jumlah individu yang menurut organisasi sensus diwakili oleh baris tertentu. Nilai kolom ini tampak tidak terkait dengan nilai income_bracket untuk baris tertentu.

Menyiapkan data sampel

Dalam tutorial ini, Anda memprediksi pendapatan responden sensus berdasarkan atribut berikut:

  • Usia
  • Jenis pekerjaan yang dilakukan
  • Status pernikahan
  • Tingkat pendidikan
  • Pekerjaan
  • Jam kerja per minggu

Untuk melakukannya, buat tampilan yang berisi data yang akan digunakan untuk melatih dan mengevaluasi model, serta membuat prediksi. Tampilan ini digunakan oleh pernyataan CREATE MODEL nanti dalam tutorial ini.

Kueri yang membuat tampilan mengekstrak data responden sensus, termasuk education_num, yang mewakili tingkat pendidikan responden, dan workclass, yang mewakili jenis pekerjaan yang dilakukan responden. Kueri ini mengecualikan beberapa kolom yang menduplikasi data: misalnya, kolom education dan education_num dalam tabel census_adult_income menyatakan data yang sama dalam format yang berbeda sehingga kueri ini mengecualikan kolom education. Kolom dataframe baru dibuat yang menggunakan kolom functional_weight pada tabel census_adult_income guna memberi label 80% sumber data untuk melatih model, dan mencadangkan data yang tersisa untuk evaluasi dan prediksi.

Jalankan kueri yang menyiapkan data sampel:

  1. Di konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, jalankan kueri berikut ini:

    CREATE OR REPLACE VIEW
      `census.input_data` AS
    SELECT
      age,
      workclass,
      marital_status,
      education_num,
      occupation,
      hours_per_week,
      income_bracket,
      CASE
        WHEN MOD(functional_weight, 10) < 8 THEN 'training'
        WHEN MOD(functional_weight, 10) = 8 THEN 'evaluation'
        WHEN MOD(functional_weight, 10) = 9 THEN 'prediction'
      END AS dataframe
    FROM
      `bigquery-public-data.ml_datasets.census_adult_income`
  3. Di panel Explorer, luaskan set data census dan temukan tampilan input_data.

  4. Klik nama tampilan untuk membuka panel informasi. Skema tampilan akan muncul di tab Skema.

    Hasil kueri

Membuat model regresi logistik

Anda membuat model regresi logistik menggunakan pernyataan CREATE MODEL dan menentukan LOGISTIC_REG untuk jenis model. Bagian dari pembuatan model mencakup melatih model pada data pelatihan yang Anda beri label di bagian sebelumnya.

Berikut adalah hal-hal berguna yang perlu diketahui tentang pernyataan CREATE MODEL:

  • Opsi input_label_cols menentukan kolom mana dalam pernyataan SELECT yang akan digunakan sebagai kolom label. Di sini, kolom label adalah income_bracket, sehingga model akan mempelajari mana dari dua nilai income_bracket yang paling mungkin untuk baris tertentu berdasarkan nilai lain yang ada di baris tersebut.

  • Tidak perlu menentukan apakah model regresi logistik adalah biner atau multiclass. BigQuery dapat menentukan jenis model yang akan dilatih berdasarkan jumlah nilai unik dalam kolom label.

  • Opsi auto_class_weights disetel ke TRUE untuk menyeimbangkan label class dalam data pelatihan. Secara default, data pelatihan tidak diberi bobot. Jika label dalam data pelatihan tidak seimbang, model dapat belajar untuk lebih banyak memprediksi class label yang paling populer. Dalam hal ini, sebagian besar responden dalam set data berada dalam kelompok berpendapatan lebih rendah. Hal ini dapat menyebabkan model yang memprediksi terlalu banyak kelompok pendapatan yang lebih rendah. Bobot class menyeimbangkan label class dengan menghitung bobot untuk setiap class dengan proporsi yang terbalik dengan frekuensi class tersebut.

  • Pernyataan SELECT mengkueri tampilan input_data yang berisi data pelatihan. Klausa WHERE memfilter baris dalam input_data sehingga hanya baris yang diberi label sebagai data pelatihan yang digunakan untuk melatih model.

Jalankan kueri yang membuat model regresi logistik Anda:

  1. Di konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, jalankan kueri berikut ini:

    CREATE OR REPLACE MODEL
      `census.census_model`
    OPTIONS
      ( model_type='LOGISTIC_REG',
        auto_class_weights=TRUE,
        data_split_method='NO_SPLIT',
        input_label_cols=['income_bracket'],
        max_iterations=15) AS
    SELECT * EXCEPT(dataframe)
    FROM
      `census.input_data`
    WHERE
      dataframe = 'training'
  3. Di panel Explorer, luaskan set data census, lalu folder Models.

  4. Klik model census_model untuk membuka panel informasi.

  5. Klik tab Schema. Skema model mencantumkan atribut yang digunakan BigQuery ML untuk melakukan regresi logistik. Skema tersebut akan terlihat seperti berikut:

    Info skema cluster

Menggunakan fungsi ML.EVALUATE untuk mengevaluasi model

Setelah membuat model, evaluasi performa model menggunakan fungsi ML.EVALUATE. Fungsi ML.EVALUATE mengevaluasi nilai prediksi yang dihasilkan oleh model berdasarkan data aktual.

Untuk input, fungsi ML.EVALUATE menggunakan model terlatih dan baris dari tampilan input_data yang memiliki evaluation sebagai nilai kolom dataframe. Fungsi ini menampilkan satu baris statistik tentang model.

Jalankan kueri ML.EVALUATE:

  1. Di konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, jalankan kueri berikut ini:

    SELECT
      *
    FROM
      ML.EVALUATE (MODEL `census.census_model`,
        (
        SELECT
          *
        FROM
          `census.input_data`
        WHERE
          dataframe = 'evaluation'
        )
      )
  3. Hasilnya akan terlihat seperti berikut:

    Output ML.EVALUATE

Anda juga dapat melihat panel informasi model di Konsol Google Cloud untuk melihat metrik evaluasi yang dihitung selama pelatihan:

Output ML.EVALUATE

Gunakan fungsi ML.PREDICT untuk memprediksi kelompok pendapatan

Untuk mengidentifikasi kategori pendapatan tempat responden tertentu berada, gunakan fungsi ML.PREDICT.

Untuk input, fungsi ML.PREDICT menggunakan model terlatih dan baris dari tampilan input_data yang memiliki prediction sebagai nilai kolom dataframe.

Jalankan kueri ML.PREDICT:

  1. Di konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, jalankan kueri berikut ini:

    SELECT
      *
    FROM
      ML.PREDICT (MODEL `census.census_model`,
        (
        SELECT
          *
        FROM
          `census.input_data`
        WHERE
          dataframe = 'prediction'
        )
      )
  3. Hasilnya akan terlihat seperti berikut:

    Hasil ML.PREDICT

    predicted_income_bracket adalah prediksi nilai income_bracket.

Menjelaskan hasil prediksi

Untuk memahami alasan model menghasilkan hasil prediksi ini, Anda dapat menggunakan fungsi ML.EXPLAIN_PREDICT.

ML.EXPLAIN_PREDICT adalah versi yang diperluas dari fungsi ML.PREDICT. ML.EXPLAIN_PREDICT tidak hanya menampilkan hasil prediksi, tetapi juga menghasilkan kolom tambahan untuk menjelaskan hasil prediksi. Dalam praktiknya, Anda dapat menjalankan ML.EXPLAIN_PREDICT, bukan ML.PREDICT. Untuk mengetahui informasi selengkapnya, baca ringkasan BigQuery ML explainable AI.

Jalankan kueri ML.EXPLAIN_PREDICT:

  1. Di konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, jalankan kueri berikut ini:

    SELECT
    *
    FROM
    ML.EXPLAIN_PREDICT(MODEL `census.census_model`,
      (
      SELECT
        *
      FROM
        `census.input_data`
      WHERE
        dataframe = 'evaluation'),
      STRUCT(3 as top_k_features))
  3. Hasilnya akan terlihat seperti berikut:

    Output ML.EXPLAIN_PREDICT

Untuk model regresi logistik, nilai Shapley digunakan untuk menghasilkan nilai atribusi fitur untuk setiap fitur dalam model. ML.EXPLAIN_PREDICT menghasilkan tiga atribusi fitur teratas per baris tampilan input_data karena top_k_features ditetapkan ke 3 dalam kueri. Atribusi ini diurutkan berdasarkan nilai absolut atribusi dalam urutan menurun. Di baris 1 contoh ini, fitur hours_per_week memberikan kontribusi paling besar pada prediksi keseluruhan, tetapi di baris 2, occupation memberikan kontribusi terbesar pada prediksi keseluruhan.

Menjelaskan model secara global

Untuk mengetahui fitur mana yang secara umum paling penting dalam menentukan kelompok pendapatan, Anda dapat menggunakan fungsi ML.GLOBAL_EXPLAIN. Untuk menggunakan ML.GLOBAL_EXPLAIN, Anda harus melatih ulang model dengan opsi ENABLE_GLOBAL_EXPLAIN yang ditetapkan ke TRUE.

Latih ulang dan dapatkan penjelasan global untuk model:

  1. Di konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, jalankan kueri berikut untuk melatih ulang model:

    CREATE OR REPLACE MODEL `census.census_model`
    OPTIONS
      ( model_type='LOGISTIC_REG',
        auto_class_weights=TRUE,
        enable_global_explain=TRUE,
        input_label_cols=['income_bracket']
      ) AS
    SELECT * EXCEPT(dataframe)
    FROM
      `census.input_data`
    WHERE
      dataframe = 'training'
  3. Di editor kueri, jalankan kueri berikut untuk mendapatkan penjelasan global:

    SELECT
      *
    FROM
      ML.GLOBAL_EXPLAIN(MODEL `census.census_model`)
  4. Hasilnya akan terlihat seperti berikut:

    Output ML.GLOBAL_EXPLAIN

Pembersihan

Agar akun Google Cloud Anda tidak dikenai biaya untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus resource satu per satu.

Menghapus set data Anda

Jika project Anda dihapus, semua set data dan semua tabel dalam project akan dihapus. Jika ingin menggunakan kembali project tersebut, Anda dapat menghapus set data yang dibuat dalam tutorial ini:

  1. Jika perlu, buka halaman BigQuery di konsol Google Cloud.

    Buka halaman BigQuery

  2. Di navigasi, klik set data census yang Anda buat.

  3. Klik Delete dataset di sisi kanan jendela. Tindakan ini akan menghapus set data dan model.

  4. Di kotak dialog Delete dataset, konfirmasi perintah hapus dengan mengetikkan nama set data Anda (census), lalu klik Delete.

Menghapus project Anda

Untuk menghapus project:

  1. Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Langkah selanjutnya