SPB Git forge

spb/wp16_uqo

Public
11commits 1branches 1releases
3.3 MBsize
maindefault branch
1 h agolast push
TeX 52.9% Python 45.7% Shell 1.4%
6.2 KB · 97 lines latex
Raw Blame History
1% ============================================================================2\begin{appendices}3\section{Additional tables}4\label{app:tables}5% ============================================================================67\begin{table}[H]8\centering9\caption{Hedonic price index (descriptive, full sample): cumulative growth by region (\%)}10\label{tab:index_growth}11\footnotesize12\resizebox{\textwidth}{!}{\input{tables/index_growth}}13\begin{tablenotes}\footnotesize14\item Note: monthly effects of a within-municipality hedonic regression estimated on the full sample (Figure~\ref{fig:index}); the peak is the highest month before 2023 and the trough the lowest month between the peak and December 2023.15\end{tablenotes}16\end{table}1718\begin{table}[H]19\centering20\caption{Coverage of the error surface: share of test targets (\%) for which a value is returned, by radius and window}21\label{tab:surface_cov}22\input{tables/surface_cov}23\begin{tablenotes}\footnotesize24\item Note: selection by distance, $k=5$, hedonic grid; coverage depends only on the radius and the window.25\end{tablenotes}26\end{table}2728\begin{table}[H]29\centering30\caption{Error surface without physical adjustment: out-of-sample MdAPE (\%), selection by distance, time adjustment only, twelve-month window}31\label{tab:surface_none}32\small33\input{tables/surface_geo_none}34\end{table}3536\begin{table}[H]37\centering38\caption{Error surface with selection by similarity: out-of-sample MdAPE (\%), hedonic grid, twelve-month window}39\label{tab:surface_sim}40\small41\input{tables/surface_sim_hedo}42\end{table}4344\begin{table}[H]45\centering46\caption{Best configuration of the error surface by selection and adjustment (chosen on 2024, evaluated on 2025--2026)}47\label{tab:e1best}48\small49\input{tables/e1_best}50\begin{tablenotes}\footnotesize51\item Note: best configuration among those with at least 97\% coverage on the validation targets.52\end{tablenotes}53\end{table}5455\begin{table}[H]56\centering57\caption{Horse race with cluster-bootstrap 95\% confidence intervals, 2025--2026}58\label{tab:competition_ci}59\footnotesize60\input{tables/competition_ci}61\begin{tablenotes}\footnotesize62\item Note: MdAPE and MAPE in per cent on the test targets covered by each model; intervals from 999 cluster-bootstrap replications over municipality--quarter cells. Intervals of different models overlap even where their paired difference is significant, because the paired comparison removes the target-specific component of the error.63\end{tablenotes}64\end{table}6566\begin{table}[H]67\centering68\caption{Out-of-sample MdAPE (\%) by administrative region}69\label{tab:regions}70\footnotesize71\input{tables/regions}72\end{table}7374\begin{table}[H]75\centering76\caption{Out-of-sample MdAPE (\%) by price quintile, age and physical link}77\label{tab:price}78\footnotesize79\input{tables/strata_other}80\begin{tablenotes}\footnotesize81\item Note: price quintiles are defined on the realised sale price of the test targets; see Section~\ref{sec:strata} on the denominator effect in the lowest quintile.82\end{tablenotes}83\end{table}8485\section{Implementation details}86\label{app:impl}8788\paragraph{Computation.} The backtest evaluates \nConfigs{} configurations on \nTargetsAll{} targets. For each target the candidate pool is retrieved with a $k$-d tree on projected coordinates, the time, conventional, hedonic, regional, local, GBM and ratio adjustments are computed once for every candidate, and the selection--window--count--weighting--reconciliation combinations are evaluated as operations on the resulting vectors. The computation is embarrassingly parallel over targets and was distributed over five Apple-silicon nodes of a local cluster; the backtest itself takes under ten minutes once the index and the quarterly models are estimated, and the full chain (sample construction, index, eleven quarterly re-estimations of the grids and gradient-boosting models, backtest, analysis) about half an hour. All code is in Python (pandas, NumPy, SciPy, LightGBM) and is available from the author; the analyses of Sections~\ref{sec:selection_stability}, \ref{sec:exclusion} and \ref{sec:clusters}, the seasonal decomposition and the per-model confidence intervals are computed from the stored per-target estimates by a separate script that runs in about a minute.8990\paragraph{Local grid.} The local regression (adjustment scheme f) estimates, on the subject's candidates within 10~km and 24 months, the coefficients of log living area, log lot area, age, the two attached-dwelling indicators and the number of storeys, by ridge regression with penalty $\lambda=50$ towards the regional grid (equation~\ref{eq:local}); with fewer than 40 candidates the regional grid is used.9192\paragraph{Gradient boosting.} LightGBM with 127 leaves, minimum 40 observations per leaf, learning rate 0.05, feature and bagging fractions 0.8, $L_2$ regularisation 1, $L_1$ objective, number of trees by early stopping (patience 100) on the chronologically last 10\% of the training sample with a floor of 300 trees, then refit on the whole training sample. Features: log living area, log lot area, age, age$^2$, physical-link and construction-type indicators, storeys, new-build indicator, latitude, longitude, projected coordinates, region, building type, month of sale (set to the last training month when predicting), and for M11b the log assessed value, its land share and its roll vintage. The target is the log price brought to the level of the last training month by the point-in-time index; predictions are carried to the level of the month preceding the valuation by the index known at valuation time. The GBM adjustments of scheme (g) use the model without the assessed value.9394\paragraph{Cluster bootstrap.} Municipality--quarter cells of the test period (several thousand cells) are resampled with replacement 999 times. For each replication, the resampled cells define integer multiplicities for every target; the mean of the paired APE differences and the two medians are recomputed with these multiplicities as weights, so that all models and all pairs are evaluated on the same replications. The cluster-robust $t$ statistic of equation~\eqref{eq:dm} uses the same cells. The sensitivity analysis of Table~\ref{tab:cluster_sens} repeats the procedure with MRC--quarter, municipality and region--quarter cells and 399 replications.9596\end{appendices}97