(low) 06_match_economics.py/main: median_price_m2 считается по равновзвешенным строкам room×month, а не по объёму сделок #1511

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

Severity: low · Категория: numeric · Файл: site-finder/06_match_economics.py:123-129

06_match_economics.py:128-129 — prices = sorted([r[6] ...]) по строкам objective_corp_month, PK которых (month, project, corpus, rooms_bucket) (подтверждено 05_objective_pull.py:53), т.е. каждая строка = тип комнатности × месяц с равным весом. med = prices[len//2] берёт «медиану» по списку этих строк, игнорируя число/объём сделок: одна строка студий и одна строка 3-комн весят одинаково → медиана смещена к ассортименту комнатностей, а не к рынку. Дополнительно len//2 при чётном N берёт верхний элемент, а не среднее двух центральных. Импакт: median_price_m2_corp_sum (показывается в отчёте 04:159 и используется как fallback в economic_score через COALESCE 03:108) смещён. Смягчение: real_* из 08 предпочтительнее (COALESCE), median_corp_sum — fallback. Фикс: взвешивать медиану по объёму сделок (sold_volume_m2) или брать медиану по per-flat лотам.

Почему баг: Медиана по равновзвешенным строкам room×month не отражает медианную цену сделки: 1 строка студий и 1 строка 3к весят одинаково независимо от числа/объёма сделок. Это median_price_m2, который попадает в отчёт и в fallback economic_score (03_score.py COALESCE). Хотя real_* из 08 предпочтительнее, при их отсутствии используется именно этот смещённый медианный показатель.

Как чинить: Считать медиану/перцентили по per-flat ценам (как в 08) либо взвешивать по числу сделок/объёму; для чётного N усреднять два центральных значения.


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

**Severity:** low · **Категория:** numeric · **Файл:** `site-finder/06_match_economics.py:123-129` 06_match_economics.py:128-129 — prices = sorted([r[6] ...]) по строкам objective_corp_month, PK которых (month, project, corpus, rooms_bucket) (подтверждено 05_objective_pull.py:53), т.е. каждая строка = тип комнатности × месяц с равным весом. med = prices[len//2] берёт «медиану» по списку этих строк, игнорируя число/объём сделок: одна строка студий и одна строка 3-комн весят одинаково → медиана смещена к ассортименту комнатностей, а не к рынку. Дополнительно len//2 при чётном N берёт верхний элемент, а не среднее двух центральных. Импакт: median_price_m2_corp_sum (показывается в отчёте 04:159 и используется как fallback в economic_score через COALESCE 03:108) смещён. Смягчение: real_* из 08 предпочтительнее (COALESCE), median_corp_sum — fallback. Фикс: взвешивать медиану по объёму сделок (sold_volume_m2) или брать медиану по per-flat лотам. **Почему баг:** Медиана по равновзвешенным строкам room×month не отражает медианную цену сделки: 1 строка студий и 1 строка 3к весят одинаково независимо от числа/объёма сделок. Это median_price_m2, который попадает в отчёт и в fallback economic_score (03_score.py COALESCE). Хотя real_* из 08 предпочтительнее, при их отсутствии используется именно этот смещённый медианный показатель. **Как чинить:** Считать медиану/перцентили по per-flat ценам (как в 08) либо взвешивать по числу сделок/объёму; для чётного N усреднять два центральных значения. --- <sub>deep-audit «армия ботов 2» · verify+harden, confidence 0.8 · unit U114</sub>
bot-backend added the
week ревью 1
label 2026-06-15 05:58:59 +00:00
bot-backend added the
scope/backend
label 2026-06-15 11:02:16 +00:00
bot-backend added the
needs-human
label 2026-06-15 16:44:11 +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#1511
No description provided.