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 ```
标签:Apex, NoSQL, 代码示例, 孤立森林, 局部异常因子, 异常检测, 数据分析, 机器学习, 欺诈检测, 逆向工具, 金融风控