Aqar Rent Price Predictor — End-to-End ML System
Predicts fair market rent for Riyadh apartments with a confidence range, from daily-scraped live listings to a deployed app.
- MAE 37% better than market baseline
- 20K+ listings scraped daily
- 98% Arabic geocoding resolution
- 49 tests (TDD)
- Python
- LightGBM
- FastAPI
- Streamlit
- BeautifulSoup
- SQLite
- GitHub Actions
- Pandas
Problem
Renters and landlords in Riyadh have no fair-price reference. Listed prices vary wildly for similar apartments in the same district, and there's no public benchmark to check whether a price is reasonable.
Approach
- 01
Built a rate-limited daily scraper of sa.aqar.fm, scheduled on GitHub Actions (free CI), with a multi-day detail backlog design to fit ~22K listings into the available time budget.
- 02
Cleaned the data with Arabic-text normalization and ran exploratory data analysis.
- 03
Engineered features including Nominatim geocoding of 146 Arabic district names — resolution went from 41% to 98% after diagnosing the query format that was silently failing most lookups.
- 04
Trained three LightGBM quantile-regression models (p10 / p50 / p90) to produce a price range rather than a single point estimate, evaluated on a temporal holdout split by listing date.
Results
MAE ~12.2K SAR/yr (~29% of median rent) — 37% better than a district-median baseline.
Caught and fixed a temporal-split bug that had silently biased evaluation before the real holdout numbers could be trusted.
Served via a FastAPI /predict endpoint with a Streamlit front end for interactive use.
What I'd improve
Widen the quantile targets to fix interval under-coverage (69.8% vs an 80% target).
Accumulate more daily snapshots to unlock trend features over time.