Compare commits
2 commits
d823ba10c1
...
95e3b209ce
| Author | SHA1 | Date | |
|---|---|---|---|
| 95e3b209ce | |||
| 81980da4d4 |
1 changed files with 31 additions and 9 deletions
|
|
@ -1158,11 +1158,34 @@ def _fetch_house_imv_anchor(
|
|||
"""Достаёт РЕАЛЬНУЮ Avito IMV-оценку target-дома из `house_imv_evaluations`.
|
||||
|
||||
В отличие от `avito_imv_evaluations` (keyed estimate_id — пустая, on-demand
|
||||
скрейп), `house_imv_evaluations` популирована (~2951 домов, fresh) и keyed по
|
||||
house_id. Резолвим строку: WHERE house_id = target_house_id, предпочитаем
|
||||
запись с ближайшими rooms+area (минимизируем |Δrooms|*10 + |Δarea%|), иначе
|
||||
самую свежую (fetched_at DESC). Best-effort: None при любой ошибке / отсутствии
|
||||
house_id / пустой таблице — estimator продолжает на гео-tier'ах (no regress).
|
||||
скрейп), `house_imv_evaluations` keyed по house_id. Резолвим строку:
|
||||
WHERE house_id = target_house_id + band-guard по rooms/area. Best-effort:
|
||||
None при любой ошибке / отсутствии house_id / пустой таблице — estimator
|
||||
продолжает на гео-tier'ах (no regress).
|
||||
|
||||
СОСТОЯНИЕ ТАБЛИЦЫ, замер 2026-08-12 (прежний текст обещал «популирована
|
||||
~2951 домов, fresh» — неправда по обоим пунктам, #2674):
|
||||
2680 строк, одна на дом (house_imv_eval_house_uniq_idx UNIQUE(house_id) —
|
||||
поэтому ORDER BY ниже выбирает из ≤1 кандидата). 2633 из них (98.2%)
|
||||
старше 40 суток, 2366 — один прогон 2026-05-24; свежих, после фикса
|
||||
параметров 2026-08-06, всего 47.
|
||||
Дореформенные 2633 спрошены у Авито с ЛИТЕРАЛОМ renovation_type='cosmetic'
|
||||
и с дефолтом house_type='panel' при нераспознанном типе: мода ремонта по
|
||||
объявлениям того же дома совпала лишь у 972 (36.9%), разошлась у 1217
|
||||
(46.2%), у 444 моды нет; тип дома разошёлся у 74 из 2633 (46 раз ушла
|
||||
«панель» вместо «монолита»).
|
||||
|
||||
ЧТО С ЭТИМ РЕШЕНО (замер на проде, 1081 персистированная оценка):
|
||||
· Гейт «не брать дореформенные строки» — ОТКЛОНЁН: band-совместимая строка
|
||||
находится у 224 оценок, и все 224 дореформенные. Гейт снял бы якорь у
|
||||
224 из 224, то есть просто выключил бы механизм.
|
||||
· Массовая переоценка — не чинит корень и упирается в очередь: 1628 из
|
||||
2633 домов уже в imv_status='ok', а батч берёт только pending/
|
||||
transient_error, где сейчас 7144 дома при темпе ~25/прогон.
|
||||
· Корень — не свежесть, а РАЗНЫЕ БАЗЫ РЕМОНТА: median_price к моменту
|
||||
блендa уже умножена на _repair_coefficient(repair_state), а якорь стоит
|
||||
в том классе отделки, в котором строку спросили. Чинится приведением
|
||||
якоря к базе цели (#2677).
|
||||
|
||||
Returns dict {recommended_price, lower_price, higher_price, market_count,
|
||||
rooms, area_m2} или None.
|
||||
|
|
@ -3266,8 +3289,7 @@ def _price_from_inputs(
|
|||
)
|
||||
if same_quarter_ratio > settings.estimate_quarter_match_skip_ratio:
|
||||
logger.info(
|
||||
"quarter_index: Guard-2 skip (same-quarter ratio=%.2f > %.2f)"
|
||||
" for %s",
|
||||
"quarter_index: Guard-2 skip (same-quarter ratio=%.2f > %.2f) for %s",
|
||||
same_quarter_ratio,
|
||||
settings.estimate_quarter_match_skip_ratio,
|
||||
target_quarter,
|
||||
|
|
@ -3319,7 +3341,7 @@ def _price_from_inputs(
|
|||
analogs_with_qi,
|
||||
)
|
||||
explanation = (explanation or "") + (
|
||||
f" Учтена локация квартала" f" (индекс цен квартала ×{qi_factor:.2f})."
|
||||
f" Учтена локация квартала (индекс цен квартала ×{qi_factor:.2f})."
|
||||
)
|
||||
sources_used_pre = sorted(set(sources_used_pre) | {"quarter_index"})
|
||||
|
||||
|
|
@ -6766,7 +6788,7 @@ def _enforce_zero_analog_low(
|
|||
"""
|
||||
if n_analogs == 0 and confidence != "low":
|
||||
logger.warning(
|
||||
"ghost_anchor_guard #1871: forcing confidence 'low' (was %s, " "median=%s, sources=%s)",
|
||||
"ghost_anchor_guard #1871: forcing confidence 'low' (was %s, median=%s, sources=%s)",
|
||||
confidence,
|
||||
median_price,
|
||||
sources_used,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue