- Kemudahan Penggunaan: Prophet dibuat agar intuitif, bahkan bagi pengguna yang tidak memiliki keahlian mendalam dalam analisis deret waktu. Hanya dengan beberapa baris kode, siapa pun dapat membuat dan menginterpretasikan prakiraan.
- Ketahanan: Alat ini dirancang untuk menangani data yang hilang, outlier, dan gangguan tak terduga dengan baik, sehingga cocok untuk kumpulan data dunia nyata yang sering kali berantakan dan tidak lengkap.
- Fleksibilitas: Prophet memungkinkan pengguna untuk menggabungkan acara khusus (seperti hari libur), menyesuaikan musim, dan memodelkan tren pertumbuhan yang jenuh, sehingga memberikan tingkat adaptasi yang tinggi untuk berbagai kasus penggunaan.
Mari kita ingat kembali data penumpang kereta jabodetabek yang telah kita bahas menggunakan regresi linear vs arima (baca disini) , grafik data historicalnya seperti ini :
Kumpulan data yang diperoleh dari API BPS mencakup hampir dua dekade, yang mencatat jumlah penumpang bulanan untuk layanan Jabodetabek. Selama periode ini, data mengungkap pola musiman yang jelas, tren pertumbuhan jangka panjang, dan gangguan signifikan yang disebabkan oleh faktor eksternal seperti pandemi COVID-19. Memahami dinamika ini sangat penting untuk membangun model perkiraan yang akurat.
Prophet milik Facebook menonjol karena kesederhanaan dan fleksibilitasnya. Tidak seperti model tradisional yang memerlukan praproses ekstensif, Prophet dapat menangani data yang hilang, perubahan tren yang tiba-tiba, dan kejadian tidak teratur dengan upaya minimal. Untuk analisis kami, kami akan memanfaatkan kemampuan Prophet untuk memperhitungkan musim tahunan dan menggabungkan dampak pandemi COVID-19 sebagai kejadian khusus.
Persiapan Data:
- Data layanan Jabodetabek diekstraksi dan dibentuk ulang menjadi format panjang dengan ds (tanggal) dan y (jumlah penumpang).
- Baris tahunan (misalnya, "2020-Tahunan") dikecualikan, dan hanya data bulanan yang valid yang disimpan.
Pelatihan Model:
- Model Prophet diinisialisasi dengan yearly_seasonality=True karena data bulanan sering kali menunjukkan pola tahunan.
- Musiman mingguan dan harian dinonaktifkan karena data diagregasi pada tingkat bulanan.
Peramalan:
- Kerangka data masa depan dibuat selama 60 bulan (5 tahun) mulai dari Februari 2025.
- Model memprediksi jumlah penumpang (yhat) beserta interval kepercayaan (yhat_lower, yhat_upper).
Visualisasi:
- Plot prakiraan menunjukkan data historis dan nilai prediksi.
- Plot komponen memecah prakiraan menjadi tren dan musiman.
Output yang Diharapkan
Plot Prakiraan:
- Grafik yang menunjukkan data historis (2006–2025) dan nilai yang diramalkan (2025–2029).
- Interval keyakinan (wilayah yang diarsir) menunjukkan ketidakpastian dalam prediksi.
Plot Komponen:
- Tren: Pertumbuhan atau penurunan jangka panjang dalam jumlah penumpang.
- Musiman: Fluktuasi tahunan dalam permintaan penumpang.
Tabel Prakiraan:
Tabel yang menampilkan nilai yang diprediksi (yhat) dan interval keyakinan untuk setiap bulan dari Februari 2025 hingga Desember 2029.
Koding:
import pandas as pdfrom prophet import Prophetimport matplotlib.pyplot as plt# Step 1: Load and Prepare the Data# Read the CSV filedf = pd.read_csv('railway_passenger_time_series.csv')# Extract Jabodetabek service datajabodetabek_data = df[df['Service'] == 'Jabodetabek'].drop(columns=['Service']).T.reset_index()# Rename columnsjabodetabek_data.columns = ['ds', 'y']# Convert 'ds' to datetime and filter out annual rows (e.g., "2020-Annual")jabodetabek_data['ds'] = pd.to_datetime(jabodetabek_data['ds'], errors='coerce')jabodetabek_data = jabodetabek_data.dropna(subset=['ds'])# Ensure 'y' is numericjabodetabek_data['y'] = pd.to_numeric(jabodetabek_data['y'], errors='coerce')# Filter data up to January 2025jabodetabek_data = jabodetabek_data[jabodetabek_data['ds'] <= '2025-01-01']# Step 2: Train the Prophet Modelmodel = Prophet(yearly_seasonality=True, # Include yearly seasonalityweekly_seasonality=False, # No weekly seasonality for monthly datadaily_seasonality=False # No daily seasonality for monthly data)# Fit the modelmodel.fit(jabodetabek_data)# Step 3: Create Future Dataframe and Forecastfuture = model.make_future_dataframe(periods=60, freq='ME') # Forecast for 5 years (60 months)forecast = model.predict(future)# Step 4: Visualize the Resultsfig1 = model.plot(forecast)plt.title('Jabodetabek Passenger Forecast (2006-2029)')plt.xlabel('Year')plt.ylabel('Passenger Numbers')plt.show()# Plot components (trend, seasonality)fig2 = model.plot_components(forecast)plt.show()# Display the forecasted values for 2025-2029forecast_2025_2029 = forecast[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail(60)print(forecast_2025_2029)
Hasil :
Hasil tail :
ds yhat yhat_lower yhat_upper 229 2025-01-31 22451.631031 15440.144109 29361.157546 230 2025-02-28 23999.078741 16845.089824 31089.854145 231 2025-03-31 23225.021768 16544.920033 30066.264181 232 2025-04-30 23870.905060 16805.316271 30905.879794 233 2025-05-31 23402.956246 16474.699365 30187.172821 234 2025-06-30 24120.125777 17157.001159 30418.358445 235 2025-07-31 23888.080556 16934.558451 31017.041799 236 2025-08-31 23904.987681 16805.391752 31059.229315 237 2025-09-30 24854.486510 17555.845108 31810.723753 238 2025-10-31 24479.124459 17603.378603 31406.030541 239 2025-11-30 25006.244566 18504.362793 32312.319654 240 2025-12-31 24472.070291 17982.850274 31406.036502 241 2026-01-31 22982.607599 16491.758553 29772.497698 242 2026-02-28 24464.093765 18142.833021 31424.461212 243 2026-03-31 23750.375704 17160.980347 30586.077784 244 2026-04-30 24392.938939 17264.905034 31087.762740 245 2026-05-31 23897.556147 17077.722856 30573.514143 246 2026-06-30 24626.808146 17513.521228 31315.970905 247 2026-07-31 24384.127135 17311.167621 31412.730950 248 2026-08-31 24418.093992 18014.912413 31497.151318 249 2026-09-30 25360.545525 18335.154109 32481.120252 250 2026-10-31 24983.318146 18138.620150 31970.364856 251 2026-11-30 25517.125917 18572.185589 32722.039987 252 2026-12-31 24978.100201 18273.668282 32320.002865 253 2027-01-31 23513.794370 16636.276423 30686.349968 254 2027-02-28 24928.811443 18659.272096 31367.108419 255 2027-03-31 24276.603019 17364.186683 31292.700111 256 2027-04-30 24914.469292 18254.638446 31836.144357 257 2027-05-31 24392.061269 17726.749857 31136.037728 258 2027-06-30 25133.291256 18369.215986 32338.509696 259 2027-07-31 24880.374239 17699.576369 31723.839446 260 2027-08-31 24931.548210 17807.706023 31768.386807 261 2027-09-30 25866.290552 18688.785644 32765.030938 262 2027-10-31 25487.662778 18547.268736 32200.049039 263 2027-11-30 26027.800164 18939.150978 32740.716477 264 2027-12-31 25484.138501 18764.552470 32142.298620 265 2028-01-31 24045.172653 17584.921872 31246.249890 266 2028-02-29 25563.456007 18649.284587 32250.598585 267 2028-03-31 24730.278448 17872.570565 31010.281189 268 2028-04-30 25378.111045 18655.969502 32175.982478 269 2028-05-31 24937.976760 17705.194867 32197.267059 270 2028-06-30 25642.963466 18512.035161 32474.564235 271 2028-07-31 25421.945237 18536.590710 32599.949187 272 2028-08-31 25421.962434 18257.523239 31924.556628 273 2028-09-30 26377.840860 19914.092614 33949.161482 274 2028-10-31 26004.804122 19020.287200 32757.327997 275 2028-11-30 26524.882533 19983.856260 33419.886342 276 2028-12-31 25995.765573 18993.449527 32793.307560 277 2029-01-31 24481.354858 18099.854825 31596.312735 278 2029-02-28 26028.802567 19448.611419 33140.922160 279 2029-03-31 25254.745595 18242.526338 32384.898037 280 2029-04-30 25900.628886 19368.684759 32823.970784 281 2029-05-31 25432.680073 18489.739028 32647.522948 282 2029-06-30 26149.849604 19299.210147 33351.096326 283 2029-07-31 25917.804382 19027.711353 32984.599558 284 2029-08-31 25934.711508 19106.381838 32731.517489 285 2029-09-30 26884.210336 20822.804731 34047.535226 286 2029-10-31 26508.848286 19558.999655 33291.315736 287 2029-11-30 27035.968392 19849.067232 34015.745508 288 2029-12-31 26501.794117 19895.672021 33173.750342
Saat menggunakan Facebook Prophet untuk meramalkan data deret waktu, library bawaan python menghasilkan beberapa keluaran (default) yang membantu dalam memahami hasil. Ini termasuk plot ramalan, komponen tren, dan komponen musiman (misalnya, musiman tahunan). Mari kita uraikan masing-masing elemen ini dan jelaskan signifikansinya dalam konteks ramalan penumpang kereta api Anda untuk layanan Jabodetabek.
1. Plot Ramalan
Plot ramalan adalah visualisasi utama yang dihasilkan oleh Prophet. Ini menunjukkan:
- Data Historis: Jumlah penumpang aktual dari tahun 2006 hingga Januari 2025.
- Nilai Ramalan: Jumlah penumpang yang diprediksi dari Februari 2025 hingga Desember 2029.
- Interval Keyakinan: Daerah yang diarsir di sekitar nilai ramalan, yang menunjukkan rentang di mana model mengharapkan nilai aktual turun (misalnya, interval keyakinan 80% atau 95%).
Wawasan Utama dari Plot Ramalan:
- Kontinuitas: Ramalan harus selaras dengan tren historis. Jika terdapat penyimpangan tajam antara data historis dan prakiraan, hal tersebut dapat mengindikasikan adanya masalah pada model atau asumsi.
- Ketidakpastian: Interval keyakinan yang lebih lebar menunjukkan ketidakpastian yang lebih tinggi dalam prediksi, terutama saat kita bergerak lebih jauh ke masa depan.
- Pola Pertumbuhan: Jika prakiraan menunjukkan pertumbuhan, penurunan, atau stabilisasi yang stabil, hal tersebut mencerminkan tren yang mendasari dalam data.
Contoh Interpretasi:
- Jika prakiraan memprediksi peningkatan yang stabil dalam jumlah penumpang Jabodetabek, hal ini dapat mengindikasikan permintaan yang meningkat karena urbanisasi, peningkatan infrastruktur, atau peningkatan ketergantungan pada transportasi umum.
- Jika interval keyakinan melebar secara signifikan setelah tahun 2027, hal tersebut menunjukkan bahwa prediksi jangka panjang kurang dapat diandalkan karena potensi faktor eksternal (misalnya, perubahan ekonomi, pergeseran kebijakan).
2. Komponen Tren
Komponen tren menunjukkan pergerakan jangka panjang dalam data, tidak termasuk fluktuasi musiman. Prophet secara otomatis menguraikan deret waktu menjadi tren dan musiman.
Fitur Utama Tren:
Pola Pertumbuhan:
- Pertumbuhan Linier: Tren garis lurus menunjukkan pertumbuhan atau penurunan yang konsisten dari waktu ke waktu.
- Pertumbuhan Logistik: Tren yang jenuh (misalnya, mendatar) menunjukkan bahwa jumlah penumpang mungkin mendekati kapasitas maksimum.
- Titik Perubahan: Pergeseran tiba-tiba pada garis tren menunjukkan peristiwa penting (misalnya, perubahan kebijakan, pandemi, atau peningkatan infrastruktur).
Dampak Titik Perubahan:
- Prophet mengidentifikasi titik perubahan saat tren berubah arah. Misalnya, selama pandemi COVID-19, Anda mungkin melihat penurunan tajam dalam tren, diikuti oleh pemulihan.
- Anda dapat menyesuaikan parameter changepoint_prior_scale untuk mengontrol seberapa sensitif model terhadap perubahan mendadak.
Contoh Interpretasi:
- Jika tren menunjukkan kemiringan ke atas yang stabil, itu menunjukkan bahwa jumlah penumpang Jabodetabek telah tumbuh secara konsisten selama bertahun-tahun.
- Jika ada tren yang mendatar setelah tahun 2023, itu dapat menunjukkan bahwa jumlah penumpang mulai stabil, mungkin karena jenuhnya pasar atau perluasan infrastruktur yang terbatas.
3. Musiman Tahunan / Yearly
Musiman tahunan menangkap pola berulang yang terjadi dalam satu tahun. Misalnya, jumlah penumpang mungkin melonjak selama musim liburan (misalnya, Lebaran, Natal) dan turun selama bulan-bulan lainnya.
Fitur Utama Musiman Tahunan:
Puncak dan Palung:
- Puncak dalam plot musiman tahunan menunjukkan bulan-bulan dengan jumlah penumpang yang lebih tinggi dari rata-rata.
- Palung mewakili bulan-bulan dengan jumlah penumpang yang lebih rendah dari rata-rata.
- Amplitudo: Besarnya puncak dan palung mencerminkan kekuatan efek musiman. Amplitudo yang lebih besar menunjukkan musiman yang lebih jelas.
- Konsistensi: Jika musiman tahunan tetap stabil dari waktu ke waktu, itu menunjukkan pola yang dapat diprediksi. Jika berubah, itu dapat menunjukkan perilaku yang berkembang (misalnya, perubahan kebiasaan bepergian).
Contoh Interpretasi:
Jika musiman tahunan menunjukkan puncak pada bulan Juni dan Desember, itu mungkin sesuai dengan periode perjalanan liburan seperti Lebaran (Juni) dan Natal/Tahun Baru (Desember). Jika amplitudo meningkat seiring waktu, hal ini menunjukkan bahwa efek musiman menjadi lebih jelas, mungkin karena meningkatnya pariwisata atau pola migrasi.
4. Menggabungkan Wawasan
Dengan menganalisis plot perkiraan, tren, dan musim tahunan secara bersamaan, Anda dapat mengembangkan pemahaman yang komprehensif tentang data penumpang Jabodetabek:
Contoh Skenario:
- Plot Perkiraan: Perkiraan memprediksi pertumbuhan yang stabil dalam jumlah penumpang dari tahun 2025 hingga 2029, dengan interval keyakinan sedikit melebar setelah tahun 2027.
- Tren: Tren menunjukkan pertumbuhan ke atas yang konsisten, dengan sedikit mendatar setelah tahun 2023, yang menunjukkan potensi stabilisasi.
- Musiman Tahunan: Musim tahunan menunjukkan lonjakan pada bulan Juni dan Desember, kemungkinan karena perjalanan liburan. Amplitudo lonjakan ini telah meningkat seiring waktu, yang menunjukkan efek musiman yang lebih kuat.
Kesimpulan:
- Layanan kereta api Jabodetabek diperkirakan akan terus mengalami pertumbuhan permintaan penumpang, didorong oleh urbanisasi dan ketergantungan pada transportasi umum.
- Pola musiman tetap kuat, dengan permintaan puncak selama periode liburan. Perencanaan infrastruktur harus memperhitungkan fluktuasi musiman ini untuk memastikan kelancaran operasi.
- Prakiraan jangka panjang setelah tahun 2027 harus ditafsirkan dengan hati-hati karena meningkatnya ketidakpastian.
Mau mencoba data untuk sumatera seperti dibawah ini ?
Selamat Belajar !
-Powered by QWEN AI-