MERA/оценка: премиальный лот прижимается к коридору сделок обычной вторички своей улицы — Малышева 84 теряет 41.8% от клампа #3450

Open
opened 2026-09-11 21:43:12 +00:00 by bot-backend · 1 comment
Collaborator

Найдено при замере #3256 (PR #3445). Не дефект той правки — эффект включается от самого факта появления коридора ДКП и одинаков при любом ключе выборки сделок. Нужно решение продукта.

Случай. Малышева 84, 1-комнатная, 54 м². Радиусная медиана объявлений — 446 366 ₽/м² (премиальный дом). Коридор ДКП по улице: n=21, p90 = 185 558 ₽/м². Клампом headline прижимается к p90 × 1.4259 781 ₽/м², то есть −41.8 %.

Почему так. Коридор строится по улице и по полосе площади ±15 %, без признака класса/качества дома. На улице с разнородной застройкой (один премиальный дом среди обычной вторички) статистика сделок соседей становится потолком для премиального лота. Формально clamp сработал «по инструкции»: headline был выше P90 × 1.4.

Почему это увидели только сейчас: до #3445 у этого клиента коридор был пуст (предикат d.rooms вырезал полосу целиком), то есть кламп не срабатывал вовсе. Правка делает коридор доступным ещё 105 клиентам при n≥3 — и вместе с полезной обрезкой завышенных оценок приносит вот такие случаи.

Что решать. Варианты, которые видно по коду (нужен выбор продукта, не инженерный):

  1. не применять clamp, когда лот заметно выше коридора по классу — нужен признак класса дома (у нас есть is_premium_building, houses.walls, год постройки);
  2. учитывать разброс внутри коридора: при большом IQR (разнородная улица) расширять slack или отключать cap;
  3. ограничить clamp сверху только при достаточной однородности выборки (например, по доле лотов того же дома);
  4. оставить как есть, признав, что для премиальных лотов на разнородных улицах оценка занижается.

