Mendapatkan prediksi online untuk model perkiraan

Vertex AI menyediakan dua opsi untuk memproyeksikan nilai mendatang menggunakan model perkiraan yang telah dilatih: prediksi online, dan prediksi batch.

Prediksi online adalah permintaan sinkron. Gunakan prediksi online saat Anda membuat permintaan sebagai respons terhadap input aplikasi, atau dalam situasi lain ketika Anda memerlukan inferensi yang tepat waktu.

Permintaan prediksi batch adalah permintaan asinkron. Gunakan prediksi batch jika Anda tidak memerlukan respons langsung, dan ingin memproses data yang terakumulasi dengan menggunakan satu permintaan.

Halaman ini menunjukkan Anda cara untuk memproyeksikan nilai mendatang menggunakan prediksi online. Untuk mempelajari cara memproyeksikan nilai menggunakan prediksi batch, lihat Mendapatkan prediksi batch untuk model perkiraan.

Anda harus men-deploy model ke endpoint sebelum Anda dapat menggunakannya untuk prediksi. Endpoint adalah sekumpulan resource fisik.

Anda dapat meminta penjelasan, alih-alih meminta prediksi. Nilai kepentingan fitur lokal penjelasan memberi tahu Anda seberapa besar setiap fitur berkontribusi terhadap hasil prediksi tersebut. Untuk ringkasan konseptual, lihat Atribusi fitur untuk perkiraan.

Untuk mempelajari harga prediksi online, lihat Harga untuk Tabular Workflows.

Sebelum memulai

Agar dapat membuat permintaan prediksi online, Anda harus melatih model terlebih dahulu.

Membuat atau memilih endpoint

Gunakan fungsi aiplatform.Endpoint.create() untuk membuat endpoint. Jika Anda sudah memiliki endpoint, gunakan fungsi aiplatform.Endpoint() untuk memilihnya.

Kode berikut ini memberikan contoh:

# Import required modules
from google.cloud import aiplatform
from google.cloud.aiplatform import models

PROJECT_ID = "PROJECT_ID"
REGION = "REGION"

# Initialize the Vertex SDK for Python for your project.
aiplatform.init(project=PROJECT_ID, location=REGION)
endpoint = aiplatform.Endpoint.create(display_name='ENDPOINT_NAME')

Ganti kode berikut ini:

  • PROJECT_ID: Project ID Anda.
  • REGION: Region tempat Anda menggunakan Vertex AI.
  • ENDPOINT_NAME: Nama tampilan endpoint tersebut.

Memilih model yang telah dilatih

Gunakan fungsi aiplatform.Model() untuk memilih model yang telah dilatih:

# Create reference to the model trained ahead of time.
model_obj = models.Model("TRAINED_MODEL_PATH")

Ganti kode berikut ini:

  • TRAINED_MODEL_PATH: Contohnya, projects/PROJECT_ID/locations/REGION/models/[TRAINED_MODEL_ID]

Men-deploy model ke endpoint

Gunakan fungsi deploy() untuk men-deploy model yang telah dilatih. Kode berikut ini memberikan contoh:

deployed_model = endpoint.deploy(
    model_obj,
    machine_type='MACHINE_TYPE',
    traffic_percentage=100,
    min_replica_count='MIN_REPLICA_COUNT',
    max_replica_count='MAX_REPLICA_COUNT',
    sync=True,
    deployed_model_display_name='DEPLOYED_MODEL_NAME',
)

Ganti kode berikut ini:

  • MACHINE_TYPE: Contohnya, n1-standard-8. Mempelajari jenis-jenis mesin lebih lanjut.
  • MIN_REPLICA_COUNT: Jumlah minimum node untuk deployment ini. Jumlah node dapat ditingkatkan atau diturunkan sesuai kebutuhan oleh beban prediksi, hingga jumlah maksimum node, dan tidak pernah kurang dari jumlah node ini. Nilai ini harus lebih besar dari, atau sama dengan 1. Jika variabel min_replica_count tidak ditetapkan, nilainya akan ditetapkan secara default ke 1.
  • MAX_REPLICA_COUNT: Jumlah node maksimum untuk deployment ini. Jumlah node dapat ditingkatkan atau diturunkan sesuai kebutuhan oleh beban prediksi, hingga jumlah node ini, dan tidak pernah kurang dari jumlah minimum node. Jika Anda tidak menetapkan variabel max_replica_count, jumlah maksimum node akan ditetapkan ke nilai min_replica_count.
  • DEPLOYED_MODEL_NAME: Nama untuk DeployedModel. Anda juga dapat menggunakan nama tampilan Model untuk DeployedModel.

Deployment model mungkin memerlukan waktu sekitar sepuluh menit.

Mendapatkan prediksi online

Untuk mendapatkan prediksi, gunakan fungsi predict(), dan berikan satu atau beberapa instance input. Kode berikut ini menampilkan contoh:

predictions = endpoint.predict(instances=[{...}, {...}])

