Prophet untuk Peramalan Penjualan Bulanan Toko Lokal
Blog/Tips & Trik/Prophet untuk Peramalan Penjualan Bulanan Toko Lokal

Prophet untuk Peramalan Penjualan Bulanan Toko Lokal

BimaBima
·31 Oktober 2025·12 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

TL;DR

Prophet adalah pustaka peramalan buatan Meta yang cuma butuh dua kolom data: ds untuk tanggal dan y untuk nilai yang mau diramal. Buat penjualan bulanan toko lokal, kamu perlu minimal 24 titik data supaya pola tahunan kebaca, dan idealnya 36 titik ke atas. Efek Lebaran nggak bisa ditangkap pola tahunan biasa karena tanggalnya geser tiap tahun, jadi harus didaftarkan manual lewat tabel hari libur. Hasil ramalannya keluar sebagai yhat plus rentang bawah dan atas, dan rentang itu yang lebih penting dipakai buat keputusan stok daripada satu angka tengah.

Prophet bisa bikin ramalan penjualan bulanan cuma dari dua kolom: tanggal dan nilai. Nggak perlu paham statistik deret waktu buat mulai.

Yang bikin dia cocok buat toko lokal di Indonesia: efek Lebaran bisa dimasukin secara eksplisit. Ini penting, soalnya tanggal Lebaran geser sekitar 11 hari tiap tahun, jadi model musiman biasa nggak bisa nangkap.

Di bawah ini alur lengkapnya pakai data toko_berkah: siapin data, latih model, masukin hari libur, baca hasil, dan ukur seberapa meleset ramalannya.

Apa itu Prophet dan kapan dia cocok dipakai?

Prophet adalah pustaka Python dan R buatan Meta buat peramalan deret waktu. Dia memecah data jadi tiga bagian: tren jangka panjang, pola musiman berulang, dan efek hari libur. Ketiganya dijumlahkan jadi ramalan.

Prophet cocok kalau data kamu punya pola musiman yang jelas, jumlah titik datanya sedang, dan ada hari libur yang berpengaruh besar. Untuk penjualan toko lokal, tiga syarat itu biasanya kepenuhan.

Prophet kurang cocok kalau data kamu kurang dari 24 bulan, atau kalau penjualan kamu dikendalikan hal yang nggak berulang kayak promo besar yang jadwalnya acak. Model ini pada dasarnya sejenis regresi terhadap waktu, jadi dia cuma bisa belajar dari pola yang pernah kelihatan.

Gimana cara siapin data penjualan buat Prophet?

Prophet cuma nerima dua nama kolom, dan namanya nggak bisa diganti: ds buat tanggal, y buat nilai yang mau diramal. Tanggal harus bertipe datetime, nilai harus angka.

  1. Agregasi transaksi jadi bulanan. Satu baris satu bulan, pakai tanggal 1 sebagai penanda bulan.
  2. Pastikan nggak ada bulan yang bolong. Bulan tanpa penjualan tetap harus ada barisnya dengan nilai nol, bukan dihilangin.
  3. Bersihin nilai aneh dulu. Satu bulan dengan omzet 10 kali lipat gara-gara salah input bakal narik tren. Cek dulu outlier-nya.
  4. Ganti nama kolom jadi ds dan y.
import pandas as pd
from prophet import Prophet

df = pd.read_csv("penjualan_bulanan_toko_berkah.csv")

# kolom asli: bulan, omzet
df = df.rename(columns={"bulan": "ds", "omzet": "y"})
df["ds"] = pd.to_datetime(df["ds"])
df = df.sort_values("ds").reset_index(drop=True)

print(df.shape)
print(df.head())

Kalau kamu belum punya Prophet, install dulu:

pip install prophet

Gimana cara latih model Prophet yang pertama?

Model paling dasar cuma tiga baris. Buat data bulanan, matiin pola mingguan dan harian, soalnya nggak ada informasi mingguan di data yang udah diagregasi per bulan.

m = Prophet(
    yearly_seasonality=True,
    weekly_seasonality=False,
    daily_seasonality=False,
    seasonality_mode="multiplicative",
)
m.fit(df)

future = m.make_future_dataframe(periods=6, freq="MS")
forecast = m.predict(future)

print(forecast[["ds", "yhat", "yhat_lower", "yhat_upper"]].tail(6))

