come rappresentare la geografia o il codice postale nel modello di apprendimento automatico o nel sistema di raccomandazione?


24

Sto costruendo un modello e penso che la posizione geografica probabilmente sarà molto brava a prevedere la mia variabile target. Ho il codice postale di ciascuno dei miei utenti. Non sono del tutto sicuro del modo migliore per includere il codice postale come funzione predittiva nel mio modello. Sebbene il codice postale sia un numero, non significa nulla se il numero aumenta o diminuisce. Potrei binarizzare tutti i 30.000 codici postali e includerli come funzioni o nuove colonne (ad es. {User_1: {61822: 1, 62118: 0, 62444: 0, ecc.}}. Tuttavia, sembra che aggiungerebbe un sacco di funzionalità per il mio modello.

Qualche idea sul modo migliore per gestire questa situazione?


1
Solo un pensiero .. ma, se i codici postali sono distribuiti geograficamente, potresti rappresentare geograficamente i codici postali in una mappa e rappresentarli con la loro posizione. Con ciò puoi anche vedere quali codici postali sono più vicini.
Manuel,

Risposte:


14

Uno dei miei usi preferiti dei dati del codice postale è cercare variabili demografiche basate su codice postale che potrebbero non essere disponibili a livello individuale altrimenti ...

Ad esempio, con http://www.city-data.com/ puoi cercare la distribuzione del reddito, le fasce di età, ecc., Che potrebbero darti qualcosa sui tuoi dati. Queste variabili continue sono spesso molto più utili che basarsi su codici postali binarizzati, almeno per quantità relativamente limitate di dati.

Inoltre, i codici postali sono gerarchici ... se prendi le prime due o tre cifre e binarizzi in base a quelle, hai una certa quantità di informazioni regionali, che ti danno più dati delle singole zip.

Come ha detto Zach, anche la latitudine e la longitudine utilizzate possono essere utili, specialmente in un modello basato su alberi. Per un modello lineare regolarizzato, puoi usare i quadrifogli, suddividere gli Stati Uniti in quattro gruppi geografici, binarizzare quelli, quindi ciascuna di quelle aree in quattro gruppi e includerli come variabili binarie aggiuntive ... quindi per n regioni fogliari totali finiscono con [(4n - 1) / 3 - 1] variabili totali (n per le regioni più piccole, n / 4 per il livello successivo, ecc.). Naturalmente questo è multicollineare, motivo per cui è necessaria la regolarizzazione per farlo.


2
Puoi avere una bella visione della gerarchia nel codice zip di Ben Fry .
Dimitriy V. Masterov,

Joe, sei in grado di ottenere liberamente dati a livello di zip (reddito ecc.) Da questo sito? Non sono stato in grado di vedere come farlo.
B_Miner

URL come questo: city-data.com/zips/02108.html Non è ben formattato come un CSV, quindi devi usare regex / scraping ecc. Il censimento degli Stati Uniti ha alcuni dati ben foggiati census.gov/epcd/www/zipstats .html e factfinder2.census.gov/faces/nav/jsf/pages/index.xhtml ma non hanno l'ampiezza.
Joe,

18

Ci sono 2 buone opzioni che ho visto:

  1. Converti ogni codice postale in una variabile fittizia. Se disponi di molti dati, questa può essere una soluzione semplice e veloce, ma non sarai in grado di fare previsioni per i nuovi codici postali. Se sei preoccupato per il numero di funzionalità, puoi aggiungere un po 'di regolarizzazione al tuo modello per eliminare alcuni dei codici postali dal modello.
  2. Usa la latitudine e la longitudine del punto centrale del codice postale come variabili. Funziona davvero bene nei modelli basati su alberi, in quanto possono tagliare la griglia di latitudine / longitudine in regioni rilevanti per la variabile target. Ciò consentirà anche di fare previsioni per i nuovi codici postali e non richiede la quantità di dati necessaria per ottenere il risultato corretto. Tuttavia, questo non funzionerà bene per i modelli lineari.

Personalmente, mi piacciono molto i modelli basati su alberi (come foreste casuali o GBM), quindi quasi sempre scelgo l'opzione 2. Se vuoi essere davvero fantasioso, puoi usare il lat / lon del centro della popolazione per il codice postale, anziché il centroide del codice postale. Ma può essere difficile da capire.


Sicuramente andrà per la 2proposta.
andilabs

# 2 sembra funzionare anche con un GAM
Affine

4

Mi sono occupato di qualcosa di simile durante l'addestramento di un classificatore che utilizzava la lingua madre come funzionalità (come si misura la somiglianza tra inglese e spagnolo?) Esistono molti metodi per determinare la somiglianza tra i dati non categorici .

Dipende dai tuoi dati, ma se scopri che la distanza geografica da un codice postale non è così importante come se un determinato input contenga determinati codici postali, potrebbero essere utili metodi non categorici.


4

Se stai calcolando la distanza tra i record, come nel cluster o K-NN, le distanze tra i codici postali nella loro forma grezza potrebbero essere informative. 02138 è molto più vicino a 02139, geograficamente, che a 45809.


anche per i modelli di alberi come la foresta casuale - che per alcuni aspetti sono simili a K-NN
captain_ahab

3

Potresti trasformare il tuo codice postale in una variabile nominale (stringa / fattore). Tuttavia, per quanto ricordo, il codice postale potrebbe contenere altre informazioni come contea, regione, ecc. Quello che vorrei fare è capire come il codice postale codifica le informazioni e decodificarle in più funzionalità.

Lasciare il codice postale come una variabile numerica non è una buona idea poiché alcuni modelli potrebbero considerare l'ordinamento numerico o le distanze come qualcosa da imparare.


Grazie per la risposta! Tuttavia, anche se il codice postale è una stringa o un fattore, non sono essenzialmente un codice postale di codifica fittizio (ovvero, creazione di 30.000 funzioni binarizzate)? So che R lo fa sotto il cofano, ma deve essere esplicitamente fatto in Scikit Learn.
captain_ahab,

3

Vorrei fare una mappa coropletica dei residui del tuo modello a livello di codice postale.

Il risultato è chiamato mappa spaziale residua e può aiutarti a scegliere una nuova variabile esplicativa da includere nel tuo modello. Questo approccio è chiamato analisi esplorativa dei dati spaziali (ESDA).

Un potenziale flusso di lavoro:

  1. per ogni codice postale ottenere il residuo medio
  2. fare una mappa coropletica per vedere la distribuzione geografica dei residui
  3. cercare schemi che potrebbero essere spiegati da una nuova variabile esplicativa. Ad esempio, se vedi tutti i codici postali suburbani o meridionali o sulla spiaggia con residui elevati, puoi aggiungere una variabile fittizia regionale definita dal relativo raggruppamento di codici postali o se vedi residui elevati per codici postali ad alto reddito, puoi aggiungere una variabile reddito.

-2

Puoi realizzare i codici postali usando le tecniche di cui sopra, ma lasciami suggerire un'alternativa. Supponiamo di avere etichette di classe binarie. E nei dati abbiamo "n" codici postali. Ora prendiamo la probabilità di occorrenza di ciascun codice PIN nei dati, a condizione che sia presente un'etichetta di classe (1 o zero). Quindi, diciamo per un codice postale "j" ------ >>>> Otteniamo una probabilità P_j come: no. di occorrenze di "j" / Numero totale di occorrenze di "j", quando l'etichetta di classe è 1 o 0. In questo modo possiamo convertirla in un'interpretazione proabilistica molto piacevole.


5
Questa risposta non è molto chiara.
Michael R. Chernick,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.