ZIP home-value forecast

Where does each covered ZIP's home-value index go in 12 months?

A 12-month forecast of each covered ZIP's ZHVI home-value index — the index for the ZIP, not any individual home — published before the fact and graded publicly against the realized index at month+12. These forecasts: issued as of 2026-05, graded after 2027-05.

The model gate — and its verdict

GATE REFUSED: damped-blend did NOT beat both naive baselines on pooled OOS MAE; the best naive model (naive-momentum) ships instead. Measured refusal — not tuned.

ModelPooled OOS MAE (12-mo log-change)Median AEn
naive-flat0.080150.06238643,448
naive-momentum (ships)0.0562950.03290243,448
cagr-5yr-unclamped0.0667170.0518243,448
cagr-5yr-clamped0.0580850.04111543,448
damped-blend0.056390.03347543,448

BANDS: per-county empirical p10/p90 of the shipped model's residuals, fit ONLY on band-fit origins 2015-01..2020-01; served band = point + residual quantiles (log space, served as pct change). Band coverage is measured OUT-OF-SAMPLE on origins 2021-01..2025-05, whose outcomes are disjoint from the band-fit residuals (origins 2020-02..2020-12 are excluded from both sides so no outcome window straddles the split): measured p10-p90 coverage 35.8% pooled (n=18488) — BAND_COVERAGE_OOS. The in-sample figure (80.0%) is ~80% TRUE BY CONSTRUCTION (quantiles fit on those same residuals) and is kept only as the BAND_COVERAGE_INSAMPLE sanity row.

Band: per-county empirical p10-p90 of the shipped model's backtest residuals — measured out-of-sample coverage 35.8% pooled (n=18,488, held out from the band fit).

