sharmajeevitesh/fraud-detection-sql
GitHub: sharmajeevitesh/fraud-detection-sql
基于 SQL 的结构化欺诈检测方法,利用统计与规则逻辑识别信用卡交易中的异常模式。
Stars: 0 | Forks: 0
# 🔍 使用 SQL 进行欺诈检测
一种基于统计比较、时间间隔分析和规则化欺诈评分的结构化 SQL 探索性分析方法,用于检测信用卡欺诈交易。
## 📁 项目结构
```
├── fraud_analysis.sql # All SQL queries for fraud detection analysis
└── README.md
```
## 📊 数据集
本项目假设存在一个 `transactions` 表,包含以下关键字段:
| 列名 | 描述 |
|------|------|
| `Time` | 自第一条交易以来的秒数 |
| `Amount` | 交易金额(美元) |
| `Class` | 标签 — `1` = 欺诈,`0` = 正常 |
| `V1`–`V28` | 经过 PCA 变换的匿名化特征 |
## 🧠 分析拆解
### 1. 数据集概览
```
SELECT COUNT(*) AS total_transactions FROM transactions;
```
- 获取数据集中交易的总数。
### 2. 欺诈交易计数
```
SELECT COUNT(*) AS fraud_transactions FROM transactions WHERE Class = 1;
```
- 提取并统计确认的欺诈案例。
### 3. 欺诈率
```
SELECT COUNT(*), SUM(Class), (SUM(Class) * 100.0) / COUNT(*) AS fraud_percentage
FROM transactions;
```
- 计算整体欺诈率。
- 结果:欺诈极为罕见(约 0.17%),这是一个典型的**类别不平衡分类**问题。
### 4. 欺诈与正常交易 — 金额对比
```
SELECT Class, COUNT(*), AVG(Amount), MAX(Amount), MIN(Amount)
FROM transactions GROUP BY Class;
```
- 比较两类交易的金额分布。
- **洞察:** 欺诈交易的平均金额往往高于正常交易。
### 5. 高金额欺诈交易
```
SELECT * FROM transactions
WHERE Amount > (SELECT AVG(Amount) FROM transactions) AND Class = 1;
```
- 筛选金额**高于整体平均值**的欺诈交易 — 识别高风险子集。
### 6. 快速欺诈检测(时间间隔分析)
```
SELECT * FROM (
SELECT Time, Amount, Class,
Time - LAG(Time) OVER (ORDER BY Time, Amount) AS time_diff
FROM transactions
) t
WHERE Class = 1 AND time_diff < 10;
```
- 使用窗口函数(`LAG`)计算连续交易之间的时间间隔。
- 标记与上一笔交易间隔在 **10 秒以内** 的欺诈交易 — 这是卡测试或自动化欺诈的常见行为模式。
### 7. 规则化欺诈评分
```
SELECT *,
CASE WHEN Amount > 100 THEN 2 ELSE 0 END +
CASE WHEN time_diff < 10 AND time_diff IS NOT NULL THEN 3 ELSE 0 END
AS fraud_score
FROM (...) t;
```
- 根据以下规则为每笔交易分配**欺诈风险评分**:
- 金额超过 100 美元:`+2`
- 与上一笔交易的时间间隔小于 10 秒:`+3`
- **分数越高 → 风险越高**
| 分数 | 风险等级 |
|------|----------|
| 0 | 低 |
| 2 | 中等 |
| 3 | 高 |
| 5 | 非常高 |
## 💡 关键发现
- 欺诈极为罕见(约 0.17%)— 单纯使用准确率指标具有误导性。
- 欺诈交易通常涉及更高的平均金额。
- **短时间间隔内的连续交易**(小于 10 秒)是强烈的行为欺诈信号。
- 简单的规则化评分系统可以在不依赖机器学习模型的情况下标记高风险交易。
## 🚀 使用方法
1. 将交易数据加载到兼容 SQL 的数据库(PostgreSQL、MySQL、SQLite、BigQuery 等)中。
2. 按适当模式创建 `transactions` 表。
3. 按顺序或单独运行 `fraud_analysis.sql` 中的查询。
4. 使用 `fraud_score` 输出对交易进行优先级排序,用于人工审核或下游机器学习流水线。
## 🛠️ 要求
- 任意 SQL 环境:**PostgreSQL**、**MySQL 8+**、**SQLite**、**BigQuery** 等。
- `LAG()` 窗口函数要求数据库支持**SQL 窗口函数**(MySQL 8+、PostgreSQL、SQLite 3.25+)。
## 📌 后续改进
- 添加 PCA 特征(`V1`–`V28`)分析以识别异常模式。
- 与 Python(pandas + SQLAlchemy)集成以实现可视化。
- 在此探索性分析基础上构建机器学习模型(逻辑回归、孤立森林)。
- 为大规模交易数据集添加索引优化。
标签:SQL, 不平衡数据, 云计算, 交易分析, 代码示例, 信用卡欺诈, 多线程, 数据分析, 数据库查询, 数据探索, 时间间隔分析, 欺诈检测, 测试用例, 窗口函数, 系统审计, 统计比较, 聚合函数, 规则引擎, 金融安全, 风险评分