Python 52.4%
TeX 47.6%
1% ============================================================================2% Appendix3% ============================================================================4\newpage5\begin{appendices}67\renewcommand{\thetable}{A\arabic{table}}8\renewcommand{\thefigure}{A\arabic{figure}}9\setcounter{table}{0}10\setcounter{figure}{0}1112\section{Machine-Generated Feature Definitions}13\label{app:features}1415Table~\ref{tab:app_features} lists the fields extracted by the language and16vision models under their respective strict JSON schemas, with the value domains as17specified in the extraction scripts (the enumerations are in French in the schema;18they are translated here). All fields use closed enumerations, integers, or19booleans; absent information is coded as \texttt{false}, \texttt{unknown}, or an20empty list. The mapping from fields to regressors is described in21Section~\ref{subsec:vision}.2223\begin{table}[htbp]24 \centering25 \begin{threeparttable}26 \caption{Fields Extracted by the AI Models}27 \label{tab:app_features}28 \small29 \begin{tabular}{@{}p{3.1cm}p{4.3cm}p{6.2cm}@{}}30 \toprule31 Layer & Field & Domain \\32 \midrule33 \multicolumn{3}{@{}l}{\textit{Panel A: Text (LLM, \texttt{gpt-4o-mini}; 20 fields, 18 regressors)}} \\[3pt]34 Condition & \texttt{condition} & to renovate / original / good / renovated / like-new / new / unknown \\35 Turnkey; recently renovated & \texttt{turnkey}, \texttt{recently\_renovated} & boolean \\36 Renovated kitchen / bathroom & \texttt{renovated\_kitchen}, \texttt{renovated\_bathroom} & boolean \\37 Flooring (multi-valued) & \texttt{flooring} & hardwood / ceramic / floating / carpet / vinyl / concrete / other \\38 Countertop & \texttt{countertop} & granite / quartz / marble / laminate / wood / other / unknown \\39 Heating (multi-valued) & \texttt{heating} & electric / baseboards / heat pump / wood / gas / oil / radiant / geothermal / other \\40 View & \texttt{view} & water / mountain / city / none / unknown \\41 Amenities & \texttt{garage}, \texttt{pool}, \texttt{waterfront}, \texttt{finished\_basement}, \texttt{fireplace}, \texttt{central\_ac} & boolean \\42 New construction; income property & \texttt{new\_construction}, \texttt{income\_property} & boolean \\43 Large lot; quiet area & \texttt{large\_lot}, \texttt{quiet\_area} & boolean \\44 Highlights & \texttt{highlights} & 3--6 free-text keywords (not used in the regressions) \\[6pt]45 \multicolumn{3}{@{}l}{\textit{Panel B: Vision (\texttt{claude-haiku-4-5}, façade; 12 fields, 21 regressors)}} \\[3pt]46 Exterior shot & \texttt{is\_exterior} & boolean \\47 Building type (visual) & \texttt{building\_type\_visual} & detached / semi-detached / row / condo building / cottage / land / other \\48 Condition score & \texttt{condition\_score} & integer 1--10 \\49 Curb appeal & \texttt{curb\_appeal} & integer 1--10 \\50 Renovation level & \texttt{renovation\_level} & to renovate / dated / standard / renovated / high-end / unknown \\51 Exterior materials (multi-valued) & \texttt{exterior\_materials} & brick / stone / vinyl / wood / aluminum / stucco / roughcast / concrete / other \\52 Landscaping & \texttt{landscaping} & none / minimal / maintained / manicured \\53 Garage visible & \texttt{has\_garage\_visible} & boolean \\54 Storeys (visual) & \texttt{storeys\_visual} & 1 / 1.5 / 2 / 3+ / unknown \\55 Setting & \texttt{setting} & dense urban / suburban / rural / waterfront / wooded / unknown \\56 Photo quality & \texttt{photo\_quality} & integer 1--10 \\57 Luxury indicator & \texttt{curb\_luxury} & boolean \\58 \bottomrule59 \end{tabular}60 \begin{tablenotes}[flushleft]61 \footnotesize62 \item \textit{Notes:} Both extractions use schema-constrained decoding with63 closed enumerations, required fields, and \texttt{additionalProperties:false}.64 The text layer reads the free-text description (truncated at 4{,}000 characters)65 at temperature zero; the vision layer analyzes one façade photograph per listing66 at the API's default temperature. Model identifiers are the API aliases current in67 July 2026. Fields are mapped to numeric regressors (booleans to $0/1$, ordinal68 scales to integers, multi-valued fields and categories to indicators); the text69 condition scale is coded $0$--$5$ with ``unknown'' at~2, the visual renovation70 level $0$--$4$ with ``unknown'' at~2, and landscaping $0$--$3$.71 \end{tablenotes}72 \end{threeparttable}73\end{table}7475\section{Sample Construction Flow}76\label{app:flow}7778\begin{table}[htbp]79 \centering80 \begin{threeparttable}81 \caption{From Raw Records to Estimation Sample}82 \label{tab:app_flow}83 \begin{tabular}{@{}lr@{}}84 \toprule85 Step & Records \\86 \midrule87 Realtor.ca raw & 27{,}302 \\88 DuProprio raw & 7{,}693 \\89 Houses (single-family + townhouse) with price & 19{,}273 \\90 After outlier cleaning (price bounds, price-per-ft$^2$ trim) & 19{,}123 \\91 \quad of which Realtor.ca / DuProprio & 15{,}356 / 3{,}767 \\92 \quad of which with measured living area (Model~A) & 9{,}446 \\93 \quad of which with a detected exterior photograph & 18{,}314 \\94 \bottomrule95 \end{tabular}96 \begin{tablenotes}[flushleft]97 \footnotesize98 \item \textit{Notes:} See Section~\ref{sec:data}. ``Measured living area'' means99 reported area or area reconstructed from room-level dimensions. Both AI layers100 cover all 19{,}123 cleaned listings.101 \end{tablenotes}102 \end{threeparttable}103\end{table}104105\section{Language Classification}106\label{app:language}107108Each description is classified from the counts $e$ and $f$ of English and French109stop words it contains (articles, prepositions, pronouns, and auxiliaries such as110\textit{the, and, with, is} and \textit{le, la, les, et, avec, est}). A description is111``English'' if $e\ge1.5f$, ``French'' if $f\ge1.5e$, and ``mixed'' otherwise or when112neither count is positive. On Realtor.ca the mixed class is small (2.6\%) and113consists mostly of very short descriptions; on DuProprio it is large (51.7\%)114because the crawler returns the automated English translation followed by the115original French comments. Table~\ref{tab:rob_language_source} reports the gains from116the AI layers within each class, and Table~\ref{tab:rob_ai_coefs} the effect of117adding the language indicators to the hedonic regression. The language variable is118produced by \texttt{scripts/18\_revision\_language\_leakage\_spatial.py}.119120\end{appendices}121