feat: signal math upgrade — probabilistic, regime-aware scoring pipeline

Implement full probabilistic signal processing pipeline gated behind
probabilistic_scoring_enabled feature flag in risk_configs:

- Bayesian log-likelihood accumulator with Beta posterior and entropy
- Regime detector (trend-following, panic, mean-reversion, uncertainty)
- Source accuracy tracker with per-source historical prediction accuracy
- Sigmoid confidence gate replacing binary gate
- Information gain surprise weighting for rare events
- Adaptive recency decay with event-specific half-lives
- Regime multiplier replacing market context multiplier
- Weighted disagreement entropy for contradiction detection
- Multiplicative macro exposure with conditional integration
- Graph-distance attenuated competitive signal propagation
- Exponentially weighted momentum with volatility scaling
- Expected value recommendation gate

All changes backward-compatible: flag=false preserves exact current behavior.
New outputs stored in existing JSONB columns (no schema changes except
source_accuracy table via migration 034).

Tests: 26 property-based tests (14 correctness properties), 99 unit tests,
1789 total tests passing with zero regressions.
This commit is contained in:
Celes Renata
2026-04-29 11:41:48 +00:00
parent 8c3c1aab43
commit 4e010bc048
24 changed files with 6058 additions and 60 deletions
+7
View File
@@ -606,6 +606,13 @@ async def persist_recommendation(
"invalidation_conditions": eligibility_result.invalidation_conditions,
"risk_classification": risk_class,
}
# Store probabilistic EV fields in risk_checks JSONB (Req 16.2)
if eligibility_result.pipeline_mode == "probabilistic":
risk_checks["ev"] = eligibility_result.ev_value
risk_checks["p_bull"] = eligibility_result.p_bull
risk_checks["pipeline_mode"] = eligibility_result.pipeline_mode
risk_checks["ev_threshold"] = 0.005
await pool.execute(
_INSERT_RISK_EVALUATION,
rec_id,