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 直接使用。 ## 🛠️ 技术栈与依赖项 徽章(主要): [![Python](https://img.shields.io/badge/Python-3.10%2B-blue)](https://www.python.org/) [![Streamlit](https://img.shields.io/badge/Streamlit-1.31.1-orange)](https://streamlit.io/) [![CatBoost](https://img.shields.io/badge/CatBoost-1.2.2-red)](https://catboost.ai/) [![scikit-learn](https://img.shields.io/badge/scikit--learn-1.3.2-green)](https://scikit-learn.org/) [![imbalanced-learn](https://img.shields.io/badge/imbalanced--learn-0.11.0-lightgrey)](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, 入侵检测系统, 安全数据湖, 异常检测, 机器学习, 网络流量分析, 访问控制, 逆向工具