Tren dan Musiman umumnya ada di sebagian besar data deret waktu di dunia nyata. Ketika kita ingin melakukan peramalan dengan time series, kita membutuhkan time series yang stasioner Show
Deret waktu stasioner adalah kumpulan data deret waktu di mana tidak ada informasi tren atau musiman di dalamnya. Deret waktu stasioner adalah deret dengan rata-rata konstan, varians konstan, dan autokorelasi konstan Untuk membuat deret waktu stasioner, kita perlu menemukan cara untuk menghilangkan tren dan musiman dari deret waktu kita sehingga kita dapat menggunakannya dengan model prediksi. Untuk melakukan itu, kita perlu memahami apa itu tren dan musiman secara mendalam untuk menanganinya dengan lebih baik Terlepas dari tren dan musiman, beberapa deret waktu juga memiliki komponen kebisingan/kesalahan/sisa. Kami dapat menguraikan deret waktu untuk melihat komponen yang berbeda > Apa yang Dapat Anda Pelajari dari Artikel Ini?Sebagai bagian dari tutorial ini, kami telah menjelaskan cara mendeteksi dan kemudian menghapus tren serta musiman yang ada dalam kumpulan data deret waktu. Kami telah menjelaskan berbagai cara untuk menghapus tren dan musiman seperti transformasi daya, transformasi log, fungsi jendela bergerak, regresi linier, dll dari data. Selain itu, kami juga telah menjelaskan cara menguji stasioneritas setelah tren dan musim dihilangkan. Tutorial adalah titik awal yang baik untuk memahami konsep-konsep seperti tren, musiman, stasioneritas, dll Di bawah ini, kami telah membuat daftar bagian-bagian penting dari Tutorial untuk memberikan gambaran umum tentang materi yang dibahas Bagian Penting Dari TutorialTime-series umumnya terdiri dari dua jenis
2. KecenderunganTren mewakili peningkatan atau penurunan nilai deret waktu dari waktu ke waktu. Jika kita perhatikan bahwa nilai pengukuran dari waktu ke waktu meningkat atau menurun maka kita dapat mengatakan bahwa itu memiliki tren naik atau turun Ada berbagai cara untuk menghilangkan tren deret waktu. Kami telah menjelaskan beberapa di bawah ini
3. MusimanKemusiman mewakili variasi dalam nilai terukur yang berulang dalam interval waktu yang sama secara teratur. Jika kita memperhatikan bahwa variasi tertentu dalam nilai terjadi setiap minggu, bulan, kuartal atau setengah tahunan maka kita dapat mengatakan bahwa deret waktu memiliki semacam musiman. Ada berbagai cara untuk menghilangkan musiman. Tugas menghilangkan musim agak rumit. Kami telah menjelaskan beberapa cara di bawah ini untuk menghilangkan musiman
Kami sekarang akan menjelajahi tren dan penghapusan musiman dengan contoh. Kami akan menggunakan kumpulan data penumpang udara terkenal yang tersedia online untuk tujuan kami karena memiliki tren dan musiman. Ini memiliki informasi tentang penumpang maskapai AS dari tahun 1949 hingga 1960 yang direkam setiap bulan. Silakan unduh dataset untuk mengikuti import pandas as pd import numpy as np import matplotlib.pyplot as plt %matplotlib inline air_passengers = pd.read_csv("~/datasets/AirPassengers.csv", index_col=0, parse_dates=True) air_passengers.head()_ #PassengersMonth1949-01-011121949-02-011181949-03-011321949-04-011291949-05-01121 air_passengers.plot(figsize=(8,4), color="tab:red"); air_passengers["1952"].plot(kind="bar", color="tab:green", legend=False); Dengan melihat plot di atas kita dapat melihat bahwa deret waktu kita adalah deret waktu multiplikatif dan memiliki tren serta musiman. Kita bisa melihat trennya karena penumpang terus meningkat dari waktu ke waktu. Kita dapat melihat musiman dengan variasi yang sama berulang selama 1 tahun di mana nilai puncaknya sekitar bulan Agustus Kita dapat menguraikan time-series untuk melihat berbagai komponen time-series. Modul Python bernama statmodels memberi kita utilitas yang mudah digunakan yang dapat kita gunakan untuk mendapatkan komponen individual dari deret waktu dan kemudian memvisualisasikannya from statsmodels.tsa.seasonal import seasonal_decompose_ decompose_result = seasonal_decompose(air_passengers, model="multiplicative") trend = decompose_result.trend seasonal = decompose_result.seasonal residual = decompose_result.resid decompose_result.plot(); Kita dapat melihat komponen tren dan musiman secara terpisah serta komponen sisa. Ada kehilangan sisa di awal yang menetap kemudian Seperti yang kami nyatakan di atas deret waktu adalah stasioner yang rata-rata, varian, dan kovarian otomatisnya tidak bergantung pada waktu. Kami dapat memeriksa rata-rata, varians, dan kovarians otomatis menggunakan fungsi jendela bergerak yang tersedia dengan panda. Kami juga akan menggunakan tes dicky-fuller yang tersedia dengan model statistik untuk memeriksa stasioneritas deret waktu. Jika deret waktu tidak stasioner maka kita perlu membuatnya stasioner Di bawah ini kami telah mengambil rata-rata jendela bergerak dari 12 sampel. Kami perhatikan dari plot di atas bahwa ada musiman 12 bulan dalam deret waktu. Kami dapat mencoba berbagai ukuran jendela untuk tujuan pengujian air_passengers.rolling(window = 12).mean().plot(figsize=(8,4), color="tab:red", title="Rolling Mean over 12 month period");_ air_passengers.rolling(window = 20).mean().plot(figsize=(8,4), color="tab:red", title="Rolling mean over 20 month period"); Kita dapat dengan jelas melihat bahwa deret waktu memiliki tren naik yang terlihat Di bawah ini kami telah mengambil varian dari jendela bergerak dari 12 sampel. Kami perhatikan dari plot di atas bahwa ada musiman 12 bulan dalam deret waktu air_passengers.rolling(window = 12).var().plot(figsize=(8,4), color="tab:red", title="Rolling Variance over 12 month period");_ air_passengers.rolling(window = 20).var().plot(figsize=(8,4), color="tab:red", title="Rolling variance over 20 month period");_ Dari dua plot di atas, kami melihat bahwa deret waktu memiliki semacam efek penggandaan yang tampaknya meningkat seiring dengan periode waktu. Kita dapat melihat efek musiman yang rendah di awal yang meningkat seiring waktu Di bawah ini kami juga memplot plot korelasi otomatis untuk data deret waktu. Plot ini membantu kita memahami apakah nilai deret waktu saat ini berkorelasi positif, berkorelasi negatif, atau tidak terkait sama sekali dengan nilai masa lalu. pustaka statsmodels menyediakan metode plot_acf siap pakai sebagai bagian dari modul statsmodels. grafis. tsaplots air_passengers = pd.read_csv("~/datasets/AirPassengers.csv", index_col=0, parse_dates=True) air_passengers.head()_0 Kita dapat melihat dari grafik di atas bahwa setelah 13 lag, garis masuk ke dalam interval kepercayaan (area biru muda). Hal ini dapat terjadi karena musiman 12-13 bulan dalam data kami Tes Dicky-Fuller untuk StasioneritasSetelah kami menghapus tren dan musiman dari data deret waktu, maka kami dapat menguji stasioneritasnya menggunakan uji dicky-fuller. Ini adalah uji statistik untuk memeriksa stasioneritas data deret waktu Baca Lebih Lanjut Tentang Tes Kami dapat melakukan fungsionalitas pengujian Dicky-Fuller yang tersedia dengan pustaka statsmodels Di bawah ini kami akan menguji stasioneritas deret waktu kami dengan fungsi ini dan mencoba menginterpretasikan hasilnya untuk lebih memahaminya air_passengers = pd.read_csv("~/datasets/AirPassengers.csv", index_col=0, parse_dates=True) air_passengers.head()_1 air_passengers = pd.read_csv("~/datasets/AirPassengers.csv", index_col=0, parse_dates=True) air_passengers.head()_2 Kita dapat menginterpretasikan hasil di atas berdasarkan nilai p dari hasil
Kita dapat melihat dari hasil di atas bahwa p-value lebih besar dari 0. 05 karenanya deret waktu kami tidak stasioner. Itu masih memiliki komponen yang bergantung pada waktu yang perlu kita hapus 7. Hapus TrenAda berbagai cara untuk menghilangkan tren dari data seperti yang telah kita bahas di atas. Kami akan mencoba cara-cara seperti membedakan, transformasi daya, transformasi log, dll 7. 1 Transformasi TercatatUntuk menerapkan transformasi log, kita perlu mengambil log dari setiap nilai individual dari data deret waktu air_passengers = pd.read_csv("~/datasets/AirPassengers.csv", index_col=0, parse_dates=True) air_passengers.head()_3 Dari grafik pertama di atas, kita dapat melihat bahwa kita telah mengurangi varian dari data time-series. Kita dapat melihat nilai-y dari data deret waktu asli dan data deret waktu yang diubah log untuk menyimpulkan bahwa varian deret waktu berkurang Kita dapat memeriksa apakah kita berhasil atau tidak dengan memeriksa masing-masing komponen deret waktu dengan menguraikannya seperti yang telah kita lakukan di atas air_passengers = pd.read_csv("~/datasets/AirPassengers.csv", index_col=0, parse_dates=True) air_passengers.head()_4 Harap buat CATATAN bahwa deret waktu kami memiliki tren dan musiman. Kami mencoba berbagai teknik untuk menghilangkan tren di bagian ini. Kami tidak akan menguji stasioneritas di bagian ini. Bagian selanjutnya dibangun berdasarkan bagian ini dan menjelaskan berbagai teknik untuk menghilangkan stasioneritas. Pada bagian tersebut, kami telah menguji stasioneritas. Silakan menguji stasioneritas setelah bagian ini jika deret waktu Anda hanya memiliki tren 7. 2 Transformasi DayaKita dapat menerapkan transformasi daya dalam data dengan cara yang sama seperti transformasi log untuk menghilangkan tren air_passengers = pd.read_csv("~/datasets/AirPassengers.csv", index_col=0, parse_dates=True) air_passengers.head()_5 Dari grafik pertama di atas, kita dapat melihat bahwa kita telah mengurangi varian dari data time-series. Kita dapat melihat nilai-y dari data deret waktu asli dan data deret waktu yang diubah daya untuk menyimpulkan bahwa varian deret waktu berkurang Kita dapat memeriksa apakah kita berhasil atau tidak dengan memeriksa masing-masing komponen deret waktu dengan menguraikannya seperti yang telah kita lakukan di atas air_passengers = pd.read_csv("~/datasets/AirPassengers.csv", index_col=0, parse_dates=True) air_passengers.head()_6 7. 3 Menerapkan Fungsi Jendela BergerakKami dapat menghitung rata-rata bergulir selama periode 12 bulan dan menguranginya dari deret waktu asli untuk mendapatkan deret waktu yang tidak lagi tren air_passengers = pd.read_csv("~/datasets/AirPassengers.csv", index_col=0, parse_dates=True) air_passengers.head()_7 Dari grafik pertama di atas, kita dapat melihat bahwa kita tampaknya telah menghapus tren dari data deret waktu Kita dapat memeriksa apakah kita berhasil atau tidak dengan memeriksa masing-masing komponen deret waktu dengan menguraikannya seperti yang telah kita lakukan di atas air_passengers = pd.read_csv("~/datasets/AirPassengers.csv", index_col=0, parse_dates=True) air_passengers.head()_8 Kita juga dapat menerapkan lebih dari satu transformasi. Kami pertama-tama akan menerapkan transformasi log ke deret waktu, lalu mengambil rata-rata penggiliran selama periode 12 bulan, lalu mengurangi deret waktu yang digulirkan dari deret waktu yang diubah log untuk mendapatkan deret waktu akhir air_passengers = pd.read_csv("~/datasets/AirPassengers.csv", index_col=0, parse_dates=True) air_passengers.head()_9 Dari grafik pertama di atas, kita dapat melihat bahwa kita dapat menghapus tren dari data deret waktu Kita dapat memeriksa apakah kita berhasil atau tidak dengan memeriksa masing-masing komponen deret waktu dengan menguraikannya seperti yang telah kita lakukan di atas air_passengers.plot(figsize=(8,4), color="tab:red");0 Kita juga dapat menerapkan lebih dari satu transformasi. Kami pertama-tama akan menerapkan transformasi daya ke deret waktu, lalu mengambil rata-rata penggiliran selama periode 12 bulan, lalu mengurangi deret waktu yang digulirkan dari deret waktu yang diubah daya untuk mendapatkan deret waktu akhir air_passengers.plot(figsize=(8,4), color="tab:red");1 Dari grafik pertama di atas, kita dapat melihat bahwa kita dapat menghapus tren dari data deret waktu Kita dapat memeriksa apakah kita berhasil atau tidak dengan memeriksa masing-masing komponen deret waktu dengan menguraikannya seperti yang telah kita lakukan di atas air_passengers.plot(figsize=(8,4), color="tab:red");2 7. 6 Menerapkan Regresi Linier untuk Menghilangkan TrenKami juga dapat menerapkan model regresi linier untuk menghilangkan tren. Di bawah ini kami menyesuaikan model regresi linier dengan data deret waktu kami. Kami kemudian menggunakan model fit untuk memprediksi nilai deret waktu dari awal hingga akhir. Kami kemudian mengurangi nilai prediksi dari deret waktu asli untuk menghilangkan tren air_passengers.plot(figsize=(8,4), color="tab:red");_3 Dari grafik pertama di atas, kita dapat melihat bahwa kita dapat menghapus tren dari data deret waktu Kita dapat memeriksa apakah kita berhasil atau tidak dengan memeriksa masing-masing komponen deret waktu dengan menguraikannya seperti yang telah kita lakukan di atas air_passengers.plot(figsize=(8,4), color="tab:red");_4 Setelah menerapkan transformasi di atas, kita dapat mengatakan bahwa regresi linier tampaknya berhasil menghilangkan tren dibandingkan metode lainnya. Kami dapat mengonfirmasi lebih lanjut apakah itu benar-benar berhasil dengan menghapus komponen musiman dan memeriksa stasioneritas deret waktu 8. Hapus MusimanKami dapat menghapus musiman dengan teknik pembedaan. Kami akan menggunakan perbedaan pada berbagai deret waktu tren yang dihitung di atas Kami telah menerapkan pembedaan pada deret waktu yang diubah log dengan menggeser nilainya sebanyak 1 periode dan mengurangkannya dari deret waktu asli yang diubah log air_passengers.plot(figsize=(8,4), color="tab:red");5 Kita sekarang dapat menguji apakah deret waktu kita stasioner sekarang dengan menerapkan uji dicky-fuller yang telah kita terapkan di atas air_passengers.plot(figsize=(8,4), color="tab:red");6 air_passengers.plot(figsize=(8,4), color="tab:red");7 Dari hasil tes dicky-fuller kami, kami dapat mengonfirmasi bahwa deret waktu TIDAK TETAP karena nilai p 0. 07 lebih besar dari 0. 05 Kami telah menerapkan perbedaan pada deret waktu yang diubah daya dengan menggeser nilainya sebanyak 1 periode dan mengurangkannya dari deret waktu yang diubah daya aslinya air_passengers.plot(figsize=(8,4), color="tab:red");_8 Kita sekarang dapat menguji apakah deret waktu kita stasioner sekarang dengan menerapkan uji dicky-fuller yang telah kita terapkan di atas air_passengers.plot(figsize=(8,4), color="tab:red");_9 air_passengers["1952"].plot(kind="bar", color="tab:green", legend=False);0 Dari hasil uji dicky-fuller kami, kami dapat mengonfirmasi bahwa deret waktu adalah STATIONARY karena nilai p 0. 02 kurang dari 0. 05 Kami telah menerapkan pembedaan pada deret waktu bergulir rata-rata dengan menggeser nilainya sebanyak 1 periode dan mengurangkannya dari deret waktu bergulir rata-rata asli CATATANHarap perhatikan bahwa kami mengubah deret waktu sebanyak 1 periode dan membedakannya dari deret waktu yang tidak lagi tren. Adalah umum untuk mencoba menggeser deret waktu dengan periode waktu yang berbeda untuk menghilangkan musiman dan mendapatkan deret waktu yang stasioner air_passengers["1952"].plot(kind="bar", color="tab:green", legend=False);1 Kita sekarang dapat menguji apakah deret waktu kita stasioner sekarang dengan menerapkan uji dicky-fuller yang telah kita terapkan di atas air_passengers["1952"].plot(kind="bar", color="tab:green", legend=False);2 air_passengers["1952"].plot(kind="bar", color="tab:green", legend=False);_3 Dari hasil uji dicky-fuller kami, kami dapat mengonfirmasi bahwa deret waktu adalah STATIONARY karena nilai p 0. 02 kurang dari 0. 05 Kami telah menerapkan pembedaan pada deret waktu transformasi log-transformed & mean rolled dengan menggeser nilainya sebanyak 1 periode dan mengurangkannya dari deret waktu asli air_passengers["1952"].plot(kind="bar", color="tab:green", legend=False);_4 Kita sekarang dapat menguji apakah deret waktu kita stasioner sekarang dengan menerapkan uji dicky-fuller yang telah kita terapkan di atas air_passengers["1952"].plot(kind="bar", color="tab:green", legend=False);5 air_passengers["1952"].plot(kind="bar", color="tab:green", legend=False);6 Dari hasil uji dicky-fuller kami, kami dapat mengonfirmasi bahwa deret waktu adalah STATIONARY karena nilai p 0. 001 kurang dari 0. 05 Kami telah menerapkan perbedaan pada deret waktu yang diubah daya & rata-rata bergulir dengan menggeser nilainya sebanyak 1 periode dan mengurangkannya dari deret waktu asli air_passengers["1952"].plot(kind="bar", color="tab:green", legend=False);_7 Kita sekarang dapat menguji apakah deret waktu kita stasioner sekarang dengan menerapkan uji dicky-fuller yang telah kita terapkan di atas air_passengers["1952"].plot(kind="bar", color="tab:green", legend=False);8 air_passengers["1952"].plot(kind="bar", color="tab:green", legend=False);_9 Dari hasil uji dicky-fuller kami, kami dapat mengonfirmasi bahwa deret waktu adalah STATIONARY karena nilai p 0. 005 kurang dari 0. 05 Kami telah menerapkan pembedaan pada deret waktu transformasi regresi linier dengan menggeser nilainya sebanyak 1 periode dan mengurangkannya dari deret waktu transformasi log asli from statsmodels.tsa.seasonal import seasonal_decompose_0 Kita sekarang dapat menguji apakah deret waktu kita stasioner sekarang dengan menerapkan uji dicky-fuller yang telah kita terapkan di atas from statsmodels.tsa.seasonal import seasonal_decompose_1 from statsmodels.tsa.seasonal import seasonal_decompose_2 Dari hasil tes dicky-fuller kami, kami dapat mengonfirmasi bahwa deret waktu TIDAK TETAP karena nilai p 0. 054 lebih besar dari 0. 05 Ini mengakhiri tutorial kecil kami tentang menangani tren dan musiman dengan data deret waktu dan berbagai cara untuk menghapusnya Bagaimana Anda menemukan musiman dari deret waktu dengan Python?seasonal_decompose() menguji apakah deret waktu memiliki musiman atau tidak dengan menghilangkan tren dan mengidentifikasi musiman dengan menghitung autokorelasi(acf). Outputnya meliputi jumlah periode, jenis model (penjumlahan/perkalian) dan acf periode.
Bagaimana Anda menangkap musiman dalam data deret waktu?Kita dapat menggunakan ACF untuk menentukan apakah musiman hadir dalam deret waktu . Misalnya, Yt = γ · St + ϵt. Semakin besar amplitudo fluktuasi musiman, semakin jelas osilasi di ACF.
Bagaimana Anda mengekstrak musiman?Langkah demi Langkah. Dekomposisi Deret Waktu . Langkah 1. Impor Datanya. Aditif. . Langkah 2. Mendeteksi Tren. . Langkah 3. Detrend Time Series. . Langkah 4. Rata-rata Musiman. . Langkah 5. Meneliti Kebisingan Acak yang Tersisa. . Langkah 6. Merekonstruksi Sinyal Asli Bagaimana Anda menguraikan musiman dengan Python?Dekomposisi . Langkah 1. Ekstrak setiap komponen musiman menggunakan STL. . Langkah 2. Sempurnakan setiap komponen musiman yang diekstrak. . Langkah 3. Ekstrak tren. . Langkah 4. Ekstrak residu |