Peramalan Deret Waktu Menjadi Mudah Menggunakan Dart

Node Sumber: 1246070

Ikhtisar Time Series Menggunakan Draf

Bayangkan ini!

  • Anda bekerja sebagai ilmuwan data untuk perusahaan yang menyediakan solusi untuk bisnis. Pada satu hari, bos Anda menyerahkan dua set data dengan catatan tidak ada penumpang udara (penumpang udara) dan susu yang diproduksi oleh sapi (terutama susu), meminta analisis data secara rinci dan memprediksi nilai masa depannya.
  • Dengan memeriksa, Anda tidak menemukan hubungan antara keduanya. Akibatnya, Anda memutuskan untuk membuat dua model secara terpisah. Jadi Anda memproses kumpulan data (panda), menemukan musiman (model statistik), dan melatih dua model (Tensorflow/Pytorch). Setelah banyak hyper-tuning, Anda menemukan kecocokan dan memprediksi hasilnya.
  • A dengan konsekuensi, Anda pergi ke bos Anda, dan seperti biasa, bos Anda bertanya "tidak bisakah kita melakukan ini menggunakan satu model?".

Pertanyaan yang diajukan oleh bos memang benar. Meskipun banyak perbaikan di lapangan, orang-orang merasa sulit untuk mengerjakannya DATA DERI WAKTU. Jadi perusahaan, Unit8, membuat paket python yang disebut PANAHAN, yang bertujuan untuk memecahkan masalah dalam skenario.

Artikel ini adalah pengantar praktis tentang cara memulai perpustakaan. Tepatnya, kami akan membuat ulang skenario yang sama dan melihat apa yang ditawarkan perpustakaan ini kepada kami. Jadi mari kita mulai.

Pemasangan Draf untuk Time Series

Untuk memulai, kami akan menginstal panahan. Menggunakan anaconda lingkungan sangat dianjurkan. Dengan asumsi Anda telah membuat lingkungan, buka terminal dan masukkan perintah berikut:

conda install -c conda-forge -c pytorch u8darts-semua

Catatan: Mungkin perlu waktu karena ukuran yang dapat diunduh kira-kira 2.98 Gb dan akan mengunduh semua model yang tersedia!

Setelah instalasi, luncurkan notebook jupyter dan coba impor perpustakaan menggunakan:

anak panah impor

Jika tidak ada yang keluar, berarti berhasil diimpor, jika tidak, google kesalahannya :)

Memuat Dataset dari Perpustakaan Dart

Untuk mempermudah, kita akan menggunakan perpustakaan kumpulan data dart untuk memuat datanya.

dari darts.datasets, impor AirPassengersDataset, MonthlyMilkDataset

Di sini kami telah mengimpor dua set data yang diperlukan saat kami meniru skenario.

Mencetak Kumpulan Data

Sekarang mari kita mencetak dataset. Ada banyak cara untuk melakukannya, tetapi kami akan fokus pada dua yang paling intuitif.

Sebagai Data Array

Secara umum, kita dapat memuat dataset secara langsung menggunakan memuat() metode, menghasilkan campuran dari susunan dan mengkoordinasikan - Array Data memiliki bulan tersebut. tipe data sebagai tanggal-waktu (mewakili deret waktu).

AirPassengersDataset().load() BulananMilkDataset().load()

Keluaran:

penumpang udara | Time Series menggunakan Darts
kumpulan data udara
kumpulan data susu | Time Series menggunakan Darts
susu-dataset

 

Sebagai Dataframe

Atau, dapat dimuat sebagai bingkai data menggunakan pd_dataframe().

display("Dataset Penumpang Udara",AirPassengersDataset().load().pd_dataframe()) display("Dataset Susu Bulanan",MonthlyMilkDataset().load().pd_dataframe())

Dataset penumpang udara
kumpulan data susu bulanan

Sepertinya kami memiliki 144 pengamatan untuk penumpang udara dan 168 pengamatan untuk dataset susu bulanan.

 

Merencanakan Titik Data

Dataframe tidak apa-apa, tetapi tidak mengungkapkan banyak hal, jadi kami dapat memplot dataset kami menggunakan matplotlib:

