Prophet adalah algoritma peramalan deret waktu yang dikembangkan oleh Facebook. Algoritma ini menguraikan deret waktu menjadi komponen tren, musiman, dan hari libur untuk menghasilkan prediksi beserta batas ketidakpastiannya. Prophet cocok digunakan dalam berbagai skenario peramalan bisnis, seperti perencanaan permintaan, peramalan pendapatan, dan prediksi traffic.
Prophet hanya berjalan pada sumber daya komputasi MaxCompute.
Kapan menggunakan Prophet
Prophet memberikan hasil terbaik ketika data Anda memenuhi sebagian besar kondisi berikut:
Tersedia setidaknya dua siklus musiman lengkap dari data historis (misalnya, dua tahun pengamatan harian).
Memiliki pola musiman yang jelas—harian, mingguan, atau tahunan.
Terdapat event satu kali yang diketahui memengaruhi deret waktu (misalnya, peluncuran produk, hari libur, atau promosi).
Menunjukkan tren pertumbuhan yang mendekati batas atas atau bawah alami (misalnya, saturasi pasar).
Jika data Anda tidak memiliki karakteristik tersebut, model yang lebih sederhana mungkin memberikan hasil yang sama baiknya.
Cara kerja
Muat data deret waktu ke dalam kolom MTable menggunakan komponen MTable Assembler.
Teruskan kolom MTable ke komponen Prophet dan konfigurasikan parameter peramalan.
Prophet menguraikan deret waktu menjadi komponen tren, musiman, dan hari libur, lalu menghasilkan prediksi.
Output berisi prediksi titik (
yhat) di kolom prediksi serta batas ketidakpastian (yhat_lower,yhat_upper) di kolom detail prediksi.
Konfigurasi komponen di Konsol PAI
Port input
| Input port | Data type | Required | Recommended upstream component |
|---|---|---|---|
| Input Data | N/A | Yes | Read Table, Read CSV File, Feature engineering, Data preprocessing |
Pengaturan field
| Parameter | Description |
|---|---|
| valueCol | Kolom MTable yang berisi deret waktu. Tipe data adalah STRING dan format data adalah MTable. Gunakan komponen MTable Assembler untuk membuat kolom ini. Kolom Datetime (ds) berfungsi sebagai sumbu waktu. Contoh: {"data":{"ds":["2019-05-07 00:00:00.0","2019-05-08 00:00:00.0"],"val":[8588.0,8521.0]},"schema":"ds TIMESTAMP,val DOUBLE"} |
| reservedCols | Kolom dari data input yang diteruskan ke output. |
Pengaturan parameter
Parameter dikelompokkan ke dalam empat kategori: kontrol tren, kontrol musiman, kontrol hari libur, dan kontrol output. Memahami kategori suatu parameter mempermudah proses tuning.
Kontrol tren
| Parameter | Default | Description |
|---|---|---|
| growth | LINEAR | Jenis tren pertumbuhan. LINEAR menyesuaikan tren linier potongan-potongan. Logistic menyesuaikan kurva pertumbuhan jenuh—gunakan ini ketika deret memiliki batas atas atau bawah alami (atur cap dan floor sesuai kebutuhan). Flat mengasumsikan tidak ada tren. |
| cap | — | Batas atas saturasi. Diperlukan ketika growth bernilai Logistic. Dapat berupa nilai konstan atau deret yang berubah seiring waktu. Tidak berpengaruh ketika growth bernilai LINEAR atau Flat. |
| floor | — | Batas bawah saturasi. Diperlukan ketika growth bernilai Logistic dan deret memiliki batas minimum. Tidak berpengaruh ketika growth bernilai LINEAR atau Flat. |
| changepoints | — | Daftar eksplisit tanggal titik perubahan, dipisahkan koma. Contoh: 2021-05-02,2021-05-07. Biarkan kosong agar Prophet mendeteksi titik perubahan secara otomatis. |
| n_change_point | 25 | Jumlah maksimum titik perubahan yang terdeteksi secara otomatis. |
| change_point_range | 0.8 | Proporsi data historis tempat titik perubahan dapat terjadi. Nilai default (0.8) membatasi deteksi pada 80% pertama deret, mencegah titik perubahan semu di akhir data. |
| changepoint_prior_scale | 0.05 | Mengontrol fleksibilitas tren. Jika tren overfit (mengikuti noise terlalu dekat), turunkan nilai ini mendekati 0.001. Jika tren underfit (melewatkan perubahan nyata), naikkan nilainya mendekati 0.5. |
Kontrol musiman
| Parameter | Default | Description |
|---|---|---|
| seasonality_mode | ADDITIVE | Cara musiman berinteraksi dengan tren. Gunakan ADDITIVE ketika fluktuasi musiman relatif konstan. Gunakan MULTIPLICATIVE ketika fluktuasi musiman bertambah atau berkurang secara proporsional terhadap level tren. |
| daily_seasonality | auto | Apakah akan menyesuaikan komponen musiman harian. auto mengaktifkan musiman harian hanya jika data memiliki pengamatan sub-harian. |
| weekly_seasonality | auto | Apakah akan menyesuaikan komponen musiman mingguan. |
| yearly_seasonality | auto | Apakah akan menyesuaikan komponen musiman tahunan. |
| seasonality_prior_scale | 10.0 | Mengontrol seberapa kuat musiman menyesuaikan data. Turunkan untuk menghaluskan fluktuasi musiman; naikkan untuk memungkinkan fluktuasi musiman yang lebih besar. Bekerja secara analog dengan changepoint_prior_scale, tetapi untuk komponen musiman. |
Kontrol hari libur
| Parameter | Default | Description |
|---|---|---|
| holidays | — | Tanggal hari libur kustom, diformat sebagai nama:tanggal1,tanggal2 nama2:tanggal3,tanggal4. Pisahkan beberapa hari libur dengan spasi. Contoh: playoff:2021-05-03,2021-01-03 superbowl:2021-02-07,2021-11-02. |
| holidays_prior_scale | 10.0 | Mengontrol seberapa kuat model menyesuaikan efek hari libur. Bekerja secara analog dengan seasonality_prior_scale, tetapi untuk komponen hari libur. Turunkan jika lonjakan hari libur mengalami overfit. |
Kontrol output dan inferensi
| Parameter | Default | Description |
|---|---|---|
| predictionCol | — | Nama kolom output yang berisi prediksi titik (yhat). |
| predictionDetailCol | — | Nama kolom output yang berisi detail prediksi dalam bentuk MTable. Field mencakup yhat_lower dan yhat_upper (batas ketidakpastian), trend, dan nilai komponen musiman. Gunakan komponen MTable Expander untuk meratakan kolom ini menjadi tabel biasa. |
| predictNum | 12 | Jumlah periode mendatang yang akan diramalkan. Nilai valid: (0, inf). |
| include_history | — | Apakah akan menyertakan nilai hasil fitting untuk tanggal historis dalam output. |
| interval_width | 0.8 | Lebar interval ketidakpastian. Nilai default 0.8 berarti interval ketidakpastian 80% di sekitar prediksi. |
| mcmc_samples | 100 | Jumlah sampel Markov Chain Monte Carlo (MCMC) untuk inferensi Bayesian. Atur ke 0 untuk menggunakan estimasi maximum a posteriori (MAP) alih-alih inferensi Bayesian penuh—lebih cepat tetapi tidak menghasilkan interval ketidakpastian. |
| uncertaintySamples | 1000 | Jumlah sampel yang digunakan untuk menghitung batas ketidakpastian. Atur ke 0 untuk melewati estimasi ketidakpastian dan mempercepat prediksi. |
| stanInit | — | Nilai awal untuk pengoptimal Stan. Biarkan kosong untuk menggunakan nilai default. |
| numThreads | — | Jumlah thread yang digunakan komponen. |
Tuning eksekusi
| Parameter | Description |
|---|---|
| Number of Workers | Jumlah core CPU. Harus berupa bilangan bulat positif dalam rentang [1, 9999]. Atur bersamaan dengan Memory per worker, unit MB. |
| Memory per worker, unit MB | Memori yang dialokasikan untuk setiap node pekerja. Nilai valid: 1024–65536 MB. |
Konfigurasi komponen menggunakan kode
Salin kode berikut ke dalam komponen PyAlink Script untuk mereplikasi perilaku komponen Prophet secara programatik.
Kode ini melakukan tiga langkah:
Menggabungkan baris deret waktu mentah menjadi satu kolom MTable per kelompok menggunakan
GroupByBatchOp.Menjalankan peramalan Prophet pada setiap MTable menggunakan
ProphetBatchOp.Meratakan output prediksi MTable menjadi tabel biasa menggunakan
FlattenMTableBatchOp.
import time, datetime
import numpy as np
import pandas as pd
# Unduh lingkungan plugin Prophet yang diperlukan
downloader = AlinkGlobalConfiguration.getPluginDownloader()
downloader.downloadPlugin('tf115_python_env_linux')
# Data input contoh: setiap baris adalah satu pengamatan berstempel waktu
data = pd.DataFrame([
[1, datetime.datetime.fromtimestamp(1), 10.0],
[1, datetime.datetime.fromtimestamp(2), 11.0],
[1, datetime.datetime.fromtimestamp(3), 12.0],
[1, datetime.datetime.fromtimestamp(4), 13.0],
[1, datetime.datetime.fromtimestamp(5), 14.0],
[1, datetime.datetime.fromtimestamp(6), 15.0],
[1, datetime.datetime.fromtimestamp(7), 16.0],
[1, datetime.datetime.fromtimestamp(8), 17.0],
[1, datetime.datetime.fromtimestamp(9), 18.0],
[1, datetime.datetime.fromtimestamp(10), 19.0]
])
# Langkah 1: Konversi baris menjadi kolom MTable dikelompokkan berdasarkan ID deret
source = dataframeToOperator(data, schemaStr='id int, ts timestamp, val double', op_type='batch')
source.link(
GroupByBatchOp()
.setGroupByPredicate("id")
.setSelectClause("id, mtable_agg(ts, val) as data")
# Langkah 2: Jalankan Prophet dan ramalkan 4 periode mendatang
).link(
ProphetBatchOp()
.setValueCol("data")
.setPredictNum(4)
.setPredictionCol("pred")
# Langkah 3: Ratakan output prediksi MTable menjadi baris
).link(
FlattenMTableBatchOp()
.setSelectedCol("pred_detail")
.setSchemaStr("ds timestamp, yhat double")
).print()Langkah selanjutnya
Gunakan komponen MTable Expander untuk meratakan output
predictionDetailColmenjadi tabel standar guna analisis lanjutan.Untuk ikhtisar komponen yang tersedia, lihat Ikhtisar Machine Learning Designer dan Referensi komponen: ikhtisar semua komponen.