Guard factor regressions against unidentified models

This commit is contained in:
2026-04-07 16:48:23 +08:00
parent f2e14ec200
commit 0876c0b6af
2 changed files with 42 additions and 4 deletions

View File

@@ -461,6 +461,35 @@ class RegressionTests(unittest.TestCase):
self.assertEqual(result["end_date"], "2025-02-21")
self.assertEqual(result["n_obs"], 296)
def test_run_factor_regression_rejects_underdetermined_designs(self):
dates = pd.date_range("2024-01-01", periods=3, freq="B")
factors = pd.DataFrame(
{
"MKT_RF": [0.01, -0.02, 0.015],
"SMB": [0.005, 0.004, -0.001],
},
index=dates,
)
strategy = pd.Series([0.012, -0.018, 0.019], index=dates)
with self.assertRaisesRegex(ValueError, "Insufficient observations"):
run_factor_regression(strategy, factors, factor_cols=["MKT_RF", "SMB"])
def test_run_factor_regression_rejects_rank_deficient_designs(self):
dates = pd.date_range("2024-01-01", periods=6, freq="B")
market = np.array([0.01, -0.02, 0.015, 0.005, -0.01, 0.02])
factors = pd.DataFrame(
{
"MKT_RF": market,
"SMB": market * 2.0,
},
index=dates,
)
strategy = pd.Series(0.0005 + 1.0 * factors["MKT_RF"] + 0.5 * factors["SMB"], index=dates)
with self.assertRaisesRegex(ValueError, "rank-deficient"):
run_factor_regression(strategy, factors, factor_cols=["MKT_RF", "SMB"])
def test_prepare_factor_models_uses_proxy_family_without_external_us_factors(self):
dates = pd.date_range("2024-01-01", periods=5, freq="B")
extension = pd.DataFrame(