diff --git a/tests/test_ops_training_accuracy.py b/tests/test_ops_training_accuracy.py index 3dfa2426..3138539c 100644 --- a/tests/test_ops_training_accuracy.py +++ b/tests/test_ops_training_accuracy.py @@ -1,4 +1,5 @@ from web.services.ops_api import _build_training_accuracy_payload +from datetime import date, timedelta def test_training_accuracy_payload_includes_recent_deb_summary(): @@ -36,3 +37,34 @@ def test_training_accuracy_payload_includes_recent_deb_summary(): assert payload["deb_summary"]["recent_14d"]["samples"] == 5 assert "deb_v1_raw" in payload["deb_summary"]["versions"] assert "deb_v2_bucket_calibrated" in payload["deb_summary"]["versions"] + + +def test_training_accuracy_payload_caps_version_backtest_samples(monkeypatch): + start = date(2025, 1, 1) + history = { + "alpha": { + (start + timedelta(days=idx)).isoformat(): { + "actual_high": 20.0 + (idx % 3), + "deb_prediction": 20.0 + (idx % 3), + } + for idx in range(405) + } + } + captured = {} + + def fake_backtest(rows, **_kwargs): + row_list = list(rows) + captured["count"] = len(row_list) + captured["first_date"] = row_list[0]["target_date"] + return {"versions": {}} + + monkeypatch.setattr("src.analysis.deb_evaluation.backtest_deb_versions", fake_backtest) + + _build_training_accuracy_payload( + history, + {"alpha": {"name": "Alpha"}}, + today_str="2026-03-01", + ) + + assert captured["count"] == 400 + assert captured["first_date"] == "2025-01-06" diff --git a/web/services/ops_api.py b/web/services/ops_api.py index 3d4e42f5..e1734db6 100644 --- a/web/services/ops_api.py +++ b/web/services/ops_api.py @@ -18,6 +18,8 @@ from web.services.observation_freshness import ( from web.core import GrantPointsRequest import web.routes as legacy_routes +_DEB_VERSION_BACKTEST_SAMPLE_LIMIT = 400 + def _sf(value: Any) -> Optional[float]: try: @@ -2455,8 +2457,9 @@ def _build_training_accuracy_payload( recent_7_start = (today_date - timedelta(days=7)).isoformat() recent_14_start = (today_date - timedelta(days=14)).isoformat() end_date = (today_date - timedelta(days=1)).isoformat() + version_rows = all_rows[-_DEB_VERSION_BACKTEST_SAMPLE_LIMIT:] versions = backtest_deb_versions( - all_rows, + version_rows, min_train_samples=2, ).get("versions", {})