Коэффициент asking→sold вне ЕКБ считается на согласованной географии #3531
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
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#3531
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/ratio-geography-match"
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?
Пункт 3 долга: «Коэффициент области 0,891 может быть завышен из-за несовпадения состава муниципалитетов в числителе и знаменателе».
Что было
Для регионов кроме 66 обе стороны фильтровались ТОЛЬКО по
region_codeи соединялись ТОЛЬКО по бакету комнат (JOIN ask_side a USING (rooms_bucket)). Sold-медиана и ask-медиана считались по разным географическим популяциям одного региона: объявления смещены к дальней дешёвой периферии сильнее, чем сделки. Отсюда 0.891 у области при 0.73 у Москвы и 0.73 у ЕКБ.Что стало
Обе стороны раскладываются по одной регулярной сетке
FLOOR(ST_Y(geom)/0.1)×FLOOR(ST_X(geom)/0.2)(~11 × 12-16 км), медианы берутся внутри ячейки, в итог идут только ячейки, где обе стороны имеют массу (≥10 сделок И ≥10 объявлений), агрегация взвешена числом сделок:ratio = Σ(w·sold)/Σ(w·ask).Сетка, а не кольца, — потому что у региона 50 нет своего города-центра. Совмещение по названию муниципалитета невозможно:
listings.cityтам пуста (3 строки из 70 996).Замер на проде
Рендер-SQL исполнён против прод-БД в транзакции с
ROLLBACK(15.09.2026):Разнонаправленный сдвиг — подпись поправки состава, а не равномерного смещения. По бакетам область: 0.702 / 0.789 / 0.794 / 0.857 / 0.874.
Гарды и деградация
Регион НЕ получает строк, если: покрытие geom любой стороны <50 %, ИЛИ совпавших ячеек <3, ИЛИ в пересечение попало <50 % геокодированных сделок.
DELETEпри этом идёт в любом случае — устаревший пуловый коэффициент не должен пережить отказ. Потребитель (estimator._get_asking_sold_ratio) видит отсутствие строки как явную деградацию.Счётчики
geo_r<code>_*:cells_deal,cells_ask,cells_matched,cells_dropped,deals_outside_pct,listings_outside_pct,deals_no_geom_pct,listings_no_geom_pct,skipped, плюсgeo_regions_written/geo_regions_skipped. WARNING, когда доля без координат >25 % — у области сейчас 24.5 % и упадёт после геокодирования сделок (отдельный PR).Что НЕ тронуто
_REDERIVE_SQLи_DELETE_SQLрегиона 66 — байт в байт, это гейтится тестом.districtостаётся пустым:estimator._get_asking_sold_ratioчитает строгоdistrict = ''(разбиение по районам — #647).70 тестов зелёные.