target: MedHouseValtask: regression (inferred, confirmed)16,512 development rows8 features
0questions awaiting your answer
0critical or review decisions
Next step: Export the model recipe with report.export(estimator) and evaluate it once on the held-out data.
Data partition. Every statistic, figure, decision and experiment in this report comes from 16,512 development rows. Prefit did not reserve an internal holdout; an test set of 4,128 rows was registered (metadata only, never profiled). No exact row overlap with the development data.
RMSE (alone) — The target is skewed / heavy-tailed: RMSE is dominated by a few large values. Report it next to MAE; the RMSE/MAE gap is itself informative.
Avoid
R² (alone) — Can look healthy while large-error behaviour is poor.
Baseline (MAE, RepeatedKFold(n_splits=5, n_repeats=2) — the export splitter, repeated, 16,512 dev rows)
model
estimator
mean
std
dummy
prior / median
0.88
0.01468
user
HistGradientBoostingRegressor
0.3175
0.005152
Roadmap
Ordered from split to final evaluation. Only applied, confirmed or verified steps enter the exported model recipe.
1. Set up validation · 1 confirmed · 1 applied
✓confirmed·needs your context
Treat the task as regression
WhyInferred from the target: continuous numeric target. (Task inference = continuous numeric target)
Use KFold(n_splits=5, random_state=0, shuffle=True). Verification experiments and baselines use the same splitter repeated 2x (RepeatedKFold), for statistical power.
Full reason
Standard shuffled k-fold.
Risk
Without groups or a time column, rows that belong together (same patient, same customer, later in time) can still leak across folds.
Class
procedural: About how to evaluate; correct regardless of the data. Applied.
Put every preprocessing step in one sklearn Pipeline so it is re-fit on each training fold (defaults: 8 numeric/boolean: median imputation).
Full reason
Statistics computed on the full data (medians, category lists, encoders) leak test-fold information into the score.
Risk
The imputation and encoding defaults are generic; replace them where domain knowledge says otherwise. Feature scaling is estimator-dependent and is not part of this decision: export adds it with scale=True (default) and you can turn it off.
Class
procedural: About how to evaluate; correct regardless of the data. Applied.
·inconclusive·conditional
Power-transform 4 skewed feature(s)
Why4 skewed feature(s) have |skew| >= 2; whether that matters depends on the model family. (Skewness · AveRooms = 21.98 [13.12, 25.58])
DoTest a Yeo-Johnson transform with your estimator (report.verify).
CV: RepeatedKFold(n_splits=5, n_repeats=2) — the export splitter, repeated · 10 folds of repeated k-fold CV on identical folds; corrected repeated k-fold t-test (Nadeau & Bengio 2003; Bouckaert & Frank 2004): variance x (1/n + n_test/n_train), df = n-1; Holm across this run. Development evidence on the development rows only.
Apply a Yeo-Johnson transform to ['AveRooms', 'AveBedrms', 'Population', 'AveOccup'].
Full reason
Skewed inputs can hurt linear and distance-based models; tree ensembles are usually far less sensitive. The effect is model-dependent, so it is tested, not assumed.
Risk
Transforms make coefficients harder to interpret and can amplify noise in the tails.
Check
Compare CV scores with and without the transform for your model family.
Class
conditional: May help or hurt depending on data and model; only an experiment can support it.
3. Target and class handling · 1 verified
✓verified·conditional
Model log(1 + target)
WhyThe target is skewed (skew 0.98, 5.2% IQR-outliers) and non-negative. (Target skewness = 0.9833 [0.9592, 1.005])
DoTest log(1 + y) with your estimator (report.verify).
CV: RepeatedKFold(n_splits=5, n_repeats=2) — the export splitter, repeated · 10 folds of repeated k-fold CV on identical folds; corrected repeated k-fold t-test (Nadeau & Bengio 2003; Bouckaert & Frank 2004): variance x (1/n + n_test/n_train), df = n-1; Holm across this run. Development evidence on the development rows only.
rule detection pass rate on benchmark 2026.11-2: 2/2 checks (known-hazard fixtures; not a real-world accuracy claim)
Findings
f.target_skew Target is skewed (skew=0.98, 5.2% IQR-outliers): squared-error metrics will be driven by the largest values.
Columns
MedHouseVal
Full action
Wrap the estimator in TransformedTargetRegressor(func=log1p, inverse_func=expm1).
Full reason
On a skewed, non-negative target, fitting on the log scale often reduces absolute error; it also changes what the model optimizes (closer to relative error).
Risk
Predictions back-transformed from the log scale are biased low for the mean; RMSE can get worse while MAE improves.
Check
Compare MAE and RMSE with and without the transform.
Class
conditional: May help or hurt depending on data and model; only an experiment can support it.
4. Pick the metric · 1 confirmed
✓confirmed·needs your context
Choose the metric from the cost of errors
WhyWhich metric to optimize depends on what an error costs; the data only says which ones mislead.
DoOptimize MAE; report the others alongside.
Show rule and benchmark details
Rule
metric_policy v1
Full action
Optimize and report: MAE; report alongside: median absolute error, RMSE, R².
Full reason
The data shows which metrics mislead here (see 'avoid'); which one to optimize depends on what an error costs, which only you know.
Risk
Optimizing a metric that does not match the real cost produces a model that looks good and fails where it matters.
Class
needs your context: Cannot be decided from data; applied only after you answer.
5. Final evaluation · 1 applied
✓applied·procedural
Evaluate on the test set once, at the end
WhyPrefit did not reserve an internal holdout; the analysis ran on the frame you passed, and the registered test set (4128 rows) was kept out of it. (External holdout (registered) = 4128 rows (test set))
Shows: Histogram of residuals with a quantile box.
Why this figure: Shows bias (off-centre) and tail weight of the errors.
Data table
quantile
residual
0.01
-1.54
0.05
-0.7592
0.25
-0.1859
0.5
0.026
0.75
0.1991
0.95
0.5976
0.99
1.062
How concentrated the error is
Shows: Cumulative share of total absolute error carried by the worst x% of rows; dashed: equal errors.
Why this figure: A steep start means a few rows drive the error metrics.
Data table
worst share of rows
share of error
0%
0.0%
10%
36.6%
20%
55.2%
30%
68.1%
40%
77.7%
50%
85.1%
60%
90.8%
70%
95.0%
80%
97.9%
90%
99.5%
100%
100.0%
MAE by segment (worst 10)
Shows: Mean absolute error per segment value with at least 20 rows.
Why this figure: Average error can hide segments where the model fails.
Data table
segment
value
n
MAE
house_age
30y or newer
2189
0.308
house_age
older than 30y
1939
0.2853
Details
Limitations
Leakage screening covers single-feature association and numeric correlation only. Leakage through combinations of features, through time, through preprocessing, or through repeated entities is not detected; a clean screen is not proof of no leakage.
Thresholds are rule triggers, not verdicts. Each finding shows its rule version and thresholds; values whose interval straddles a threshold are marked 'near threshold'.
Column kinds and the task are inferred heuristically; check the schema table.
Experiments test one change at a time against the same base setup; interactions between changes are not measured.
Experiment results are development evidence from cross-validation on the dev rows. A claim about generalization needs the untouched holdout (or nested CV when there is none).
All diagnostics (10 figures)
Target distribution · MedHouseVal
Shows: Histogram of the target with a quantile box (whiskers at 1.5 IQR).
Why this figure: Skew, tails and zeros in the target decide which error metrics mislead and whether a target transform is worth testing.
Why this figure: A feature near 1.0 alone is the classic signature of target leakage; the ranking also shows where signal is.
Data table
feature
score
MedInc
0.4712
Longitude
0.296
Latitude
0.2376
AveRooms
0.145
AveOccup
0.069
HouseAge
0.0225
AveBedrms
0
Population
0
Experiment · Model log(1 + target)
Shows: Per-fold score difference (dots), mean with its corrected 95% interval (diamond), and the practical-effect band (shaded): differences inside it count as negligible. Dashed line: no change.
Why this figure: Shows whether the conditional decision helps beyond fold-to-fold noise and beyond the practical threshold, per model family.
Shows: Per-fold score difference (dots), mean with its corrected 95% interval (diamond), and the practical-effect band (shaded): differences inside it count as negligible. Dashed line: no change.
Why this figure: Shows whether the conditional decision helps beyond fold-to-fold noise and beyond the practical threshold, per model family.