# kulitipri/project_2 architecture

> Architecture diagram of the GitHub repository kulitipri/project_2, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/kulitipri/project_2
- Repository: https://github.com/kulitipri/project_2

## Overview

IDS ML Pipeline turns CICIDS network-traffic CSVs into trained attack classifiers and evaluation reports. Its main workflow is config-driven preprocessing and splitting, model training and tuning, then test evaluation; trained artifacts also support new-file and Streamlit predictions. Separate branches detect unknown attacks with Isolation Forest and explain model features with SHAP. The README documents cross-validation, class-imbalance options, threshold tuning, and visualizations. Sampled excerpts establish key module behavior, but some orchestration and subsystem wiring is inferred from README descriptions, so uncertain internal links are omitted.

Main entry points: [`main.py`](https://github.com/kulitipri/project_2/blob/main/main.py) (Pipeline Orchestrator), [`src/utils.py`](https://github.com/kulitipri/project_2/blob/main/src/utils.py) (Model and Data Artifacts), [`src/train.py`](https://github.com/kulitipri/project_2/blob/main/src/train.py) (Baseline Training), [`src/data_preprocessing.py`](https://github.com/kulitipri/project_2/blob/main/src/data_preprocessing.py) (Preprocess and Split)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_pipeline["Pipeline Core"]
  node_main["Pipeline Orchestrator<br/>[main.py]"]
  node_preprocess["Preprocess and Split"]
  node_configs["Pipeline Config<br/>[default.yaml]"]
end

subgraph group_modeling["Modeling and Evaluation"]
  node_train["Baseline Training<br/>[train.py]"]
  node_tuning["Hyperparameter Tuning<br/>[train.py]"]
  node_crossval["Cross Validation<br/>[train.py]"]
  node_evaluation["Test Evaluation<br/>[evaluate.py]"]
  node_thresholds["Class Threshold Tuning<br/>[evaluate.py]"]
end

subgraph group_inference["Inference Interfaces"]
  node_prediction["CSV Prediction<br/>[predict.py]"]
  node_webapp["Streamlit Demo<br/>[app.py]"]
end

subgraph group_analysis["Detection and Explanation"]
  node_anomaly["Anomaly Detection<br/>[anomaly.py]"]
  node_explain["SHAP Explanation<br/>[explain.py]"]
  node_visualization["Pipeline Charts<br/>[visualization.py]"]
end

subgraph group_shared["Shared Resources"]
  node_artifacts["Model and Data Artifacts<br/>[utils.py]"]
  node_utils["Config and Artifact Utilities<br/>[utils.py]"]
end

node_cli(("CLI User"))
node_webuser(("Web User"))
node_traffic["CICIDS CSVs"]

node_cli -->|"runs"| node_main
node_webuser -->|"uploads CSV"| node_webapp
node_traffic -->|"loads traffic"| node_preprocess
node_main -->|"loads config"| node_utils
node_main -->|"runs preprocessing"| node_preprocess
node_main -->|"runs training"| node_train
node_main -->|"runs evaluation"| node_evaluation
node_main -->|"dispatches prediction"| node_prediction
node_main -->|"dispatches detection"| node_anomaly
node_main -->|"dispatches explanation"| node_explain
node_main -->|"reads settings"| node_configs
node_preprocess -->|"reads settings"| node_configs
node_preprocess -->|"writes splits"| node_artifacts
node_preprocess -->|"generates charts"| node_visualization
node_train -->|"tunes models"| node_tuning
node_train -->|"runs validation"| node_crossval
node_train -->|"saves models"| node_artifacts
node_train -->|"generates comparisons"| node_visualization
node_evaluation -->|"tunes class thresholds"| node_thresholds
node_evaluation -->|"saves evaluation"| node_artifacts
node_evaluation -->|"generates charts"| node_visualization
node_prediction -->|"loads inference artifacts"| node_artifacts
node_webapp -->|"loads config and artifacts"| node_utils
node_webapp -->|"prepares input"| node_prediction
node_anomaly -->|"loads and saves detector"| node_artifacts
node_anomaly -->|"plots scores"| node_visualization
node_explain -->|"loads model"| node_artifacts
node_explain -->|"saves explanation chart"| node_visualization

click node_main "https://github.com/kulitipri/project_2/blob/main/main.py"
click node_preprocess "https://github.com/kulitipri/project_2/blob/main/src/data_preprocessing.py"
click node_configs "https://github.com/kulitipri/project_2/blob/main/configs/default.yaml"
click node_train "https://github.com/kulitipri/project_2/blob/main/src/train.py"
click node_tuning "https://github.com/kulitipri/project_2/blob/main/src/train.py"
click node_crossval "https://github.com/kulitipri/project_2/blob/main/src/train.py"
click node_evaluation "https://github.com/kulitipri/project_2/blob/main/src/evaluate.py"
click node_thresholds "https://github.com/kulitipri/project_2/blob/main/src/evaluate.py"
click node_prediction "https://github.com/kulitipri/project_2/blob/main/src/predict.py"
click node_webapp "https://github.com/kulitipri/project_2/blob/main/app.py"
click node_anomaly "https://github.com/kulitipri/project_2/blob/main/src/anomaly.py"
click node_explain "https://github.com/kulitipri/project_2/blob/main/src/explain.py"
click node_visualization "https://github.com/kulitipri/project_2/blob/main/src/visualization.py"
click node_artifacts "https://github.com/kulitipri/project_2/blob/main/src/utils.py"
click node_utils "https://github.com/kulitipri/project_2/blob/main/src/utils.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_preprocess,node_configs,node_cli,node_webuser toneBlue
class node_train,node_tuning,node_crossval,node_evaluation,node_thresholds toneAmber
class node_prediction,node_webapp toneMint
class node_anomaly,node_explain,node_visualization toneRose
class node_artifacts,node_utils,node_traffic toneIndigo
```

## Components

### Pipeline Core

- [Pipeline Orchestrator](https://github.com/kulitipri/project_2/blob/main/main.py): `main.py`
- [Preprocess and Split](https://github.com/kulitipri/project_2/blob/main/src/data_preprocessing.py): `src/data_preprocessing.py`
- [Pipeline Config](https://github.com/kulitipri/project_2/blob/main/configs/default.yaml): `configs/default.yaml`

### Modeling and Evaluation

- [Baseline Training](https://github.com/kulitipri/project_2/blob/main/src/train.py): `src/train.py`
- [Hyperparameter Tuning](https://github.com/kulitipri/project_2/blob/main/src/train.py): `src/train.py`
- [Cross Validation](https://github.com/kulitipri/project_2/blob/main/src/train.py): `src/train.py`
- [Test Evaluation](https://github.com/kulitipri/project_2/blob/main/src/evaluate.py): `src/evaluate.py`
- [Class Threshold Tuning](https://github.com/kulitipri/project_2/blob/main/src/evaluate.py): `src/evaluate.py`

### Inference Interfaces

- [CSV Prediction](https://github.com/kulitipri/project_2/blob/main/src/predict.py): `src/predict.py`
- [Streamlit Demo](https://github.com/kulitipri/project_2/blob/main/app.py): `app.py`

### Detection and Explanation

- [Anomaly Detection](https://github.com/kulitipri/project_2/blob/main/src/anomaly.py): `src/anomaly.py`
- [SHAP Explanation](https://github.com/kulitipri/project_2/blob/main/src/explain.py): `src/explain.py`
- [Pipeline Charts](https://github.com/kulitipri/project_2/blob/main/src/visualization.py): `src/visualization.py`

### Shared Resources

- [Model and Data Artifacts](https://github.com/kulitipri/project_2/blob/main/src/utils.py): `src/utils.py`
- [Config and Artifact Utilities](https://github.com/kulitipri/project_2/blob/main/src/utils.py): `src/utils.py`

### Other components

- **CLI User**
- **Web User**
- **CICIDS CSVs**

## Connections

- CLI User → Pipeline Orchestrator: runs
- Web User → Streamlit Demo: uploads CSV
- CICIDS CSVs → Preprocess and Split: loads traffic
- Pipeline Orchestrator → Config and Artifact Utilities: loads config
- Pipeline Orchestrator → Preprocess and Split: runs preprocessing
- Pipeline Orchestrator → Baseline Training: runs training
- Pipeline Orchestrator → Test Evaluation: runs evaluation
- Pipeline Orchestrator → CSV Prediction: dispatches prediction
- Pipeline Orchestrator → Anomaly Detection: dispatches detection
- Pipeline Orchestrator → SHAP Explanation: dispatches explanation
- Pipeline Orchestrator → Pipeline Config: reads settings
- Preprocess and Split → Pipeline Config: reads settings
- Preprocess and Split → Model and Data Artifacts: writes splits
- Preprocess and Split → Pipeline Charts: generates charts
- Baseline Training → Hyperparameter Tuning: tunes models
- Baseline Training → Cross Validation: runs validation
- Baseline Training → Model and Data Artifacts: saves models
- Baseline Training → Pipeline Charts: generates comparisons
- Test Evaluation → Class Threshold Tuning: tunes class thresholds
- Test Evaluation → Model and Data Artifacts: saves evaluation
- Test Evaluation → Pipeline Charts: generates charts
- CSV Prediction → Model and Data Artifacts: loads inference artifacts
- Streamlit Demo → Config and Artifact Utilities: loads config and artifacts
- Streamlit Demo → CSV Prediction: prepares input
- Anomaly Detection → Model and Data Artifacts: loads and saves detector
- Anomaly Detection → Pipeline Charts: plots scores
- SHAP Explanation → Model and Data Artifacts: loads model
- SHAP Explanation → Pipeline Charts: saves explanation chart
