Бэктест оценщика умеет любой регион, а не только Свердловскую область #3516

Merged
lekss361 merged 1 commit from feat/backtest-estimator-region into main 2026-09-13 11:03:32 +00:00
Owner

Обещание точности на лендинге измерено исключительно на екатеринбургских сделках, а по Москве прогон сделать было нечем: region_code в скрипте стоял константой 66.

Появился флаг --region со списком допустимых значений из реестра регионов, дефолт прежний. Регион проброшен во все выборки; заодно в сами SQL добавлен фильтр region_code, которого там не было вовсе — без него флаг остался бы декоративным и регионы смешивались бы в одной выборке.

Отдельно починен резолв региона в ДКП-коридоре внутри бэктеста: он брал константу 66 независимо от сделки, то есть московский коридор считался бы по Свердловской области. Теперь регион определяется по координатам сделки, как в боевом оценщике.

Прогон по Москве этот PR не делает — он длинный и пойдёт отдельно командой python -m scripts.backtest_estimator --region 77.

🤖 Generated with Claude Code

https://claude.ai/code/session_01NQb6WeJtagZwZnUsSjDizs

Обещание точности на лендинге измерено исключительно на екатеринбургских сделках, а по Москве прогон сделать было нечем: `region_code` в скрипте стоял константой 66. Появился флаг `--region` со списком допустимых значений из реестра регионов, дефолт прежний. Регион проброшен во все выборки; заодно в сами SQL добавлен фильтр `region_code`, которого там не было вовсе — без него флаг остался бы декоративным и регионы смешивались бы в одной выборке. Отдельно починен резолв региона в ДКП-коридоре внутри бэктеста: он брал константу 66 независимо от сделки, то есть московский коридор считался бы по Свердловской области. Теперь регион определяется по координатам сделки, как в боевом оценщике. Прогон по Москве этот PR не делает — он длинный и пойдёт отдельно командой `python -m scripts.backtest_estimator --region 77`. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01NQb6WeJtagZwZnUsSjDizs
lekss361 added 1 commit 2026-09-13 10:44:07 +00:00
feat(tradein): бэктест оценщика умеет любой регион, не только Екатеринбург
All checks were successful
CI Trade-In / backend-tests (pull_request) Successful in 5m41s
CI Trade-In / changes (pull_request) Successful in 14s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / changes (pull_request) Successful in 19s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
5b83d1e2db
Обещание точности лендинга измерялось только на екатеринбургских ДКП: скрипт
бэктеста не имел параметра региона (region_code был зашит числом 66), а сам
SELECT сделок вообще не фильтровал по deals.region_code. Пока в базе жил
только регион 66, это было незаметно — но теперь там же лежат 212 937
московских ДКП (69 138 за последние 12 мес.) и 113 351 подмосковных, и
безусловный "unscoped" запрос молча смешал бы все три региона в одной
выборке. Прогон по Москве до этой правки сделать было нечем.

Добавлен CLI-флаг --region (по идиоме app/tasks/msk_raw_import.py: явный
список поддерживаемых значений, отказ на неизвестном коде ДО любого запроса
к БД). Источник допустимых значений — реестр REGIONS из
app/services/regions.py, а не отдельный литерал: регион заводится в реестре
один раз и становится доступен здесь автоматически. Дефолт оставлен 66 —
поведение существующих вызовов не меняется.

region_code проведён во все 4 варианта SQL выборки сделок (обычная/scattered
× city/no-city) и в per-city PPM2-band lookup (_resolve_city_ppm2_band).
Отдельно поправлен _predict_full_spine: ДКП-коридор (_fetch_dkp_corridor)
резолвил регион только по умолчанию (66) независимо от сделки — теперь
регион резолвится ПО КООРДИНАТАМ каждой сделки через regions.region_for_point,
зеркаля то, как это делает сам prod-эстиматор (estimator.py ~4868-4870).
Без этого фикса флаг --region был бы декоративным: SELECT сделок брал бы
верный регион, но коридор аналогов всё равно считался бы по Свердловской
области.

Проверено: --help показывает --region {50,66,77}; --region 99 отклоняется
argparse ДО подключения к БД (exit 2); ruff check/format check чисты; все
83 существующих теста backtest_* проходят без изменений.

Полный прогон по Москве в этой задаче не запускался (долгий, отдельная
проверка): python -m scripts.backtest_estimator --region 77 --since
2024-09-01 --sample 300
lekss361 merged commit 66a8c39ee4 into main 2026-09-13 11:03:32 +00:00
lekss361 deleted branch feat/backtest-estimator-region 2026-09-13 11:03:32 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#3516
No description provided.