jak reprezentować geografię lub kod pocztowy w modelu uczenia maszynowego lub systemie rekomendującym?

24

Buduję model i myślę, że położenie geograficzne może być bardzo dobre w przewidywaniu zmiennej docelowej. Mam kod pocztowy każdego z moich użytkowników. Nie jestem jednak całkowicie pewien najlepszego sposobu włączenia kodu pocztowego jako funkcji predykcyjnej w moim modelu. Chociaż kod pocztowy jest liczbą, nic nie znaczy, jeśli liczba rośnie lub maleje. Mógłbym binaryzować wszystkie 30 000 kodów pocztowych, a następnie uwzględnić je jako funkcje lub nowe kolumny (np. {User_1: {61822: 1, 62118: 0, 62444: 0 itd.}}. Wydaje się jednak, że dodałoby to tonę funkcji do mojego modelu.

Jakieś pomysły na najlepszy sposób poradzenia sobie z tą sytuacją?

captain_ahab
źródło
1
To tylko myśl ... ale jeśli kody pocztowe są dystrybuowane geograficznie, możesz geograficznie reprezentować kody pocztowe na mapie i reprezentować je wraz z ich lokalizacją. Dzięki temu można również zobaczyć, które kody pocztowe są bliższe ..
Manuel,
1
Zobacz stats.stackexchange.com/questions/146907/…
kjetil b halvorsen

Odpowiedzi:

14

Jednym z moich ulubionych zastosowań danych kodu pocztowego jest wyszukiwanie zmiennych demograficznych na podstawie kodu pocztowego, które w przeciwnym razie mogą nie być dostępne na poziomie indywidualnym ...

Na przykład w witrynie http://www.city-data.com/ możesz sprawdzić rozkład dochodów, przedziały wiekowe itp., Które mogą ci powiedzieć coś o twoich danych. Te ciągłe zmienne są często znacznie bardziej przydatne niż tylko bazowanie na binarnych kodach pocztowych, przynajmniej w przypadku względnie skończonych ilości danych.

Ponadto kody pocztowe są hierarchiczne ... jeśli weźmiesz pierwsze dwie lub trzy cyfry i binarnie na ich podstawie, będziesz mieć pewną ilość informacji regionalnych, co da ci więcej danych niż pojedyncze zamki.

Jak powiedział Zach, użyta szerokość i długość geograficzna mogą być również przydatne, szczególnie w modelu opartym na drzewie. W przypadku znormalizowanego modelu liniowego można użyć czworokątów, dzieląc Stany Zjednoczone na cztery grupy geograficzne, rozdzielając je na binarne, a następnie każdy z tych obszarów na cztery grupy i włączając je jako dodatkowe zmienne binarne ... więc dla wszystkich regionów liści skończy się na [(4n - 1) / 3 - 1] zmiennych zmiennych (n dla najmniejszych regionów, n / 4 dla następnego poziomu itd.). Oczywiście jest to wielokoliniowe i dlatego do tego potrzebna jest regularyzacja.

Joe
źródło
2
Ładną grafikę hierarchii można uzyskać za pomocą kodu zip Bena Fry'ego .
Dimitriy V. Masterov,
Joe, czy jesteś w stanie swobodnie uzyskiwać dane poziomu zip (dochód itp.) Z tej strony? Nie byłem w stanie zobaczyć, jak to zrobić.
B_Miner
Takie adresy URL: city-data.com/zips/02108.html Nie jest dobrze sformatowany jak CSV, więc musisz używać wyrażeń regularnych / skrobania itp. Amerykański spis powszechny ma kilka ładnie spakowanych danych spis ludności.gov/epcd/ www/zipstats .html i factfinder2.census.gov/faces/nav/jsf/pages/index.xhtml, ale nie mają takiej szerokości.
Joe
18

Są 2 dobre opcje, które widziałem:

  1. Konwertuj każdy kod pocztowy na zmienną fikcyjną. Jeśli masz dużo danych, może to być szybkie i łatwe rozwiązanie, ale nie będziesz w stanie przewidzieć nowych kodów pocztowych. Jeśli martwisz się liczbą funkcji, możesz dodać regulację do swojego modelu, aby usunąć niektóre kody pocztowe z modelu.
  2. Użyj szerokości i długości geograficznej punktu środkowego kodu pocztowego jako zmiennych. Działa to naprawdę dobrze w modelach opartych na drzewach, ponieważ mogą one przeciąć siatkę szerokości / długości geograficznej na regiony odpowiednie dla zmiennej docelowej. Pozwoli to również na przewidywanie nowych kodów pocztowych i nie wymaga tak dużej ilości danych, aby uzyskać poprawność. Nie działa to jednak dobrze w przypadku modeli liniowych.

Osobiście bardzo lubię modele oparte na drzewach (takie jak losowy las lub GBM), więc prawie zawsze wybieram opcję 2. Jeśli chcesz się naprawdę zachwycić, możesz użyć długości / szerokości środkowej populacji dla kodu pocztowego, zamiast centroid kodu pocztowego. Ale trudno to powstrzymać.

Zach
źródło
Zdecydowanie pójdzie na 2propozycję.
andilabs
# 2 wydaje się również współpracować z GAM
Affine
4

Miałem do czynienia z czymś podobnym podczas szkolenia klasyfikatora, który używał języka ojczystego jako cechy (jak mierzysz podobieństwo między językiem angielskim a hiszpańskim?) Istnieje wiele metod określania podobieństwa między danymi niekategoryzowanymi .

Zależy to od twoich danych, ale jeśli okaże się, że odległość geograficzna od kodu pocztowego nie jest tak ważna, jak to, czy dane wejście zawiera określone kody pocztowe, wówczas pomocne mogą być metody niekategoryzowane.

Engineero
źródło
4

Jeśli obliczasz odległość między rekordami, jak w przypadku klastrowania lub K-NN, odległości między kodami pocztowymi w ich surowej postaci mogą być pouczające. Geograficznie 02138 jest znacznie bliżej 02139 niż 45809.

Peter Bruce
źródło
także dla modeli drzew, takich jak losowy las - które pod pewnymi względami są podobne do K-NN
captain_ahab
3

Możesz przekształcić swój kod pocztowy w zmienną nominalną (ciąg / współczynnik). Jednak, o ile pamiętam, kod pocztowy może zawierać inne informacje, takie jak region, region itp. Chciałbym zrozumieć, w jaki sposób kod pocztowy koduje informacje i rozszyfrować je na wiele funkcji.

W każdym razie podanie kodu pocztowego jako zmiennej numerycznej nie jest dobrym pomysłem, ponieważ niektóre modele mogą rozważyć uporządkowanie numeryczne lub odległości jako coś do nauczenia się.

rapaio
źródło
Dziękuję za odpowiedź! Jednak nawet jeśli kod pocztowy jest ciągiem lub czynnikiem, czy zasadniczo nie jestem tylko fałszywym kodem pocztowym (tj. Tworzę 30 000 binarnych funkcji)? Wiem, że R robi to pod maską, ale musi to zostać wyraźnie wykonane w scikit learn.
captain_ahab
3

Zrobiłbym mapę choropleth resztek twojego modelu na poziomie kodu pocztowego.

Wynik nazywa się przestrzenną mapą resztkową i może pomóc ci wybrać nową zmienną objaśniającą, która ma zostać uwzględniona w modelu. Takie podejście nazywa się eksploracyjną analizą danych przestrzennych (ESDA).

Jeden potencjalny przepływ pracy:

  1. dla każdego kodu pocztowego uzyskaj średnią resztkową
  2. zrobić mapę choropleth, aby zobaczyć rozkład geograficzny resztek
  3. poszukaj wzorców, które można wyjaśnić nową zmienną objaśniającą. Na przykład, jeśli widzisz wszystkie kody pocztowe podmiejskie, południowe lub plażowe z wysokimi wartościami rezydualnymi, możesz dodać regionalną zmienną fikcyjną zdefiniowaną przez odpowiednią grupę kodów pocztowych lub jeśli widzisz wysokie wartości rezydualne dla kodów pocztowych o wysokich dochodach, możesz dodać zmienną dochodową.
b_dev
źródło
-2

Możesz uprościć kody pocztowe przy użyciu powyższych technik, ale pozwól, że zasugeruję alternatywę. Załóżmy, że mamy binarne etykiety klas. A w danych mamy „n” kody pocztowe. Teraz bierzemy prawdopodobieństwo wystąpienia każdego kodu PIN w danych, pod warunkiem, że ma etykietę klasy (1 lub zero). Powiedzmy, że dla kodu pocztowego „j” ------ >>>> Otrzymujemy prawdopodobieństwo P_j jako: nie. wystąpień „j” / Całkowita liczba wystąpień „j”, gdy etykieta klasy wynosi 1 lub 0. W ten sposób możemy przekonwertować ją na bardzo ładną interpretację proabilistyczną.

Aman Sawarn
źródło
5
Ta odpowiedź nie jest bardzo jasna.
Michael R. Chernick