Jeremiah95-Feng/fraud-detection-data-analysis
GitHub: Jeremiah95-Feng/fraud-detection-data-analysis
基于 Pandas 和 NumPy 构建的统计分析管道,对 51,000 笔金融交易数据进行清洗、异常值检测和欺诈风险评分。
Stars: 0 | Forks: 0
# 🔍 欺诈检测数据分析系统
**课程:** 商业数据分析 (MGT174) — COMSATS University Islamabad
**提交给:** Sir Ali Usama
**团队:** Alisha Malik | Jeremiah Huang | Minahil Javed
**日期:** 2026年3月29日
## 📌 项目概述
本项目使用 Python 的统计技术分析了来自 Kaggle 数据集的 51,000 笔金融交易,以识别可疑模式。该 pipeline 涵盖了完整的数据分析工作流:加载、清洗、异常值检测、行为分组、特征工程、风险评分和可视化。
## 📂 数据集
- **来源:** Kaggle — 欺诈检测数据集
- **文件:** `Fraud_Detection_Dataset.csv`
- **形状:** 51,000 行 × 12 列
- **关键列:** Transaction_Amount, Transaction_Type, Time_of_Transaction,
Device_Used, Location, Previous_Fraudulent_Transactions, Account_Age,
Number_of_Transactions_Last_24H, Payment_Method, Fraudulent
## 🛠️ 使用的库
| 库 | 用途 |
|---|---|
| Pandas | 数据加载、清洗、分组 |
| NumPy | Z-score 计算、统计测量 |
| Matplotlib | 数据可视化 |
## 📋 Pipeline 摘要
### 1. 加载与探索数据集
- 将 CSV 加载到 Pandas DataFrame 中
- 使用 `.head()`、`.tail()`、`.info()`、`.describe()`、`.shape` 探索结构
### 2. 处理缺失值
- 识别出 5 个包含缺失数据的列(每列有 2,469–2,552 个空值)
- 数值列 (Transaction_Amount, Time_of_Transaction) → 用**平均值**填充
- 类别列 (Device_Used, Location, Payment_Method) → 用**众数**填充
- 使用 `.drop_duplicates()` 删除重复行
### 3. 异常值检测 (Z-Score)
- 计算 `Transaction_Amount` 和 `Time_of_Transaction` 的 Z-score
- 将 |Z| > 3 的交易标记为异常值
- **结果:** 在 Transaction_Amount 中检测到 508 个异常值;在 Time_of_Transaction 中为 0
### 4. 分组与消费行为
- 按 `User_ID` 分组 → 计算 Avg_Spend, Max_Spend, Total_Transactions, Total_Spend
- 按 `Transaction_Type` 分组 → 计算每种类型的平均值和计数
### 5. 特征工程与欺诈风险评分
设计了四个新的二进制/连续特征:
| 特征 | 逻辑 |
|---|---|
| `amount_zscore` | Transaction_Amount 的 Z-score(连续) |
| `is_night` | 如果交易发生在晚上 10 点至早上 6 点之间则为 1 |
| `has_prior_fraud` | 如果 Previous_Fraudulent_Transactions > 0 则为 1 |
| `high_activity` | 如果 Number_of_Transactions_Last_24H > 10 则为 1 |
加权欺诈风险评分公式:
标签:NumPy, Python, 代码示例, 异常检测, 数据分析, 数据清洗, 无后门, 欺诈检测, 逆向工具