Enterprise-style Property Valuation & ML Drift Monitoring Platform
PropertyIQ is an end-to-end system that combines:
- live property valuation
- model drift detection
- confidence scoring
- prediction explainability
- city-level trend analytics
for risk-sensitive credit workflows.
- 1. Executive Summary
- 2. Business Problem
- 3. Solution Overview
- 4. Key Results
- 5. Product Interfaces
- 6. System Architecture
- 7. Data Design
- 8. ML Pipeline
- 9. Feature Engineering
- 10. Modeling Strategy
- 11. Drift Detection Framework
- 12. Explainability Framework
- 13. Forecasting Method
- 14. API Contract
- 15. Tech Stack
- 16. Repository Structure
- 17. Local Setup
- 18. Reproducibility & Data Integrity
- 19. Limitations
- 20. Roadmap
- 21. Screenshots
- 22. License
- 23. Contact
PropertyIQ addresses a practical lending problem: valuation models trained on historical data degrade when market distributions shift.
The platform continuously evaluates model reliability and translates statistical signals into decision-ready outputs for analysts and loan officers.
Outcome: strong valuation performance on validation data and explicit drift alerts on out-of-period data.
In collateral-backed lending, incorrect valuation affects downstream credit decisions (e.g., LTV assessment).
When market conditions shift, models can remain in production without obvious failure flags.
- silent valuation bias
- inaccurate risk pricing
- weak early-warning visibility
- delayed retraining decisions
PropertyIQ provides two integrated surfaces:
| Module | Primary User | Purpose |
|---|---|---|
| Admin Console | Risk Analyst | Monitor drift, model health, error trends, alerts |
| Client Portal | Loan Officer | Generate valuation, view trust score, inspect explanation |
- Continuous drift diagnostics (KS + Chi-square + rolling MAPE)
- Ensemble-based confidence scoring
- Trust-tier translation for non-ML users
- SHAP-style explainability outputs
- City-level forecast context
| Metric | Value | Target |
|---|---|---|
| Sale Price MAPE | 1.61% | < 15% |
| Rental Value MAPE | 19.64% | < 25% |
| OOB R^2 (Sale) | 0.9968 | > 0.95 |
| Total Records | 600,000 | -- |
| Cities | 10 | -- |
| API Endpoints | 14 | -- |
| Max City KS | 0.5566 (Hyderabad) | > 0.30 drift threshold |
| All City p-values | < 0.05 | drift detected |
- Drift summary and severity
- Feature-level KS ranking
- City-level KS ranking
- Rolling MAPE windows
- Chi-square categorical drift
- Global feature influence view
- Alerts with recommendations
- Input property details
- Live model valuation
- Confidence score
- Trust tier:
TRUSTEDCAUTIONFIELD VERIFICATION
- Top prediction drivers
- Locality map
- City forecast panel
+--------------------------------------+
| Data Generation |
| properties_2020 / properties_2025 |
+--------------------------------------+
|
v
+----------------------------------------------------------------------------+
| Notebook / Offline ML Pipeline |
| NB01 Inspection -> NB02 Preprocess -> NB03 Features -> NB04 Train Models |
| NB05 Drift Analysis -> NB06 Explainability/Forecast Params |
+----------------------------------------------------------------------------+
|
v
+----------------------------------+
| Artifacts + JSON Outputs |
| *.pkl, encodings.json, |
| drift_results.json, shap.json |
+----------------------------------+
|
v
+----------------------------------------------------------------------------+
| FastAPI Backend |
| /api/predict/* /api/drift/* /api/model/* /api/forecast/* /api/shap/* |
+----------------------------------------------------------------------------+
|
v
+--------------------------------------+
| React Frontend |
| Admin Console + Client Portal |
+--------------------------------------+
- UI sends request to
POST /api/predict/valuation - API loads cached model + encoding artifacts
- API builds 14-feature vector in fixed order
- RF predicts valuation
- Tree-level variance converted into confidence score
- Trust tier assigned and response returned to UI
Two synthetic datasets, macro-anchored and reproducible:
| File | Year | Rows | Role |
|---|---|---|---|
properties_2020.csv |
2020 | 300,000 | Train + validation source |
properties_2025.csv |
2025 | 300,000 | Drift evaluation window |
- Housing index trend references
- Policy rate trend references
- City-wise growth priors
- Fixed random seeds (
2020,2025) for reproducibility
Mumbai, Delhi, Bengaluru, Hyderabad, Pune, Chennai, Kolkata, Ahmedabad, Gurgaon, Navi Mumbai.
| Notebook | Stage | Output |
|---|---|---|
| NB01 | Data inspection | inspection_report.json |
| NB02 | Preprocessing + splits | train/val/drift partitions |
| NB03 | Feature engineering | encodings.json |
| NB04 | Model training | sale_price_v1.pkl, rental_value_v1.pkl |
| NB05 | Drift detection | ks_results.json, drift_results.json |
| NB06 | Explainability + forecast | shap_values.json, forecast_params.json |
Final sale model uses 14 engineered features:
bhktotal_sqftbathbath_per_bhksqft_per_bhkis_large_propertycity_median_price_sqftlocality_median_price_sqftprice_sqft_city_zscorecity_tier_encodeddemand_supply_ratiorbi_hpi_avginterest_ratelivability_score
- Target-style encoding for city/locality price signals
- City-aware engineered context (z-score positioning)
- No scaling needed for tree-based model
RandomForestRegressorn_estimators=300max_depth=10min_samples_leaf=4oob_score=True
- Separate target and feature emphasis
- Includes rental-relevant factors (amenity/furnishing context)
- Handles non-linear interactions
- Works well on mixed tabular features
- Robust with limited heavy preprocessing
- Enables ensemble disagreement-based confidence signal
- KS-test for continuous features
- Chi-square for categorical features
- Rolling MAPE for temporal degradation tracking
| KS Statistic | Interpretation |
|---|---|
| 0.00 - 0.10 | Minimal shift |
| 0.10 - 0.30 | Moderate shift |
| 0.30 - 0.60 | Significant drift |
| > 0.60 | Extreme drift |
- Major macro feature drift detected
- Strong city-level heterogeneity
- Tail-window error spikes visible in rolling MAPE
PropertyIQ returns:
- Global feature influence summaries
- Per-request contribution drivers
Observed behavior in runs:
- Location-derived features dominate physical features for valuation impact in this dataset context.
City-level forecasts use implied annual growth from historical medians:
Projected values are generated across horizons with confidence bands for UI consumption.
GET /api/drift/summaryGET /api/drift/ks-featuresGET /api/drift/ks-citiesGET /api/drift/rolling-mapeGET /api/drift/chi2GET /api/drift/city/{city}
GET /api/forecast/allGET /api/forecast/{city}
GET /api/model/registryGET /api/model/shapGET /api/model/localitiesGET /api/model/localities/{city}
POST /api/shap/explainPOST /api/predict/valuation
{
"city": "Mumbai",
"locality": "Bandra West",
"bhk": 3,
"bath": 3,
"total_sqft": 1200
}{
"predicted_price_sqft": 21067.0,
"confidence_score": 81.0,
"trust_tier": "CAUTION",
"top_drivers": [
"locality_median_price_sqft",
"city_median_price_sqft",
"price_sqft_city_zscore"
]
}| Layer | Tools |
|---|---|
| Backend | Python 3.13, FastAPI, Uvicorn, scikit-learn, SciPy, Joblib |
| Frontend | React 18, Vite, Tailwind CSS, Recharts, Framer Motion, React Leaflet |
| Data/Graph | Neo4j |
| Serialization | JSON + Joblib artifacts |
dashboard/
|- api/
| |- main.py
| |- config.py
| |- models/
| \- routes/
|- frontend/
|- notebooks/
|- models/
|- outputs/
\- README.md
Prerequisite: run NB01 -> NB06 to generate required artifacts.
cd dashboard/api
pip install fastapi uvicorn pandas numpy scikit-learn joblib scipy
python -m uvicorn main:app --reload --port 8000
# Docs: http://localhost:8000/docscd dashboard/frontend
npm install
npm run dev
# App: http://localhost:5173- Fixed seeds for data generation and split control
- Train/validation sourced only from 2020 data
- 2025 data isolated as drift window
- Encoding artifacts fit on training data only
- API uses persisted artifacts for deterministic inference
- Synthetic dataset (macro-anchored) rather than proprietary bank transaction logs
- Confidence score is ensemble-variance based, not full predictive interval modeling
- Forecasting uses simplified growth assumptions
- Production security/compliance hardening not included in local demo mode
- Model registry with version promotion policy
- Scheduled drift jobs + notification pipeline
- Retraining trigger automation with governance thresholds
- Role-based access and audit logging
- Containerized deployment + CI/CD
- Monitoring stack (latency, error, drift, prediction quality)
Landing page screenshots (use the image files below):
Admin Console screenshots (use the image files below):
Client Portal screenshots (use the image files below):
- Name: Pranav Panchal
- LinkedIn: https://www.linkedin.com/in/pranavpanchal1326/
- GitHub: https://github.com/pranavpanchal1326


















