fix(competitors): _AVG_PRICE_SQL — фильтр latest snapshot (#1210)
All checks were successful
CI / changes (push) Successful in 6s
CI / changes (pull_request) Successful in 6s
CI / frontend-tests (push) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / backend-tests (push) Successful in 6m30s
CI / backend-tests (pull_request) Successful in 6m27s
All checks were successful
CI / changes (push) Successful in 6s
CI / changes (pull_request) Successful in 6s
CI / frontend-tests (push) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / backend-tests (push) Successful in 6m30s
CI / backend-tests (pull_request) Successful in 6m27s
domrf_kn_flats версионируется (UNIQUE(id, snapshot_date), м.50), scraper UPSERT per snapshot — то же что для domrf_kn_objects (которое в L3 supply после #1212 берём только latest). _AVG_PRICE_SQL фильтра snapshot_date НЕ имел → AVG усреднял ИСТОРИЮ цен (stale на растущем рынке) → UI-поле Competitor.avg_price_per_m2 + вход _price_similarity получали устаревшую цену. COUNT '%прод%' множил sold ×N снапшотов → raw_sold/flat_count кратно завышен → попадал в гард-нейтраль 0.5 или искажал stage_at_horizon как ×N-завышенный sold_pct. Patch: WHERE f.snapshot_date = (SELECT MAX(snapshot_date) FROM domrf_kn_flats). Зеркало паттерна best_layouts._SUPPLY_BATCH_SQL и _COMPETITORS_SQL DISTINCT ON (уже было latest). 51/51 competitors-тестов зелёные. Closes #1210
This commit is contained in:
parent
4c2f19ace0
commit
c1257b2671
1 changed files with 9 additions and 0 deletions
|
|
@ -437,6 +437,12 @@ _COMPETITORS_SQL = text("""
|
||||||
# заполнен слабо (~0.2%), поэтому flats_sold чаще будет 0/мало → stage_at_horizon
|
# заполнен слабо (~0.2%), поэтому flats_sold чаще будет 0/мало → stage_at_horizon
|
||||||
# падает в нейтраль 0.5 (graceful, см. helper). Колонка добавлена в ТОТ ЖЕ запрос
|
# падает в нейтраль 0.5 (graceful, см. helper). Колонка добавлена в ТОТ ЖЕ запрос
|
||||||
# (без 4-го db.execute), чтобы не ломать существующие callers/тесты.
|
# (без 4-го db.execute), чтобы не ломать существующие callers/тесты.
|
||||||
|
# #1210: domrf_kn_flats версионируется (UNIQUE(id, snapshot_date) — м.50,
|
||||||
|
# scraper UPSERT per snapshot). Без фильтра snapshot_date AVG усреднял
|
||||||
|
# ИСТОРИЮ цен (stale на растущем рынке), а COUNT '%прод%' множил sold ×N
|
||||||
|
# снапшотов (raw_sold/flat_count кратно завышен → попадал в гард-нейтраль
|
||||||
|
# 0.5 или искажал stage_at_horizon). Берём ТОЛЬКО latest snapshot — зеркало
|
||||||
|
# паттерна best_layouts._SUPPLY_BATCH_SQL и _COMPETITORS_SQL DISTINCT ON.
|
||||||
_AVG_PRICE_SQL = text("""
|
_AVG_PRICE_SQL = text("""
|
||||||
SELECT
|
SELECT
|
||||||
f.obj_id,
|
f.obj_id,
|
||||||
|
|
@ -448,6 +454,9 @@ _AVG_PRICE_SQL = text("""
|
||||||
) AS flats_sold
|
) AS flats_sold
|
||||||
FROM domrf_kn_flats f
|
FROM domrf_kn_flats f
|
||||||
WHERE f.obj_id = ANY(:obj_ids)
|
WHERE f.obj_id = ANY(:obj_ids)
|
||||||
|
AND f.snapshot_date = (
|
||||||
|
SELECT MAX(snapshot_date) FROM domrf_kn_flats
|
||||||
|
)
|
||||||
GROUP BY f.obj_id
|
GROUP BY f.obj_id
|
||||||
""")
|
""")
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue