|
All checks were successful
CI / frontend-tests (pull_request) Has been skipped
CI Trade-In / changes (pull_request) Successful in 8s
CI / changes (pull_request) Successful in 8s
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 2m45s
Цена местами строилась на объявлениях, которых никто не видел месяц. Главный радиусный путь эстиматора нёс `scraped_at > NOW() - LISTINGS_FRESH_DAYS дней` (_COMMON_WHERE), а четыре денежные выборки — нет: - `_fetch_anchor_comps` Tier A и Tier C: якорь ЗАМЕЩАЕТ headline (median_ppm2/median_price/n_analogs), т.е. правит цену напрямую; - `asking_to_sold_ratio` ask_side и ask_global: знаменатель коэффициента, на который умножается expected_sold_price. `is_active` свежесть не заменяет — он означает разное у разных источников (TTL деактивации 30 дней, NULL-сегмент не деактивируется никогда), а `scraped_at` одно и то же. Прод: 21 132 из 37 497 активных строк протухли по 14-дневной мерке самого эстиматора и были полностью годны для якоря. Окно вынесено в app.core.config.LISTINGS_FRESH_DAYS (одно место на всех): держать его в estimator.py нельзя — тот сам импортирует area_bucket из app.tasks.asking_to_sold_ratio, обратный импорт дал бы цикл. Второй половиной — залипший anchor_tier: он оставался "C"/"A", когда якорь не был построен, и молча глушил IMV-blend, quarter-index (#764 Guard-1a), radius-floor и corridor-clamp-exempt Tier A. Теперь сбрасывается явно, у источника, для всех трёх причин (None из _compute_same_building_anchor, гейт Tier C #1795, low-conf гейт #audit-1). Обе половины одним PR намеренно: порознь они дадут два заметных скачка цены вместо одного меньшего (якорная половина −3.63%, знаменатель +1.25%, вместе −2.42% от суммы выкупа на 1040 реальных оценках). Тесты: tests/test_freshness_filter_2656.py — предикат во всех четырёх местах, единственность константы, бинд :fresh_days, протухший комп не в пуле якоря, сброс anchor_tier и разглушённый IMV-blend. Все 7 краснеют без фикса (проверено git stash). |
||
|---|---|---|
| .. | ||
| exporters | ||
| matching | ||
| tgbot | ||
| __init__.py | ||
| account_quota.py | ||
| auth_session.py | ||
| brand.py | ||
| buildings_query.py | ||
| cache.py | ||
| cian_price_history.py | ||
| cian_session.py | ||
| dadata.py | ||
| domclick_session.py | ||
| domrf_kapremont_loader.py | ||
| estimator.py | ||
| gar_flats_loader.py | ||
| geocoder.py | ||
| house_dedup_merge.py | ||
| house_imv_backfill.py | ||
| house_metadata.py | ||
| identity_store.py | ||
| image_sanitizer.py | ||
| location_index.py | ||
| product_handlers.py | ||
| proxy_pool.py | ||
| proxy_rotation.py | ||
| rosreestr_poll.py | ||
| sber_index.py | ||
| scheduler.py | ||
| scrape_runs.py | ||
| scraper_adapters.py | ||
| scraper_settings.py | ||
| search_query.py | ||
| user_events.py | ||
| yandex_address_backfill.py | ||
| yandex_price_history.py | ||
| zhkh_flats_loader.py | ||