使用Spark MLlib进行基于Jave的欺诈检测
2.接下来,将必要μ(均值)和σ2(方差)的计较,由于它们对付得到新例子的概率至关重要。 代码如下所示: 3.如前所述,一旦我们行使高斯公式,具有均值和方差,就可以计较出概率值。 按照概率值,我们抉择它是一个非常照旧一个正常的例子。 将该值与某个阈值(ε)举办较量。假如它较低,那么我们将其标志为非常,假如更大,则将其标志为通例。 选择epsilon是至关重要的,由于具有小的代价会导致算法标志大量的卖弄诓骗。 另一方面,大的代价,我们又会错过诓骗。 以是行使准确的交错验证数据和召回选择最佳的epsilon。 4.此刻,我们筹备在测试数据上评估我们的算法(我们也对交错验证数据做了可选的评估)。 在执行算法之前,必要下载数据(由于GitHub的文件巨细限定而没有打包),解压缩,然后把allData.csv复制粘贴到文件夹data / allData.csv。 文件位置是可设置的,以及文件名称。 该算法可以通过设置文件config / algorithm.properties中的数据和各类选项举办测试,如下所示: 设置变动后,应用措施可以在Java IDE或Maven上运行: 按照呆板和设置,应用措施也许必要一些时刻(对我来说,这必要两分钟)完成。 另外,计较机也许会冻结,由于在某个时候,Spark将CPU占用率降至100%。 另外,应用措施行使大量的内存(2-3 GB)。 可以看到打印在节制台上的功效或通过查察文件夹out /; 会有一个天生的文件* .txt与输出。 该算法是基于随机性的,以是你可以将其设置为运行多次,而且每次执行祈望一个文件。 尝试和功效 从这次的尝试中,发明诓骗只合用于两种范例:TRANSFER和CASH_OUT。 在早年的文章中具体观测了TRANSFER。 我们取得了很高的比例:99.7%。 当仅为CASH_OUT范例运行而不跳过任何列/成果时,我们获得的功效很差: 我们只能找到约14%的这种诓骗举动。 早年,我们可以通过使特性看起来像高斯钟形曲线来改进许多,但不幸的是,这次并不是这样。 我们可以做的是看看成果,看看是否可以添加或跳过一些成果,由于成果cam=n引起紊乱和噪音,而不是甜头。查察数据源,我们有以下描写的诓骗,这可以辅佐: 当大量的资金变现时,也许是诓骗。 逐步地,我们开始删除不必要的成果,通过删除成果[1,2,3,7,8]或范例找到了很好的功效。 当兑现时,资金被占用的账户比目标地更重要,由于账户也许已经有钱了,并且看起来很正常,可是一个空的来历账户也许暗示诓骗举动。 当分开方针帐户名称,它也许有助于诓骗性帐户名称。 功效如下所示: 这是一个庞大的前进。我们可以或许通过将全部范例组合在一路,从14%进步到82.77%。 另外,它不会带来差异的跳过成果的更好功效(随意实行,由于并非全部这些都被试探)。 我只能通过跳过数目(2)获得一些功效,但这如故不令人满足,由于大量的非诓骗勾当被标志了(1,040,950)。 在这种环境下,为每种范例都运行算法也许会更好。 当一个也许的买卖营业完成时,我们会阻挡它的范例。 通过这种方法,可以更好地检测到诓骗举动,由于转账有99.7%的利率,现金流有87%。 可是,对付现金流,我们可以嗣魅这个比率并不令人满足,大概尚有其他的要领值得实行,但这必需起首被观测,并且凡是,直觉是错误的,还耗费了许多时刻。 因为隐私题目在金融应用中获取更大都据是坚苦的,以是甘愿在这里应用差异的算法。 当现金流的数据被绘制时,我们获得如下的视图: 该图表现题目在于大大都诓骗举动被包括在正常数据的中心,而且该算法全力检测它们。不外,我信托尚有其他要领可以殽杂行使乃至能添加更多的成果。 Java流与Spark (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |