feat(tradein/estimator): hedonic year+area correction on expected_sold (#2002) #2004
No reviewers
Labels
No labels
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
Fable 5 ревью
feedback/max
generative
GG-форсайт
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
вторичка
ИРД
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#2004
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "feat/tradein-hedonic-year-area-correction"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
A hedonic correction on the trade-in
expected_soldpoint — fixes systematic mis-estimation by building era + unit size (the engine underestimated newer buildings and mishandled large lots). The strongest measurable lever from the #2002 elite/accuracy research (year/floor/areaare on ground-truth deals; finish/class are not).Coefficients fit on n=2366 prod deals (held-out OLS of
log(actual_sold/expected_sold) ~ year + ln(area)). Gated behindestimate_hedonic_correction_enabled(default ON; OFF ⇒ exact legacy).Order:
ratio → hedonic factor → le_asking re-clamp → calibrated PI range. The PI range (#2001) wraps the corrected point; thele_askinginvariant is re-asserted after the factor (the hedonic could otherwise pushexpected_soldabove asking — overpay risk for trade-in).Measured effect (frozen backtest gate, regenerated hermetically)
range_coverage 80.1 → 82.2; headline/sharpness byte-identical (correction is scoped to
expected_soldonly). On the larger held-out fit set (n=2366) бизнес bias −22%→−14%, overall median-abs-err 18.5%→16.1%, элит unchanged (no harm).Why year+area and not +dkp
Tested
dkp_ratio(and es_price-gating it for premium): it lifts overall MAPE via the эконом/комфорт bulk but worsens бизнес (bias −14%→−19%, MAPE 15.5→18.9) and элит/премиум — and es_price can't cleanly gate premium (same unidentifiability).year+areais best for the value segments and harmless to the tails.Test plan
tests/test_estimator_hedonic.py— 6 cases (factor mid/clamp-both-bounds/target_year=Noneneutral/le_asking invariant holds/control off)Follow-up (#2002)
Elit point still data-limited (unit-level finish/class not on deals) → manual-review flag + description-class mining (broader extractor; existing
parse_house_classcatches only 7%) + forward-logging.Refs #2002