Omaha metro (Douglas, NE)
31 ZIPs · backtest MAE 0.0332 · band coverage 58%
ZIP12-mop10 … p90
68007+0.4%-2.6% … +5.0%
68022+1.3%-1.7% … +5.9%
68064+4.7%+1.6% … +9.5%
68069+4.4%+1.3% … +9.2%
68102+2.0%-1.1% … +6.6%
68104-0.3%-3.3% … +4.3%
68105+1.5%-1.6% … +6.1%
68106+1.7%-1.3% … +6.3%
68107+1.8%-1.3% … +6.4%
68108-0.8%-3.8% … +3.7%
68110-2.5%-5.5% … +1.9%
68111+0.9%-2.1% … +5.5%
68112-0.5%-3.5% … +4.0%
68114+0.0%-3.0% … +4.6%
68116+1.4%-1.7% … +6.0%
68117+2.7%-0.4% … +7.3%
68118+1.6%-1.5% … +6.2%
68122+0.5%-2.5% … +5.1%
68124+2.7%-0.4% … +7.4%
68127+2.4%-0.7% … +7.1%
68130+1.2%-1.9% … +5.8%
68131+3.6%+0.5% … +8.4%
68132+2.4%-0.7% … +7.0%
68134+0.4%-2.6% … +5.0%
68135+1.3%-1.7% … +5.9%
68137+1.8%-1.3% … +6.4%
68142+0.2%-2.8% … +4.8%
68144+2.3%-0.8% … +6.9%
68152+2.1%-0.9% … +6.8%
68154+0.7%-2.3% … +5.3%
68164+0.1%-2.9% … +4.6%
Grand Island metro (Hall, NE)
6 ZIPs · backtest MAE 0.0315 · band coverage 51%
ZIP12-mop10 … p90
68801+1.3%-1.4% … +5.0%
68803+1.6%-1.2% … +5.2%
68810+3.7%+0.9% … +7.5%
68824+3.1%+0.4% … +6.9%
68832+5.1%+2.3% … +8.9%
68883+1.2%-1.5% … +4.9%
Tampa metro (Hillsborough, FL)
50 ZIPs · backtest MAE 0.058 · band coverage 32%
ZIP12-mop10 … p90
33510-0.8%-4.3% … +3.2%
33511-2.1%-5.5% … +1.8%
33527-1.4%-4.9% … +2.6%
33534-4.8%-8.1% … -0.9%
33547-3.4%-6.7% … +0.5%
33548+0.9%-2.6% … +5.0%
33549-2.0%-5.4% … +2.0%
33556-1.9%-5.3% … +2.1%
33558-3.0%-6.3% … +1.0%
33559-2.3%-5.7% … +1.7%
33563-3.3%-6.6% … +0.7%
33565-1.6%-5.0% … +2.5%
33566-2.5%-5.9% … +1.4%
33567-1.1%-4.5% … +3.0%
33569-2.8%-6.2% … +1.1%
33570-5.2%-8.5% … -1.3%
33572-4.5%-7.9% … -0.7%
33573-7.3%-10.5% … -3.5%
33578-4.3%-7.6% … -0.4%
33579-4.1%-7.4% … -0.2%
33584-1.1%-4.6% … +2.9%
33592-3.0%-6.4% … +0.9%
33594-3.0%-6.4% … +0.9%
33596-3.5%-6.8% … +0.4%
33598-5.8%-9.0% … -1.9%
33602-6.7%-10.0% … -2.9%
33603-1.8%-5.2% … +2.2%
33604-2.2%-5.6% … +1.8%
33605-4.2%-7.6% … -0.4%
33606-4.5%-7.8% … -0.6%
33607-2.3%-5.7% … +1.7%
33609-3.5%-6.8% … +0.4%
33610-2.6%-6.0% … +1.3%
33611-4.7%-8.0% … -0.8%
33612-1.8%-5.2% … +2.2%
33613-4.1%-7.4% … -0.2%
33614-0.3%-3.8% … +3.8%
33615-0.3%-3.8% … +3.7%
33616-5.4%-8.7% … -1.6%
33617-1.8%-5.2% … +2.2%
33618-0.4%-3.8% … +3.7%
33619-1.7%-5.1% … +2.3%
33624-0.6%-4.1% … +3.4%
33625-1.1%-4.6% … +2.9%
33626-2.2%-5.6% … +1.8%
33629-3.1%-6.5% … +0.9%
33634-0.6%-4.1% … +3.4%
33635-3.9%-7.2% … +0.0%
33637-2.9%-6.3% … +1.0%
33647-3.9%-7.2% … +0.0%
Lincoln metro (Lancaster, NE)
33 ZIPs · backtest MAE 0.0308 · band coverage 63%
ZIP12-mop10 … p90
68317+4.6%+1.6% … +8.6%
68336+8.4%+5.3% … +12.5%
68339+5.6%+2.6% … +9.6%
68358+6.6%+3.5% … +10.6%
68368+4.8%+1.8% … +8.8%
68372+4.8%+1.8% … +8.8%
68402+6.1%+3.1% … +10.2%
68404+7.5%+4.4% … +11.5%
68419+6.1%+3.0% … +10.1%
68428+7.0%+3.9% … +11.1%
68430+4.9%+1.8% … +8.8%
68461+6.7%+3.6% … +10.7%
68462+4.3%+1.3% … +8.2%
68502+4.0%+0.9% … +7.9%
68503+4.2%+1.2% … +8.1%
68504+2.2%-0.7% … +6.1%
68505+3.0%+0.0% … +6.9%
68506+3.9%+0.9% … +7.8%
68507+2.7%-0.2% … +6.6%
68508+3.9%+0.9% … +7.8%
68510+3.3%+0.3% … +7.2%
68512+3.4%+0.4% … +7.3%
68516+3.5%+0.5% … +7.4%
68517+7.9%+4.8% … +12.0%
68520+4.8%+1.8% … +8.7%
68521+4.4%+1.4% … +8.3%
68522+4.3%+1.3% … +8.2%
68523+3.9%+0.9% … +7.9%
68524+3.0%+0.0% … +6.9%
68526+3.5%+0.5% … +7.4%
68527+3.8%+0.8% … +7.7%
68528+4.5%+1.5% … +8.5%
68532+7.7%+4.5% … +11.7%
Phoenix metro (Maricopa, AZ)
126 ZIPs · backtest MAE 0.0694 · band coverage 29%
ZIP12-mop10 … p90
85003+1.4%-2.0% … +7.9%
85004-3.3%-6.5% … +3.0%
85006-3.1%-6.3% … +3.2%
85007-4.5%-7.6% … +1.7%
85008-1.2%-4.4% … +5.2%
85009-7.7%-10.7% … -1.7%
85012+1.1%-2.2% … +7.6%
85013-2.1%-5.3% … +4.2%
85014-2.1%-5.3% … +4.2%
85015-3.5%-6.7% … +2.7%
85016+0.4%-2.9% … +6.9%
85017-4.8%-7.9% … +1.4%
85018+4.1%+0.7% … +10.8%
85019-3.1%-6.3% … +3.2%
85020-1.3%-4.5% … +5.1%
85021-1.0%-4.3% … +5.4%
85022-1.0%-4.3% … +5.4%
85023-2.0%-5.2% … +4.4%
85024-1.4%-4.7% … +5.0%
85027-2.7%-5.9% … +3.6%
85028+2.2%-1.1% … +8.8%
85029-3.3%-6.4% … +3.0%
85031-3.9%-7.1% … +2.3%
85032-0.3%-3.6% … +6.1%
85033-3.1%-6.3% … +3.1%
85034+4.5%+1.1% … +11.3%
85035-3.2%-6.4% … +3.0%
85037-2.5%-5.7% … +3.8%
85040-3.6%-6.8% … +2.6%
85041-2.6%-5.8% … +3.7%
85042-3.2%-6.4% … +3.1%
85043-2.2%-5.5% … +4.1%
85044-1.0%-4.2% … +5.5%
85045-0.1%-3.4% … +6.3%
85048-0.4%-3.7% … +6.0%
85050+0.1%-3.2% … +6.5%
85051-2.3%-5.5% … +4.0%
85053-2.6%-5.8% … +3.7%
85054+0.7%-2.6% … +7.2%
85083-0.7%-4.0% … +5.7%
85085-1.4%-4.6% … +5.0%
85086-1.3%-4.6% … +5.1%
85087+0.4%-2.9% … +6.9%
85142-0.7%-4.0% … +5.7%
85201-2.8%-6.0% … +3.5%
85202-2.4%-5.6% … +3.9%
85203-1.1%-4.4% … +5.3%
85204-1.6%-4.8% … +4.8%
85205-0.3%-3.5% … +6.2%
85206-0.4%-3.7% … +6.0%
85207-1.0%-4.3% … +5.4%
85208-2.4%-5.6% … +3.9%
85209-1.2%-4.4% … +5.2%
85210-3.0%-6.1% … +3.3%
85212-1.1%-4.4% … +5.3%
85213-0.3%-3.6% … +6.1%
85215-1.5%-4.7% … +4.9%
85224-2.0%-5.2% … +4.3%
85225-2.7%-5.9% … +3.6%
85226-1.7%-4.9% … +4.7%
85233-0.7%-4.0% … +5.7%
85234+0.7%-2.6% … +7.2%
85248-1.8%-5.0% … +4.5%
85249-0.2%-3.5% … +6.3%
85250+1.6%-1.7% … +8.2%
85251-2.0%-5.2% … +4.3%
85253+12.0%+8.4% … +19.3%
85254+3.9%+0.4% … +10.6%
85255+1.9%-1.5% … +8.5%
85257-1.4%-4.7% … +5.0%
85258+2.8%-0.5% … +9.5%
85259+2.5%-0.9% … +9.1%
85260+0.9%-2.5% … +7.4%
85262+2.1%-1.3% … +8.7%
85263+1.8%-1.6% … +8.4%
85266+2.3%-1.1% … +8.9%
85268+0.9%-2.4% … +7.5%
85281-2.9%-6.1% … +3.4%
85282-1.2%-4.4% … +5.2%
85283-1.0%-4.3% … +5.4%
85284+1.2%-2.1% … +7.8%
85286-1.5%-4.8% … +4.9%
85295-1.6%-4.8% … +4.8%
85296-1.4%-4.6% … +5.0%
85297-1.3%-4.5% … +5.1%
85298-0.9%-4.1% … +5.5%
85301-2.9%-6.1% … +3.4%
85302-2.5%-5.7% … +3.8%
85303-0.8%-4.1% … +5.6%
85304-2.3%-5.5% … +4.0%
85305-1.3%-4.5% … +5.1%
85306-2.9%-6.1% … +3.4%
85307-1.2%-4.5% … +5.2%
85308-2.0%-5.2% … +4.4%
85310-0.5%-3.7% … +6.0%
85323-2.1%-5.3% … +4.2%
85326-1.3%-4.6% … +5.1%
85331+0.9%-2.4% … +7.5%
85335-2.1%-5.3% … +4.3%
85337+2.9%-0.4% … +9.6%
85338-1.4%-4.6% … +5.0%
85339-1.8%-5.0% … +4.5%
85340-0.2%-3.4% … +6.3%
85342+0.5%-2.8% … +7.0%
85345-2.3%-5.5% … +4.0%
85351-3.9%-7.1% … +2.3%
85353-2.0%-5.2% … +4.4%
85354+2.4%-0.9% … +9.0%
85355-0.8%-4.0% … +5.7%
85361+3.0%-0.4% … +9.7%
85363-3.4%-6.5% … +2.9%
85373-2.7%-5.9% … +3.6%
85374-2.9%-6.0% … +3.4%
85375-2.6%-5.8% … +3.7%
85377+2.2%-1.1% … +8.8%
85378-1.3%-4.5% … +5.1%
85379-2.1%-5.3% … +4.3%
85381-1.2%-4.4% … +5.2%
85382-1.5%-4.7% … +4.9%
85383-0.5%-3.8% … +5.9%
85387-1.7%-4.9% … +4.7%
85388-2.0%-5.2% … +4.4%
85390-0.9%-4.2% … +5.5%
85392-1.9%-5.1% … +4.5%
85395+0.2%-3.1% … +6.7%
85396-0.8%-4.1% … +5.6%
Tucson metro (Pima, AZ)
39 ZIPs · backtest MAE 0.0526 · band coverage 35%
ZIP12-mop10 … p90
85321+2.4%-0.9% … +7.4%
85614-3.2%-6.4% … +1.5%
85619+2.3%-1.1% … +7.3%
85622-2.3%-5.5% … +2.5%
85629-2.4%-5.6% … +2.4%
85637+1.6%-1.7% … +6.6%
85641-2.1%-5.3% … +2.7%
85645+1.2%-2.1% … +6.1%
85653-0.8%-4.1% … +4.0%
85658-1.7%-4.9% … +3.1%
85701-1.2%-4.4% … +3.6%
85704-0.4%-3.7% … +4.5%
85705-3.8%-7.0% … +0.9%
85706-3.1%-6.2% … +1.6%
85710-1.7%-4.9% … +3.1%
85711-3.3%-6.5% … +1.4%
85712-2.8%-6.0% … +1.9%
85713-4.1%-7.2% … +0.6%
85714-3.8%-7.0% … +0.9%
85715-2.6%-5.8% … +2.1%
85716-2.3%-5.5% … +2.5%
85718-1.0%-4.2% … +3.8%
85719-1.5%-4.8% … +3.2%
85730-2.0%-5.2% … +2.8%
85735-0.6%-3.9% … +4.2%
85736+2.0%-1.4% … +7.0%
85737-1.4%-4.6% … +3.4%
85741-2.7%-5.9% … +2.0%
85742-1.9%-5.1% … +2.9%
85743-2.7%-5.9% … +2.0%
85745-1.8%-5.1% … +2.9%
85746-3.8%-7.0% … +0.8%
85747-1.7%-5.0% … +3.0%
85748-2.5%-5.7% … +2.2%
85749-1.2%-4.5% … +3.5%
85750+0.2%-3.1% … +5.0%
85755-1.8%-5.0% … +2.9%
85756-1.1%-4.4% … +3.7%
85757-1.7%-5.0% … +3.0%
Phoenix exurbs (Pinal, AZ)
21 ZIPs · backtest MAE 0.084 · band coverage 36%
ZIP12-mop10 … p90
85118-1.6%-6.5% … +5.6%
85119-0.3%-5.3% … +7.0%
85120-2.4%-7.3% … +4.8%
85122-2.2%-7.1% … +4.9%
85123-3.2%-8.0% … +3.9%
85128-1.1%-6.1% … +6.1%
85131-1.9%-6.9% … +5.2%
85132-2.2%-7.1% … +5.0%
85137-4.0%-8.8% … +3.0%
85138-3.8%-8.6% … +3.2%
85139-4.1%-8.9% … +2.9%
85140-2.1%-7.0% … +5.0%
85143-3.1%-7.9% … +4.0%
85145-2.5%-7.4% … +4.6%
85173-3.1%-8.0% … +3.9%
85192-8.6%-13.1% … -1.9%
85193+2.9%-2.3% … +10.3%
85194+0.5%-4.5% … +7.9%
85623+1.3%-3.8% … +8.7%
85631+0.7%-4.4% … +8.0%
85739-1.9%-6.8% … +5.2%
Omaha metro (Sarpy, NE)
11 ZIPs · backtest MAE 0.022 · band coverage 36%
ZIP12-mop10 … p90
68005+2.1%+0.9% … +4.5%
68028+0.8%-0.3% … +3.3%
68046+1.4%+0.2% … +3.8%
68059+3.5%+2.4% … +6.1%
68123+2.6%+1.4% … +5.1%
68128+2.8%+1.7% … +5.3%
68133+1.8%+0.7% … +4.3%
68136+0.1%-1.0% … +2.5%
68138+2.6%+1.5% … +5.1%
68147+2.9%+1.8% … +5.4%
68157+2.1%+1.0% … +4.6%
Raleigh metro (Wake, NC)
32 ZIPs · backtest MAE 0.0534 · band coverage 17%
ZIP12-mop10 … p90
27502-2.2%-4.2% … +0.3%
27511-2.4%-4.3% … +0.1%
27513-1.3%-3.3% … +1.2%
27518+0.4%-1.7% … +2.9%
27519-2.6%-4.6% … -0.1%
27523-2.8%-4.8% … -0.3%
27526-2.7%-4.7% … -0.2%
27529-2.0%-4.0% … +0.5%
27539-1.4%-3.4% … +1.1%
27540-1.2%-3.2% … +1.4%
27545-2.6%-4.6% … -0.1%
27560-4.9%-6.8% … -2.5%
27562-1.8%-3.8% … +0.7%
27571-2.4%-4.3% … +0.1%
27587-1.5%-3.5% … +1.0%
27591-1.2%-3.2% … +1.3%
27597-0.8%-2.8% … +1.8%
27601-1.5%-3.5% … +1.1%
27603-2.6%-4.5% … -0.1%
27604-3.5%-5.5% … -1.0%
27605-3.3%-5.3% … -0.8%
27606-1.9%-3.9% … +0.6%
27607-0.0%-2.1% … +2.5%
27608+0.9%-1.1% … +3.5%
27609+1.1%-1.0% … +3.6%
27610-3.0%-4.9% … -0.5%
27612+0.8%-1.2% … +3.4%
27613-0.1%-2.1% … +2.5%
27614+0.1%-1.9% … +2.7%
27615+0.1%-1.9% … +2.7%
27616-4.1%-6.0% … -1.6%
27617-3.2%-5.1% … -0.7%
See what the engine says about a specific property

