Blum / backend /tests /test_decision_intelligence.py
Italianhype's picture
Add Decision Superiority Business Quality Portfolio Intelligence
3fd4738 verified
Raw
History Blame Contribute Delete
2.65 kB
from types import SimpleNamespace
from app.services.decision_intelligence import (
classify_decision_superiority,
concentration_score,
decision_superiority_components,
decision_superiority_metrics,
)
def test_decision_superiority_classification():
assert classify_decision_superiority(15) == "Weak"
assert classify_decision_superiority(35) == "Experimental"
assert classify_decision_superiority(55) == "Learning"
assert classify_decision_superiority(70) == "Competitive"
assert classify_decision_superiority(84) == "Strong Alpha Research"
assert classify_decision_superiority(94) == "Exceptional"
def test_decision_metrics_capture_missed_best_opportunity():
decisions = [
{
"selected_outperformed": True,
"best_available_return": 8.0,
"selected_return": 6.0,
"benchmark_return": 2.0,
"ranking_correct": False,
"missed_best": True,
},
{
"selected_outperformed": False,
"best_available_return": 5.0,
"selected_return": -1.0,
"benchmark_return": 1.0,
"ranking_correct": True,
"missed_best": True,
},
]
metrics = decision_superiority_metrics(decisions, [])
assert metrics["total_outperformers"] == 2
assert metrics["captured_outperformers"] == 1
assert metrics["opportunity_recall"] == 0.5
assert metrics["opportunity_precision"] == 0.5
assert metrics["missed_opportunities"] == 2
assert 0 < metrics["alpha_capture_rate"] < 1
def test_decision_components_penalize_low_live_validation():
metrics = {
"opportunity_recall": 0.5,
"opportunity_precision": 0.5,
"alpha_capture_rate": 0.4,
"ranking_accuracy": 0.5,
"benchmark_excess": 1.2,
"status": "ok",
}
rows = [
SimpleNamespace(mode="historical_simulation", market_regime_at_entry="risk_on", reproducibility_score=80, max_adverse_excursion=-2),
SimpleNamespace(mode="historical_simulation", market_regime_at_entry="risk_on", reproducibility_score=75, max_adverse_excursion=-3),
]
components = decision_superiority_components(metrics, rows)
assert components["live_validation"] == 0
assert components["reproducibility"] > 70
def test_concentration_score_reads_top_contributors():
rows = [
{"ticker": "A", "return_contribution": 50},
{"ticker": "B", "return_contribution": 20},
{"ticker": "C", "return_contribution": 10},
{"ticker": "D", "return_contribution": 5},
]
assert concentration_score(rows) == 80