Setiap instance input adalah kamus Python dengan skema yang sama dengan model yang dilatih. Pasangan nilai kunci tersedia pada perkiraan yang sesuai dengan kolom waktu, dan pasangan nilai kunci tidak tersedia pada perkiraan yang berisi nilai kolom prediksi yang ditargetkan. Vertex AI memperkirakan setiap instance input menjadi milik satu deret waktu. Urutan pasangan nilai kunci dalam instance tidaklah penting.

Instance input tunduk pada batasan berikut ini:

  • Semua pasangan nilai kunci yang tersedia pada perkiraan harus memiliki jumlah titik data yang sama.
  • Semua pasangan nilai kunci yang tidak tersedia pada perkiraan harus memiliki jumlah titik data yang sama.
  • Pasangan nilai kunci yang tersedia pada perkiraan harus memiliki titik data setidaknya sebanyak pasangan nilai kunci yang tidak tersedia pada perkiraan.

Untuk mempelajari lebih lanjut tentang jenis kolom yang digunakan dalam perkiraan, lihat Jenis dan ketersediaan fitur pada perkiraan.

Kode berikut ini menunjukkan kumpulan dari dua instance input. Kolom Category berisi data atribut. Kolom Timestamp berisi data yang tersedia pada perkiraan. Tiga poin adalah data context dan dua poin adalah data horizon. Kolom Sales berisi data yang tidak tersedia pada perkiraan. Ketiga poin tersebut adalah data context. Untuk mempelajari cara konteks dan horizon digunakan dalam perkiraan, lihat Horizon perkiraan, jendela konteks, dan jendela perkiraan.

instances=[
  {
    # Attribute
    "Category": "Electronics",
    # Available at forecast: three days of context, two days of horizon
    "Timestamp": ['2023-08-03', '2023-08-04', '2023-08-05', '2023-08-06', '2023-08-07'],
    # Unavailable at forecast: three days of context
    "Sales": [490.50, 325.25, 647.00],
  },
  {
    # Attribute
    "Category": "Food",
    # Available at forecast: three days of context, two days of horizon
    "Timestamp": ['2023-08-03', '2023-08-04', '2023-08-05', '2023-08-06', '2023-08-07'],
    # Unavailable at forecast: three days of context
    "Sales": [190.50, 395.25, 47.00],
  }
])

Untuk setiap instance, Vertex AI merespons dengan dua prediksi untuk Sales, yang sesuai dengan dua stempel waktu horizon ("2023-08-06" dan "2023-08-07").

Untuk performa yang optimal, jumlah titik data context dan jumlah titik data horizon di setiap instance input harus sesuai dengan konteksnya, dan panjang horizon yang digunakan untuk melatih model tersebut. Jika ada ketidakcocokan, Vertex AI akan menggabungkan atau memotong instance agar sesuai dengan ukuran model.

Jika jumlah titik data context dalam instance input Anda kurang dari atau lebih besar dari jumlah titik data context yang digunakan untuk pelatihan model, pastikan bahwa jumlah poin ini konsisten di semua pasangan nilai kunci yang tersedia saat perkiraan dan semua pasangan nilai kunci yang tidak tersedia saat perkiraan.

Misalnya, pertimbangkan model yang dilatih dengan data context selama empat hari, dan data horizon selama dua hari. Anda dapat membuat permintaan prediksi hanya dengan data context selama tiga hari. Dalam kasus ini, pasangan nilai kunci yang tidak tersedia saat prakiraan berisi tiga nilai. Pasangan nilai kunci yang tersedia pada perkiraan harus berisi lima nilai.

Output prediksi online

Vertex AI memberikan output prediksi online di dalam kolom value:

{
  'value': [...]
}

Panjang respons prediksi bergantung pada horizon yang digunakan di dalam pelatihan model, dan horizon dari instance input tersebut. Panjang dari respons prediksi adalah yang terkecil dari dua nilai ini.

Perhatikan contoh berikut ini:

  • Anda melatih model dengan context = 15 dan horizon = 50. Instance input Anda memiliki context = 15 dan horizon = 20. Respons prediksi memiliki panjang 20.
  • Anda melatih model dengan context = 15 dan horizon = 50. Instance input Anda memiliki context = 15 dan horizon = 100. Respons prediksi memiliki 50.

Output prediksi online untuk model TFT

Untuk model yang dilatih dengan Temporal Fusion Transformer (TFT), Vertex AI memberikan penafsiran TFT tft_feature_importance selain prediksi di dalam kolom value:

{
  "tft_feature_importance": {
    "attribute_weights": [...],
    "attribute_columns": [...],
    "context_columns": [...],
    "context_weights": [...],
    "horizon_weights": [...],
    "horizon_columns": [...]
  },
  "value": [...]
}
  • attribute_columns: Fitur perkiraan yang merupakan invarian waktu.
  • attribute_weights: Bobot yang terkait dengan masing-masing dari attribute_columns.
  • context_columns: Fitur perkiraan yang nilai jendela konteksnya berfungsi sebagai input ke Encoder TFT Long Short-Term Memory (LSTM).
  • context_weights: Bobot nilai kepentingan fitur yang terkait dengan setiap context_columns untuk instance yang diprediksi.
  • horizon_columns: Fitur perkiraan yang nilai horizon perkiraannya berfungsi sebagai input untuk Decoder TFT Long Short-Term Memory (LSTM).
  • horizon_weights: Bobot nilai kepentingan fitur yang terkait dengan setiap horizon_columns untuk instance yang diprediksi.

