JA
Back to Projects

Portfolio Project

Real Estate Valuation Assistant

An AI assisted valuation assistant that generates a prediction price of single family homes. The final XGBoost national model achieved a median absolute percentage error (MAPE) of 1.58%, outperforming Zillow's published Zestimate benchmark of 1.74%.

May 2026

Overview

For my capstone in the University of Michigan's Master of Applied Data Science program, my team built a machine learning system that predicts what a single-family home is actually worth and tells a buyer whether it's overvalued or undervalued. We trained on 226 GB of property, tax assessment, and transaction data covering tens of millions of homes. The final XGBoost national model achieved a median absolute percentage error of 1.58%, outperforming Zillow's published Zestimate benchmark of 1.74%, and we shipped 51 state-level models alongside it plus a conversational AI assistant that returns an estimate with a stated margin of error. I contributed across data acquisition, feature engineering, model evaluation, and analysis, and independently owned the data cleaning and processing pipeline and the front-end build and deployment.

Problem

Housing affordability is the defining financial pressure on younger buyers — 67% of Gen Z report struggling to cover housing costs, and U.S. home prices have appreciated every quarter since 2012. That pressure is compounded by an information problem: homeowners systematically overestimate what their property is worth by 5% to 10%, and buyers have no independent way to check a listing price against reality. Existing consumer valuation tools are proprietary black boxes with error rates that aren't visible at the property level. The largest purchase most people will ever make gets negotiated without a defensible view of fair value.

Approach

We sourced ATTOM's Recorder, Tax Assessor, and Tax Assessor History datasets through Dewey, which capped retrieval at 5% of any dataset per day — so acquisition ran in parallel with model development for the length of the project. I built the ingestion pipeline that pulled the parquet files, filtered them into layers, landed them in DuckDB, and used PySpark to deduplicate, handle nulls, and engineer features. We split on time rather than randomly to keep future sales out of training, and used only tax assessments dated at least a year before a sale for the same reason. We constrained the problem deliberately — single-family homes, $200K–$2M, 300–8,000 square feet, 2021–2025 — after a residual analysis showed sub-$200K properties were mostly distressed foreclosures running 114% MAPE.

We baselined with LinearSVR and confirmed just as quickly that a linear model couldn't capture the relationships in the data. The decisive gain came from feature engineering rather than model selection: "assessment drift" features capturing neighborhood appreciation rates and per-property appreciation across land and improvement assessment values moved predictions within 10% of actual sale price from 55% to 82%. XGBoost won every iteration, so we tuned it across all 50 states and DC using RandomizedSearchCV, cutting training iterations per model from 324 to 60. I built the delivery layer: a web app using gpt-4o-mini that extracted an address from a listing URL, enriched it via the ATTOM API, and returned a valuation with the model's MAPE surfaced as an explicit margin of error. That enrichment ran on a 30-day ATTOM trial that has since lapsed, so the live app now leans on its manual fallback — users enter the property details themselves from Zillow or a comparable source.

Try the AI Valuation Assistant

Outcome

The tuned national XGBoost model landed at an R² of 0.896, a MAPE of 6.81%, an MAE of $35,707, and an MdAPE of 1.58% — inside our target band and ahead of Zillow's 1.74% national median. Across the 40 state models with sufficient training data, median MAPE was 6.04%, with New Jersey best at 2.6% and Vermont worst at 18.2%. Eleven models were flagged unreliable outright because Dewey had too little data for those states — Alaska had roughly 500 rows against Florida's 10 million.

The caveats matter as much as the headline number. Our strongest results depend on listing price as an inference-time input, defensible given Redfin's decade of sale-to-list data sitting between 97.5% and 102.5%, but strip the assessment drift features out and MdAPE degrades to 9.35%. Data quality was the binding constraint throughout — room and bedroom counts were unusable, with records showing 0 or 60+ rooms. The model also doesn't see school proximity or amenities and implicitly encodes the post-2021 appreciation trend. It's a decision-support tool for a buyer walking into a negotiation, not a replacement for an appraisal, and we said so in the interface rather than burying it in the paper.

View the Code Repository on GitHub

View our Final Written Report

Get in touch.

Available for speaking, podcasts, panels, writing collaborations, and founding PM / co-founder roles. Reach out on LinkedIn, X, GitHub, or Substack.