如何在机器学习模型或推荐系统中表示地理或邮政编码?


24

我正在建立模型,我认为地理位置可能非常擅长预测目标变量。我有每个用户的邮政编码。不过,我并不完全确定将邮政编码作为模型中的预测器功能的最佳方式。尽管邮政编码是一个数字,但是无论数字升或降,它都没有任何意义。我可以对所有30,000个邮政编码进行二值化处理,然后将其包含为功能或新列(例如{user_1:{61822:1,62118:0,62444:0等}}}。但是,这似乎会增加很多模型的功能

对解决这种情况的最佳方法有何想法?


1
只是一个想法..但是,如果邮政编码在地理上分布,那么您可以在地图上在地理上表示邮政编码,并用其位置表示它们。这样,您还可以看到哪些邮政编码更接近。–
Manuel

Answers:


14

我最喜欢的邮政编码数据用途之一是根据邮政编码查找人口统计变量,否则在各个级别上可能无法使用...

例如,通过http://www.city-data.com/,您可以查询收入分配,年龄范围等信息,这可能会告诉您有关数据的一些信息。至少对于相对有限的数据量而言,这些连续变量通常比仅基于二值化邮政编码更有用。

另外,邮政编码是分层的……如果您采用前两位或三位数,并根据这些数字进行二值化处理,则您将拥有一定数量的区域信息,这比单独的邮政编码能为您提供更多的数据。

正如Zach所说,使用的纬度和经度也可能有用,尤其是在基于树的模型中。对于正则化线性模型,您可以使用四叉树,将美国分为四个地理组,对它们进行二值化,然后将这些区域中的每一个划分为四组,并将其作为附加的二元变量...因此对于n个总叶区域,您最终得到[(4n-1)/ 3-1-]总变量(n表示最小区域,n / 4表示下一级别,依此类推)。当然,这是多重共线性的,这就是为什么需要正则化的原因。


2
您可以在Ben Fry的zipdecode上很好地了解层次结构。
Dimitriy V. Masterov 2014年

Joe您是否可以从此站点免费获取zip级别数据(收入等)?我看不到该怎么做。
B_Miner

像这样的网址:city-data.com/zips/02108.html 它的格式不正确像CSV,所以你必须使用正则表达式/刮等美国人口普查有一些很好的fomatted数据census.gov/epcd/www/zipstats .htmlfactfinder2.census.gov/faces/nav/jsf/pages/index.xhtml,但是它们没有广度。
2014年

18

我见过2个不错的选择:

  1. 将每个邮政编码转换为一个虚拟变量。如果您有大量数据,这可能是一种快速简便的解决方案,但是您将无法对新的邮政编码进行预测。如果您担心功能的数量,可以向模型添加一些正则化功能以将一些邮政编码从模型中删除。
  2. 使用邮政编码中心点的纬度和经度作为变量。这在基于树的模型中非常有效,因为它们可以将纬度/经度网格划分为与目标变量相关的区域。这也将使您能够预测新的邮政编码,并且不需要太多的数据即可正确处理。但是,这不适用于线性模型。

就个人而言,我真的很喜欢基于树的模型(例如随机森林或GBM),因此我几乎总是选择选项2。如果真的很喜欢,可以使用人口中心的纬度/经度作为邮政编码,而不是邮政编码质心。但这很难实现。


肯定会去参加2提案的。
andilabs

#2似乎也适用于GAM
Affine

4

在训练使用母语作为特征的分类器时,我处理了类似的问题(如何测量英语和西班牙语之间的相似性?)有很多方法可用于确定非分类数据之间的相似性

这取决于您的数据,但是如果您发现与邮政编码的地理距离并不像给定输入中是否包含特定邮政编码那样重要,则非分类方法可能会有所帮助。


4

如果要计算记录之间的距离(如在聚类或K-NN中),则原始格式的邮政编码之间的距离可能会提供参考。从地理位置上来说,02138比45139更接近02139。


也适用于像随机森林这样的树模型-在某些方面类似于K-NN
captain_ahab

3

您可以将邮政编码转换为标称变量(字符串/因子)。但是,据我所记得,邮政编码可能包含县,地区等其他信息。我要做的是了解邮政编码如何编码信息并将其解码为多个功能。

无论如何,将邮政编码作为数字变量并不是一个好主意,因为某些模型可能会将数字顺序或距离视为要学习的东西。


感谢您的回答!但是,即使邮政编码是一个字符串或因子,我实际上不是只是在伪编码邮政编码(即创建30,000个二值化特征)吗?我知道R在后台执行此操作,但是必须在scikit learning中明确完成。
captain_ahab 2014年

3

我将在邮政编码级别为模型的残差创建一个Choropleth映射。

结果称为空间残差图,它可以帮助您选择一个新的解释变量以包括在模型中。这种方法称为探索性空间数据分析(ESDA)。

一种潜在的工作流程:

  1. 为每个邮政编码获取平均残差
  2. 制作一个Choropleth图以查看残差的地理分布
  3. 寻找可能由新的解释变量解释的模式。例如,如果您看到所有带有高残差的郊区,南部或海滩邮政编码,则可以添加由相关邮政编码分组定义的区域虚拟变量,或者如果看到高收入邮政编码的残差很高,则可以添加收入变量。

-2

您可以使用上述技术来使Zipcode功能化,但让我建议一种替代方法。假设我们有二进制类标签。在数据中,我们有“ n”个邮政编码。现在,假设某些类标签(1或0),我们考虑数据中每个pincode出现的可能性。因此,让我们说一个邮政编码“ j” ------ >>>>我们得到的概率P_j为:否。类标签为1或0时“ j”的出现次数/“ j”的出现总数。通过这种方式,我们可以将其转换为非常好的概率解释。


5
这个答案不是很清楚。
Michael R. Chernick
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.