gendesign/tradein-mvp/backend/app/api
bot-backend 50c1df5e0e feat(msk): проба покрытия отвечает по Москве — сетка центроидов и радиус на точку
Резолвер города в пробе покрытия знал только 9 центроидов Свердловской области,
поэтому любой московский адрес получал not_covered с пустым городом при живой
когорте рядом. Замер на проде: точка Тверской, 59 объявлений в радиусе 1 км,
статус not_covered, город пустой; контроль по Екатеринбургу — ok.

Москве заведена сетка из 67 центроидов, выведенная кластеризацией нашего же
корпуса (35 552 объявления Циан, ST_ClusterKMeans), плюс 32 отрицательные точки
Подмосковья: они участвуют в конкурсе ближайшего центроида, но порога не имеют,
поэтому граница с областью проходит по конкурсу центров, а не по окружности.

Радиус стал свойством центроида. У свердловских точек прежние 25 км байт-в-байт,
у московских 8 км: круги плотной сетки складываются, и общий 25-километровый
радиус протекал вглубь области — Наро-Фоминск 9.83 км до сетки, Кубинка 17.18,
Чехов 22.25, все резолвились как «Москва».

Порог Москвы жёлтый (12), не зелёный: 200 случайных московских адресов дают
медиану когорты 14 и долю с когортой не меньше 12 равную 0.57, против 37 и 0.865
у Екатеринбурга.

Остаточная цена — 48 московских объявлений из 35 552 (0.14%) в приграничной
полосе выигрываются подмосковным центром.

Тесты: 29 контрольных районов Москвы резолвятся в «Москва», 32 города области
дают «город не определён», резолв по Свердловской области сверен с прежней
реализацией на решётке из 851 узла — расхождений 0.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VQ8jqr4SFirX5tFLwdSrXh
2026-09-11 01:37:27 +03:00
..
public fix(mera/public): Infinity/NaN во входе — 422, и бюджет считает такие запросы 2026-08-30 00:11:56 +05:00
v1 feat(msk): проба покрытия отвечает по Москве — сетка центроидов и радиус на точку 2026-09-11 01:37:27 +03:00
__init__.py feat: add tradein-mvp subproject (Trade-In Estimator под /trade-in) 2026-05-21 00:25:39 +03:00