3

我得到了以下有趣的任务:

给定一个包含 100 万个 16 位数字(例如信用卡号)的列表,其中包括 990,000 个由计算机系统生成的纯随机数字,以及 10,000 个由欺诈者手动创建的数字。这些数字被标记为真实或欺诈。构建一个算法来预测非随机数。

到目前为止,我的方法有点暴力:查看非随机数字以找到模式(例如重复数字:22222 或 01234)。

我想知道这种任务是否有现成的算法或工具。我想这个任务在欺诈分析社区中应该很常见。

谢谢。

4

1 回答 1

4

首先,如果您知道它们是信用卡号,请使用 Luhn 算法,这是一种用于有效信用卡号的快速校验和算法。

但是,如果它们只是 16 位整数,您可以使用几种方法。很难判断单个数字是否来自随机源(因为数字 1111111111111111 与随机数生成器中的任何其他数字一样可能)。至于您重复的数字和模式,这很容易让人联想到 Kolmogorov 复杂性的概念(请参见下面的链接)。您可以尝试在这种蛮力方法中寻找模式,但我觉得它会非常不准确,因为人类实际上可能倾向于避免将数字和序列放入这些数字中!

相反,我建议关注人们产生数字的方式。您可以将人工输入视为非常糟糕的随机数生成器。因此,如果您没有其他数据集,我建议您自己制作一个随机人类输入数字的列表。然后,您可以使用机器学习生成分类器算法来区分纯随机数(那些没有您的机器学习算法已识别的“类人”属性)。就统计分类器的指标而言,Kolmogorov 复杂度可能是一个,可能是另一个指标的数字频率(参见维基百科上的 Benford 定律),以及另一个指标的重复数字的数量(人类可能会尝试避免重复数字看起来不随机的,所以让你的分类器来做吧!)

根据我的个人经验,像这样的棘手问题是机器学习算法和统计分类器的教科书案例。

希望这可以帮助!

链接:

Kolmogorov 复杂度 复杂
度计算器

于 2012-12-25T20:23:43.670 回答