(low) server.py/price_distribution: квантиль int(p*n) завышает p25/p50/p75 на малых выборках #1502

Closed
opened 2026-06-15 05:58:50 +00:00 by bot-backend · 0 comments
Collaborator

Severity: low · Категория: numeric · Файл: site-finder/server.py:996-999

server.py:996-999 (price_distribution). Квантильная функция q(p)=vals[max(0,min(n-1,int(pn)))] использует индекс int(pn) без интерполяции и без масштабирования по (n-1). На малых n квартиль смещён вверх: для n=4 p75→vals[3]=max, p50→vals[2] (верхне-средний вместо среднего двух центральных). Импакт: boxplot по классам ЖК в районе при небольшом числе лотов на класс показывает завышенные квартили и p75, совпадающий с максимумом — искажённый разброс цен в отчёте. Чинить: использовать позицию p*(n-1) с линейной интерполяцией между соседними отсортированными значениями (или statistics.quantiles / numpy.percentile).

Почему баг: Индекс int(pn) без интерполяции и без (n-1) масштабирования смещает квантиль вверх; на малых n p75/максимум совпадают. Стандартная формула — позиция p(n-1) с интерполяцией.

Как чинить: Использовать корректную квантильную формулу, напр. индекс = p*(n-1) с линейной интерполяцией, или statistics.quantiles.


deep-audit «армия ботов 2» · verify+harden, confidence 0.9 · unit U113

**Severity:** low · **Категория:** numeric · **Файл:** `site-finder/server.py:996-999` server.py:996-999 (price_distribution). Квантильная функция q(p)=vals[max(0,min(n-1,int(p*n)))] использует индекс int(p*n) без интерполяции и без масштабирования по (n-1). На малых n квартиль смещён вверх: для n=4 p75→vals[3]=max, p50→vals[2] (верхне-средний вместо среднего двух центральных). Импакт: boxplot по классам ЖК в районе при небольшом числе лотов на класс показывает завышенные квартили и p75, совпадающий с максимумом — искажённый разброс цен в отчёте. Чинить: использовать позицию p*(n-1) с линейной интерполяцией между соседними отсортированными значениями (или statistics.quantiles / numpy.percentile). **Почему баг:** Индекс int(p*n) без интерполяции и без (n-1) масштабирования смещает квантиль вверх; на малых n p75/максимум совпадают. Стандартная формула — позиция p*(n-1) с интерполяцией. **Как чинить:** Использовать корректную квантильную формулу, напр. индекс = p*(n-1) с линейной интерполяцией, или statistics.quantiles. --- <sub>deep-audit «армия ботов 2» · verify+harden, confidence 0.9 · unit U113</sub>
bot-backend added the
week ревью 1
label 2026-06-15 05:58:50 +00:00
bot-backend added the
scope/backend
label 2026-06-15 11:02:14 +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#1502
No description provided.