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 files

Borough 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 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.17% 227,062 6,497
32
- $500K–1M 14.78% 179,839 10,980
33
- $1M–3M 21.30% 450,354 7,978
34
- $3M–10M 39.24% 2,160,740 1,707
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: lowest R² in the dataset 0.41 but the best MedAPE at 13.5%. 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 36.7% MedAPE. Co-op board approval discounts and unobservable interior finishes create heterogeneity that no tabular dataset can capture."
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 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: lowest $R^2$ in the dataset --- 0.41 ---
333
- but the best MedAPE at 13.5\%. 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 36.7\% MedAPE. Co-op board approval
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", "R²", "MedAPE", "MAE"],
365
  rows=[
366
- ("Staten Island", "3,052", "0.4103", "13.46%", "$221,158"),
367
- ("Queens", "9,533", "0.6851", "17.06%", "$363,990"),
368
- ("Bronx", "2,735", "0.6195", "20.93%", "$1,517,641"),
369
- ("Brooklyn", "7,032", "0.6206", "20.89%", "$871,097"),
370
- ("Manhattan", "5,411", "0.6141", "36.66%", "$2,801,602"),
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", "", "MedAPE"],
720
  rows=[
721
- ("Staten Island", "3,052", "0.4103", "13.46%"),
722
- ("Queens", "9,533", "0.6851", "17.06%"),
723
- ("Bronx", "2,735", "0.6195", "20.93%"),
724
- ("Brooklyn", "7,032", "0.6206", "20.89%"),
725
- ("Manhattan", "5,411", "0.6141", "36.66%"),
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: lowest=0.41 but best MedAPE=13.5%. 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 36.7% MedAPE. Co-op board approval discounts and unobservable interior "
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}{lrrrr}
461
  \toprule
462
- Borough & $n$ & $R^2$ & MedAPE & MAE (USD) \\
463
  \midrule
464
- Manhattan & 5,411 & 0.xxxx & 35.16\% & \$2,714,327 \\
465
- Bronx & 2,735 & 0.xxxx & 21.08\% & \$1,531,532 \\
466
- Brooklyn & 7,032 & 0.xxxx & 20.64\% & \$857,322 \\
467
- Queens & 9,533 & 0.xxxx & 17.43\% & \$366,226 \\
468
- Staten Island & 3,052 & 0.xxxx & 14.41\% & \$220,216 \\
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.645
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 0.xxxx 36.89% $2,801,602
549
- Bronx 2,735 0.xxxx 21.05% $1,517,641
550
- Brooklyn 7,032 0.xxxx 20.84% $871,097
551
- Queens 9,533 0.xxxx 17.04% $363,990
552
- Staten Island 3,052 0.xxxx 13.56% $221,158
553
-
554
- Key finding — Staten Island paradox: lowest R² of any borough, yet best MedAPE
555
- at 13.56%. Explanation: Staten Island has very low price variance (most sales
556
- $300K–$700K). The model predicts well in absolute terms, but R² penalises a
557
- low-variance target disproportionately. MedAPE is the user-relevant metric.
558
-
559
- Manhattan is hardest: 36.89% MedAPE. Reasons:
 
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.71% $229,607
571
- $500K – $1M 10,980 14.68% $179,450
572
- $1M – $3M 7,978 21.14% $445,458
573
- $3M – $10M 1,707 40.58% $2,169,464
574
 
575
- The sweet spot is $500K–$1M (typical Queens/Brooklyn starter home): 14.68% MedAPE.
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$ & $R^2$ & MedAPE & Notes \\
729
  \midrule
730
- Staten Island & 3,052 & 0.4103 & 13.46\% & Best accuracy; uniform housing stock \\
731
- Queens & 9,533 & 0.6851 & 17.06\% & Highest volume; best $R^2$ \\
732
- Bronx & 2,735 & 0.6195 & 20.93\% & Mixed housing stock \\
733
- Brooklyn & 7,032 & 0.6206 & 20.89\% & Wide price range across NTAs \\
734
- Manhattan & 5,411 & 0.6141 & 36.66\% & 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: the worst
741
- $R^2$ (0.4103) combined with the best MedAPE (13.46\%). This divergence
 
 
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 = 36.66\%). Value in the Manhattan luxury market is
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 & 28.21\% & Distressed sales, foreclosures \\
774
- \$500K--\$1M & 10,980 & 14.53\% & Best accuracy; highest data volume \\
775
- \$1M--\$3M & 7,978 & 20.83\% & Mid-luxury; reasonable accuracy \\
776
- Over \$3M & 1,707 & 40.26\% & Luxury; unique properties, sparse comps \\
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 = 36.66\%). Co-op board approval
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 MedAPE Notes
750
- ------- ---- ------ ------- -----
751
- Staten Island 3,052 0.4103 13.46% Best accuracy; uniform housing stock
752
- Queens 9,533 0.6851 17.06% Highest volume; best R²
753
- Bronx 2,735 0.6195 20.93% Mixed housing stock
754
- Brooklyn 7,032 0.6206 20.89% Wide price range across NTAs
755
- Manhattan 5,411 0.6141 36.66% Worst; extreme luxury heterogeneity
756
 
757
  7.4.1 The Staten Island Statistical Paradox
758
- Staten Island presents the most instructive diagnostic anomaly: the worst R²
759
- (0.4103) combined with the best MedAPE (13.46%). This divergence highlights a
 
 
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. While maintaining a moderate (0.6141), predictive precision
783
- degrades to a MedAPE of 36.66%.
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 28.21% Distressed sales, foreclosures
807
- $500K – $1M 10,980 14.53% Best accuracy; highest data volume
808
- $1M – $3M 7,978 20.83% Mid-luxury; reasonable accuracy
809
- Over $3M 1,707 40.26% Luxury; unique properties, sparse comps
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 ±13.5%, while the Manhattan estimate could easily be
850
- off by ±37%.
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=36.66%, tier=40.26%) → segment_medape = 40.26%.
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.1%
889
- Brooklyn, walk-up, $900K B 79 ±20.9%
890
- Bronx, elevator condo, $400K C 72 ±28.2%
891
- Manhattan, D4, $1.5M D 63 ±36.7%
892
- Manhattan, luxury, $4M D 60 ±40.3%
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=36.66%). Co-op board approval
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 (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()