Числитель ratio — сырые цены сделок Росреестра за трейлинг-12 месяцев (на проде
фактическое окно 2025-10..2026-04, центр ≈ декабрь 2025), знаменатель — медиана
объявлений за LISTINGS_FRESH_DAYS, то есть сегодня. На растущем рынке ratio
занижен ровно на дрейф за половину окна, и прод отдаёт цену позапрошлого
квартала. Это и есть «систематическая недооценка на свежих сделках».
Каждая сделка домножается на sber-фактор приведения к последнему месяцу ряда —
тот же приём и та же карта регион→ряд (sber_region_series_name), что estimator
уже применяет к ДКП-коридору (#794). До этой правки коридор был приведён к
сегодня, а ratio — нет; теперь обе стороны на одной временной шкале.
Двойного учёта нет: _sber_time_factor в estimator зовётся только в
_fetch_dkp_corridor (estimator.py:2219, 2291) и уходит в clamp ASKING-медианы
(_apply_corridor_clamp, estimator.py:3989); ratio из asking_to_sold_ratios
множится отдельно на estimator.py:4058. Один множитель на одно число дважды
не ложится.
Прод-замер 2026-09-16 (read-only, окно 2025-10..2026-04):
77 Москва n=68 731 sold_median 323 529 → 360 330 ×1.1137
50 область n=35 264 sold_median 162 303 → 179 314 ×1.1048
66 Свердл. n=33 907 sold_median 94 655 → 99 059 ×1.0465
Ожидаемые ratio: 0.729→0.811 (77), 0.811→0.896 (50), 0.728→0.762 (66) — все
ниже 1.0, клампа estimate_expected_sold_le_asking не задевают.
Откат без деплоя — ASKING_RATIO_TIME_ADJUST_ENABLED=false (factor=1.0 для
каждой сделки, байт-в-байт прежнее поведение). Если ряда для города нет вовсе,
сделка не выбрасывается: factor=1.0 плюс счётчик
sber_time_adjust_regions_missing_series и WARNING, а не тишина.
Замороженный регресс-гейт не двигается: фикстура несёт готовый ratio и через
этот таск не ходит.
Claude-Session: https://claude.ai/code/session_01NQb6WeJtagZwZnUsSjDizs