{"version":"2026-11-07T04-52-36Z","trained_at":"2026-11-07T04:52:36.917362+00:00","n_rows_total":2959,"feature_columns":["living_area_sqm","rooms","floor","area_per_room","energy_class_ordinal","floor_missing","rooms_missing","energy_class_missing","city","district","quarter","postal_prefix"],"cities":["berlin","dresden","duesseldorf","frankfurt","hamburg","hannover","koeln","leipzig","muenchen","stuttgart"],"city_rows":{"berlin":980,"hamburg":540,"muenchen":447,"leipzig":388,"koeln":319,"dresden":118,"stuttgart":75,"frankfurt":34,"duesseldorf":32,"hannover":26},"model_type":"xgboost","model_label":"XGBoost","selection_reason":"XGBoost scored best; no change","metrics":{"cv":{"n":2367,"mae_eur":114033.8201766032,"rmse_eur":213709.62351377666,"median_ae_eur":64631.24611461209,"mape_pct":20.493487362489233,"median_ape_pct":15.390259283361138,"r2_log":0.8613328271965548,"r2_eur":0.8141584815772515},"cv_city_only":{"n":2367,"mae_eur":130169.58305382136,"rmse_eur":236117.49130669967,"median_ae_eur":73058.226671907,"mape_pct":23.522351856564214,"median_ape_pct":18.69700324646232,"r2_log":0.8237736755413323,"r2_eur":0.7731436671736087},"holdout":{"n":592,"mae_eur":116695.23507832564,"rmse_eur":239918.41445952997,"median_ae_eur":63908.09695082347,"mape_pct":20.428890705409085,"median_ape_pct":16.176392930028268,"r2_log":0.8656458962774912,"r2_eur":0.7613438814060959},"holdout_city_only":{"n":592,"mae_eur":133805.03720651023,"rmse_eur":262101.75216548715,"median_ae_eur":79720.01586381023,"mape_pct":23.759414464044518,"median_ape_pct":18.958527325013236,"r2_log":0.8273777580554524,"r2_eur":0.7151703105680698}}}