我得到了以下有趣的任务:
给定具有16位数字的100万个数字(例如,信用卡号码)的列表,其中包括由计算机系统生成的99万个纯随机数,以及由欺诈者手动创建的10000个。这些数字被标记为真实或欺诈。构建一个预测非随机数的算法。
到目前为止,我的方法有点蛮力:查看非随机数字以找到模式(例如重复数字: 22222或01234)。
我想知道是否有现成的算法或工具来完成这类任务。我想这个任务在欺诈分析社区中应该是相当普遍的。
谢谢。
发布于 2012-12-26 04:23:44
首先,如果你知道他们是信用卡号码,使用Luhn的算法,这是一个有效的信用卡号码的快速校验和算法。
但是,如果它们仅仅是16位整数,有几种方法可以使用。很难说单个数字是否来自随机来源(因为数字1111111111111111和随机数字生成器中的任何其他数字一样有可能)。至于重复的数字和模式,这让人想起Kolmogorov复杂性的概念(参见下面的链接)。你可以尝试用这种暴力方法来寻找模式,但我觉得它是非常不准确的,因为人类实际上可能倾向于避免在这些数字中放入数字和序列!
相反,我建议关注人们生成数字的方式。您可以将人工输入视为一个非常糟糕的随机数生成器。因此,如果您没有其他数据集,我建议您自己列出随机输入的数字。然后,您可以使用机器学习来生成分类器算法,以区分纯随机数(那些没有您的机器学习算法已识别的“类人”属性的随机数)。就统计分类器的指标而言,Kolmogorov复杂度可以是一个,也许是另一个指标的数字频率(请参阅Wikipedia上的Benford定律),以及另一个指标的重复数字的数量(人类可能会尽量避免重复数字,以使其看起来不是随机的,所以让您的分类器来做这项工作!)
根据我的个人经验,像这样的棘手问题是机器学习算法和统计分类器的教科书案例。
希望这能有所帮助!
链接:
https://stackoverflow.com/questions/14033545
复制相似问题