a51w/An-unsupervised-anomaly-detection
GitHub: a51w/An-unsupervised-anomaly-detection
一个基于多模型集成与 F3 优化加权投票的玩家账户无监督异常检测流水线,用于识别作弊、欺诈和账户接管等可疑行为。
Stars: 0 | Forks: 0
# 玩家异常检测 — 集成 Pipeline
一个无监督/半监督异常检测系统,旨在通过行为、时间、位置、经济和社交活动数据,标记可疑的玩家账户(例如作弊、欺诈、账户接管)。该 pipeline 结合了**特征工程**、**稳健的预处理**以及**五个异常检测器的加权集成**,其权重和阈值会自动调整以最大化 **F3 分数**(权重偏向 recall 的 F-beta 分数)。
## 核心亮点
- **自动化时间特征工程** — 检测多周期列(例如 `feature_1` … `feature_4`),并按组派生出均值、标准差、趋势和变异系数特征。
- **领域特定的特征构建**:
- 登录周期之间的地理位置漂移(欧几里得距离、总/最大移动距离)
- 购买/退款行为(退款率)
- 社交图谱流失(好友添加与删除)
- 安全标记聚合(密码更改、VPN 使用情况、可疑登录时间、大量物品销售)
- 活跃度与账户年龄的比率
- **稳健的预处理** — 使用 KNN 插补缺失值,采用第 1/99 百分位进行异常值截断,并使用 `RobustScaler` 进行归一化(对异常值具有鲁棒性)。
- **5 模型异常检测集成**:
| 模型 | 技术 |
|---|---|
| Isolation Forest | 基于树的孤立性评分 |
| Local Outlier Factor (LOF) | 基于密度的异常检测 |
| Elliptic Envelope | 基于高斯协方差的异常值检测 |
| PCA Reconstruction Error | 基于降维的异常评分 |
| Statistical Z-score | 跨特征的最大绝对 Z-score |
- **性能加权投票** — 每个模型对最终集成得分的贡献权重,取决于其自身针对真实标签计算出的独立 **F3 分数**(当标签不可用时,回退为等权重分配)。
- **自动阈值优化** — 扫描不同的百分位阈值(90–99.5%),以找到能在训练数据上最大化 F3 分数的最佳切分点。
- **测试集推理** — 将拟合好的集成模型和调整后的阈值应用于未见过的数据,并导出 Kaggle 风格的 `submission.csv`。
## Pipeline 概览
```
Raw CSV
│
▼
Feature Engineering (temporal aggregates, distance, refund rate, friend churn, security flags)
│
▼
Preprocessing (KNN imputation → outlier capping → RobustScaler)
│
▼
Ensemble Training ┌─ Isolation Forest
├─ Local Outlier Factor
├─ Elliptic Envelope
├─ PCA reconstruction error
└─ Statistical Z-score
│
▼
F3-Weighted Voting + Threshold Optimization
│
▼
Final Predictions → submission.csv
```
## 脚本执行流程(分步说明)
1. **导入与设置** — 固定随机种子以确保可重复性。
2. **加载原始数据** — 读取训练/测试 CSV 文件,并在标签存在时报告异常率。
3. **探索性数据分析 (EDA)** — 汇总各列的缺失值情况。
4. **特征工程** — 构建聚合的时间、地理位置、经济、社交和安全特征。
5. **数据预处理** — 处理无穷大值,通过 KNN 插补缺失值,截断异常值,并对特征进行缩放。
6. **集成模型训练** — 拟合 Isolation Forest、LOF、Elliptic Envelope、PCA 以及一个统计检测器。
7. **模型权重分配** — 评估每个模型独立的 F3 性能,并将其归一化为集成模型的权重。
8. **集成模型预测** — 将归一化后的各模型评分组合成单一的加权异常分数。
9. **评估** — 计算 precision/recall/F3、混淆矩阵和分类报告,并寻找最佳决策阈值。
10. **测试推理** — 将调优后的集成模型应用于测试集,并生成 `submission.csv`。
## 使用说明
```
pip install pandas numpy matplotlib seaborn scikit-learn
python task5_final.py
```
将您的 `train.csv` / `test.csv` 放置在工作目录中(根据需要更新脚本中的文件路径)。所需的列包括:
- `id`, `player_id` — 标识符
- `is_anomaly` — 二元标签(可选;如果缺失,pipeline 将以无监督模式运行,并对模型采用等权重分配)
- 行为/时间/位置/经济/社交特征列
输出:包含 `id` 和预测结果 `is_anomaly` 的 `submission.csv`。
## 评估指标:为什么选择 F3?
该 pipeline 之所以针对 **F3** 而非 F1 或准确率进行优化,是因为在异常/欺诈检测中,**漏掉真正的异常(假阴性,false negative)的代价远高于触发误报(false alarm)**。F3 将 recall 的权重设定为 precision 的 9 倍,这使得模型偏向于捕获更多真正的异常,即使代价是增加一些额外的假阳性(false positive)。
标签:Apex, 反作弊, 反欺诈, 异常检测, 机器学习, 游戏安全, 特征工程, 逆向工具, 集成学习