Method: METHOD: forecast the 12-month log-change of the ZIP's ZHVI. Candidate model "damped-blend" = beta x ZIP trailing-12m log-change + (1-beta) x county-mean trailing-12m log-change, beta = 0.3252 fit by least squares on backtest origins 2005-01..2014-01 ONLY (n=36420); all models evaluated out-of-sample on origins 2015-01..2025-05. The fit is trimmed so every fit outcome window ends by 2015-01: origins 2014-02..2014-12 are excluded from the fit, so fit and eval are disjoint in OUTCOMES, not just origins. Naive baselines: naive-flat (0%) and naive-momentum (trailing-12m carried forward). cagr-5yr-clamped is the CURRENT PRODUCT's 5-yr appreciation input — trailing 5-yr CAGR clamped to [0%, 5%] exactly as zip_appreciation.py serves it — measured at this 12-mo horizon; cagr-5yr-unclamped is the same CAGR without the clamp (reference only). Neither ships here. The gate margins (damped-blend pooled MAE minus each naive baseline's; negative = blend wins) are published unrounded-to-6dp in MODEL["blend_minus_naive"] so the verdict is reproducible from this file. GATE REFUSED: damped-blend did NOT beat both naive baselines on pooled OOS MAE; the best naive model (naive-momentum) ships instead. Measured refusal — not tuned.

Honest limitation: HONEST LIMITATION: ZHVI is a smoothed, seasonally-adjusted repeat-sales-style INDEX — this forecasts the index for the ZIP, NOT any individual home, and only at the 12-month horizon. It is deliberately separate from the buy-hold 5-yr appreciation input (zip_appreciation.py): mixing horizons would be dishonest. Every live forecast is logged to data/product/zip_forecast_ledger.jsonl and graded against realized ZHVI after 2027-05 — the ledger is committed to the repo and append-only (a changed re-run supersedes, never deletes).

Reproducible: python scripts/build_zip_forecast.py · ledger: 349 live forecasts logged, 349 pending, 0 graded, plus 349 superseded rows preserved (append-only — a re-run supersedes, never deletes) (grading cannot begin before 2027-05) · public append-only ledger (NDJSON) → · machine-readable JSON → · CSV →