Coğrafya veya posta kodunu makine öğrenme modelinde veya öneri sisteminde nasıl temsil edilir?


24

Bir model yapıyorum ve coğrafi konumumun hedef değişkenimi tahmin etmede çok iyi olacağını düşünüyorum. Kullanıcılarımın her birinin posta kodunu aldım. Yine de, modelimde posta kodunu tahmin özelliği olarak eklemenin en iyi yolu hakkında tam olarak emin değilim. Posta kodu bir sayı olmasına rağmen, sayı yukarı ya da aşağı giderse bir anlamı yoktur. Tüm 30.000 posta kodunu ikilileştirebilir ve sonra bunları özellikler veya yeni sütunlar olarak ekleyebilirim (örneğin, {kullanıcı_1: {61822: 1, 62118: 0, 62444: 0, vb.}}. Ancak, bu bir ton ekleyecek gibi görünüyor. benim modelime özellikleri.

Bu durumu ele almanın en iyi yolu hakkında bir fikriniz var mı?


1
Sadece bir düşünce .. ama, eğer coğrafi kodlar coğrafi olarak dağılmışsa, coğrafi olarak bir haritadaki kodları temsil edebilir ve konumlarını temsil edebilirsin. Bununla beraber hangi zipcodesin daha yakın olduğunu da görebilirsiniz ..
Manuel

Yanıtlar:


14

Posta kodu verilerini en çok kullandığımlardan biri, bireysel seviyede bulunamayan posta kodunu temel alan demografik değişkenleri aramak.

Örneğin, http://www.city-data.com/ ile , verileriniz hakkında size bir şeyler söyleyebilecek gelir dağılımını, yaş aralıklarını vb. Bu sürekli değişkenler genellikle en azından nispeten sınırlı miktarda veri için ikili posta kodlarına dayanmaktan çok daha faydalıdır.

Ayrıca, posta kodları hiyerarşiktir ... ilk iki ya da üç basamağı alırsanız ve bunlara göre ikilileştirirseniz, sizi bireysel fermuarlardan daha fazla veri alan bir miktar bölgesel bilgiye sahip olursunuz.

Zach'in dediği gibi, kullanılan enlem ve boylam, özellikle ağaç tabanlı bir modelde de faydalı olabilir. Düzenli bir doğrusal model için, Amerika Birleşik Devletleri'ni dört coğrafi gruba ayırarak, bu bölgelerin her birini dört gruba bölerek, sonradan iki ayrı gruba ayırıp, ek iki değişken değişkenleri de dahil olmak üzere ... [(4n - 1) / 3 - 1] toplam değişkenlerle biter (en küçük bölgeler için n, bir sonraki seviye için n / 4, vb.). Elbette bu çok-kutupludur, bu yüzden bunun için düzenlileşmeye ihtiyaç vardır.


2
Ben Fry'ın posta kodunda hiyerarşinin güzel bir görüntüsünü bulabilirsiniz .
Dimitriy V. Masterov

Joe, bu siteden zip seviyesi verilerini (gelir vb.) Serbestçe elde edebiliyor musun? Bunun nasıl yapıldığını göremedim.
B_Miner

Bunun gibi URL'ler: city-data.com/zips/02108.html CSV gibi iyi biçimlendirilmemiş, bu nedenle regexes / scraping vb. Kullanmak zorundasınız. .html ve factfinder2.census.gov/faces/nav/jsf/pages/index.xhtml ancak genişliği yoktur.
Joe,

18

Gördüğüm 2 iyi seçenek var:

  1. Her posta kodunu yapay bir değişkene dönüştürün. Çok fazla veriye sahipseniz, bu hızlı ve kolay bir çözüm olabilir, ancak yeni posta kodları için öngörülerde bulunamazsınız. Özelliklerin sayısı hakkında endişe duyuyorsanız, bazı kodları modelden çıkarmak için modelinize bazı düzenlemeler ekleyebilirsiniz.
  2. Posta kodunun orta noktasının enlem ve boylamını değişken olarak kullanın. Enlem / boylam ızgarasını hedef değişkeninizle alakalı bölgelere bölebildiğinden, ağaç tabanlı modellerde bu gerçekten işe yarar. Bu aynı zamanda yeni posta kodları için tahminlerde bulunmanıza izin verecektir ve doğru olması için fazla veri gerektirmez. Ancak, bu doğrusal modeller için iyi çalışmaz.

Şahsen, gerçekten ağaç tabanlı modellerden (rastgele orman veya GBM'ler gibi) hoşlanıyorum, bu yüzden neredeyse her zaman 2. seçeneği seçiyorum. posta kodu centroid yerine. Ancak bunu elde etmek zor olabilir.


Kesinlikle 2teklif için gidecek .
andilabs

# 2 aynı zamanda bir GAM
Affine

4

Ana dili bir özellik olarak kullanan bir sınıflayıcıyı eğitirken benzer bir şeyle uğraşıyorum (İngilizce ile İspanyolca arasındaki benzerliği nasıl ölçüyorsunuz?) Kategorik olmayan veriler arasındaki benzerliği belirlemek için birçok yöntem var .

Verilerinize bağlıdır, ancak bir posta kodundan gelen coğrafi mesafenin belirli bir girişin belirli posta kodları içerip içermediği kadar önemli olmadığını fark ederseniz, kategorik olmayan yöntemler yardımcı olabilir.


4

Kayıtlar arasındaki mesafeyi hesaplarsanız, kümelemede veya K-NN'de olduğu gibi, ham formlardaki zip kodlar arasındaki mesafeler bilgilendirici olabilir. 02138, coğrafi olarak 02139'a 45809'dan daha yakındır.


ayrıca bazı yönlerden K-
NN'ye

3

Posta kodunuzu nominal bir değişkene (string / factor) dönüştürebilirsiniz. Ancak, hatırladığım kadarıyla, posta kodu ilçe, bölge vb. Gibi başka bilgiler de içerebilir. Yapacağım şey posta kodunun bilgileri nasıl kodladığını anlamak ve bunu birden fazla özelliğe dönüştürmektir.

Yine de, posta kodunu sayısal bir değişken olarak kabul etmek iyi bir fikir değildir, çünkü bazı modeller sayısal sıralamayı veya mesafeleri öğrenecek bir şey olarak düşünebilir.


Cevap için teşekkürler! Bununla birlikte, posta kodu bir dize ya da faktör olsa bile, aslında sadece kodlama posta kodunu taklit etmiyor muyum (yani, 30.000 ikili özellik oluşturma)? R'nin bunu başlık altında yaptığını biliyorum ama açıkça scikit öğrenmede yapılması gerekiyor.
captain_ahab

3

Modelinizin artıklarının posta kodunu bir choropleth haritası haline getirirdim.

Sonuç mekansal kalıntı haritası olarak adlandırılır ve modelinize dahil etmek için yeni bir açıklayıcı değişken seçmenize yardımcı olabilir. Bu yaklaşıma keşifsel mekansal veri analizi (ESDA) denir.

Bir potansiyel iş akışı:

  1. Her posta kodu için ortalama kalıntı
  2. Artıkların coğrafi dağılımını görmek için bir choropleth haritası hazırlamak
  3. Yeni bir açıklayıcı değişken tarafından açıklanabilecek kalıpları arayın. Örneğin, yüksek kalıntılara sahip tüm banliyö veya güney ya da plaj posta kodlarını görüyorsanız, ilgili posta kodu gruplaması tarafından tanımlanan bölgesel bir kukla değişken ekleyebilir veya yüksek gelirli posta kodları için yüksek kalıntıları görüyorsanız, bir gelir değişkeni ekleyebilirsiniz.

-2

Yukarıdaki teknikleri kullanarak Zipcode'ları öne çıkarabilirsiniz, ancak bir alternatif önereyim. İkili sınıf etiketlerimiz olduğunu varsayalım. Ve verilerde "n" posta kodlarımız var. Şimdi, bir sınıf etiketi (ya 1 ya da sıfır) sağlayarak verideki her pin kodunun oluşma olasılığını alıyoruz. Öyleyse, "j" bir posta kodu için şunu söyleyelim ------ >>>> P_j olasılığını şu şekilde alırız: hayır. "j" oluşumunun toplamı / "j" nin toplam sayısı, sınıf etiketi 1 veya 0 olduğunda.


5
Bu cevap çok net değil.
Michael R. Chernick
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.