comment représenter la géographie ou le code postal dans un modèle d'apprentissage automatique ou un système de recommandation?


24

Je construis un modèle et je pense que la situation géographique est susceptible d'être très bonne pour prédire ma variable cible. J'ai le code postal de chacun de mes utilisateurs. Je ne suis pas tout à fait sûr de la meilleure façon d'inclure le code postal comme fonctionnalité de prédiction dans mon modèle. Bien que le code postal soit un nombre, cela ne signifie rien si le nombre augmente ou diminue. Je pourrais binariser les 30 000 codes postaux, puis les inclure en tant que fonctionnalités ou nouvelles colonnes (par exemple, {user_1: {61822: 1, 62118: 0, 62444: 0, etc.}}. Cependant, cela semble ajouter une tonne des fonctionnalités de mon modèle.

Avez-vous des réflexions sur la meilleure façon de gérer cette situation?


1
Juste une pensée .. mais, si les codes postaux sont distribués géographiquement, vous pouvez représenter géographiquement les codes postaux sur une carte et les représenter avec leur emplacement. Avec cela, vous pouvez également voir quels codes postaux sont plus proches.
Manuel

Réponses:


14

L'une de mes utilisations préférées des données de code postal est de rechercher des variables démographiques basées sur le code postal qui pourraient ne pas être disponibles au niveau individuel sinon ...

Par exemple, avec http://www.city-data.com/, vous pouvez rechercher la répartition des revenus, les tranches d'âge, etc., qui pourraient vous renseigner sur vos données. Ces variables continues sont souvent beaucoup plus utiles que le simple fait de se baser sur des codes postaux binarisés, au moins pour des quantités relativement limitées de données.

De plus, les codes postaux sont hiérarchiques ... si vous prenez les deux ou trois premiers chiffres et binarisez en fonction de ceux-ci, vous disposez d'une certaine quantité d'informations régionales, ce qui vous donne plus de données que les fermetures à glissière individuelles.

Comme l'a dit Zach, la latitude et la longitude utilisées peuvent également être utiles, en particulier dans un modèle basé sur un arbre. Pour un modèle linéaire régularisé, vous pouvez utiliser des arbres quadruples, divisant les États-Unis en quatre groupes géographiques, binarisés ceux-ci, puis chacune de ces zones en quatre groupes, et en incluant celles-ci comme variables binaires supplémentaires ... donc pour n régions foliaires totales vous se retrouver avec [(4n - 1) / 3 - 1] variables totales (n pour les plus petites régions, n / 4 pour le niveau supérieur suivant, etc.). Bien sûr, c'est multicollinéaire, c'est pourquoi une régularisation est nécessaire pour ce faire.


2
Vous pouvez obtenir un bon visuel de la hiérarchie au zipdecode de Ben Fry .
Dimitriy V. Masterov

Joe, pouvez-vous obtenir librement des données de niveau zip (revenus, etc.) à partir de ce site? Je n'ai pas pu voir comment procéder.
B_Miner

URL comme ceci: city-data.com/zips/02108.html Il est pas bien formaté comme un CSV, vous devez utiliser regexes / grattage , etc. Le recensement des États - Unis a des données bien fomatted census.gov/epcd/www/zipstats .html et factfinder2.census.gov/faces/nav/jsf/pages/index.xhtml mais ils n'ont pas l'ampleur.
Joe

18

Il y a 2 bonnes options que j'ai vues:

  1. Convertissez chaque code postal en une variable fictive. Si vous avez beaucoup de données, cela peut être une solution rapide et facile, mais vous ne pourrez pas faire de prédictions pour les nouveaux codes postaux. Si vous êtes préoccupé par le nombre de fonctionnalités, vous pouvez ajouter une régularisation à votre modèle pour supprimer certains des codes postaux du modèle.
  2. Utilisez la latitude et la longitude du point central du code postal comme variables. Cela fonctionne très bien dans les modèles arborescents, car ils peuvent découper la grille de latitude / longitude en régions pertinentes pour votre variable cible. Cela vous permettra également de faire des prédictions pour les nouveaux codes postaux, et ne nécessite pas autant de données pour bien faire les choses. Cependant, cela ne fonctionnera pas bien pour les modèles linéaires.

