文章摘要
这篇文章分享了作者使用SQL检测交易欺诈的六种模式,重点介绍了第一种"速度模式"——通过统计短时间内高频交易来识别异常行为。作者强调SQL查询在欺诈检测中的实用性,适用于各类交易场景,并提供了示例查询代码。
文章总结
六种用于识别交易欺诈的SQL模式
作者背景
作者是一位程序完整性团队的数据分析师,主要处理政府资助的福利项目数据。本文使用通用交易表和虚构场景作为示例,所有观点均为个人观点。
核心观点
交易数据中的欺诈检测主要依靠SQL查询,而非机器学习或图数据库等技术。通过正确的表连接和查询模式,可以在各种交易数据(信用卡、医疗索赔、电子商务等)中发现异常。
六种欺诈检测模式
1. 交易频率异常
检测短时间内高频交易行为: - 基本查询统计每持卡人每小时交易次数 - 滑动窗口查询检测5分钟内交易次数≥5次 - 需调整时间窗口和阈值(1分钟/5分钟/1小时版本并行运行) - 注意自动售货机运营商等合法高频交易场景
2. 不可能的地理位置
检测短时间内出现在相距过远的两地交易: - 使用haversine公式计算两地距离 - 设置600mph阈值(超过商业航班速度) - 衍生模式:同州不同城市5分钟内交易、1小时内多邮编交易、10分钟内跨国交易
3. 可疑金额特征
特定金额模式与欺诈高度相关: - 刚好低于阈值金额(如$99.99、$499.99) - 精确整数金额($1.00、$5.00等) - 正常消费金额通常带有零头
4. 可疑商户特征
检测被侧录设备入侵的商户: - 静态阈值法:7天内20+不同卡消费$5000+ - 动态基线法:比较商户当前活动与历史基线(3倍于平均水平为阈值) - 使用168小时(7天)滑动窗口考虑周周期
5. 非活跃时段交易
检测持卡人非常规时间的交易: - 建立90天内持卡人活跃时段基线 - 要求同一小时内至少2笔交易才视为习惯 - 新账户需要积累足够历史数据
6. 窗口函数组合信号
使用窗口函数创建衍生字段,使其他模式可组合: - 计算与上次交易时间差 - 标记商户是否变更 - 计算24小时累计金额 - 统计当日交易序号 - 使复杂规则简化为几个过滤器条件
实施建议
- 单独使用任一种模式都会产生误报
- 应综合多种信号评分,同时触发多个信号的可信度高
- 初学者可从模式1开始,逐步构建其他模式
- 重点投资模式6的基础设施建设
注意事项
- NULL值处理:注意实际数据中的特殊占位值
- 误报处理:需要人工审核流程和反馈机制
- 隐私保护:遵守数据使用政策
- 查询成本:注意窗口函数的性能消耗
未涵盖主题
作者计划未来可能探讨:高级窗口函数技巧、欺诈团伙检测(社交图问题)、欺诈团队仪表板设计、降低警报噪音等主题。
(注:原文中的SQL代码示例、具体技术细节和部分专业术语已保留,删除了作者个人网站链接和部分非技术性说明文字)
评论总结
以下是评论内容的总结:
对1美元交易的质疑
- 观点:整数金额交易不一定是欺诈信号,实际消费金额通常有零头
- 引用:
"Real cardholders almost never buy something for exactly $1.00"(真实持卡人很少正好消费1美元)
"Elsewhere, round-number prices are extremely common"(其他地方整数价格很常见)
新账户和历史数据问题
- 观点:新账户缺乏历史数据会导致误判
- 引用:
"this doesn’t work until you have history"(没有历史数据时无效)
"If my card gets denied when i’m a new customer...I’m frustrated"(新客户被拒会感到沮丧)
AI生成内容质疑
- 观点:文章可能由AI生成,影响可信度
- 引用:
"has so many signs of AI writing"(有明显AI写作痕迹)
"blatantly AI generated explanations"(明显的AI生成解释)
地理位置的局限性
- 观点:快速跨地区交易规则不适用于网购/共享账户
- 引用:
"How does this work with online shopping?"(网购如何适用?)
"couple shares an online account"(夫妻共享账户的情况)
方法论争议
- 观点:SQL规则过于确定,欺诈检测应是概率问题
- 引用:
"Fraud is not usually a 'true because rule X matched'"(欺诈不是简单的规则匹配)
"banks use...more data science stuff"(银行应使用更科学的数据方法)
例外情况
- 观点:存在合理例外(如凌晨加油、授权他人用卡)
- 引用:
"What if I get gas at 2am?"(凌晨加油怎么办?)
"I let my partner use my card"(允许伴侣用卡)
技术怀旧与演进
- 观点:类似方法20年前就有,但需要结合机器学习
- 引用:
"same patterns still in use 20 years later"(20年后仍在使用相同模式)
"the point of ML that you learn these rules from the data"(机器学习应从数据中发现规则)
SQL语法争议
- 观点:复杂SQL语法(如PARTITION BY)影响实用性
- 引用:
"I suddenly lost my love for SQL...when OVER PARTITION BY appeared"(复杂语法让人失去兴趣)
总结呈现了主要争议点:方法论的有效性(特别是SQL规则的局限性)、AI生成内容质疑、例外情况处理,以及机器学习与传统规则的对比。