# kactlabs/prettymetrics architecture

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

- Interactive diagram: https://gitdiagram.com/kactlabs/prettymetrics
- Repository: https://github.com/kactlabs/prettymetrics

## Overview

Pretty Metrics is a Python library for fitting many classification or regression algorithms to supplied train/test data and comparing their scores. The principal workflow is to pass the split data to the appropriate API, which preprocesses features, trains and evaluates candidate models, and returns a ranked metrics table with optional predictions and fitted models. The README documents both task types. The separate Streamlit demo adds CSV upload, regression comparison, plots, and downloads. The model internals are represented at module level because the excerpts omit portions of both fit implementations.

Main entry points: [`prettymetrics/reg.py`](https://github.com/kactlabs/prettymetrics/blob/main/prettymetrics/reg.py) (Regressor), [`app/app.py`](https://github.com/kactlabs/prettymetrics/blob/main/app/app.py) (Streamlit comparison app), [`prettymetrics/clf.py`](https://github.com/kactlabs/prettymetrics/blob/main/prettymetrics/clf.py) (Classifier)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["Library API"]
end

subgraph group_classification["Classification"]
  node_clf["Classifier<br/>[clf.py]"]
  node_clfprep["Feature preprocessing<br/>[clf.py]"]
  node_clfestimators["Classifier candidates<br/>[clf.py]"]
  node_clfmetrics["Classification scores<br/>[clf.py]"]
end

subgraph group_regression["Regression"]
  node_reg["Regressor<br/>[reg.py]"]
  node_regprep["Feature preprocessing<br/>[reg.py]"]
  node_regestimators["Regressor candidates<br/>[reg.py]"]
  node_regmetrics["Regression scores<br/>[reg.py]"]
end

subgraph group_demo["Streamlit Demo"]
  node_app["Streamlit comparison app<br/>[app.py]"]
  node_demo_results["Tables, plots, downloads<br/>[app.py]"]
end

node_caller(("Python caller"))
node_sklearn["Scikit-learn"]
node_boosters["XGBoost / LightGBM"]
node_demo_user(("Demo user"))
node_csv["Uploaded CSV"]

node_caller -->|"supplies split data"| node_clf
node_caller -->|"supplies split data"| node_reg
node_clf -->|"preprocesses features"| node_clfprep
node_clf -->|"fits candidates"| node_clfestimators
node_clfestimators -->|"uses estimators"| node_sklearn
node_clfestimators -.->|"uses optional estimators"| node_boosters
node_clf -->|"returns scores"| node_clfmetrics
node_reg -->|"preprocesses features"| node_regprep
node_reg -->|"fits candidates"| node_regestimators
node_regestimators -->|"uses estimators"| node_sklearn
node_regestimators -.->|"uses optional estimators"| node_boosters
node_reg -->|"returns scores"| node_regmetrics
node_demo_user -->|"uses app"| node_app
node_demo_user -->|"uploads data"| node_csv
node_app -->|"calls fit"| node_reg
node_csv -->|"provides rows"| node_app
node_app -->|"renders and downloads"| node_demo_results
node_reg -->|"returns metrics"| node_app

click node_clf "https://github.com/kactlabs/prettymetrics/blob/main/prettymetrics/clf.py"
click node_clfprep "https://github.com/kactlabs/prettymetrics/blob/main/prettymetrics/clf.py"
click node_clfestimators "https://github.com/kactlabs/prettymetrics/blob/main/prettymetrics/clf.py"
click node_clfmetrics "https://github.com/kactlabs/prettymetrics/blob/main/prettymetrics/clf.py"
click node_reg "https://github.com/kactlabs/prettymetrics/blob/main/prettymetrics/reg.py"
click node_regprep "https://github.com/kactlabs/prettymetrics/blob/main/prettymetrics/reg.py"
click node_regestimators "https://github.com/kactlabs/prettymetrics/blob/main/prettymetrics/reg.py"
click node_regmetrics "https://github.com/kactlabs/prettymetrics/blob/main/prettymetrics/reg.py"
click node_app "https://github.com/kactlabs/prettymetrics/blob/main/app/app.py"
click node_demo_results "https://github.com/kactlabs/prettymetrics/blob/main/app/app.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_clf,node_clfprep,node_clfestimators,node_clfmetrics toneAmber
class node_reg,node_regprep,node_regestimators,node_regmetrics toneMint
class node_app,node_demo_results toneRose
class node_caller,node_sklearn,node_boosters,node_csv toneIndigo
class node_demo_user toneBlue
```

## Components

### Classification

- [Classifier](https://github.com/kactlabs/prettymetrics/blob/main/prettymetrics/clf.py): `prettymetrics/clf.py`
- [Feature preprocessing](https://github.com/kactlabs/prettymetrics/blob/main/prettymetrics/clf.py): `prettymetrics/clf.py`
- [Classifier candidates](https://github.com/kactlabs/prettymetrics/blob/main/prettymetrics/clf.py): `prettymetrics/clf.py`
- [Classification scores](https://github.com/kactlabs/prettymetrics/blob/main/prettymetrics/clf.py): `prettymetrics/clf.py`

### Regression

- [Regressor](https://github.com/kactlabs/prettymetrics/blob/main/prettymetrics/reg.py): `prettymetrics/reg.py`
- [Feature preprocessing](https://github.com/kactlabs/prettymetrics/blob/main/prettymetrics/reg.py): `prettymetrics/reg.py`
- [Regressor candidates](https://github.com/kactlabs/prettymetrics/blob/main/prettymetrics/reg.py): `prettymetrics/reg.py`
- [Regression scores](https://github.com/kactlabs/prettymetrics/blob/main/prettymetrics/reg.py): `prettymetrics/reg.py`

### Streamlit Demo

- [Streamlit comparison app](https://github.com/kactlabs/prettymetrics/blob/main/app/app.py): `app/app.py`
- [Tables, plots, downloads](https://github.com/kactlabs/prettymetrics/blob/main/app/app.py): `app/app.py`

### Other components

- **Python caller**
- **Scikit-learn**
- **XGBoost / LightGBM**
- **Demo user**
- **Uploaded CSV**

## Connections

- Python caller → Classifier: supplies split data
- Python caller → Regressor: supplies split data
- Classifier → Feature preprocessing: preprocesses features
- Classifier → Classifier candidates: fits candidates
- Classifier candidates → Scikit-learn: uses estimators
- Classifier candidates → XGBoost / LightGBM: uses optional estimators
- Classifier → Classification scores: returns scores
- Regressor → Feature preprocessing: preprocesses features
- Regressor → Regressor candidates: fits candidates
- Regressor candidates → Scikit-learn: uses estimators
- Regressor candidates → XGBoost / LightGBM: uses optional estimators
- Regressor → Regression scores: returns scores
- Demo user → Streamlit comparison app: uses app
- Demo user → Uploaded CSV: uploads data
- Streamlit comparison app → Regressor: calls fit
- Uploaded CSV → Streamlit comparison app: provides rows
- Streamlit comparison app → Tables, plots, downloads: renders and downloads
- Regressor → Streamlit comparison app: returns metrics