Personnellement, j'aime beaucoup les modèles arborescents (comme les forêts aléatoires ou les GBM), donc je choisis presque toujours l'option 2. Si vous voulez vraiment avoir de la fantaisie, vous pouvez utiliser le lat / lon du centre de population pour le code postal, plutôt que le centroïde du code postal. Mais cela peut être difficile à saisir.


J'irai certainement pour la 2proposition.
andilabs

# 2 semble également fonctionner avec un GAM
Affine

4

J'ai traité quelque chose de similaire lors de la formation d'un classificateur qui utilise la langue maternelle comme caractéristique (comment mesurez-vous la similitude entre l'anglais et l'espagnol?) Il existe de nombreuses méthodes pour déterminer la similitude entre les données non catégorielles .

Cela dépend de vos données, mais si vous trouvez que la distance géographique d'un code postal n'est pas aussi importante que si une entrée donnée contient des codes postaux particuliers, alors des méthodes non catégoriques peuvent vous aider.


4

Si vous calculez la distance entre les enregistrements, comme dans le clustering ou K-NN, les distances entre les codes postaux dans leur forme brute peuvent être informatives. 02138 est beaucoup plus proche géographiquement du 02139 que du 45809.


également pour les modèles d'arbres comme la forêt aléatoire - qui, à certains égards, sont similaires à K-NN
captain_ahab

3

Vous pouvez transformer votre code postal en une variable nominale (chaîne / facteur). Cependant, pour autant que je m'en souvienne, le code postal peut contenir d'autres informations comme le comté, la région, etc. Ce que je ferais serait de comprendre comment le code postal code les informations et de les décoder en plusieurs fonctionnalités.

Quoi qu'il en soit, laisser le code postal comme variable numérique n'est pas une bonne idée car certains modèles peuvent considérer l'ordre numérique ou les distances comme quelque chose à apprendre.


Merci d'avoir répondu! Cependant, même si le code postal est une chaîne ou un facteur, ne suis-je pas essentiellement un code postal de codage factice (c'est-à-dire la création de 30 000 fonctionnalités binarisées)? Je sais que R le fait sous le capot, mais cela doit être explicitement fait dans scikit learn.
captain_ahab

3

Je ferais une carte choroplèthe des résidus de votre modèle au niveau du code postal.

Le résultat est appelé une carte spatiale résiduelle et il peut vous aider à choisir une nouvelle variable explicative à inclure dans votre modèle. Cette approche est appelée analyse exploratoire des données spatiales (ESDA).

Un flux de travail potentiel:

  1. pour chaque code postal, obtenez le résidu moyen
  2. faire une carte choroplèthe pour voir la répartition géographique des résidus
  3. recherchez les modèles qui pourraient être expliqués par une nouvelle variable explicative. Par exemple, si vous voyez tous les codes postaux de banlieue, du sud ou de la plage avec des résidus élevés, vous pouvez ajouter une variable fictive régionale définie par le groupe de codes postaux pertinent, ou si vous voyez des résidus élevés pour les codes postaux à revenu élevé, vous pouvez ajouter une variable de revenu.

-2

Vous pouvez personnaliser les codes postaux en utilisant les techniques ci-dessus, mais permettez-moi de suggérer une alternative. Supposons que nous ayons des étiquettes de classe binaires. Et dans les données, nous avons "n" codes postaux. Maintenant, nous prenons la probabilité d'occurrence de chaque code PIN dans les données, à condition qu'une étiquette de classe (soit 1 ou zéro). Donc, disons pour un code postal "j" ------ >>>> Nous obtenons une probabilité P_j comme: non. d'occurrences de "j" / Nombre total d'occurrences de "j", lorsque le libellé de classe est 1 ou 0. De cette façon, nous pouvons le convertir en une très belle interprétation proabiliste.


5
Cette réponse n'est pas très claire.
Michael R. Chernick
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.