como representar a geografia ou o CEP no modelo de aprendizado de máquina ou no sistema de recomendação?

24

Estou construindo um modelo e acho que a localização geográfica provavelmente será muito boa em prever minha variável de destino. Eu tenho o CEP de cada um dos meus usuários. No entanto, não tenho muita certeza da melhor maneira de incluir o CEP como um recurso preditivo no meu modelo. Embora o CEP seja um número, isso não significa nada se o número aumentar ou diminuir. Eu poderia binarizar todos os 30.000 códigos postais e incluí-los como recursos ou novas colunas (por exemplo, {user_1: {61822: 1, 62118: 0, 62444: 0, etc.}}. No entanto, isso parece adicionar uma tonelada de recursos para o meu modelo.

Alguma idéia sobre a melhor maneira de lidar com essa situação?

captain_ahab
fonte
1
Apenas um pensamento .. mas, se os códigos postais estiverem distribuídos geograficamente, você poderá representar geograficamente códigos postais em um mapa e representá-los com sua localização. Com isso você também pode ver que zipcodes são closeser ..
Manuel

Respostas:

14

Um dos meus usos favoritos dos dados do CEP é procurar variáveis ​​demográficas com base no CEP que talvez não estejam disponíveis no nível individual, caso contrário ...

Por exemplo, com http://www.city-data.com/, você pode procurar distribuição de renda, faixas etárias etc., o que pode lhe dizer algo sobre seus dados. Essas variáveis ​​contínuas costumam ser muito mais úteis do que apenas basear-se em códigos postais binários, pelo menos para quantidades relativamente finitas de dados.

Além disso, os códigos postais são hierárquicos ... se você pegar os dois ou três primeiros dígitos e se binarizar com base nesses dados, você tem alguma quantidade de informações regionais, o que fornece mais dados do que os zips individuais.

Como Zach disse, latitude e longitude usadas também podem ser úteis, especialmente em um modelo baseado em árvore. Para um modelo linear regularizado, você pode usar quadríceps, dividindo os Estados Unidos em quatro grupos geográficos, binarizados e, em seguida, cada uma dessas áreas em quatro grupos e incluindo aqueles como variáveis ​​binárias adicionais ... portanto, para n regiões totais de folhas você termine com [(4n - 1) / 3 - 1] variáveis ​​totais (n para as regiões menores, n / 4 para o próximo nível acima, etc). É claro que isso é multicolinar, e é por isso que a regularização é necessária para fazer isso.

Joe
fonte
2
Você pode obter um bom visual da hierarquia no código postal de Ben Fry .
precisa saber é o seguinte
Joe, você é capaz de obter livremente dados de nível zip (renda etc.) deste site? Não pude ver como fazer isso.
B_Miner
URLs como este: city-data.com/zips/02108.html Não está bem formatado como um CSV, portanto, você deve usar expressões regulares / scraping etc. O censo dos EUA tem alguns dados bem otimizados census.gov/epcd/www/zipstats .html e factfinder2.census.gov/faces/nav/jsf/pages/index.xhtml, mas eles não têm a amplitude.
Joe
18

Há duas boas opções que eu já vi:

  1. Converta cada CEP em uma variável dummy. Se você tiver muitos dados, pode ser uma solução rápida e fácil, mas não poderá fazer previsões para novos códigos postais. Se você estiver preocupado com o número de recursos, poderá adicionar alguma regularização ao seu modelo para remover alguns códigos postais do modelo.
  2. Use a latitude e longitude do ponto central do CEP como variáveis. Isso funciona muito bem em modelos baseados em árvore, pois eles podem cortar a grade de latitude / longitude em regiões relevantes para a variável de destino. Isso também permitirá que você faça previsões para novos códigos postais e não exige tantos dados para acertar. No entanto, isso não funcionará bem para modelos lineares.

Pessoalmente, gosto muito de modelos baseados em árvores (como floresta aleatória ou GBMs), então quase sempre escolho a opção 2. Se você quiser ser realmente chique, pode usar o lat / lon do centro da população para o CEP, em vez do centróide do CEP. Mas isso pode ser difícil de entender.

Zach
fonte
Definitivamente irá para a 2proposta.
andilabs
O número 2 também parece funcionar com um GAM
Afixo 25/04
4

Eu lidei com algo semelhante ao treinar um classificador que usava o idioma nativo como um recurso (como você mede a similaridade entre inglês e espanhol?) Existem muitos métodos disponíveis para determinar a similaridade entre dados não categóricos .

Depende dos seus dados, mas se você achar que a distância geográfica de um CEP não é tão importante quanto se uma determinada entrada contém códigos postais específicos, métodos não categóricos podem ajudar.

Engineero
fonte
4

Se você estiver calculando a distância entre registros, como em cluster ou K-NN, as distâncias entre códigos postais em sua forma bruta podem ser informativas. 02138 está muito mais próximo de 02139, geograficamente, do que de 45809.

Peter bruce
fonte
também para os modelos de árvores como floresta aleatória - que em alguns aspectos, são semelhantes a K-NN
captain_ahab
3

Você pode transformar seu código postal em uma variável nominal (string / fator). No entanto, tanto quanto me lembro, o código postal pode conter outras informações, como município, região etc. O que eu faria é entender como o código postal codifica as informações e as decodifica em vários recursos.

De qualquer forma, deixar o CEP como uma variável numérica não é uma boa ideia, pois alguns modelos podem considerar a ordenação numérica ou as distâncias como algo a aprender.

rapaio
fonte
Obrigado pela resposta! No entanto, mesmo que o CEP seja uma string ou um fator, eu não sou apenas um código postal fictício (ou seja, criando 30.000 recursos binários)? Eu sei que R faz isso sob o capô, mas isso deve ser explicitamente feito no scikit learn.
Captain_ahab
3

Eu faria um mapa detalhado dos resíduos do seu modelo no nível do código postal.

O resultado é chamado de mapa residual espacial e pode ajudá-lo a escolher uma nova variável explicativa para incluir em seu modelo. Essa abordagem é chamada de análise exploratória de dados espaciais (ESDA).

Um fluxo de trabalho potencial:

  1. para cada código postal obtenha o resíduo médio
  2. faça um mapa coroplético para ver a distribuição geográfica dos resíduos
  3. procure padrões que possam ser explicados por uma nova variável explicativa. Por exemplo, se você ver todos os códigos postais suburbanos ou do sul ou de praia com altos resíduos, poderá adicionar uma variável fictícia regional definida pelo agrupamento de CEPs relevante ou se você ver altos resíduos de códigos postais de alta renda, poderá adicionar uma variável de renda.
b_dev
fonte
-2

Você pode caracterizar os códigos postais usando as técnicas acima, mas deixe-me sugerir uma alternativa. Suponha que tenhamos rótulos de classe binária. E nos dados, temos "n" códigos postais. Agora tomamos a probabilidade de ocorrência de cada código PIN nos dados, desde que algum rótulo de classe (1 ou zero). Então, digamos para um CEP "j" ------ >>>> Temos uma probabilidade P_j como: não. de ocorrências de "j" / número total de ocorrências de "j", quando o rótulo da classe é 1 ou 0. Dessa forma, podemos convertê-lo em uma interpretação proabilística muito boa.

Aman Sawarn
fonte
5
Esta resposta não é muito clara.
Michael R. Chernick