Data deret waktu adalah data yang dikumpulkan pada subjek yang sama di titik waktu yang berbeda, seperti PDB suatu negara per tahun, harga saham suatu perusahaan dalam kurun waktu tertentu, atau detak jantung Anda yang direkam setiap detik. Data apa pun yang dapat Anda tangkap secara berkelanjutan pada interval waktu berbeda merupakan bentuk data deret waktu.
Di bawah ini adalah contoh data deret waktu yang menunjukkan jumlah kasus COVID-19 di Amerika Serikat sebagaimana dilaporkan ke CDC. Sumbu x menunjukkan berlalunya waktu dan sumbu y merepresentasikan jumlah kasus COVID-19 dalam ribuan.
Di sisi lain, dataset yang lebih konvensional yang menyimpan informasi pada satu titik waktu, seperti informasi tentang pelanggan, produk, dan perusahaan, dikenal sebagai data penampang (cross-sectional). Contohnya ditunjukkan pada dataset di bawah ini, melacak negara-negara dengan kasus COVID-19 terbanyak dalam periode waktu yang tetap dan konsisten untuk semua negara.
Tidak terlalu sulit membedakan perbedaan antara data penampang dan deret waktu karena tujuan analisis untuk keduanya sangat berbeda. Dalam contoh kita, pertama-tama kita tertarik melacak kasus COVID-19 selama periode waktu tertentu, sebelum menganalisis kasus COVID-19 per negara dalam periode waktu tetap.
Dataset dunia nyata yang khas kemungkinan merupakan hibrida dari format-format ini. Misalnya, kita dapat memikirkan peritel seperti Walmart yang menjual ribuan produk setiap hari. Jika Anda menganalisis penjualan per produk pada hari tertentu, ini akan menjadi analisis penampang. Anda mungkin ingin mengetahui item terlaris nomor satu pada Malam Natal, misalnya. Sebaliknya, jika Anda ingin mengetahui penjualan satu item tertentu selama jangka waktu (misalnya 5 tahun terakhir), ini akan menjadi analisis deret waktu.
Tujuannya berbeda saat menganalisis data deret waktu dan penampang, dan dataset dunia nyata kemungkinan merupakan hibrida dari keduanya, baik deret waktu maupun penampang.
Apa itu Peramalan Deret Waktu?
Peramalan deret waktu persis seperti kedengarannya; memprediksi nilai yang tidak diketahui. Peramalan deret waktu melibatkan pengumpulan data historis, menyiapkannya agar dapat diproses algoritme, lalu memprediksi nilai masa depan berdasarkan pola yang dipelajari dari data historis.
Ada banyak alasan mengapa perusahaan mungkin tertarik meramalkan nilai masa depan, seperti PDB, penjualan bulanan, persediaan, pengangguran, dan suhu global:
Peritel mungkin tertarik memprediksi penjualan masa depan pada level SKU (stock keeping unit) untuk perencanaan dan penganggaran.
Pedagang kecil mungkin ingin meramalkan penjualan per toko, sehingga dapat menjadwalkan sumber daya yang tepat (lebih banyak orang saat ramai dan sebaliknya).
Perusahaan perangkat lunak besar seperti Google mungkin ingin mengetahui jam tersibuk dalam sehari atau hari tersibuk dalam seminggu agar dapat menjadwalkan sumber daya server sesuai kebutuhan.
Departemen kesehatan mungkin tertarik memprediksi akumulasi vaksinasi COVID yang diberikan sehingga mereka dapat memperkirakan kapan kekebalan kelompok diperkirakan mulai terjadi.
Jenis Peramalan Deret Waktu
Ada tiga jenis peramalan deret waktu. Penggunaan yang tepat bergantung pada tipe data yang Anda tangani dan kasus penggunaannya:
Peramalan Univariat
Deret waktu univariat, seperti namanya, adalah deret dengan satu variabel yang bergantung pada waktu. Misalnya, jika Anda melacak nilai suhu per jam untuk suatu wilayah tertentu dan ingin meramalkan suhu masa depan menggunakan suhu historis, ini adalah peramalan deret waktu univariat. Data Anda mungkin terlihat seperti ini:
Peramalan Multivariat
Di sisi lain, deret waktu multivariat memiliki lebih dari satu variabel yang bergantung pada waktu. Setiap variabel tidak hanya bergantung pada nilai masa lalunya sendiri tetapi juga memiliki ketergantungan pada variabel lain. Ketergantungan ini digunakan untuk meramalkan nilai masa depan.
Pertimbangkan contoh di atas dan misalkan dataset kita mencakup atribut terkait cuaca lainnya selama periode waktu yang sama, seperti persentase kelembapan, titik embun, kecepatan angin, dan sebagainya, bersama dengan nilai suhu. Dalam hal ini, ada beberapa variabel yang perlu dipertimbangkan untuk memprediksi suhu secara optimal. Deret seperti ini termasuk dalam kategori deret waktu multivariat. Dataset Anda sekarang akan terlihat seperti ini:
Anda masih meramalkan nilai suhu untuk masa depan tetapi kini Anda dapat menggunakan informasi lain yang tersedia dalam ramalan karena kita mengasumsikan nilai suhu juga akan bergantung pada faktor-faktor ini.
Sumber Gambar: Van Nguyen
Saat kita menangani peramalan deret waktu multivariat, variabel input dapat berupa dua jenis:
Eksogen: Variabel input yang tidak dipengaruhi oleh variabel input lain dan yang menjadi dasar variabel keluaran bergantung.
Endogen: Variabel input yang dipengaruhi oleh variabel input lain dan yang menjadi dasar variabel keluaran bergantung.
Tutorial ini akan membahas beberapa model klasik tetapi tidak semuanya mendukung peramalan deret waktu multivariat. Dalam situasi seperti ini, model pembelajaran mesin bisa menjadi solusi karena Anda dapat memodelkan masalah peramalan deret waktu apa pun dengan regresi. Kita akan melihat contohnya nanti dalam tutorial ini.
Metode Peramalan Deret Waktu
Peramalan deret waktu secara umum dapat dikategorikan ke dalam kategori berikut:
Model Klasik/Statistik — Moving Averages, Exponential Smoothing, ARIMA, SARIMA, TBATS
Machine Learning — Linear Regression, XGBoost, Random Forest, atau model ML apa pun dengan metode reduksi
Deep Learning — RNN, LSTM
Tutorial ini berfokus pada dua metode pertama: model klasik/statistik dan machine learning. Metode deep learning berada di luar cakupan tutorial ini.
Model Statistik
Dalam peramalan deret waktu menggunakan model statistik, ada beberapa algoritme populer dan diterima luas. Masing-masing memiliki modalitas matematis berbeda dan hadir dengan serangkaian asumsi yang harus dipenuhi. Tutorial ini tidak akan membahas konsep matematis secara mendalam, melainkan hanya memberikan intuisi yang semoga bermanfaat.
ARIMA
ARIMA adalah salah satu metode klasik paling populer untuk peramalan deret waktu. Singkatan dari autoregressive integrated moving average dan merupakan jenis model yang meramalkan deret waktu tertentu berdasarkan nilai masa lalunya sendiri, yakni lag-nya sendiri dan galat ramalan yang tertunda. ARIMA terdiri dari tiga komponen:
Autoregression (AR): mengacu pada model yang menunjukkan variabel yang berubah meregresi pada nilai tertunda atau nilai sebelumnya sendiri.
Integrated (I): merepresentasikan pembedaan observasi mentah agar deret waktu menjadi stasioner (yakni, nilai data diganti dengan selisih antara nilai data dan nilai sebelumnya).
Moving average (MA): memasukkan ketergantungan antara suatu observasi dan galat residual dari model moving average yang diterapkan pada observasi tertunda.
Bagian "AR" dari ARIMA menunjukkan bahwa variabel yang berkembang dan menjadi fokus diregresikan pada nilai tertunda (yakni, yang diamati sebelumnya) miliknya sendiri. Bagian "MA" menunjukkan bahwa galat regresi sebenarnya merupakan kombinasi linear dari istilah galat yang nilainya terjadi secara bersamaan dan pada berbagai waktu di masa lalu. Huruf "I" (untuk "integrated") menunjukkan bahwa nilai data telah diganti dengan selisih antara nilainya dan nilai sebelumnya (dan proses pembedaan ini mungkin dilakukan lebih dari sekali). Tujuan masing-masing fitur ini adalah membuat model sebaik mungkin menyesuaikan data.
SARIMA
Perluasan ARIMA yang mendukung pemodelan langsung komponen musiman dari deret disebut SARIMA. Masalah dengan model ARIMA adalah tidak mendukung data musiman, yaitu deret waktu dengan siklus berulang. ARIMA mengharapkan data yang tidak musiman atau komponennya musiman telah dihilangkan, misalnya disesuaikan secara musiman melalui metode seperti pembedaan musiman. SARIMA menambahkan tiga hiperparameter baru untuk menentukan autoregression (AR), differencing (I), dan moving average (MA) untuk komponen musiman dari deret.
Peramalan menggunakan model SARIMA
Exponential Smoothing
Exponential smoothing adalah metode peramalan deret waktu untuk data univariat. Dapat diperluas untuk mendukung data dengan tren atau komponen musiman. Dapat digunakan sebagai alternatif keluarga model ARIMA yang populer.
Exponential smoothing pada data deret waktu memberikan bobot yang menurun secara eksponensial dari observasi terbaru ke terlama. Semakin lama data, semakin kecil bobot yang diberikan, sedangkan data yang lebih baru diberikan bobot lebih besar
Exponential smoothing sederhana (tunggal) menggunakan rata-rata bergerak berbobot dengan bobot yang menurun secara eksponensial.
Holt's exponential smoothing biasanya lebih andal untuk menangani data yang menunjukkan tren.
Triple exponential smoothing (disebut juga Multiplicative Holt-Winters) lebih andal untuk tren parabola atau data yang menunjukkan tren dan musiman.
Model TBATS diperuntukkan data deret waktu dengan multi-musiman. Misalnya, data penjualan ritel dapat memiliki pola harian dan mingguan, serta pola tahunan.
Pada TBATS, transformasi Box-Cox diterapkan pada deret waktu asli, lalu ini dimodelkan sebagai kombinasi linear dari tren yang dihaluskan secara eksponensial, komponen musiman, dan komponen ARMA.
Peramalan menggunakan TBATS
Machine Learning
Jika Anda tidak ingin menggunakan model statistik atau kinerjanya kurang baik, Anda dapat mencoba metode ini. Machine learning adalah cara alternatif untuk memodelkan data deret waktu guna peramalan. Dalam metode ini, kita mengekstrak fitur dari tanggal untuk ditambahkan ke "variabel X" dan nilai deret waktu adalah "variabel y". Mari lihat contohnya:
Untuk keperluan tutorial ini, saya menggunakan dataset penumpang maskapai AS yang tersedia untuk diunduh dari Kaggle.
Contoh Dataset
Kita dapat mengekstrak fitur dari kolom "Date" seperti bulan, tahun, minggu dalam tahun, dan sebagainya. Lihat contoh:
# extract month and year from dates
data['Month']=[i.month for i in data['Date']]
data['Year']=[i.year for i in data['Date']]# create a sequence of numbers
data['Series']= np.arange(1,len(data)+1)# drop unnecessary columns and re-arrange
data.drop(['Date','MA12'], axis=1, inplace=True)
data = data[['Series','Year','Month','Passengers']]# check the head of the dataset
data.head()Didukung oleh
Baris sampel setelah mengekstrak fitur
Hal yang perlu diperhatikan di sini adalah bahwa train-test-split untuk data deret waktu bersifat khusus. Karena Anda tidak dapat mengubah urutan tabel, Anda harus memastikan tidak melakukan pengambilan sampel secara acak karena Anda ingin data uji berisi titik-titik yang berada di masa depan dari titik-titik dalam data latih (waktu selalu bergerak maju).
# split data into train-test set
train = data[data['Year']<1960]
test = data[data['Year']>=1960]# check shape
train.shape, test.shape
>>>((132,4),(12,4))Didukung oleh
Sekarang setelah kita melakukan train-test-split, kita siap melatih model machine learning pada data latih, menilainya pada data uji, dan mengevaluasi kinerja model kita. Dalam contoh ini, saya akan menggunakan PyCaret; sebuah library machine learning open-source dan low-code di Python yang mengotomatiskan alur kerja machine learning. Untuk menggunakan PyCaret, Anda harus memasangnya menggunakan pip.
Model terbaik menggunakan validasi silang 3 lipatan berdasarkan Mean Absolute Error (MAE) adalah Leased Angle Regression. Sekarang kita dapat menggunakan model ini untuk meramalkan masa depan. Untuk itu, kita harus membuat "variabel X" di masa depan. Ini dapat dilakukan dengan membuat tanggal masa depan lalu mengekstrak fitur darinya.
Karena kita telah melatih model pada data hingga tahun 1960, mari prediksi lima tahun ke depan sampai 1965. Untuk menggunakan model final kita untuk menghasilkan prediksi masa depan, pertama kita perlu membuat dataset yang terdiri dari kolom Month, Year, Series pada tanggal masa depan. Kode di bawah ini membuat dataset "X" masa depan.
future_dates = pd.date_range(start ='1961-01-01', end ='1965-01-01', freq ='MS')
future_df = pd.DataFrame()
future_df['Month']=[i.month for i in future_dates]
future_df['Year']=[i.year for i in future_dates]
future_df['Series']= np.arange(145,(145+len(future_dates)))
future_df.head()Didukung oleh
Baris sampel dari future_df
Sekarang kita dapat menggunakan future_df untuk membuat prediksi:
predictions_future = predict_model(best, data=future_df)
predictions_future.head()Didukung oleh
Penumpang maskapai AS Aktual (1949–1960) dan Diprediksi (1961–1964)
Ada beberapa hal penting untuk dicatat di sini. Kapan pun Anda menangani deret waktu univariat, Anda selalu dapat mengonversinya menjadi masalah regresi dan menyelesaikannya seperti dalam contoh ini. Namun, Anda harus berhati-hati mengenai validasi silang. Anda tidak dapat melakukan validasi silang acak pada model deret waktu dan Anda harus menggunakan teknik yang sesuai untuk deret waktu. Dalam contoh ini, PyCaret menggunakan TimeSeriesSplit dari library scikit-learn.
Kerangka Python untuk Peramalan
Facebook Prophet
Prophet adalah perangkat lunak open-source yang dirilis oleh tim Core Data Science Facebook. Tersedia untuk diunduh di CRAN dan PyPI.
Prophet adalah prosedur untuk meramalkan data deret waktu berdasarkan model aditif di mana tren nonlinier dipasang dengan musiman tahunan, mingguan, dan harian, ditambah efek hari libur. Paling baik bekerja dengan deret waktu yang memiliki efek musiman kuat dan beberapa musim data historis. Prophet tangguh terhadap data hilang dan pergeseran tren, serta umumnya menangani pencilan dengan baik.
Untuk mempelajarinya lebih lanjut, lihat tautan ini.
Peramalan menggunakan FB Prophet
sktime
sktime adalah kerangka kerja open-source dan terpadu untuk machine learning dengan deret waktu. Ia menyediakan platform yang mudah digunakan, fleksibel, dan modular untuk beragam tugas machine learning deret waktu. Menawarkan antarmuka yang kompatibel dengan scikit-learn dan alat komposisi model, dengan tujuan membuat ekosistem lebih mudah digunakan dan lebih interoperabel secara keseluruhan.
Untuk mempelajari lebih lanjut tentang sktime, lihat tautan ini.
pmdarima
Pmdarima adalah library statistik yang dirancang untuk mengisi kekosongan dalam kemampuan analisis deret waktu Python. Ini mencakup:
Padanan fungsionalitas auto.arima milik R
Kumpulan uji statistik untuk stasioneritas dan musiman
Decomposisi deret waktu musiman
Utilitas validasi silang
Koleksi kaya dataset deret waktu bawaan untuk prototyping dan contoh
Untuk mempelajari lebih lanjut tentang pmdarima, lihat halaman ini.
Kats
Kats adalah proyek open-source hebat lainnya dari Facebook, yang dirilis oleh tim Infrastructure Data Science mereka. Tersedia untuk diunduh di PyPI.
Kats adalah toolkit untuk menganalisis data deret waktu; kerangka kerja yang ringan, mudah digunakan, dan dapat digeneralisasi untuk melakukan analisis deret waktu. Kats bertujuan menyediakan one-stop shop untuk analisis deret waktu, termasuk deteksi, peramalan, ekstraksi/embedding fitur, dan analisis multivariat, dan lain-lain.
Peramalan menggunakan KATS
Untuk mempelajari lebih lanjut tentang KATS, lihat tautan ini.
Orbit
Orbit adalah proyek open-source luar biasa dari Uber. Ini adalah library Python untuk peramalan deret waktu Bayesian. Menyediakan antarmuka initialize-fit-predict yang familier dan intuitif untuk tugas deret waktu, sambil memanfaatkan bahasa pemrograman probabilistik di balik layar.
Peramalan menggunakan Orbit
Untuk mempelajari lebih lanjut tentang Orbit, lihat tautan ini.
PyCaret
PyCaret adalah library machine learning open-source dan low-code di Python yang mengotomatiskan alur kerja machine learning. Dengan PyCaret, Anda menghabiskan lebih sedikit waktu untuk ngoding dan lebih banyak waktu untuk analisis. Anda dapat melatih model, menganalisisnya, beriterasi lebih cepat dari sebelumnya, dan melakukan deployment seketika sebagai REST API atau bahkan membangun aplikasi ML front-end sederhana, semuanya dari Notebook favorit Anda.
Arsitektur Modul Time Series PyCaret. Dikembangkan oleh Pengembang Utama Nikhil Gupta.
Berikutnya, kita akan melihat contoh tugas peramalan deret waktu end-to-end menggunakan library PyCaret.
Contoh End-to-end
Modul deret waktu PyCaret tersedia dalam versi beta, Anda dapat mengunduhnya dari pip.
Eksperimen di PyCaret dimulai menggunakan fungsi setup. Fungsi ini menangani semua langkah prapemrosesan, train-test-split, strategi validasi silang, dan beberapa tugas lainnya.
from pycaret.time_series import*
s = setup(data, session_id =123)Didukung oleh
Keluaran dari fungsi setup
Exploratory Data Analysis (EDA)
Untuk EDA data deret waktu univariat, ada beberapa hal yang bisa dan sebaiknya Anda lakukan.
Untuk penggunaan model klasik dan statistik, Anda dapat menjalankan beberapa uji statistik. Ada fungsi di PyCaret yang melakukannya untuk Anda.
Keluaran dari fungsi plot_model<c/entre> ## Pelatihan dan Pemilihan Model ## Untuk melatih banyak model dan memilih satu di antaranya, kita hanya menjalankan satu baris kode. best = compare_models() Keluaran dari fungsi compare_models
PyCaret telah melatih lebih dari 25 model menggunakan validasi silang yang sesuai untuk deret waktu dan menyajikan daftar model dari performa tertinggi hingga terendah. Model terbaik berdasarkan eksperimen ini untuk dataset ini adalah Exponential Smoothing, dengan mean absolute error sebesar 7,781.
Analisis Model
Sebelum kita melakukan deployment model ini untuk menghasilkan prediksi masa depan, kita dapat melihat beberapa plot analisis untuk mengomentari kualitas model kita.
plot_model(best, plot ='forecast', data_kwargs ={'fh':24})Didukung oleh
Pada tahap ini, kita siap memfinalkan model dan menyimpannya untuk digunakan di masa mendatang.
# finalize model
final_best = finalize_model(best)# save model
final_best = finalize_model(best)Didukung oleh
Untuk memuat file ini kembali dan menghasilkan prediksi pada data masa depan:
# load model
loaded_model = load_model('my_best_model')# generate predictions for the next 48 months
predict_model(loaded_model, fh =48)Didukung oleh
Keluaran terpotong
Kesimpulan
Peramalan deret waktu adalah keterampilan yang sangat berguna untuk dipelajari. Banyak masalah kehidupan nyata bersifat deret waktu. Peramalan memiliki beragam aplikasi di berbagai industri, dengan banyak penerapan praktis termasuk: peramalan cuaca, peramalan ekonomi, peramalan layanan kesehatan, peramalan keuangan, peramalan ritel, peramalan bisnis, studi lingkungan, studi sosial, dan lainnya.
Pada dasarnya, data historis apa pun dengan interval yang konsisten dapat dianalisis dengan metode analisis deret waktu yang mengarah ke tugas peramalan yang belajar dari data historis dan mencoba memprediksi masa depan. Sebagai penutup, ada tiga kategori luas untuk peramalan deret waktu:
Model Statistik - Exponential smoothing, ARIMA, SARIMA, TBATS, dll.
Machine Learning - Linear Regression, XGBoost, Random Forest, dll.
Deep Learning - RNN, LSTM
Jika Anda ingin semakin membangun pengetahuan dan keterampilan dalam peramalan deret waktu, lihat jalur hebat "Time Series with Python" oleh Datacamp. Dalam jalur ini, Anda akan belajar memanipulasi data deret waktu menggunakan pandas, bekerja dengan library statistik termasuk NumPy dan statsmodels untuk menganalisis data, serta mengembangkan keterampilan visualisasi menggunakan Matplotlib, SciPy, dan seaborn. Pada akhir jalur ini, Anda akan mengetahui cara meramalkan masa depan menggunakan model kelas ARIMA dan menghasilkan prediksi serta wawasan menggunakan model machine learning.
Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Data deret waktu adalah data yang dikumpulkan pada subjek yang sama di titik waktu yang berbeda, seperti PDB suatu negara per tahun, harga saham suatu perusahaan dalam kurun waktu tertentu, atau detak jantung Anda yang direkam setiap detik. Data apa pun yang dapat Anda tangkap secara berkelanjutan pada interval waktu berbeda merupakan bentuk data deret waktu.
Di bawah ini adalah contoh data deret waktu yang menunjukkan jumlah kasus COVID-19 di Amerika Serikat sebagaimana dilaporkan ke CDC. Sumbu x menunjukkan berlalunya waktu dan sumbu y merepresentasikan jumlah kasus COVID-19 dalam ribuan.
Di sisi lain, dataset yang lebih konvensional yang menyimpan informasi pada satu titik waktu, seperti informasi tentang pelanggan, produk, dan perusahaan, dikenal sebagai data penampang (cross-sectional). Contohnya ditunjukkan pada dataset di bawah ini, melacak negara-negara dengan kasus COVID-19 terbanyak dalam periode waktu yang tetap dan konsisten untuk semua negara.
Tidak terlalu sulit membedakan perbedaan antara data penampang dan deret waktu karena tujuan analisis untuk keduanya sangat berbeda. Dalam contoh kita, pertama-tama kita tertarik melacak kasus COVID-19 selama periode waktu tertentu, sebelum menganalisis kasus COVID-19 per negara dalam periode waktu tetap.
Dataset dunia nyata yang khas kemungkinan merupakan hibrida dari format-format ini. Misalnya, kita dapat memikirkan peritel seperti Walmart yang menjual ribuan produk setiap hari. Jika Anda menganalisis penjualan per produk pada hari tertentu, ini akan menjadi analisis penampang. Anda mungkin ingin mengetahui item terlaris nomor satu pada Malam Natal, misalnya. Sebaliknya, jika Anda ingin mengetahui penjualan satu item tertentu selama jangka waktu (misalnya 5 tahun terakhir), ini akan menjadi analisis deret waktu.
Tujuannya berbeda saat menganalisis data deret waktu dan penampang, dan dataset dunia nyata kemungkinan merupakan hibrida dari keduanya, baik deret waktu maupun penampang.
Apa itu Peramalan Deret Waktu?
Peramalan deret waktu persis seperti kedengarannya; memprediksi nilai yang tidak diketahui. Peramalan deret waktu melibatkan pengumpulan data historis, menyiapkannya agar dapat diproses algoritme, lalu memprediksi nilai masa depan berdasarkan pola yang dipelajari dari data historis.
Ada banyak alasan mengapa perusahaan mungkin tertarik meramalkan nilai masa depan, seperti PDB, penjualan bulanan, persediaan, pengangguran, dan suhu global:
Jenis Peramalan Deret Waktu
Ada tiga jenis peramalan deret waktu. Penggunaan yang tepat bergantung pada tipe data yang Anda tangani dan kasus penggunaannya:
Peramalan Univariat
Deret waktu univariat, seperti namanya, adalah deret dengan satu variabel yang bergantung pada waktu. Misalnya, jika Anda melacak nilai suhu per jam untuk suatu wilayah tertentu dan ingin meramalkan suhu masa depan menggunakan suhu historis, ini adalah peramalan deret waktu univariat. Data Anda mungkin terlihat seperti ini:
Peramalan Multivariat
Di sisi lain, deret waktu multivariat memiliki lebih dari satu variabel yang bergantung pada waktu. Setiap variabel tidak hanya bergantung pada nilai masa lalunya sendiri tetapi juga memiliki ketergantungan pada variabel lain. Ketergantungan ini digunakan untuk meramalkan nilai masa depan.
Pertimbangkan contoh di atas dan misalkan dataset kita mencakup atribut terkait cuaca lainnya selama periode waktu yang sama, seperti persentase kelembapan, titik embun, kecepatan angin, dan sebagainya, bersama dengan nilai suhu. Dalam hal ini, ada beberapa variabel yang perlu dipertimbangkan untuk memprediksi suhu secara optimal. Deret seperti ini termasuk dalam kategori deret waktu multivariat. Dataset Anda sekarang akan terlihat seperti ini:
Anda masih meramalkan nilai suhu untuk masa depan tetapi kini Anda dapat menggunakan informasi lain yang tersedia dalam ramalan karena kita mengasumsikan nilai suhu juga akan bergantung pada faktor-faktor ini.
Saat kita menangani peramalan deret waktu multivariat, variabel input dapat berupa dua jenis:
Tutorial ini akan membahas beberapa model klasik tetapi tidak semuanya mendukung peramalan deret waktu multivariat. Dalam situasi seperti ini, model pembelajaran mesin bisa menjadi solusi karena Anda dapat memodelkan masalah peramalan deret waktu apa pun dengan regresi. Kita akan melihat contohnya nanti dalam tutorial ini.
Metode Peramalan Deret Waktu
Peramalan deret waktu secara umum dapat dikategorikan ke dalam kategori berikut:
Tutorial ini berfokus pada dua metode pertama: model klasik/statistik dan machine learning. Metode deep learning berada di luar cakupan tutorial ini.
Model Statistik
Dalam peramalan deret waktu menggunakan model statistik, ada beberapa algoritme populer dan diterima luas. Masing-masing memiliki modalitas matematis berbeda dan hadir dengan serangkaian asumsi yang harus dipenuhi. Tutorial ini tidak akan membahas konsep matematis secara mendalam, melainkan hanya memberikan intuisi yang semoga bermanfaat.
ARIMA
ARIMA adalah salah satu metode klasik paling populer untuk peramalan deret waktu. Singkatan dari autoregressive integrated moving average dan merupakan jenis model yang meramalkan deret waktu tertentu berdasarkan nilai masa lalunya sendiri, yakni lag-nya sendiri dan galat ramalan yang tertunda. ARIMA terdiri dari tiga komponen:
Bagian "AR" dari ARIMA menunjukkan bahwa variabel yang berkembang dan menjadi fokus diregresikan pada nilai tertunda (yakni, yang diamati sebelumnya) miliknya sendiri. Bagian "MA" menunjukkan bahwa galat regresi sebenarnya merupakan kombinasi linear dari istilah galat yang nilainya terjadi secara bersamaan dan pada berbagai waktu di masa lalu. Huruf "I" (untuk "integrated") menunjukkan bahwa nilai data telah diganti dengan selisih antara nilainya dan nilai sebelumnya (dan proses pembedaan ini mungkin dilakukan lebih dari sekali). Tujuan masing-masing fitur ini adalah membuat model sebaik mungkin menyesuaikan data.
SARIMA
Perluasan ARIMA yang mendukung pemodelan langsung komponen musiman dari deret disebut SARIMA. Masalah dengan model ARIMA adalah tidak mendukung data musiman, yaitu deret waktu dengan siklus berulang. ARIMA mengharapkan data yang tidak musiman atau komponennya musiman telah dihilangkan, misalnya disesuaikan secara musiman melalui metode seperti pembedaan musiman. SARIMA menambahkan tiga hiperparameter baru untuk menentukan autoregression (AR), differencing (I), dan moving average (MA) untuk komponen musiman dari deret.
Exponential Smoothing
Exponential smoothing adalah metode peramalan deret waktu untuk data univariat. Dapat diperluas untuk mendukung data dengan tren atau komponen musiman. Dapat digunakan sebagai alternatif keluarga model ARIMA yang populer.
Exponential smoothing pada data deret waktu memberikan bobot yang menurun secara eksponensial dari observasi terbaru ke terlama. Semakin lama data, semakin kecil bobot yang diberikan, sedangkan data yang lebih baru diberikan bobot lebih besar
TBATS
Model TBATS diperuntukkan data deret waktu dengan multi-musiman. Misalnya, data penjualan ritel dapat memiliki pola harian dan mingguan, serta pola tahunan.
Pada TBATS, transformasi Box-Cox diterapkan pada deret waktu asli, lalu ini dimodelkan sebagai kombinasi linear dari tren yang dihaluskan secara eksponensial, komponen musiman, dan komponen ARMA.
Machine Learning
Jika Anda tidak ingin menggunakan model statistik atau kinerjanya kurang baik, Anda dapat mencoba metode ini. Machine learning adalah cara alternatif untuk memodelkan data deret waktu guna peramalan. Dalam metode ini, kita mengekstrak fitur dari tanggal untuk ditambahkan ke "variabel X" dan nilai deret waktu adalah "variabel y". Mari lihat contohnya:
Untuk keperluan tutorial ini, saya menggunakan dataset penumpang maskapai AS yang tersedia untuk diunduh dari Kaggle.
Kita dapat mengekstrak fitur dari kolom "Date" seperti bulan, tahun, minggu dalam tahun, dan sebagainya. Lihat contoh:
Hal yang perlu diperhatikan di sini adalah bahwa train-test-split untuk data deret waktu bersifat khusus. Karena Anda tidak dapat mengubah urutan tabel, Anda harus memastikan tidak melakukan pengambilan sampel secara acak karena Anda ingin data uji berisi titik-titik yang berada di masa depan dari titik-titik dalam data latih (waktu selalu bergerak maju).
Sekarang setelah kita melakukan train-test-split, kita siap melatih model machine learning pada data latih, menilainya pada data uji, dan mengevaluasi kinerja model kita. Dalam contoh ini, saya akan menggunakan PyCaret; sebuah library machine learning open-source dan low-code di Python yang mengotomatiskan alur kerja machine learning. Untuk menggunakan PyCaret, Anda harus memasangnya menggunakan pip.
Jika Anda memerlukan bantuan selama pemasangan, silakan merujuk ke dokumentasi resmi.
Dengan asumsi Anda telah memasang PyCaret dengan sukses:
Sekarang untuk melatih model machine learning, Anda hanya perlu menjalankan satu baris:
Model terbaik menggunakan validasi silang 3 lipatan berdasarkan Mean Absolute Error (MAE) adalah Leased Angle Regression. Sekarang kita dapat menggunakan model ini untuk meramalkan masa depan. Untuk itu, kita harus membuat "variabel X" di masa depan. Ini dapat dilakukan dengan membuat tanggal masa depan lalu mengekstrak fitur darinya.
Karena kita telah melatih model pada data hingga tahun 1960, mari prediksi lima tahun ke depan sampai 1965. Untuk menggunakan model final kita untuk menghasilkan prediksi masa depan, pertama kita perlu membuat dataset yang terdiri dari kolom Month, Year, Series pada tanggal masa depan. Kode di bawah ini membuat dataset "X" masa depan.
Sekarang kita dapat menggunakan future_df untuk membuat prediksi:
Dan sekarang kita dapat memvisualisasikannya:
Ada beberapa hal penting untuk dicatat di sini. Kapan pun Anda menangani deret waktu univariat, Anda selalu dapat mengonversinya menjadi masalah regresi dan menyelesaikannya seperti dalam contoh ini. Namun, Anda harus berhati-hati mengenai validasi silang. Anda tidak dapat melakukan validasi silang acak pada model deret waktu dan Anda harus menggunakan teknik yang sesuai untuk deret waktu. Dalam contoh ini, PyCaret menggunakan TimeSeriesSplit dari library scikit-learn.
Kerangka Python untuk Peramalan
Facebook Prophet
Prophet adalah perangkat lunak open-source yang dirilis oleh tim Core Data Science Facebook. Tersedia untuk diunduh di CRAN dan PyPI.
Prophet adalah prosedur untuk meramalkan data deret waktu berdasarkan model aditif di mana tren nonlinier dipasang dengan musiman tahunan, mingguan, dan harian, ditambah efek hari libur. Paling baik bekerja dengan deret waktu yang memiliki efek musiman kuat dan beberapa musim data historis. Prophet tangguh terhadap data hilang dan pergeseran tren, serta umumnya menangani pencilan dengan baik.
Untuk mempelajarinya lebih lanjut, lihat tautan ini.
sktime
sktime adalah kerangka kerja open-source dan terpadu untuk machine learning dengan deret waktu. Ia menyediakan platform yang mudah digunakan, fleksibel, dan modular untuk beragam tugas machine learning deret waktu. Menawarkan antarmuka yang kompatibel dengan scikit-learn dan alat komposisi model, dengan tujuan membuat ekosistem lebih mudah digunakan dan lebih interoperabel secara keseluruhan.
pmdarima
Pmdarima adalah library statistik yang dirancang untuk mengisi kekosongan dalam kemampuan analisis deret waktu Python. Ini mencakup:
Untuk mempelajari lebih lanjut tentang pmdarima, lihat halaman ini.
Kats
Kats adalah proyek open-source hebat lainnya dari Facebook, yang dirilis oleh tim Infrastructure Data Science mereka. Tersedia untuk diunduh di PyPI.
Kats adalah toolkit untuk menganalisis data deret waktu; kerangka kerja yang ringan, mudah digunakan, dan dapat digeneralisasi untuk melakukan analisis deret waktu. Kats bertujuan menyediakan one-stop shop untuk analisis deret waktu, termasuk deteksi, peramalan, ekstraksi/embedding fitur, dan analisis multivariat, dan lain-lain.
Untuk mempelajari lebih lanjut tentang KATS, lihat tautan ini.
Orbit
Orbit adalah proyek open-source luar biasa dari Uber. Ini adalah library Python untuk peramalan deret waktu Bayesian. Menyediakan antarmuka initialize-fit-predict yang familier dan intuitif untuk tugas deret waktu, sambil memanfaatkan bahasa pemrograman probabilistik di balik layar.
Untuk mempelajari lebih lanjut tentang Orbit, lihat tautan ini.
PyCaret
PyCaret adalah library machine learning open-source dan low-code di Python yang mengotomatiskan alur kerja machine learning. Dengan PyCaret, Anda menghabiskan lebih sedikit waktu untuk ngoding dan lebih banyak waktu untuk analisis. Anda dapat melatih model, menganalisisnya, beriterasi lebih cepat dari sebelumnya, dan melakukan deployment seketika sebagai REST API atau bahkan membangun aplikasi ML front-end sederhana, semuanya dari Notebook favorit Anda.
Berikutnya, kita akan melihat contoh tugas peramalan deret waktu end-to-end menggunakan library PyCaret.
Contoh End-to-end
Modul deret waktu PyCaret tersedia dalam versi beta, Anda dapat mengunduhnya dari pip.
Tautan ke tutorial ini di Colab.
Dataset
Di sini, kami menggunakan dataset maskapai, yang juga tersedia di repositori data PyCaret.
Menyiapkan Eksperimen
Eksperimen di PyCaret dimulai menggunakan fungsi
setup. Fungsi ini menangani semua langkah prapemrosesan, train-test-split, strategi validasi silang, dan beberapa tugas lainnya.Exploratory Data Analysis (EDA)
Untuk EDA data deret waktu univariat, ada beberapa hal yang bisa dan sebaiknya Anda lakukan.
Untuk penggunaan model klasik dan statistik, Anda dapat menjalankan beberapa uji statistik. Ada fungsi di PyCaret yang melakukannya untuk Anda.
Jika Anda menangani deret waktu univariat, Anda juga dapat mendekomposisinya menjadi komponen tren, musiman, dan galat untuk analisis lebih lanjut.
best = compare_models()PyCaret telah melatih lebih dari 25 model menggunakan validasi silang yang sesuai untuk deret waktu dan menyajikan daftar model dari performa tertinggi hingga terendah. Model terbaik berdasarkan eksperimen ini untuk dataset ini adalah Exponential Smoothing, dengan mean absolute error sebesar 7,781.
Analisis Model
Sebelum kita melakukan deployment model ini untuk menghasilkan prediksi masa depan, kita dapat melihat beberapa plot analisis untuk mengomentari kualitas model kita.
Deployment Model
Pada tahap ini, kita siap memfinalkan model dan menyimpannya untuk digunakan di masa mendatang.
Untuk memuat file ini kembali dan menghasilkan prediksi pada data masa depan:
Kesimpulan
Peramalan deret waktu adalah keterampilan yang sangat berguna untuk dipelajari. Banyak masalah kehidupan nyata bersifat deret waktu. Peramalan memiliki beragam aplikasi di berbagai industri, dengan banyak penerapan praktis termasuk: peramalan cuaca, peramalan ekonomi, peramalan layanan kesehatan, peramalan keuangan, peramalan ritel, peramalan bisnis, studi lingkungan, studi sosial, dan lainnya.
Pada dasarnya, data historis apa pun dengan interval yang konsisten dapat dianalisis dengan metode analisis deret waktu yang mengarah ke tugas peramalan yang belajar dari data historis dan mencoba memprediksi masa depan. Sebagai penutup, ada tiga kategori luas untuk peramalan deret waktu:
Jika Anda ingin semakin membangun pengetahuan dan keterampilan dalam peramalan deret waktu, lihat jalur hebat "Time Series with Python" oleh Datacamp. Dalam jalur ini, Anda akan belajar memanipulasi data deret waktu menggunakan pandas, bekerja dengan library statistik termasuk NumPy dan statsmodels untuk menganalisis data, serta mengembangkan keterampilan visualisasi menggunakan Matplotlib, SciPy, dan seaborn. Pada akhir jalur ini, Anda akan mengetahui cara meramalkan masa depan menggunakan model kelas ARIMA dan menghasilkan prediksi serta wawasan menggunakan model machine learning.