我得到了以下有趣的任务:
给出一个包含16位数字(例如信用卡号码)的100万个数字列表,其中包括由计算机系统生成的990,000个纯随机数,以及由欺诈者手动创建的10,000个数字。这些数字被标记为真实或欺诈。构建一个算法来预测非随机数。
到目前为止,我的方法有点蛮力:查看非随机数来查找模式(例如重复数字:22222或01234)。
我想知道是否有针对此类任务的现成算法或工具。我想这个任务应该在欺诈分析社区中很常见。
感谢。
答案 0 :(得分:4)
首先,如果你知道它们是信用卡号码,请使用Luhn算法,这是一种有效信用卡号码的快速校验和算法。
但是,如果它们只是16位整数,则可以使用几种方法。很难判断一个单独的数字是来自随机数源(因为数字1111111111111111与随机数生成器中的任何其他数字一样可能)。至于你重复的数字和模式,这很容易让人联想到Kolmogorov复杂性的概念(见下面的链接)。您可以尝试在这种暴力方法中寻找模式,但我觉得它会非常不准确,因为人类可能实际上倾向于避免在这些数字中放置数字和序列!
相反,我建议关注人们产生数字的方式。您可以将人类输入视为非常差的随机数生成器。因此,如果您没有其他数据集,我建议您自己制作随机输入数字的列表。然后,您可以使用机器学习生成分类器算法,以区分纯随机数(没有机器学习算法已识别的“类人”属性)。就统计分类器的度量而言,Kolmogorov复杂度可能是一个,也许是另一个度量的数字频率(参见维基百科上的Benford定律),以及另一个的重复数字的数量(人类可能会尝试避免重复数字看起来非随机,所以让你的分类器完成工作!)
从我个人的经验来看,像这样的棘手问题是机器学习算法和统计分类器的教科书案例。
希望这有帮助!
链接: