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

时间:2018-04-10 00:01:04

标签: python pandas machine-learning classification coordinates

我正在尝试建立一个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个变量。但是,有些地区在经度上有负值。此外,一些欺诈者可能位于高纬度和经度的区域,而其他欺诈者可能位于低纬度和经度的区域。那么将纬度和经度组合成1个变量也无助于训练模型?

我还可以将纬度和经度转换为城市名称。但是,如果我这样做,一个城市会有类似的拼写到另一个很远的城市,这也可能无助于训练模型。有什么建议吗?

1 个答案:

答案 0 :(得分:4)

有多种方法可以解决此问题。您共享的链接说明了单独处理lat-long并对其执行特征缩放的事实。这种方法是好的,因为假设如果在球坐标系中它们彼此更接近,它们在现实生活中实际上彼此更接近。

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

1。选择合适的型号

并非所有机器学习技术都要求您缩放或规范化功能。通常进行比例归一化以使模型相信所有特征都相等。这是必需的,因为一些机器学习模型基于距离度量,如KNN,Logistic Regressions。因此,如果您不执行功能扩展,可能会搞砸学习。如果您正在使用某些基于树的模型,如DT或随机森林或XGBoost或GBM,我认为即使没有缩放,您也可以使用这些功能。因此,您可以直接在功能集中使用lat-long。

2。执行群集以创建虚拟变量

大多数情况下,在这种情况下,您可以使用某些聚类技术(如KMeans)执行lat longs的聚类,在数据集中创建一个名为cluster的功能,并将其值聚类数距群集中心的距离,然后删除lat-long列。您还可以为每个群集创建单独的功能,并从每个群集中心获取距离,并将该距离存储到这些变量中。

3。反向地理编码

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

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

4。我的推荐

执行一些分层聚类而不是KMeans,因为如果特征空间本质上是线性的,但是如果它是非线性的,则KMeans沿着最大化方差工作,那么最好使用像PAM,CLARA和DBSCAN这样的分层聚类。 / p>