# hayachiq/credit-default-risk architecture

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

- Interactive diagram: https://gitdiagram.com/hayachiq/credit-default-risk
- Repository: https://github.com/hayachiq/credit-default-risk

## Overview

This is a credit-default risk modeling and decision-support project: it cleans applicant data, engineers SQL features, trains and evaluates classifiers, then exposes scoring and analysis through an API and dashboard. The main workflow is raw data → cleaning → feature engineering → model evaluation; independent branches add a WOE scorecard and income estimation, while saved predictions feed fairness and business-impact checks. The README documents these capabilities and the orchestration paths; source excerpts are partial, so unverified internal calls are omitted.

Main entry points: [`src/flow.py`](https://github.com/hayachiq/credit-default-risk/blob/main/src/flow.py) (Metaflow pipeline), [`dags/credit_risk_pipeline_dag.py`](https://github.com/hayachiq/credit-default-risk/blob/main/dags/credit_risk_pipeline_dag.py) (Airflow pipeline), [`src/build_features.py`](https://github.com/hayachiq/credit-default-risk/blob/main/src/build_features.py) (Feature builder), [`src/train_evaluate.py`](https://github.com/hayachiq/credit-default-risk/blob/main/src/train_evaluate.py) (Classifier training)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_pipeline["Risk pipeline"]
  node_raw["Raw applicants<br/>[cs-training.csv]"]
  node_cleaner["Data cleaning<br/>[clean_data.py]"]
  node_cleaned["Cleaned applicants"]
  node_sqlfeatures["SQL feature logic"]
  node_featurebuilder["Feature builder<br/>[build_features.py]"]
  node_features["Engineered features<br/>[features.parquet]"]
  node_referencewriter["Reference builder"]
end

subgraph group_models["Modeling and analysis"]
  node_trainer["Classifier training<br/>[train_evaluate.py]"]
  node_bundle["Model bundle"]
  node_predictions["Test predictions"]
  node_scorecard["WOE scorecard<br/>[scorecard.py]"]
  node_income["Income regression"]
  node_fairness["Fairness analysis<br/>[fairness_check.py]"]
  node_impact["Business simulation<br/>[business_impact.py]"]
end

subgraph group_serving["Scoring and exploration"]
  node_reference["Scoring reference"]
  node_api["Scoring API<br/>[api.py]"]
  node_dashboard["Interactive dashboard<br/>[app.py]"]
end

subgraph group_orchestration["Orchestration"]
  node_metaflow["Metaflow pipeline<br/>[flow.py]"]
  node_airflow["Airflow pipeline"]
end

node_analyst(("Risk analyst"))
node_applicant(("Applicant client"))

node_cleaner -->|"reads"| node_raw
node_cleaner -->|"writes"| node_cleaned
node_featurebuilder -->|"reads"| node_cleaned
node_featurebuilder -->|"executes"| node_sqlfeatures
node_featurebuilder -->|"writes"| node_features
node_trainer -->|"reads"| node_features
node_trainer -->|"writes"| node_bundle
node_trainer -->|"writes"| node_predictions
node_scorecard -->|"reads"| node_features
node_income -->|"reads"| node_cleaned
node_fairness -->|"reads"| node_predictions
node_impact -->|"reads"| node_predictions
node_referencewriter -->|"reads"| node_features
node_referencewriter -->|"writes"| node_reference
node_applicant -->|"submits applicant"| node_api
node_api -->|"loads model"| node_bundle
node_api -->|"loads reference"| node_reference
node_api -->|"returns risk score"| node_applicant
node_analyst -->|"explores results"| node_dashboard
node_dashboard -->|"reads"| node_features
node_dashboard -->|"reads"| node_bundle
node_dashboard -->|"reads"| node_predictions
node_metaflow -->|"runs"| node_cleaner
node_metaflow -->|"runs"| node_featurebuilder
node_metaflow -->|"runs"| node_trainer
node_metaflow -->|"runs"| node_scorecard
node_metaflow -->|"runs"| node_income
node_metaflow -->|"runs"| node_fairness
node_metaflow -->|"runs"| node_impact
node_metaflow -->|"runs"| node_referencewriter
node_airflow -.->|"runs"| node_cleaner
node_airflow -.->|"runs"| node_featurebuilder
node_airflow -.->|"runs"| node_trainer
node_airflow -.->|"runs"| node_scorecard
node_airflow -.->|"runs"| node_income
node_airflow -.->|"runs"| node_fairness
node_airflow -.->|"runs"| node_impact
node_airflow -.->|"runs"| node_referencewriter

click node_raw "https://github.com/hayachiq/credit-default-risk/blob/main/data/raw/cs-training.csv"
click node_cleaner "https://github.com/hayachiq/credit-default-risk/blob/main/src/clean_data.py"
click node_cleaned "https://github.com/hayachiq/credit-default-risk/blob/main/data/processed/cs-training-cleaned.csv"
click node_sqlfeatures "https://github.com/hayachiq/credit-default-risk/blob/main/sql/feature_engineering.sql"
click node_featurebuilder "https://github.com/hayachiq/credit-default-risk/blob/main/src/build_features.py"
click node_features "https://github.com/hayachiq/credit-default-risk/blob/main/data/features.parquet"
click node_trainer "https://github.com/hayachiq/credit-default-risk/blob/main/src/train_evaluate.py"
click node_bundle "https://github.com/hayachiq/credit-default-risk/blob/main/outputs/model_bundle.joblib"
click node_predictions "https://github.com/hayachiq/credit-default-risk/blob/main/outputs/test_predictions.parquet"
click node_scorecard "https://github.com/hayachiq/credit-default-risk/blob/main/src/scorecard.py"
click node_income "https://github.com/hayachiq/credit-default-risk/blob/main/src/income_regression.py"
click node_fairness "https://github.com/hayachiq/credit-default-risk/blob/main/src/fairness_check.py"
click node_impact "https://github.com/hayachiq/credit-default-risk/blob/main/src/business_impact.py"
click node_referencewriter "https://github.com/hayachiq/credit-default-risk/blob/main/src/save_scoring_reference.py"
click node_reference "https://github.com/hayachiq/credit-default-risk/blob/main/outputs/scoring_reference.json"
click node_api "https://github.com/hayachiq/credit-default-risk/blob/main/src/api.py"
click node_dashboard "https://github.com/hayachiq/credit-default-risk/blob/main/app.py"
click node_metaflow "https://github.com/hayachiq/credit-default-risk/blob/main/src/flow.py"
click node_airflow "https://github.com/hayachiq/credit-default-risk/blob/main/dags/credit_risk_pipeline_dag.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_raw,node_cleaner,node_cleaned,node_sqlfeatures,node_featurebuilder,node_features,node_referencewriter,node_applicant toneBlue
class node_trainer,node_bundle,node_predictions,node_scorecard,node_income,node_fairness,node_impact toneAmber
class node_reference,node_api,node_dashboard toneMint
class node_metaflow,node_airflow toneRose
class node_analyst toneIndigo
```

## Components

### Risk pipeline

- [Raw applicants](https://github.com/hayachiq/credit-default-risk/blob/main/data/raw/cs-training.csv): `data/raw/cs-training.csv`
- [Data cleaning](https://github.com/hayachiq/credit-default-risk/blob/main/src/clean_data.py): `src/clean_data.py`
- [Cleaned applicants](https://github.com/hayachiq/credit-default-risk/blob/main/data/processed/cs-training-cleaned.csv): `data/processed/cs-training-cleaned.csv`
- [SQL feature logic](https://github.com/hayachiq/credit-default-risk/blob/main/sql/feature_engineering.sql): `sql/feature_engineering.sql`
- [Feature builder](https://github.com/hayachiq/credit-default-risk/blob/main/src/build_features.py): `src/build_features.py`
- [Engineered features](https://github.com/hayachiq/credit-default-risk/blob/main/data/features.parquet): `data/features.parquet`
- [Reference builder](https://github.com/hayachiq/credit-default-risk/blob/main/src/save_scoring_reference.py): `src/save_scoring_reference.py`

### Modeling and analysis

- [Classifier training](https://github.com/hayachiq/credit-default-risk/blob/main/src/train_evaluate.py): `src/train_evaluate.py`
- [Model bundle](https://github.com/hayachiq/credit-default-risk/blob/main/outputs/model_bundle.joblib): `outputs/model_bundle.joblib`
- [Test predictions](https://github.com/hayachiq/credit-default-risk/blob/main/outputs/test_predictions.parquet): `outputs/test_predictions.parquet`
- [WOE scorecard](https://github.com/hayachiq/credit-default-risk/blob/main/src/scorecard.py): `src/scorecard.py`
- [Income regression](https://github.com/hayachiq/credit-default-risk/blob/main/src/income_regression.py): `src/income_regression.py`
- [Fairness analysis](https://github.com/hayachiq/credit-default-risk/blob/main/src/fairness_check.py): `src/fairness_check.py`
- [Business simulation](https://github.com/hayachiq/credit-default-risk/blob/main/src/business_impact.py): `src/business_impact.py`

### Scoring and exploration

- [Scoring reference](https://github.com/hayachiq/credit-default-risk/blob/main/outputs/scoring_reference.json): `outputs/scoring_reference.json`
- [Scoring API](https://github.com/hayachiq/credit-default-risk/blob/main/src/api.py): `src/api.py`
- [Interactive dashboard](https://github.com/hayachiq/credit-default-risk/blob/main/app.py): `app.py`

### Orchestration

- [Metaflow pipeline](https://github.com/hayachiq/credit-default-risk/blob/main/src/flow.py): `src/flow.py`
- [Airflow pipeline](https://github.com/hayachiq/credit-default-risk/blob/main/dags/credit_risk_pipeline_dag.py): `dags/credit_risk_pipeline_dag.py`

### Other components

- **Risk analyst**
- **Applicant client**

## Connections

- Data cleaning → Raw applicants: reads
- Data cleaning → Cleaned applicants: writes
- Feature builder → Cleaned applicants: reads
- Feature builder → SQL feature logic: executes
- Feature builder → Engineered features: writes
- Classifier training → Engineered features: reads
- Classifier training → Model bundle: writes
- Classifier training → Test predictions: writes
- WOE scorecard → Engineered features: reads
- Income regression → Cleaned applicants: reads
- Fairness analysis → Test predictions: reads
- Business simulation → Test predictions: reads
- Reference builder → Engineered features: reads
- Reference builder → Scoring reference: writes
- Applicant client → Scoring API: submits applicant
- Scoring API → Model bundle: loads model
- Scoring API → Scoring reference: loads reference
- Scoring API → Applicant client: returns risk score
- Risk analyst → Interactive dashboard: explores results
- Interactive dashboard → Engineered features: reads
- Interactive dashboard → Model bundle: reads
- Interactive dashboard → Test predictions: reads
- Metaflow pipeline → Data cleaning: runs
- Metaflow pipeline → Feature builder: runs
- Metaflow pipeline → Classifier training: runs
- Metaflow pipeline → WOE scorecard: runs
- Metaflow pipeline → Income regression: runs
- Metaflow pipeline → Fairness analysis: runs
- Metaflow pipeline → Business simulation: runs
- Metaflow pipeline → Reference builder: runs
- Airflow pipeline → Data cleaning: runs
- Airflow pipeline → Feature builder: runs
- Airflow pipeline → Classifier training: runs
- Airflow pipeline → WOE scorecard: runs
- Airflow pipeline → Income regression: runs
- Airflow pipeline → Fairness analysis: runs
- Airflow pipeline → Business simulation: runs
- Airflow pipeline → Reference builder: runs