Output prediksi online untuk model yang telah dioptimalkan untuk kehilangan kuantil

Untuk model yang dioptimalkan untuk kerugian kuantil, Vertex AI memberikan output prediksi online berikut ini:

{
  "value": [...],
  "quantile_values": [...],
  "quantile_predictions": [...]
}
  • value: Jika kumpulan kuantil Anda menyertakan median, value adalah nilai prediksi di median. Jika tidak, value adalah nilai prediksi pada kuantil terendah dalam kumpulan. Misalnya, jika kumpulan kuantil Anda adalah [0.1, 0.5, 0.9], value adalah prediksi untuk kuantil 0.5. Jika kumpulan kuantil Anda adalah [0.1, 0.9], value adalah prediksi untuk kuantil 0.1.
  • quantile_values: Nilai dari kuantil, yang telah ditetapkan selama berlangsungnya pelatihan model.
  • quantile_predictions: Nilai prediksi yang terkait dengan quantile_values.

Misalnya, pertimbangkan model dengan kolom target adalah nilai penjualan. Nilai kuantil ditentukan sebagai [0.1, 0.5, 0.9]. Vertex AI menampilkan prediksi kuantil berikut: [4484, 5615, 6853]. Di sini, kumpulan kuantil menyertakan median, sehingga value adalah prediksi untuk kuantil 0.5 (5615). Prediksi kuantil dapat ditafsirkan sebagai berikut:

  • P(nilai penjualan < 4484) = 10%
  • P(nilai penjualan < 5.615) = 50%
  • P(nilai penjualan < 6853) = 90%

Output prediksi online untuk model dengan inferensi probabilistik

Jika model Anda menggunakan inferensi probabilistik, kolom value akan berisi minimisasi tujuan pengoptimalan. Misalnya, jika tujuan pengoptimalan Anda adalah minimize-rmse, kolom value akan berisi nilai rata-rata. Jika minimize-mae, kolom value akan berisi nilai median.

Jika model Anda menggunakan inferensi probabilistik dengan kuantil, Vertex AI akan memberikan nilai dan prediksi kuantil selain pengoptimal tujuan pengoptimalan. Nilai kuantil ditetapkan selama pelatihan model. Prediksi kuantil adalah nilai prediksi yang terkait dengan nilai kuantil.

Mendapatkan penjelasan online

Untuk mendapatkan penjelasan, gunakan fungsi explain(), dan berikan satu atau beberapa instance input. Kode berikut ini menampilkan contoh:

explanations = endpoint.explain(instances=[{...}, {...}])

Format instance input untuk prediksi online dan penjelasan online adalah sama. Untuk mempelajari lebih lanjut, lihat Mendapatkan prediksi online.

Untuk ringkasan konseptual tentang atribusi fitur, lihat Atribusi fitur untuk perkiraan.

Output penjelasan online

Kode berikut ini menunjukkan Anda cara untuk menampilkan hasil penjelasan:

# Import required modules
import json
from google.protobuf import json_format

def explanation_to_dict(explanation):
  """Converts the explanation proto to a human-friendly json."""
  return json.loads(json_format.MessageToJson(explanation._pb))

for response in explanations.explanations:
  print(explanation_to_dict(response))

Hasil penjelasan memiliki format berikut ini:

{
  "attributions": [
    {
      "baselineOutputValue": 1.4194682836532593,
      "instanceOutputValue": 2.152980089187622,
      "featureAttributions": {
        ...
        "store_id": [
          0.007947325706481934
        ],
        ...
        "dept_id": [
          5.960464477539062e-08
        ],
        "item_id": [
          0.1100526452064514
        ],
        "date": [
          0.8525647521018982
        ],
        ...
        "sales": [
          0.0
        ]
      },
      "outputIndex": [
        2
      ],
      "approximationError": 0.01433318599207033,
      "outputName": "value"
    },
    ...
  ]
}

Jumlah elemen attributions bergantung pada horizon yang digunakan dalam pelatihan model, dan horizon instance input. Jumlah elemen adalah yang terkecil dari dua nilai ini.

Kolom featureAttributions di dalam elemen attributions berisi satu nilai untuk setiap kolom di dalam set data input. Vertex AI menghasilkan penjelasan untuk semua jenis fitur: attribute, yang tersedia saat perkiraan, dan yang tidak tersedia saat perkiraan. Untuk mempelajari kolom elemen attributions lebih lanjut, lihat Atribusi.

Menghapus endpoint

Gunakan fungsi undeploy_all() dan delete() untuk menghapus endpoint Anda. Kode berikut ini menampilkan contoh:

endpoint.undeploy_all()
endpoint.delete()

Langkah berikutnya