# memuat pustaka impor matplotlib.pyplot sebagai plt %matplotlib sebaris
# Memuat Dataset sebagai Data-Array air_series = AirPassengersDataset().load() milk_series = MonthlyMilkDataset().load()
#plot chart air_series.plot(label="Jumlah Penumpang") milk_series.plot(label="Pounds Susu Diproduksi Per Bulan" ) plt.legend();

Dalam kode di atas, kita hanya sarat data dan diplot dia. Juga, kami menyertakan label dan legenda sehingga mudah dipahami.

Hasilnya keluar sebagai grafik yang terlihat bagus:

Merencanakan Titik Data
Merencanakan

Di sini sumbu x mewakili bulan, dan sumbu y- Data.

Perhatikan bahwa Anda perlu menurunkan versi ke matplotlib 3.1.3 agar kode berfungsi di collab.

 

Pengolah Data

Dengan cermat mengamati hal di atas, kita dapat menemukan bahwa data tidak diskalakan, yaitu menunjukkan variabilitas, jadi ada baiknya jika kita skalakan ulang.

Penskalaan Standar

Untungnya kami memiliki Scaler () kelas untuk ini di perpustakaan itu sendiri, dan kita dapat menggunakannya dengan membuat objek scaler dan kemudian memasangnya ke dataset.

  1. # impor
  2. dari darts.dataprocessing.transformers import Scaler
    
    
  3. # membuat objek penskala
  4. scaler_air , scaler_milk = Scaler(), Scaler()
    
    
  5. #melakukan penskalaan
  6. air_series_scaled = scaler_air.fit_transform(air_series)
  7. milk_series_scaled = scaler_milk.fit_transform(seri_susu)

Dalam kode di atas, kami telah mengimpor Scaler, dibuat dua objek skala, dan melakukan skala.

Sekarang mari kita lihat perubahannya untuk melihat perbedaannya:

# plottingair_ds.plot(label="Jumlah Penumpang") air_series_scaled.plot(label = "Penumpang Udara Berskala") milk_series_scaled.plot(label = "Susu Dalam Pound") plt.legend();
Penskalaan Standar
Sklaed_plot

Seperti yang dapat disaksikan, data kami diskalakan dan terbukti dalam sumbu y plot.

Perpecahan Uji Kereta

Sekarang menggunakan data skala, kami akan membagi dataset kami. Untuk ini, kami akan mengambil 36 sampel pertama sebagai set pelatihan dan tetap sebagai set validasi untuk kedua set data.

air_series_train, air_series_val = air_series_scaled[:-36], air_series_scaled[-36:] milk_series_train, milk_series_val = milk_series_scaled[:-36], milk_series_scaled[-36:]

Perhatikan ini bukan bingkai data melainkan objek deret waktu panah.

Untuk konfirmasi, Anda dapat melakukan:

jenis (air_series_train)

Melatih Model Deret Waktu menggunakan Dart

Akhirnya, kami dalam keadaan untuk melakukan pelatihan. DART menyediakan banyak solusi seperti Arima, Auto-Arima, Varima FFT, Empat Theta, Nabi, dan beberapa model pembelajaran mendalam seperti RNN, Blok RNN ​​(Menggunakan LSTM), TCN, NBEATS, Transformer.

 

Memuat Model Seri Waktu Darts

Untuk kasus penggunaan kami, kami akan menggunakan N-BEAT model disediakan karena mendukung peramalan deret waktu multivarian (data memiliki banyak fitur), yang memungkinkan kami melakukan semua peramalan menggunakan satu model. Jadi mari kita memuatnya.

# mengimpor model dari darts.models mengimpor NBEATSModel print('model_loaded')
>> model_loaded

CATATAN: Anda bebas menggunakan model apa pun yang Anda sukai, tetapi pastikan Anda membaca dokumentasi dan melihat fitur setiap model.

 

Membuat Objek Model

Setelah memuat model kita, mari kita mulai.

# membuat model objek model = NBEATSModel(input_chunk_length=24 , output_chunk_length=12, n_epochs = 100 , random_state = 15)

Salah satu hal cepat yang perlu diperhatikan di sini adalah memasukkan, dan panjang potongan keluaran is 24 bulan dan 12 bulan, masing-masing. Dalam deret waktu, kami biasanya lebih memilih jendela dari waktu ke waktu daripada menggunakan data nyata. Juga, kami melakukan pelatihan kami untuk 100 zaman.

