Wie kann man Geografie oder Postleitzahl im Modell des maschinellen Lernens oder im Empfehlungssystem darstellen?

24

Ich baue ein Modell auf und denke, dass der geografische Standort meine Zielvariable wahrscheinlich sehr gut vorhersagen kann. Ich habe die Postleitzahl von jedem meiner Benutzer. Ich bin mir nicht ganz sicher, wie ich Postleitzahl als Vorhersagefunktion in mein Modell integrieren kann. Obwohl die Postleitzahl eine Zahl ist, hat sie keine Bedeutung, wenn die Zahl nach oben oder unten geht. Ich könnte alle 30.000 Postleitzahlen binarisieren und sie dann als Features oder neue Spalten einfügen (z. B. {user_1: {61822: 1, 62118: 0, 62444: 0, usw.}}. Dies scheint jedoch eine Tonne hinzuzufügen von Funktionen zu meinem Modell.

Überlegen Sie, wie Sie mit dieser Situation am besten umgehen können?

captain_ahab
quelle
1
Nur ein Gedanke. Wenn Postleitzahlen jedoch geografisch verteilt sind, können Sie Postleitzahlen in einer Karte geografisch darstellen und sie mit ihrem Standort darstellen. Damit konnte man auch sehen, welche Postleitzahlen dichter sind ..
Manuel

Antworten:

14

Eine meiner bevorzugten Verwendungen von Postleitzahldaten ist die Suche nach demografischen Variablen basierend auf der Postleitzahl, die auf der individuellen Ebene möglicherweise nicht verfügbar sind ...

Unter http://www.city-data.com/ können Sie beispielsweise die Einkommensverteilung, Altersgruppen usw. nachschlagen, die Ihnen möglicherweise Informationen zu Ihren Daten liefern. Diese stetigen Variablen sind oft weitaus nützlicher, als nur auf der Basis von binärisierten Postleitzahlen zu arbeiten, zumindest für relativ begrenzte Datenmengen.

Außerdem sind Postleitzahlen hierarchisch ... Wenn Sie die ersten zwei oder drei Ziffern verwenden und anhand dieser Zahlen binärisieren, verfügen Sie über einige regionale Informationen, mit denen Sie mehr Daten erhalten als mit einzelnen Reißverschlüssen.

Wie Zach sagte, können die verwendeten Längen- und Breitengrade auch nützlich sein, insbesondere in einem baumbasierten Modell. Für ein reguliertes lineares Modell können Sie Quadtrees verwenden, die die Vereinigten Staaten in vier geografische Gruppen aufteilen, diese in Binärzahlen und dann jeden dieser Bereiche in vier Gruppen aufteilen und diese als zusätzliche Binärvariablen einschließen ... also für n Blattregionen insgesamt Am Ende erhalten Sie [(4n - 1) / 3 - 1] Gesamtvariablen (n für die kleinsten Regionen, n / 4 für die nächsthöhere Ebene usw.). Dies ist natürlich multikollinear, weshalb Regularisierung erforderlich ist, um dies zu tun.

Joe
quelle
2
Unter der Postleitzahl von Ben Fry können Sie sich ein gutes Bild von der Hierarchie machen .
Dimitriy V. Masterov
Joe, können Sie auf dieser Website frei Zip-Level-Daten (Einkommen usw.) abrufen? Ich konnte nicht sehen, wie das geht.
B_Miner
URLs wie folgt aus : city-data.com/zips/02108.html gut Es ist nicht wie eine CSV - Format, so dass Sie reguläre Ausdrücke verwenden / usw. Die US - Volkszählung Schaben hat einige schön fomatted Daten census.gov/epcd/www/zipstats .html und factfinder2.census.gov/faces/nav/jsf/pages/index.xhtml, aber sie haben nicht die Breite.
Joe
18

Es gibt zwei gute Optionen, die ich gesehen habe:

  1. Konvertieren Sie jede Postleitzahl in eine Dummy-Variable. Wenn Sie viele Daten haben, kann dies eine schnelle und einfache Lösung sein, aber Sie können keine Vorhersagen für neue Postleitzahlen treffen. Wenn Sie über die Anzahl der Funktionen besorgt sind, können Sie Ihrem Modell eine Regularisierung hinzufügen, um einige der Postleitzahlen aus dem Modell zu entfernen.
  2. Verwenden Sie den Breiten- und Längengrad des Mittelpunkts der Postleitzahl als Variablen. Dies funktioniert in baumbasierten Modellen sehr gut, da sie das Breiten- / Längengradraster in Regionen aufteilen können, die für Ihre Zielvariable relevant sind. Auf diese Weise können Sie auch Vorhersagen für neue Postleitzahlen treffen und benötigen nicht so viele Daten, um die richtigen Ergebnisse zu erzielen. Dies funktioniert jedoch nicht gut für lineare Modelle.

Persönlich mag ich wirklich baumbasierte Modelle (wie zufällige Wälder oder GBMs), daher wähle ich fast immer Option 2. Wenn Sie wirklich ausgefallen sein möchten, können Sie das Lat / Lon des Bevölkerungszentrums als Postleitzahl verwenden. eher als der Postleitzahlschwerpunkt. Aber das kann schwer zu bekommen sein.

Zach
quelle
Wird auf jeden Fall für den 2Vorschlag gehen.
andilabs
# 2 scheint auch mit einem GAM
Affine
4

Ich habe mich mit etwas Ähnlichem befasst, als ich einen Klassifikator trainierte, der die Muttersprache als Merkmal verwendete (wie misst man die Ähnlichkeit zwischen Englisch und Spanisch?). Es gibt viele Methoden, um die Ähnlichkeit zwischen nicht kategorialen Daten zu bestimmen .

Dies hängt von Ihren Daten ab. Wenn Sie jedoch feststellen, dass die geografische Entfernung von einer Postleitzahl nicht so wichtig ist, wie ob eine bestimmte Eingabe bestimmte Postleitzahlen enthält, können nicht kategoriale Methoden hilfreich sein.

Engineero
quelle
4

Wenn Sie die Entfernung zwischen Datensätzen berechnen, z. B. in Clustering oder K-NN, sind die Entfernungen zwischen Postleitzahlen in ihrer Rohform möglicherweise informativ. 02138 ist geografisch viel näher an 02139 als an 45809.

Peter Bruce
quelle
auch für
baummodelle
3

Sie können Ihre Postleitzahl in eine nominelle Variable (Zeichenfolge / Faktor) umwandeln. Soweit ich mich erinnere, kann die Postleitzahl jedoch auch andere Informationen wie Bundesland, Region usw. enthalten. Ich würde nur verstehen, wie die Postleitzahl Informationen codiert und diese in mehrere Funktionen decodiert.

Auf jeden Fall ist es keine gute Idee, Postleitzahl als numerische Variable zuzulassen, da einige Modelle möglicherweise die numerische Reihenfolge oder die Entfernungen als Lernziel betrachten.

rapaio
quelle
Danke für die Antwort! Aber auch wenn die Postleitzahl eine Zeichenfolge oder ein Faktor ist, bin ich dann nicht im Wesentlichen nur eine Dummy-Postleitzahl (dh, ich erstelle 30.000 binärisierte Funktionen)? Ich weiß, dass R dies unter der Haube tut, aber es muss explizit in scikit learn gemacht werden.
Captain_ahab
3

Ich würde eine Choropleth-Karte der Residuen Ihres Modells auf der Ebene der Postleitzahl erstellen.

Das Ergebnis wird als räumliche Restkarte bezeichnet und kann Ihnen bei der Auswahl einer neuen erklärenden Variablen helfen, die in Ihr Modell aufgenommen werden soll. Dieser Ansatz wird als explorative Geodatenanalyse (ESDA) bezeichnet.

Ein möglicher Workflow:

  1. Für jede Postleitzahl wird der durchschnittliche Restwert ermittelt
  2. Erstellen Sie eine Choroplethenkarte, um die geografische Verteilung der Residuen zu sehen
  3. Suchen Sie nach Mustern, die möglicherweise durch eine neue erklärende Variable erklärt werden. Wenn Sie beispielsweise alle Vorort-, Süd- oder Strand-Postleitzahlen mit hohen Residuen sehen, können Sie eine regionale Dummy-Variable hinzufügen, die durch die jeweilige Postleitzahlengruppierung definiert ist, oder wenn Sie hohe Residuen für Postleitzahlen mit hohem Einkommen sehen, können Sie eine Einkommensvariable hinzufügen.
b_dev
quelle
-2

Sie können die Postleitzahlen mit den oben genannten Techniken kennzeichnen, aber lassen Sie mich eine Alternative vorschlagen. Angenommen, wir haben binäre Klassenbezeichnungen. Und in Daten haben wir "n" Postleitzahlen. Nun nehmen wir die Wahrscheinlichkeit des Auftretens jedes Pincodes in Daten an, vorausgesetzt, eine Klassenbezeichnung (entweder 1 oder Null). Sagen wir also für eine Postleitzahl "j" ------ >>>> Wir erhalten eine Wahrscheinlichkeit P_j als: nein. Anzahl der Vorkommen von "j" / Gesamtanzahl der Vorkommen von "j", wenn die Klassenbezeichnung 1 oder 0 ist. Auf diese Weise können wir sie in eine sehr schöne proabilistische Interpretation umwandeln.

Aman Sawarn
quelle
5
Diese Antwort ist nicht sehr klar.
Michael R. Chernick