¿Cómo representar la geografía o el código postal en el modelo de aprendizaje automático o el sistema de recomendación?

24

Estoy construyendo un modelo y creo que es probable que la ubicación geográfica sea muy buena para predecir mi variable objetivo. Tengo el código postal de cada uno de mis usuarios. Sin embargo, no estoy completamente seguro de la mejor manera de incluir el código postal como una función de predicción en mi modelo. Aunque el código postal es un número, no significa nada si el número sube o baja. Podría binarizar todos los 30,000 códigos postales y luego incluirlos como características o nuevas columnas (por ejemplo, {user_1: {61822: 1, 62118: 0, 62444: 0, etc.}}. Sin embargo, esto parece que agregaría una tonelada de características para mi modelo.

¿Alguna idea sobre la mejor manera de manejar esta situación?

captain_ahab
fuente
1
Solo un pensamiento ... pero, si los códigos postales se distribuyen geográficamente, podría representarlos geográficamente en un mapa y representarlos con su ubicación. Con eso también se podía ver qué códigos postales están más cerca ..
Manuel

Respuestas:

14

Uno de mis usos favoritos de los datos del código postal es buscar variables demográficas basadas en el código postal que de otro modo podrían no estar disponibles a nivel individual ...

Por ejemplo, con http://www.city-data.com/ puede buscar distribución de ingresos, rangos de edad, etc., lo que podría decirle algo sobre sus datos. Estas variables continuas a menudo son mucho más útiles que simplemente basarse en códigos postales binarios, al menos para cantidades de datos relativamente finitas.

Además, los códigos postales son jerárquicos ... si toma los primeros dos o tres dígitos, y binariza en función de ellos, tiene cierta cantidad de información regional, que le proporciona más datos que las cremalleras individuales.

Como dijo Zach, la latitud y la longitud utilizadas también pueden ser útiles, especialmente en un modelo basado en árboles. Para un modelo lineal regularizado, puede usar cuadrúteros, dividiendo los Estados Unidos en cuatro grupos geográficos, binarizados, luego cada una de esas áreas en cuatro grupos e incluyéndolos como variables binarias adicionales ... así que para n regiones de hojas totales terminar con [(4n - 1) / 3 - 1] variables totales (n para las regiones más pequeñas, n / 4 para el siguiente nivel, etc.). Por supuesto, esto es multicolineal, por lo que se necesita regularización para hacer esto.

Joe
fuente
2
Puede obtener una buena imagen de la jerarquía en el código postal de Ben Fry .
Dimitriy V. Masterov
Joe, ¿puedes obtener libremente datos de nivel zip (ingresos, etc.) de este sitio? No pude ver cómo hacer esto.
B_Miner
URL como esta: city-data.com/zips/02108.html No está bien formateado como un CSV, así que hay que usar expresiones regulares / raspado censo etc. Los Estados Unidos tienen algunos datos muy bien fomatted census.gov/epcd/www/zipstats .html y factfinder2.census.gov/faces/nav/jsf/pages/index.xhtml pero no tienen la amplitud.
Joe
18

Hay 2 buenas opciones que he visto:

  1. Convierta cada código postal en una variable ficticia. Si tiene muchos datos, esta puede ser una solución rápida y fácil, pero no podrá hacer predicciones para nuevos códigos postales. Si le preocupa la cantidad de funciones, puede agregar cierta regularización a su modelo para eliminar algunos de los códigos postales del modelo.
  2. Use la latitud y longitud del punto central del código postal como variables. Esto funciona realmente bien en modelos basados ​​en árboles, ya que pueden cortar la cuadrícula de latitud / longitud en regiones que son relevantes para su variable objetivo. Esto también le permitirá hacer predicciones para nuevos códigos postales, y no requiere tanta información para hacerlo bien. Sin embargo, esto no funcionará bien para modelos lineales.

Personalmente, realmente me gustan los modelos basados ​​en árboles (como el bosque aleatorio o GBM), por lo que casi siempre elijo la opción 2. Si quieres ponerte realmente elegante, puedes usar el lat / lon del centro de población para el código postal, en lugar del centroide de código postal. Pero eso puede ser difícil de conseguir.

Zach
fuente
Definitivamente iré por la 2propuesta.
andilabs
# 2 también parece funcionar con un GAM
Affine
4

Al entrenar a un clasificador que usaba el idioma nativo como una característica (¿cómo se mide la similitud entre el inglés y el español?), Traté con algo similar. Existen muchos métodos para determinar la similitud entre los datos no categóricos .

Depende de sus datos, pero si encuentra que la distancia geográfica de un código postal no es tan importante como si una entrada dada contiene códigos postales particulares, entonces los métodos no categóricos podrían ayudar.

Engineero
fuente
4

Si está calculando la distancia entre registros, como en clustering o K-NN, las distancias entre códigos postales en su forma sin formato pueden ser informativas. 02138 está mucho más cerca de 02139, geográficamente, que de 45809.

Peter bruce
fuente
también para modelos de árboles como bosque aleatorio, que en algunos aspectos son similares a K-NN
captain_ahab
3

Puede transformar su código postal en una variable nominal (cadena / factor). Sin embargo, por lo que recuerdo, el código postal puede contener otra información como el condado, la región, etc. Lo que haría es entender cómo el código postal codifica la información y decodificarla en múltiples funciones.

De todos modos, dejar el código postal como una variable numérica no es una buena idea, ya que algunos modelos pueden considerar el orden numérico o las distancias como algo para aprender.

rapaio
fuente
¡Gracias por la respuesta! Sin embargo, incluso si el código postal es una cadena o factor, ¿no estoy esencialmente codificando código postal ficticio (es decir, creando 30,000 funciones binarias)? Sé que R hace esto bajo el capó, pero tiene que hacerse explícitamente en scikit learn.
captain_ahab
3

Haría un mapa coroplético de los residuos de su modelo en el nivel del código postal.

El resultado se denomina mapa residual espacial y puede ayudarlo a elegir una nueva variable explicativa para incluir en su modelo. Este enfoque se llama análisis exploratorio de datos espaciales (ESDA).

Un flujo de trabajo potencial:

  1. para cada código postal obtenga el promedio residual
  2. hacer un mapa coroplético para ver la distribución geográfica de los residuos
  3. Busque patrones que podrían explicarse por una nueva variable explicativa. Por ejemplo, si ve todos los códigos postales suburbanos o meridionales o de playa con altos residuos, entonces puede agregar una variable ficticia regional definida por la agrupación de código postal relevante, o si ve altos residuos para códigos postales de altos ingresos, entonces puede agregar una variable de ingresos.
b_dev
fuente
-2

Puede crear los códigos postales utilizando las técnicas anteriores, pero permítame sugerirle una alternativa. Supongamos que tenemos etiquetas de clase binarias. Y en los datos tenemos "n" códigos postales. Ahora tomamos la probabilidad de ocurrencia de cada código PIN en los datos, siempre que se proporcione alguna etiqueta de clase (ya sea 1 o cero). Entonces, digamos para un código postal "j" ------ >>>> Obtenemos una probabilidad P_j como: no. de ocurrencias de "j" / No total de ocurrencias de "j", cuando la etiqueta de clase es 1 o 0. De esta manera podemos convertirlo en una interpretación proabilística muy agradable.

Aman Sawarn
fuente
55
Esta respuesta no es muy clara.
Michael R. Chernick