Perkenalan:

Katakanlah layanan taksi ingin mengoptimalkan ketersediaan taksi di kota New York. Hal ini bertujuan untuk memprediksi dengan tepat permintaan jumlah taksi pada hari tertentu di lokasi tertentu dan waktu tertentu. Saat ini, permintaan dikelompokkan ke beberapa lokasi pengambilan pada beberapa hari tertentu. Ada distribusi taksi yang tidak merata di seluruh lokasi di kota.

Perusahaan dapat menugaskan pengemudinya ke lokasi yang sesuai tergantung pada permintaan yang tinggi, penjemputan yang populer, pengantaran yang populer, waktu puncak.

Data taksi diambil dari situs pemerintah New York. https://www.nyc.gov/site/tlc/about/tlc-trip-record-data.page

Data bulan Januari dan Februari 2014 masing-masing diambil sebagai data latih dan data uji.

Dataset berisi informasi tentang perjalanan taksi. Ini memiliki waktu penjemputan, waktu pengantaran, id lokasi penjemputan, id lokasi pengantaran, jumlah penumpang, jenis pembayaran dan beberapa detail lainnya. Kumpulan data untuk setiap bulan memiliki lebih dari 13 juta catatan. Ini adalah data mentah di tingkat perjalanan.

Pernyataan masalah:

Merancang model Machine learning yang dapat memprediksi jumlah taksi yang tersedia di setiap lokasi pada interval waktu tertentu 10 menit.

Ukuran kinerja:

Root Mean Square Error (RMSE): Untuk model terbaik nilainya nol, digunakan untuk membandingkan model yang berbeda untuk menemukan model terbaik. Ini adalah rata-rata selisih kuadrat antara nilai aktual dan nilai prediksi suatu variabel target. Tujuan kami adalah meminimalkan nilai UMK.

Mean Absolute Percentage Error (MAPE): Kesalahan persentase absolut rata-rata (MAPE) digunakan untuk memperkirakan kesalahan, karena satuan variabel diskalakan ke satuan persentase.

Analisis Data Eksplorasi:

Ini adalah langkah pertama untuk membuat model pembelajaran mesin. Ukuran data kami sekitar 2GB. Ada lebih dari 13 juta catatan. Kumpulan data dieksplorasi berdasarkan volumenya, jumlah fitur, tipe data fitur, nilai uniknya, nilai yang hilang, titik data duplikat, dll.

Ada 19 fitur -

  • ID Vendor
  • tpep_pickup_datetime
  • tpep_dropoff_datetime
  • penumpang_count
  • jarak_perjalanan
  • ID kode tarif
  • toko_dan_fwd_flag
  • PULocationID
  • ID Lokasi DO
  • tipe pembayaran
  • jumlah_tarif
  • tambahan
  • mta_tax
  • tip_jumlah
  • jumlah_tol
  • peningkatan_biaya tambahan
  • jumlah total
  • kemacetan_biaya tambahan
  • biaya_bandara

Dari semua ini, kami akan menggunakan fitur-fitur yang relevan dengan pernyataan masalah kami. Kami akan menggunakan tpep_pickup_datetime, PULocationID, trip_distance dan akan memperoleh fitur lain darinya.

Waktu tanggal pengambilan dan waktu penyerahan dalam format tttt-bb-hh jj:mm:ss. Data berasal dari Januari 2014, memiliki beberapa catatan untuk setiap hari di bulan ini.

Pemrosesan Awal Data:

Ada nilai yang hilang pada data di kolom store_and_fwd_flag, biaya_kemacetan, biaya_bandara. Kami tidak akan menggunakan fitur ini, jadi kami tidak perlu menangani nilai na dalam kasus ini.

Ada 172 catatan duplikat, kami akan menghapus catatan duplikat ini.

Waktu tanggal pengambilan dan waktu penyerahan dalam format tttt-bb-hh jj:mm:ss. Kami akan mengkonversi dan membaginya menjadi beberapa fitur. Kami akan menggunakan tanggal tanpa stempel waktu sebagai fitur. Kami juga akan membagi tanggal menjadi bulan, hari, nama hari, jam, menit.

Ada beberapa catatan yang jarak perjalanannya kurang dari atau sama dengan 0. Kami akan mengabaikannya dari kumpulan data karena secara logika itu adalah data yang salah.

