fix(tradein/estimate): уверенность не может противоречить надёжности выборки #2825

Merged
lekss361 merged 1 commit from fix/tradein-confidence-vs-reliability into main 2026-08-10 16:21:31 +00:00
Owner

Находка

Post-deploy smoke по #2823 на реальном кейсе заказчика (Академика Парина 46/5, 23.1 м², rooms=1, радиус 2 км) вернул:

n_analogs: 39
confidence: high
reliability: low
relaxations: ['снят фильтр по году постройки', 'учтены студии', 'площадь ±25%']

То есть на экране рядом оказываются бейдж «высокая уверенность» и красный баннер «точность снижена». Для клиента это прямое противоречие — ровно тот класс проблемы, который #2823 вычищал из PDF и счётчиков, просто в другом месте.

Причина

Две шкалы считались независимо. Шаги каскада послаблений (комнатность / свежесть / новостройки) не выставляют fallback_used, поэтому _compute_confidence их не видит и продолжает оценивать широкую пост-релаксационную выборку с узким IQR как high. reliability при этом честно читает те же послабления как low.

Summary

  • _cap_confidence_by_reliability: very_lowlow; low → не выше medium; ok → без изменений. Никогда не повышает уверенность. Применяется одной точкой, после того как обе величины финализированы, а не размазано по каскаду.
  • confidence_explanation при реальном понижении начинается с сути («оценка построена с расширенными параметрами подбора — точность снижена»), затем детали выборки, затем перечисление послаблений. Раньше текст открывался хвалебной статистикой и лишь в хвосте упоминал послабления.
  • Без послаблений поведение и тексты не изменились — это подавляющее большинство оценок. Под требование есть отдельный регресс-тест.

Test plan

  • Полный бэкенд-прогон: 4180 passed, 18 skipped (venv проекта; +6 = ровно новый файл тестов, регрессий нет)
  • Существующие 697 тестов estimator прошли без единой правки — старый путь не задет
  • ruff check / ruff format — чисто, pre-commit зелёный
  • Тесты на каждое из трёх правил + control-тест «без послаблений всё как было»
  • E2E-тест воспроизводит именно прод-форму (39 аналогов, узкий IQR, снятая когорта) → highmedium
  • Post-deploy: повторить smoke по адресу заказчика — ожидаем confidence: medium вместо high
## Находка Post-deploy smoke по #2823 на реальном кейсе заказчика (Академика Парина 46/5, 23.1 м², rooms=1, радиус 2 км) вернул: ``` n_analogs: 39 confidence: high reliability: low relaxations: ['снят фильтр по году постройки', 'учтены студии', 'площадь ±25%'] ``` То есть на экране рядом оказываются бейдж **«высокая уверенность»** и красный баннер **«точность снижена»**. Для клиента это прямое противоречие — ровно тот класс проблемы, который #2823 вычищал из PDF и счётчиков, просто в другом месте. ## Причина Две шкалы считались независимо. Шаги каскада послаблений (комнатность / свежесть / новостройки) не выставляют `fallback_used`, поэтому `_compute_confidence` их не видит и продолжает оценивать широкую пост-релаксационную выборку с узким IQR как `high`. `reliability` при этом честно читает те же послабления как `low`. ## Summary - `_cap_confidence_by_reliability`: `very_low` → `low`; `low` → не выше `medium`; `ok` → без изменений. Никогда не повышает уверенность. Применяется **одной точкой**, после того как обе величины финализированы, а не размазано по каскаду. - `confidence_explanation` при реальном понижении начинается с сути («оценка построена с расширенными параметрами подбора — точность снижена»), затем детали выборки, затем перечисление послаблений. Раньше текст открывался хвалебной статистикой и лишь в хвосте упоминал послабления. - **Без послаблений поведение и тексты не изменились** — это подавляющее большинство оценок. Под требование есть отдельный регресс-тест. ## Test plan - [x] Полный бэкенд-прогон: **4180 passed, 18 skipped** (venv проекта; +6 = ровно новый файл тестов, регрессий нет) - [x] Существующие 697 тестов estimator прошли **без единой правки** — старый путь не задет - [x] `ruff check` / `ruff format` — чисто, pre-commit зелёный - [x] Тесты на каждое из трёх правил + control-тест «без послаблений всё как было» - [x] E2E-тест воспроизводит именно прод-форму (39 аналогов, узкий IQR, снятая когорта) → `high` → `medium` - [ ] Post-deploy: повторить smoke по адресу заказчика — ожидаем `confidence: medium` вместо `high`
lekss361 added 1 commit 2026-08-10 16:15:06 +00:00
fix(tradein/estimate): уверенность не может противоречить надёжности выборки
All checks were successful
CI Trade-In / changes (pull_request) Successful in 7s
CI / changes (pull_request) Successful in 8s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
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
CI Trade-In / backend-tests (pull_request) Successful in 3m52s
505e85e623
Smoke на проде после #2823: кейс заказчика вернул confidence='high'
одновременно с reliability='low' и тремя применёнными послаблениями.
На экране это бейдж «высокая уверенность» рядом с красным баннером
«точность снижена» — прямое противоречие для клиента.

Причина: шкалы считались независимо. Шаги каскада послаблений
(комнатность / свежесть / новостройки) не выставляют fallback_used,
поэтому _compute_confidence их не видел и продолжал оценивать широкую
пост-релаксационную выборку с узким IQR как «high».

- _cap_confidence_by_reliability: very_low → low, low → не выше medium,
  ok → без изменений. Никогда не повышает. Применяется ОДНОЙ точкой,
  после того как обе величины финализированы.
- confidence_explanation при реальном понижении начинается с сути
  («оценка построена с расширенными параметрами — точность снижена»),
  а не с хвалебной статистики выборки.
- Без послаблений поведение и тексты не изменились — под это есть
  отдельный регресс-тест.
lekss361 merged commit 0b84f0b661 into main 2026-08-10 16:21:31 +00:00
lekss361 deleted branch fix/tradein-confidence-vs-reliability 2026-08-10 16:21: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#2825
No description provided.