기계 학습 모델 또는 추천 시스템에서 지리 또는 우편 번호를 나타내는 방법은 무엇입니까?


24

모델을 작성 중이며 지리적 위치가 타겟 변수를 예측하는 데 매우 적합하다고 생각합니다. 각 사용자의 우편 번호가 있습니다. 그래도 모델에서 우편 번호를 예측 기능으로 포함시키는 가장 좋은 방법은 확실하지 않습니다. 우편 번호는 숫자이지만 숫자가 올라가거나 내려 가면 아무 의미가 없습니다. 30,000 개의 우편 번호를 모두 이진화 한 다음 기능이나 새 열로 포함 할 수 있습니다 (예 : {user_1 : {61822 : 1, 62118 : 0, 62444 : 0 등}}. 그러나 이것은 톤을 추가하는 것처럼 보입니다. 내 모델의 기능.

이 상황을 처리하는 가장 좋은 방법에 대한 생각이 있습니까?


1
우편 번호가 지리적으로 분산되어 있으면지도에서 우편 번호를 지리적으로 표시하고 위치로 나타낼 수 있습니다. 당신은 또한 closeser있는 된 우편 번호 볼 수 있음으로 ..
마누엘

답변:


14

우편 번호 데이터를 가장 좋아하는 용도 중 하나는 우편 번호를 기준으로 인구 통계 변수를 조회하는 것입니다.

예를 들어, http://www.city-data.com/을 사용 하면 소득 분포, 연령대 등을 찾아 볼 수 있습니다. 이러한 연속 변수는 종종 상대적으로 유한 한 양의 데이터에 대해 이진화 된 우편 번호를 기반으로하는 것보다 훨씬 유용합니다.

또한 우편 번호는 계층 적입니다. 처음 두세 자리를 가져 와서 이진화하면 지역 정보가 어느 정도 남아있어 개별 우편 번호보다 더 많은 데이터를 얻을 수 있습니다.

Zach가 말했듯이 사용 된 위도와 경도는 특히 트리 기반 모델에서 유용 할 수 있습니다. 정규화 된 선형 모델의 경우 쿼드 트리를 사용하여 미국을 4 개의 지리적 그룹으로 분할하고 이진화 한 다음 각 영역을 4 개의 그룹으로 분할하고 추가 이진 변수로 포함 할 수 있습니다. [(4n-1) / 3-1] 총 변수로 끝납니다 (가장 작은 영역의 경우 n, 다음 레벨의 경우 n / 4 등). 물론 이것은 다중 공 선형이기 때문에 정규화가 필요한 이유입니다.


2
Ben Fry의 zipdecode 에서 계층 구조를 멋지게 볼 수 있습니다 .
Dimitriy V. Masterov

Joe이 사이트에서 우편 수준 데이터 (소득 등)를 자유롭게 얻을 수 있습니까? 나는 이것을하는 방법을 볼 수 없었다.
B_Miner

다음과 같은 URL : city-data.com/zips/02108.html CSV와 같이 형식 이 잘못되었으므로 정규식 / 스크래핑 등을 사용해야합니다. 미국 인구 조사에는 잘 정리 된 데이터가 있습니다. census.gov/epcd/www/zipstats .htmlfactfinder2.census.gov/faces/nav/jsf/pages/index.xhtml 그러나 너비는 없습니다.
Joe

18

내가 본 두 가지 좋은 옵션이 있습니다.

  1. 각 우편 번호를 더미 변수로 변환하십시오. 많은 데이터가있는 경우 빠르고 쉬운 솔루션 일 수 있지만 새 우편 번호를 예측할 수는 없습니다. 기능 수에 대해 걱정이되는 경우 모델에 일부 정규화를 추가하여 일부 우편 번호를 모델에서 제거 할 수 있습니다.
  2. 우편 번호 중심점의 위도 및 경도를 변수로 사용하십시오. 위도 / 경도 그리드를 대상 변수와 관련된 영역으로자를 수 있으므로 트리 기반 모델에서 실제로 잘 작동합니다. 또한 새 우편 번호를 예측할 수 있으며 올바른 데이터를 얻을 필요가 없습니다. 그러나 이것은 선형 모델에는 적합하지 않습니다.

개인적으로 저는 트리 기반 모델 (예 : 임의의 포리스트 또는 GBM)을 정말 좋아하므로 거의 항상 옵션 2를 선택합니다. 우편 번호 중심이 아니라 그러나 그것은 파악하기 어려울 수 있습니다.


2제안을 확실히 할 것입니다 .
andilabs

# 2는 또한 GAM
Affine

4

나는 모국어를 기능으로 사용하는 분류자를 훈련시킬 때 비슷한 것을 다루었습니다 (영어와 스페인어의 유사성을 어떻게 측정합니까?) 비 범주 형 데이터 간의 유사성 을 결정하는 방법은 많이 있습니다 .

데이터에 따라 다르지만 지정된 입력에 특정 우편 번호가 포함되어 있는지 여부만큼 우편 번호와 지리적 거리가 중요하지 않은 경우 비 범주 적 방법이 도움이 될 수 있습니다.


4

군집화 또는 K-NN에서와 같이 레코드 간 거리를 계산하는 경우 원시 형식의 우편 번호 간 거리가 유익 할 수 있습니다. 02138은 45809보다 지리적으로 02139에 훨씬 가깝습니다.


어떤면에서 K-NN과 유사하다 - 또한 트리의 임의 숲 같은 모델
captain_ahab

3

우편 번호를 공칭 변수 (문자열 / 인수)로 변환 할 수 있습니다. 그러나 내가 기억하는 한 우편 번호에는 카운티, 지역 등과 같은 다른 정보가 포함될 수 있습니다. 우편 번호가 정보를 인코딩하고 여러 기능으로 디코딩하는 방법을 이해하는 것이 좋습니다.

어쨌든 우편 번호를 숫자 변수로 두는 것은 좋은 방법이 아닙니다. 일부 모델은 숫자 순서 또는 거리를 배우는 것으로 고려할 수 있기 때문입니다.


답변 해주셔서 감사합니다! 그러나 우편 번호가 문자열이나 요인이더라도 본질적으로 우편 번호를 더미 코딩하지는 않습니다 (예 : 30,000 개의 이진화 기능 생성)? 나는 R이 이것을 후드 아래에서 수행한다는 것을 알고 있지만 scikit learn에서 명시 적으로 수행해야합니다.
captain_ahab

3

나는 우편 번호 수준에서 모델의 잔차에 대한 choropleth 맵을 만들 것입니다.

결과를 공간 잔차 맵이라고하며 모델에 포함 할 새로운 설명 변수를 선택하는 데 도움이 될 수 있습니다. 이 접근법을 탐색 적 공간 데이터 분석 (ESDA)이라고합니다.

하나의 잠재적 인 워크 플로우 :

  1. 각 우편 번호마다 평균 잔차를 얻습니다.
  2. 잔차의 지리적 분포를 보려면 choropleth map을 만드십시오
  3. 새로운 설명 변수에 의해 설명 될 수있는 패턴을 찾으십시오. 예를 들어 잔차가 많은 교외 또는 남부 또는 해변 우편 번호가 모두 표시되면 관련 우편 번호 그룹으로 정의 된 지역 더미 변수를 추가하거나 고소득 우편 번호에 대한 잔차가 많으면 소득 변수를 추가 할 수 있습니다.

-2

위의 기술을 사용하여 우편 번호를 기능화 할 수 있지만 대안을 제안하겠습니다. 이진 클래스 레이블이 있다고 가정하십시오. 그리고 데이터에는 "n"우편 번호가 있습니다. 이제 클래스 레이블 (1 또는 0)을 제공하면 데이터에서 각 핀 코드가 발생할 확률을 얻습니다. 따라서 우편 번호 "j"------ >>>>를 말합시다. 확률 P_j는 다음과 같습니다. 클래스 레이블이 1 또는 0 일 때 "j"/ "j"가 발생하지 않습니다. 이런 식으로 우리는이를 매우 훌륭한 확률 론적 해석으로 변환 할 수 있습니다.


5
이 답변은 명확하지 않습니다.
Michael R. Chernick
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.