Kami akan membagi waktu dalam sehari menjadi pagi, siang, sore, tengah malam. Jam antara jam 5–11 akan ditandai sebagai pagi hari, jam antara jam 11–17 akan ditandai sebagai sore hari, jam antara jam 17–23 akan ditandai sebagai malam hari, dan jam antara jam 23–5 akan ditandai sebagai tengah malam. Kami ingin memberikan nilai numerik pada kelompok siang hari ini untuk memudahkan penskalaan data. Pagi, Siang, Sore, Tengah Malam masing-masing dinotasikan sebagai 0, 1, 2, 3.

Kami akan membuat daftar hari libur pada bulan Januari 2014. Ini akan membantu kami menandai fitur liburan. Kami memperoleh hari libur sebagai 1 jika hari tersebut adalah hari Minggu atau hari libur AS yang termasuk dalam daftar hari libur. Jika tidak maka akan ditandai sebagai bukan hari libur yaitu 0.

Menit berkisar dari 0 hingga 60. Kami akan membaginya menjadi 6 ember yang masing-masing berdurasi 10 menit. Kami akan menggabungkan periode jam dan menit untuk memiliki satu fitur. Ada 24 jam dalam sehari dan 6 ember dalam satu menit, jadi akan ada 144 ember dalam satu hari.

Mari kita ubah tanggal menjadi format yang dapat diskalakan, data milik Jan 2014, jadi perbedaan tanggal antara tanggal dan awal bulan ini diambil sebagai fitur.

Mari kita catat jumlah taksi yang tersedia di setiap lokasi selama 5 interval waktu terakhir (selama 1 jam terakhir) dalam lima fitur berbeda.

Selain itu, kami akan menggabungkan data berdasarkan lokasi penjemputan, tanggal, periode jam_menit, siang hari, dan hari libur. Hitungan catatan akan memberi kita jumlah taksi yang tersedia di lokasi penjemputan tertentu, tanggal, jam, menit.

Jumlah taksi merupakan variabel respon atau terikat.

Contoh data sebelum penskalaan akan terlihat seperti ini-

Pembuatan Model:

Kami akan menggunakan data yang telah diproses sebelumnya untuk membangun model pembelajaran mesin. Variabel target merupakan variabel kontinu dan mempunyai nilai kemungkinan yang tidak terbatas, oleh karena itu masalah ini merupakan masalah regresi linier. Kami akan menggunakan algoritma tipe regresi linier yang berbeda untuk mendapatkan model terbaik.

Perpustakaan Sklearn memiliki berbagai model regresi linier. Di sini, SGDRegressor, model LinearRegression digunakan dan regresi polinomial juga digunakan untuk memeriksa kinerja regresi tingkat yang lebih tinggi.

Teknik penskalaan seperti Normalisasi dan Standardisasi digunakan di sini.

Model 1: Tiga fitur lokasi penjemputan, tanggal, jam_menit digunakan dalam model ini. Data diskalakan agar memiliki rentang antara -1 dan 1. SGDRegressor digunakan dengan alpha=0,0001 dan max_iter=1000

Hal ini didasarkan pada Penurunan Gradien Stochastic di mana gradien kerugian diperkirakan pada setiap sampel pada satu waktu dan model diperbarui seiring dengan jadwal kekuatan yang menurun (alias kecepatan pembelajaran).

Pengatur/penalti ditambahkan ke fungsi kerugian yang mengecilkan parameter model menuju vektor nol menggunakan norma euclidean kuadrat L2 atau norma absolut L1 atau kombinasi keduanya (Jaring Elastis). Jika pembaruan parameter melewati nilai 0,0 karena pengatur, pembaruan dipotong menjadi 0,0 untuk memungkinkan pembelajaran model renggang dan mencapai pemilihan fitur online.

Dengan 3 fitur, RMSE model ini adalah 44. Model tidak berkinerja baik, sehingga merupakan model yang buruk. Kami akan melanjutkan dengan model lain.

Model 2: Tiga fitur lokasi penjemputan, tanggal, jam_menit digunakan dalam model ini. Data diskalakan agar memiliki rentang antara -1 dan 1. SGDRegressor digunakan dan penyetelan dilakukan dengan hyperparameter alpha. Skor pelatihan dan tes, MSE pelatihan dan tes diambil untuk setiap siklus. Melatih dan menguji UMK diplot untuk memvisualisasikan nilai-nilainya.

