Perkiraan dengan Prophet

Prophet adalah model perkiraan yang dikelola oleh Meta. Lihat makalah Prophet untuk mengetahui detail algoritma dan dokumentasi guna mengetahui informasi selengkapnya tentang library.

Seperti BigQuery ML ARIMA_PLUS, Prophet berupaya mengurai setiap deret waktu menjadi tren, musim, dan liburan, sehingga menghasilkan perkiraan menggunakan agregasi prediksi model ini. Namun, perbedaan pentingnya adalah ARIMA+ BQML menggunakan ARIMA untuk membuat model komponen tren, sementara Prophet mencoba menyesuaikan kurva menggunakan model linear atau piecewise logistic.

Google Cloud menawarkan pipeline untuk melatih model Prophet dan pipeline untuk mendapatkan prediksi batch dari model Prophet. Kedua pipeline tersebut merupakan instance Vertex AI Pipelines dari Google Cloud Pipeline Components (GCPC).

Integrasi Prophet dengan Vertex AI memungkinkan Anda melakukan hal berikut:

Meskipun Prophet adalah model multi-variasi, Vertex AI hanya mendukung versi univariat-nya.

Untuk mempelajari akun layanan yang digunakan oleh alur kerja ini, lihat Akun layanan untuk Tabular Workflows.

API Alur Kerja

Alur kerja ini menggunakan API berikut:

  • Vertex AI
  • Dataflow
  • BigQuery
  • Cloud Storage

Melatih model dengan Prophet

Prophet dirancang untuk satu deret waktu. Vertex AI menggabungkan data berdasarkan ID deret waktu dan melatih model Prophet untuk setiap deret waktu. Pipeline pelatihan model melakukan penyesuaian hyperparameter menggunakan penelusuran grid dan logika backtesting bawaan Prophet.

Untuk mendukung beberapa deret waktu, pipeline menggunakan Tugas Pelatihan Kustom Vertex AI dan Dataflow untuk melatih beberapa model Prophet secara paralel. Secara keseluruhan, jumlah model yang dilatih adalah perkalian dari jumlah deret waktu dan jumlah uji coba penyesuaian hyperparameter.

Kode contoh berikut menunjukkan cara menjalankan pipeline pelatihan model Prophet:

job = aiplatform.PipelineJob(
    ...
    template_path=train_job_spec_path,
    parameter_values=train_parameter_values,
    ...
)
job.run(service_account=SERVICE_ACCOUNT)

Parameter service_account opsional di job.run() memungkinkan Anda menetapkan akun layanan Vertex AI Pipelines ke akun pilihan Anda.

Pipeline dan nilai parameter ditentukan oleh fungsi berikut.

(
    train_job_spec_path,
    train_parameter_values,
) = utils.get_prophet_train_pipeline_and_parameters(
    ...
)

Berikut adalah subset parameter get_prophet_train_pipeline_and_parameters:

Nama parameter Jenis Definisi
project String ID project Anda.
location String Region Anda.
root_dir String Lokasi Cloud Storage untuk menyimpan output.
target_column String Kolom (nilai) yang Anda inginkan untuk diprediksi oleh model ini.
time_column String Kolom waktu. Anda harus menentukan kolom waktu dan kolom tersebut harus memiliki nilai untuk setiap baris. Kolom waktu menunjukkan waktu saat pengamatan tertentu dilakukan.
time_series_identifier_column String Kolom ID deret waktu. Anda harus menentukan kolom ID deret waktu dan kolom tersebut harus memiliki nilai untuk setiap baris. Data pelatihan perkiraan biasanya mencakup beberapa deret waktu, dan ID ini memberi tahu Vertex AI pada deret waktu mana pengamatan tertentu dalam data pelatihan dilakukan. Semua baris dalam deret waktu tertentu memiliki nilai yang sama dalam kolom ID deret waktu. Beberapa kode deret waktu yang umum dapat berupa ID produk, ID toko, atau region. Model perkiraan dapat dilatih pada satu deret waktu, dengan nilai yang identik untuk semua baris dalam kolom ID deret waktu. Namun, Vertex AI lebih sesuai untuk data pelatihan yang berisi dua deret waktu atau lebih. Untuk hasil terbaik, gunakan minimal 10 deret waktu untuk setiap kolom yang Anda gunakan untuk melatih model.
data_granularity_unit String Unit yang akan digunakan untuk perincian data pelatihan serta horizon perkiraan dan periode konteks Anda. Dapat berupa minute, hour, day, week, month, atau year. Pelajari cara memilih perincian data.
data_source_csv_filenames String URI untuk CSV yang disimpan di Cloud Storage.
data_source_bigquery_table_path String URI untuk tabel BigQuery.
forecast_horizon Bilangan Bulat Horizon perkiraan menentukan seberapa jauh model akan memperkirakan nilai target untuk setiap baris data prediksi pada masa mendatang. Horizon perkiraan ditentukan dalam unit perincian data. Pelajari lebih lanjut.
optimization_objective String Tujuan pengoptimalan untuk model. Pelajari lebih lanjut.
max_num_trials Bilangan Bulat Jumlah maksimum uji coba penyesuaian yang akan dilakukan per deret waktu.

Parameter Dataflow

Berikut adalah subset parameter get_prophet_train_pipeline_and_parameters untuk penyesuaian Dataflow:

Nama parameter Jenis Definisi
trainer_dataflow_machine_type String Jenis mesin Dataflow yang akan digunakan untuk pelatihan.
trainer_dataflow_max_num_workers Bilangan Bulat Jumlah maksimum worker Dataflow yang akan digunakan untuk pelatihan.
evaluation_dataflow_machine_type String Jenis mesin Dataflow yang akan digunakan untuk evaluasi.
evaluation_dataflow_max_num_workers Bilangan Bulat Jumlah maksimum worker Dataflow yang akan digunakan untuk evaluasi.
dataflow_service_account String Akun layanan kustom yang akan menjalankan tugas Dataflow. Tugas Dataflow dapat dikonfigurasi untuk menggunakan IP pribadi dan subnet VPC tertentu. Parameter ini berfungsi sebagai pengganti untuk akun layanan worker Dataflow default.

Karena tugas pelatihan Prophet berjalan di Dataflow, waktu startup awal akan berlangsung selama 5 - 7 menit. Untuk mengurangi runtime tambahan, Anda dapat meningkatkan atau menyebarkan skala. Misalnya, untuk meningkatkan skala, Anda dapat mengubah jenis mesin dari n1-standard-1 menjadi e2-highcpu-8. Untuk menyebarkan skala, Anda dapat meningkatkan jumlah worker dari 1 menjadi 200.

Parameter pembagian data

Pipeline pelatihan menawarkan opsi berikut untuk membagi data Anda:

Pembagian data Deskripsi Parameter
Pembagian default Vertex AI secara acak memilih 80% baris data Anda untuk set pelatihan, 10% untuk set validasi, dan 10% untuk set pengujian. Vertex AI menggunakan kolom Waktu untuk menentukan urutan kronologis baris data. Tidak ada
Pembagian pecahan Vertex AI menggunakan nilai yang Anda berikan untuk mempartisi data Anda ke dalam set pelatihan, set validasi, dan set pengujian. Vertex AI menggunakan kolom Waktu untuk menentukan urutan kronologis baris data.
  • training_fraction
  • validation_fraction
  • test_fraction
Pembagian stempel waktu Vertex AI menggunakan nilai training_fraction, validation_fraction, dan test_fraction untuk mempartisi data Anda ke dalam set pelatihan, set validasi, dan set pengujian. Vertex AI menggunakan kolom timestamp_split_key untuk menentukan urutan kronologis baris data.
  • training_fraction
  • validation_fraction
  • test_fraction
  • timestamp_split_key
Pembagian manual (yang telah ditentukan) Vertex AI membagi data menggunakan nilai TRAIN, VALIDATE, atau TEST di kolom predefined_split_key.
  • predefined_split_key

Tentukan parameter pembagian data di get_prophet_train_pipeline_and_parameters sebagai berikut:

Nama parameter Jenis Definisi
predefined_split_key String Nama kolom yang berisi nilai TRAIN, VALIDATE, atau TEST. Tetapkan nilai ini jika Anda menggunakan pembagian manual (yang telah ditentukan).
training_fraction Float Persentase data yang akan ditetapkan ke set pelatihan. Tetapkan nilai ini jika Anda menggunakan pembagian pecahan atau pembagian stempel waktu.
validation_fraction Float Persentase data yang akan ditetapkan ke set validasi. Tetapkan nilai ini jika Anda menggunakan pembagian pecahan atau pembagian stempel waktu.
test_fraction Float Persentase data yang akan ditetapkan ke set pengujian. Tetapkan nilai ini jika Anda menggunakan pembagian pecahan atau pembagian stempel waktu.
timestamp_split_key String Nama kolom yang berisi stempel waktu untuk pembagian data. Tetapkan nilai ini jika Anda menggunakan pembagian stempel waktu.

Parameter periode

Vertex AI menghasilkan periode perkiraan dari data input menggunakan strategi periode berkelanjutan. Jika Anda tidak menetapkan parameter periode, Vertex AI akan menggunakan strategi Jumlah dengan nilai maksimum default 100,000,000. Pipeline pelatihan menawarkan strategi periode berkelanjutan berikut:

