Geocode Jutaan Lokasi Tanpa Digugat – Menuju AI

Geocode Jutaan Lokasi Tanpa Digugat – Menuju AI

Pengarang: Paul Kinsvater

Awalnya diterbitkan di Towards AI the World’s Leading AI and Technology News and Media Company. Jika Anda sedang membangun produk atau layanan terkait AI, kami mengundang Anda untuk mempertimbangkan untuk menjadi sponsor AI. Di Towards AI, kami membantu menskalakan AI dan startup teknologi. Biarkan kami membantu Anda melepaskan teknologi Anda kepada massa.

Dengan mempertimbangkan GeoBatchPy dan analitik geospasial

Exponential Time Smoothing (ETS) adalah teknik yang lazim dalam komunitas peramalan deret waktu yaitu tentang pembobotan sinyal dari waktu yang semakin jauh. Dan metode serupa adalah standar dalam model prediktif di luar peramalan deret waktu selama waktu adalah bagian dari masalah. Apakah Anda ingin memprediksi churn pelanggan? Coba dengan rata-rata tertimbang dari jumlah pembelian sebelumnya.

Sinyal dari waktu yang semakin jauh semakin berkurang pentingnya. Hal ini tercermin dalam model prediksi churn menggunakan rata-rata tertimbang dari jumlah pembelian masa lalu sebagai prediktor. Gambar dibuat oleh penulis menggunakan Excalidraw.

Ekivalen geospasial dari bobot temporal adalah matriks bobot spasial. Ide yang sama berlaku: menghitung rata-rata tertimbang, dengan bobot tergantung pada jarak spasial pada sistem koordinat dua dimensi. Tapi, tidak seperti waktu, jarak dalam ruang membutuhkan pekerjaan awal yang signifikan. Kemungkinan, Anda mulai dengan teks alamat (terstruktur) sebagai catatan lokasi Anda. Jadi, bagaimana cara membawa mereka pada sistem koordinat?

Di bawah ini kita akan menggunakan sistem koordinat bujur-lintang. Dan transisi dari teks ke bujur-lintang disebut geocoding. Ada lusinan, jika bukan ratusan, penyedia layanan geocoding. Namun pilihan tersebut ternyata berisiko karena biaya dan alasan hukum.

Baca lisensinya jika Anda tidak ingin diblokir atau digugat

Akan lebih baik untuk berhati-hati saat memilih penyedia layanan geo. Google Maps dan Mapbox adalah dua pilihan yang menonjol namun buruk untuk kasus penggunaan analitik kami karena lisensinya yang terbatas — Anda tidak diizinkan untuk menyimpan dan mendistribusikan ulang hasil. Misalnya, Google telah membuat mekanisme untuk mendeteksi penyalahgunaan API mereka, yang, dalam kasus terbaik, mengakibatkan pemblokiran akun Anda. Jadi, menyimpan jutaan geocode untuk analisis selanjutnya tidak diperbolehkan.

Untungnya, sebuah startup bernama Geoapify mengisi ceruk ini dengan bravura. Ini bukan hanya tentang alasan hukum. Ini juga tentang biaya, kenyamanan penggunaan (pemrosesan batch), dan integrasi yang baik ke dalam data terbuka dan standar sumber terbuka.

Mengapa Geoapify untuk analitik geospasial

Singkatnya, inilah mengapa kami memilih Geoapify:

Kami perlu melakukan geocode jutaan catatan lokasi tanpa bangkrut. Geoapify menawarkan geocoding batch dengan diskon 50%. Geoapify menggunakan OpenStreetMap dan sumber data terbuka lainnya dengan lisensi yang ramah sehingga kami dapat menyimpan hasil untuk analitik. Sebagai efek samping, kami dapat menautkan catatan lokasi internal kami dengan ekosistem sumber data terbuka yang kaya seperti Wikidata. Geoapify bukan hanya tentang geocoding. Ini juga menawarkan detail tempat, isoline, jarak perjalanan, dan banyak lagi — dengan sebagian besar layanan dicakup oleh API Batch mereka dengan diskon 50%.

Mulai dari nol biaya hari ini menggunakan layanan Geoapify, termasuk penggunaan komersial. Tingkat gratis mereka memungkinkan geocoding batch 6k alamat per hari. Daftar di geoapify.com dan buat kunci API Anda dalam waktu singkat.

Tutorial — GeoBatchPy untuk geocoding batch dan banyak lagi

Kami menyukai Python dan baris perintah. Saat kami memulai, tidak ada klien Geoapify API yang memenuhi kebutuhan kami. Jadi, kami membuat GeoBatchPy.

