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, 反作弊, 反欺诈, 异常检测, 机器学习, 游戏安全, 特征工程, 逆向工具, 集成学习