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

机器算法验证 机器学习 特征工程 多类
2022-01-15 20:31:24

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

关于处理这种情况的最佳方法的任何想法?

4个回答

我见过两个不错的选择:

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

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

我最喜欢的邮政编码数据的用途之一是根据邮政编码查找人口统计变量,否则这些变量在个人层面可能不可用......

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

此外,邮政编码是分层的......如果您采用前两位或三位数字,并基于这些数字进行二值化,您将拥有一定数量的区域信息,这比单个邮政编码获得更多的数据。

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

如果您正在计算记录之间的距离,如在聚类或 K-NN 中,原始形式的邮政编码之间的距离可能会提供信息。02138 在地理上比 45809 更接近 02139。

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

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