Spaces:
Running
Running
Turki Almurahhem Claude Fable 5 commited on
Commit ·
3e830b4
1
Parent(s): a3a71f1
Refresh v11-era borough/tier tables to v22 canonical; regenerate scatter data
Browse filesBorough and price-tier tables across paper/technical report/demo script
carried v11 evaluation numbers (Manhattan 36.66%, tier 40.26%, etc.) and
technical_report had literal 0.xxxx R² placeholders. Update all to the
canonical segment metrics in models/meta.json; drop per-borough R²
columns (never computed for v22 — the training script only records
MedAPE/MAE per segment) and label the Staten Island paradox R² figures
as the v11 evaluation, noting the pattern persists in v22. Align
thesis_metrics.txt tier table with meta.json. Regenerate scatter_nyc/
riyadh.json from the v22/v12 stacks (was v21) and add per-borough/tier
diagnostics to generate_scatter.py. Regenerate .docx files.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- data/processed/scatter_nyc.json +0 -0
- data/processed/scatter_riyadh.json +0 -0
- data/processed/thesis_metrics.txt +4 -4
- docs/defense_qa.docx +0 -0
- docs/demo_script.docx +0 -0
- docs/demo_script.md +2 -2
- docs/demo_script.tex +3 -3
- docs/generate_docx.py +14 -14
- docs/technical_report.docx +0 -0
- docs/technical_report.tex +7 -7
- docs/technical_report.txt +21 -20
- docs/thaman_paper.docx +0 -0
- docs/thaman_paper.tex +16 -14
- docs/thaman_paper.txt +26 -24
- scripts/generate_scatter.py +20 -0
data/processed/scatter_nyc.json
CHANGED
|
The diff for this file is too large to render.
See raw diff
|
|
|
data/processed/scatter_riyadh.json
CHANGED
|
The diff for this file is too large to render.
See raw diff
|
|
|
data/processed/thesis_metrics.txt
CHANGED
|
@@ -28,10 +28,10 @@ building 18.61% 0.5364 139
|
|
| 28 |
### Table 4: NYC — MedAPE by Price Tier ###
|
| 29 |
Tier MedAPE MAE ($) N
|
| 30 |
----------------------------------------------------
|
| 31 |
-
<$500K 27.
|
| 32 |
-
$500K–1M
|
| 33 |
-
$1M–3M 21.30%
|
| 34 |
-
$3M–10M 39.
|
| 35 |
|
| 36 |
### Table 5: NYC Stack — Per-Model Contributions (v22) ###
|
| 37 |
Learner R² Holdout MedAPE
|
|
|
|
| 28 |
### Table 4: NYC — MedAPE by Price Tier ###
|
| 29 |
Tier MedAPE MAE ($) N
|
| 30 |
----------------------------------------------------
|
| 31 |
+
<$500K 27.10% 225,470 6,497
|
| 32 |
+
$500K–1M 15.12% 182,149 10,980
|
| 33 |
+
$1M–3M 21.30% 454,712 7,978
|
| 34 |
+
$3M–10M 39.77% 2,180,172 1,707
|
| 35 |
|
| 36 |
### Table 5: NYC Stack — Per-Model Contributions (v22) ###
|
| 37 |
Learner R² Holdout MedAPE
|
docs/defense_qa.docx
CHANGED
|
Binary files a/docs/defense_qa.docx and b/docs/defense_qa.docx differ
|
|
|
docs/demo_script.docx
CHANGED
|
Binary files a/docs/demo_script.docx and b/docs/demo_script.docx differ
|
|
|
docs/demo_script.md
CHANGED
|
@@ -125,9 +125,9 @@ Riyadh click target: 24.6877, 46.7219 (Downtown Riyadh / King Fahd Road)
|
|
| 125 |
**English:**
|
| 126 |
> "Finally, the analytics dashboard. This shows model performance broken down by NYC borough and price tier."
|
| 127 |
|
| 128 |
-
> "Notice the Staten Island paradox:
|
| 129 |
|
| 130 |
-
> "Manhattan is the hardest market at
|
| 131 |
|
| 132 |
**Arabic:**
|
| 133 |
> "لوحة التحليلات تُظهر أداء النموذج مقسّماً حسب منطقة نيويورك وشريحة السعر."
|
|
|
|
| 125 |
**English:**
|
| 126 |
> "Finally, the analytics dashboard. This shows model performance broken down by NYC borough and price tier."
|
| 127 |
|
| 128 |
+
> "Notice the Staten Island paradox: the worst per-borough R² but the best MedAPE at 14.4%. That's because Staten Island has very low price variance; the model's absolute errors are small, but R² penalises a low-variance target. MedAPE is the right metric for a user-facing AVM."
|
| 129 |
|
| 130 |
+
> "Manhattan is the hardest market at 35.2% MedAPE. Co-op board approval discounts and unobservable interior finishes create heterogeneity that no tabular dataset can capture."
|
| 131 |
|
| 132 |
**Arabic:**
|
| 133 |
> "لوحة التحليلات تُظهر أداء النموذج مقسّماً حسب منطقة نيويورك وشريحة السعر."
|
docs/demo_script.tex
CHANGED
|
@@ -329,12 +329,12 @@ consistent with documented Saudi negotiation margins of 20 to 50 percent.''
|
|
| 329 |
``Finally, the analytics dashboard. This shows model performance broken down by
|
| 330 |
NYC borough and price tier.''
|
| 331 |
|
| 332 |
-
``Notice the Staten Island paradox:
|
| 333 |
-
|
| 334 |
variance; the model's absolute errors are small, but $R^2$ penalises a
|
| 335 |
low-variance target. MedAPE is the right metric for a user-facing AVM.''
|
| 336 |
|
| 337 |
-
``Manhattan is the hardest market at
|
| 338 |
discounts and unobservable interior finishes create heterogeneity that no
|
| 339 |
tabular dataset can capture.''
|
| 340 |
\end{narration}
|
|
|
|
| 329 |
``Finally, the analytics dashboard. This shows model performance broken down by
|
| 330 |
NYC borough and price tier.''
|
| 331 |
|
| 332 |
+
``Notice the Staten Island paradox: the worst per-borough $R^2$ but the best
|
| 333 |
+
MedAPE at 14.4\%. That's because Staten Island has very low price
|
| 334 |
variance; the model's absolute errors are small, but $R^2$ penalises a
|
| 335 |
low-variance target. MedAPE is the right metric for a user-facing AVM.''
|
| 336 |
|
| 337 |
+
``Manhattan is the hardest market at 35.2\% MedAPE. Co-op board approval
|
| 338 |
discounts and unobservable interior finishes create heterogeneity that no
|
| 339 |
tabular dataset can capture.''
|
| 340 |
\end{narration}
|
docs/generate_docx.py
CHANGED
|
@@ -361,13 +361,13 @@ def build_paper(path):
|
|
| 361 |
set_heading(doc, "7.2 Performance by Borough", level=2)
|
| 362 |
add_table_style(
|
| 363 |
doc,
|
| 364 |
-
headers=["Borough", "n", "
|
| 365 |
rows=[
|
| 366 |
-
("Staten Island", "3,052", "
|
| 367 |
-
("Queens", "9,533", "
|
| 368 |
-
("Bronx", "2,735", "
|
| 369 |
-
("Brooklyn", "7,032", "
|
| 370 |
-
("Manhattan", "5,411", "
|
| 371 |
],
|
| 372 |
caption="Borough-level holdout performance",
|
| 373 |
)
|
|
@@ -716,13 +716,13 @@ def build_technical_report(path):
|
|
| 716 |
)
|
| 717 |
add_table_style(
|
| 718 |
doc,
|
| 719 |
-
headers=["Borough", "n", "
|
| 720 |
rows=[
|
| 721 |
-
("Staten Island", "3,052", "
|
| 722 |
-
("Queens", "9,533", "
|
| 723 |
-
("Bronx", "2,735", "
|
| 724 |
-
("Brooklyn", "7,032", "
|
| 725 |
-
("Manhattan", "5,411", "
|
| 726 |
],
|
| 727 |
caption="Borough-level performance",
|
| 728 |
)
|
|
@@ -1136,10 +1136,10 @@ def build_demo_script(path):
|
|
| 1136 |
[
|
| 1137 |
("English",
|
| 1138 |
"\"The analytics dashboard shows model performance broken down by NYC borough and price tier.\"\n\n"
|
| 1139 |
-
"\"Notice the Staten Island paradox:
|
| 1140 |
"low price variance; the model's absolute errors are small, but R² penalises a low-variance target. "
|
| 1141 |
"MedAPE is the right metric for a user-facing AVM.\"\n\n"
|
| 1142 |
-
"\"Manhattan is hardest at
|
| 1143 |
"finishes create heterogeneity that no tabular dataset can capture.\""),
|
| 1144 |
("Arabic",
|
| 1145 |
"\"لوحة التحليلات تُظهر أداء النموذج مقسّماً حسب منطقة نيويورك وشريحة السعر.\"\n\n"
|
|
|
|
| 361 |
set_heading(doc, "7.2 Performance by Borough", level=2)
|
| 362 |
add_table_style(
|
| 363 |
doc,
|
| 364 |
+
headers=["Borough", "n", "MedAPE", "MAE"],
|
| 365 |
rows=[
|
| 366 |
+
("Staten Island", "3,052", "14.41%", "$220,216"),
|
| 367 |
+
("Queens", "9,533", "17.43%", "$366,226"),
|
| 368 |
+
("Bronx", "2,735", "21.08%", "$1,531,532"),
|
| 369 |
+
("Brooklyn", "7,032", "20.64%", "$857,322"),
|
| 370 |
+
("Manhattan", "5,411", "35.16%", "$2,714,327"),
|
| 371 |
],
|
| 372 |
caption="Borough-level holdout performance",
|
| 373 |
)
|
|
|
|
| 716 |
)
|
| 717 |
add_table_style(
|
| 718 |
doc,
|
| 719 |
+
headers=["Borough", "n", "MedAPE", "MAE"],
|
| 720 |
rows=[
|
| 721 |
+
("Staten Island", "3,052", "14.41%", "$220,216"),
|
| 722 |
+
("Queens", "9,533", "17.43%", "$366,226"),
|
| 723 |
+
("Bronx", "2,735", "21.08%", "$1,531,532"),
|
| 724 |
+
("Brooklyn", "7,032", "20.64%", "$857,322"),
|
| 725 |
+
("Manhattan", "5,411", "35.16%", "$2,714,327"),
|
| 726 |
],
|
| 727 |
caption="Borough-level performance",
|
| 728 |
)
|
|
|
|
| 1136 |
[
|
| 1137 |
("English",
|
| 1138 |
"\"The analytics dashboard shows model performance broken down by NYC borough and price tier.\"\n\n"
|
| 1139 |
+
"\"Notice the Staten Island paradox: the worst per-borough R² but the best MedAPE (14.4%). Staten Island has very "
|
| 1140 |
"low price variance; the model's absolute errors are small, but R² penalises a low-variance target. "
|
| 1141 |
"MedAPE is the right metric for a user-facing AVM.\"\n\n"
|
| 1142 |
+
"\"Manhattan is hardest at 35.2% MedAPE. Co-op board approval discounts and unobservable interior "
|
| 1143 |
"finishes create heterogeneity that no tabular dataset can capture.\""),
|
| 1144 |
("Arabic",
|
| 1145 |
"\"لوحة التحليلات تُظهر أداء النموذج مقسّماً حسب منطقة نيويورك وشريحة السعر.\"\n\n"
|
docs/technical_report.docx
CHANGED
|
Binary files a/docs/technical_report.docx and b/docs/technical_report.docx differ
|
|
|
docs/technical_report.tex
CHANGED
|
@@ -457,15 +457,15 @@ Separate XGBoost trained on Manhattan sales $\geq \$2{,}500{,}000$ ($n
|
|
| 457 |
\begin{table}[H]
|
| 458 |
\centering
|
| 459 |
\caption{Borough-level holdout performance}
|
| 460 |
-
\begin{tabular}{
|
| 461 |
\toprule
|
| 462 |
-
Borough & $n$ &
|
| 463 |
\midrule
|
| 464 |
-
Manhattan & 5,411 &
|
| 465 |
-
Bronx & 2,735 &
|
| 466 |
-
Brooklyn & 7,032 &
|
| 467 |
-
Queens & 9,533 &
|
| 468 |
-
Staten Island & 3,052 &
|
| 469 |
\bottomrule
|
| 470 |
\end{tabular}
|
| 471 |
\end{table}
|
|
|
|
| 457 |
\begin{table}[H]
|
| 458 |
\centering
|
| 459 |
\caption{Borough-level holdout performance}
|
| 460 |
+
\begin{tabular}{lrrr}
|
| 461 |
\toprule
|
| 462 |
+
Borough & $n$ & MedAPE & MAE (USD) \\
|
| 463 |
\midrule
|
| 464 |
+
Manhattan & 5,411 & 35.16\% & \$2,714,327 \\
|
| 465 |
+
Bronx & 2,735 & 21.08\% & \$1,531,532 \\
|
| 466 |
+
Brooklyn & 7,032 & 20.64\% & \$857,322 \\
|
| 467 |
+
Queens & 9,533 & 17.43\% & \$366,226 \\
|
| 468 |
+
Staten Island & 3,052 & 14.41\% & \$220,216 \\
|
| 469 |
\bottomrule
|
| 470 |
\end{tabular}
|
| 471 |
\end{table}
|
docs/technical_report.txt
CHANGED
|
@@ -537,26 +537,27 @@ LightGBM (wide) 0.6403 (not stored) 20.28%
|
|
| 537 |
CatBoost (high-cap) 0.6426 (not stored) 20.35%
|
| 538 |
Stack v22 (Ridge meta) 0.6495 $1,047,004 20.32%
|
| 539 |
|
| 540 |
-
Improvement vs. baseline (linear regression on 3 features): R² 0.238 → 0.
|
| 541 |
Improvement vs. v1 (single XGBoost, 2022): MedAPE ~32% → 20.32%
|
| 542 |
|
| 543 |
6.2 Performance by Borough (Holdout)
|
| 544 |
──────────────────────────────────────
|
| 545 |
|
| 546 |
-
Borough n
|
| 547 |
-
────────────── ──────── ────────
|
| 548 |
-
Manhattan 5,411
|
| 549 |
-
Bronx 2,735
|
| 550 |
-
Brooklyn 7,032
|
| 551 |
-
Queens 9,533
|
| 552 |
-
Staten Island 3,052
|
| 553 |
-
|
| 554 |
-
Key finding — Staten Island paradox: lowest R² of any borough
|
| 555 |
-
at
|
| 556 |
-
$300K–$700K). The model predicts well in absolute terms, but R²
|
| 557 |
-
low-variance target disproportionately. MedAPE is the user-relevant
|
| 558 |
-
|
| 559 |
-
|
|
|
|
| 560 |
- Co-op board approval discounts (unobservable)
|
| 561 |
- Interior finishes, renovation quality (unobservable)
|
| 562 |
- Floor number premium in high-rises (partially captured by numfloors)
|
|
@@ -567,12 +568,12 @@ Manhattan is hardest: 36.89% MedAPE. Reasons:
|
|
| 567 |
|
| 568 |
Tier n MedAPE MAE (USD)
|
| 569 |
────────────── ──────── ───────── ──────────────
|
| 570 |
-
< $500K 6,497 27.
|
| 571 |
-
$500K – $1M 10,980
|
| 572 |
-
$1M – $3M 7,978 21.
|
| 573 |
-
$3M – $10M 1,707
|
| 574 |
|
| 575 |
-
The sweet spot is $500K–$1M (typical Queens/Brooklyn starter home):
|
| 576 |
The model struggles most below $500K (often Bronx/SI properties with high
|
| 577 |
variance from distressed sales) and above $3M (Manhattan luxury, unobservable
|
| 578 |
quality signals).
|
|
|
|
| 537 |
CatBoost (high-cap) 0.6426 (not stored) 20.35%
|
| 538 |
Stack v22 (Ridge meta) 0.6495 $1,047,004 20.32%
|
| 539 |
|
| 540 |
+
Improvement vs. baseline (linear regression on 3 features): R² 0.238 → 0.6495
|
| 541 |
Improvement vs. v1 (single XGBoost, 2022): MedAPE ~32% → 20.32%
|
| 542 |
|
| 543 |
6.2 Performance by Borough (Holdout)
|
| 544 |
──────────────────────────────────────
|
| 545 |
|
| 546 |
+
Borough n MedAPE MAE (USD)
|
| 547 |
+
────────────── ──────── ───────── ──────────────
|
| 548 |
+
Manhattan 5,411 35.16% $2,714,327
|
| 549 |
+
Bronx 2,735 21.08% $1,531,532
|
| 550 |
+
Brooklyn 7,032 20.64% $857,322
|
| 551 |
+
Queens 9,533 17.43% $366,226
|
| 552 |
+
Staten Island 3,052 14.41% $220,216
|
| 553 |
+
|
| 554 |
+
Key finding — Staten Island paradox: lowest R² of any borough (v11 evaluation),
|
| 555 |
+
yet best MedAPE at 14.41%. Explanation: Staten Island has very low price variance
|
| 556 |
+
(most sales $300K–$700K). The model predicts well in absolute terms, but R²
|
| 557 |
+
penalises a low-variance target disproportionately. MedAPE is the user-relevant
|
| 558 |
+
metric.
|
| 559 |
+
|
| 560 |
+
Manhattan is hardest: 35.16% MedAPE. Reasons:
|
| 561 |
- Co-op board approval discounts (unobservable)
|
| 562 |
- Interior finishes, renovation quality (unobservable)
|
| 563 |
- Floor number premium in high-rises (partially captured by numfloors)
|
|
|
|
| 568 |
|
| 569 |
Tier n MedAPE MAE (USD)
|
| 570 |
────────────── ──────── ───────── ──────────────
|
| 571 |
+
< $500K 6,497 27.10% $225,470
|
| 572 |
+
$500K – $1M 10,980 15.12% $182,149
|
| 573 |
+
$1M – $3M 7,978 21.30% $454,712
|
| 574 |
+
$3M – $10M 1,707 39.77% $2,180,172
|
| 575 |
|
| 576 |
+
The sweet spot is $500K–$1M (typical Queens/Brooklyn starter home): 15.12% MedAPE.
|
| 577 |
The model struggles most below $500K (often Bronx/SI properties with high
|
| 578 |
variance from distressed sales) and above $3M (Manhattan luxury, unobservable
|
| 579 |
quality signals).
|
docs/thaman_paper.docx
CHANGED
|
Binary files a/docs/thaman_paper.docx and b/docs/thaman_paper.docx differ
|
|
|
docs/thaman_paper.tex
CHANGED
|
@@ -725,20 +725,22 @@ diversity for blending to produce a net benefit.
|
|
| 725 |
\label{tab:borough_perf}
|
| 726 |
\begin{tabular}{lrrrp{5.5cm}}
|
| 727 |
\toprule
|
| 728 |
-
Borough & $n$ &
|
| 729 |
\midrule
|
| 730 |
-
Staten Island & 3,052 &
|
| 731 |
-
Queens & 9,533 &
|
| 732 |
-
Bronx & 2,735 &
|
| 733 |
-
Brooklyn & 7,032 &
|
| 734 |
-
Manhattan & 5,411 &
|
| 735 |
\bottomrule
|
| 736 |
\end{tabular}
|
| 737 |
\end{table}
|
| 738 |
|
| 739 |
\subsubsection{The Staten Island Statistical Paradox}
|
| 740 |
-
Staten Island presents the most instructive diagnostic anomaly: the
|
| 741 |
-
$R^2$ (0.4103) combined with the
|
|
|
|
|
|
|
| 742 |
highlights a fundamental mathematical reality. $R^2$ measures:
|
| 743 |
\begin{equation}
|
| 744 |
R^2 = 1 - \frac{SS_\text{res}}{SS_\text{tot}}
|
|
@@ -752,7 +754,7 @@ MedAPE is the correct optimisation target.
|
|
| 752 |
|
| 753 |
\subsubsection{Manhattan Luxury Sub-Market and Co-Op Complexity}
|
| 754 |
Manhattan exposes the fundamental limitations of administrative tabular datasets
|
| 755 |
-
for luxury AVM (MedAPE =
|
| 756 |
dictated by subjective, opaque variables entirely absent from municipal tax
|
| 757 |
datasets: exact floor level, unobstructed park views, ceiling heights, and
|
| 758 |
bespoke interior finishes. Furthermore, co-op buyers do not purchase real
|
|
@@ -770,10 +772,10 @@ pricing 10--50\% per square foot below equivalent condominiums.
|
|
| 770 |
\toprule
|
| 771 |
Tier & $n$ & MedAPE & Notes \\
|
| 772 |
\midrule
|
| 773 |
-
Under \$500K & 6,497 &
|
| 774 |
-
\$500K--\$1M & 10,980 &
|
| 775 |
-
\$1M--\$3M & 7,978 &
|
| 776 |
-
Over \$3M & 1,707 &
|
| 777 |
\bottomrule
|
| 778 |
\end{tabular}
|
| 779 |
\end{table}
|
|
@@ -1112,7 +1114,7 @@ prices---consistent with documented Saudi residential market friction
|
|
| 1112 |
localised failure invisible to random cross-validation.
|
| 1113 |
\item The Staten Island paradox demonstrates that $R^2$ and MedAPE measure
|
| 1114 |
fundamentally different aspects of model quality.
|
| 1115 |
-
\item Manhattan is the hardest borough (MedAPE =
|
| 1116 |
discounts, unobservable interior finishes, and view premiums create
|
| 1117 |
heterogeneity that no tabular dataset can capture.
|
| 1118 |
\end{enumerate}
|
|
|
|
| 725 |
\label{tab:borough_perf}
|
| 726 |
\begin{tabular}{lrrrp{5.5cm}}
|
| 727 |
\toprule
|
| 728 |
+
Borough & $n$ & MedAPE & MAE & Notes \\
|
| 729 |
\midrule
|
| 730 |
+
Staten Island & 3,052 & 14.41\% & \$220,216 & Best accuracy; uniform housing stock \\
|
| 731 |
+
Queens & 9,533 & 17.43\% & \$366,226 & Highest volume \\
|
| 732 |
+
Bronx & 2,735 & 21.08\% & \$1,531,532 & Mixed housing stock \\
|
| 733 |
+
Brooklyn & 7,032 & 20.64\% & \$857,322 & Wide price range across NTAs \\
|
| 734 |
+
Manhattan & 5,411 & 35.16\% & \$2,714,327 & Worst; extreme luxury heterogeneity \\
|
| 735 |
\bottomrule
|
| 736 |
\end{tabular}
|
| 737 |
\end{table}
|
| 738 |
|
| 739 |
\subsubsection{The Staten Island Statistical Paradox}
|
| 740 |
+
Staten Island presents the most instructive diagnostic anomaly: in the v11
|
| 741 |
+
evaluation it recorded the worst per-borough $R^2$ (0.4103) combined with the
|
| 742 |
+
best MedAPE (13.46\%) --- and it retains the best MedAPE (14.41\%) in the
|
| 743 |
+
final v22 model. This divergence
|
| 744 |
highlights a fundamental mathematical reality. $R^2$ measures:
|
| 745 |
\begin{equation}
|
| 746 |
R^2 = 1 - \frac{SS_\text{res}}{SS_\text{tot}}
|
|
|
|
| 754 |
|
| 755 |
\subsubsection{Manhattan Luxury Sub-Market and Co-Op Complexity}
|
| 756 |
Manhattan exposes the fundamental limitations of administrative tabular datasets
|
| 757 |
+
for luxury AVM (MedAPE = 35.16\%). Value in the Manhattan luxury market is
|
| 758 |
dictated by subjective, opaque variables entirely absent from municipal tax
|
| 759 |
datasets: exact floor level, unobstructed park views, ceiling heights, and
|
| 760 |
bespoke interior finishes. Furthermore, co-op buyers do not purchase real
|
|
|
|
| 772 |
\toprule
|
| 773 |
Tier & $n$ & MedAPE & Notes \\
|
| 774 |
\midrule
|
| 775 |
+
Under \$500K & 6,497 & 27.10\% & Distressed sales, foreclosures \\
|
| 776 |
+
\$500K--\$1M & 10,980 & 15.12\% & Best accuracy; highest data volume \\
|
| 777 |
+
\$1M--\$3M & 7,978 & 21.30\% & Mid-luxury; reasonable accuracy \\
|
| 778 |
+
Over \$3M & 1,707 & 39.77\% & Luxury; unique properties, sparse comps \\
|
| 779 |
\bottomrule
|
| 780 |
\end{tabular}
|
| 781 |
\end{table}
|
|
|
|
| 1114 |
localised failure invisible to random cross-validation.
|
| 1115 |
\item The Staten Island paradox demonstrates that $R^2$ and MedAPE measure
|
| 1116 |
fundamentally different aspects of model quality.
|
| 1117 |
+
\item Manhattan is the hardest borough (MedAPE = 35.16\%). Co-op board approval
|
| 1118 |
discounts, unobservable interior finishes, and view premiums create
|
| 1119 |
heterogeneity that no tabular dataset can capture.
|
| 1120 |
\end{enumerate}
|
docs/thaman_paper.txt
CHANGED
|
@@ -746,17 +746,19 @@ diversity for blending to produce a net benefit.
|
|
| 746 |
|
| 747 |
7.4 Performance by Borough
|
| 748 |
---------------------------
|
| 749 |
-
Borough n
|
| 750 |
-
------- ---- ------ ------- -----
|
| 751 |
-
Staten Island 3,052
|
| 752 |
-
Queens 9,533
|
| 753 |
-
Bronx 2,735
|
| 754 |
-
Brooklyn 7,032
|
| 755 |
-
Manhattan 5,411
|
| 756 |
|
| 757 |
7.4.1 The Staten Island Statistical Paradox
|
| 758 |
-
Staten Island presents the most instructive diagnostic anomaly: the
|
| 759 |
-
|
|
|
|
|
|
|
| 760 |
fundamental mathematical reality of regression evaluation in homogeneous datasets.
|
| 761 |
|
| 762 |
R² measures the proportion of variance explained:
|
|
@@ -779,8 +781,8 @@ while keeping absolute predictive errors tight.
|
|
| 779 |
|
| 780 |
7.4.2 Manhattan Luxury Sub-Market and Co-Op Complexity
|
| 781 |
Manhattan exposes the fundamental limitations of administrative tabular datasets
|
| 782 |
-
for luxury AVM
|
| 783 |
-
|
| 784 |
|
| 785 |
In the Manhattan luxury market, value is dictated by subjective, opaque variables
|
| 786 |
entirely absent from municipal tax datasets: exact floor level, unobstructed
|
|
@@ -803,10 +805,10 @@ maintenance fees, leading to systematic pricing inaccuracies in this segment.
|
|
| 803 |
------------------------------
|
| 804 |
Tier n MedAPE Notes
|
| 805 |
---- ------ ------- -----
|
| 806 |
-
Under $500K 6,497
|
| 807 |
-
$500K – $1M 10,980
|
| 808 |
-
$1M – $3M 7,978
|
| 809 |
-
Over $3M 1,707
|
| 810 |
|
| 811 |
The $500K–$1M tier is the "sweet spot" — highest volume and most consistent
|
| 812 |
property characteristics. Below $500K, distressed sales introduce noise the
|
|
@@ -846,8 +848,8 @@ The naive approach assigns a single confidence interval to all predictions:
|
|
| 846 |
|
| 847 |
With global MedAPE = 20.32%, a Staten Island $600K property and a Manhattan
|
| 848 |
$3M condo both receive ±20.32% intervals. This is dishonest: the Staten Island
|
| 849 |
-
estimate is likely within ±
|
| 850 |
-
off by ±
|
| 851 |
|
| 852 |
8.2 Segment-Adaptive Confidence
|
| 853 |
---------------------------------
|
|
@@ -857,7 +859,7 @@ For each prediction, the segment MedAPE is computed as:
|
|
| 857 |
|
| 858 |
Taking the maximum of the two risk dimensions gives the most conservative
|
| 859 |
(widest) interval when both risk factors coincide — e.g. Manhattan luxury
|
| 860 |
-
(borough=
|
| 861 |
|
| 862 |
confidence_low = price × (1 − segment_medape / 100)
|
| 863 |
confidence_high = price × (1 + segment_medape / 100)
|
|
@@ -885,11 +887,11 @@ index, executing in under 5ms.
|
|
| 885 |
--------------------------------------
|
| 886 |
Property Grade Score Interval
|
| 887 |
-------- ----- ----- --------
|
| 888 |
-
Queens, 2-family, $700K A 83 ±17.
|
| 889 |
-
Brooklyn, walk-up, $900K B 79 ±20.
|
| 890 |
-
Bronx, elevator condo, $400K C
|
| 891 |
-
Manhattan, D4, $1.5M D
|
| 892 |
-
Manhattan, luxury, $4M D 60 ±
|
| 893 |
|
| 894 |
================================================================================
|
| 895 |
9. SYSTEM ARCHITECTURE
|
|
@@ -1208,7 +1210,7 @@ market friction (CBRE, 2024).
|
|
| 1208 |
MedAPE measure fundamentally different aspects of model quality. For a
|
| 1209 |
user-facing AVM, MedAPE is the correct optimisation target.
|
| 1210 |
|
| 1211 |
-
7. Manhattan is the hardest borough (MedAPE=
|
| 1212 |
discounts, unobservable interior finishes, and view premiums create
|
| 1213 |
heterogeneity that no tabular dataset can capture.
|
| 1214 |
|
|
|
|
| 746 |
|
| 747 |
7.4 Performance by Borough
|
| 748 |
---------------------------
|
| 749 |
+
Borough n MedAPE MAE Notes
|
| 750 |
+
------- ---- ------- ---------- -----
|
| 751 |
+
Staten Island 3,052 14.41% $220,216 Best accuracy; uniform housing stock
|
| 752 |
+
Queens 9,533 17.43% $366,226 Highest volume
|
| 753 |
+
Bronx 2,735 21.08% $1,531,532 Mixed housing stock
|
| 754 |
+
Brooklyn 7,032 20.64% $857,322 Wide price range across NTAs
|
| 755 |
+
Manhattan 5,411 35.16% $2,714,327 Worst; extreme luxury heterogeneity
|
| 756 |
|
| 757 |
7.4.1 The Staten Island Statistical Paradox
|
| 758 |
+
Staten Island presents the most instructive diagnostic anomaly: in the v11
|
| 759 |
+
evaluation it recorded the worst per-borough R² (0.4103) combined with the best
|
| 760 |
+
MedAPE (13.46%) — and it retains the best MedAPE (14.41%) in the final v22
|
| 761 |
+
model. This divergence highlights a
|
| 762 |
fundamental mathematical reality of regression evaluation in homogeneous datasets.
|
| 763 |
|
| 764 |
R² measures the proportion of variance explained:
|
|
|
|
| 781 |
|
| 782 |
7.4.2 Manhattan Luxury Sub-Market and Co-Op Complexity
|
| 783 |
Manhattan exposes the fundamental limitations of administrative tabular datasets
|
| 784 |
+
for luxury AVM: predictive precision degrades to a MedAPE of 35.16%, the worst
|
| 785 |
+
of any borough.
|
| 786 |
|
| 787 |
In the Manhattan luxury market, value is dictated by subjective, opaque variables
|
| 788 |
entirely absent from municipal tax datasets: exact floor level, unobstructed
|
|
|
|
| 805 |
------------------------------
|
| 806 |
Tier n MedAPE Notes
|
| 807 |
---- ------ ------- -----
|
| 808 |
+
Under $500K 6,497 27.10% Distressed sales, foreclosures
|
| 809 |
+
$500K – $1M 10,980 15.12% Best accuracy; highest data volume
|
| 810 |
+
$1M – $3M 7,978 21.30% Mid-luxury; reasonable accuracy
|
| 811 |
+
Over $3M 1,707 39.77% Luxury; unique properties, sparse comps
|
| 812 |
|
| 813 |
The $500K–$1M tier is the "sweet spot" — highest volume and most consistent
|
| 814 |
property characteristics. Below $500K, distressed sales introduce noise the
|
|
|
|
| 848 |
|
| 849 |
With global MedAPE = 20.32%, a Staten Island $600K property and a Manhattan
|
| 850 |
$3M condo both receive ±20.32% intervals. This is dishonest: the Staten Island
|
| 851 |
+
estimate is likely within ±14.4%, while the Manhattan estimate could easily be
|
| 852 |
+
off by ±35%.
|
| 853 |
|
| 854 |
8.2 Segment-Adaptive Confidence
|
| 855 |
---------------------------------
|
|
|
|
| 859 |
|
| 860 |
Taking the maximum of the two risk dimensions gives the most conservative
|
| 861 |
(widest) interval when both risk factors coincide — e.g. Manhattan luxury
|
| 862 |
+
(borough=35.16%, tier=39.77%) → segment_medape = 39.77%.
|
| 863 |
|
| 864 |
confidence_low = price × (1 − segment_medape / 100)
|
| 865 |
confidence_high = price × (1 + segment_medape / 100)
|
|
|
|
| 887 |
--------------------------------------
|
| 888 |
Property Grade Score Interval
|
| 889 |
-------- ----- ----- --------
|
| 890 |
+
Queens, 2-family, $700K A 83 ±17.4%
|
| 891 |
+
Brooklyn, walk-up, $900K B 79 ±20.6%
|
| 892 |
+
Bronx, elevator condo, $400K C 73 ±27.1%
|
| 893 |
+
Manhattan, D4, $1.5M D 65 ±35.2%
|
| 894 |
+
Manhattan, luxury, $4M D 60 ±39.8%
|
| 895 |
|
| 896 |
================================================================================
|
| 897 |
9. SYSTEM ARCHITECTURE
|
|
|
|
| 1210 |
MedAPE measure fundamentally different aspects of model quality. For a
|
| 1211 |
user-facing AVM, MedAPE is the correct optimisation target.
|
| 1212 |
|
| 1213 |
+
7. Manhattan is the hardest borough (MedAPE=35.16%). Co-op board approval
|
| 1214 |
discounts, unobservable interior finishes, and view premiums create
|
| 1215 |
heterogeneity that no tabular dataset can capture.
|
| 1216 |
|
scripts/generate_scatter.py
CHANGED
|
@@ -290,6 +290,26 @@ medape_val = float(np.median(np.abs(y_actual - y_pred) / np.maximum(y_actual, 1.
|
|
| 290 |
r2_val = r2_score(np.log1p(y_actual), pred_log)
|
| 291 |
print(f" Scatter: R²={r2_val:.4f} | MedAPE={medape_val:.2f}%")
|
| 292 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 293 |
# ── 8. Sample for scatter plot (2000 pts, stratified by borough) ──
|
| 294 |
BOROUGH_MAP = {1:"Manhattan",2:"Bronx",3:"Brooklyn",4:"Queens",5:"Staten Island"}
|
| 295 |
boros = df_hold["borough"].to_list()
|
|
|
|
| 290 |
r2_val = r2_score(np.log1p(y_actual), pred_log)
|
| 291 |
print(f" Scatter: R²={r2_val:.4f} | MedAPE={medape_val:.2f}%")
|
| 292 |
|
| 293 |
+
# Per-borough + per-tier diagnostics (same holdout predictions)
|
| 294 |
+
_BM = {1: "Manhattan", 2: "Bronx", 3: "Brooklyn", 4: "Queens", 5: "Staten Island"}
|
| 295 |
+
_boro_arr = np.array(df_hold["borough"].to_list())
|
| 296 |
+
_ape = np.abs(y_actual - y_pred) / np.maximum(y_actual, 1.0) * 100
|
| 297 |
+
print(" ── Per-borough (holdout) ──")
|
| 298 |
+
for _bn, _bname in _BM.items():
|
| 299 |
+
_m = _boro_arr == _bn
|
| 300 |
+
if _m.sum() == 0:
|
| 301 |
+
continue
|
| 302 |
+
_r2 = r2_score(np.log1p(y_actual[_m]), pred_log[_m])
|
| 303 |
+
print(f" {_bname:<14} n={_m.sum():>6,} R²={_r2:.4f} MedAPE={np.median(_ape[_m]):.2f}%")
|
| 304 |
+
print(" ── Per-tier (holdout) ──")
|
| 305 |
+
for _lo, _hi, _tname in [(0, 5e5, "<$500K"), (5e5, 1e6, "$500K–1M"),
|
| 306 |
+
(1e6, 3e6, "$1M–3M"), (3e6, 1e7, "$3M–10M")]:
|
| 307 |
+
_m = (y_actual >= _lo) & (y_actual < _hi)
|
| 308 |
+
if _m.sum() == 0:
|
| 309 |
+
continue
|
| 310 |
+
_r2 = r2_score(np.log1p(y_actual[_m]), pred_log[_m])
|
| 311 |
+
print(f" {_tname:<10} n={_m.sum():>6,} R²={_r2:.4f} MedAPE={np.median(_ape[_m]):.2f}%")
|
| 312 |
+
|
| 313 |
# ── 8. Sample for scatter plot (2000 pts, stratified by borough) ──
|
| 314 |
BOROUGH_MAP = {1:"Manhattan",2:"Bronx",3:"Brooklyn",4:"Queens",5:"Staten Island"}
|
| 315 |
boros = df_hold["borough"].to_list()
|