Bagaimana python menghitung autokorelasi?

Jika Anda telah mengerjakan tugas deret waktu mana pun, saya yakin pada satu titik Anda melihat pendekatan untuk mengidentifikasi sifat hubungan dalam deret waktu — ukuran autokorelasi. Misalnya, Anda mungkin menggunakan plot ACF dan PACF untuk menentukan urutan model ARMA

Namun, pernahkah Anda bertanya-tanya bagaimana cara menghitung koefisien korelasi tersebut? . Kami akan menjelaskan secara singkat apa kedua ukuran itu dan kemudian menunjukkan langkah demi langkah cara menghitungnya dengan Python

Dan untuk mengelola ekspektasi — kita akan fokus pada perhitungan di balik koefisien, bukan interpretasinya dan detail tentang cara menggunakannya untuk pemodelan deret waktu. Itu akan menjadi topik untuk artikel lain

Mempersiapkan

Seperti biasa, kami dengan cepat mengimpor perpustakaan yang diperlukan. Kami akan menggunakan fungsi dari statsmodels sebagai patokan untuk memastikan perhitungan kami benar

Data

Untuk artikel ini, kami akan menggunakan kumpulan data klasik untuk deret waktu — kumpulan data penumpang maskapai. Anda dapat menemukan kumpulan data di perpustakaan seaborn (

array([1.        , 0.94804734, 0.87557484, 0.80668116, 0.75262542,        0.71376997, 0.6817336 , 0.66290439, 0.65561048, 0.67094833,        0.70271992])
0), atau unduh versi yang sedikit diproses sebelumnya dari GitHub saya. Untuk perhitungan kami, kami akan menggunakan
array([1.        , 0.94804734, 0.87557484, 0.80668116, 0.75262542,        0.71376997, 0.6817336 , 0.66290439, 0.65561048, 0.67094833,        0.70271992])
1 Seri yang disebut
array([1.        , 0.94804734, 0.87557484, 0.80668116, 0.75262542,        0.71376997, 0.6817336 , 0.66290439, 0.65561048, 0.67094833,        0.70271992])
2, yang berisi jumlah bulanan penumpang maskapai penerbangan

Gambar oleh penulis

Saya cukup yakin Anda sudah cukup familiar dengan plot di atas. ) Kemudian, kami membuat dua plot yang berisi nilai ACF/PACF. Meskipun kami tidak akan mereplikasi plot secara eksplisit (meskipun kami bisa), kami fokus pada nilai yang diwakili oleh titik (dan garis vertikal) pada plot

Gambar oleh penulis

Catatan. Meskipun kami tidak akan membahasnya secara eksplisit dalam artikel ini, area yang diarsir biru adalah selang kepercayaan. Nilai ACF/PACF yang berada di dalam interval tidak dianggap signifikan secara statistik pada level 5% (pengaturan default, yang dapat kita ubah)

Autokorelasi

Mari kita mulai dengan yang lebih sederhana dari keduanya. Singkatnya, autokorelasi adalah korelasi deret waktu dengan pasangannya yang tertinggal. Contoh paling sederhana — lag 1 — akan memberi tahu kami seberapa berkorelasi jumlah penumpang maskapai penerbangan bulan ini dengan jumlah bulan sebelumnya. Secara alami, kita dapat mengubah kalimat itu dengan jumlah kelambatan yang berubah-ubah

Setelah rekap yang sangat singkat ini, mari kita hitung tolok ukur menggunakan statsmodels. Plot yang kami buat sebelumnya menggunakan 24 lag, tetapi demi kenyamanan, kami akan mempertimbangkan 10 lag. Menghitung nilai ACF semudah cuplikan berikut

acf(df, nlags=10)

Yang menghasilkan array berikut

array([1.        , 0.94804734, 0.87557484, 0.80668116, 0.75262542,        0.71376997, 0.6817336 , 0.66290439, 0.65561048, 0.67094833,        0.70271992])

