Как изобразить географию или почтовый индекс в модели машинного обучения или в системе рекомендаций?


24

Я строю модель, и я думаю, что географическое местоположение, вероятно, будет очень хорошим для предсказания моей целевой переменной. У меня есть почтовый индекс каждого из моих пользователей. Я не совсем уверен в том, как лучше всего включить в мою модель почтовый индекс в качестве предиктора. Хотя почтовый индекс является числом, это ничего не значит, если число увеличивается или уменьшается. Я мог бы преобразовать в двоичную форму все 30 000 почтовых индексов, а затем включить их в виде функций или новых столбцов (например, {user_1: {61822: 1, 62118: 0, 62444: 0 и т. Д.}}}. Однако, похоже, что это добавит тонну особенностей моей модели.

Есть мысли о том, как лучше справиться с этой ситуацией?


1
Просто мысль ... но, если почтовые индексы распределены географически, вы можете географически представлять почтовые индексы на карте и представлять их с их местоположением. С этим вы также можете увидеть, какие почтовые индексы ближе ..
Мануэль

Ответы:


14

Одно из моих любимых применений данных почтового индекса - поиск демографических переменных на основе почтового индекса, которые в противном случае могут быть недоступны на индивидуальном уровне ...

Например, с http://www.city-data.com/ вы можете посмотреть распределение доходов, возрастные диапазоны и т. Д., Которые могут рассказать вам кое-что о ваших данных. Эти непрерывные переменные часто гораздо полезнее, чем просто основанные на бинаризованных почтовых индексах, по крайней мере, для относительно ограниченных объемов данных.

Кроме того, почтовые индексы являются иерархическими ... если вы берете первые две или три цифры и бинаризуете их, у вас есть некоторое количество региональной информации, которая дает вам больше данных, чем отдельные почтовые индексы.

Как сказал Зак, используемые широта и долгота также могут быть полезны, особенно в древовидной модели. Для регуляризованной линейной модели вы можете использовать квадродерево, разделив Соединенные Штаты на четыре географические группы, преобразовав их в двоичную форму, затем каждую из этих областей в четыре группы и включив их в качестве дополнительных двоичных переменных ... так что для n полных конечных областей вы в итоге получим [(4n - 1) / 3 - 1] суммарных переменных (n для самых маленьких регионов, n / 4 для следующего уровня и т. д.). Конечно, это мультиколлинеарно, поэтому для этого необходима регуляризация.


2
Вы можете получить хорошее представление об иерархии в почтовом индексе Бена Фрая .
Дмитрий Васильевич Мастеров

Джо, вы можете свободно получать данные уровня zip (доход и т. Д.) С этого сайта? Я не смог увидеть, как это сделать.
B_Miner

URL-адреса, подобные этому: city-data.com/zips/02108.html Он не очень хорошо отформатирован, как CSV, поэтому вы должны использовать регулярные выражения / расчистку и т. Д. В переписи США есть некоторые хорошо отформатированные данные census.gov/epcd/www/zipstats .html и factfinder2.census.gov/faces/nav/jsf/pages/index.xhtml, но у них нет широты.
Джо

18

Есть 2 хороших варианта, которые я видел:

  1. Преобразуйте каждый почтовый индекс в фиктивную переменную. Если у вас много данных, это может быть быстрым и простым решением, но вы не сможете делать прогнозы для новых почтовых индексов. Если вас беспокоит количество функций, вы можете добавить в модель некоторую регуляризацию, чтобы исключить некоторые почтовые индексы из модели.
  2. Используйте широту и долготу центральной точки почтового индекса в качестве переменных. Это работает очень хорошо в древовидных моделях, так как они могут разрезать сетку широты / долготы на области, которые имеют отношение к вашей целевой переменной. Это также позволит вам делать прогнозы для новых почтовых индексов, и для этого не требуется много данных. Тем не менее, это не будет хорошо работать для линейных моделей.

Лично мне действительно нравятся древовидные модели (такие как случайный лес или GBM), поэтому я почти всегда выбираю вариант 2. Если вы хотите по-настоящему вычурно, вы можете использовать широту / долготу центра населения для почтового индекса, а не почтовый индекс. Но это может быть трудно достать.


Определенно пойдет за 2предложение.
Andilabs

# 2 также работает с GAM
Affine

4

Я имел дело с чем-то похожим при обучении классификатора, который использовал родной язык в качестве функции (как вы измеряете сходство между английским и испанским языками?). Существует множество методов определения сходства среди некатегоричных данных .

Это зависит от ваших данных, но если вы обнаружите, что географическое расстояние от почтового индекса не так важно, как то, содержит ли конкретный вход определенные почтовые индексы, тогда могут помочь некатегоричные методы.


4

Если вы вычисляете расстояние между записями, как в кластеризации или K-NN, расстояния между почтовыми индексами в их необработанном виде могут быть информативными. Географически 02138 намного ближе к 02139, чем к 45809.


также для моделей деревьев, таких как случайный лес - которые в некоторых отношениях похожи на K-NN
captain_ahab

3

Вы можете преобразовать свой почтовый индекс в номинальную переменную (строка / фактор). Однако, насколько я помню, почтовый индекс может содержать другую информацию, такую ​​как округ, регион и т. Д. Я хотел бы понять, как почтовый индекс кодирует информацию, и декодировать ее в несколько функций.

В любом случае, использование почтового индекса в качестве числовой переменной не является хорошей идеей, поскольку некоторые модели могут рассматривать числовой порядок или расстояния как нечто, чему можно научиться.


Спасибо за ответ! Однако, даже если почтовый индекс является строкой или фактором, разве я не являюсь просто фиктивным почтовым индексом кодирования (т. Е. Создаю 30 000 бинаризованных функций)? Я знаю, что R делает это под капотом, но это должно быть явно сделано в scikit learn.
captain_ahab

3

Я хотел бы сделать карту остатков вашей модели на уровне почтового индекса.

Результат называется пространственной остаточной картой, и он может помочь вам выбрать новую объясняющую переменную для включения в вашу модель. Этот подход называется исследовательским пространственным анализом данных (ESDA).

Один потенциальный рабочий процесс:

  1. для каждого почтового индекса получают средний остаток
  2. составить картографическую карту, чтобы увидеть географическое распределение остатков
  3. ищите шаблоны, которые могут быть объяснены новой объясняющей переменной. Например, если вы видите все почтовые индексы пригородных или южных районов или пляжей с высокими остатками, то вы можете добавить фиктивную переменную региона, определенную соответствующей группой почтовых индексов, или, если вы видите высокие остатки для почтовых индексов с высоким доходом, то вы можете добавить переменную дохода.

-2

Вы можете настроить Zip-коды, используя описанные выше методы, но позвольте мне предложить альтернативу. Предположим, у нас есть метки двоичного класса. И в данных у нас есть "n" почтовые индексы. Теперь мы берем вероятность вхождения каждого пин-кода в данные при условии некоторой метки класса (либо 1, либо ноль). Итак, допустим, для почтового индекса «j» ------ >>>> Мы получаем вероятность P_j как: нет. вхождений "j" / Общее количество вхождений "j", когда метка класса равна 1 или 0. Таким образом, мы можем преобразовать его в очень хорошую пробиалистическую интерпретацию.


5
Этот ответ не очень понятен.
Майкл Р. Черник
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.