kryptbakar/AI-Integrated-Intrusion-Detection-System
GitHub: kryptbakar/AI-Integrated-Intrusion-Detection-System
一个结合 CatBoost 和 LOF 的机器学习入侵检测系统,提供完整的训练 pipeline 和实时 Streamlit 推理仪表板,用于区分正常与恶意网络流量。
Stars: 1 | Forks: 0
# AI 集成入侵检测系统 🚨🧠
一个面向生产环境、本地优先的入侵检测原型,结合了监督式梯度提升分类器 (CatBoost) 与无监督异常检测器 (Local Outlier Factor)。该仓库包含一个 Streamlit 推理应用、完整的本地训练 pipeline,以及用于评估和可解释性的支持性产物。
## 目录
- 🚀 项目概述
- 🧾 面向招聘者的项目摘要(你需要了解的内容)
- ✨ 核心技术特性
- 🛠️ 技术栈与依赖项
- 📁 项目结构(详细)
- 🧩 安装与设置(训练与运行)
- ▶️ 如何在本地训练(确切脚本与生成的产物)
- ▶️ 如何运行 Streamlit 应用(推理)
- 📦 保存的产物与文件格式
- 🔍 用于本地训练的文件 — 详尽的逐文件分析
- ✅ 注意事项与后续步骤
## 🚀 项目概述
本仓库实现了一个混合入侵检测工作流,结合了以下内容:
- CatBoost(监督式二分类器),用于预测攻击与正常流量;
- Local Outlier Factor (LOF) 作为仅在正常流量上训练的异常检测器。
这种混合投票策略在任一检测器发出警报时(OR 逻辑)即将样本标记为恶意,在通过特征统计信息和保存的指标保持可解释性的同时,优先考虑检测效果(高召回率)。
## 🧾 项目摘要(你需要了解的内容)
本项目展示了在生产级 ML 岗位中极具价值的端到端能力:
- 针对不平衡分类的实用模型选择:用 CatBoost + LOF 替代 XGBoost + OCSVM,以提升速度并更好地处理类别型/不平衡数据。
- 防数据泄露设计:严格的时间序列分割(无打乱)、仅在训练集上拟合 scaler,并针对可疑的指标值自动发出泄露警告。
- 不平衡数据处理与重采样专长:备用的简单重采样,以及使用 imbalanced-learn 的 RandomUnderSampler、SMOTE 和 ADASYN 的高阶 pipeline。
- 模型工程与部署就绪:训练脚本对模型、scaler、特征名称进行序列化,并生成用于指标和样本预测的 JSON 产物 — 随时可用于 Streamlit 部署。
- 性能与扩展性考量:对正常数据进行采样以大幅减少 LOF 的训练时间,配置多线程 CatBoost,并进行准确的训练耗时报告。
- 可复现性与产物:保存 Pickle 和 JSON 输出,用于可复现的推理和仪表板展示。
## ✨ 核心技术特性
- 混合集成:CatBoost 分类器 + LOF 异常检测器,采用 OR 投票以最大化召回率。
- 防泄露 pipeline:严格按时间顺序的训练/测试集分割,且仅在训练集上拟合 scaler。
- 高阶平衡策略:欠采样 + SMOTE + ADASYN(当 imbalanced-learn 可用时),并提供向简单过采样的稳健回退。
- LOF 优化:仅在正常样本上训练,可配置采样比例,以减少大型数据集上的 LOF 训练时间。
- 全面的产物生成:训练好的模型 pickle、指标 JSON、样本预测 JSON 以及特征统计 JSON,可供 Streamlit 直接使用。
## 🛠️ 技术栈与依赖项
徽章(主要):
[](https://www.python.org/)
[](https://streamlit.io/)
[](https://catboost.ai/)
[](https://scikit-learn.org/)
[](https://imbalanced-learn.org/)
主要包(来自仓库文件):
- streamlit
- numpy
- pandas
- scikit-learn
- catboost
- imbalanced-learn(可选;用于训练)
- matplotlib, seaborn(可视化)
- gdown(暗示在其他流程中存在模型下载辅助工具)
提供了两套依赖要求:
- requirements_catboost_lof_training.txt — 用于训练(包含 imbalanced-learn)
- requirements_catboost_lof_inference.txt — 仅用于推理(不包含 imbalanced-learn)
- requirements.txt — Streamlit 推理通用依赖
## 📁 项目结构(详细)
根目录(主要文件及用途)
- .devcontainer/ — 可选的 devcontainer 配置(可复现环境)
- .streamlit/ — Streamlit 配置(UI 设置)
- app.py — 主 Streamlit 推理应用(UI + 模型加载)
- pipeline_catboost_lof.py — 实现 CatBoost + LOF 混合的核心训练 pipeline
- train_catboost_lof.py — 运行 pipeline 并写入产物的便捷训练脚本
- requirements.txt — 推理依赖(streamlit + 可视化库)
- requirements_catboost_lof_inference.txt — 仅推理依赖
- requirements_catboost_lof_training.txt — 仅训练依赖(包含 imbalanced-learn)
- runtime.txt — runtime 提示(平台)
- feature_stats.json — 用于 Streamlit 仪表板的示例特征统计
- sample_predictions.json — 用于 Streamlit 演示的示例预测
- metrics.json — 用于 Streamlit 演示的示例指标
- sample_predictions_catboost_lof.json — (由训练脚本生成)CatBoost+LOF 的示例预测
- trained_models_catboost_lof.pkl — (由训练脚本生成)序列化的模型与元数据
- feature_stats_catboost_lof.json — (由训练脚本生成)训练特征统计
- metrics_catboost_lof.json — (由训练脚本生成)训练指标
- catboost_lof_results.csv — (当直接运行 pipeline 时生成)
注意:上述部分文件(带有 _catboost_lof 后缀)是在运行包含的本地训练脚本时创建的。如果未出现,请运行训练以生成它们。
## 🔍 用于本地训练的文件 — 详尽的逐文件分析
以下是您提供的聚焦于训练的文件,附带详细的技术说明(可用作面试时的谈资)。
1. pipeline_catboost_lof.py
- 目的:封装了完整的 CatBoost + LOF 训练、评估和预测 pipeline。
- 关键设计决策:
- 时间序列分割:在 temporal_split() 中实现 — 使用按时间顺序的分割,不进行打乱,以避免跨时间的数据泄露。
- 稳健清洗:如果存在,则将 "Flow Bytes/s" 和 "Flow Packets/s" 中的 +/-inf 替换为 NaN,并将 'Label' 转换为二进制(BENIGN -> 0,其他 -> 1)。
- 预处理:仅选择数值型特征;使用训练集的中位数填充缺失值(使用训练统计信息应用于测试集)。
- 缩放:仅在训练集上拟合 StandardScaler (scale_features)。
- 类别不平衡处理:
- 当 imbalanced-learn 可用时:aggressive_balance() 运行三步平衡方法 — 可选的轻度 RandomUnderSampler,接着使用 SMOTE 平衡至 1:1,最后使用 ADASYN 进行微调。这是一个处理类别不平衡的强大 pipeline。
- 如果未安装 imbalanced-learn:_simple_balance() 会回退到 sklearn.utils.resample 对少数类进行过采样,直到达到平衡。
- CatBoost 模型:
- 配置 CatBoostClassifier 参数 iterations=500, depth=10, learning_rate=0.05, Logloss, eval_metric=AUC。
- class_weights 设置为按 n_neg / n_pos 比例平衡。
- thread_count=-1 以使用所有 CPU 核心;默认 task_type='CPU'(可切换为 GPU)。
- LOF 模型:
- LOF 仅在正常样本上训练 (novelty=True),contamination 可配置,并且如果数据集很大,则对正常集使用采样以减少训练时间。
- 在推理时预测新颖性,并通过在 score_samples() 上的 logistic 转换将 LOF 输出转换为伪概率。
- 投票策略:
- OR 逻辑:如果 CatBoost 或 LOF 任一预测为攻击 (1),样本即被分类为攻击 — 最大化召回率。
- 评估:
- evaluate_model() 计算准确率、精确率、召回率、f1、roc_auc(如果有概率可用)、混淆矩阵、假阳率、假阴率,并在指标高得可疑(召回率和精确率 > 0.98)时打印出友好的人类可读摘要及泄露警告。
- Runtime 与性能:
- 分别报告 CatBoost 和 LOF 的训练时间,并进行汇总。
- LOF 采样比例默认为 0.3(30% 的正常样本),以大幅减少超大数据集上的 LOF 训练时间。
2. train_catboost_lof.py
- 目的:一个便捷脚本,运行 pipeline 并写入模型和产物文件供 Streamlit 使用。
- 行为:
- 使用默认超参数创建 pipeline(阈值 0.15,LOF contamination 0.1,neighbors 20,LOF 采样比例 0.3)。
- 调用 pipeline.run_pipeline(),然后打包:
- 训练好的模型 + scaler + 特征名称通过 pickle 打包进 trained_models_catboost_lof.pkl。
- 指标写入 metrics_catboost_lof.json。
- 样本预测写入 sample_predictions_catboost_lof.json(最多采样 1000 条记录)。
- 特征统计信息(均值/标准差/最小值/最大值)写入 feature_stats_catboost_lof.json。
- 输出旨在直接供 Streamlit 应用使用 — 无需额外的胶水代码。
- 安全检查:
- 如果未找到 `merged_output.csv`,则以错误退出。
3. requirements_catboost_lof_training.txt
- 目的:特定于训练的依赖列表。
- 重要包:
- imbalanced-learn==0.11.0 — 在高阶平衡中被大量使用 (RandomUnderSampler, SMOTE, ADASYN)。
4. requirements_catboost_lof_inference.txt
- 目的:仅推理依赖(Streamlit, CatBoost, scikit-learn 等)— 占用面比训练小。
实际意义与面试笔记:
- 该仓库展示了对真实运营问题的关注:类别不平衡、时间序列泄露、训练时间限制(采样)、多模型混合、产物序列化。
- 代码展现了对监督和无监督检测技术以及标准 ML 库的熟悉程度。
## 🧩 安装与设置
1. 克隆仓库
```
git clone https://github.com/aliuzair1/AI-Integrated-Intrusion-Detection-System.git
cd AI-Integrated-Intrusion-Detection-System
```
2. 创建并激活虚拟环境
```
python -m venv .venv
# macOS / Linux
source .venv/bin/activate
# Windows (PowerShell)
.venv\Scripts\Activate.ps1
```
3. 安装依赖项
- 用于本地训练(推荐):
```
pip install -r requirements_catboost_lof_training.txt
```
- 仅用于推理/Streamlit:
```
pip install -r requirements_catboost_lof_inference.txt
# 或者为 Streamlit app 使用通用的 requirements.txt
pip install -r requirements.txt
```
4. 放置训练数据集
- 训练脚本期望项目根目录中存在一个名为 `merged_output.csv` 的 CSV 文件。如果您的文件名不同,请将路径传递给训练脚本。
## ▶️ 如何在本地训练(确切脚本与生成的产物)
使用提供的训练脚本进行训练(这将运行整个 pipeline 并保存产物):
```
python train_catboost_lof.py
```
train_catboost_lof.py 的执行内容(摘要):
- 使用调优后的默认值从 pipeline_catboost_lof.py 实例化 CatBoostLOFPipeline。
- 运行整个 pipeline(加载 -> 时间序列分割 -> 预处理 -> 平衡 -> 训练 CatBoost -> 训练 LOF -> 评估)。
- 序列化以下文件(保存到项目根目录):
- trained_models_catboost_lof.pkl(包含 CatBoost 模型、LOF 模型、scaler、特征名称、阈值、配置的 pickle)
- metrics_catboost_lof.json(训练指标 + 元数据)
- sample_predictions_catboost_lof.json(用于仪表板的预测样本)
- feature_stats_catboost_lof.json(特征的均值、标准差、最小值、最大值)
- 预计训练时间:在典型的多核 CPU 上约 4–6 分钟(pipeline 会报告耗时)。
重要提示:如果不存在 `merged_output.csv`,脚本将报错退出 — 请将数据集放置在根目录中或更新路径。
## ▶️ 如何运行 Streamlit 应用(推理)
1. 确保已安装推理依赖项:
```
pip install -r requirements_catboost_lof_inference.txt
```
2. 放置由训练生成的模型产物(或将其下载到仓库根目录)。预期产物(训练脚本使用的名称;app.py 可能会查找稍有不同的名称 — 请相应更新):
- trained_models_catboost_lof.pkl (或 app.py 预期的已训练模型)
- sample_predictions_catboost_lof.json(用于演示)
- feature_stats_catboost_lof.json
- metrics_catboost_lof.json
3. 运行 Streamlit
```
streamlit run app.py
```
Streamlit 默认将在 http://localhost:8501 打开。
如果应用预期模型在不同的路径,或预期从 Google Drive 下载,请检查 `app.py` 并更新模型路径,或设置环境占位符如 [MODEL_DRIVE_ID]。
## 📦 保存的产物与文件格式(训练后预期内容)
- trained_models_catboost_lof.pkl — 包含以下键的 Pickle 文件:
- 'catboost_model' :BoostClassifier 对象
- 'lof_model' : LocalOutlierFactor 对象
- 'scaler' : StandardScaler 对象
- 'feature_names' : 特征列列表
- 'catboost_threshold' : float
- 'config' : 元数据字典(采样、neighbors、test_size、training_date)
- metrics_catboost_lof.json — 包含评估指标和元数据的 JSON(准确率、精确率、召回率、f1、roc_auc、混淆矩阵计数、训练时间)
- sample_predictions_catboost_lof.json — 包含数组的 JSON:y_true, y_pred_catboost, y_pred_lof, y_pred_voting, proba 数组
- feature_stats_catboost_lof.json — 包含每个特征的 'means', 'stds', 'mins', 'maxs' 的 JSON(根据缩放后的 X_train 计算)
这些产物设计为直接由 Streamlit 应用使用以进行可视化和演示。
## ✅ 注意事项
- 该仓库包含在本地复现结果所需的训练和推理部分。要完全运行训练,请在项目根目录放置一个名为 `merged_output.csv` 的 CSV 文件,或者更改 `train_catboost_lof.py` 中的路径。
标签:Apex, CatBoost, Kubernetes, Streamlit, 入侵检测系统, 安全数据湖, 异常检测, 机器学习, 网络流量分析, 访问控制, 逆向工具