Kita tahu bahwa autokorelasi adalah korelasi deret waktu dengan nilai laggednya. Jadi untuk perhitungan kami, kami dapat dengan mudah membuat DataFrame dengan seri asli dan tertinggal di kolom terpisah dan kemudian menggunakan metode

array([1.        , 0.94804734, 0.87557484, 0.80668116, 0.75262542,        0.71376997, 0.6817336 , 0.66290439, 0.65561048, 0.67094833,        0.70271992])
4 untuk menghitung koefisien korelasi Pearson. Mari kita coba

Kami mulai dengan membuat DataFrame

Yang menghasilkan tabel berikut

Gambar oleh penulis

Kolom

array([1.        , 0.94804734, 0.87557484, 0.80668116, 0.75262542,        0.71376997, 0.6817336 , 0.66290439, 0.65561048, 0.67094833,        0.70271992])
5 adalah seri asli dan semua yang lain digeser dengan tepat. Kemudian, kami menghitung matriks korelasi dan mencetak kolom untuk seri asli — ini menunjukkan bagaimana seri asli berkorelasi dengan semua kolom DataFrame

acf_df.corr()["y_lag_0"].values

Yang mengembalikan array berikut

array([1.        , 0.96019465, 0.89567531, 0.83739477, 0.7977347 ,        0.78594315, 0.7839188 , 0.78459213, 0.79221505, 0.8278519 ,        0.8827128 ])
_

Ada yang salah dan nilainya tidak sesuai dengan tolok ukur kami. Dan apa yang bisa menjadi alasan untuk itu? . Mari kita lihat rumus autokorelasi

Sumber. Peramalan. Prinsip dan Praktek Edisi ke-3

Ada beberapa hal yang menjadi perhatian kita di sini

  • semua deret dalam rumus direndahkan, yaitu nilai rata-rata telah dikurangi darinya. Kami belum melakukannya secara eksplisit, tetapi itu terjadi di balik terpal dalam metode
    array([1.        , 0.94804734, 0.87557484, 0.80668116, 0.75262542,        0.71376997, 0.6817336 , 0.66290439, 0.65561048, 0.67094833,        0.70271992])
    4
  • apa bedanya dengan rumus korelasi umum — kita selalu mengurangkan rata-rata deret aslinya. Karena kita membuat lag, rata-rata seri asli dan yang lag tidak akan sama
  • dalam penyebut, kita bagi dengan varian dari deret aslinya. Dalam koefisien korelasi Pearson, kita akan membaginya dengan perkalian standar deviasi dari dua variabel yang dipertimbangkan

Sekarang mari kita hitung nilai ACF menggunakan rumus di atas

Yang mengembalikan array berikut

array([1.        , 0.94804734, 0.87557484, 0.80668116, 0.75262542,        0.71376997, 0.6817336 , 0.66290439, 0.65561048, 0.67094833,        0.70271992])

Ini sangat cocok untuk apa yang kami hitung menggunakan fungsi

array([1.        , 0.94804734, 0.87557484, 0.80668116, 0.75262542,        0.71376997, 0.6817336 , 0.66290439, 0.65561048, 0.67094833,        0.70271992])
7 dari statsmodels

Di samping catatan, rumusnya mungkin berasal dari buku terbaik tentang peramalan deret waktu — Peramalan. Prinsip dan Praktek. Saya sangat merekomendasikannya kepada siapa pun yang tertarik dengan topik ini. Anda dapat membaca opini/review saya di sini

Buku terbaik untuk mulai belajar tentang peramalan deret waktu

Dan untuk membuatnya lebih baik — gratis

menuju ilmu data. com

Autokorelasi Parsial

