代码之家  ›  专栏  ›  技术社区  ›  Stanleyrr

欺诈检测分类ML的经纬度转换

  •  6
  • Stanleyrr  · 技术社区  · 7 年前

    我正在尝试建立一个ML分类模型,用于账户注册时的欺诈检测。我手头的数据有:姓名、电子邮件地址、坐标(注册时IP地址的经纬度)和标签(欺诈与非欺诈)。以下是我的数据集的简短摘要:

    >>> dataset.summary
    Index(['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 回复  |  直到 7 年前
        1
  •  7
  •   Mayukh Sarkar    7 年前

    有多种方法可以处理此问题。您共享的链接讨论了这样一个事实,即单独处理lat long并对其执行功能缩放。这种方法很好,因为假设在球坐标中,它们彼此更接近,那么在现实生活中它们实际上会更接近。

    但你的问题不同。我想你需要知道如何在你的模型中处理lat-long。您可以通过以下方式继续。

    1、选择合适的型号

    并非所有的机器学习技术都要求您缩放或规范化特征。尺度归一化通常是为了使模型相信所有特征都是相等的。这是必需的,因为一些机器学习模型基于距离度量,如KNN、逻辑回归。因此,如果不执行功能的缩放,可能会导致学习失败。如果您使用一些基于树的模型,如DTs或Random Forests或XGBoost或GBMs,我认为您甚至可以在不进行缩放的情况下使用这些功能。因此,您可以在功能集中直接使用lat long。

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

    大多数情况下,您可以使用一些聚类技术(如KMeans)对lat-long进行聚类,创建一个名为 cluster 并给出其值 群集编号 距集群中心的距离 然后拆下横向长柱。还可以为每个簇创建单独的特征,并计算到每个簇中心的距离,然后将该距离存储到这些变量中。

    3、反向地理编码

    正如您所提到的,您还可以执行反向地理编码来获取城市和国家名称。但在您的情况下,这种方法可能不是欺诈的有力预测工具。但仅供参考,

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

    4、我的建议

    如果特征空间本质上是线性的,但如果是非线性的,那么最好使用PAM、CLARA和DBSCAN等层次聚类,而不是KMeans,因为KMeans沿着最大方差进行聚类。