The expected_sold_range_low/high were derived from the analog asking-IQR (× asking→sold ratio): only ~55% of actual sold prices fell inside the stated range — a 50%-ish interval mislabeled as the estimate's range. Replace with a calibrated band around the expected_sold POINT, gated behind estimate_calibrated_pi_enabled (default ON): range_low = expected_sold_price × 0.649 (empirical p10 of sold/expected_sold) range_high = expected_sold_price × 1.392 (empirical p90, n=2366 prod deals) This is a genuine ~80% prediction interval (verified 80.0% coverage on the 2366-deal sample). Headline asking range_low/high (market-asking IQR) untouched. Frozen backtest baseline regenerated: range_coverage.overall 55.23 → 80.14 (n_covered 153 → 222); expected_sold POINT mape/bias and headline unchanged (only the band moved). Tests asserting the old asking-IQR × ratio band updated to the calibrated band (documented behavior change).
154 lines
3.1 KiB
JSON
154 lines
3.1 KiB
JSON
{
|
|
"calibration": {
|
|
"high": {
|
|
"coverage_pct": null,
|
|
"mape_pct": null,
|
|
"n": 0,
|
|
"n_covered": 0
|
|
},
|
|
"low": {
|
|
"coverage_pct": 80.0,
|
|
"mape_pct": 18.63,
|
|
"n": 275,
|
|
"n_covered": 220
|
|
},
|
|
"medium": {
|
|
"coverage_pct": 100.0,
|
|
"mape_pct": 19.18,
|
|
"n": 2,
|
|
"n_covered": 2
|
|
}
|
|
},
|
|
"confidence_order": [
|
|
"high",
|
|
"medium",
|
|
"low"
|
|
],
|
|
"expected_sold": {
|
|
"overall": {
|
|
"mape_pct": 18.63,
|
|
"median_bias_pct": -1.2,
|
|
"n": 277,
|
|
"n_no_analogs": 0,
|
|
"p25_pct": -16.25,
|
|
"p75_pct": 20.26
|
|
},
|
|
"per_rooms": {
|
|
"0": {
|
|
"label": "студия",
|
|
"mape_pct": 27.97,
|
|
"median_bias_pct": 27.56,
|
|
"n": 37,
|
|
"n_no_analogs": 0,
|
|
"p25_pct": -8.97,
|
|
"p75_pct": 38.45
|
|
},
|
|
"1": {
|
|
"label": "1к",
|
|
"mape_pct": 19.55,
|
|
"median_bias_pct": -8.08,
|
|
"n": 93,
|
|
"n_no_analogs": 0,
|
|
"p25_pct": -21.27,
|
|
"p75_pct": 13.3
|
|
},
|
|
"2": {
|
|
"label": "2к",
|
|
"mape_pct": 16.22,
|
|
"median_bias_pct": -8.82,
|
|
"n": 74,
|
|
"n_no_analogs": 0,
|
|
"p25_pct": -21.01,
|
|
"p75_pct": 6.13
|
|
},
|
|
"3": {
|
|
"label": "3к",
|
|
"mape_pct": 10.52,
|
|
"median_bias_pct": 4.08,
|
|
"n": 43,
|
|
"n_no_analogs": 0,
|
|
"p25_pct": -6.54,
|
|
"p75_pct": 11.96
|
|
},
|
|
"4": {
|
|
"label": "4+",
|
|
"mape_pct": 23.53,
|
|
"median_bias_pct": 14.35,
|
|
"n": 30,
|
|
"n_no_analogs": 0,
|
|
"p25_pct": -0.72,
|
|
"p75_pct": 35.27
|
|
}
|
|
},
|
|
"per_segment": {
|
|
"бизнес": {
|
|
"mape_pct": 22.14,
|
|
"median_bias_pct": -21.49,
|
|
"n": 46,
|
|
"p25_pct": -28.22,
|
|
"p75_pct": -9.82
|
|
},
|
|
"комфорт": {
|
|
"mape_pct": 16.74,
|
|
"median_bias_pct": -8.05,
|
|
"n": 104,
|
|
"p25_pct": -20.63,
|
|
"p75_pct": 7.55
|
|
},
|
|
"премиум": {
|
|
"mape_pct": 59.37,
|
|
"median_bias_pct": -59.37,
|
|
"n": 1,
|
|
"p25_pct": -59.37,
|
|
"p75_pct": -59.37
|
|
},
|
|
"эконом": {
|
|
"mape_pct": 18.01,
|
|
"median_bias_pct": 17.17,
|
|
"n": 120,
|
|
"p25_pct": 1.73,
|
|
"p75_pct": 46.96
|
|
},
|
|
"элит": {
|
|
"mape_pct": 38.62,
|
|
"median_bias_pct": -38.62,
|
|
"n": 6,
|
|
"p25_pct": -47.98,
|
|
"p75_pct": -33.18
|
|
}
|
|
}
|
|
},
|
|
"headline": {
|
|
"ask_median_ppm2": 147545.8502510892,
|
|
"deal_median_ppm2": 125063.0,
|
|
"spread_pct": 17.98
|
|
},
|
|
"range_coverage": {
|
|
"overall": {
|
|
"coverage_pct": 80.14,
|
|
"n": 277,
|
|
"n_covered": 222
|
|
},
|
|
"per_confidence": {
|
|
"high": {
|
|
"coverage_pct": null,
|
|
"n": 0,
|
|
"n_covered": 0
|
|
},
|
|
"low": {
|
|
"coverage_pct": 80.0,
|
|
"n": 275,
|
|
"n_covered": 220
|
|
},
|
|
"medium": {
|
|
"coverage_pct": 100.0,
|
|
"n": 2,
|
|
"n_covered": 2
|
|
}
|
|
}
|
|
},
|
|
"sharpness": {
|
|
"median_rel_width": 0.743,
|
|
"n": 277
|
|
}
|
|
}
|