| """Tests for expert threshold tuning (no model download).""" |
|
|
| import numpy as np |
|
|
| from src.evaluation.threshold_tuning import predict_with_threshold, search_best_threshold |
| from src.models.hybrid_ensemble import tune_ensemble_threshold |
|
|
|
|
| def test_search_best_threshold_prefers_high_recall_slice(): |
| y = np.array([0, 0, 1, 1, 1]) |
| probs = np.array([0.1, 0.2, 0.55, 0.7, 0.9]) |
| t, score = search_best_threshold(y, probs, metric="f1_toxic") |
| preds = predict_with_threshold(probs, t) |
| assert score > 0 |
| assert 0.05 <= t <= 0.95 |
| assert preds.shape == y.shape |
|
|
|
|
| def test_tune_ensemble_threshold(): |
| y_val = np.array([0, 1, 1, 0]) |
| a = np.array([0.2, 0.8, 0.7, 0.3]) |
| b = np.array([0.3, 0.6, 0.75, 0.25]) |
| t, _ = tune_ensemble_threshold(a, b, y_val, bert_weight=0.7, lr_weight=0.3) |
| assert 0.05 <= t <= 0.95 |
|
|