Geocode Millions of Locations Without Being Sued – Towards AI

Geocode Millions of Locations Without Being Sued – Towards AI

Pengarang: Paul Kinsvater

Awalnya diterbitkan di Towards AI the World’s Leading AI and Technology News and Media Company. Jika Anda membuat produk atau layanan terkait AI, kami mengundang Anda untuk mempertimbangkan 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 menurunkan pembobotan sinyal dari waktu yang semakin jauh. Dan metode serupa adalah standar dalam model prediktif di luar peramalan deret waktu selama waktu menjadi bagian dari masalah. Apakah Anda ingin memprediksi churn pelanggan? Coba dengan rata-rata tertimbang jumlah pembelian sebelumnya.

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

Persamaan geospasial dari bobot temporal adalah matriks bobot spasial. Ide yang sama berlaku: menghitung rata-rata tertimbang, dengan bobot bergantung pada jarak spasial pada sistem koordinat dua dimensi. Namun, berbeda dengan waktu, jarak dalam ruang membutuhkan kerja pendahuluan yang signifikan. Kemungkinan besar, Anda memulai dengan teks alamat (terstruktur) sebagai catatan lokasi Anda. Lantas, 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, bahkan ratusan, penyedia layanan geocoding. Namun pilihan tersebut ternyata berisiko karena biaya dan alasan hukum.

Baca lisensi jika Anda tidak ingin dilarang atau digugat

Sebaiknya 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 pelarangan akun Anda. Jadi, menyimpan jutaan geocode untuk analitik selanjutnya tidak diperbolehkan.

Untungnya, sebuah startup bernama Geoapify mengisi ceruk ini dengan keberanian. Ini bukan hanya tentang alasan hukum. Ini juga tentang biaya, kenyamanan untuk digunakan (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 ramah sehingga kami dapat menyimpan hasil analisis. Sebagai efek samping, kita dapat menautkan rekaman lokasi internal kita dengan ekosistem sumber data terbuka yang kaya seperti Wikidata. Geoapify bukan hanya tentang geocoding. Itu juga menawarkan detail tempat, isoline, jarak perjalanan, dan banyak lagi — dengan sebagian besar layanan dicakup oleh API Batch mereka dengan diskon 50%.

Mulailah dengan biaya nol hari ini menggunakan layanan Geoapify, termasuk penggunaan komersial. Tingkat gratis mereka memungkinkan geocoding batch dari 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 saat Anda perlu memproses sejumlah besar lokasi. Anda dapat menginstal rilis terbaru dari PyPI dengan pip install geobatchpy. Tapi 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 oleh geocoding batch, hingga menghitung matriks bobot spasial. Kami menyimpulkan dengan kasus penggunaan analitik sederhana.

Bagian 1 — prapemrosesan data

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

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

Gambar yang dibuat oleh penulis.

Layanan geocoding Geoapify menerima pencarian teks gratis dan input 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 di dunia nyata. Dan kesimpulan saya adalah pergi untuk pencarian teks bebas. 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. Agar dua perintah berikut berfungsi, Anda perlu menyetel variabel lingkungan GEOAPIFY_KEY atau menambahkan opsi –api-key di akhir setiap perintah geobatch. Pertama, kami mengirimkan pekerjaan ke server Geoapify dengan

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

Keluaran dari langkah pertama, tutorial-geocode-urls.json adalah masukan untuk selanjutnya:

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

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

Kami mengonversi hasilnya menjadi daftar kamus Python mirip GeoJSON yang disederhanakan.

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

Gambar yang dibuat oleh penulis.

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

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

Gambar yang dibuat oleh penulis.

Bagian 3 — matriks bobot spasial

Kami akan menggunakan PySAL dan pendekatan berbasis jaraknya untuk menghitung matriks bobot spasial — PySAL hadir dengan beberapa metode, masing-masing dengan persyaratannya sendiri. Metode berbasis jarak menerima bingkai data geocode kami sebagai input dan menghitung bobot yang, secara default, berkurang secara linier dengan bertambahnya jarak.

Untuk 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 dibuat oleh penulis dengan Excalidraw.

Kami menerapkan tiga perubahan pada perilaku default:

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

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

Ringkasan tetangga dan bobot yang sesuai untuk lokasi 0, dengan bobot positif. Secara konstruksi, setiap rangkaian bobot terdiri dari k=10 tetangga, dan jumlah dari setiap rangkaian 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 lingkungannya. 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.

Peta sebar 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, kami 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 yang berdekatan dalam model prediksi Anda untuk mencerminkan variasi yang signifikan di lokasi terdekat. Misalnya, dua lokasi yang bertetangga dapat memiliki harga yang sangat berbeda jika salah satunya langsung terkena banyak kebisingan dari lalu lintas. Rata-rata tertimbang kemudian dapat digunakan sebagai salah satu dari banyak prediktor dalam model regresi yang sesuai dengan data kami.

Kesimpulan dan pandangan

Sebagian besar (atau semua?) bisnis memproses data alamat untuk keperluan operasional sehari-hari. Untuk pembuatan faktur, pengiriman barang, kunjungan pelanggan, dll. Data lokasi internal berjumlah ribuan, bahkan ratusan ribu, catatan 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. Secara praktis setiap proyek analitik memiliki potensi untuk mendapatkan keuntungan dari dimensi geospasial.

Kami memotivasi bobot spasial dengan memulai padanan waktu, yang menemukan adaptasi luas dalam ruang analitik. Ini bukan hanya tentang satu atau yang lain. Model dapat menggabungkan waktu dan ruang untuk memperhitungkan keduanya—pertama, menurunkan sinyal individu dari jarak temporal. Kedua, gabungkan secara spasial sinyal-sinyal sementara yang berbobot turun itu. Misalnya, saat 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, ditimbang berdasarkan jarak dalam ruang dan waktu. Misalnya, hal ini menunjukkan jika seorang pelanggan tinggal di area persaingan lokal yang baru-baru ini meningkat — sesuatu yang ingin kami tindak lanjuti dengan cepat.

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

Diterbitkan melalui Menuju AI

Author: Jonathan Kelly