# cashyo/email_classification_project architecture

> Architecture diagram of the GitHub repository cashyo/email_classification_project, 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/cashyo/email_classification_project
- Repository: https://github.com/cashyo/email_classification_project

## Overview

This is an academic spam-message classification project. Its user-facing workflow accepts a message, cleans and vectorizes it, applies a selected trained classifier, and displays a spam/not-spam result with confidence. Separate workflows build a combined dataset, train Logistic Regression, Naive Bayes, and Random Forest variants, then compare and report their performance. The app and preprocessing/training paths are supported by sampled source; evaluation wiring is described by the README and tree, but its implementation was not sampled.

Main entry points: [`analysis/preprocessing.py`](https://github.com/cashyo/email_classification_project/blob/main/analysis/preprocessing.py) (Text preprocessing), [`app/streamlit_app.py`](https://github.com/cashyo/email_classification_project/blob/main/app/streamlit_app.py) (Streamlit interface), [`analysis/build_unified_dataset.py`](https://github.com/cashyo/email_classification_project/blob/main/analysis/build_unified_dataset.py) (Dataset builder), [`data/unified_spam_dataset.csv`](https://github.com/cashyo/email_classification_project/blob/main/data/unified_spam_dataset.csv) (Unified dataset)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_data["Datasets"]
  node_spam_csv["SMS dataset<br/>[spam.csv]"]
  node_email_csv["Email dataset"]
  node_unified_builder["Dataset builder"]
  node_unified_csv["Unified dataset"]
end

subgraph group_training["Model Training"]
  node_preprocessing["Text preprocessing<br/>[preprocessing.py]"]
  node_logreg_train["Logistic training<br/>[train_logreg.py]"]
  node_unified_logreg_train["Unified logistic"]
  node_nb_train["Naive Bayes training"]
  node_rf_train["Random Forest training<br/>[train_rf.py]"]
  node_unified_rf_train["Unified forest"]
  node_model_artifacts["Saved model artifacts"]
end

subgraph group_runtime["Live Classification"]
  node_streamlit["Streamlit interface<br/>[streamlit_app.py]"]
  node_classifier["Selected classifier"]
  node_result["Prediction and confidence"]
end

subgraph group_evaluation["Model Evaluation"]
  node_comparison["Model comparison<br/>[compare_models.py]"]
  node_evaluation_results["Evaluation results"]
  node_plots["Comparison plots<br/>[generate_plots.py]"]
  node_report["PDF report"]
  node_report_outputs["Report artifacts"]
end

node_user(("Message user"))

node_spam_csv -->|"reads"| node_unified_builder
node_email_csv -->|"reads"| node_unified_builder
node_unified_builder -->|"cleans with"| node_preprocessing
node_unified_builder -->|"writes"| node_unified_csv
node_spam_csv -->|"loads via"| node_preprocessing
node_email_csv -->|"loads via"| node_preprocessing
node_preprocessing -->|"provides data"| node_logreg_train
node_preprocessing -->|"provides data"| node_nb_train
node_preprocessing -->|"provides data"| node_rf_train
node_logreg_train -->|"saves"| node_model_artifacts
node_unified_csv -->|"reads"| node_unified_logreg_train
node_unified_csv -->|"reads"| node_unified_rf_train
node_unified_logreg_train -->|"cleans with"| node_preprocessing
node_unified_rf_train -->|"cleans with"| node_preprocessing
node_unified_logreg_train -->|"saves"| node_model_artifacts
node_unified_rf_train -->|"saves"| node_model_artifacts
node_nb_train -->|"saves"| node_model_artifacts
node_rf_train -->|"saves"| node_model_artifacts
node_user -->|"enters message"| node_streamlit
node_streamlit -->|"cleans message"| node_preprocessing
node_streamlit -->|"loads selection"| node_model_artifacts
node_streamlit -->|"vectorizes and predicts"| node_classifier
node_model_artifacts -->|"provides model"| node_classifier
node_classifier -->|"returns prediction"| node_result
node_streamlit -->|"displays"| node_result
node_comparison -->|"writes metrics"| node_evaluation_results
node_evaluation_results -->|"provides metrics"| node_plots
node_plots -->|"provides charts"| node_report
node_evaluation_results -->|"provides summary"| node_report
node_report -->|"generates"| node_report_outputs

click node_spam_csv "https://github.com/cashyo/email_classification_project/blob/main/data/spam.csv"
click node_email_csv "https://github.com/cashyo/email_classification_project/blob/main/data/spam_ham_dataset.csv"
click node_unified_builder "https://github.com/cashyo/email_classification_project/blob/main/analysis/build_unified_dataset.py"
click node_unified_csv "https://github.com/cashyo/email_classification_project/blob/main/data/unified_spam_dataset.csv"
click node_preprocessing "https://github.com/cashyo/email_classification_project/blob/main/analysis/preprocessing.py"
click node_logreg_train "https://github.com/cashyo/email_classification_project/blob/main/train/train_logreg.py"
click node_unified_logreg_train "https://github.com/cashyo/email_classification_project/blob/main/train/train_logreg_unified.py"
click node_nb_train "https://github.com/cashyo/email_classification_project/blob/main/train/train_nb_streamlit.py"
click node_rf_train "https://github.com/cashyo/email_classification_project/blob/main/train/train_rf.py"
click node_unified_rf_train "https://github.com/cashyo/email_classification_project/blob/main/train/train_rf_unified.py"
click node_streamlit "https://github.com/cashyo/email_classification_project/blob/main/app/streamlit_app.py"
click node_comparison "https://github.com/cashyo/email_classification_project/blob/main/analysis/compare_models.py"
click node_evaluation_results "https://github.com/cashyo/email_classification_project/tree/main/analysis/results"
click node_plots "https://github.com/cashyo/email_classification_project/blob/main/analysis/generate_plots.py"
click node_report "https://github.com/cashyo/email_classification_project/blob/main/analysis/generate_pdf_report.py"
click node_report_outputs "https://github.com/cashyo/email_classification_project/tree/main/analysis/results"

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_spam_csv,node_email_csv,node_unified_builder,node_unified_csv,node_user toneBlue
class node_preprocessing,node_logreg_train,node_unified_logreg_train,node_nb_train,node_rf_train,node_unified_rf_train,node_model_artifacts toneAmber
class node_streamlit,node_classifier,node_result toneMint
class node_comparison,node_evaluation_results,node_plots,node_report,node_report_outputs toneRose
```

## Components

### Datasets

- [SMS dataset](https://github.com/cashyo/email_classification_project/blob/main/data/spam.csv): `data/spam.csv`
- [Email dataset](https://github.com/cashyo/email_classification_project/blob/main/data/spam_ham_dataset.csv): `data/spam_ham_dataset.csv`
- [Dataset builder](https://github.com/cashyo/email_classification_project/blob/main/analysis/build_unified_dataset.py): `analysis/build_unified_dataset.py`
- [Unified dataset](https://github.com/cashyo/email_classification_project/blob/main/data/unified_spam_dataset.csv): `data/unified_spam_dataset.csv`

### Model Training

- [Text preprocessing](https://github.com/cashyo/email_classification_project/blob/main/analysis/preprocessing.py): `analysis/preprocessing.py`
- [Logistic training](https://github.com/cashyo/email_classification_project/blob/main/train/train_logreg.py): `train/train_logreg.py`
- [Unified logistic](https://github.com/cashyo/email_classification_project/blob/main/train/train_logreg_unified.py): `train/train_logreg_unified.py`
- [Naive Bayes training](https://github.com/cashyo/email_classification_project/blob/main/train/train_nb_streamlit.py): `train/train_nb_streamlit.py`
- [Random Forest training](https://github.com/cashyo/email_classification_project/blob/main/train/train_rf.py): `train/train_rf.py`
- [Unified forest](https://github.com/cashyo/email_classification_project/blob/main/train/train_rf_unified.py): `train/train_rf_unified.py`
- **Saved model artifacts**

### Live Classification

- [Streamlit interface](https://github.com/cashyo/email_classification_project/blob/main/app/streamlit_app.py): `app/streamlit_app.py`
- **Selected classifier**
- **Prediction and confidence**

### Model Evaluation

- [Model comparison](https://github.com/cashyo/email_classification_project/blob/main/analysis/compare_models.py): `analysis/compare_models.py`
- [Evaluation results](https://github.com/cashyo/email_classification_project/tree/main/analysis/results): `analysis/results`
- [Comparison plots](https://github.com/cashyo/email_classification_project/blob/main/analysis/generate_plots.py): `analysis/generate_plots.py`
- [PDF report](https://github.com/cashyo/email_classification_project/blob/main/analysis/generate_pdf_report.py): `analysis/generate_pdf_report.py`
- [Report artifacts](https://github.com/cashyo/email_classification_project/tree/main/analysis/results): `analysis/results`

### Other components

- **Message user**

## Connections

- SMS dataset → Dataset builder: reads
- Email dataset → Dataset builder: reads
- Dataset builder → Text preprocessing: cleans with
- Dataset builder → Unified dataset: writes
- SMS dataset → Text preprocessing: loads via
- Email dataset → Text preprocessing: loads via
- Text preprocessing → Logistic training: provides data
- Text preprocessing → Naive Bayes training: provides data
- Text preprocessing → Random Forest training: provides data
- Logistic training → Saved model artifacts: saves
- Unified dataset → Unified logistic: reads
- Unified dataset → Unified forest: reads
- Unified logistic → Text preprocessing: cleans with
- Unified forest → Text preprocessing: cleans with
- Unified logistic → Saved model artifacts: saves
- Unified forest → Saved model artifacts: saves
- Naive Bayes training → Saved model artifacts: saves
- Random Forest training → Saved model artifacts: saves
- Message user → Streamlit interface: enters message
- Streamlit interface → Text preprocessing: cleans message
- Streamlit interface → Saved model artifacts: loads selection
- Streamlit interface → Selected classifier: vectorizes and predicts
- Saved model artifacts → Selected classifier: provides model
- Selected classifier → Prediction and confidence: returns prediction
- Streamlit interface → Prediction and confidence: displays
- Model comparison → Evaluation results: writes metrics
- Evaluation results → Comparison plots: provides metrics
- Comparison plots → PDF report: provides charts
- Evaluation results → PDF report: provides summary
- PDF report → Report artifacts: generates