Kesalahan pelatihan dan pengujian berkurang seiring perubahan alfa dari 10², 10¹, 10^-1, 10^-2, dan seterusnya. Ini stabil pada alpha = 0,01. MSE masih sangat tinggi dan kinerja model buruk dalam penyiapan ini.

Model 3: Tiga fitur lokasi penjemputan, tanggal, jam_menit digunakan dalam model ini. Standardisasi digunakan sebagai teknik penskalaan. Inilah satu-satunya perbedaan antara model 1 dan model 3. Performanya mirip dengan model 1.

Model 4: Tiga fitur lokasi penjemputan, tanggal, jam_menit digunakan dalam model ini. Standardisasi digunakan sebagai teknik penskalaan. Model LinearRegression digunakan dari perpustakaan sklearn. Hal ini didasarkan pada metode kuadrat terkecil biasa. Ini cocok dengan model linier dengan koefisien w = (w1, …, wp) untuk meminimalkan jumlah sisa kuadrat antara target yang diamati dalam kumpulan data, dan target yang diprediksi oleh perkiraan linier. RMSE adalah 44,22. Hal ini tidak membuat perbedaan dalam performa.

Model 5: Regresi polinomial digunakan dengan tiga fitur: lokasi penjemputan, tanggal, jam_menit. Derajat polinomial dari 1 hingga 10 dicoba dalam model ini. Penskalaan dilakukan pada tingkat tertentu untuk mengakomodasi perubahan dalam rentang data. Derajat 2 memberikan kinerja yang lebih baik dibandingkan derajat lainnya namun RMSE masih tinggi sehingga pendekatan ini tidak banyak membantu. Semua model ini menggunakan 3 fitur dari kumpulan data. Kami akan menambahkan lebih banyak fitur dari kumpulan data untuk menyempurnakan model.

Model 6: SGDRegressor dengan 10 fitur digunakan di sini. Waktu dalam sehari, hari libur, dan jumlah taksi yang tersedia selama 5 interval terakhir dalam satu jam sebelumnya. Standardisasi digunakan pada fitur dan parameter yang digunakan sebagai alpha=0.0001 dan max_iter=1000

Model berkinerja cukup baik bahkan pada data pengujian. RMSE Pelatihan dan RMSE Tes masing-masing sebesar 9,95 dan 9,91. Skor Pelatihan dan Tes masing-masing sebesar 0,9529 dan 0,9548.

Kesimpulan:

Model 6 berkinerja sangat baik dengan SGD Regressor dan 10 fitur. Ada ruang untuk penyempurnaan model lebih lanjut. Skor R2 adalah 0,95. Ini mendekati 1 yang merupakan ukuran yang baik. MAPE adalah 44%, antara 20–50, sehingga menunjukkan prediksi yang masuk akal. RMSE adalah 9,9. Dengan lebih banyak data pengujian dan penyetelan hyperparameter, model ini dapat ditingkatkan menjadi yang terbaik di pasar.

Rekomendasi:

Perusahaan harus menjaga setiap lokasi sehubungan dengan permintaan taksi dan lokasi penjemputan.

Penawaran akhir pekan harus diluncurkan untuk meningkatkan jumlah pengunjung di hari Minggu.

Promosi Pinggiran Kota harus diluncurkan untuk meningkatkan pendapatan.

Kampanye seperti liburan akhir pekan dan wisata sehari harus diluncurkan.

Perusahaan dapat merevitalisasi Layanan Carpooling dengan bantuan model ini.

Ucapan Terima Kasih:

Terima kasih telah membaca blog ini, mohon berikan tanggapan Anda. Anda dapat menemukan seluruh kode di tautan GitHub ini. Anda juga dapat terhubung dengan saya di Linkedin.

Tim Scaler telah membantu saya membuat cerita ini.

Referensi:



Pekerjaan Masa Depan:

Saya telah merencanakan untuk menambahkan lebih banyak fitur seperti rata-rata eksponensial, rata-rata kumulatif ke kumpulan data ini. Model ML berdasarkan fitur-fitur ini akan meningkatkan kinerja.