信用卡欺诈检测 - 基于提取金额的异常检测?

数据挖掘 机器学习 算法
2022-01-28 17:33:57

我试图弄清楚客户希望在 ATM 上提取的金额如何告诉我们交易是否欺诈。当然还有其他属性,但现在我想听听您对客户想要提取的金额。

数据可能是这种形式:

让我们假设一位客户连续十笔交易提取了以下金额:

100.33, 384 , 458, 77.90, 456, 213.55, 500 , 500, 300, 304.

问题:

  1. 我们如何使用这些数据来判断在该帐户上进行的下一次交易是否具有欺诈性?

  2. 是否有可用于此分类的特定算法?

我在想什么:

我正在考虑计算平均金额,例如最近十笔交易,并检查下一笔交易金额与平均金额的差距。太大的偏差将表明异常。但这听起来并不多,不是吗?

4个回答

我正在考虑计算平均金额,例如最近十笔交易,并检查下一笔交易金额与平均金额的差距。太大的偏差将表明异常。但这听起来并不多,不是吗?

一种典型的异常值检测方法。这在大多数情况下都有效。但是,由于问题陈述涉及信用卡欺诈检测,因此检测技术/算法/实现应该更加稳健。

您可能想查看这种异常值检测的Mahalanobis 距离度量。

谈到欺诈检测的算法,我会指出行业中使用的标准(因为我没有这方面的经验,但觉得这些资源对你有用)。

检查对这个问题的回答。它包含欺诈检测领域中使用的流行方法和算法。其中最流行的是遗传算法。

有人从 ATM 请求多少的基本模型是什么?它似乎不像高斯分布那样简单,将新数量与平均值进行比较是明智的。考虑一个总是拿出40美元或 400美元的人。理想情况下,我们希望构建用户正常交易的分布,并注意新数据点是否看起来不像是从该分布中采样的。

idclark 的建议是查看距该用户最近的n个数据点并计算与它们之间的距离,这是对此类测试的一种良好且快速的实现。

另一种可能性是尝试找到相似的用户,然后跨用户聚合数据。如果我每个用户只有 10 次提款,我将无法自信地拒绝任何新的提款,但如果我有 7 个用户集群,每个集群有 1000 次提款,我可以注意到一个用户在特定集群中偏离整体集群分布。(这也有助于您利用有关先前哪些交易是欺诈性的知识。)

我正在考虑计算平均金额,例如最近十笔交易,并检查下一笔交易金额与平均金额的差距。

这听起来像是一个好的开始。我会研究局部异常值概率。对于给定的数据点,您可以计算与最近邻居的距离,n并确定所考虑的数据点是否是异常值。

可以在此处找到基本概述 我还将交易的来源、目的地、数量和频率视为特征。

我实际上并没有回答你的问题,但它是一个关于如何改进它的想法。在我看来,我不相信您将能够仅使用这些数据构建分类模型。如果你这样做,它将没有足够高的准确性。在你的位置上,我会开始寻找更多的数据来用作特征。

这里有一些例子:

  1. ATM的取款代码。人们在日常生活中大部分时间都使用类似的 ATM。如果您知道他们以前的 ATM 的经纬度,您可以检查其中一个是否距离较远,并将其与其他功能相结合,您将提高准确性。
  2. 每次取款在 ATM 上花费的秒数。人们在取款时倾向于遵循特定的模式。如果他们之前的所有数据在花费时间上都相似,然后您在数据点上看到更低或更高的时间,您将能够提高模型的准确性。
  3. 标记数据。在这样的模型中,使用监督算法而不是无监督算法要好得多。因此,我会寻找用于欺诈用途的标记数据。这也可以让您计算模型的实际精度。
  4. 两次取款之间的时间。正如我之前所说,人们倾向于遵循模式。这方面的“异常”以及比预期更快的退出也会提高您的准确性。

就算法而言,我并不热衷于选择一种,因为它很流行。如果你已经完成了所有的数据处理和特征选择,你就完成了 90% 的工作,你将选择的算法是 2-3 行代码(如果你使用的是 Python 之类的语言)。我通常做的是检查所有可能的算法并评估它们的准确性。然后我要么使用它们的组合,要么使用精度最高的组合。