Autokorelasi parsial sedikit lebih sulit untuk dipahami. Sekali lagi, ini menggambarkan hubungan antara deret waktu dan rekan-rekannya yang tertinggal, namun, kali ini menghilangkan semua efek perantara. Kita dapat menggunakan autokorelasi parsial untuk menentukan, misalnya, bagaimana hubungan jumlah penumpang bulan ini dengan jumlah 6 bulan yang lalu. Dalam contoh ini, saat menghitung PACF, kami akan menghapus informasi tentang bagaimana nilai dari 6 bulan lalu memengaruhi nilai 5 bulan lalu, lalu efek antara lag ke-5 dan ke-4, dan seterusnya hingga bulan terakhir.

Ini juga berarti bahwa autokorelasi parsial pertama sama dengan autokorelasi pertama, karena tidak ada efek perantara yang harus dihilangkan.

Agar lebih menarik, ada cukup banyak pendekatan untuk menghitung autokorelasi parsial. Fungsi dalam statsmodels_ menawarkan 3 metode. pendekatan Yule-Walker, pendekatan OLS (ordinary least square), dan pendekatan rekursi Levinson-Durbin. Selain itu, ada beberapa varian alternatif untuk masing-masingnya (total ada 7+ kombinasi berbeda)

Pada artikel ini, kami fokus pada pendekatan OLS, yang didasarkan pada model autoregressive (AR). Rincian algoritma dijelaskan di bawah ini

Pertama, kami membuat matriks (atau DataFrame) dari nilai yang tertinggal hingga yang ke-N. Pada titik ini, kami tidak menghapus pengamatan apa pun, meskipun secara teknis tidak tersedia (karena cara pembuatan kelambatan). Kemudian, untuk setiap iterasi (dilambangkan dengan k) antara 2 dan N

  • kami menyesuaikan model regresi linier (dengan intersep) menggunakan seri asli sebagai target dan seri tertinggal hingga lag ke-k sebagai fitur. Pada langkah ini, kami menggunakan observasi yang dimulai dengan yang ke-k, karena tidak semua observasi tersedia untuk fitur lag
  • koefisien variabel ke-k adalah koefisien autokorelasi parsial ke-k

Gagasan di balik pendekatan ini adalah bahwa varian yang dijelaskan oleh titik waktu antara dapat dikeluarkan dari koefisien lag k-th. Di bawah ini kami jelaskan perbedaan antara kedua metode OLS yang tersedia di statsmodels. Jangan ragu untuk melewati deskripsi itu jika terlalu teknis, atau Anda hanya ingin langsung ke bagiannya

Tepatnya, kami menjelaskan apa yang statsmodels memanggil metode OLS "efisien", yang juga merupakan metode OLS default. Metode "tidak efisien" sangat mirip, dengan beberapa penyesuaian kecil. Pertama, sebelum membuat matriks nilai lagged, kami merendahkan deret aslinya. Kemudian, setelah membuat matriks kelambatan, kami menghapus N pengamatan pertama (dalam pendekatan efisien, kami secara iteratif mengurangi jumlah pengamatan alih-alih membuang lebih dari yang diperlukan di awal). Ini memiliki implikasi praktis yang jelas. Mari kita asumsikan bahwa Anda menggunakan metode yang tidak efisien dua kali, pertama untuk mendapatkan koefisien kelambatan hingga ke-2, dan kemudian ulangi proses kelambatan hingga ke-4. Dalam skenario seperti itu, koefisien autokorelasi parsial ke-2 yang diperoleh pada perhitungan pertama tidak akan sama dengan koefisien ke-2 yang sesuai dari perhitungan terakhir. Itu karena jumlah pengamatan yang berbeda digunakan untuk regresi yang mendasarinya. Anda dapat melihat contohnya di Notebook terlampir (tautan di bagian akhir artikel)

Oke, teknisnya sudah cukup, mari kita hitung autokorelasi parsial untuk deret waktu penumpang maskapai. Seperti sebelumnya, kita mulai dengan membuat tolok ukur menggunakan fungsi

acf_df.corr()["y_lag_0"].values
2 dari statsmodels

