Variance Strategy Selector
Table of Contents
Example
Scenario: A fantasy manager is 15% behind their opponent with 3 lineup slots left to decide this week. Losing this week eliminates them from playoff contention.
Inputs:
current_win_probability = 0.32 (heavy underdog)
downside_asymmetry = 0.90 (must-win, catastrophic if lost)
slots_to_decide = 3
Band classification: win_probability < 0.40 -> posture = "seek", base multiplier range 1.15-1.30.
Asymmetry amplification: downside_asymmetry > 0.8 -> shift multiplier further from 1.0 by +0.10 on the seek side. Base 1.20 + 0.10 = 1.30.
Slot-count dampening: slots_to_decide = 3, below the 5-slot threshold -> no dampening applied.
Outputs:
variance_posture: "seek"
variance_multiplier: 1.30
confidence_band: "high-variance (seek aggressively)"
rationale: "Pre-move win probability is 0.32 (heavy underdog) and the downside is catastrophic (must-win, asymmetry 0.90). Maximizing variance raises the probability of a right-tail outcome. Consumer should boost high-variance options (boom-bust players, concentrated positions, longshot bets) by 30%."
Consumer application (downstream skill applies the multiplier):
adjusted_player_score = base_score x (1 + (boom_bust_score - 0.5) x (variance_multiplier - 1))
A boom-bust score of 0.8 (high-variance player) with multiplier 1.30 gets a +9% boost relative to a steady player.
Workflow
Copy this checklist and track progress:
Variance Strategy Selection Progress:
- [ ] Step 1: Collect inputs (win_probability, downside_asymmetry, slots_to_decide)
- [ ] Step 2: Classify win-probability band (seek / neutral / minimize)
- [ ] Step 3: Apply downside-asymmetry amplification
- [ ] Step 4: Apply slot-count dampening
- [ ] Step 5: Clamp multiplier to valid range and validate monotonicity
- [ ] Step 6: Emit structured output with rationale
Step 1: Collect inputs
See resources/template.md for input validation rules.
Step 2: Classify win-probability band
Apply the three-band rule:
Within the "seek" band, pick the base multiplier proportional to how far below 0.40 the probability is: base = 1.15 + (0.40 - win_probability) x 0.375, clamped to 1.30. Within "minimize", mirror: base = 0.90 - (win_probability - 0.60) x 0.25, clamped to 0.80.
See resources/methodology.md for the underlying right-tail / left-tail logic.
Step 3: Apply downside-asymmetry amplification
If the loss is catastrophic, the underdog must swing harder and the favorite must protect harder. The adjustment is symmetric around 1.0.
Step 4: Apply slot-count dampening
With many independent decisions, the Central Limit Theorem diversifies variance on its own. Pushing the multiplier hard across many slots is redundant.
See resources/methodology.md for the math.
Step 5: Clamp and validate monotonicity
Step 6: Emit structured output
Return the four required fields:
Validate using resources/evaluators/rubric_variance_strategy_selector.json. Minimum standard: average score of 3.5 or above.
Common Patterns
Pattern 1: Heavy underdog, must-win (fantasy sports)
- Inputs: win_prob ~0.30, asymmetry ~0.90, slots 1-3
- Output: posture "seek", multiplier ~1.30
- Rationale: Swing for the fences. Prefer a high-K / high-HR boom-bust hitter over a high-contact singles hitter; prefer a volatile SP with upside over a stable #4 starter. Consumer skill (e.g.
mlb-lineup-optimizer) multiplies boom-bust weight by 1.30.
Pattern 2: Heavy favorite, large portfolio / many slots
- Inputs: win_prob ~0.75, asymmetry ~0.50, slots ~12 (full lineup / diversified portfolio)
- Output: posture "minimize", multiplier ~0.92 (after slot dampening from 0.85)
- Rationale: Protect the lead, but don't over-engineer -- with 12 slots the portfolio is already diversified by the Central Limit effect. Small damp on the variance knob is enough. Consumer reduces concentration / boom-bust weight by 8%.
Pattern 3: Even matchup (poker mid-stack)
- Inputs: win_prob ~0.50, asymmetry ~0.40, slots ~5 (next 5 hands)
- Output: posture "neutral", multiplier 1.00
- Rationale: Play close to GTO. No variance tilt either way. Consumer applies no adjustment to bet sizing.
Pattern 4: Mild favorite, one decisive decision (racing / options expiry)
- Inputs: win_prob ~0.65, asymmetry ~0.85, slots 1
- Output: posture "minimize", multiplier ~0.75 (base 0.85 - 0.10 asymmetry shift, no slot dampening)
- Rationale: One shot, lead to protect, catastrophic if squandered. The race leader does not take the high-risk inside line; the hedged call writer does not lift the hedge on expiry day. Consumer hard-damps variance.
Guardrails
Bands are hard, not fuzzy. Do not interpolate the posture label across 0.40 and 0.60 thresholds. Posture is categorical (seek / neutral / minimize); the multiplier is continuous within each band. Consumers rely on the categorical label for branching logic.
Asymmetry amplifies, never reverses. A catastrophic downside makes a favorite more conservative and an underdog more aggressive. It never flips the direction. If the computed multiplier would cross 1.0 because of an asymmetry shift, clamp at 1.0 and recheck inputs.
Slot dampening applies to the distance from 1.0, not to the multiplier itself. Implementation: final = 1.0 + (pre_dampening - 1.0) x min(1.0, 5 / slots). Dampening 1.30 across 10 slots gives 1.15, not 0.65.
Edge cases at probability 0 and 1. If win_probability = 0, posture is "seek" with maximum multiplier (1.30 pre-asymmetry, 1.40 post); the analogy is a lottery ticket -- variance is the only path to a non-zero outcome. If win_probability = 1, posture is "minimize" with maximum damp (0.80 pre-asymmetry, 0.70 post); any variance is pure downside. Document these explicitly in the rationale.
The multiplier is a nudge, not a command. It biases the downstream optimizer; it does not replace the optimizer. A 1.30 multiplier does not mean "start only boom-bust players." It means "up-weight boom-bust scores by 30% relative to stable scores within whatever optimization the consumer runs."
Downside asymmetry is not the same as win probability. A heavy underdog in week 1 of a season has low win probability but low asymmetry (plenty of chances to recover). The same underdog in week 20 has high asymmetry (last chance). Ask for both inputs; do not infer one from the other.
Independence assumption underlies slot dampening. Central-limit diversification works when slot outcomes are independent. If slots are highly correlated (e.g. all pitchers on the same team, all tech stocks in a portfolio), dampening is weaker. Flag this assumption in the rationale when the consumer domain is known to be correlated.
Domain-neutral by design. This skill does not know whether the decision is a fantasy lineup, a portfolio, a poker session, or a race. It emits a scalar. The consumer attaches domain-specific meaning. Do not hard-code domain jargon in the rationale -- use neutral terms like "high-variance options" and "stable options."
Quick Reference
Three-band rule:
| Win probability |
Posture |
Base multiplier range |
< 0.40 |
seek |
1.15 - 1.30 |
0.40 - 0.60 |
neutral |
1.00 |
> 0.60 |
minimize |
0.80 - 0.90 |
Asymmetry shift (applied when downside_asymmetry > 0.8):
| Posture |
Shift |
| seek |
+0.10 |
| neutral |
0 |
| minimize |
-0.10 |
Slot dampening:
if slots_to_decide > 5:
factor = max(0.5, 5 / slots_to_decide)
multiplier = 1.0 + (multiplier - 1.0) x factor
Full computation sketch:
def variance_strategy(p_win, asym, slots):
# 1. Band
if p_win < 0.40:
posture = "seek"
base = 1.15 + (0.40 - p_win) * 0.375
base = min(base, 1.30)
elif p_win > 0.60:
posture = "minimize"
base = 0.90 - (p_win - 0.60) * 0.25
base = max(base, 0.80)
else:
posture = "neutral"
base = 1.00
# 2. Asymmetry
if asym > 0.8 and posture == "seek":
base += 0.10
elif asym > 0.8 and posture == "minimize":
base -= 0.10
# 3. Slot dampening
if slots > 5:
factor = max(0.5, 5 / slots)
base = 1.0 + (base - 1.0) * factor
# 4. Clamp
multiplier = max(0.70, min(1.40, base))
return posture, multiplier
Key resources:
- resources/template.md: Input validation checklist, worked examples across 4 scenarios (heavy underdog must-win, modest underdog, even, heavy favorite), output format
- resources/methodology.md: Kelly Criterion reference, variance-of-sum math, right-tail / left-tail probability reasoning, Central Limit dampening, domain parallels (fantasy, poker, horse racing, portfolio)
- resources/evaluators/rubric_variance_strategy_selector.json: 8-criterion quality rubric for band accuracy, asymmetry adjustment, slot dampening, multiplier range, rationale clarity, edge cases, monotonicity, citations
Inputs required:
current_win_probability (float, 0-1): point estimate of win probability before the variance decision is made
downside_asymmetry (float, 0-1): 1.0 = losing is catastrophic (elimination, bankroll ruin); 0.5 = routine; 0.0 = no downside consequence
slots_to_decide (int, >= 0): number of independent decisions this posture will be applied across
Outputs produced:
variance_posture (string): "seek" | "neutral" | "minimize"
variance_multiplier (float, 0.70-1.40): scalar for consumer to multiply against boom-bust / volatility / concentration scores
confidence_band (string): short human-readable posture descriptor
rationale (string): 2-3 sentences citing band, asymmetry, slot count, and interpretation
Referenced by (consumers):
mlb-lineup-optimizer (fantasy baseball lineup selection under daily_quality x leverage x variance_multiplier)
- Portfolio allocation skills that weight high-beta vs low-beta positions
- Poker bankroll skills that pick bet-size variance
- Any agent deciding how hard to push a variance knob
Principle reference: Game Theory Principles #6 (Variance-seeking as underdog -- the "cope" principle) in yahoo-mlb/context/frameworks/game-theory-principles.md.
1---
2name: variance-strategy-selector
3description: Given a current win probability and a downside asymmetry flag, recommends a variance-seeking, neutral, or variance-minimizing posture and emits a numeric multiplier (typically 0.8-1.3) for downstream consumers to apply to boom-bust scores, position sizes, or bet sizes. Favorites minimize variance; underdogs maximize it. Reusable across fantasy sports lineup construction, portfolio allocation, poker bankroll decisions, racing strategy, and any decision where the agent controls a variance knob. Use when user mentions variance strategy, underdog variance, variance seeking, variance minimizing, risk posture, boom bust, must-win variance, favorite strategy, or when a decision module needs a single scalar to bias toward or away from high-variance options.
4---
5
6# Variance Strategy Selector
7
8## Table of Contents
9- [Example](#example)
10- [Workflow](#workflow)
11- [Common Patterns](#common-patterns)
12- [Guardrails](#guardrails)
13- [Quick Reference](#quick-reference)
14
15## Example
16
17**Scenario**: A fantasy manager is 15% behind their opponent with 3 lineup slots left to decide this week. Losing this week eliminates them from playoff contention.
18
19**Inputs**:
20- `current_win_probability` = 0.32 (heavy underdog)
21- `downside_asymmetry` = 0.90 (must-win, catastrophic if lost)
22- `slots_to_decide` = 3
23
24**Band classification**: `win_probability < 0.40` -> posture = "seek", base multiplier range 1.15-1.30.
25
26**Asymmetry amplification**: `downside_asymmetry > 0.8` -> shift multiplier further from 1.0 by +0.10 on the seek side. Base 1.20 + 0.10 = **1.30**.
27
28**Slot-count dampening**: `slots_to_decide = 3`, below the 5-slot threshold -> no dampening applied.
29
30**Outputs**:
31- `variance_posture`: "seek"
32- `variance_multiplier`: 1.30
33- `confidence_band`: "high-variance (seek aggressively)"
34- `rationale`: "Pre-move win probability is 0.32 (heavy underdog) and the downside is catastrophic (must-win, asymmetry 0.90). Maximizing variance raises the probability of a right-tail outcome. Consumer should boost high-variance options (boom-bust players, concentrated positions, longshot bets) by 30%."
35
36**Consumer application** (downstream skill applies the multiplier):
37```
38adjusted_player_score = base_score x (1 + (boom_bust_score - 0.5) x (variance_multiplier - 1))
39```
40A boom-bust score of 0.8 (high-variance player) with multiplier 1.30 gets a +9% boost relative to a steady player.
41
42## Workflow
43
44Copy this checklist and track progress:
45
46```
47Variance Strategy Selection Progress:
48- [ ] Step 1: Collect inputs (win_probability, downside_asymmetry, slots_to_decide)
49- [ ] Step 2: Classify win-probability band (seek / neutral / minimize)
50- [ ] Step 3: Apply downside-asymmetry amplification
51- [ ] Step 4: Apply slot-count dampening
52- [ ] Step 5: Clamp multiplier to valid range and validate monotonicity
53- [ ] Step 6: Emit structured output with rationale
54```
55
56**Step 1: Collect inputs**
57
58- [ ] `current_win_probability` is a float in [0, 1]. Reject values outside this range.
59- [ ] `downside_asymmetry` is a float in [0, 1] where 1.0 = losing is catastrophic (must-win for playoffs, elimination game, bankroll ruin).
60- [ ] `slots_to_decide` is a non-negative integer representing how many independent decisions this posture covers (lineup slots, portfolio positions, bet sequence length).
61
62See [resources/template.md](resources/template.md#input-validation-checklist) for input validation rules.
63
64**Step 2: Classify win-probability band**
65
66Apply the three-band rule:
67
68- [ ] `win_probability < 0.40` -> posture = "seek", base multiplier 1.15-1.30
69- [ ] `0.40 <= win_probability <= 0.60` -> posture = "neutral", base multiplier 1.00
70- [ ] `win_probability > 0.60` -> posture = "minimize", base multiplier 0.80-0.90
71
72Within the "seek" band, pick the base multiplier proportional to how far below 0.40 the probability is: `base = 1.15 + (0.40 - win_probability) x 0.375`, clamped to 1.30. Within "minimize", mirror: `base = 0.90 - (win_probability - 0.60) x 0.25`, clamped to 0.80.
73
74See [resources/methodology.md](resources/methodology.md#why-underdogs-want-variance) for the underlying right-tail / left-tail logic.
75
76**Step 3: Apply downside-asymmetry amplification**
77
78If the loss is catastrophic, the underdog must swing harder and the favorite must protect harder. The adjustment is symmetric around 1.0.
79
80- [ ] If `downside_asymmetry > 0.8` and posture = "seek": shift multiplier +0.10 (further above 1.0)
81- [ ] If `downside_asymmetry > 0.8` and posture = "minimize": shift multiplier -0.10 (further below 1.0)
82- [ ] If `downside_asymmetry > 0.8` and posture = "neutral": no shift (neutral remains neutral by definition)
83- [ ] If `downside_asymmetry <= 0.8`: no shift
84
85**Step 4: Apply slot-count dampening**
86
87With many independent decisions, the Central Limit Theorem diversifies variance on its own. Pushing the multiplier hard across many slots is redundant.
88
89- [ ] If `slots_to_decide > 5`: dampen the distance from 1.0 by a factor of `5 / slots_to_decide` (bounded below at 0.5). E.g. with 10 slots, reduce the gap by half.
90- [ ] If `slots_to_decide <= 5`: no dampening.
91
92See [resources/methodology.md](resources/methodology.md#central-limit-dampening) for the math.
93
94**Step 5: Clamp and validate monotonicity**
95
96- [ ] Clamp the final multiplier to the range [0.70, 1.40]. Values outside this range indicate an input or computation error.
97- [ ] Confirm monotonicity: as `win_probability` decreases, multiplier must weakly increase. As `downside_asymmetry` increases, |multiplier - 1.0| must weakly increase.
98
99**Step 6: Emit structured output**
100
101Return the four required fields:
102
103- [ ] `variance_posture` -- "seek" | "neutral" | "minimize"
104- [ ] `variance_multiplier` -- final number in [0.70, 1.40]
105- [ ] `confidence_band` -- short human-readable descriptor (e.g. "high-variance (seek aggressively)", "low-variance (protect the lead)")
106- [ ] `rationale` -- 2-3 sentences citing win probability band, asymmetry flag, slot count effect, and how the consumer should interpret the multiplier
107
108Validate using [resources/evaluators/rubric_variance_strategy_selector.json](resources/evaluators/rubric_variance_strategy_selector.json). Minimum standard: average score of 3.5 or above.
109
110## Common Patterns
111
112**Pattern 1: Heavy underdog, must-win (fantasy sports)**
113- Inputs: win_prob ~0.30, asymmetry ~0.90, slots 1-3
114- Output: posture "seek", multiplier ~1.30
115- Rationale: Swing for the fences. Prefer a high-K / high-HR boom-bust hitter over a high-contact singles hitter; prefer a volatile SP with upside over a stable #4 starter. Consumer skill (e.g. `mlb-lineup-optimizer`) multiplies boom-bust weight by 1.30.
116
117**Pattern 2: Heavy favorite, large portfolio / many slots**
118- Inputs: win_prob ~0.75, asymmetry ~0.50, slots ~12 (full lineup / diversified portfolio)
119- Output: posture "minimize", multiplier ~0.92 (after slot dampening from 0.85)
120- Rationale: Protect the lead, but don't over-engineer -- with 12 slots the portfolio is already diversified by the Central Limit effect. Small damp on the variance knob is enough. Consumer reduces concentration / boom-bust weight by 8%.
121
122**Pattern 3: Even matchup (poker mid-stack)**
123- Inputs: win_prob ~0.50, asymmetry ~0.40, slots ~5 (next 5 hands)
124- Output: posture "neutral", multiplier 1.00
125- Rationale: Play close to GTO. No variance tilt either way. Consumer applies no adjustment to bet sizing.
126
127**Pattern 4: Mild favorite, one decisive decision (racing / options expiry)**
128- Inputs: win_prob ~0.65, asymmetry ~0.85, slots 1
129- Output: posture "minimize", multiplier ~0.75 (base 0.85 - 0.10 asymmetry shift, no slot dampening)
130- Rationale: One shot, lead to protect, catastrophic if squandered. The race leader does not take the high-risk inside line; the hedged call writer does not lift the hedge on expiry day. Consumer hard-damps variance.
131
132## Guardrails
133
1341. **Bands are hard, not fuzzy.** Do not interpolate the posture label across 0.40 and 0.60 thresholds. Posture is categorical (seek / neutral / minimize); the multiplier is continuous within each band. Consumers rely on the categorical label for branching logic.
135
1362. **Asymmetry amplifies, never reverses.** A catastrophic downside makes a favorite more conservative and an underdog more aggressive. It never flips the direction. If the computed multiplier would cross 1.0 because of an asymmetry shift, clamp at 1.0 and recheck inputs.
137
1383. **Slot dampening applies to the distance from 1.0, not to the multiplier itself.** Implementation: `final = 1.0 + (pre_dampening - 1.0) x min(1.0, 5 / slots)`. Dampening 1.30 across 10 slots gives 1.15, not 0.65.
139
1404. **Edge cases at probability 0 and 1.** If `win_probability = 0`, posture is "seek" with maximum multiplier (1.30 pre-asymmetry, 1.40 post); the analogy is a lottery ticket -- variance is the only path to a non-zero outcome. If `win_probability = 1`, posture is "minimize" with maximum damp (0.80 pre-asymmetry, 0.70 post); any variance is pure downside. Document these explicitly in the rationale.
141
1425. **The multiplier is a nudge, not a command.** It biases the downstream optimizer; it does not replace the optimizer. A 1.30 multiplier does not mean "start only boom-bust players." It means "up-weight boom-bust scores by 30% relative to stable scores within whatever optimization the consumer runs."
143
1446. **Downside asymmetry is not the same as win probability.** A heavy underdog in week 1 of a season has low win probability but low asymmetry (plenty of chances to recover). The same underdog in week 20 has high asymmetry (last chance). Ask for both inputs; do not infer one from the other.
145
1467. **Independence assumption underlies slot dampening.** Central-limit diversification works when slot outcomes are independent. If slots are highly correlated (e.g. all pitchers on the same team, all tech stocks in a portfolio), dampening is weaker. Flag this assumption in the rationale when the consumer domain is known to be correlated.
147
1488. **Domain-neutral by design.** This skill does not know whether the decision is a fantasy lineup, a portfolio, a poker session, or a race. It emits a scalar. The consumer attaches domain-specific meaning. Do not hard-code domain jargon in the rationale -- use neutral terms like "high-variance options" and "stable options."
149
150## Quick Reference
151
152**Three-band rule:**
153
154| Win probability | Posture | Base multiplier range |
155|---|---|---|
156| `< 0.40` | seek | 1.15 - 1.30 |
157| `0.40 - 0.60` | neutral | 1.00 |
158| `> 0.60` | minimize | 0.80 - 0.90 |
159
160**Asymmetry shift (applied when `downside_asymmetry > 0.8`):**
161
162| Posture | Shift |
163|---|---|
164| seek | +0.10 |
165| neutral | 0 |
166| minimize | -0.10 |
167
168**Slot dampening:**
169
170```
171if slots_to_decide > 5:
172 factor = max(0.5, 5 / slots_to_decide)
173 multiplier = 1.0 + (multiplier - 1.0) x factor
174```
175
176**Full computation sketch:**
177
178```python
179def variance_strategy(p_win, asym, slots):
180 # 1. Band
181 if p_win < 0.40:
182 posture = "seek"
183 base = 1.15 + (0.40 - p_win) * 0.375
184 base = min(base, 1.30)
185 elif p_win > 0.60:
186 posture = "minimize"
187 base = 0.90 - (p_win - 0.60) * 0.25
188 base = max(base, 0.80)
189 else:
190 posture = "neutral"
191 base = 1.00
192
193 # 2. Asymmetry
194 if asym > 0.8 and posture == "seek":
195 base += 0.10
196 elif asym > 0.8 and posture == "minimize":
197 base -= 0.10
198
199 # 3. Slot dampening
200 if slots > 5:
201 factor = max(0.5, 5 / slots)
202 base = 1.0 + (base - 1.0) * factor
203
204 # 4. Clamp
205 multiplier = max(0.70, min(1.40, base))
206 return posture, multiplier
207```
208
209**Key resources:**
210
211- **[resources/template.md](resources/template.md)**: Input validation checklist, worked examples across 4 scenarios (heavy underdog must-win, modest underdog, even, heavy favorite), output format
212- **[resources/methodology.md](resources/methodology.md)**: Kelly Criterion reference, variance-of-sum math, right-tail / left-tail probability reasoning, Central Limit dampening, domain parallels (fantasy, poker, horse racing, portfolio)
213- **[resources/evaluators/rubric_variance_strategy_selector.json](resources/evaluators/rubric_variance_strategy_selector.json)**: 8-criterion quality rubric for band accuracy, asymmetry adjustment, slot dampening, multiplier range, rationale clarity, edge cases, monotonicity, citations
214
215**Inputs required:**
216
217- `current_win_probability` (float, 0-1): point estimate of win probability before the variance decision is made
218- `downside_asymmetry` (float, 0-1): 1.0 = losing is catastrophic (elimination, bankroll ruin); 0.5 = routine; 0.0 = no downside consequence
219- `slots_to_decide` (int, >= 0): number of independent decisions this posture will be applied across
220
221**Outputs produced:**
222
223- `variance_posture` (string): "seek" | "neutral" | "minimize"
224- `variance_multiplier` (float, 0.70-1.40): scalar for consumer to multiply against boom-bust / volatility / concentration scores
225- `confidence_band` (string): short human-readable posture descriptor
226- `rationale` (string): 2-3 sentences citing band, asymmetry, slot count, and interpretation
227
228**Referenced by (consumers):**
229
230- `mlb-lineup-optimizer` (fantasy baseball lineup selection under daily_quality x leverage x variance_multiplier)
231- Portfolio allocation skills that weight high-beta vs low-beta positions
232- Poker bankroll skills that pick bet-size variance
233- Any agent deciding how hard to push a variance knob
234
235**Principle reference:** Game Theory Principles #6 (Variance-seeking as underdog -- the "cope" principle) in `yahoo-mlb/context/frameworks/game-theory-principles.md`.