纬度和经度在欺诈检测分类机器学习中的转换

我正在尝试构建一个用于账户注册时欺诈检测的机器学习分类模型。我手头的数据包括:姓名、电子邮件地址、坐标(注册时IP地址的纬度和经度)以及标签(欺诈与非欺诈)。这是我数据集的简要摘要:

>>> dataset.summaryIndex(['name', 'email','latitude','longitude','label'],dtype='object')>>> dataset.shape(93207, 4)

到目前为止,我在处理训练模型时的坐标变量上遇到了困难。StackExchange上的一些用户建议将纬度和经度转换为X、Y和Z坐标,使用一些正弦和余弦函数的组合。(例如 https://datascience.stackexchange.com/questions/13567/ways-to-deal-with-longitude-latitude-feature)但我不知道在我的分类用例中是否真的需要这样做?我曾考虑将纬度和经度合并为每个记录的一个变量。然而,一些地区的经度值为负值。另外,一些欺诈者可能位于高纬度和经度的地区,而其他欺诈者可能位于低纬度和经度的地区。因此,将纬度和经度合并成一个变量可能不会帮助训练模型?

我也可以将纬度和经度转换为城市名称。但如果我这样做,一个城市的拼写可能与另一个非常遥远的城市相似,这同样可能不会帮助训练模型。有什么建议吗?


回答:

处理这个问题的方法有很多。你分享的链接提到将纬度和经度分开处理并对其进行特征缩放。这种方法很好,因为假设如果它们在球面坐标系中彼此靠近,那么在现实生活中它们实际上也会彼此靠近。

但你的问题有所不同。我猜你需要知道如何在你的模型中处理纬度和经度。你可以按照以下方式进行处理。

1. 选择合适的模型

并不是所有的机器学习技术都要求你对特征进行缩放或归一化。通常进行尺度归一化是为了让模型认为所有特征都是平等的。这是因为一些机器学习模型基于距离度量,如KNN、逻辑回归。所以如果你不进行特征缩放,可能会搞砸学习。如果你使用一些基于树的模型,如决策树、随机森林、XGBoost或GBM,我认为你可以直接使用特征而不进行缩放。因此,你可以直接在特征集中使用纬度和经度。

2. 执行聚类以创建虚拟变量

在这种情况下,你通常可以使用一些聚类技术(如KMeans)对纬度和经度进行聚类,在你的数据集中创建一个名为cluster的特征,并给其赋值聚类编号距离聚类中心的距离,然后删除纬度和经度列。你还可以为每个聚类创建一个单独的特征,并获取到每个聚类中心的距离,并将这些距离存储在这些变量中。

3. 反向地理编码

如你所提到的,你也可以进行反向地理编码以获取城市和国家名称。但在你的情况下,这种方法可能不是欺诈的强预测因子。但仅供参考,

from pygeocoder import Geocoderlocation = Geocoder.reverse_geocode(12.9716,77.5946)print("City:",location.city)print("Country:",location.country)

4. 我的推荐

进行一些层次聚类而不是KMeans,因为KMeans在特征空间是线性性质时最大化方差,但如果是非线性性质,则层次聚类如PAM、CLARA和DBSCAN是最佳选择。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注