LokeshSecOps/fraud-detection-eda

GitHub: LokeshSecOps/fraud-detection-eda

基于 Python 的信用卡交易欺诈检测分析项目,通过特征工程和可解释规则标记异常交易。

Stars: 0 | Forks: 0

# 信用卡交易欺诈检测 对合成信用卡交易数据集进行探索性数据分析和异常标记。本项目旨在展示实用的数据分析、特征工程和可解释的欺诈检测——这正是信用与欺诈风险(CFR)团队所从事的工作。 ## 它的功能 image 1. **生成真实的合成数据集** —— 包含 200 名用户、8 个商户类别、跨越一年的 10,000 笔交易。其中嵌入了欺诈模式:高额异常值、异常时段交易(凌晨 1-4 点)以及高频连发交易。 2. 从原始数据中**工程化分析特征**: - 每个用户的基准(其历史消费的均值和标准差) - 金额 Z-score —— 一笔交易偏离该用户自身平均值的程度 - 异常时段标记 —— 凌晨 1 点至 4 点之间的交易 - 交易速度 —— 同一用户在同一 1 小时窗口内的交易次数 3. **使用可解释的规则标记异常** —— 每个规则都是明确且可审计的,这符合真实风险团队构建合理系统的做法: - `flag_high_amount`:Z-score > 3.0 - `flag_odd_hour`:凌晨 1 点至 4 点之间的交易 - `flag_velocity`:同一用户在同一小时内超过 4 笔交易 4. 通过 4 个图表**可视化模式**(见 `fraud_analysis.png`): - 金额分布:欺诈与正常交易对比 - 标记结果明细(真阳性 / 假阳性 / 漏报 / 正常) - 每小时交易量(突出显示异常时段窗口) - Z-score 散点图:已标记与正常交易对比 5. **将标记的交易导出**为 CSV 文件(`flagged_transactions.csv`),包含所有特征列以供下游审查。 ## 结果(基于合成数据) | 指标 | 数值 | |---|---| | 总交易数 | 10,000 | | 已知欺诈(真实数据) | 500 (5%) | | 标记为可疑 | ~2,088 (20.9%) | | 真阳性 | 278 | | 精确率 | 13.3% | | 召回率 | 55.6% | 精确率与召回率的权衡是有意为之:这是一个**初步筛查层**,而不是最终决策。在真实的 pipeline 中,被标记的交易会进入第二阶段模型或人工审查队列——在这个阶段,高召回率比低假阳性更重要。 ## 技术栈 - Python 3.12 - Pandas —— 数据处理、特征工程、groupby 聚合 - NumPy —— 统计计算(Z-scores、分布) - Matplotlib —— 所有可视化 ## 如何运行 ``` git clone https://github.com/LokeshSecOps/fraud-detection-eda cd fraud-detection-eda pip install pandas numpy matplotlib python fraud_detection.py ``` 输出: - `fraud_analysis.png` —— 4 面板可视化图表 - `flagged_transactions.csv` —— 包含特征列的所有被标记记录 ## 设计决策 **为什么选择基于规则而不是 ML?** 可解释性在金融风险中至关重要。逻辑回归或梯度提升模型可能会得出稍好一些的数据,但风险分析师需要向监管机构解释*为什么*某笔交易会被标记。像“Z-score > 3.0”和“凌晨 3 点交易”这样的规则是不言而喻的。这也反映了真实 CFR 团队通常的起步方式:首先使用透明的启发式方法,然后再将 ML 模型作为补充。 **为什么使用每个用户的 Z-score 而不是全局 Z-score?** 对于经常出差的人来说,500 美元的交易很正常,但对于通常只消费 40 美元的人来说就令人警惕了。与全局阈值相比,用户级别的基准可以显著减少假阳性。 **为什么使用合成数据?** 真实的卡交易数据涉及敏感的 PII(个人身份信息),无法公开分发。合成数据生成器可以产生统计上真实的模式(真实的商户类别组合、自然的消费分布、嵌入的欺诈特征),而不会带来任何隐私问题。
标签:Apex, 代码示例, 异常检测, 数据分析, 机器学习, 特征工程, 逆向工具, 金融风控