
- Geospatial Data Engineering
- problem-solving
- geo-tech
Menemukan $81,6 juta permintaan taksi tak terlayani di NYC dengan H3 dan PostGIS
Setahun data Yellow Taxi NYC (35 juta perjalanan) menunjukkan sekitar $81,6 juta/tahun permintaan tak terlayani di hanya 13 zona, sementara 159 zona kelebihan armada. Armadanya cukup, posisinya yang salah. Begini cara saya mengukurnya dengan H3, dbt, dan PostGIS.
Jawaban singkat
Armada Yellow Taxi New York diperkirakan kehilangan $81,6 juta per tahun dari permintaan yang tidak terlayani, dan sebagian besar terkumpul di hanya 13 zona yang kekurangan armada. Pada saat yang sama, 159 zona justru kelebihan armada. Masalahnya bukan kekurangan taksi, melainkan salah alokasi: mobil berada di tempat dan waktu yang salah. Memindahkan armada yang sudah ada lebih berdampak daripada menambah armada baru.
Kesimpulan ini saya dapat dari analisis setahun penuh data perjalanan NYC TLC Yellow Taxi 2023 (sekitar 35 juta record setelah difilter) di atas grid heksagon H3, lalu mengubah selisih supply–demand menjadi angka dolar yang bisa ditindaklanjuti tim operasional.
Kenapa heatmap permintaan saja tidak cukup
Kebanyakan heatmap taksi dan ride-hailing berhenti di di mana perjalanan terjadi. Itu tidak bisa ditindaklanjuti: semua orang sudah tahu Midtown dan bandara itu ramai. Pertanyaan operasional yang berguna adalah selisihnya: di mana permintaan terus melampaui armada yang benar-benar datang, dan di mana armada menganggur?
Jadi setiap sel H3 di kota diberi posisi di sumbu supply–demand, lalu selisihnya diberi harga.
Pipeline-nya
Baca diagram dari kiri ke kanan. Tiga bagian memikul beban terbesar:
- Ingestion dan pemrosesan. Dua belas file Parquet bulanan diambil langsung dari endpoint resmi TLC, diorkestrasi dengan Kestra. PySpark di cluster Dataproc yang berumur pendek menangani ~35 juta baris, perubahan skema di pertengahan 2023 (setiap file dibaca, di-cast, lalu di-union terpisah), dan indexing H3.
- Warehouse. BigQuery menyimpan data mentah; dbt membangun model staging → intermediate → mart, dengan data test sebagai pengaman regresi.
- Lapisan spasial dan penyajian. PostGIS di Supabase memvalidasi borough dengan
ST_Withindan mengukur kedekatan ke simpul transit denganST_Buffer. Dashboard Streamlit menampilkan peta heksagon 2D/3D, KPI, dan tabel zona. Seluruh stack disiapkan dengan Terraform di GCP.
Cara mengukur supply dan demand
Setiap metrik dihitung per sel H3 resolusi 8 (sekitar 1.070 sel di NYC), lalu digulung ke zona TLC untuk pelaporan.
- Demand = jumlah penjemputan (pickup) di sebuah sel. Supply = jumlah pengantaran (drop-off) di sel itu.
- Ini adalah proksi asimetri pickup–drop-off, bukan ketersediaan pengemudi secara real-time: drop-off adalah tempat pengemudi menjadi tersedia, bukan bukti ia tetap di sana. Proksi ini tetap sinyal arah yang kuat tentang posisi armada relatif terhadap tempat ia dipanggil.
- Sel dengan kurang dari 500 perjalanan per tahun dibuang agar sel bervolume rendah tidak merusak peringkat (243 → 185 sel yang dilaporkan).
- Pita ±10% mengklasifikasikan setiap zona: rasio supply/demand 0,9–1,1 = seimbang, di bawahnya kekurangan, di atasnya kelebihan. Kehilangan pendapatan hanya dihitung untuk zona yang kekurangan armada.
Bug metrik yang hampir lolos
Versi pertama merata-ratakan rasio per sel ke level zona. Sel yang jarang terisi (misalnya demand = 1 dan supply = 42) menghasilkan rasio seperti −41, yang merusak rata-rata zona dan memunculkan hasil tidak masuk akal.
Perbaikannya mudah diucapkan dan mudah terlupa: jumlahkan totalnya dulu, baru bagi sekali.
-- Salah: rata-rata dari rasio per sel (sel yang jarang terisi mendominasi)
select zone, avg((demand - supply) / demand) as unmet_rate
from cell_metrics
group by zone;
-- Benar: rasio dari total
select zone, (sum(demand) - sum(supply)) / sum(demand) as unmet_rate
from cell_metrics
group by zone;
Apa kata angkanya
| Temuan | Nilai |
|---|---|
| Perkiraan permintaan tak terlayani (batas atas) | $81,6 juta / tahun |
| Zona kekurangan vs kelebihan armada | 13 vs 159 |
| Bandara JFK | $26,3 juta (32% dari total), 79% permintaan tak terlayani |
| Bandara LaGuardia | ~$15,0 juta |
| Garment District (dalam radius 800 m dari Penn Station) | ~$11,4 juta |
| Queens / Manhattan | ~$44,0 juta (didorong bandara) / ~$37,6 juta (didorong komuter) |
| Brooklyn dan Bronx | tidak ada zona yang kekurangan armada |
Bandara mendominasi, tetapi hasil Garment District yang paling menarik: ST_Buffer di sekitar Penn Station menunjukkan celah di titik keluar komuter yang akan tersembunyi kalau dilihat per borough.
Apakah masalahnya jalan?
Hipotesis yang wajar: zona yang kekurangan armada memang lebih sulit dijangkau taksi. Untuk mengujinya, saya menggabungkan 72.005 segmen jalan OpenStreetMap yang bisa dilalui kendaraan (ekstrak Geofabrik NY) dengan zona-zona di PostGIS.
Datanya berkata tidak. Zona yang kekurangan armada rata-rata punya 113,8 segmen jalan, dibanding 95,1 di zona yang kelebihan. Taksi justru menghindari sebagian zona yang paling mudah diakses dan paling tinggi permintaannya. LaGuardia (9 segmen, ~$15 juta hilang) dan JFK (192 segmen, ~$26 juta hilang) sama-sama sangat kekurangan armada, apa pun akses jalannya. Ini masalah dispatch dan penempatan armada, bukan infrastruktur.
Keterbatasan yang jujur
Studi kasus yang menyembunyikan keterbatasannya justru kurang bisa dipercaya:
- $81,6 juta adalah perkiraan batas atas, bukan pendapatan hilang yang teramati. Angka ini menerapkan rasio tarif agregat ke permintaan tak terlayani; pendapatan yang benar-benar bisa direbut akan lebih kecil karena elastisitas harga dan substitusi.
- Supply dan demand adalah proksi (drop-off dan pickup), bukan status pengemudi secara langsung.
- Satu tahun, satu moda: hanya Yellow Taxi 2023, tanpa taksi hijau, kendaraan sewa (FHV), atau pola musiman antartahun.
- Validasi spasial: 181 dari 185 sel cocok dengan poligon borough dan 180 di antaranya berlabel benar; 4 sel berada di tepi air atau batas wilayah dengan kehilangan $0. Marble Hill secara administratif bagian dari Manhattan tetapi secara spasial ada di Bronx (Harlem Ship Canal memindahkannya pada 1895). Kedua label benar dalam kerangkanya masing-masing.
Apa yang akan saya sampaikan ke tim operasional
Seimbangkan dulu sebelum menambah. Armadanya sudah cukup; pertanyaannya adalah penempatan. Langkah pertama ada di antrean bandara JFK dan LaGuardia serta titik keluar komuter di sekitar Penn Station, tempat pergeseran armada kecil merebut porsi terbesar dari selisih itu.
FAQ
Apa itu H3 dan kenapa dipakai untuk data taksi? H3 adalah sistem grid heksagonal dari Uber yang membagi peta menjadi sel berbentuk sama. Heksagon punya tetangga yang seragam, sehingga demand dan supply bisa dibandingkan di seluruh kota. Resolusi 8 (sekitar 1.070 sel di NYC) cukup halus untuk memisahkan bandara dari sekitarnya dan cukup kasar agar jumlahnya stabil.
Kenapa pickup dan drop-off dipakai sebagai demand dan supply? Data perjalanan TLC tidak memuat posisi pengemudi secara langsung. Pickup menunjukkan di mana penumpang terlayani, dan drop-off menunjukkan di mana pengemudi menjadi bebas. Selisih keduanya adalah proksi arah tentang posisi armada relatif terhadap permintaan.
Apakah $81,6 juta itu pendapatan yang benar-benar hilang? Bukan. Itu perkiraan batas atas: permintaan tak terlayani dikalikan rasio tarif agregat. Pendapatan yang bisa direbut sebenarnya akan lebih kecil.
Apakah datanya bisa dijelajahi? Bisa. Dashboard live menampilkan peta heksagon dan tabel zona, dan repositori GitHub memuat pipeline, model dbt, dan log keputusan berisi 58 entri (D-001 sampai D-058).
Data: NYC TLC Yellow Taxi trip records 2023 (setahun penuh, Parquet resmi dari CloudFront). Jaringan jalan: OpenStreetMap via Geofabrik. Terakhir diperbarui: 20 Oktober 2026.