Приёмка любого варианта: число клиентов со сдвигом headline < −25 % от клампа за окно (сейчас 2 из 1179 по замеру #3445) и отсутствие обратного эффекта — рост числа явно завышенных оценок, которые clamp раньше обрезал.

Refs #3256, PR #3445, #1795.

Найдено при замере #3256 (PR #3445). **Не дефект той правки** — эффект включается от самого факта появления коридора ДКП и одинаков при любом ключе выборки сделок. Нужно решение продукта. **Случай.** Малышева 84, 1-комнатная, 54 м². Радиусная медиана объявлений — **446 366 ₽/м²** (премиальный дом). Коридор ДКП по улице: `n=21`, `p90 = 185 558 ₽/м²`. Клампом headline прижимается к `p90 × 1.4` → **259 781 ₽/м², то есть −41.8 %**. **Почему так.** Коридор строится по улице и по полосе площади ±15 %, без признака класса/качества дома. На улице с разнородной застройкой (один премиальный дом среди обычной вторички) статистика сделок соседей становится потолком для премиального лота. Формально clamp сработал «по инструкции»: headline был выше `P90 × 1.4`. **Почему это увидели только сейчас:** до #3445 у этого клиента коридор был пуст (предикат `d.rooms` вырезал полосу целиком), то есть кламп не срабатывал вовсе. Правка делает коридор доступным ещё 105 клиентам при `n≥3` — и вместе с полезной обрезкой завышенных оценок приносит вот такие случаи. **Что решать.** Варианты, которые видно по коду (нужен выбор продукта, не инженерный): 1. не применять clamp, когда лот заметно выше коридора по классу — нужен признак класса дома (у нас есть `is_premium_building`, `houses.walls`, год постройки); 2. учитывать разброс внутри коридора: при большом IQR (разнородная улица) расширять `slack` или отключать cap; 3. ограничить clamp сверху только при достаточной однородности выборки (например, по доле лотов того же дома); 4. оставить как есть, признав, что для премиальных лотов на разнородных улицах оценка занижается. **Приёмка любого варианта:** число клиентов со сдвигом headline < −25 % от клампа за окно (сейчас 2 из 1179 по замеру #3445) и отсутствие обратного эффекта — рост числа явно завышенных оценок, которые clamp раньше обрезал. Refs #3256, PR #3445, #1795.
Author
Collaborator

Замер частоты: кламп не сработал НИ РАЗУ за 30 суток живого трафика

Прежде чем выбирать один из четырёх вариантов, измерил, как часто вопрос вообще возникает.

Живой трафик (2026-08-13 … 2026-09-12):

оценок в trade_in_estimates за 30 суток 79
POST /api/v1/trade-in/estimate в Loki за 30 суток 71
строк corridor clamp в логах tradein-backend за 30 суток 0
строк radius floor там же 0

Контроль покрытия: 71 POST в логах против 79 строк в БД — расхождение ~10 % (окна деплоя), то есть Loki действительно держит эти 30 суток, и ноль клампов — это ноль, а не дыра в сборе. Маркер в коде: estimator.py:3938 "corridor clamp #1795: headline %d → %d ₽/м² …".

Исторический прогон (то, откуда взялись −41.8 %). Случай Малышева 84 получен не из живого трафика, а офлайн-переигрыванием 1179 сохранённых клиентских запросов за 2026-05-27…2026-09-11. Частота там — 2 случая со сдвигом < −25 % на 1179 запросов (0.17 %).

Что из этого следует

  1. Решение продукта не срочное. При нынешней интенсивности (≈2.6 оценки в сутки) случай вида «премиальный лот на разнородной улице» ожидается реже раза в год.
  2. Но частота вырастет. #3445 открыл коридор ещё 105 клиентам при n≥3; кламп включается с n≥10, и доля попаданий будет расти по мере набора сделок.
  3. Выбирать вариант сейчас пришлось бы вслепую: ни у одного из четырёх нет опоры в данных, потому что срабатываний в живом трафике нет вообще. Вариант 2 («расширять slack при большом IQR») и вариант 3 («гейт по однородности») требуют величин, которые сейчас нигде не считаются и не логируются.

Предлагаю сначала сделать замер наблюдаемым, а не гадать

Дешёвая правка, которая не меняет поведение: при КАЖДОМ срабатывании клампа логировать не только «было → стало», но и признаки, по которым потом выбирается вариант:

  • величину сдвига в процентах (сейчас в строке только два абсолютных числа);
  • n, p90, IQR коридора — насколько улица однородна;
  • долю сделок ТОГО ЖЕ дома в коридоре (вариант 3);
  • is_premium_building и year_built целевого дома (вариант 1).

Тогда через окно наблюдения вопрос решается по фактам: видно, сколько срабатываний приходится на премиальные лоты, и коррелирует ли большой сдвиг с разнородностью улицы.

Критерий приёмки инструментирования (дата): к 2026-10-12 в логах есть ≥10 строк срабатывания клампа с полным набором признаков, либо подтверждено, что срабатываний по-прежнему нет — и тогда issue закрывается как «вариант 4, оставить как есть» с числом, а не с ощущением.

Замер делал только чтением: Loki (count_over_time за 30d) + SELECT в боевой БД.

## Замер частоты: кламп не сработал НИ РАЗУ за 30 суток живого трафика Прежде чем выбирать один из четырёх вариантов, измерил, как часто вопрос вообще возникает. **Живой трафик (2026-08-13 … 2026-09-12):** | | | |---|---| | оценок в `trade_in_estimates` за 30 суток | **79** | | `POST /api/v1/trade-in/estimate` в Loki за 30 суток | 71 | | строк `corridor clamp` в логах `tradein-backend` за 30 суток | **0** | | строк `radius floor` там же | **0** | Контроль покрытия: 71 POST в логах против 79 строк в БД — расхождение ~10 % (окна деплоя), то есть Loki действительно держит эти 30 суток, и ноль клампов — это ноль, а не дыра в сборе. Маркер в коде: `estimator.py:3938` `"corridor clamp #1795: headline %d → %d ₽/м² …"`. **Исторический прогон (то, откуда взялись −41.8 %).** Случай Малышева 84 получен не из живого трафика, а офлайн-переигрыванием 1179 сохранённых клиентских запросов за 2026-05-27…2026-09-11. Частота там — 2 случая со сдвигом < −25 % на 1179 запросов (0.17 %). ## Что из этого следует 1. **Решение продукта не срочное.** При нынешней интенсивности (≈2.6 оценки в сутки) случай вида «премиальный лот на разнородной улице» ожидается реже раза в год. 2. **Но частота вырастет.** #3445 открыл коридор ещё 105 клиентам при `n≥3`; кламп включается с `n≥10`, и доля попаданий будет расти по мере набора сделок. 3. **Выбирать вариант сейчас пришлось бы вслепую:** ни у одного из четырёх нет опоры в данных, потому что срабатываний в живом трафике нет вообще. Вариант 2 («расширять slack при большом IQR») и вариант 3 («гейт по однородности») требуют величин, которые сейчас нигде не считаются и не логируются. ## Предлагаю сначала сделать замер наблюдаемым, а не гадать Дешёвая правка, которая не меняет поведение: при КАЖДОМ срабатывании клампа логировать не только «было → стало», но и признаки, по которым потом выбирается вариант: - величину сдвига в процентах (сейчас в строке только два абсолютных числа); - `n`, `p90`, IQR коридора — насколько улица однородна; - долю сделок ТОГО ЖЕ дома в коридоре (вариант 3); - `is_premium_building` и `year_built` целевого дома (вариант 1). Тогда через окно наблюдения вопрос решается по фактам: видно, сколько срабатываний приходится на премиальные лоты, и коррелирует ли большой сдвиг с разнородностью улицы. **Критерий приёмки инструментирования (дата):** к 2026-10-12 в логах есть ≥10 строк срабатывания клампа с полным набором признаков, либо подтверждено, что срабатываний по-прежнему нет — и тогда issue закрывается как «вариант 4, оставить как есть» с числом, а не с ощущением. Замер делал только чтением: Loki (`count_over_time` за 30d) + `SELECT` в боевой БД.
Sign in to join this conversation.
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#3450
No description provided.