GeoBatchPy adalah klien Python untuk Geoapify API. Dan itu datang dengan antarmuka baris perintah untuk API Batch mereka, yang bersinar ketika Anda perlu memproses sejumlah besar lokasi. Anda dapat menginstal rilis terbaru dari PyPI dengan pip install geobatchpy. Tetapi kami menyarankan untuk membuat lingkungan Conda baru yang mencakup GeoPandas dan PySAL jika Anda ingin mengikuti tutorial di bawah ini menggunakan data Anda.

Tutorial ini menunjukkan cara mengintegrasikan GeoBatchPy ke dalam alur kerja analitik geospasial, mulai dari catatan alamat sederhana, diikuti dengan geocoding batch, hingga menghitung matriks bobot spasial. Kami menyimpulkan dengan kasus penggunaan analitik sederhana.

Bagian 1 — pra-pemrosesan data

Dataset kami untuk tutorial ini terdiri dari 1081 stadion olahraga, terutama di Jerman, Belgia, Belanda. Kami menghasilkan data menggunakan Geoapify’s Places API.

https://medium.com/media/6ad592bb4f97bbe0cea5ca18728e07b9/href

Gambar yang dibuat oleh penulis.

Layanan geocoding Geoapify menerima pencarian teks gratis dan masukan terstruktur, yang terakhir hanya membantu jika kami sangat percaya pada kualitas data kami. Saya telah melihat terlalu banyak masalah kualitas data dalam catatan alamat terstruktur dunia nyata. Dan kesimpulan saya adalah pergi untuk pencarian teks gratis. Di sini, kami mengurai data terstruktur menjadi satu string per baris.

https://medium.com/media/43c1572e62dd8f41ee1194c787ab0849/href

Gambar yang dibuat oleh penulis.

Bagian 2 — geocoding

Saatnya untuk melakukan geocode pada alamat kita. Anda dapat melakukan ini menggunakan API Python kami, tetapi kami lebih memilih baris perintah. Pertama, kami menyiapkan file input menggunakan Python:

https://medium.com/media/d42674d7028bfe1972867e752861e63b/href

Sekarang kita beralih ke CLI. Untuk membuat dua perintah berikut berfungsi, Anda perlu mengatur variabel GEOAPIFY_KEYenvironment Anda atau menambahkan opsi –api-key ke akhir setiap perintah geobatch. Pertama, kami mengirimkan pekerjaan ke server Geoapify dengan

https://medium.com/media/0de2676543b6c9553058c2f1642ab67d/href

Output dari langkah pertama, tutorial-geocode-urls.json adalah input untuk langkah selanjutnya:

https://medium.com/media/12d95d54155f7b841ce759b4c8d4fdad/href

Memproses permintaan kami membutuhkan waktu, tergantung pada ukuran permintaan, paket berlangganan, dan seberapa sibuk server Geoapify.

Kami mengonversi hasilnya menjadi daftar sederhana dari kamus Python seperti GeoJSON.

https://medium.com/media/8ddb59db016c38f71f6d0dafcd67d4b8/href

Gambar yang dibuat oleh penulis.

GeoPandas membantu kami mengubah data menjadi format tabel. Metode ini mem-parsing geometri menjadi objek geometris Shapely, menempatkan semua properti ke dalam kolom terpisah, dan mengabaikan sisanya. Kami juga mengatur sistem referensi koordinat (CRS) ke ‘EPSG:4326’, yang berarti bahwa tupel geometri diinterpretasikan sebagai garis bujur dan garis lintang.

https://medium.com/media/e74f78f2b4ab495d04762a67c3179ffd/href

Gambar yang dibuat oleh penulis.

Bagian 3 — matriks bobot spasial

Kita akan menggunakan PySAL dan pendekatan berbasis jarak untuk menghitung matriks bobot spasial — PySAL hadir dengan beberapa metode, masing-masing dengan persyaratannya sendiri. Metode berbasis jarak menerima kerangka data geokode kami sebagai input dan menghitung bobot yang, secara default, meluruh secara linier dengan bertambahnya jarak.

Untuk setiap lokasi tertentu L0 kami mengidentifikasi satu set tetangga terdekatnya dan menghitung bobot sebagai fungsi jarak. Matriks bobot spasial terdiri dari semua bobot untuk semua lokasi L0, disusun menurut baris dengan bobot lokasi target L0 pada diagonal. Kami menetapkan bobot diagonal ke nol untuk tujuan analitik kami — gambar yang dibuat oleh penulis dengan Excalidraw.

Kami menerapkan tiga perubahan pada perilaku default:

