Mengapa Deret Waktu Tren Ini Stasioner?

Sebuah studi tentang Augmented Dickey-Fuller (ADF) tes dari contoh yang aneh

Foto oleh Jan Huber on Unsplash

Stasioneritas adalah salah satu konsep paling mendasar untuk analisis deret waktu. Umumnya stasioneritas akan memberikan sifat yang sangat baik untuk pemodelan deret waktu dengan berbagai metode statistik. Augmented Dickey-Fuller (ADF) tes mungkin merupakan pendekatan yang paling banyak digunakan untuk memeriksa stasioneritas.

Ada banyak sekali artikel online tentang topik ini. Saya tidak akan membuang waktu Anda untuk intro dasar, seperti definisi stasioneritas, cara melakukan tes ADF, dll. Pada postingan kali ini, saya akan membagikan perjalanan saya menjelajahi tes ADF setelah menemui kasus aneh di sebuah aplikasi.

Jalur pembelajaran yang akan saya tunjukkan tipikal untuk pembelajaran ilmu data. Pertama, kita mengira kita memahami suatu alat atau konsep, namun kita hanya mengakui dan mengingat istilah tersebut. Saat kita menerapkannya pada data aktual, kita mungkin menemukan masalah yang tidak terduga dan menantang yang mendorong kita untuk menyelidiki lebih jauh dan memahami lebih jauh.

Sekali lagi, saya akan membagikan kode saya di GitHub; silakan temukan tautannya di bagian referensi pada akhirnya.

Awal dari perjalanan tak terduga

Saya sedang mengerjakan beberapa rangkaian waktu beberapa hari yang lalu. Gambar 1 menunjukkan salah satunya. Tidak ada yang ganda dari itu ada tren kenaikan, dan varians juga berubah seiring waktu. Dengan visualisasi yang jelas ini, saya tidak perlu menguji stasioneritasnya. Entah kenapa saya tidak ingat, saya tetap mencobanya dengan tes ADF. Anehnya, nilai p hampir 0, yang berarti saya harus menolak hipotesis Null dan menerimanya stasioner.

Gambar 1. Deret waktu dengan tren (Gambar oleh Penulis)

Itu aneh. Hasil tesnya sepertinya salah. Saya ingin menyelidiki apa yang terjadi di balik pengujian ADF. Langkah pertama yang saya coba adalah mereplikasi masalah ini dengan data sintetis. Saya membuat beberapa data pengujian dengan kode berikut. Kode tersebut hanya meniru perilaku tren lambat tetapi tidak meniru tren musiman.

Terdapat 20,000 pengamatan pada Gambar 1, yang menyiratkan bahwa tren naik sangat lambat. Saya membuat deret waktu dengan sedikit kemiringan 0.0005. Nilai rata-rata deret waktu naik dari sekitar 0 menjadi 0.5 setelah 1000 observasi. Kalau begitu mari kita uji dengan fungsi adfuller() dari statsmodels.tsa.stattools dengan parameter default. Nilai p-nya adalah 0.01, dan โ€œmasalahโ€ terjadi lagi. Gambar 2 menunjukkan hasilnya. Anda boleh mengabaikan judulnya, dan fokus pada tren naik. Saya akan menjelaskan mengapa kita memiliki nilai p dari tiga pengujian ADF yang berbeda nanti.

Gambar 2. Deret waktu sintetik dengan hasil pengujian ADF (Gambar oleh Penulis)

Matematika di balik tes DF

Kita harus mendalami lebih dalam untuk melihat apa sebenarnya yang dilakukan uji ADF. Ternyata latar belakang matematikanya tidak rumit. Pertama, tes ADF hanyalah versi lanjutan dari tes tersebut Tes Dickey-Fuller. Ada tiga versi utama tes DF (dari Wikipedia):

Versi 1: Uji akar satuan: โˆ†yแตข = ฮดyแตขโ‚‹โ‚ + uแตข

Versi 2: Uji akar satuan dengan konstanta: โˆ†yแตข = aโ‚€ + ฮดyแตขโ‚‹โ‚ + uแตข

Versi 3. Uji akar satuan dengan tren konstan dan deterministik: โˆ†yแตข = aโ‚€ + aโ‚*t + ฮดyแตขโ‚‹โ‚ + uแตข

Di setiap versi, hipotesis nolnya adalah adanya akar satuan, ฮด=0.

Paket Statsmodels mendukung ketiga versi dengan parameter tersebut "regresi".

Untuk versi 1, regresinya adalah 'n' (tidak ada konstanta, tidak ada tren).

Untuk versi 2, regresi adalah 'c' (hanya konstan); ini adalah pengaturan default.

Untuk versi 3, regresinya adalah 'ct' (konstan dan tren).

Saya menjalankan kembali pengujian dengan tiga pengaturan berbeda, dan di bawah ini adalah hasil baru.

Untuk versi 1, nilai p-nya adalah 0.09. Kita tidak boleh menolak hipotesis Null.

Untuk versi 2, nilai p adalah 0.01. Kami telah menganggapnya sebagai masalah karena ini adalah pengaturan default.

Untuk versi 3, nilai p adalah 0.00. Hal itu diharapkan karena rangkaian waktunya memang demikian stasioner dengan tren deterministik.

Jadi untuk contoh data ini, jika kita uji dengan versi 1 (regresi='n'), kita tidak akan mengatakan stasioner. Kita mungkin sebaiknya tidak menggunakan pengaturan default. Namun Anda mungkin juga bertanya-tanya, mengapa suku konstanta membuat perbedaan besar di sini? Mari kita gali lebih jauh.

Dari uji DF hingga regresi linier

Berdasarkan definisi di atas maka uji DF hanyalah regresi linier. Gambar 3 menunjukkan semua poin untuk regresi linier. Sumbu Y adalah โˆ†yแตข, sumbu X adalah yแตขโ‚‹โ‚, dan uแตข adalah sisa. Versi 1 berarti kita harus memasang garis tanpa intersep (tidak ada konstanta). Versi 2 berarti kita harus memasang garis dengan intersep (konstan).

Gambar 3. โˆ†yแตข dan yแตขโ‚‹โ‚ (Gambar oleh Penulis)

Regresi Linier Skitlearn mendukung kedua opsi tersebut dengan baik dengan parameter fit_intercept. Di bawah Gambar 4 adalah dua garis yang dipasang. Seperti yang Anda lihat, garis dengan intersep lebih cocok daripada garis tanpa intersep. Skor R-squared juga menegaskan hal itu dengan jelas. Perhatikan juga bahwa kemiringan garis oranye lebih kecil dibandingkan kemiringan garis biru. Dengan kata lain kemiringan garis oranye mendekati 0.

Gambar 4. Hasil regresi linier (Gambar oleh Penulis)

Kita juga dapat berpikir dengan visualisasi: titik-titik tersebut tidak berpusat di sekitar (0,0), sehingga garis regresi yang dipasang tidak boleh melewati (0,0). Perpotongannya harus lebih besar dari 0. Karena 0 adalah mean awal, โˆ†y harus lebih besar dari 0, sehingga mean keseluruhan akan meningkat. Jika garis regresi dipaksa melewati (0,0), maka data akan underfit, dan kemiringannya akan semakin mendekati 0 karena pengaruh dari (0,0).

Kita telah melihat apakah memasukkan dampak intersep sesuai dengan regresi linier. Mengapa cara pemasangan garis berdampak pada hasil pengujian ADF, dan dari mana nilai p berasal?

Dari regresi linier hingga nilai p

Sekarang menjadi sedikit rumit. Nilai p akhir uji DF bukan berasal dari nilai p koefisien regresi linier. Pada dasarnya statistik memiliki distribusi tertentu yang dikenal dengan tabel Dickey-Fuller. Kemudian kami menggunakan perkiraan nilai p MacKinnon untuk statistik pengujian. Anda dapat menemukan detailnya di Kode sumber Statsmodels.

Karena hipotesis nolnya adalah ฮด=0, berarti pengujian kemiringan garis yang dipasang adalah 0. Kita tidak perlu menjelaskan secara detail cara mendapatkan nilai p. Rantai logika hubungan antara nilai p dan kemiringan (ฮด dalam regresi linier, bukan kemiringan tren) adalah seperti ini:

Secara umum, jika kemiringannya jauh dari 0, nilai p harus lebih kecil, sehingga kemungkinan besar menolak hipotesis nol dan menyatakan tidak ada akar unit dan stasioner. Jika kemiringannya 0 atau sangat dekat dengan 0, nilai p seharusnya lebih tinggi, sehingga lebih mungkin menerima hipotesis nol dan menyarankan unit root dan tidak stasioner. Untuk skenario kedua, Wikipedia mengatakan, โ€œPengujian ini memiliki kekuatan statistik yang rendah karena seringkali tidak dapat membedakan antara proses akar unit yang sebenarnya (ฮด = 0) dan proses yang mendekati akar unit (ฮด mendekati 0)โ€. Itulah sebabnya kita mempunyai masalah ini sejak awal. Kita sedang berhadapan dengan proses yang mendekati akar unit. Versi 1 menemukan unit root dan versi 2 tidak dapat menemukan unit root.

Mengapa versi 1 berfungsi untuk contoh di atas?

Versi 1 berfungsi untuk data pada Gambar 2 karena kita membuat kemiringannya mendekati 0, sehingga nilai p-nya lebih tinggi.

Namun, kami tidak dapat menggunakan versi 1 sebagai pengaturan default. Ada dua kasus untuk versi 1 (memaksa garis melewati (0,0) ):

Kasus 1: (0,0) lebih dekat ke semua titik data. Jika garis harus melalui (0,0), maka garis akan menjadi lebih datar, dan kemiringannya akan mendekati 0. Gambar 4 menunjukkan kasus ini. Harap dicatat bahwa demonstrasi pada Gambar 4 hanya cocok untuk satu variabel yแตขโ‚‹โ‚, ADF sebenarnya akan cocok untuk lebih banyak variabel lag.

Kasus 2: (0,0) jauh dari semua titik data. Jika garis harus melewati (0,0), kita mungkin gagal dalam pemasangan; pada dasarnya kemiringannya adalah 0, artinya kita tidak dapat menemukan hubungan linier antara โˆ†yแตข dan yแตขโ‚‹โ‚ sehingga sebuah garis melewati (0,0) dan menutupi sebagian besar titik data. Oleh karena itu, hasil pengujian akan bias terhadap keberadaan unit root.

Gambar 5 di bawah menunjukkan contoh pengujian Versi 1 yang gagal menolak hipotesis Null (p-value 0.6), dan datanya stasioner dengan rata-rata 10. Gambar 6 menjelaskan alasannya. Seperti yang Anda lihat, kita tidak dapat menemukan garis tanpa titik potong (R-kuadrat adalah 0), sehingga kemiringan garis yang dipasang adalah 0 (โˆ†yแตข tidak bergantung pada yแตขโ‚‹โ‚).

Gambar 5. Versi 1 gagal mengenali deret waktu stasioner (Gambar Oleh Penulis)
Gambar 6. Regresi linier gagal menemukan garis tanpa intersep (melewati (0,0)) (Gambar oleh Penulis)

Dari tes DF hingga tes ADF

Sekarang kita sudah paham bahwa uji DF adalah regresi linier dan cara mendapatkan p-value dari regresi linier, mari beralih ke ADF. Rumus ADF adalah:

Sekali lagi, regresi linier. Bagian โ€œAugmentedโ€ adalah kita harus memasukkan lebih banyak koefisien.

Paket statsmodels memungkinkan menampilkan ringkasan rinci tes AFT. Gambar 7 adalah hasilnya.

Gambar 7. Tes ADF dengan ringkasan rinci (Gambar oleh Penulis)

