euiedavid/financial-transaction-anomaly-detection
GitHub: euiedavid/financial-transaction-anomaly-detection
基于无监督机器学习方法(Isolation Forest 与 LOF)的端到端银行交易异常检测项目,用于在无欺诈标签数据下识别可疑交易行为。
Stars: 0 | Forks: 0
# **一种检测银行交易异常的机器学习方法**
## 概述
本项目重点关注通过使用 Vala Khorasani 的 Bank Transaction Dataset for Fraud Detection(用于欺诈检测的银行交易数据集),分析交易行为、客户行为、安全行为和行为模式,从而识别异常的银行交易。由于该数据集不包含历史欺诈标签,因此应用了无监督异常检测技术来识别偏离正常客户行为的交易。
## 项目工作流
1. 数据理解
2. 数据清洗
3. 探索性数据分析 (EDA)
4. 特征工程
5. 特征编码与缩放
6. Isolation Forest
7. Local Outlier Factor (LOF)
8. 模型比较
9. 结论
## 问题描述
金融机构每天处理数千笔交易,这使得欺诈分析师难以手动识别可疑活动。在没有标记欺诈数据的情况下,检测异常交易行为需要能够识别偏离正常客户活动模式的方法。
**业务目标:**
开发一个异常检测系统,识别表现出异常行为模式的交易,使欺诈分析师能够优先处理高风险交易以进行进一步调查。
## 业务影响
提出的异常检测 pipeline 使金融机构能够优先对表现出异常行为模式的交易进行人工审查。通过结合探索性数据分析、特征工程和多种异常检测算法,该系统能够捕获不同类型的异常交易行为,从而提供更广泛的检测覆盖范围,且无需历史欺诈标签。
## 数据集
本项目使用的数据集是 Vala Khorasani 的 **Bank Transaction Dataset for Fraud Detection**,可在 Kaggle 上获取。
**数据集来源:** [用于欺诈检测的银行交易数据集 (Kaggle)](https://www.kaggle.com/datasets/valakhorasani/bank-transaction-dataset-for-fraud-detection)
## 数据集摘要
- 交易数:**2,512**
- 客户账户数:**495**
- 缺失值:**无**
- 重复记录:**无**
### 关键特征
以下特征描述改编自提供的数据集文档:
- **TransactionID**:每笔交易的唯一字母数字标识符。
- **AccountID**:每个账户的唯一标识符,每个账户包含多笔交易。
- **TransactionAmount**:每笔交易的货币金额,从少量的日常开支到较大额的购买不等。
- **TransactionDate**:每笔交易的时间戳,捕获日期和时间。
- **TransactionType**:指示“Credit(信用/收款)”或“Debit(借记/付款)”交易的分类字段。
- **Location**:交易的地理位置,由美国城市名称表示。
- **DeviceID**:用于执行交易的设备的字母数字标识符。
- **IP Address**:与交易关联的 IPv4 地址,部分账户的地址偶尔会发生更改。
- **MerchantID**:商户的唯一标识符,显示每个账户的首选商户和异常商户。
- **AccountBalance**:交易后的账户余额,根据交易类型和金额具有逻辑相关性。
- **PreviousTransactionDate**:该账户上一笔交易的时间戳,有助于计算交易频率。
- **Channel**:执行交易的渠道(例如:Online、ATM、Branch)。
- **CustomerAge**:账户持有人的年龄,根据职业进行逻辑分组。
- **CustomerOccupation**:账户持有人的职业(例如:Doctor、Engineer、Student、Retired),反映收入模式。
- **TransactionDuration**:交易持续时间(以秒为单位),因交易类型而异。
- **LoginAttempts**:交易前的登录尝试次数,数值较高表明可能存在异常。
### 数据清洗
- 检查缺失值和重复记录
- 将日期列转换为 datetime 格式
### 特征编码与缩放
- 对分类变量进行 One-hot 编码
- 对数值特征应用 RobustScaler
### 特征工程
从原始数据集中设计了多个行为特征,包括:
- 设备更改指示器
- IP 地址更改指示器
- 交易小时
- 星期几
- 周末交易标志
- 距上次交易的时间
- 金额与余额比率
- 高价值交易标志
## 探索性数据分析 (EDA)
进行 EDA 是为了了解行为模式,并识别可能表明存在异常交易活动的因素。
探索性数据分析检查了四个关键领域:
- 交易行为模式
- 客户账户活动
- 设备和 IP 地址更改
- 异常的交易金额和频率
主要发现:
探索性数据分析表明,客户交易在交易、客户、安全和账户活动方面通常表现出一致的行为模式。大多数交易是中等金额的借记交易,而交易渠道(Online、ATM 和 Branch)的使用频率相对相似。尽管少数高价值交易被识别为统计异常值,但大多数交易都在典型的支出范围内。
客户行为显示,大多数账户进行了大约五笔交易,从多个位置和 IP 地址访问其账户,并且平均使用了大约五个不同的设备。观察到少数账户的设备和 IP 地址频繁更改,这表明当与其他风险指标结合时,可能需要对这类行为模式进行更仔细的检查。
从安全角度来看,所有交易渠道的登录尝试次数始终保持较低水平,这表明不成功的登录活动通常并不常见。然而,不同地区的平均交易金额存在差异,有几个城市表现出相对较高价值的交易,可能需要额外的监控。
总体而言,该分析建立了正常客户行为的基准,同时识别了区分潜在异常交易的行为特征。这些见解指导了特征工程过程,并为使用 Isolation Forest 和 Local Outlier Factor (LOF) 应用无监督异常检测提供了坚实的基础。
## 方法论
实现了两种无监督机器学习算法来识别异常的银行交易。
| 模型 | 目的 | 关键参数 |
|--------|---------|----------------|
| **Isolation Forest** | 通过随机隔离与正常交易行为显著不同的观察结果来识别异常。 | `contamination = 0.05`
`n_estimators = 100` | | **Local Outlier Factor (LOF)** | 通过测量交易相对于其相邻观察结果的局部密度来检测异常。 | `contamination = 0.05`
`n_neighbors = 20` | ## 结果 通过比较模型的异常预测来评估模型,以识别共享的和特定于模型的异常检测。 ### 主要结果 - Isolation Forest 检测到 **126** 个潜在异常。 - Local Outlier Factor 检测到 **126** 个潜在异常。 - **43** 笔交易被两个模型同时识别。 - **83** 笔交易由 Isolation Forest 单独检测到。 - **83** 笔交易由 Local Outlier Factor 单独检测到。 - 两个模型之间的整体一致性为 **93.39%**。 ### 主要观察结果: - 被两个模型同时检测到的交易代表了最高置信度的异常,因为它们是由两种不同的算法独立识别的。 - 特定于模型的异常表明,不同的算法会捕获不同类型的异常行为模式。 - 结合多种异常检测方法可提供更广泛的异常覆盖范围。 ## 使用的技术 - Python - Pandas - NumPy - Scikit-learn - Matplotlib - Seaborn - Jupyter Notebook ### 机器学习 - Isolation Forest - Local Outlier Factor (LOF) ## 未来改进 - 评估其他异常检测算法,例如 One-Class SVM 和 DBSCAN。 - 结合带有标签的欺诈数据以构建监督分类模型。 - 将异常检测 pipeline 部署为实时监控系统。 ## 仓库结构 ``` financial-transaction-anomaly-detection/ │ ├── README.md # Project documentation ├── bank_transactions_data_2.csv # Dataset ├── ml_anomaly_detection.ipynb # End-to-end project notebook └── requirements.txt # Python dependencies ```
`n_estimators = 100` | | **Local Outlier Factor (LOF)** | 通过测量交易相对于其相邻观察结果的局部密度来检测异常。 | `contamination = 0.05`
`n_neighbors = 20` | ## 结果 通过比较模型的异常预测来评估模型,以识别共享的和特定于模型的异常检测。 ### 主要结果 - Isolation Forest 检测到 **126** 个潜在异常。 - Local Outlier Factor 检测到 **126** 个潜在异常。 - **43** 笔交易被两个模型同时识别。 - **83** 笔交易由 Isolation Forest 单独检测到。 - **83** 笔交易由 Local Outlier Factor 单独检测到。 - 两个模型之间的整体一致性为 **93.39%**。 ### 主要观察结果: - 被两个模型同时检测到的交易代表了最高置信度的异常,因为它们是由两种不同的算法独立识别的。 - 特定于模型的异常表明,不同的算法会捕获不同类型的异常行为模式。 - 结合多种异常检测方法可提供更广泛的异常覆盖范围。 ## 使用的技术 - Python - Pandas - NumPy - Scikit-learn - Matplotlib - Seaborn - Jupyter Notebook ### 机器学习 - Isolation Forest - Local Outlier Factor (LOF) ## 未来改进 - 评估其他异常检测算法,例如 One-Class SVM 和 DBSCAN。 - 结合带有标签的欺诈数据以构建监督分类模型。 - 将异常检测 pipeline 部署为实时监控系统。 ## 仓库结构 ``` financial-transaction-anomaly-detection/ │ ├── README.md # Project documentation ├── bank_transactions_data_2.csv # Dataset ├── ml_anomaly_detection.ipynb # End-to-end project notebook └── requirements.txt # Python dependencies ```
标签:Apex, NoSQL, 代码示例, 孤立森林, 局部异常因子, 异常检测, 数据分析, 机器学习, 欺诈检测, 逆向工具, 金融风控