{
  "n": 177,
  "n_train": 142,
  "n_test": 35,
  "features": [
    "zillow_zori_5y_cagr",
    "zhvi_5y_cagr",
    "log_troops",
    "years_active",
    "abs_lat",
    "lon",
    "dist_to_coast_km"
  ],
  "target": "bah_5y_cagr",
  "ols": {
    "r2_train": 0.24018169917064836,
    "r2_test": -0.2715947853933458,
    "mape_train": 0.5127645513880227,
    "mape_test": 0.43614692545017036,
    "rmse_test": 0.023571794082625303,
    "adj_r2_train": 0.20048969838105535,
    "f_pvalue": 3.8142619157473593e-06,
    "coefficients": [
      {
        "name": "const",
        "beta": 0.0640711267605634,
        "se": 0.0017651968612756174,
        "ci_low": 0.06057987494026807,
        "ci_high": 0.06756237858085873,
        "tstat": 36.29687326447118,
        "pvalue": 3.4143524288985592e-71
      },
      {
        "name": "zillow_zori_5y_cagr",
        "beta": 0.005350646036059901,
        "se": 0.0018789288155465283,
        "ci_low": 0.0016344522270919227,
        "ci_high": 0.00906683984502788,
        "tstat": 2.8477108828114632,
        "pvalue": 0.005097940819073259
      },
      {
        "name": "zhvi_5y_cagr",
        "beta": 0.008952627929995433,
        "se": 0.0018918885776008174,
        "ci_low": 0.005210801969818022,
        "ci_high": 0.012694453890172843,
        "tstat": 4.73211162432654,
        "pvalue": 5.568430472623565e-06
      },
      {
        "name": "log_troops",
        "beta": -0.0023853517248147225,
        "se": 0.0017934018893894133,
        "ci_low": -0.0059323881762206035,
        "ci_high": 0.0011616847265911584,
        "tstat": -1.3300709333070047,
        "pvalue": 0.18575431666736297
      },
      {
        "name": "years_active",
        "beta": 0.00012127373077934652,
        "se": 0.0018813013502315588,
        "ci_low": -0.0035996125384005996,
        "ci_high": 0.003842159999959293,
        "tstat": 0.0644626820495396,
        "pvalue": 0.9486978872076579
      },
      {
        "name": "abs_lat",
        "beta": 0.0015094410608776662,
        "se": 0.0018007758226530174,
        "ci_low": -0.0020521797456752606,
        "ci_high": 0.0050710618674305935,
        "tstat": 0.838217085041636,
        "pvalue": 0.4034014729073603
      },
      {
        "name": "lon",
        "beta": -0.0013795771746838463,
        "se": 0.0019418321530846273,
        "ci_low": -0.005220182824903252,
        "ci_high": 0.0024610284755355594,
        "tstat": -0.7104512985287471,
        "pvalue": 0.4786589728205868
      },
      {
        "name": "dist_to_coast_km",
        "beta": -0.0002724554649441945,
        "se": 0.0019182409929171984,
        "ci_low": -0.004066401910921703,
        "ci_high": 0.003521490981033314,
        "tstat": -0.14203401238436317,
        "pvalue": 0.887266467272882
      }
    ],
    "n_train": 142,
    "n_test": 35
  },
  "gbm": {
    "available": false,
    "reason": "sklearn not installed in working environment; OLS is the load-bearing model"
  },
  "partial_correlations": {
    "zillow_zori_5y_cagr": {
      "zillow_zori_5y_cagr": 1.0,
      "zhvi_5y_cagr": 0.25228725471618496,
      "log_troops": -0.08379070724792206,
      "years_active": 0.07771675705271047,
      "abs_lat": 0.022914619009605612,
      "lon": 0.27572008449096147,
      "dist_to_coast_km": -0.07001723059876704,
      "bah_5y_cagr": 0.2616349100320428
    },
    "zhvi_5y_cagr": {
      "zillow_zori_5y_cagr": 0.25228725471618496,
      "zhvi_5y_cagr": 1.0,
      "log_troops": -0.09476691813566654,
      "years_active": 0.03757081295263668,
      "abs_lat": 0.018361569828494722,
      "lon": 0.34066493067256526,
      "dist_to_coast_km": -0.08075273971420548,
      "bah_5y_cagr": 0.3736685041371569
    },
    "log_troops": {
      "zillow_zori_5y_cagr": -0.08379070724792205,
      "zhvi_5y_cagr": -0.09476691813566654,
      "log_troops": 1.0,
      "years_active": -0.01850396452352007,
      "abs_lat": -0.03874236588299291,
      "lon": -0.12547885038959242,
      "dist_to_coast_km": 0.10894884050554923,
      "bah_5y_cagr": -0.09271748481739192
    },
    "years_active": {
      "zillow_zori_5y_cagr": 0.07771675705271047,
      "zhvi_5y_cagr": 0.03757081295263668,
      "log_troops": -0.018503964523520065,
      "years_active": 1.0,
      "abs_lat": 0.10915594077791677,
      "lon": 0.12357766688067189,
      "dist_to_coast_km": 0.20021643808589792,
      "bah_5y_cagr": -0.0013484238201262326
    },
    "abs_lat": {
      "zillow_zori_5y_cagr": 0.02291461900960561,
      "zhvi_5y_cagr": 0.018361569828494722,
      "log_troops": -0.03874236588299291,
      "years_active": 0.10915594077791677,
      "abs_lat": 1.0,
      "lon": -0.018880138033841525,
      "dist_to_coast_km": 0.19157642777987235,
      "bah_5y_cagr": 0.023604029566301345
    },
    "lon": {
      "zillow_zori_5y_cagr": 0.27572008449096147,
      "zhvi_5y_cagr": 0.34066493067256526,
      "log_troops": -0.12547885038959244,
      "years_active": 0.1235776668806719,
      "abs_lat": -0.01888013803384152,
      "lon": 1.0,
      "dist_to_coast_km": -0.05799249525680526,
      "bah_5y_cagr": 0.1439507002410101
    },
    "dist_to_coast_km": {
      "zillow_zori_5y_cagr": -0.07001723059876705,
      "zhvi_5y_cagr": -0.08075273971420548,
      "log_troops": 0.10894884050554923,
      "years_active": 0.20021643808589795,
      "abs_lat": 0.19157642777987235,
      "lon": -0.05799249525680526,
      "dist_to_coast_km": 1.0,
      "bah_5y_cagr": -0.07230323226973073
    },
    "bah_5y_cagr": {
      "zillow_zori_5y_cagr": 0.2616349100320428,
      "zhvi_5y_cagr": 0.3736685041371569,
      "log_troops": -0.09271748481739192,
      "years_active": -0.0013484238201262324,
      "abs_lat": 0.02360402956630134,
      "lon": 0.1439507002410101,
      "dist_to_coast_km": -0.07230323226973073,
      "bah_5y_cagr": 0.9999999999999999
    }
  },
  "feature_means_train": {
    "zillow_zori_5y_cagr": 0.060102064173549234,
    "zhvi_5y_cagr": 0.051095814186095635,
    "log_troops": 5.207112506025664,
    "years_active": 99.09075704225356,
    "abs_lat": 37.11764105988477,
    "lon": -93.47210153739545,
    "dist_to_coast_km": 412.813918649609
  },
  "feature_stds_train": {
    "zillow_zori_5y_cagr": 0.01705237990168914,
    "zhvi_5y_cagr": 0.01972971214197302,
    "log_troops": 4.236960466798466,
    "years_active": 25.570545522038014,
    "abs_lat": 6.110095167022963,
    "lon": 18.819774619868827,
    "dist_to_coast_km": 384.2635900820969
  },
  "target_summary": {
    "mean": 0.06326497175141244,
    "std": 0.023019466439704758,
    "min": -0.0042,
    "p25": 0.0471,
    "p50": 0.0651,
    "p75": 0.0802,
    "max": 0.1212
  },
  "hypothesis_results": {
    "H1_bah_lags_zori": {
      "expected_sign": "+",
      "beta_standardized": 0.005350646036059901,
      "pvalue": 0.005097940819073259,
      "bivariate_r": 0.2616349100320428,
      "verdict": "supported (p<0.05, sign matches)"
    },
    "H2_income_growth": {
      "verdict": "untestable \u2014 no per-MHA ACS income series cached locally",
      "note": "not run; flagged in RESEARCH.md"
    },
    "H3_coast_gradient": {
      "expected_sign": "- (closer to coast \u2192 higher CAGR)",
      "beta_standardized": -0.0002724554649441945,
      "pvalue": 0.887266467272882,
      "bivariate_r": -0.07230323226973073,
      "verdict": "inconclusive (p=0.89, beta=-0.000272)"
    },
    "H4_pop_growth": {
      "verdict": "untestable \u2014 no per-MHA Census population series cached locally",
      "note": "not run; flagged in RESEARCH.md"
    },
    "H5_troop_count": {
      "expected_sign": "+",
      "beta_standardized": -0.0023853517248147225,
      "pvalue": 0.18575431666736297,
      "bivariate_r": -0.09271748481739192,
      "verdict": "inconclusive (p=0.19, beta=-0.00239)",
      "caveat": "cross-sectional level, not change \u2014 H5 strictly tested as \"level proxy\""
    }
  },
  "missingness": {
    "zillow_zori_5y_cagr_imputed_count": 77,
    "zhvi_5y_cagr_imputed_count": 3
  },
  "_meta": {
    "fitted": "2026-05-21",
    "no_fabrication": true,
    "split": {
      "train_pct": 0.8,
      "test_pct": 0.2,
      "random_state": 42
    },
    "standardization": "z-score on training set, applied to test set",
    "tier": "BAH E5 with-dependents (2021->2026 CAGR)",
    "sources": [
      "DoD Defense Travel Management Office \u2014 historical BAH 2013-2026",
      "Zillow Research \u2014 ZORI (Observed Rent Index), ZHVI (Home Value Index)",
      "DoD / open-source installation rosters \u2014 troop_count, lat/lon, years_active"
    ],
    "limitations": [
      "n=177 is small for cross-sectional inference",
      "No spatial-cluster correction on standard errors",
      "H2 (income) and H4 (population) untestable here \u2014 no cached ACS / Census per-MHA series",
      "H5 tested as cross-sectional level only, not change-in-troops",
      "OLS p-values reported are suggestive, not confirmatory",
      "sklearn missing: gradient boosting result is null in this environment"
    ]
  }
}