Spaces:
Sleeping
Sleeping
| import numpy as np | |
| import pandas as pd | |
| from scripts.run_factor_side_split_strategy_report import ( | |
| SidePolicy, | |
| apply_confidence_override, | |
| apply_side_policy, | |
| prediction_rate_table, | |
| ) | |
| def test_apply_side_policy_zeroes_selected_sides_without_mutating_source(): | |
| events = pd.DataFrame( | |
| { | |
| "factor__risk": [1.0, -2.0, 0.0], | |
| "factor__macro": [3.0, -4.0, 0.0], | |
| "factor__kept": [5.0, -6.0, 0.0], | |
| } | |
| ) | |
| policy = SidePolicy( | |
| "test", | |
| zero_positive=("risk",), | |
| zero_negative=("macro",), | |
| ) | |
| transformed = apply_side_policy(events, policy) | |
| assert events["factor__risk"].tolist() == [1.0, -2.0, 0.0] | |
| assert transformed["factor__risk"].tolist() == [0.0, -2.0, 0.0] | |
| assert transformed["factor__macro"].tolist() == [3.0, 0.0, 0.0] | |
| assert transformed["factor__kept"].tolist() == [5.0, -6.0, 0.0] | |
| def test_confidence_override_converts_only_hold_predictions(): | |
| events = pd.DataFrame( | |
| { | |
| "p_buy": [0.6, 0.2, 0.4, 0.7], | |
| "p_sell": [0.3, 0.5, 0.6, 0.1], | |
| } | |
| ) | |
| pred = np.array([0, 0, 0, -1]) | |
| adjusted = apply_confidence_override(events, pred, 0.4) | |
| assert adjusted.tolist() == [1, -1, -1, -1] | |
| def test_prediction_rate_table_reports_class_precision_and_recall(): | |
| events = pd.DataFrame({"y_true": [1, 1, -1, 0]}) | |
| pred = np.array([1, 0, -1, -1]) | |
| rows = {row["class"]: row for row in prediction_rate_table(events, pred)} | |
| assert rows["BUY"]["precision_pct"] == 100.0 | |
| assert rows["BUY"]["recall_pct"] == 50.0 | |
| assert rows["SELL"]["pred_count"] == 2 | |
| assert rows["HOLD"]["pred_rate_pct"] == 25.0 | |