加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

使用Spark MLlib进行基于Jave的欺诈检测

发布时间:2018-05-16 22:51:45 所属栏目:教程 来源:李佳惠
导读:【资讯】了解如何使用Java和Spark MLlib开发一种算法,该算法能够根据700万条记录的数据集检测欺诈行为。 在这篇文章中,我们将使用Spark MLlib开发Java中的算法。完整的工作代码可以从GitHub下载。可以在不使用深入的Java知识(使用配置文件)的情况下,

  2.接下来,将需要μ(均值)和σ2(方差)的计算,因为它们对于获得新例子的概率至关重要。 代码如下所示:  使用Java和Spark MLlib开发一种算法检测欺诈行为,可行吗?

  3.如前所述,一旦我们使用高斯公式,具有均值和方差,就可以计算出概率值。 根据概率值,我们决定它是一个异常还是一个正常的例子。 将该值与某个阈值(ε)进行比较。如果它较低,那么我们将其标记为异常,如果更大,则将其标记为常规。 选择epsilon是至关重要的,因为具有小的价值会导致算法标记大量的虚假欺诈。 另一方面,大的价值,我们又会错过欺诈。 所以使用精确的交叉验证数据和召回选择最佳的epsilon。

使用Java和Spark MLlib开发一种算法检测欺诈行为,可行吗?

  4.现在,我们准备在测试数据上评估我们的算法(我们也对交叉验证数据做了可选的评估)。  使用Java和Spark MLlib开发一种算法检测欺诈行为,可行吗?

  在执行算法之前,需要下载数据(因为GitHub的文件大小限制而没有打包),解压缩,然后把allData.csv复制粘贴到文件夹data / allData.csv。 文件位置是可配置的,以及文件名称。 该算法可以通过配置文件config / algorithm.properties中的数据和各种选项进行测试,如下所示: 

使用Spark MLlib进行基于Jave的欺诈检测

  配置更改后,应用程序可以在Java IDE或Maven上运行:

使用Java和Spark MLlib开发一种算法检测欺诈行为,可行吗?

  根据机器和配置,应用程序可能需要一些时间(对我来说,这需要两分钟)完成。 此外,计算机可能会冻结,因为在某个时刻,Spark将CPU占用率降至100%。 此外,应用程序使用大量的内存(2-3 GB)。 可以看到打印在控制台上的结果或通过查看文件夹out /; 会有一个生成的文件* .txt与输出。 该算法是基于随机性的,所以你可以将其配置为运行多次,并且每次执行期望一个文件。

  实验和结果

  从这次的实验中,发现欺诈只适用于两种类型:TRANSFER和CASH_OUT。 在以前的文章中详细调查了TRANSFER。 我们取得了很高的比例:99.7%。

  当仅为CASH_OUT类型运行而不跳过任何列/功能时,我们得到的结果很差:

使用Java和Spark MLlib开发一种算法检测欺诈行为,可行吗?

  我们只能找到约14%的这种欺诈行为。 以前,我们可以通过使特征看起来像高斯钟形曲线来改善很多,但不幸的是,这次并不是这样。

  我们可以做的是看看功能,看看是否可以添加或跳过一些功能,因为功能cam=n引起混乱和噪音,而不是好处。查看数据源,我们有以下描述的欺诈,这可以帮助:

使用Java和Spark MLlib开发一种算法检测欺诈行为,可行吗?

  当大量的资金变现时,可能是欺诈。 慢慢地,我们开始删除不需要的功能,通过删除功能[1,2,3,7,8]或类型找到了很好的结果。 当兑现时,资金被占用的账户比目的地更重要,因为账户可能已经有钱了,而且看起来很正常,但是一个空的来源账户可能表示欺诈行为。 当离开目标帐户名称,它可能有助于欺诈性帐户名称。 结果如下所示:

使用Spark MLlib进行基于Jave的欺诈检测

  这是一个巨大的进步。我们能够通过将所有类型组合在一起,从14%提高到82.77%。 此外,它不会带来不同的跳过功能的更好结果(随意尝试,因为并非所有这些都被探索)。 我只能通过跳过数量(2)得到一些结果,但这仍然不令人满意,因为大量的非欺诈活动被标记了(1,040,950)。

使用Spark MLlib进行基于Jave的欺诈检测

  在这种情况下,为每种类型都运行算法可能会更好。 当一个可能的交易完成时,我们会反对它的类型。 通过这种方式,可以更好地检测到欺诈行为,因为转账有99.7%的利率,现金流有87%。 但是,对于现金流,我们可以说这个比率并不令人满意,也许还有其他的方法值得尝试,但这必须首先被调查,而且通常,直觉是错误的,还花费了很多时间。 由于隐私问题在金融应用中获取更多数据是困难的,所以宁愿在这里应用不同的算法。 当现金流的数据被绘制时,我们得到如下的视图:

使用Spark MLlib进行基于Jave的欺诈检测

  该图显示问题在于大多数欺诈行为被包含在正常数据的中心,并且该算法努力检测它们。不过,我相信还有其他方法可以混合使用甚至能添加更多的功能。

  Java流与Spark

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读