[low] Guard-2 same_quarter_ratio: знаменатель включает аналоги без кадастрового номера — занижение ratio, over-correction #1385

Closed
opened 2026-06-14 18:10:11 +00:00 by bot-backend · 0 comments
Collaborator

Описание

same_quarter_count суммируется по lot_quarters_for_guard2 (только лоты, чей building_cadastral_number распарсился в квартал), но знаменатель — len(listings_clean) (ВСЕ аналоги, включая без кадастрового номера). При низком покрытии кадастром (типично: анонимные объявления Avito без кадастра) ratio структурно занижен, поэтому Guard-2 («локация уже зашита в медиану → пропустить quarter-index коррекцию») редко срабатывает, и quarter-index фактор применяется второй раз к медиане, уже отражающей same-quarter аналоги.

Корень

Семантический рассинхрон числитель/знаменатель: числитель — только аналоги с разрешённым кварталом, знаменатель — все аналоги. Аналоги без кадастрового номера не классифицируемы и должны исключаться из обеих частей. Порог пропуска 0.60 (config.py:114).

Evidence

estimator.py:2462-2467:

same_quarter_count = sum(
    1 for lq in lot_quarters_for_guard2 if lq == target_quarter
)
same_quarter_ratio = (
    same_quarter_count / len(listings_clean) if listings_clean else 0.0
)

Комментарий на 2460 («доля аналогов ИЗ ТОГО ЖЕ квартала») подтверждает, что неклассифицируемые аналоги не должны попадать в знаменатель.

Suggested fix

Делить на число аналогов с известным кварталом: same_quarter_count / len(lot_quarters_for_guard2) (guard при len(lot_quarters_for_guard2)==0). Тогда ratio = «из аналогов с разрешимым кварталом какая доля в целевом».

Обоснование severity (low)

Фактор capped (estimate_quarter_index_factor_min/max), ошибка проявляется только при низком покрытии кадастром И когда большинство покрытых аналогов в целевом квартале — мягкая over-correction. Confidence 0.88.


week ревью 1 · multi-agent аудит 2026-06-14 · severity=low · category=logic

Затронутые файлы:

  • /Users/anton/Птица/gendesign/tradein-mvp/backend/app/services/estimator.py
## Описание `same_quarter_count` суммируется по `lot_quarters_for_guard2` (только лоты, чей building_cadastral_number распарсился в квартал), но знаменатель — `len(listings_clean)` (ВСЕ аналоги, включая без кадастрового номера). При низком покрытии кадастром (типично: анонимные объявления Avito без кадастра) ratio структурно занижен, поэтому Guard-2 («локация уже зашита в медиану → пропустить quarter-index коррекцию») редко срабатывает, и quarter-index фактор применяется второй раз к медиане, уже отражающей same-quarter аналоги. ## Корень Семантический рассинхрон числитель/знаменатель: числитель — только аналоги с разрешённым кварталом, знаменатель — все аналоги. Аналоги без кадастрового номера не классифицируемы и должны исключаться из обеих частей. Порог пропуска 0.60 (config.py:114). ## Evidence `estimator.py:2462-2467`: ```python same_quarter_count = sum( 1 for lq in lot_quarters_for_guard2 if lq == target_quarter ) same_quarter_ratio = ( same_quarter_count / len(listings_clean) if listings_clean else 0.0 ) ``` Комментарий на 2460 («доля аналогов ИЗ ТОГО ЖЕ квартала») подтверждает, что неклассифицируемые аналоги не должны попадать в знаменатель. ## Suggested fix Делить на число аналогов с известным кварталом: `same_quarter_count / len(lot_quarters_for_guard2)` (guard при `len(lot_quarters_for_guard2)==0`). Тогда ratio = «из аналогов с разрешимым кварталом какая доля в целевом». ## Обоснование severity (low) Фактор capped (`estimate_quarter_index_factor_min/max`), ошибка проявляется только при низком покрытии кадастром И когда большинство покрытых аналогов в целевом квартале — мягкая over-correction. Confidence 0.88. --- _week ревью 1 · multi-agent аудит 2026-06-14 · severity=**low** · category=`logic`_ Затронутые файлы: - `/Users/anton/Птица/gendesign/tradein-mvp/backend/app/services/estimator.py`
bot-backend added the
week ревью 1
label 2026-06-14 18:10:11 +00:00
bot-backend added the
scope/backend
label 2026-06-15 11:01:56 +00:00
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#1385
No description provided.