feat(lotto): select_winner_by_lift + ε-게이팅
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -120,3 +120,18 @@ def test_decide_base_update_cold_start_returns_default():
|
||||
)
|
||||
assert new_base == winner_W
|
||||
assert reason == "winner_4plus"
|
||||
|
||||
|
||||
def test_select_winner_by_lift_gating():
|
||||
# engine_w 3개 + random_null 기준. lift = engine 등수점수 − random 등수점수
|
||||
per_w = [
|
||||
{"trial_id": 1, "day_of_week": 0, "weight": [0.2]*5, "prize_score": 5.0},
|
||||
{"trial_id": 2, "day_of_week": 1, "weight": [0.3,0.2,0.2,0.2,0.1], "prize_score": 9.0},
|
||||
{"trial_id": 3, "day_of_week": 2, "weight": [0.1,0.3,0.2,0.2,0.2], "prize_score": 4.0},
|
||||
]
|
||||
# random baseline이 8.0이면 lift는 +1, +1, -4 → 노이즈 ε=2 안에서 게이팅
|
||||
winner = we.select_winner_by_lift(per_w, random_score=8.0, epsilon=2.0)
|
||||
assert winner["gated"] is True # 최대 lift(+1) < ε(2) → 게이팅
|
||||
winner2 = we.select_winner_by_lift(per_w, random_score=3.0, epsilon=2.0)
|
||||
assert winner2["gated"] is False
|
||||
assert winner2["trial_id"] == 2 # prize 9 → lift +6
|
||||
|
||||
Reference in New Issue
Block a user