% Author: Simon-Pierre Boucher — contact@spboucher.ai % ============================================================================ \section{Robustness} \label{sec:robust} This section examines the five choices in the design that a sceptical reader would most want varied: the rule that converts transformed-scale predictions into price levels, the leakage channels of the random holdout, the implementation of fine spatial effects, the resolution of the Box--Cox grid and the hyper-parameters of the boosting machine. \subsection{The retransformation rule} Table~\ref{tab:retransformation} reports the scoreboard for the transformed-scale models under the median rule used throughout (eq.~\ref{eq:median}) and under Duan's mean rule (eq.~\ref{eq:duan}). The smearing factors $\hat{s}$ lie between 1.06 and 1.07 for the least-squares models and between 1.03 and 1.05 for the ensembles, whose in-sample residuals are shrunk by overfitting. Two regularities stand out. First, the mean rule lowers the median error of \emph{every} log-scale model under the random split, by about one point for the linear models and 1.3 points for the ensembles. This is not what a conditional-mean correction should do to a median-based metric; it happens because the log residuals are left-skewed (skewness $-1.4$ to $-1.8$), so that their median is $+0.06$ while their mean is zero, and $\exp(\hat{z})$ under-prices the typical sale by about 6\%---which is, by coincidence, the size of the smearing factor. Second, under the forward-in-time split the mean rule lowers median errors by 2.5--3 points for all models, because the market rose after the training window and any upward factor offsets part of the staleness. Neither effect changes a ranking when the rule is applied uniformly: boosting leads the spline hedonic by 3.4 points under the random split and by 0.7 points under the forward split with the mean rule, against 3.2 and 0.5 with the median rule. What does change a ranking is applying the rule to one family only. Version~1.0 of this paper smeared the linear log models and not the ensembles; the result was a forward-split comparison of 19.1\% for the smeared spline hedonic against 21.2\% for the unsmeared boosting model, reported as a reversal. The comparable numbers are 21.7\% against 21.2\% (median rule) or 19.1\% against 18.4\% (mean rule). The log-scale metrics are affected in the same direction: smearing adds $\ln\hat{s} \approx 0.06$ to every log prediction, which inflates RMSE$_{\ln}$ and depresses $R^2_{\ln}$ for the smeared family only, so that the ``identical $R^2_{\ln}$'' of the first version (0.52 for both) becomes 0.49 against 0.52 in favour of boosting under the uniform rule. \begin{table}[tbp] \centering \begin{threeparttable} \caption{Median rule versus Duan smearing} \label{tab:retransformation} \scriptsize \setlength{\tabcolsep}{4pt} \input{../results/tables/retransformation} \begin{tablenotes}[flushleft]\footnotesize \item \textit{Notes:} Median: transformed-scale prediction inverted as is, eq.~\eqref{eq:median} (main scoreboard). Mean: Duan smearing, eq.~\eqref{eq:duan}; $\hat{s}$ is the smearing factor estimated on training residuals (random split), undefined for the Box--Cox model, whose mean prediction averages the inverse transformation over 1{,}000 training residuals. $R^2_{\ln}$ under the mean rule is computed on the smeared log prediction. \end{tablenotes} \end{threeparttable} \end{table} \subsection{Leakage-free holdouts} Table~\ref{tab:group_splits} re-runs the full race under the two grouped holdouts of Section~\ref{sec:holdouts}, and Table~\ref{tab:leakage} decomposes the random holdout by whether the test sale's parcel, or its exact coordinates, also appear in training. Repeat sales are irrelevant: the parcel-grouped race reproduces the random race to within 0.1--0.4 points for every model, and within the random holdout the boosting model prices test sales whose parcel sold before in training (14.5\%) no better than the others (14.4\%). Shared coordinates matter more, but for a specific reason. Test sales that share coordinates with a training sale are priced at 12.0\% by boosting against 15.3\% for the rest, and at 16.7\% against 22.9\% by the $k$-NN rule, whose nearest neighbour is then literally the same building; the linear models are unaffected (17.8\% against 17.6\% for the splines). Condominiums account for most of these co-located sales, and the boosting model prices them at 8.9\% when their building is in training and 10.2\% when it is not, against 18.0\% and 20.3\% for the quadratic OLS. The condominium advantage of Section~\ref{sec:ext} is therefore genuine micro-location, with a modest recall component. The building-grouped race, in which no coordinate pair straddles the split, confirms it: boosting posts 14.6\% against 17.8\% for the spline hedonic, a 3.2-point gap identical to the random race, and the only model that loses materially is the $k$-NN rule (22.3\% against 21.2\%). \begin{table}[p] \centering \begin{threeparttable} \caption{The race under random, parcel-grouped and building-grouped holdouts} \label{tab:group_splits} \small \input{../results/tables/group_splits} \begin{tablenotes}[flushleft]\footnotesize \item \textit{Notes:} MdAPE in percent. Parcel-grouped: 20\% of assessment-roll parcels assigned to the test set, so that repeat sales of a property never straddle the split. Building-grouped: 20\% of exact coordinate pairs assigned to the test set, so that units geocoded to the same building or complex never straddle the split. \end{tablenotes} \end{threeparttable} \end{table} \begin{table}[tbp] \centering \begin{threeparttable} \caption{Random holdout: accuracy on test sales seen and unseen through their parcel or coordinates} \label{tab:leakage} \small \input{../results/tables/leakage} \begin{tablenotes}[flushleft]\footnotesize \item \textit{Notes:} MdAPE (\%) on the random holdout. ``Same parcel in training'': the parcel of the test sale sold at least once in the training sample. ``Same coordinates in training'': at least one training sale shares the exact geocoded coordinates of the test sale. \end{tablenotes} \end{threeparttable} \end{table} \subsection{Nested spatial fixed effects} Section~\ref{sec:results} attributes the poor showing of the $\sim$1.1~km grid to thin cells and to the arbitrary pricing of unseen cells. Table~\ref{tab:nested_fe} adds two specifications in which the grid effects enter \emph{together with} municipality effects. Because the two sets of dummies are nearly collinear, the vanishing-penalty ridge returns the minimum-norm least-squares solution, which assigns the component common to a municipality to the municipality effect and only the deviation to the cell effect---a crude form of partial pooling---and a test sale in an unseen cell inherits its municipality's level. The effect is large. Nested within municipalities, the 5.5~km grid improves from 18.7\% to 17.7\% and the 1.1~km grid from 21.0\% to 17.3\%, the lowest median error of any linear specification in the paper, below the spline hedonic (17.6\%) with the same $R^2_{\ln}$ (0.59). Under the forward-in-time split the nested fine grid posts 21.6\% against 23.3\% for municipality effects alone and 25.3\% for the fine grid alone. The conclusion for axis~C is therefore sharper than ``finer overfits'': fine spatial effects are valuable when they are anchored to a coarser level that supplies the prior for thin and unseen cells, and harmful when they are not. A hierarchical or kriged location effect \citep{case2004modeling, hill2018geospatial} would push the linear frontier further; we leave its estimation to future work. \begin{table}[tbp] \centering \begin{threeparttable} \caption{Nested spatial fixed effects} \label{tab:nested_fe} \small \input{../results/tables/nested_fe} \begin{tablenotes}[flushleft]\footnotesize \item \textit{Notes:} Quadratic semi-log backbone with quarter fixed effects. C3$'$ and C4$'$ add the grid effects to the municipality effects; with a vanishing ridge penalty the estimator is the minimum-norm least-squares solution and unseen cells fall back on their municipality. \end{tablenotes} \end{threeparttable} \end{table} \subsection{A finer Box--Cox grid} The main grid steps $\lambda$ by $0.25$. Refining it to steps of $0.05$ over $[-0.25, 0.75]$ moves the profile-likelihood maximum to $\hat\lambda = 0.35$, with a profile that is flat between $0.25$ and $0.55$ (differences of under one thousandth of the log-likelihood, within the tolerance of the sparse iterative solver) and falls steeply on either side. The Box--Cox model at $\hat\lambda = 0.35$ posts a random-holdout MdAPE of 18.4\% against 18.6\% at $0.25$: the exponent is imprecisely identified in a range that excludes both the linear and the logarithmic case, and its exact value is immaterial for prediction. \subsection{Boosting hyper-parameters} Table~\ref{tab:hgb} re-estimates the boosting model under four materially different configurations: shallow trees with more iterations, deep trees, heavy regularisation (minimum leaf 200, $\ell_2 = 1$), and a configuration whose number of iterations is chosen by early stopping on the last 10\% of training sales in date order, the time-honest tuning rule a careful practitioner would use for a forward-looking model. Under the random holdout the four alternatives span 14.3--14.7\% MdAPE against 14.4\% for the baseline, and under the forward-in-time holdout 21.2--21.6\% against 21.2\%; $R^2_{\ln}$ moves by at most 0.006. The time-honest early-stopping rule selects 700 iterations on the random training sample and 1{,}000 on the pre-2025 sample and reproduces the baseline to within 0.1 point under both splits. The conclusions of Sections~\ref{sec:results} and~\ref{sec:gap} do not depend on the particular configuration we fixed a priori, and tuning on a time-ordered validation set does not remove the level staleness that dominates the forward-split error, because no choice of hyper-parameters lets a static tree extrapolate a price level it has not seen. \begin{table}[tbp] \centering \begin{threeparttable} \caption{Gradient-boosting hyper-parameter sensitivity} \label{tab:hgb} \footnotesize \setlength{\tabcolsep}{4pt} \input{../results/tables/hgb_sensitivity} \begin{tablenotes}[flushleft]\footnotesize \item \textit{Notes:} All configurations use the D4 feature set (attributes, coordinates, month counter). Baseline: 600 iterations, learning rate 0.08, 63 leaves, minimum leaf 20, $\ell_2 = 0.01$. Early stopping: iterations added in blocks of 100 (learning rate 0.05) until the squared log error on the last 10\% of training sales in date order stops improving; the selected number of iterations is shown in brackets for the random and forward splits. \end{tablenotes} \end{threeparttable} \end{table}