Ummmahek/github-behaviour-anomaly-detection-

GitHub: Ummmahek/github-behaviour-anomaly-detection-

一个端到端机器学习系统,用于从 GitHub 事件流中检测异常用户行为。

Stars: 0 | Forks: 0

# github-behaviour-anomaly-detection- 一个端到端的机器学习系统,用于从 GitHub Archive 事件流中检测异常用户行为。 该项目展示了一个生产风格的机器学习流水线,包括 ETL、特征工程、模型训练、实验跟踪以及通过 API 进行实时推理。 特性 端到端 ML 流水线(ETL → 特征 → 模型 → API) 基于时间的行为异常检测 滚动统计、Z 分数归一化与尖峰检测 用于无监督异常检测的 IsolationForest MLflow 实验跟踪 + 超参数调优 用于实时与批量推理的 FastAPI 用于评估的合成数据生成 模块化、可生产的代码结构 🧱 项目结构 github-behavior-anomaly-detection/ ├── src/ │ ├── etl/ # 数据摄取与解析 │ ├── features/ # 特征工程 │ ├── training/ # 模型训练与调优 │ └── serving/ # FastAPI 推理 API ├── data/ # 原始与处理后的数据 ├── models/ # 保存的模型 ├── notebooks/ # 探索(可选) ├── configs/ # 配置文件 ├── tests/ # 单元测试 ├── README.md └── requirements.txt ⚙️ 流水线概述 GitHub Archive (JSON) ↓ ETL + 采样 ↓ 特征工程 (滚动均值、Z 分数、尖峰、差分) ↓ 孤立森林模型 ↓ MLflow 跟踪 ↓ FastAPI (/predict, /predict/batch) 🧠 特征工程 rolling_mean → 用户行为基线 diff → 相对于基线的偏差 spike → 归一化偏差 z_score → 用户级归一化 hour → 时间上下文 🤖 模型 算法:孤立森林 类型:无监督异常检测 污染率:0.005 将异常检测为相对于历史用户行为的偏差,而非绝对活动。 📊 实验跟踪(MLflow) 记录多次训练运行 超参数调优(20+ 次运行) 使用 MLflow UI 比较模型 基于异常稳定性选择最佳配置 运行: mlflow ui 打开:http://localhost:5000 🌐 API(FastAPI) 启动服务: uvicorn src.serving.app:app --reload 打开文档: http://127.0.0.1:8000/docs 🔹 单次预测 POST /predict { "z_score": 2.0, "spike": 1.5, "diff": 4000, "hour": 9 } 🔹 批量预测 POST /predict/batch { "records": [ {"z_score": 0.1, "spike": 0.2, "diff": 30, "hour": 10}, {"z_score": 2.5, "spike": 1.8, "diff": 5000, "hour": 3} ] } 📈 评估策略 由于异常检测是无监督的: 行为验证(检查异常) 合成异常注入 分数分布分析 ⚠️ 限制 有限的时间窗口(仅数小时数据) 部分用户活动稀疏 真实数据缺乏ground-truth标签 💡 关键收获 构建生产 ML 流水线 处理时序行为数据 设计无监督评估策略 通过 API 提供 ML 模型服务 实验跟踪与模型比较 🏁 结论 该项目展示了如何超越模型训练,迈向完整的 ML 系统设计,包括部署、监控与实验。 # GitHub 活动异常检测 一个端到端的机器学习系统,用于检测 GitHub Archive 事件数据中的异常用户行为。 旨在展示一个生产 ML 流水线:ETL → 特征工程 → 模型训练 → 服务 → 监控。 \--- ## 项目结构 ``` github-anomaly-detection/ ├── notebooks/ # Exploratory analysis and prototyping ├── src/ │ ├── etl/ # Data download, parsing, sampling │ ├── features/ # Feature engineering (rolling stats, z-scores, spikes) │ ├── training/ # Model training, evaluation, MLflow logging │ └── serving/ # FastAPI inference endpoint ├── tests/ # Unit tests for each module ├── configs/ # Hyperparameters and pipeline config (YAML) ├── models/ # Saved model artifacts (git-ignored) ├── docs/ # Architecture diagrams, design notes ├── Dockerfile ├── requirements.txt └── README.md ``` \--- ## 快速开始 ``` # 1. 安装依赖 pip install -r requirements.txt # 2. 下载数据(10 小时 GitHub Archive) python src/etl/download.py --hours 10 --date 2024-01-01 # 3. 构建特征 python src/features/build_features.py # 4. 训练模型 python src/training/train.py # 5. 提供预测 uvicorn src.serving.app:app --reload # POST http://localhost:8000/predict ``` \--- ## 流水线概览 ``` GH Archive (raw .json.gz) │ ▼ ETL / sampling ← reservoir sampling, 80k events │ ▼ Feature engineering ← rolling mean, z-score, spike, diff, hour │ ▼ IsolationForest ← contamination=0.005, 4 features │ ▼ MLflow experiment log ← params, metrics, model artifact │ ▼ FastAPI /predict ← real-time and batch inference ``` \--- ## 关键设计决策 | 决策 | 选择 | 原因 | |------|------|------| | 异常算法 | IsolationForest | 无监督,无需标签,速度快 | | 尖点指标 | `(count - rolling_mean) / (rolling_mean + 1)` | 归一化偏差,非原始比率 | | 用户过滤 | ≥ 5 个时间点 | 稳定的滚动统计,避免噪声 | | 污染率 | 0.005 | 避免强制标记弱异常 | | 特征集 | z_score, spike, diff, hour | 清晰信号,无冗余 | \--- ## 实验跟踪 所有运行记录到 MLflow。要查看: ``` mlflow ui # open http://localhost:5000 ``` \--- ## 下一步计划 * [ ] 添加数据漂移检测(特征分布上的 KS 检验) * [ ] 使用 Airflow 定期重新训练 * [ ] 在服务端点上添加 Prometheus 指标 * [ ] 使用 Docker Compose 搭建完整本地栈
标签:Apex, API服务, AV绕过, ETL, FastAPI, GitHub行为分析, IsolationForest, JavaCC, MLflow, Z-score归一化, 事件流处理, 合成数据, 实时推理, 实验跟踪, 尖峰检测, 异常检测, 数据管道, 无监督学习, 时间序列异常, 机器学习, 模块化代码, 模型训练, 模型部署, 滚动统计, 特征工程, 生产级代码结构, 用户行为异常检测, 端到端ML管道, 超参数调优, 软件工程, 逆向工具