寻找银行交易记录中的样本异常检测(在TSQL或R中)

时间:2016-01-05 15:08:12

标签: sql-server r

我想检测银行交易记录和GL条目中的意外交易。 对于供应商而言,金额通常为每月2000美元或5000美元,但突然发生了10 000美元或200美元的交易,这是出乎意料的。 我将有多个列参与此异常检测:客户,供应商,帐号,交易描述,用户输入交易(GL方面)等...

我的数据在SQL Server中,所以我正在寻找在TSQL中工作的示例代码。否则我可以依赖R脚本。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

可能不完全是您正在寻找的内容,但使用Azure Machine Learning Studio,您可以使用One-Class分类器创建一个根据阈值检测异常的实验。您可以轻松地从SQL Server中提供数据。

这可能是一种矫枉过正,但您可以使用免费版本,这超出了您的需要。

答案 1 :(得分:0)

一个选项是使用SQL窗口函数来获取交易金额的标准差,并查找超过1个标准差的条目。

CREATE TABLE #tmp(
    Customer nvarchar(255),
    Supplier nvarchar(255),
    AccountNumber nvarchar(255),
    STD decimal(20, 2),
    Amount decimal(20, 2))


  INSERT INTO #tmp (Customer, Supplier, AccountNumber, Amount, STD)
  SELECT Customer, Supplier, AccountNumber, Amount,
    ABS(STDEV(Amount) OVER (PARTITION BY Customer, Supplier, AccountNumber))
  FROM SourceTable

  SELECT *
  FROM #tmp 
  WHERE STD >= 1