hubertkrzewinski0000-spec/AML-Fraud-Detection

GitHub: hubertkrzewinski0000-spec/AML-Fraud-Detection

AML欺诈检测项目,利用SQL和Python进行数据分析和机器学习模型构建。

Stars: 0 | Forks: 0

# AML 欺诈检测 使用 **探索性数据分析**、**基于 SQL 的规则工程** 和 **机器学习** 在 630 万笔交易数据集上进行的金融欺诈检测项目。 ## 概述 该项目分析了 [PaySim 数据集](https://www.kaggle.com/datasets/ealaxi/paysim1) —— 移动货币交易的合成模拟,以识别区分欺诈交易和合法交易的行为模式。 分析展示了现实的 AML(反洗钱)工作流程:从原始数据探索开始,通过 SQL 进行假设测试,到构建一个可以标记可疑交易的分类模型。 ## 数据集 | 属性 | 值 | |---|---| | 来源 | PaySim(Kaggle) | | 行 | 6,362,620 笔交易 | | 列 | 11 | | 欺诈率 | ~0.13%(8,213 起欺诈案件) | | 时间跨度 | 30 天(模拟) | **关键列:** `step`、`type`、`amount`、`nameOrig`、`oldbalanceOrg`、`newbalanceOrig`、`nameDest`、`oldbalanceDest`、`newbalanceDest`、`isFraud`、`isFlaggedFraud` ## 关键发现 - **欺诈具有类型特异性** — 100% 的欺诈仅发生在 `TRANSFER` 和 `CASH_OUT` 交易中。其他类型(`PAYMENT`、`DEBIT`、`CASH_IN`)没有欺诈案例。 - **账户余额耗尽模式** — 欺诈发送者持续耗尽其整个账户余额。平均交易后余额从 ~$1.65M 降至 ~$192K,而合法发送者保持稳定的余额。 - **高价值不等于欺诈** — 前 10 笔最大的交易(所有超过 $60M)都是合法的。基于金额的简单规则会产生不可接受的假阳性率。 - **无重复违法者** — 每个欺诈账户只出现一次,这意味着结构化(分割交易以避免检测)不在此数据集中存在。 ## 项目结构 ``` AML-Fraud-Detection/ ├── AML_EDA_Analysis.ipynb # Main analysis notebook ├── aml_eda_charts.png # EDA visualizations (generated by notebook) ├── aml_model_results.png # Model evaluation plots (generated by notebook) ├── .gitignore └── README.md ``` ## 如何运行 ### 1. 克隆仓库 ``` git clone https://github.com/hubertkrzewinski0000-spec/AML-Fraud-Detection.git cd AML-Fraud-Detection ``` ### 2. 安装依赖项 ``` pip install pandas matplotlib scikit-learn ``` ### 3. 下载数据集 从 [Kaggle](https://www.kaggle.com/datasets/ealaxi/paysim1) 下载 `paysim_dataset.csv` 并将其放置在项目文件夹中。 ### 4. 运行笔记本 ``` jupyter notebook AML_EDA_Analysis.ipynb ``` ## 方法与技能展示 | 领域 | 详细信息 | |---|---| | **Python / Pandas** | EDA、数据清洗、特征工程 | | **SQL(SQLite)** | 聚合、基于规则的假设测试、行为查询 | | **Matplotlib** | 分布图、分组条形图、混淆矩阵 | | **机器学习** | 带有 `class_weight='balanced'` 的随机森林分类器以处理严重的类别不平衡 | | **分析思维** | 识别为什么简单的阈值规则失败;构建捕获欺诈特定行为的特征 | ## 模型结果 随机森林模型仅在 `TRANSFER` 和 `CASH_OUT` 交易上使用工程化特征进行训练: - `balance_drained` — 发送者余额是否达到零 - `dest_balance_no_change` — 尽管收到资金,但目的地余额未改变(洗钱信号) - `amount_to_orig_ratio` — 交易规模相对于发送者余额的比例 使用 `class_weight='balanced'` 解决类别不平衡问题。模型使用 **精确度、召回率、F1 分数** 和 **ROC-AUC** 进行评估——在 99.87% / 0.13% 的分割上,仅准确性是误导性的。 ## 技术栈 ![Python](https://img.shields.io/badge/Python-3.9+-blue?logo=python&logoColor=white) ![Pandas](https://img.shields.io/badge/Pandas-150458?logo=pandas&logoColor=white) ![scikit-learn](https://img.shields.io/badge/scikit--learn-F7931E?logo=scikit-learn&logoColor=white) ![SQLite](https://img.shields.io/badge/SQLite-003B57?logo=sqlite&logoColor=white) ![Jupyter](https://img.shields.io/badge/Jupyter-F37626?logo=jupyter&logoColor=white)
标签:AML, Apex, BSD, Kaggle竞赛, PaySim数据集, TCP/UDP协议, 交易分析, 分类模型, 反洗钱, 大数据分析, 数据挖掘, 数据探索, 数据清洗, 机器学习, 模式识别, 欺诈检测, 欺诈预防, 逆向工具, 金融风控, 风险控制