DockerSpace / tests /test_factor_side_split_strategy_report.py
DennisChan0909's picture
Backup current stock predictor strategies
ee37d63
Raw
History Blame Contribute Delete
1.68 kB
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