Dua pilihan yang perlu kamu pahami:

freq="MS" artinya awal bulan. Kalau kamu pakai freq="D" di data bulanan, Prophet bakal bikin 6 hari ke depan, bukan 6 bulan.

seasonality_mode="multiplicative" artinya efek musiman dihitung sebagai persentase dari tren, bukan tambahan tetap. Buat penjualan yang tumbuh, ini biasanya lebih pas. Kalau omzet toko kamu naik dua kali lipat dalam tiga tahun, lonjakan Lebaran juga ikut membesar, dan mode ini yang nangkap itu.

Gimana masukin efek Lebaran ke dalam model?

Ini bagian yang paling sering dilewatin waktu orang pakai Prophet buat data Indonesia.

Pola tahunan Prophet dihitung dari posisi hari dalam kalender Masehi. Lebaran ngikutin kalender Hijriah, jadi tiap tahun mundur sekitar 11 hari. Buat Prophet, lonjakan Mei 2022 dan Maret 2025 kelihatan sebagai dua kejadian terpisah yang nggak berhubungan.

Solusinya bikin tabel hari libur sendiri:

lebaran = pd.DataFrame({
    "holiday": "lebaran",
    "ds": pd.to_datetime([
        "2022-05-02",
        "2023-04-22",
        "2024-04-10",
        "2025-03-31",
        "2026-03-20",
    ]),
    "lower_window": -30,
    "upper_window": 7,
})

m = Prophet(
    yearly_seasonality=True,
    weekly_seasonality=False,
    daily_seasonality=False,
    seasonality_mode="multiplicative",
    holidays=lebaran,
)
m.fit(df)

lower_window=-30 artinya efeknya mulai kerasa 30 hari sebelum hari H. Buat toko kelontong, belanja Ramadan naik jauh sebelum Lebaran, jadi jendela sebulan itu masuk akal. upper_window=7 nutup minggu setelahnya.

Tanggal 2026 di atas masih perkiraan sampai ada penetapan resmi. Perbarui filenya tiap tahun.

Buat libur nasional lain, Prophet punya jalan pintas:

m.add_country_holidays(country_name="ID")

Fungsi ini ngandalin paket holidays, jadi cek dulu versinya udah mendukung Indonesia atau belum. Cara pakainya ada di dokumentasi resmi Prophet soal hari libur.

Gimana cara baca hasil ramalannya?

Hasil predict punya banyak kolom, tapi yang kepakai sehari-hari cuma empat.

KolomArtinya
dsTanggal yang diramal
yhatNilai ramalan tengah
yhat_lowerBatas bawah rentang ketidakpastian
yhat_upperBatas atas rentang ketidakpastian

Aturan pakainya: buat komunikasi ke manajemen, sebut rentangnya, bukan angka tengahnya. "Perkiraan omzet November antara Rp 44 juta sampai Rp 57 juta" jauh lebih jujur dari "Rp 50,5 juta".

Buat lihat komponennya secara terpisah:

fig1 = m.plot(forecast)
fig2 = m.plot_components(forecast)

Grafik komponen ini yang paling berguna buat diskusi. Dia misahin tren, pola tahunan, dan efek Lebaran jadi tiga garis terpisah, jadi kamu bisa nunjukin ke pemilik toko bagian mana yang naik dan kenapa.

Gimana ngukur seberapa meleset ramalannya?

Jangan percaya model yang belum diuji ke data yang belum pernah dia lihat. Prophet punya alat bawaan buat ini.

from prophet.diagnostics import cross_validation, performance_metrics

df_cv = cross_validation(
    m,
    initial="730 days",
    period="180 days",
    horizon="180 days",
)

df_p = performance_metrics(df_cv)
print(df_p[["horizon", "mape", "rmse"]].head())

Cara bacanya: initial berapa lama data dipakai buat latihan pertama, period seberapa sering titik potongnya digeser, horizon seberapa jauh ke depan yang diuji tiap kali.

Angka yang paling gampang dijelasin ke orang non teknis itu MAPE, rata-rata persentase meleset. MAPE 8% artinya ramalan kamu rata-rata meleset 8% dari angka sebenarnya.