Parameter fixed=False dan k=10 menghasilkan variabel kekuatan peluruhan per lokasi target. Dengan cara ini jumlah bobot bukan nol adalah k=10 di setiap lingkungan lokasi. Kami menetapkan bobot pada diagonal ke 0. Itu mengecualikan setiap lokasi target dari himpunan tetangganya dengan bobot bukan nol. Ini akan relevan dengan kasus penggunaan kami. Menyetel atribut transform=’R’ menormalkan bobot untuk setiap lokasi target tertentu sehingga jumlahnya sama dengan 1.

https://medium.com/media/6b720ac6154aa0734afb23095ba0afc3/href

Ringkasan tetangga dan bobot yang sesuai untuk lokasi 0, di mana bobotnya positif. Dengan konstruksi, setiap set bobot terdiri dari k=10 tetangga, dan jumlah setiap set bobot sama dengan 1—gambar yang dibuat oleh penulis.

Bagian 4 — kasus penggunaan analitik sederhana

Katakanlah kita ingin memprediksi harga properti suatu lokasi per meter persegi dari harga yang tersedia di sekitarnya. Kami menghitung rata-rata tertimbang menggunakan kembali matriks bobot spasial kami dari bagian sebelumnya:

https://medium.com/media/2c0df3427c7826727123e26f0b6940fa/href

Gambar yang dibuat oleh penulis.

Plot berikutnya menunjukkan bahwa rata-rata tertimbang saja merupakan prediktor harga yang tidak bias.

Sebuah scatterplot harga lokasi yang diketahui dan rata-rata tertimbang dari lingkungan mereka. Garis merah adalah diagonal Price = WeightedAverage — gambar yang dibuat oleh penulis.

Sekarang menjadi jelas mengapa kita menetapkan bobot diagonal ke 0, mengecualikan target dari bobot lingkungannya. Dengan cara ini, kita dapat memprediksi harga lokasi baru mana pun dengan rata-rata tertimbang tetangganya dengan harga yang diketahui.

Dalam skenario yang lebih realistis, Anda ingin mempertimbangkan lebih dari harga tetangga dalam model prediksi Anda untuk mencerminkan variasi yang signifikan di lokasi terdekat. Misalnya, dua lokasi yang berdekatan dapat diberi harga yang sangat berbeda jika salah satunya terkena langsung banyak kebisingan dari lalu lintas. Rata-rata tertimbang kemudian dapat digunakan sebagai salah satu dari banyak prediktor dalam model regresi yang dipasang pada data kami.

Kesimpulan dan pandangan

Sebagian besar (atau semua?) bisnis memproses data alamat untuk tujuan operasional sehari-hari. Untuk faktur, pengiriman barang, kunjungan pelanggan, dll. Data lokasi internal berjumlah ribuan, jika tidak ratusan ribu, pencatatan lokasi sangat cepat. Memanfaatkan data yang sama untuk analitik geospasial biasanya bergantung pada pekerjaan persiapan yang signifikan, seperti geocoding. Kami menunjukkan cara menghindari pengeluaran yang tidak perlu dan risiko hukum menggunakan Geoapify dan paket Python kami — hanya dengan beberapa baris kode. Hampir setiap proyek analitik memiliki potensi untuk mendapatkan manfaat dari dimensi geospasial.

Kami memotivasi bobot spasial dengan memulai dengan ekuivalen temporal, yang menemukan adaptasi luas di ruang analitik. Ini bukan hanya tentang satu atau yang lain. Model dapat menggabungkan waktu dan ruang untuk memperhitungkan keduanya—pertama, sinyal individual yang menurunkan bobot dari jarak temporal. Kedua, gabungkan secara spasial sinyal-sinyal yang diturunkan bobotnya untuk sementara. Misalnya, ketika kita mempelajari churn pelanggan, kita dapat menghitung loyalitas rata-rata di setiap lingkungan pelanggan. Kami mengidentifikasi tanggal dan lokasi setiap churner dari masa lalu— itulah sinyal (biner). Dan kami menghitung rata-rata tertimbang dengan mempertimbangkan jumlah pelanggan aktif untuk setiap lingkungan pelanggan saat ini, yang ditimbang berdasarkan jarak dalam ruang dan waktu. Misalnya, ini menunjukkan jika pelanggan tinggal di area persaingan lokal yang baru-baru ini meningkat — sesuatu yang ingin kami tindak lanjuti dengan cepat.

Geocode Jutaan Lokasi Tanpa Digugat awalnya diterbitkan di Towards AI on Medium, di mana orang-orang melanjutkan percakapan dengan menyoroti dan menanggapi cerita ini.

Diterbitkan melalui Menuju AI

Author: Scott Anderson