Elaborasi Tambahan

  • Pada tahap/epoch pertama, kami akan menyediakan 24 bulan data sebagai data input dan 12 bulan sebagai data output.
  • Pada langkah berikutnya, kami akan bergerak satu langkah ke depan dan memberikan data 24 bulan ke depan sebagai input dan output 12 bulan, dan seterusnya hingga semua titik data dari set pelatihan habis.
  • Berdasarkan ini pada setiap langkah kerugian dihitung dan model belajar untuk tampil lebih baik dan lebih baik dari waktu ke waktu.

Pas Data Untuk Model

Sekarang akhirnya, mari kita latih model kita dengan menyesuaikan data pelatihan kita. Mungkin butuh waktu, jadi bersabarlah!

# pas model model.fit([air_series_train, milk_series_train], verbose = True)

Verbose = Benar menjamin log.

Pas Data Untuk Model
Log Pelatihan

Prediksi dan Evaluasi Model Time Series Menggunakan Darts

Untuk memastikan model yang dilatih berkinerja baik, kami dapat memeriksanya PETA  – Rata-rata kesalahan persentase absolut untuk data yang diprediksi.

# impor dari darts.metrics impor mape
pred_air = model.predict(n = 36, series = air_series_train) pred_milk = model.predict(n =36, series = milk_series_train)
print("Peta = {:.2f}%".format(mape(air_series_scaled , pred_air))) print("Peta = {:.2f}%".format(mape(milk_series_scaled , pred_milk))))

Keluaran:

>> Mape = 6.74% >> Mape = 16.82%

Terbukti, kesalahannya cukup rendah, dan pola menarik muncul bahwa ada agak hubungan antara susu yang dihasilkan oleh sapi dan jumlah penumpang udara bepergian, yang cukup menarik. Juga, perhatikan bahwa kami telah menggunakan satu model untuk memprediksi kedua kumpulan data! (masalah yang ditangani oleh bos kami untuk diperbaiki😁).

Visualisasi Deret Waktu menggunakan Prediksi Model Dart

Terakhir, mari kita lihat bagaimana prediksi kita muncul pada grafik menggunakan cara yang sama seperti kita memeriksa dataset kita, tetapi menggunakan dataset yang diskalakan untuk interpretasi yang lebih baik.

# hasil plot air_series_scaled .plot(label = "actual") pred.plot(label = "forecasted") # validasi data set plt.legend()
# hasil plot milk_ds_scaled.plot(label = "actual") pred.plot(label = "forecasted") # validasi data set plt.legend()


Visualisasikan Time Series menggunakan Prediksi Model Darts 1
air_dataset-prediksi
Visualisasikan Time Series menggunakan Prediksi Model Darts 2
milk_dataset-prediksi

Garis biru mewakili data yang diprediksi sangat dekat dengan aktual (bkekurangan garis). Berarti kami telah berhasil dalam pencarian kami dan memecahkan masalah yang dibahas dalam skenario kami. Selamat untuk Anda!

Kesimpulan

Beberapa kesimpulan yang dapat ditarik adalah:

  • Perpustakaan seperti dart dapat memberi kita cara baru untuk bekerja dari waktu ke waktu, memungkinkan fleksibilitas dan efisiensi.
  • Sebagai bukti, kita dapat memuat, memproses, dan bahkan melatih beberapa kumpulan data menggunakan satu pustaka dan model.
  • Dengan segala daya tariknya, seseorang dapat berhasil menobatkannya sebagai scikit-belajar untuk data deret waktu.

Dengan ini, kita telah sampai pada akhir artikel miniatur ini. Saya harap Anda menemukan ini menarik dan akan menerapkan yang dipelajari di beberapa proyek Anda.

Sampai jumpa lagi.

REFERENSI:

Buku Catatan Kode:- Collab

Untuk menghubungkan:-  Linkedin, Twitter, GithubAnalitikVidhya

Semua gambar oleh penulis.

Media yang ditampilkan dalam artikel ini bukan milik Analytics Vidhya dan digunakan atas kebijaksanaan Penulis.

Sumber: https://www.analyticsvidhya.com/blog/2021/10/time-series-forecasting-made-easy-using-darts/

Stempel Waktu:

Lebih dari Analisis Vidhya