Selalu bandingkan sama pembanding sederhana. Metode paling malas: pakai angka bulan yang sama tahun lalu sebagai ramalan. Kalau Prophet nggak bisa ngalahin metode itu, pakai yang sederhana aja.

Contoh kasus: 45 bulan penjualan toko_berkah

Dataset latihan toko_berkah punya 45 bulan penjualan, dari Januari 2022 sampai September 2025. Omzet bulanan rata-rata Rp 198 juta, dengan bulan terendah Rp 142 juta dan tertinggi Rp 312 juta.

Hasil model setelah efek Lebaran dimasukin:

ModelMAPECatatan
Ramalan malas (bulan sama tahun lalu)15,2%Pembanding dasar
Prophet tanpa hari libur12,7%Lebaran meleset jauh
Prophet dengan tabel Lebaran8,4%Dipakai

Yang menarik ada di grafik komponen. Efek Lebaran ketahan di angka plus 34% di atas garis tren, dan puncaknya jatuh sekitar 12 hari sebelum hari H, bukan di hari H-nya.

Ini nyambung sama pola belanja kebutuhan pokok: orang borong beras, minyak, dan gula dua minggu sebelum Lebaran, terus toko sepi di minggu Lebaran karena banyak yang mudik.

Ramalan enam bulan ke depan buat toko ini:

BulanyhatRentang
Okt 2025Rp 204 jutaRp 181 juta sampai Rp 228 juta
Nov 2025Rp 211 jutaRp 186 juta sampai Rp 237 juta
Des 2025Rp 243 jutaRp 214 juta sampai Rp 274 juta
Jan 2026Rp 196 jutaRp 169 juta sampai Rp 224 juta
Feb 2026Rp 218 jutaRp 188 juta sampai Rp 250 juta
Mar 2026Rp 289 jutaRp 248 juta sampai Rp 333 juta

Maret 2026 melonjak karena Lebaran jatuh di bulan itu. Rentangnya juga paling lebar, yang masuk akal: bulan yang paling nggak biasa juga paling susah diramal.

Buat keputusan stok, angka yang aku pakai bukan Rp 289 juta, tapi batas atasnya. Barang kayak beras dan minyak nggak cepat basi, jadi kelebihan stok lebih murah biayanya dibanding kehabisan di puncak musim. Logika ini yang aku tuangin ke dashboard stok barang.

Kesalahan umum waktu pakai Prophet

  • Pakai data kurang dari 24 bulan. Pola tahunan butuh minimal satu pengulangan penuh biar kebaca. Di bawah itu, hasilnya cuma tren lurus dengan noise.
  • Lupa isi bulan yang kosong. Bulan tanpa baris dianggap nggak ada, bukan nol. Ini bikin tren miring tanpa kamu sadari.
  • Ngeramal terlalu jauh ke depan. Buat data bulanan, 6 bulan masih masuk akal. 24 bulan udah lebih mirip tebakan berhias.
  • Nyebut angka tengah doang ke manajemen. Rentang ketidakpastian itu bagian paling berguna dari Prophet. Jangan dibuang waktu presentasi.
  • Nggak masukin promo besar sebagai hari libur. Kalau kamu ikut Harbolnas tiap tahun, daftarin tanggalnya kayak Lebaran. Kalau nggak, model bakal nganggap lonjakan itu keanehan acak.
  • Langsung otak-atik parameter sebelum data bersih. Naikin changepoint_prior_scale nggak akan nolong kalau ada tiga bulan yang angkanya salah input.

Alur lengkap dari nol sampai grafik pertama ada di panduan quick start resmi Prophet.

FAQ

Butuh berapa banyak data buat pakai Prophet?

Buat data bulanan, minimal 24 titik atau dua tahun, supaya Prophet bisa lihat pola tahunan terulang minimal sekali. Di bawah itu, hasilnya lebih mirip garis tren lurus daripada ramalan musiman. Kalau kamu punya 36 titik ke atas, pola musimannya jauh lebih stabil. Data harian butuh lebih sedikit rentang waktu, tapi tetap idealnya menutup dua siklus tahunan.

Kenapa efek Lebaran nggak ketangkap otomatis sama Prophet?

