Buat prediksi yang akurat dan dapat ditafsirkan
Menurut [2], Transformator Fusi Temporal mengungguli semua model Deep Learning terkemuka untuk perkiraan deret waktu.
Termasuk unggulan Pohon Peningkat Gradien model untuk data deret waktu tabular.
Tapi apa itu Transformator Fusi Temporal (TFT)[3] dan mengapa begitu menarik?
Pada artikel ini, kami menjelaskan secara singkat hal-hal baru dari Transformator Fusi Temporal dan membangun proyek end-to-end Peramalan Permintaan Energi. Secara khusus, kami akan membahas:
- Bagaimana menyiapkan data kita untuk format TFT.
- Cara membuat, melatih, dan mengevaluasi model TFT.
- Cara mendapatkan prediksi pada data validasi dan prediksi out-of-sample.
- Cara menghitung kepentingan fitur, pola musiman, dan kekokohan peristiwa ekstrim menggunakan model bawaan perhatian yang dapat ditafsirkan mekanisme.
Ayo selami!
Untuk analisis mendalam tentang arsitektur Temporal Fusion Transformer, periksa sebelumnya artikel.
Tkerajaan Fpenggunaan Tpemindah (TFT) adalah model berbasis Transformer yang memanfaatkan perhatian diri untuk menangkap dinamika temporal yang kompleks dari berbagai urutan waktu.
TFT mendukung:
- Deret waktu berganda: Kita dapat melatih model TFT pada ribuan deret waktu univariat atau multivariat.
- Peramalan Multi-Horizon: Model menghasilkan prediksi multi-langkah dari satu atau beberapa variabel target — termasuk interval prediksi.
- Fitur heterogen: TFT mendukung banyak jenis fitur, termasuk varian waktu dan variabel eksogen statis.
- Prediksi yang dapat ditafsirkan: Prediksi dapat ditafsirkan dalam hal kepentingan variabel dan musiman.
Salah satu ciri itu unik untuk Transformator Fusi Temporal. Kami akan membahas ini di bagian selanjutnya.
Di antara model deret waktu DL yang terkenal (misalnya, Jauh[4]), TFT menonjol karena mendukung berbagai jenis fitur. Ini adalah:
- Bervariasi waktu dikenal
- Bervariasi waktu tidak dikenal
- Waktu-invarian nyata
- Waktu-invarian kategorikal
Misalnya, bayangkan kita memiliki a kasus perkiraan penjualan:
Katakanlah kita harus memprediksi penjualan 3 produk. Itu num sales
adalah variabel sasaran. Itu CPI index
atau itu number of visitors
adalah waktu bervariasi tidak diketahui fitur karena mereka hanya diketahui sampai waktu prediksi. Namun, holidays
dan special days
adalah bervariasi waktu diketahui acara.
Grafik product id
is kategorikal waktu-invarian (statis). fitur. Fitur lain yang numerik dan tidak tergantung waktu seperti yearly_revenue
dapat dikategorikan sebagai waktu-invarian nyata.
Sebelum pindah ke proyek kami, pertama-tama kami akan menunjukkan tutorial mini tentang cara mengonversi data Anda ke format deret waktu yang diperpanjang.
Catatan: Semua gambar dan figur dalam artikel ini dibuat oleh penulis.
Untuk tutorial ini, kami menggunakan TemporalFusionTransformer
model dari Peramalan PyTorch perpustakaan dan Petir PyTorch:
pip instal obor pytorch-lightning pytorch_forecasting
Seluruh proses melibatkan 3 hal:
- Buat kerangka data panda dengan data deret waktu kami.
- Bungkus kerangka data kami menjadi a Kumpulan Data Rangkaian Waktu contoh.
- Lewati kami Kumpulan Data Rangkaian Waktu contoh untuk
TemporalFusionTransformer.
Grafik Kumpulan Data Rangkaian Waktu sangat berguna karena membantu kami menentukan apakah fiturnya berubah-ubah waktu atau statis. Plus, itu satu-satunya format itu TemporalFusionTransformer
menerima.
Mari buat set data pelatihan minimal untuk menunjukkan caranya Kumpulan Data Rangkaian Waktu karya:
Kita harus memformat data kita dengan cara berikut: Setiap kotak berwarna mewakili deret waktu yang berbeda, diwakili olehnya group
nilai.
Kolom terpenting dari kerangka data kami adalah time_idx
- itu menentukan urutan sampel. Jika tidak ada pengamatan yang hilang, nilainya harus bertambah +1 untuk setiap deret waktu.
Selanjutnya, kami membungkus kerangka data kami menjadi a Kumpulan Data Rangkaian Waktu contoh:
Semua argumen cukup jelas: The max_encoder_length
menentukan periode lihat balik dan max_prediction_length
menentukan berapa banyak titik data yang akan diprediksi. Dalam kasus kami, kami melihat kembali 3 langkah waktu di masa lalu untuk menghasilkan 2 prediksi.
Grafik Kumpulan Data Rangkaian Waktu instance sekarang berfungsi sebagai dataloader. Mari cetak batch dan periksa bagaimana data kita akan diteruskan ke TFT:
Batch ini berisi nilai-nilai pelatihan [0,1]
dari rangkaian waktu pertama (group 0
) dan nilai pengujian[2,3,4]
. Jika Anda menjalankan kembali kode ini, Anda akan mendapatkan nilai yang berbeda karena data diacak secara default.
Proyek kami akan menggunakan Diagram Beban Listrik20112014 [5] kumpulan data dari UCI. Buku catatan untuk contoh ini dapat diunduh dari di sini:
Dataset ini berisi penggunaan daya (dalam KWs) dari 370 klien/konsumen dengan frekuensi 15 menit. Rentang data 4 tahun (2011–2014).
Beberapa konsumen dibuat setelah 2011, sehingga penggunaan daya awalnya nol.
Kami melakukan preprocessing data sesuai dengan [3]:
- Agregat variabel target kita
power_usage
per jam. - Temukan tanggal paling awal untuk setiap deret waktu yang dayanya bukan nol.
- Buat fitur baru:
month
,day
,hour
danday_of_week
. - Pilih antara semua hari
2014–01–01
dan2014–09–07
.
Ayo mulai:
Download Data
wget https://archive.ics.uci.edu/ml/machine-learning-databases/00321/LD2011_2014.txt.zip
!buka zip LD2011_2014.txt.zip
Pengolah Data
Setiap kolom mewakili konsumen. Paling awal power_usage
nilainya adalah 0.
Selanjutnya, kami menggabungkan data per jam. Karena ukuran dan kerumitan model, kami melatih model kami hanya pada 5 konsumen (untuk konsumen dengan nilai bukan nol).
Sekarang, kami menyiapkan dataset kami untuk Kumpulan Data Rangkaian Waktu format. Perhatikan bahwa setiap kolom mewakili deret waktu yang berbeda. Oleh karena itu, kami 'melelehkan' kerangka data kami, sehingga semua deret waktu ditumpuk secara vertikal, bukan horizontal. Dalam prosesnya, kami membuat fitur baru kami.
Kerangka data praproses akhir disebut time_df
. Mari kita cetak isinya:
Grafik time_df
sekarang dalam format yang tepat untuk Kumpulan Data Rangkaian Waktu. Seperti yang sudah Anda duga sekarang, karena granularitasnya per jam, hours_from_start
variabel akan menjadi indeks waktu.
Analisis Data Eksplorasi
Pilihan 5 konsumen/time-series tidak acak. Itu power usage
dari setiap deret waktu memiliki properti yang berbeda, seperti nilai rata-rata:
time_df[['consumer_id','power_usage']].groupby('consumer_id').mean()
Mari plot bulan pertama dari setiap deret waktu:
Tidak ada tren yang terlihat, tetapi setiap deret waktu memiliki musim dan amplitudo yang sedikit berbeda. Kita dapat bereksperimen lebih lanjut dan memeriksa stasioneritas, dekomposisi sinyal, dan seterusnya, tetapi dalam kasus kita, kita fokus pada aspek pembangunan model saja.
Juga, perhatikan bahwa metode peramalan deret waktu lainnya seperti ARIMA harus memenuhi beberapa persyaratan (misalnya, deret waktu harus menjadi stasioner terlebih dahulu.) Dengan TFT, kita dapat membiarkan data apa adanya.
Buat DataLoader
Pada langkah ini, kami melewati kami time_df
ke Kumpulan Data Seri Waktu format yang sangat berguna karena:
- Ini menghindarkan kami dari menulis Dataloader kami sendiri.
- Kita dapat menentukan bagaimana TFT akan menangani fitur dataset.
- Kami dapat menormalkan dataset kami dengan mudah. Dalam kasus kami, normalisasi adalah wajib karena semua urutan waktu berbeda besarnya. Jadi, kami menggunakan Pengnormal Grup untuk menormalkan setiap deret waktu satu per satu.
Model kami menggunakan jendela lihat balik satu minggu (7*24) untuk memprediksi penggunaan daya selama 24 jam ke depan.
Perhatikan juga bahwa hours_from_start
adalah indeks waktu dan fitur yang bervariasi waktu. Itu power_usage
adalah variabel target kami. Demi demonstrasi, set validasi kami adalah hari terakhir:
Model Dasar
Selanjutnya, langkah yang hampir semua orang lupakan: Model dasar. Khususnya dalam peramalan deret waktu, Anda akan terkejut betapa seringnya prediktor yang naif mengungguli model yang lebih bagus sekalipun!
Sebagai garis dasar yang naif, kami memperkirakan kurva penggunaan daya pada hari sebelumnya:
Melatih Model Transformer Fusi Temporal
Kita bisa melatih model TFT kita menggunakan familiar Pelatih antarmuka dari PyTorch Lightning.
Perhatikan hal-hal berikut:
- Kami menggunakan Berhenti Dini callback untuk memantau hilangnya validasi.
- Kami menggunakan Papan tarik untuk mencatat metrik pelatihan dan validasi kami.
- Model kami menggunakan Kerugian Kuantil — jenis kerugian khusus yang membantu kami menampilkan interval prediksi. Untuk mengetahui lebih lanjut tentang fungsi Quantile Loss, lihat artikel ini.
- Kami menggunakan 4 kepala perhatian, seperti kertas aslinya.
Kami sekarang siap untuk membangun dan melatih model kami:
Itu dia! Setelah 6 zaman, EarlyStopping dimulai dan menghentikan pelatihan.
Muat dan Simpan Model Terbaik
Jangan lupa untuk menyimpan model Anda. Meskipun kita dapat mengambilnya, opsi teraman adalah menyimpan zaman terbaik secara langsung:
!zip -r model.zip lightning_logs/lightning_logs/version_1/*
Untuk memuat model lagi, unzip model.zip dan jalankan yang berikut — ingat saja jalur model terbaik:
Periksa Papan Tensor
Lihat lebih dekat kurva pelatihan dan validasi dengan Tensorboard:
Evaluasi Model
Dapatkan prediksi pada set validasi dan hitung rata-ratanya P50 (median kuantil) lepas:
2 deret waktu terakhir memiliki kerugian yang sedikit lebih tinggi karena besaran relatifnya juga tinggi.
Prediksi Plot pada Data Validasi
Jika kita melewati mode=raw
pada meramalkan() metode, kami mendapatkan lebih banyak informasi, termasuk prediksi untuk ketujuh kuantil. Kami juga memiliki akses ke nilai perhatian (lebih lanjut tentang itu nanti).
Perhatikan lebih dekat raw_predictions
variabel:
Kami menggunakan plot_prediksi() untuk membuat plot kami. Tentu saja, Anda dapat membuat plot kustom sendiri — yaitu plot_prediksi() memiliki manfaat ekstra untuk menambahkan nilai perhatian.
Catatan: Model kami memprediksi 24 titik data berikutnya dalam sekali jalan. Ini bukan skenario peramalan bergulir di mana model memprediksi a tunggal nilai setiap waktu dan 'jahit' semua prediksi bersama.
Kami membuat satu plot untuk setiap konsumen (total 5).
Hasilnya cukup mengesankan.
Kami Transformator Fusi Temporal model mampu menangkap perilaku semua 5 deret waktu, baik dari segi musiman maupun besarnya!
Perhatikan juga bahwa:
- Kami tidak melakukan penyetelan hyperparameter apa pun.
- Kami tidak menerapkan teknik rekayasa fitur mewah apa pun.
Di bagian selanjutnya, kami menunjukkan cara meningkatkan model kami dengan pengoptimalan hyperparameter.
Prediksi Plot Untuk Deret Waktu Tertentu
Sebelumnya, kami memplot prediksi pada data validasi menggunakan idx
argumen, yang mengulang semua deret waktu dalam kumpulan data kami. Kami dapat lebih spesifik dan menghasilkan prediksi pada deret waktu tertentu:
In Gambar 7, kami merencanakan hari ke depan MT_004 konsumen untuk indeks waktu = 26512.
Ingat, kolom pengindeksan waktu kami hours_from_start
mulai dari 26304 dan kita bisa mendapatkan prediksi dari 26388 dan seterusnya (karena kita menetapkan sebelumnya min_encoder_length=max_encoder_length // 2
yang sama dengan 26304 + 168//2=26388
Prakiraan Out-of-Sample
Mari buat prediksi di luar sampel, di luar titik data akhir dari data validasi — yaitu 2014–09–07 23:00:00
Yang harus kita lakukan adalah membuat kerangka data baru yang berisi:
- Jumlah
N
=max_encoder_length
tanggal yang lalu, yang bertindak sebagai jendela lihat balik — itu data penyandi dalam terminologi TFT. - Tanggal masa depan ukuran
max_prediction_length
yang ingin kami hitung prediksi kami — yaitu data dekoder.
Kami dapat membuat prediksi untuk semua 5 deret waktu kami, atau hanya satu. Gambar 7 menunjukkan prediksi out-of-sampel untuk konsumen MT_002:
Peramalan yang akurat adalah satu hal, tetapi kemampuan menjelaskan juga sangat penting saat ini.
Dan lebih buruk lagi untuk model Deep Learning, yang dianggap sebagai kotak hitam. Metode seperti JERUK NIPIS dan BENTUK dapat memberikan penjelasan (sampai batas tertentu) tetapi tidak berfungsi dengan baik untuk deret waktu. Plus, mereka adalah metode post-hoc eksternal dan tidak terikat pada model tertentu.
Transformator Fusi Temporal menyediakan tiga jenis interpretabilitas:
- Dari segi musiman: TFT memanfaatkan novelnya Perhatian Multi-Kepala yang Dapat Diartikan mekanisme untuk menghitung pentingnya langkah waktu lampau.
- Dari segi fitur: TFT memanfaatkannya Jaringan Seleksi Variabel modul untuk menghitung pentingnya setiap fitur.
- Kekokohan kejadian ekstrem: Kami dapat menyelidiki bagaimana deret waktu berperilaku selama peristiwa langka
Jika Anda ingin belajar secara mendalam tentang cara kerja batin Perhatian Multi-Kepala yang Dapat Diartikan dan Jaringan Seleksi Variabel, cek artikel saya sebelumnya.
Interpretabilitas berdasarkan musim
TFT mengeksplorasi bobot perhatian untuk memahami pola temporal lintas langkah waktu lampau.
Garis abu-abu di semua plot sebelumnya mewakili skor perhatian. Lihat plot itu lagi - apakah Anda memperhatikan sesuatu? Gambar 8 menunjukkan temuan dari Gambar 7 dan juga memperhitungkan skor perhatian:
Skor perhatian mengungkapkan seberapa besar dampak langkah waktu tersebut ketika model mengeluarkan prediksinya. Puncak kecil mencerminkan musiman harian, sedangkan puncak yang lebih tinggi menjelang akhir mungkin menyiratkan musiman mingguan.
Jika kita rata-ratakan kurva perhatian di semua langkah waktu dan deret waktu (bukan hanya 5 yang kita gunakan dalam tutorial ini), kita akan mendapatkan bentuk yang tampak simetris di Gambar 9 dari kertas TFT:
Pertanyaan: Apa bagusnya ini? Tidak bisakah kita memperkirakan pola musiman dengan metode seperti plot ACF, dekomposisi sinyal waktu, dll.?
Jawaban: BENAR. Namun, mempelajari bobot perhatian TFT memiliki keuntungan tambahan:
- Kami dapat mengonfirmasi bahwa model kami menangkap dinamika musiman yang tampak dari urutan kami.
- Model kami juga dapat mengungkapkan pola tersembunyi karena bobot perhatian jendela masukan saat ini mempertimbangkan semua masukan sebelumnya.
- Plot bobot perhatian tidak sama dengan plot autokorelasi: Plot autokorelasi mengacu pada urutan tertentu, sedangkan bobot perhatian di sini berfokus pada dampak setiap langkah waktu dengan melihat semua kovariat dan deret waktu.
Interpretabilitas berdasarkan fitur
Grafik Jaringan Seleksi Variabel komponen TFT dapat dengan mudah memperkirakan kepentingan fitur:
In Gambar 10, kami perhatikan hal berikut:
- Grafik
hour
danday_of_week
memiliki skor yang kuat, baik sebagai pengamatan masa lalu dan kovariat masa depan. Tolok ukur dalam makalah asli berbagi kesimpulan yang sama. - Grafik
power_usage
jelas merupakan kovariat teramati yang paling berpengaruh. - Grafik
consumer_id
tidak terlalu signifikan di sini karena kami hanya menggunakan 5 konsumen. Dalam makalah TFT, di mana penulis menggunakan 370 konsumen, variabel ini lebih signifikan.
Catatan: Jika variabel statis pengelompokan Anda tidak penting, kemungkinan besar kumpulan data Anda juga dapat dimodelkan dengan baik oleh model distribusi tunggal (seperti ARIMA).
Deteksi Peristiwa Ekstrim
Deret waktu terkenal rentan terhadap perubahan mendadak pada propertinya selama peristiwa langka (juga disebut sebagai guncangan).
Lebih buruk lagi, peristiwa itu sangat sulit dipahami. Bayangkan jika variabel target Anda menjadi tidak stabil untuk waktu yang singkat karena kovariat secara diam-diam mengubah perilaku:
Apakah ini kebisingan acak atau pola persisten tersembunyi yang lolos dari model kita?
Dengan TFT, kami dapat menganalisis ketangguhan setiap fitur individu di seluruh rentang nilainya. Sayangnya, kumpulan data saat ini tidak menunjukkan volatilitas atau kejadian langka — hal itu lebih mungkin ditemukan di data keuangan, penjualan, dan sebagainya. Namun, kami akan menunjukkan cara menghitungnya:
Beberapa fitur tidak memiliki semua nilainya dalam kumpulan data validasi, jadi kami hanya menampilkan hour
dan consumer_id
:
Di kedua Angka, hasilnya menggembirakan. Di dalam Gambar 12, kami memperhatikan konsumen itu MT_004 sedikit berkinerja buruk dibandingkan dengan konsumen lain. Kami dapat memverifikasi ini jika kami menormalkan kerugian P50 setiap konsumen dengan penggunaan daya rata-rata yang kami hitung sebelumnya.
Bilah abu-abu menunjukkan distribusi setiap variabel. Satu hal yang selalu saya lakukan adalah menemukan nilai mana yang memiliki frekuensi rendah. Kemudian, saya memeriksa performa model di area tersebut. Oleh karena itu, Anda dapat dengan mudah mendeteksi jika model Anda menangkap perilaku kejadian langka.
Secara umum, Anda dapat menggunakan fitur TFT ini untuk menyelidiki kelemahan model Anda dan melanjutkan penyelidikan lebih lanjut.
Kita dapat menggunakan dengan mulus Transformator Fusi Temporal dengan pilihan untuk melakukan penyetelan hyperparameter:
Masalahnya adalah karena TFT adalah model berbasis Transformer, Anda memerlukan sumber daya perangkat keras yang signifikan!
Transformator Fusi Temporal tidak diragukan lagi merupakan tonggak sejarah bagi komunitas Time-Series.
Model tidak hanya mencapai hasil SOTA, tetapi juga menyediakan kerangka kerja untuk interpretasi prediksi. Modelnya juga tersedia di Panahan perpustakaan python, yang didasarkan pada perpustakaan PyTorch Forecasting.
Terakhir, jika Anda penasaran untuk mempelajari tentang arsitektur bangunan tersebut Transformator Fusi Temporal secara rinci, periksa artikel pendamping pada kertas aslinya.
Temporal Fusion Transformer: Time Series Forecasting with Deep Learning — Tutorial Lengkap Dipublikasikan Ulang dari Sumber https://towardsdatascience.com/temporal-fusion-transformer-time-series-forecasting-with-deep-learning-complete-tutorial-d32c1e51cd91?source= rss—-7f60cf5620c9—4 melalui https://towardsdatascience.com/feed
<!–
->
- Bitcoin
- bizbuildermike
- blockchain
- kepatuhan blockchain
- konferensi blockchain
- Konsultan Blockchain
- coinbase
- kecerdasan
- Konsensus
- konferensi crypto
- pertambangan kripto
- cryptocurrency
- Terdesentralisasi
- Defi
- Aset-Aset Digital
- ethereum
- Mesin belajar
- token yang tidak dapat dipertukarkan
- plato
- plato ai
- Kecerdasan Data Plato
- Platoblockchain
- Data Plato
- permainan plato
- Poligon
- bukti kepemilikan
- W3
- zephyrnet.dll