Unicorn Investors ingin berinvestasi dalam bentuk transportasi baru – JetRail. JetRail menggunakan teknologi propulsi Jet untuk menjalankan rel dan memindahkan orang dengan kecepatan tinggi. Investasi hanya masuk akal jika mereka bisa mendapatkan lebih dari 1 Juta pengguna bulanan dalam 18 bulan ke depan. Untuk membantu Unicorn Ventures dalam mengambil keputusan, Anda perlu memperkirakan lalu lintas di JetRail untuk 7 bulan ke depan. Anda diberi data lalu lintas JetRail sejak awal dalam file uji
Anda bisa mendapatkan datasetnya di sini
Disarankan untuk melihat dataset setelah menyelesaikan bagian pembuatan hipotesis
Yuk Pahami, Apa Itu Data Time Series?
Time Series umumnya adalah data yang dikumpulkan dari waktu ke waktu dan bergantung padanya. Di sini kita melihat bahwa hitungan mobil tidak bergantung pada waktu, jadi ini bukan deret waktu. Sementara tingkat CO2 meningkat sehubungan dengan waktu, maka itu adalah deret waktu
Mari kita lihat definisi formal Time Series
Serangkaian poin data yang dikumpulkan dalam urutan waktu dikenal sebagai deret waktu. Sebagian besar rumah bisnis mengerjakan data deret waktu untuk menganalisis angka penjualan untuk tahun depan, lalu lintas situs web, jumlah lalu lintas, jumlah panggilan yang diterima, dll. Data deret waktu dapat digunakan untuk peramalan
Tidak setiap data yang dikumpulkan sehubungan dengan waktu mewakili deret waktu. Beberapa contoh prediksi deret waktu Python adalah
Harga saham
Jumlah Penumpang Maskapai
Suhu Dari Waktu ke Waktu
Sejumlah Pengunjung di Hotel
Sekarang kita dapat membedakan antara data Time Series dan non-Time Series. mari kita jelajahi Time Series lebih jauh
Sekarang setelah kita memiliki pemahaman tentang apa itu time series dan perbedaan antara time series dan non-time series, sekarang mari kita lihat komponen time series
Komponen Peramalan Deret Waktu dengan Python
1. Kecenderungan. Tren adalah arah umum di mana sesuatu berkembang atau berubah. Jadi kami melihat tren yang meningkat dalam deret waktu ini. Kita dapat melihat bahwa jumlah penumpang meningkat seiring dengan bertambahnya tahun. Mari kita memvisualisasikan tren deret waktu
Contoh
Di sini garis merah mewakili tren peningkatan deret waktu
2. Musiman. – Pola lain yang jelas juga dapat dilihat pada deret waktu di atas, yaitu. e. , pola tersebut berulang pada interval waktu yang teratur yang dikenal sebagai musiman. Setiap perubahan atau pola yang dapat diprediksi dalam rangkaian waktu yang berulang atau berulang selama periode waktu tertentu dapat dikatakan musiman. Mari kita bayangkan musiman dari deret waktu
Contoh
Kita dapat melihat bahwa deret waktu mengulangi polanya setiap 12 bulan i. e ada puncak setiap tahun selama bulan Januari dan palung setiap tahun di bulan September, maka rangkaian waktu ini memiliki musiman 12 bulan
Perbedaan Antara Seri Waktu dan Masalah Regresi
Di sini Anda mungkin berpikir bahwa karena variabel target bersifat numerik, ia dapat diprediksi menggunakan teknik regresi, tetapi masalah deret waktu berbeda dari masalah regresi dengan cara berikut
Jadi, memprediksi deret waktu menggunakan teknik regresi bukanlah pendekatan yang baik
Analisis deret waktu terdiri dari metode untuk menganalisis data deret waktu untuk mengekstraksi statistik yang bermakna dan karakteristik data lainnya. Peramalan deret waktu adalah penggunaan model untuk memprediksi nilai masa depan berdasarkan nilai yang diamati sebelumnya
Memahami Data
Kita akan mulai dengan langkah pertama, i. e Pembangkitan Hipotesis. Pembuatan Hipotesis adalah proses membuat daftar semua faktor yang mungkin dapat mempengaruhi hasil
Pembuatan hipotesis dilakukan sebelum melihat data untuk menghindari bias yang mungkin timbul setelah observasi
1) Pembangkitan Hipotesis
Akan ada peningkatan lalu lintas seiring berlalunya waktu
- Penjelasan – Populasi memiliki tren umum yang meningkat seiring berjalannya waktu, jadi saya berharap lebih banyak orang bepergian dengan JetRail. Juga, secara umum, perusahaan memperluas bisnis mereka dari waktu ke waktu yang mengarah ke lebih banyak pelanggan yang bepergian melalui JetRail
Lalu Lintas akan Tinggi dari Mei hingga Oktober
- Penjelasan – Kunjungan wisatawan pada umumnya meningkat pada periode ini
Lalu lintas pada Hari Kerja akan Lebih Banyak Dibandingkan dengan Akhir Pekan / Hari Libur
- Penjelasan – Orang akan pergi ke kantor pada hari kerja sehingga lalu lintas akan lebih padat
Lalu lintas selama Jam Puncak akan Tinggi
- Penjelasan – Orang akan melakukan perjalanan untuk bekerja dan kuliah
Kami akan mencoba memvalidasi masing-masing hipotesis ini berdasarkan dataset. Sekarang mari kita lihat datasetnya
Setelah membuat hipotesis kami, kami akan mencoba untuk memvalidasi mereka. Sebelum itu, kami akan mengimpor semua paket yang diperlukan
2) Menyiapkan Sistem dan Memuat Data
Versi
- Piton = 3. 7
- Panda = 0. 20. 3
- sklearn = 0. 19. 1
Sekarang kita akan mengimpor semua paket yang akan digunakan di seluruh notebook
import pandas as pd import numpy as np # For mathematical calculations import matplotlib.pyplot as plt # For plotting graphs from datetime import datetime # To access datetime from pandas import Series # To work on series %matplotlib inline import warnings # To ignore the warnings warnings.filterwarnings("ignore")Sekarang mari kita baca data kereta dan uji
Kode Piton
Mari kita buat salinan data latih dan uji sehingga meskipun kita melakukan perubahan pada dataset ini, kita tidak kehilangan dataset aslinya
train_original=train.copy() test_original=test.copy()_Setelah memuat data, mari kita lihat sekilas dataset untuk mengetahui data kita dengan lebih baik
3) Struktur dan Konten Kumpulan Data
Mari selami lebih dalam dan lihat kumpulan datanya. Pertama-tama, mari kita lihat fitur-fitur di dataset train dan test
train.columns, test.columnsKami memiliki ID, Datetime, dan jumlah penumpang yang sesuai di file pelatihan. Untuk file pengujian kami hanya memiliki ID dan Datetime sehingga kami harus memprediksi Hitungan untuk file pengujian
Mari kita pahami setiap fitur terlebih dahulu
- ID adalah nomor unik yang diberikan pada setiap titik pengamatan
- Datetime adalah waktu dari setiap pengamatan
- Hitungannya adalah jumlah penumpang yang sesuai dengan setiap Datetime
Mari kita lihat tipe data dari setiap fitur
train.dtypes, test.dtypes- ID dan Hitung dalam format integer sedangkan Datetime dalam format objek untuk file pelatihan
- ID dalam bilangan bulat dan Datetime dalam format objek untuk file uji
Sekarang kita akan melihat bentuk dataset
train.shape, test.shape_Kami memiliki 18288 catatan berbeda untuk Jumlah penumpang di set kereta dan 5112 di set uji
Sekarang kami akan mengekstrak lebih banyak fitur untuk memvalidasi hipotesis kami
4) Ekstraksi Fitur
Kami akan mengekstrak waktu dan tanggal dari Datetime. Kita telah melihat sebelumnya bahwa tipe data Datetime adalah objek. Jadi pertama-tama kita harus mengubah tipe data ke format DateTime jika tidak, kita tidak dapat mengekstraksi fitur darinya
train['Datetime'] = pd.to_datetime(train.Datetime,format='%d-%m-%Y %H:%M') test['Datetime'] = pd.to_datetime(test.Datetime,format='%d-%m-%Y %H:%M') test_original['Datetime'] = pd.to_datetime(test_original.Datetime,format='%d-%m-%Y %H:%M') train_original['Datetime'] = pd.to_datetime(train_original.Datetime,format='%d-%m-%Y %H:%M')Kami membuat beberapa hipotesis tentang pengaruh jam, hari, bulan, dan tahun terhadap jumlah penumpang. Jadi, mari ekstrak tahun, bulan, hari, dan jam dari Datetime untuk memvalidasi hipotesis kita
for i in (train, test, test_original, train_original): i['year']=i.Datetime.dt.year i['month']=i.Datetime.dt.month i['day']=i.Datetime.dt.day i['Hour']=i.Datetime.dt.hour_Kami membuat hipotesis untuk pola lalu lintas pada hari kerja dan juga akhir pekan. Jadi, mari buat variabel akhir pekan untuk memvisualisasikan dampak akhir pekan terhadap lalu lintas
- Kami pertama-tama akan mengekstrak hari dalam seminggu dari Datetime dan kemudian berdasarkan nilai yang akan kami tetapkan apakah hari itu akhir pekan atau tidak
- Nilai 5 dan 6 menunjukkan bahwa hari-hari tersebut adalah akhir pekan
- train['day of week']=train['Datetime']. dt. hari dalam seminggu
- temp = kereta['Tanggal waktu']
Mari kita tetapkan 1 jika hari dalam seminggu adalah akhir pekan dan 0 jika hari dalam seminggu bukan akhir pekan
def applyer(row): if row.dayofweek == 5 or row.dayofweek == 6: return 1 else:train_original=train.copy() test_original=test.copy()0train_original=train.copy() test_original=test.copy()1Mari kita lihat deret waktu
train_original=train.copy() test_original=test.copy()_2Di sini kita dapat menyimpulkan bahwa ada tren yang meningkat dalam rangkaian tersebut, yaitu. e. , jumlah hitungan meningkat terhadap waktu. Kita juga bisa melihat bahwa pada titik-titik tertentu terjadi peningkatan jumlah hitungan secara tiba-tiba. Alasan yang mungkin di balik ini bisa jadi pada hari tertentu, karena beberapa peristiwa lalu lintasnya tinggi
Kami akan mengerjakan file pelatihan untuk semua analisis dan akan menggunakan file pengujian untuk peramalan
Mari kita mengingat kembali hipotesis yang kita buat sebelumnya
- Lalu lintas akan meningkat seiring berlalunya waktu
- Lalu lintas akan tinggi dari Mei hingga Oktober
- Lalu lintas pada hari kerja akan lebih banyak
- Lalu lintas selama jam sibuk akan tinggi
Setelah melihat kumpulan data, sekarang kita akan mencoba memvalidasi hipotesis kita dan membuat kesimpulan lain dari kumpulan data tersebut
5) Analisis Eksplorasi
Mari kita coba memverifikasi hipotesis kita menggunakan data aktual
Hipotesis pertama kami adalah lalu lintas akan meningkat seiring berlalunya waktu. Jadi mari kita lihat jumlah penumpang tahunan
train_original=train.copy() test_original=test.copy()_3Hipotesis kedua kami adalah tentang peningkatan lalu lintas dari Mei hingga Oktober. Jadi, mari kita lihat hubungan antara hitungan dan bulan
train_original=train.copy() test_original=test.copy()_4Di sini terlihat penurunan rata-rata jumlah penumpang dalam tiga bulan terakhir. Ini tidak terlihat benar. Mari kita lihat rata-rata bulanan setiap tahun secara terpisah
train_original=train.copy() test_original=test.copy()_5- Kami melihat bahwa bulan 10, 11, dan 12 tidak ada untuk tahun 2014 dan nilai rata-rata bulan-bulan ini di tahun 2012 jauh lebih sedikit
- Karena ada tren yang meningkat dalam deret waktu kami, nilai rata-rata untuk bulan-bulan lainnya akan lebih banyak karena jumlah penumpang yang lebih besar di tahun 2014 dan kami akan mendapatkan nilai yang lebih kecil untuk 3 bulan ini
Mari kita lihat rata-rata harian jumlah penumpang
train_original=train.copy() test_original=test.copy()_6Kami tidak mendapatkan banyak wawasan dari hitungan harian penumpang. Kami juga membuat hipotesis bahwa lalu lintas akan lebih banyak pada jam sibuk. Jadi mari kita lihat rata-rata jumlah penumpang per jam
train_original=train.copy() test_original=test.copy()_7- Dapat disimpulkan bahwa lalu lintas puncak adalah pada jam 7 malam dan kemudian kita melihat tren penurunan hingga jam 5 pagi
Mari kita coba memvalidasi hipotesis kami di mana kami berasumsi bahwa lalu lintas akan lebih banyak pada hari kerja
Dapat disimpulkan dari plot di atas bahwa lalu lintas lebih banyak pada hari kerja dibandingkan dengan akhir pekan yang memvalidasi hipotesis kami
Sekarang kita akan mencoba melihat jumlah penumpang harian
Catatan. - 0 adalah awal minggu, i. e. , 0 adalah hari Senin dan 6 adalah hari Minggu
train_original=train.copy() test_original=test.copy()_8Dari diagram batang di atas, kita dapat menyimpulkan bahwa jumlah penumpang pada hari Sabtu dan Minggu lebih sedikit dibandingkan dengan hari-hari lain dalam seminggu. Sekarang kita akan melihat teknik pemodelan dasar. Sebelum itu, kami akan menghapus variabel ID karena tidak ada hubungannya dengan jumlah penumpang
kereta api = kereta api. jatuhkan('ID',1)
Seperti yang telah kita lihat bahwa ada banyak noise dalam deret waktu per jam, kami akan menggabungkan deret waktu per jam menjadi deret waktu harian, mingguan, dan bulanan untuk mengurangi kebisingan dan membuatnya lebih stabil dan karenanya akan lebih mudah untuk sebuah model.
train_original=train.copy() test_original=test.copy()_9Mari kita lihat deret waktu per jam, harian, mingguan, dan bulanan
train.columns, test.columns0Kita dapat melihat bahwa deret waktu menjadi semakin stabil ketika kita menggabungkannya setiap hari, setiap minggu, dan setiap bulan.
Tetapi akan sulit untuk mengubah prediksi bulanan dan mingguan menjadi prediksi per jam, karena pertama-tama kita harus mengubah prediksi bulanan menjadi mingguan, mingguan menjadi harian, dan prediksi harian menjadi per jam, yang akan menjadi proses yang sangat luas. Jadi, kami akan mengerjakan deret waktu harian
train.columns, test.columns1Teknik Pemodelan dan Evaluasi
Karena kami telah memvalidasi semua hipotesis kami, mari lanjutkan dan buat model untuk Time Series Forecasting. Tetapi sebelum kita melakukan itu, kita memerlukan dataset (validasi) untuk memeriksa kinerja dan kemampuan generalisasi model kita. Di bawah ini adalah beberapa properti dari kumpulan data yang diperlukan untuk tujuan dalam artikel ini untuk (Peramalan Deret Waktu)
- Kumpulan data harus memiliki nilai sebenarnya dari variabel dependen yang prediksinya dapat diperiksa. Oleh karena itu, kumpulan data uji tidak dapat digunakan untuk tujuan ini
- Model tidak boleh dilatih pada dataset validasi. Oleh karena itu, kami tidak dapat melatih model pada dataset pelatihan dan juga memvalidasinya
Jadi, karena dua alasan di atas, kami biasanya membagi kumpulan data kereta menjadi dua bagian. Satu bagian digunakan untuk melatih model dan bagian lainnya digunakan sebagai dataset validasi. Sekarang ada beberapa cara untuk membagi dataset pelatihan seperti Divisi Acak dll
1) Memisahkan data menjadi bagian pelatihan dan validasi
Sekarang kita akan membagi data kita menjadi pelatihan dan validasi. Kita akan membuat model pada bagian train dan memprediksi pada bagian validasi untuk mengecek keakuratan prediksi kita
CATATAN. - Selalu merupakan praktik yang baik untuk membuat kumpulan validasi yang dapat digunakan untuk menilai model kita secara lokal. Jika metrik validasi(rmse) berubah sebanding dengan skor papan peringkat publik, ini menyiratkan bahwa kami telah memilih teknik validasi yang stabil
Untuk membagi data menjadi set pelatihan dan validasi, kami akan mengambil 3 bulan terakhir sebagai data validasi dan sisanya sebagai data pelatihan. Kami hanya akan mengambil 3 bulan karena tren akan menjadi yang paling banyak di dalamnya. Jika kami mengambil lebih dari 3 bulan untuk set validasi, set pelatihan kami akan memiliki lebih sedikit poin data karena total durasinya adalah 25 bulan. Jadi, akan menjadi pilihan yang baik untuk mengambil 3 bulan untuk set validasi
Tanggal mulai dari dataset adalah 25-08-2012 seperti yang telah kita lihat di bagian eksplorasi dan tanggal berakhirnya adalah 25-09-2014
train.columns, test.columns2- Kami telah melakukan validasi berbasis waktu di sini dengan memilih 3 bulan terakhir untuk data validasi dan sisanya di data kereta. Jika kita melakukannya secara acak, ini mungkin bekerja dengan baik untuk dataset pelatihan tetapi tidak akan bekerja secara efektif pada dataset validasi
- Mari kita pahami dengan cara ini. Jika kita memilih pembagian secara acak akan mengambil beberapa nilai dari awal dan beberapa dari tahun-tahun terakhir juga. Ini mirip dengan memprediksi nilai lama berdasarkan nilai masa depan yang tidak terjadi dalam skenario nyata. Jadi, pemisahan semacam ini digunakan saat bekerja dengan masalah yang berhubungan dengan waktu
Sekarang kita akan melihat bagaimana bagian pelatihan dan validasi telah dibagi
train.columns, test.columns_3Di sini bagian biru mewakili data kereta dan bagian oranye mewakili data validasi
Kami akan memprediksi lalu lintas untuk bagian validasi dan kemudian memvisualisasikan seberapa akurat prediksi kami. Terakhir, kami akan membuat prediksi untuk dataset uji
Kami akan melihat berbagai model untuk Time Series Forecasting. Metode yang akan kita bahas untuk peramalan adalah
- Pendekatan Naif
- Rata-Rata Bergerak
- Smoothing Eksponensial Sederhana
- Model Tren Linear Holt
Kami akan membahas masing-masing metode ini secara rinci sekarang
i) Pendekatan Naif
Dalam teknik peramalan ini, kami mengasumsikan bahwa titik yang diharapkan berikutnya sama dengan titik yang diamati terakhir. Jadi kita bisa mengharapkan garis horizontal lurus sebagai prediksi. Mari kita pahami dengan contoh dan gambar
Misalkan kita memiliki jumlah penumpang selama 5 hari seperti yang ditunjukkan di bawah ini
Dan kita harus memprediksi jumlah penumpang untuk 2 hari ke depan. Pendekatan naif akan menetapkan jumlah penumpang hari ke-5 ke hari ke-6 dan ke-7, i. e. , 15 akan ditugaskan pada hari ke-6 dan ke-7
Sekarang mari kita pahami dengan sebuah contoh
Contoh. -
Garis biru adalah prediksi di sini. Semua prediksi sama dengan titik pengamatan terakhir
Mari membuat prediksi menggunakan pendekatan naif untuk set validasi
train.columns, test.columns_4- Kami dapat menghitung seberapa akurat prediksi kami menggunakan rmse(Root Mean Square Error)
- rmse adalah standar deviasi dari residual
- Residu adalah ukuran seberapa jauh dari titik data garis regresi
- Rumus untuk rmse adalah
rmse=sqrt∑i=1N1N(p−a)2
Kami sekarang akan menghitung RMSE untuk memeriksa keakuratan model kami pada kumpulan data validasi
train.columns, test.columns5Kami dapat menyimpulkan bahwa metode ini tidak cocok untuk kumpulan data dengan variabilitas tinggi. Kita dapat mengurangi nilai rmse dengan mengadopsi teknik yang berbeda
2) Rata-Rata Bergerak
- Dalam teknik ini, kami akan mengambil rata-rata jumlah penumpang untuk beberapa periode waktu terakhir saja
Mari kita ambil contoh untuk memahaminya
Contoh
Di sini prediksi dibuat berdasarkan rata-rata dari beberapa poin terakhir alih-alih mengambil semua nilai yang diketahui sebelumnya
Mari coba rolling mean selama 10, 20, dan 50 hari terakhir dan visualisasikan hasilnya
train.columns, test.columns6train.columns, test.columns7Kami mengambil rata-rata dari 10, 20, dan 50 pengamatan terakhir dan memprediksi berdasarkan itu. Nilai ini dapat diubah dalam kode di atas. bergulir(). mean() bagian. Kita dapat melihat bahwa prediksi semakin lemah seiring bertambahnya jumlah pengamatan
train.dtypes, test.dtypes03) Pemulusan Eksponensial Sederhana
Dalam teknik ini, kami menetapkan bobot yang lebih besar untuk pengamatan yang lebih baru daripada pengamatan dari masa lalu yang jauh
Bobot menurun secara eksponensial karena pengamatan berasal lebih jauh di masa lalu, bobot terkecil dikaitkan dengan pengamatan tertua
CATATAN. - – Jika kita memberikan seluruh bobot hanya pada nilai yang diamati terakhir, metode ini akan mirip dengan pendekatan naif. Jadi, kita dapat mengatakan bahwa pendekatan naif juga merupakan teknik pemulusan eksponensial sederhana di mana seluruh bobot diberikan pada nilai pengamatan terakhir.
Mari kita lihat contoh pemulusan eksponensial sederhana
Contoh
Di sini prediksi dibuat dengan memberikan bobot yang lebih besar pada nilai-nilai terkini dan bobot yang lebih kecil pada nilai-nilai lama
train.dtypes, test.dtypes1train.dtypes, test.dtypes2113. 43708111884514
Kita dapat menyimpulkan bahwa kecocokan model telah meningkat seiring dengan berkurangnya nilai rmse
4) Model Tren Linear Holt
- Ini adalah perpanjangan dari pemulusan eksponensial sederhana untuk memungkinkan peramalan data dengan tren
- Metode ini memperhitungkan tren dataset. Fungsi ramalan dalam metode ini merupakan fungsi dari level dan trend
Pertama-tama mari kita memvisualisasikan tren, musiman, dan kesalahan dalam rangkaian tersebut
Kita dapat menguraikan deret waktu menjadi empat bagian
- Teramati, yang merupakan deret waktu asli
- Trend, yaitu menunjukkan trend pada time series, i. e. , meningkatkan atau menurunkan perilaku deret waktu
- Musiman, yang memberi tahu kita tentang musiman dalam deret waktu
- Residu, yang diperoleh dengan menghilangkan tren atau musim apa pun dalam deret waktu
Mari kita visualisasikan semua bagian ini
train.dtypes, test.dtypes_4Tren yang meningkat dapat dilihat pada dataset, jadi sekarang kita akan membuat model berdasarkan tren tersebut
train.dtypes, test.dtypes5train.dtypes, test.dtypes6Kita dapat melihat garis miring di sini karena model telah mempertimbangkan tren deret waktu
Mari kita hitung nilai modelnya
train.dtypes, test.dtypes_7112. 94278345314041
Dapat disimpulkan bahwa nilai rmse mengalami penurunan
Sekarang kita akan memprediksi jumlah penumpang untuk dataset uji menggunakan berbagai model
Media yang ditampilkan dalam artikel ini bukan milik Analytics Vidhya dan digunakan atas kebijaksanaan Penulis