Karena pola tahunan Prophet dihitung berdasarkan posisi hari dalam kalender Masehi, sementara Lebaran ngikutin kalender Hijriah dan mundur sekitar 11 hari tiap tahun. Buat Prophet, lonjakan bulan Mei 2022 dan Maret 2025 kelihatan sebagai dua kejadian yang nggak berhubungan. Solusinya daftarin tanggal Lebaran tiap tahun secara manual sebagai tabel hari libur.

Apa arti yhat, yhat_lower, dan yhat_upper?

yhat itu nilai ramalan tengah, angka yang paling mungkin menurut model. yhat_lower dan yhat_upper batas bawah dan atas dari rentang ketidakpastian, standarnya 80 persen. Buat keputusan stok, pakai rentangnya, bukan angka tengahnya. Kalau ramalan Oktober 47 juta dengan rentang 41 sampai 54 juta, siapin stok buat skenario 54 juta kalau barangnya awet.

Prophet lebih bagus dari rata-rata bergerak biasa?

Tergantung datanya. Kalau penjualan kamu datar tanpa musiman jelas, rata-rata bergerak sering sama akuratnya dan jauh lebih gampang dijelasin ke atasan. Prophet unggul waktu ada pola musiman kuat, tren yang berubah arah, atau hari libur yang geser tiap tahun. Selalu bandingkan hasilnya sama metode sederhana dulu sebelum mutusin pakai yang mana.

Bisa jalanin Prophet tanpa install apa-apa di laptop?

Bisa. Google Colab dan marimo di molab udah menyediakan Python siap pakai di browser, tinggal jalanin pip install prophet di sel pertama. Cara ini yang paling cepat buat nyoba, apalagi kalau laptop kantor kamu dikunci dan nggak bisa install software. Data cukup diunggah sebagai CSV dua kolom.

Penutup

Tiga hal yang nentuin kualitas ramalan Prophet kamu: jumlah data minimal dua tahun, tabel Lebaran yang diisi manual, dan kebiasaan bandingin hasilnya sama metode sederhana.

Kalau kamu mulai hari ini, cukup siapin file CSV dua kolom berisi omzet bulanan tiga tahun terakhir. Sepuluh baris kode pertama di artikel ini udah cukup buat dapet grafik pertama.

Angka ramalannya baru berguna kalau masuk ke rutinitas kerja. Taruh di kartu terpisah di dashboard rapat mingguan penjualan, biar tiap Senin kamu bisa bandingin ramalan sama kenyataan.

Coba Langsung

Mau praktek langsung? Mulai latihan SQL gratis

Latihan interaktif, langsung di browser.

Buka NgulikSQL →
Bagikan:
Bima
Ditulis oleh

Bima

Founder & Data Professional

Founder Ngulik Data. Passionate about making data analysis accessible for everyone.

Artikel terkait

Pandas groupby: Agregasi Data ala Pivot di Python (2026)
Tips & Trik
20 Juli 2026•9 menit baca

Pandas groupby: Agregasi Data ala Pivot di Python (2026)

groupby ngelompokin baris berdasarkan kolom, lalu ngitung ringkasan per grup kayak total atau rata-rata. Ini pivot-nya pandas.

BimaBima
Pandas to_excel: Ekspor DataFrame ke Excel (2026)
Tips & Trik
18 Juli 2026•8 menit baca

Pandas to_excel: Ekspor DataFrame ke Excel (2026)

to_excel nyimpen DataFrame pandas jadi file Excel .xlsx. Ini cara pakainya, dari satu sheet sampai banyak sheet, plus setelan yang bikin hasilnya rapi.

BimaBima
Pandas read_excel: Baca File Excel di Python
Tips & Trik
16 Juli 2026•8 menit baca

Pandas read_excel: Baca File Excel di Python

pandas read_excel baca file Excel jadi DataFrame, bisa pilih sheet tertentu dan lompatin baris judul yang berantakan. Ini cara pakai plus parameter penting dengan contoh data toko.

BimaBima
Kembali ke Blog
Ngulik Data logoNgulik Data

Platform edukasi data lengkap untuk professionals Indonesia. Belajar SQL, Data Analysis, dan lebih banyak lagi dengan praktek langsung dan feedback real-time.

© 2026 Ngulik Data. Semua hak dilindungi.

TAUTAN
BantuanHargaDatasetBlogAfiliasi
LEGAL
Syarat & KetentuanKebijakan Privasi
Ngulik Data
DatasetLeaderboardBlogStore