pacf(df, nlags=10, method="ols")

Yang menghasilkan array berikut

array([ 1.        ,  0.95893198, -0.32983096,  0.2018249 ,  0.14500798,         0.25848232, -0.02690283,  0.20433019,  0.15607896,  0.56860841,         0.29256358])

Kemudian, kami menghitung koefisien autokorelasi parsial menggunakan langkah-langkah yang dijelaskan di atas

Kode harus cukup jelas, mengingat ini hampir merupakan terjemahan literal dari langkah-langkah tertulis ke dalam kode Python. Satu-satunya hal yang mungkin baru adalah fungsi

acf_df.corr()["y_lag_0"].values
4 dari statsmodels. Alih-alih membuat seri lagged secara manual — seperti yang telah kita lakukan sebelumnya dalam contoh ACF — kita dapat menggunakan fungsi praktis ini. Ini memiliki beberapa fitur yang mudah digunakan, misalnya, memungkinkan kita untuk secara otomatis menghapus beberapa pengamatan pertama yang berisi nilai tidak valid. Untuk informasi lebih lanjut, silakan lihat dokumentasi

Kode kami menghasilkan koefisien autokorelasi parsial berikut, yang sama dengan yang kami buat sebelumnya dengan fungsi

acf_df.corr()["y_lag_0"].values
2

array([ 1.        ,  0.95893198, -0.32983096,  0.2018249 ,  0.14500798,         0.25848232, -0.02690283,  0.20433019,  0.15607896,  0.56860841,         0.29256358])

Catatan. Pada artikel ini, Anda dapat menemukan pengantar langkah demi langkah ke metode lain untuk menghitung koefisien autokorelasi parsial, kali ini berdasarkan korelasi residu.

Takeaway
  • fungsi autokorelasi menggambarkan hubungan antara deret waktu dan pasangannya yang tertinggal,
  • autokorelasi parsial menggambarkan hubungan langsung, yaitu menghilangkan efek dari nilai-nilai tertinggal menengah,
  • ada beberapa cara menghitung koefisien autokorelasi parsial, mungkin yang paling sederhana adalah yang didasarkan pada estimasi model autoregresif (AR) menggunakan OLS

Anda dapat menemukan kode yang digunakan untuk artikel ini di GitHub saya. Juga, setiap umpan balik yang konstruktif dipersilakan. Anda dapat menghubungi saya di Twitter atau di komentar

Suka artikelnya? . Jika Anda menggunakan tautan ini untuk menjadi anggota, Anda akan mendukung saya tanpa biaya tambahan. Terima kasih sebelumnya dan sampai jumpa

Bagaimana Anda menghitung korelasi otomatis dengan Python?

Gunakan panda. corr() pada kerangka data baru untuk menghitung matriks korelasi .

Bagaimana autokorelasi dihitung?

Jumlah autokorelasi yang dihitung adalah sama dengan panjang efektif deret waktu dibagi 2 , di mana panjang efektif deret waktu . Jumlah autokorelasi yang dihitung berkisar antara minimal 2 dan maksimal 400.

Bagaimana cara menghitung autokorelasi di numpy?

Artinya, autokorelasi dapat dihitung dengan cara berikut. .
kurangi rata-rata dari sinyal dan dapatkan sinyal yang tidak bias
menghitung transformasi Fourier dari sinyal yang tidak bias
menghitung kerapatan spektral daya dari sinyal, dengan mengambil norma kuadrat dari setiap nilai transformasi Fourier dari sinyal yang tidak bias

Bagaimana Anda menginterpretasikan plot autokorelasi dengan Python?

Jika nilai autokorelasi mendekati 0, maka nilai antara pengamatan berurutan tidak berkorelasi satu sama lain . Sebaliknya, nilai autokorelasi yang mendekati 1 atau -1 menunjukkan bahwa terdapat korelasi positif atau negatif yang kuat antara pengamatan yang berurutan.