Strategi Periode Berkelanjutan Deskripsi Parameter
Jumlah Jumlah periode yang dihasilkan oleh Vertex AI tidak boleh melebihi jumlah maksimum yang disediakan pengguna. Jika jumlah baris dalam set data input kurang dari jumlah maksimum periode, setiap baris akan digunakan untuk membuat periode. Jika tidak, Vertex AI akan melakukan pengambilan sampel acak untuk memilih baris. Nilai default untuk jumlah maksimum periode adalah 100,000,000. Jumlah maksimum periode tidak boleh melebihi 100,000,000. window_max_count
Jangka (stride) Vertex AI menggunakan satu dari setiap X baris input untuk menghasilkan periode, hingga maksimum 100.000.000 periode. Opsi ini berguna untuk prediksi musiman atau berkala. Misalnya, Anda dapat membatasi perkiraan ke satu hari dalam seminggu dengan menetapkan nilai panjang jangka ke 7. Nilainya dapat antara 1 dan 1000. window_stride_length
Kolom Anda dapat menambahkan kolom ke data input dengan nilai True atau False. Vertex AI menghasilkan periode untuk setiap baris input dengan nilai kolom True. Nilai True dan False dapat ditetapkan dalam urutan apa pun, selama jumlah total baris True kurang dari 100,000,000. Nilai Boolean lebih diutamakan, tetapi nilai string tetap diterima. Nilai string tidak peka huruf besar/kecil. window_column

Tentukan parameter periode di get_prophet_train_pipeline_and_parameters sebagai berikut:

Nama parameter Jenis Definisi
window_column String Nama kolom dengan nilai True dan False.
window_stride_length Bilangan Bulat Nilai panjang jangka.
window_max_count Bilangan Bulat Jumlah maksimum periode.

Membuat prediksi dengan Prophet

Pipeline pelatihan model untuk Prophet Vertex AI membuat satu model Prophet untuk setiap deret waktu dalam data. Pipeline prediksi menggabungkan data input berdasarkan ID deret waktu dan menghitung prediksi secara terpisah untuk setiap deret waktu. Pipeline kemudian memisahkan hasil prediksi agar sesuai dengan format Perkiraan Vertex AI.

Kode contoh berikut menunjukkan cara menjalankan pipeline prediksi Prophet:

job = aiplatform.PipelineJob(
    ...
    template_path=prediction_job_spec_path,
    parameter_values=prediction_parameter_values,
    ...
)
job.run(...)

Pipeline dan nilai parameter ditentukan oleh fungsi berikut.

(
    prediction_job_spec_path,
    prediction_parameter_values,
) = utils.get_prophet_prediction_pipeline_and_parameters(
    ...
)

Berikut adalah subset parameter get_prophet_prediction_pipeline_and_parameters:

Nama parameter Jenis Definisi
project String ID project Anda.
location String Region Anda.
model_name String Nama resource Model. Format string sebagai berikut: projects/{project}/locations/{location}/models/{model}.
time_column String Kolom waktu. Anda harus menentukan kolom waktu dan kolom tersebut harus memiliki nilai untuk setiap baris. Kolom waktu menunjukkan waktu saat pengamatan tertentu dilakukan.
time_series_identifier_column String Kolom ID deret waktu. Anda harus menentukan kolom ID deret waktu dan kolom tersebut harus memiliki nilai untuk setiap baris. Data pelatihan perkiraan biasanya mencakup beberapa deret waktu, dan ID ini memberi tahu Vertex AI pada deret waktu mana pengamatan tertentu dalam data pelatihan dilakukan. Semua baris dalam deret waktu tertentu memiliki nilai yang sama dalam kolom ID deret waktu. Beberapa kode deret waktu yang umum dapat berupa ID produk, ID toko, atau region. Model perkiraan dapat dilatih pada satu deret waktu, dengan nilai yang identik untuk semua baris dalam kolom ID deret waktu. Namun, Vertex AI lebih sesuai untuk data pelatihan yang berisi dua deret waktu atau lebih. Untuk hasil terbaik, gunakan minimal 10 deret waktu untuk setiap kolom yang Anda gunakan untuk melatih model.
target_column String Kolom (nilai) yang Anda inginkan untuk diprediksi oleh model ini.
data_source_csv_filenames String URI untuk CSV yang disimpan di Cloud Storage.
data_source_bigquery_table_path String URI untuk tabel BigQuery.
bigquery_destination_uri String URI untuk set data tujuan yang diinginkan. Jika nilai ini tidak ditetapkan, resource akan dibuat di set data baru dalam project.
machine_type String Jenis mesin yang akan digunakan untuk prediksi batch.
max_num_workers Bilangan Bulat Jumlah maksimum worker yang akan digunakan untuk prediksi batch.