Priyall33/bank-transaction-anomaly-detection
GitHub: Priyall33/bank-transaction-anomaly-detection
基于K-Means和KNN的无监督银行交易异常检测项目,通过特征工程和可视化技术识别可疑交易模式。
Stars: 0 | Forks: 0
# 银行交易异常检测
使用 K-Means 和 KNN 对银行交易进行无监督异常检测,包含 EDA、特征工程以及 PCA/t-SNE 可视化。
## 概述
本项目分析了包含 2,512 条银行交易的数据集,旨在不使用标记欺诈数据的情况下识别可疑行为。由于不存在明确的欺诈标签,该问题被视为一个**无监督异常检测**任务 —— 目标是识别出行为与大多数交易不同的交易。
## 数据集
- **来源:** [Bank Transaction Dataset for Fraud Detection — Kaggle](https://www.kaggle.com/)
- **规模:** 2,512 条交易 × 16 列
- **特征:** 交易金额、账户余额、登录尝试次数、客户年龄、职业、渠道、交易持续时间以及时间戳
## 项目结构
├── Bank_Transaction.ipynb
├── README.md
## 方法论
### 1. 探索性数据分析 (EDA)
- 数据集结构、缺失值和重复值
- 描述性统计和基于 IQR 的离群值检测
- 分布可视化和特征关系
- 关键发现:4.86% 的交易有多次登录尝试,4.5% 的交易金额异常高 —— 被确定为两个主要的异常信号
### 2. 特征工程
为了更好地捕捉可疑行为,设计了以下特征:
| 特征 | 描述 |
|---|---|
| TimeSincePreviousTransaction | 当前交易与上一笔交易之间的天数 |
| AmountToBalanceRatio | 交易金额除以账户余额 |
| AmountZScore | 金额相对于该账户历史记录的异常程度 |
| HighLoginFlag | 登录尝试次数超过 1 次的交易的二进制标志 |
| HighAmountFlag | 交易金额超过 IQR 上限 $914 的交易的二进制标志 |
### 3. 降维
- **PCA** —— 保留了 30.9% 的方差;高金额交易在视觉上与正常交易分离
- **t-SNE** —— 产生了更清晰的分离效果,高金额和高登录次数的交易形成了明显的孤立集群
### 4. 异常检测
应用并优化了两种无监督算法:
**K-Means 聚类**
- 距离其聚类中心最远的交易被标记为异常
- 测试的 n_clusters:4, 6, 8, 10, 12 → 选用 n_clusters=8
- 识别出 **126 个异常**
**K-Nearest Neighbors (KNN)**
- 到其 20 个最近邻的平均距离最大的交易被标记为异常
- 测试的 n_neighbors:5, 10, 20, 30, 50 → 选用 n_neighbors=20
- 识别出 **126 个异常**
**共有 87 条交易被两个模型同时标记**,代表了可能性最高的异常候选。
## 关键发现
排名靠前的异常表现出一个明显的模式 —— 学生进行金额为 $600–$1,500 的交易,而账户余额不足 $500,在某些情况下,单笔交易花费了超过其可用余额 700% 的资金。其他危险信号包括有 4-5 次登录尝试并结合高金额的交易。交易金额与账户余额的比率被证明是区分可疑交易与正常行为的最强信号。
## 工具与库
- Python, Pandas, NumPy
- Matplotlib, Seaborn
- Scikit-learn (KMeans, NearestNeighbors, PCA, t-SNE, StandardScaler)
## 如何运行
1. 克隆仓库
2. 将 `bank_transactions_data_2.csv` 上传到你的 Google Drive
3. 在 Google Colab 中打开 `Bank_Transaction.ipynb`
4. 更新 Cell 1 中的文件路径以匹配你的 Drive 位置
5. 按顺序运行所有单元格
标签:Apex, Kaggle 数据集, K-Means 聚类, KNN (K-Nearest Neighbors), PCA 降维, Python, t-SNE 可视化, 反洗钱 (AML), 异常检测, 探索性数据分析 (EDA), 数据科学, 无后门, 无监督学习, 机器学习, 欺诈检测, 特征工程, 离群点检测, 网络安全, 资源验证, 逆向工具, 金融安全, 金融风控, 银行交易分析, 隐私保护