bagaimana cara merepresentasikan geografi atau kode pos dalam model pembelajaran mesin atau sistem rekomendasi?

24

Saya sedang membangun model dan saya pikir bahwa lokasi geografis cenderung sangat baik dalam memprediksi variabel target saya. Saya memiliki kode pos masing-masing pengguna saya. Saya tidak sepenuhnya yakin tentang cara terbaik untuk memasukkan kode pos sebagai fitur prediktor dalam model saya. Meskipun kode pos adalah angka, itu tidak berarti apa-apa jika jumlahnya naik atau turun. Saya bisa membuat binarize semua 30.000 kode pos dan kemudian memasukkannya sebagai fitur atau kolom baru (misalnya, {user_1: {61822: 1, 62118: 0, 62444: 0, dll.}}. Namun, ini sepertinya akan menambah satu ton fitur untuk model saya.

Adakah pemikiran tentang cara terbaik untuk menangani situasi ini?

captain_ahab
sumber
1
Hanya pemikiran .. tetapi, jika kode pos didistribusikan secara geografis maka Anda dapat secara geografis mewakili kode pos di peta dan mewakili mereka dengan lokasi mereka. Dengan itu Anda juga bisa melihat kode pos mana yang tertutup ..
Manuel

Jawaban:

14

Salah satu favorit saya menggunakan data kode pos adalah untuk mencari variabel demografis berdasarkan kode pos yang mungkin tidak tersedia di tingkat individu jika tidak ...

Misalnya, dengan http://www.city-data.com/ Anda dapat mencari distribusi pendapatan, rentang usia, dll., Yang mungkin memberi tahu Anda sesuatu tentang data Anda. Variabel kontinu ini seringkali jauh lebih berguna daripada hanya didasarkan pada kode pos ter-biner, setidaknya untuk jumlah data yang relatif terbatas.

Selain itu, kode pos bersifat hierarkis ... jika Anda mengambil dua atau tiga digit pertama, dan membuat binarize berdasarkan itu, Anda memiliki sejumlah informasi regional, yang memberi Anda lebih banyak data daripada ritsleting individual.

Seperti kata Zach, lintang dan bujur yang digunakan juga dapat berguna, terutama dalam model berbasis pohon. Untuk model linier yang teratur, Anda dapat menggunakan quadtrees, memecah Amerika Serikat menjadi empat kelompok geografis, memisahkannya, lalu masing-masing wilayah tersebut menjadi empat kelompok, dan termasuk yang sebagai variabel biner tambahan ... jadi untuk total wilayah daun yang Anda berakhir dengan [(4n - 1) / 3 - 1] total variabel (n untuk daerah terkecil, n / 4 untuk naik tingkat berikutnya, dll). Tentu saja ini multikolinier, itulah sebabnya diperlukan regularisasi untuk melakukan ini.

Joe
sumber
2
Anda bisa mendapatkan visual hierarki yang bagus di zipdecode Ben Fry .
Dimitriy V. Masterov
Joe apakah Anda dapat dengan bebas mendapatkan data tingkat zip (penghasilan, dll) dari situs ini? Saya tidak dapat melihat bagaimana melakukan ini.
B_Miner
URL seperti ini: city-data.com/zips/02108.html Ini tidak diformat dengan baik seperti CSV, jadi Anda harus menggunakan regex / gesekan dll. Sensus AS memiliki beberapa data yang sangat baik, census.gov/epcd/www/zipstats .html dan factfinder2.census.gov/faces/nav/jsf/pages/index.xhtml tetapi mereka tidak memiliki luas.
Joe
18

Ada 2 opsi bagus yang pernah saya lihat:

  1. Ubah setiap kode pos menjadi variabel dummy. Jika Anda memiliki banyak data, ini bisa menjadi solusi yang cepat dan mudah, tetapi Anda tidak akan dapat membuat prediksi untuk kode pos baru. Jika Anda khawatir tentang jumlah fitur, Anda dapat menambahkan beberapa regularisasi ke model Anda untuk mengeluarkan beberapa kode pos dari model.
  2. Gunakan lintang dan bujur dari titik pusat kode pos sebagai variabel. Ini bekerja sangat baik dalam model berbasis pohon, karena mereka dapat memotong grid lintang / bujur menjadi wilayah yang relevan dengan variabel target Anda. Ini juga akan memungkinkan Anda membuat prediksi untuk kode pos baru, dan tidak memerlukan banyak data untuk memperbaikinya. Namun, ini tidak akan bekerja dengan baik untuk model linier.

Secara pribadi, saya sangat suka model berbasis pohon (seperti hutan acak atau GBM), jadi saya hampir selalu memilih opsi 2. Jika Anda ingin benar-benar mewah, Anda dapat menggunakan lat / lon pusat populasi untuk kode pos, daripada pusat kode pos. Tapi itu bisa sulit didapat.

Zach
sumber
Pasti akan pergi untuk 2proposal.
andilabs
# 2 juga berfungsi dengan GAM
Affine
4

Saya berurusan dengan sesuatu yang mirip ketika melatih classifier yang menggunakan bahasa asli sebagai fitur (bagaimana Anda mengukur kesamaan antara bahasa Inggris dan Spanyol?) Ada banyak metode di luar sana untuk menentukan kesamaan antara data non-kategorikal .

Tergantung pada data Anda, tetapi jika Anda menemukan bahwa jarak geografis dari kode pos tidak sepenting apakah input yang diberikan mengandung kode pos tertentu, maka metode non-kategorikal mungkin membantu.

Engineero
sumber
4

Jika Anda menghitung jarak antara catatan, seperti dalam pengelompokan atau K-NN, jarak antara kode pos dalam bentuk mentah mereka mungkin informatif. 02138 jauh lebih dekat dengan 02139, secara geografis, daripada 45809.

Peter bruce
sumber
juga untuk model pohon seperti hutan acak - yang dalam beberapa hal mirip dengan K-NN
captain_ahab
3

Anda dapat mengubah kode pos Anda menjadi variabel nominal (string / faktor). Namun, sejauh yang saya ingat, kode pos mungkin berisi informasi lain seperti county, region, dll. Apa yang akan saya lakukan adalah memahami bagaimana kode pos menyandikan informasi dan mendekodekannya menjadi beberapa fitur.

Bagaimanapun membiarkan kode pos sebagai variabel numerik bukanlah ide yang baik karena beberapa model mungkin menganggap pemesanan numerik atau jarak sebagai sesuatu yang perlu dipelajari.

rapaio
sumber
Terima kasih atas jawabannya! Namun, bahkan jika kode pos adalah string atau faktor, bukankah pada dasarnya saya hanya kode sandi dummy coding (yaitu, membuat 30.000 fitur ter-biner)? Saya tahu R melakukan ini di bawah tenda tetapi harus dilakukan secara eksplisit di scikit belajar.
captain_ahab
3

Saya akan membuat peta choropleth residu model Anda di tingkat kode pos.

Hasilnya disebut peta residual spasial dan mungkin membantu Anda memilih variabel penjelas baru untuk dimasukkan dalam model Anda. Pendekatan ini disebut eksploratory spatial data analysis (ESDA).

Satu alur kerja potensial:

  1. untuk setiap kode pos dapatkan sisa rata-rata
  2. membuat peta choropleth untuk melihat distribusi geografis residu
  3. mencari pola yang mungkin dijelaskan oleh variabel penjelas baru. Misalnya, jika Anda melihat semua kode pos pinggiran kota atau selatan atau pantai dengan residual tinggi maka Anda dapat menambahkan variabel dummy regional yang ditentukan oleh pengelompokan kode pos yang relevan, atau jika Anda melihat residu tinggi untuk kode pos berpenghasilan tinggi maka Anda dapat menambahkan variabel pendapatan.
b_dev
sumber
-2

Anda dapat menampilkan Kode Pos menggunakan teknik di atas, tetapi izinkan saya menyarankan alternatif. Misalkan kita memiliki label kelas biner. Dan dalam data kami memiliki "n" kode pos. Sekarang kita ambil probabilitas kemunculan masing-masing kode kode dalam data, asalkan beberapa label kelas (baik 1 atau nol). Jadi, katakanlah untuk kode pos "j" ------ >>>> Kami mendapatkan probabilitas P_j sebagai: tidak. dari kemunculan "j" / Total no dari kemunculan "j", ketika label kelas adalah 1 atau 0. Dengan cara ini kita dapat mengubahnya menjadi interpretasi proabilistik yang sangat bagus.

Aman Sawarn
sumber
5
Jawaban ini tidak begitu jelas.
Michael R. Chernick