Prediksi online

Halaman ini menjelaskan cara mendapatkan prediksi online (latensi rendah, tunggal) dari Tabel AutoML.

Pengantar

Setelah membuat (melatih) model, Anda dapat men-deploy model tersebut dan meminta prediksi online (real-time). Prediksi online menerima satu baris data dan memberikan hasil prediksi berdasarkan model Anda untuk data tersebut. Anda menggunakan prediksi online saat memerlukan prediksi sebagai input untuk alur logika bisnis Anda.

Sebelum dapat meminta prediksi online, Anda harus men-deploy model. Model yang di-deploy akan dikenai biaya. Setelah selesai membuat prediksi online, Anda dapat membatalkan deployment model untuk menghindari biaya deployment lebih lanjut. Pelajari lebih lanjut.

Model harus dilatih ulang setiap enam bulan agar dapat terus menyajikan prediksi.

Mendapatkan prediksi online

Konsol

Umumnya, Anda menggunakan prediksi online untuk mendapatkan prediksi dari dalam aplikasi bisnis Anda. Namun, Anda dapat menggunakan AutoML Tables di Konsol Google Cloud untuk menguji format data atau model Anda dengan kumpulan input tertentu.

  1. Kunjungi halaman AutoML Tables di Konsol Google Cloud.

    Buka halaman AutoML Tables

  2. Pilih Model dan pilih model yang ingin Anda gunakan.

  3. Pilih tab Pengujian & Penggunaan dan klik Prediksi online.

  4. Jika model Anda belum di-deploy, deploy sekarang dengan mengklik Deploy model.

    Model Anda harus di-deploy agar bisa menggunakan prediksi online. Men-deploy model Anda akan dikenai biaya. Untuk mengetahui informasi selengkapnya, lihat halaman harga.

  5. Masukkan nilai input di kotak teks yang disediakan.

    Atau, Anda dapat memilih Tampilan Kode JSON untuk memberikan nilai input dalam format JSON.

  6. Jika Anda ingin melihat pengaruh setiap fitur terhadap prediksi, pilih Membuat tingkat kepentingan fitur.

    Konsol Google Cloud memotong nilai penting fitur lokal agar mudah dibaca. Jika Anda memerlukan nilai yang tepat, gunakan Cloud AutoML API untuk membuat permintaan prediksi.

    Untuk mengetahui informasi tentang nilai penting fitur, lihat Tingkat kepentingan fitur lokal.

  7. Klik Prediksi untuk mendapatkan prediksi Anda.

    AutoML Tables memprediksi halaman

    Untuk informasi tentang cara menafsirkan hasil prediksi, lihat Menafsirkan hasil prediksi. Untuk mengetahui informasi tentang nilai penting fitur lokal, lihat Tingkat kepentingan fitur lokal.

  8. (Opsional) Jika tidak berencana meminta lebih banyak prediksi online, Anda dapat membatalkan deployment model untuk menghindari biaya deployment dengan mengklik Batalkan deployment model.

curl

Anda meminta prediksi untuk sekumpulan nilai dengan membuat objek JSON menggunakan nilai fitur, kemudian menggunakan metode model.predict untuk mendapatkan prediksi.

Nilai harus berisi kolom persis yang Anda sertakan dalam pelatihan, dan harus dalam urutan yang sama seperti yang ditampilkan pada tab Evaluate dengan mengklik link kolom yang disertakan.

Jika ingin mengurutkan ulang nilai, Anda dapat menyertakan serangkaian ID spesifikasi kolom dalam urutan nilai. Anda bisa mendapatkan ID spesifikasi kolom dari objek model; ID tersebut ditemukan di kolom TablesModelMetadata.inputFeatureColumnSpecs.

