Housing_Price_API / README.md
ANL2001's picture
added business interpretation & fixed token leakage
f4f5e62
|
Raw History Blame Contribute Delete
3.16 kB
---
title: Housing Price API
emoji: 💻
colorFrom: purple
colorTo: red
sdk: gradio
sdk_version: 6.20.0
python_version: "3.12"
app_file: app.py
pinned: false
license: mit
short_description: Production ML API for housing price prediction
---
# 🏠 House Price Predictor
A production-ready ML system that predicts residential house sale prices using a stacking ensemble trained on the [Kaggle Housing Prices dataset](https://www.kaggle.com/c/house-prices-advanced-regression-techniques) — **Top 16 / 4,000+ participants**.
**Stack:** scikit-learn · CatBoost · FastAPI · PostgreSQL · Docker · Gradio · Hugging Face Spaces
---
## Model
A stacking ensemble of three base learners with an SGDRegressor meta-model:
| Model | Role |
|---|---|
| GradientBoostingRegressor | Base learner |
| CatBoostRegressor | Base learner |
| KernelRidge (RBF) | Base learner |
| SGDRegressor | Meta-model |
Eight features are engineered at inference time: `TotalSF`, `TotalQualSF`, `Age`, `TimeSinceRemod`, `InteriorQualityScore`, `TotalBaths`, `HasPorchDeck`, `TotalPorchDeckSF`.
### Performance (80/20 hold-out split)
| Model | RMSLE | MAE | MAPE | R² |
|---|---|---|---|---|
| Baseline (predict mean price) | 0.397 | $55,453 | 32.6% | -0.00 |
| GradientBoostingRegressor | 0.118 | $13,027 | 8.0% | 0.912 |
| CatBoostRegressor | 0.116 | $12,793 | 7.9% | 0.914 |
| KernelRidge (RBF) | 0.124 | $13,667 | 8.4% | 0.902 |
| **Stacking Ensemble** | **0.117** | **$12,997** | **7.9%** | **0.914** |
*Regenerate via `python -m ml.export_model` — see `ml/artifacts/metrics.json` for raw values.*
**Interpretation:** on a market with a median sale price of $163,000, the model's typical prediction is off by about **8%** (~$13,000) — a ~24x reduction in error versus guessing the mean price for every house. CatBoost alone is marginally more accurate on raw MAE than the stack; stacking wins narrowly on MAPE/R² and is kept as the deployed model for robustness across the three learners' different error profiles rather than for a large accuracy gain.
---
## Deployments
This repo ships two separate deployment paths built on the same trained artifacts (`ml/artifacts/`):
| Path | Entry point | Stack | Use case |
|---|---|---|---|
| **Live demo** | `app.py` | Gradio, no DB | Deployed on [HF Spaces](https://huggingface.co/spaces/Ezio2001/Housing_Price_API) — `app_file` in this README's frontmatter |
| **Local API stack** | `app/main.py` | FastAPI + PostgreSQL | Run via `docker-compose up`; persists every prediction to Postgres (`/predict`, `/predictions`) |
The Gradio demo is what's publicly live. The FastAPI/Postgres stack is the production-style API for local/self-hosted use.
## Run Locally
### Prerequisites
- Python 3.10+
- `train.csv` from [Kaggle](https://www.kaggle.com/c/house-prices-advanced-regression-techniques/data) placed in `data/`
### Installation
```bash
pip install -r requirements.txt
```
### Train the model
```bash
python -m ml.export_model
```
### Launch the Gradio demo
```bash
python app.py
```
### Launch the FastAPI + Postgres stack
```bash
docker-compose up --build
# API docs at http://localhost:8080/docs
```