gendesign/tradein-mvp/backend/tests/fixtures/backtest_baseline.json
bot-backend 9f11b8ed69 fix(mera/estimator): дедуп склеивает нумерованные улицы через дефис (#2291, класс 4)
Регексы названия улицы в _parse_street_house пускали ведущую цифру только через
пробел («8 Марта»), а через дефис нет. «40-летия Комсомола», «22-го Партсъезда»,
«3-го Интернационала» разбирались так:
- avito «ул. 40-летия Комсомола,32Г» и yandex — ('', ''), дедупа нет вовсе;
- cian «мкр. ЖБИ, улица 40-летия Комсомола, 8А» — ('mkr жби', '40'): все дома
  улицы получали один ключ и дом «40», разные квартиры с одинаковыми
  этажом/площадью/ценой сливались в одну;
- domklik «60-летия Октября проспект» — ('октября', …).

Фикс: (?:\d+\s+)? → (?:\d+(?:\s+|-))? в _DEDUP_STREET_NAME_RE и
_DEDUP_STREET_NAME_SUFFIX_RE. На 5310 живых адресах прода с «цифра-буква»
меняется разбор у 730 объявлений, все новые токены — реальные нумерованные
улицы (14 штук, от «40-летия комсомола» до «2-ая новосибирская»).

Бэктест-гейт: baseline перегенерирован. В реплее дедуп включён (как на захвате),
поэтому правка разбора сдвигает пул: изменились 99 из 1600 сделок, у 48 ошибка
меньше, у 51 больше. expected_sold MAPE 15.88→15.92, покрытие вилки 1056→1057,
headline не сдвинулся.

Refs #2291

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 12:25:50 +05:00

192 lines
3.9 KiB
JSON

{
"calibration": {
"high": {
"coverage_pct": 75.0,
"mape_pct": 19.97,
"n": 8,
"n_covered": 6
},
"low": {
"coverage_pct": 83.67,
"mape_pct": 15.64,
"n": 1562,
"n_covered": 1030
},
"medium": {
"coverage_pct": 70.0,
"mape_pct": 26.53,
"n": 30,
"n_covered": 21
}
},
"confidence_order": [
"high",
"medium",
"low"
],
"expected_sold": {
"overall": {
"mape_pct": 15.92,
"median_bias_pct": 2.87,
"n": 1269,
"n_no_analogs": 0,
"p25_pct": -10.94,
"p75_pct": 22.81
},
"per_area_bucket": {
"0 <30": {
"mape_pct": 19.76,
"median_bias_pct": -1.02,
"n": 161,
"p25_pct": -16.45,
"p75_pct": 34.7
},
"1 30-44": {
"mape_pct": 15.64,
"median_bias_pct": 4.37,
"n": 503,
"p25_pct": -10.56,
"p75_pct": 22.86
},
"2 44-62": {
"mape_pct": 13.93,
"median_bias_pct": 4.13,
"n": 379,
"p25_pct": -8.12,
"p75_pct": 23.5
},
"3 62-85": {
"mape_pct": 15.97,
"median_bias_pct": -2.33,
"n": 179,
"p25_pct": -11.99,
"p75_pct": 18.18
},
"4 >=85": {
"mape_pct": 20.46,
"median_bias_pct": -4.97,
"n": 47,
"p25_pct": -26.03,
"p75_pct": 7.15
}
},
"per_rooms": {
"0": {
"label": "студия",
"mape_pct": 19.76,
"median_bias_pct": -1.02,
"n": 161,
"n_no_analogs": 0,
"p25_pct": -16.45,
"p75_pct": 34.7
},
"1": {
"label": "1к",
"mape_pct": 15.64,
"median_bias_pct": 4.37,
"n": 503,
"n_no_analogs": 0,
"p25_pct": -10.56,
"p75_pct": 22.86
},
"2": {
"label": "2к",
"mape_pct": 13.93,
"median_bias_pct": 4.13,
"n": 379,
"n_no_analogs": 0,
"p25_pct": -8.12,
"p75_pct": 23.5
},
"3": {
"label": "3к",
"mape_pct": 15.97,
"median_bias_pct": -2.33,
"n": 179,
"n_no_analogs": 0,
"p25_pct": -11.99,
"p75_pct": 18.18
},
"4": {
"label": "4+",
"mape_pct": 20.46,
"median_bias_pct": -4.97,
"n": 47,
"n_no_analogs": 0,
"p25_pct": -26.03,
"p75_pct": 7.15
}
},
"per_segment": {
"бизнес": {
"mape_pct": 19.58,
"median_bias_pct": -19.58,
"n": 144,
"p25_pct": -27.32,
"p75_pct": -12.79
},
"комфорт": {
"mape_pct": 10.69,
"median_bias_pct": -5.78,
"n": 425,
"p25_pct": -15.98,
"p75_pct": 4.54
},
"премиум": {
"mape_pct": null,
"median_bias_pct": null,
"n": 0,
"p25_pct": null,
"p75_pct": null
},
"эконом": {
"mape_pct": 20.22,
"median_bias_pct": 18.98,
"n": 697,
"p25_pct": 0.96,
"p75_pct": 42.31
},
"элит": {
"mape_pct": 36.11,
"median_bias_pct": -36.11,
"n": 3,
"p25_pct": -44.21,
"p75_pct": -32.72
}
}
},
"headline": {
"ask_median_ppm2": 136721.80831284,
"deal_median_ppm2": 115770.5,
"spread_pct": 18.1
},
"range_coverage": {
"overall": {
"coverage_pct": 83.29,
"n": 1269,
"n_covered": 1057
},
"per_confidence": {
"high": {
"coverage_pct": 75.0,
"n": 8,
"n_covered": 6
},
"low": {
"coverage_pct": 83.67,
"n": 1231,
"n_covered": 1030
},
"medium": {
"coverage_pct": 70.0,
"n": 30,
"n_covered": 21
}
}
},
"sharpness": {
"median_rel_width": 0.743,
"n": 1269
},
"unrecorded_lookup_calls": 0
}