Jenis data setiap nilai (fitur) di objek Baris bergantung pada jenis data Tabel AutoML dari fitur tersebut. Untuk mengetahui daftar jenis data yang diterima berdasarkan jenis data AutoML Tables, lihat Format objek baris.

  1. Jika Anda belum men-deploy model, deploy sekarang. Pelajari lebih lanjut.

  2. Minta prediksi.

    Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • endpoint: automl.googleapis.com untuk lokasi global, dan eu-automl.googleapis.com untuk region Uni Eropa.
    • project-id: Project ID Google Cloud Anda.
    • location: lokasi untuk resource: us-central1 untuk Global atau eu untuk Uni Eropa.
    • model-id: ID model. Contoh, TBL543.
    • valueN: nilai untuk setiap kolom, dalam urutan yang benar.

    Metode HTTP dan URL:

    POST https://endpoint/v1beta1/projects/project-id/locations/location/models/model-id:predict

    Isi JSON permintaan:

    {
      "payload": {
        "row": {
          "values": [
            value1, value2,...
          ]
        }
      }
    }
    

    Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:

    curl

    Simpan isi permintaan dalam file bernama request.json, lalu jalankan perintah berikut:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "x-goog-user-project: project-id" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://endpoint/v1beta1/projects/project-id/locations/location/models/model-id:predict"

    PowerShell

    Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred"; "x-goog-user-project" = "project-id" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://endpoint/v1beta1/projects/project-id/locations/location/models/model-id:predict" | Select-Object -Expand Content
    Untuk menyertakan hasil nilai penting fitur lokal, sertakan parameter feature_importance. Untuk mengetahui informasi selengkapnya tentang nilai penting fitur lokal, lihat Nilai penting fitur lokal.

  3. Lihat hasil Anda.

    Untuk model klasifikasi, Anda akan melihat output yang mirip dengan contoh berikut. Perhatikan bahwa dua hasil ditampilkan, masing-masing dengan estimasi keyakinan (score). Estimasi keyakinan antara 0 dan 1, dan menunjukkan seberapa besar kemungkinan model menganggap ini sebagai nilai prediksi yang benar. Untuk informasi selengkapnya tentang cara menggunakan estimasi keyakinan, lihat Menafsirkan hasil prediksi.

    {
     "payload": [
       {
         "tables": {
           "score": 0.11210235,
           "value": "1"
         }
       },
       {
         "tables": {
           "score": 0.8878976,
           "value": "2"
         }
       }
     ]
    }
    

    Untuk model regresi, hasilnya mencakup nilai prediksi dan interval prediksi. Interval prediksi memberikan rentang yang mencakup nilai sebenarnya 95% dari waktu tersebut (berdasarkan data tempat model dilatih). Perhatikan bahwa nilai yang diprediksi mungkin tidak dipusatkan dalam interval (bahkan mungkin berada di luar interval), karena interval prediksi dipusatkan di sekitar median, sedangkan nilai yang diprediksi adalah nilai yang diharapkan (atau rata-rata).

    {
     "payload": [
       {
         "tables": {
           "value": 207.18209838867188,
           "predictionInterval": {
             "start": 29.712770462036133,
             "end": 937.42041015625
           }
         }
       }
     ]
    }
    

    Untuk mengetahui informasi tentang hasil nilai penting fitur lokal, lihat Tingkat kepentingan fitur lokal.

  4. (Opsional) Jika sudah selesai meminta prediksi online, Anda dapat membatalkan deployment model untuk menghindari biaya deployment. Pelajari lebih lanjut.

Java

Jika resource Anda berada di region Uni Eropa, Anda harus menetapkan endpoint secara eksplisit. Pelajari lebih lanjut.

import com.google.cloud.automl.v1beta1.AnnotationPayload;
import com.google.cloud.automl.v1beta1.ExamplePayload;
import com.google.cloud.automl.v1beta1.ModelName;
import com.google.cloud.automl.v1beta1.PredictRequest;
import com.google.cloud.automl.v1beta1.PredictResponse;
import com.google.cloud.automl.v1beta1.PredictionServiceClient;
import com.google.cloud.automl.v1beta1.Row;
import com.google.cloud.automl.v1beta1.TablesAnnotation;
import com.google.protobuf.Value;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

class TablesPredict {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "YOUR_PROJECT_ID";
    String modelId = "YOUR_MODEL_ID";
    // Values should match the input expected by your model.
    List<Value> values = new ArrayList<>();
    // values.add(Value.newBuilder().setBoolValue(true).build());
    // values.add(Value.newBuilder().setNumberValue(10).build());
    // values.add(Value.newBuilder().setStringValue("YOUR_STRING").build());
    predict(projectId, modelId, values);
  }

  static void predict(String projectId, String modelId, List<Value> values) throws IOException {
    // Initialize client that will be used to send requests. This client only needs to be created
    // once, and can be reused for multiple requests. After completing all of your requests, call
    // the "close" method on the client to safely clean up any remaining background resources.
    try (PredictionServiceClient client = PredictionServiceClient.create()) {
      // Get the full path of the model.
      ModelName name = ModelName.of(projectId, "us-central1", modelId);
      Row row = Row.newBuilder().addAllValues(values).build();
      ExamplePayload payload = ExamplePayload.newBuilder().setRow(row).build();

      // Feature importance gives you visibility into how the features in a specific prediction
      // request informed the resulting prediction. For more info, see:
      // https://cloud.google.com/automl-tables/docs/features#local
      PredictRequest request =
          PredictRequest.newBuilder()
              .setName(name.toString())
              .setPayload(payload)
              .putParams("feature_importance", "true")
              .build();

      PredictResponse response = client.predict(request);

      System.out.println("Prediction results:");
      for (AnnotationPayload annotationPayload : response.getPayloadList()) {
        TablesAnnotation tablesAnnotation = annotationPayload.getTables();
        System.out.format(
            "Classification label: %s%n", tablesAnnotation.getValue().getStringValue());
        System.out.format("Classification score: %.3f%n", tablesAnnotation.getScore());
        // Get features of top importance
        tablesAnnotation
            .getTablesModelColumnInfoList()
            .forEach(
                info ->
                    System.out.format(
                        "\tColumn: %s - Importance: %.2f%n",
                        info.getColumnDisplayName(), info.getFeatureImportance()));
      }
    }
  }
}

Node.js

Jika resource Anda berada di region Uni Eropa, Anda harus menetapkan endpoint secara eksplisit. Pelajari lebih lanjut.


/**
 * Demonstrates using the AutoML client to request prediction from
 * automl tables using csv.
 * TODO(developer): Uncomment the following lines before running the sample.
 */
// const projectId = '[PROJECT_ID]' e.g., "my-gcloud-project";
// const computeRegion = '[REGION_NAME]' e.g., "us-central1";
// const modelId = '[MODEL_ID]' e.g., "TBL000000000000";
// const inputs = [{ numberValue: 1 }, { stringValue: 'value' }, { stringValue: 'value2' } ...]

const automl = require('@google-cloud/automl');

// Create client for prediction service.
const automlClient = new automl.v1beta1.PredictionServiceClient();

// Get the full path of the model.
const modelFullId = automlClient.modelPath(projectId, computeRegion, modelId);

async function predict() {
  // Set the payload by giving the row values.
  const payload = {
    row: {
      values: inputs,
    },
  };

  // Params is additional domain-specific parameters.
  // Currently there is no additional parameters supported.
  const [response] = await automlClient.predict({
    name: modelFullId,
    payload: payload,
    params: {feature_importance: true},
  });
  console.log('Prediction results:');

  for (const result of response.payload) {
    console.log(`Predicted class name: ${result.displayName}`);
    console.log(`Predicted class score: ${result.tables.score}`);

    // Get features of top importance
    const featureList = result.tables.tablesModelColumnInfo.map(
      columnInfo => {
        return {
          importance: columnInfo.featureImportance,
          displayName: columnInfo.columnDisplayName,
        };
      }
    );
    // Sort features by their importance, highest importance first
    featureList.sort((a, b) => {
      return b.importance - a.importance;
    });

    // Print top 10 important features
    console.log('Features of top importance');
    console.log(featureList.slice(0, 10));
  }
}
predict();

Python

Library klien untuk AutoML Tables menyertakan metode Python tambahan yang menyederhanakan penggunaan AutoML Tables API. Metode ini merujuk pada set data dan model berdasarkan nama, bukan ID. Nama set data dan model Anda harus unik. Untuk mengetahui informasi selengkapnya, lihat Referensi klien.

Jika resource Anda berada di region Uni Eropa, Anda harus menetapkan endpoint secara eksplisit. Pelajari lebih lanjut.

# TODO(developer): Uncomment and set the following variables
# project_id = 'PROJECT_ID_HERE'
# compute_region = 'COMPUTE_REGION_HERE'
# model_display_name = 'MODEL_DISPLAY_NAME_HERE'
# inputs = {'value': 3, ...}

from google.cloud import automl_v1beta1 as automl

client = automl.TablesClient(project=project_id, region=compute_region)

if feature_importance:
    response = client.predict(
        model_display_name=model_display_name,
        inputs=inputs,
        feature_importance=True,
    )
else:
    response = client.predict(model_display_name=model_display_name, inputs=inputs)

print("Prediction results:")
for result in response.payload:
    print(f"Predicted class name: {result.tables.value}")
    print(f"Predicted class score: {result.tables.score}")

    if feature_importance:
        # get features of top importance
        feat_list = [
            (column.feature_importance, column.column_display_name)
            for column in result.tables.tables_model_column_info
        ]
        feat_list.sort(reverse=True)
        if len(feat_list) < 10:
            feat_to_show = len(feat_list)
        else:
            feat_to_show = 10

        print("Features of top importance:")
        for feat in feat_list[:feat_to_show]:
            print(feat)

Langkah selanjutnya