Kita melihat 'Regresi OLS' (solusi default untuk regresi linier) dan 17 koefisien. Saya tidak menentukan max lag, jadi pengujian akan mencoba hingga angka berdasarkan panjang deret waktu, yaitu 17.

Const (intersep) juga dipasang. Nilainya adalah 0.0596.

Mari kita coba menerapkan pengujian ADF dengan menggunakan regresi linier di Scikit-learn. Gambar 8 adalah kode dan outputnya.

Gambar 8. Tes ADF (hanya bagian regresi linier) dengan Scikit-learn (Gambar oleh Penulis)

Intersepnya adalah 0.0596, dan koefisien lainnya sama seperti pada Gambar 7. Regresi linier di Scikit-learn hanyalah OLS biasa. Kami melakukan hal yang sama, jadi tidak mengherankan jika hasilnya sama.

Akhir perjalanan

Setelah saya mengetahui cara menyetel parameter, saya menguji deret waktu asli pada Gambar 1 menggunakan versi 1 (regresi ='n') dan mendapatkan nilai p 0.08, yang menunjukkan bahwa deret tersebut tidak stasioner. Perlu diketahui bahwa data pada Gambar 1 adalah mean nol, sehingga dapat dibayangkan bahwa (0,0) lebih dekat ke titik data (โˆ†yแตข, yแตขโ‚‹โ‚). Menggunakan tes versi 1 akan membantu kami.

Karena kemiringan tren pada Gambar 1 minimal, kita juga dapat mengambil sampel ulang rangkaian waktu dengan langkah-langkah, sehingga meningkatkan kemiringan. Misalnya, jika saya mengujinya dengan empat langkah ( value[::4] ), ia tidak akan lulus pengujian ADF dengan pengaturan default (nilai p adalah 0.17 untuk regresi='c').

Masalah dipecahkan.

Takeaways

Jangan percaya begitu saja pada hasil ADF. Visualisasi adalah teman Anda.

Uji ADF adalah regresi linier sederhana, dan implementasi statsmodels menggunakan OLS untuk menyelesaikan masalah regresi. Kemudian menggunakan tabel Dickey โ€“ Fuller untuk mengekstrak nilai p yang memvalidasi hipotesis Null bahwa koefisien variabel lag pertama dari regresi yang dipasang adalah 0.

Tes ADF memiliki keterbatasan ketika menguji proses yang dekat dengan unit-root (ฮด mendekati 0).

Kita perlu memilih versi ADF yang tepat. Misalnya, ketika Anda melihat tren konstan dan ingin menguji 'stasiun tren', Anda perlu memilih 'ct' sebagai parameternya. Jika Anda ingin menangkap tren lambat untuk sinyal yang rata-ratanya seharusnya 0 seperti pada Gambar 1 dan Gambar 2, mungkin Anda perlu memilih 'n' sebagai parameter untuk menghindari dampak pemasangan intersep. Statsmodels juga mendukung tren kuantik dengan parameter 'ctt'. Opsi lanjutan ini bisa menjadi pilihan yang baik untuk beberapa kasus. Jika Anda ingin menggali lebih jauh, Silakan merujuk ke Berurusan dengan ketidakpastian tentang memasukkan istilah tren waktu intersep dan deterministik.

Saya harap Anda telah mempelajari sesuatu tentang tes ADF.

Bersenang-senanglah dengan rangkaian waktu Anda!

Hubungi saya di LinkedIn.

PS: Saya punya pengalaman dan minat terhadap data deret waktu. Jika Anda menyukai artikel ini, Anda mungkin tertarik dengan artikel saya yang lain postingan tentang deret waktu.

Referensi

File buku catatan di GitHub

Mengapa Deret Waktu Trending Ini Tidak Ada? Diterbitkan ulang dari Sumber https://towardsdatascience.com/why-is-this-trending-time-series-stationary-f3fb9447336f?source=rssโ€”-7f60cf5620c9โ€”4 melalui https://towardsdatascience.com/feed

<!โ€“

->

Stempel Waktu:

Lebih dari Konsultan Blockchain