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% 的分割上,仅准确性是误导性的。
## 技术栈





标签:AML, Apex, BSD, Kaggle竞赛, PaySim数据集, TCP/UDP协议, 交易分析, 分类模型, 反洗钱, 大数据分析, 数据挖掘, 数据探索, 数据清洗, 机器学习, 模式识别, 欺诈检测, 欺诈预防, 逆向工具, 金融风控, 风险控制