Claude
Skills
Sign in
Back

adverse-selection-prior

Included with Lifetime
$97 forever

Produces a Bayesian prior probability that an offered transaction is +EV for the recipient, given that the counterparty chose to propose it. Applies Akerlof market-for-lemons logic -- if they offered it, they believe it is +EV for them, so the prior that it is +EV for us is materially below 50%. Reusable across trade evaluation, waiver drops (another team dropping a player is also adverse selection), job-offer analysis, M&A, and any "someone offered me this" situation. Use when you receive an unsolicited trade/offer/proposal, analyzing incoming trade prior, evaluating why a counterparty proposed a deal, or when user mentions adverse selection, market for lemons, why did they offer this, incoming trade prior, they proposed it, Bayesian adjustment on received offer.

General

What this skill does

# Adverse Selection Prior

## Table of Contents
- [Example](#example)
- [Workflow](#workflow)
- [Common Patterns](#common-patterns)
- [Guardrails](#guardrails)
- [Quick Reference](#quick-reference)

## Example

**Scenario**: We receive a fantasy trade offer. Opponent (classified `active` archetype) offers us a star hitter (their side) for two of our mid-tier hitters (our side). On surface the offer looks roughly fair -- our own projection model says the deal is +3% EV for us.

**Inputs**:
- `offer_type`: `trade`
- `proposer_archetype`: `active`
- `offer_symmetry_score`: 72 (looks fair-to-slightly-favorable for us)
- `proposer_info_asymmetry`: 55 (moderate -- we do not have closer news that they might have, but no public bombshell either)

**Step 1 -- Base prior by offer type**:
- Received trade offer base prior = **0.40** (below 50% because they chose to propose it).

**Step 2 -- Symmetry adjustment**:
- `offer_symmetry_score` = 72 > 70 threshold -> **+0.07**.
- Running prior: 0.47.

**Step 3 -- Asymmetry adjustment**:
- `proposer_info_asymmetry` = 55 (below 60 threshold but non-trivial) -> **-0.05**.
- Running prior: 0.42.

**Step 4 -- Archetype adjustment**:
- `active` archetype -> they analyzed before offering -> **-0.05**.
- Final `prior_ev_probability`: **0.37**.

**Step 5 -- Recommended adjustment (EV haircut)**:
- Prior is 0.37 (vs neutral 0.50). Map to multiplicative haircut.
- `recommended_adjustment` = 0.88 (apply a 12% EV haircut to our own projection).
- Our model said +3% EV; after haircut: 1.03 x 0.88 = **0.907** -> expected value is actually **negative 9.3%**.

**Step 6 -- Bayesian rationale**:
"Active trader proposed this offer. They had the option to propose any trade or no trade, and they selected this one -- strong evidence it is +EV for them. Surface symmetry (72) partially offsets, but moderate info asymmetry (55) and analytical archetype push the prior to 0.37. Apply 12% EV haircut. Our +3% projection becomes -9% after adjustment; this is below the accept threshold."

**Step 7 -- Override hints**:
- "If closer news broke in last 48h and we have not checked news feeds, asymmetry is actually 85+; re-run with asymmetry=85 (prior drops to ~0.22)."
- "If we can independently confirm the star hitter has no hidden injury/suspension, symmetry is actually 80+; re-run with symmetry=85 (prior rises to ~0.44)."
- "If this is a repeated-game partner we have cooperated with 5+ times and they have never sent a -EV offer, archetype effectively shifts toward 'good-faith' and base prior rises by +0.05."

**Output contract**:
```json
{
  "prior_ev_probability": 0.37,
  "recommended_adjustment": 0.88,
  "bayesian_rationale": "Active trader selected this offer from all possible offers they could have made -- strong signal it is +EV for them. Surface symmetry (72) partially offsets, but moderate info asymmetry (55) and analytical archetype push prior below 0.40.",
  "override_hints": [
    "If closer/injury news broke in last 48h, asymmetry jumps to 85+; re-run.",
    "If we can independently confirm the star has no hidden issue, symmetry rises to 85; re-run.",
    "If repeated-game partner with cooperation history, base prior rises by +0.05."
  ]
}
```

## Workflow

Copy this checklist and track progress:

```
Adverse Selection Prior Progress:
- [ ] Step 1: Identify offer_type and set base prior
- [ ] Step 2: Collect proposer_archetype from opponent classifier
- [ ] Step 3: Score offer_symmetry (0-100) from surface analysis
- [ ] Step 4: Score proposer_info_asymmetry (0-100)
- [ ] Step 5: Apply adjustments to produce prior_ev_probability
- [ ] Step 6: Convert prior to recommended_adjustment (multiplicative haircut)
- [ ] Step 7: Write bayesian_rationale and override_hints
- [ ] Step 8: Validate against rubric
```

**Step 1: Identify offer type and set base prior**

Classify the incoming proposal. Different offer types carry different base priors because the counterparty's selection pressure differs. See [resources/template.md](resources/template.md#base-prior-by-offer-type) for the base-prior table.

- [ ] `trade` -> base prior 0.40 (active selection; they wrote the offer)
- [ ] `waiver_claim_dropped_by_other` -> base prior 0.42 (they chose to drop the player; weaker selection than a trade)
- [ ] `free_agent_pickup_available` -> base prior 0.48 (no one claimed; may just mean no one noticed, weaker adverse selection)
- [ ] `counter_offer` -> base prior 0.38 (they rejected our first offer and crafted a counter -- the selection is tighter)
- [ ] `generic` -> base prior 0.40 (unknown context)

**Step 2: Collect proposer archetype**

Read the counterparty's archetype from the opponent classifier (if available) or estimate it. See [resources/methodology.md](resources/methodology.md#archetype-adjustments) for the full adjustment table.

- [ ] `active` -> analyzed before offering -> archetype_delta = -0.05
- [ ] `expert` -> strongest selection pressure -> archetype_delta = -0.08
- [ ] `dormant` -> may be clicking without deep analysis -> archetype_delta = +0.08
- [ ] `frustrated` -> mixed (panic-selling vs scheming) -> archetype_delta = 0.0 (but flag for case-by-case review)
- [ ] `unknown` -> neutral -> archetype_delta = 0.0

**Step 3: Score offer symmetry**

Compute `offer_symmetry_score` (0-100) for how fair the offer looks on surface using our own valuation model.

- [ ] 0-30: clearly lopsided in their favor (rare; usually predatory)
- [ ] 30-70: asymmetric but plausible
- [ ] 70-100: looks fair or slightly favorable for us on surface
- [ ] Apply adjustment: if `offer_symmetry_score` > 70, add +0.05 to +0.10 (higher for scores above 85)
- [ ] If `offer_symmetry_score` < 30 (and still not obviously predatory), flag as "too good to be true" -- investigate

**Step 4: Score proposer info asymmetry**

Estimate `proposer_info_asymmetry` (0-100) -- do they plausibly have information we do not?

- [ ] Check for recent news (injury, suspension, closer change, lineup shift, management commentary)
- [ ] Check for public signals (roster construction implying knowledge of upcoming trade, DFA watch, platoon changes)
- [ ] 0-30: public information parity (both sides know everything relevant)
- [ ] 30-60: minor gap (they may follow a beat reporter we skipped)
- [ ] 60-100: material gap (fresh news broke, insider-ish timing)
- [ ] Apply adjustment: subtract 0.10 to 0.20 if asymmetry > 60 (larger subtraction for scores above 80)

**Step 5: Apply adjustments to produce prior**

Combine base prior with all deltas. See [resources/methodology.md](resources/methodology.md#bayesian-update-derivation) for the derivation.

- [ ] Start with `base_prior` from Step 1
- [ ] Apply `symmetry_delta` from Step 3
- [ ] Apply `asymmetry_delta` from Step 4
- [ ] Apply `archetype_delta` from Step 2
- [ ] Clip final result to [0.10, 0.70] -- priors outside this band indicate specification error
- [ ] `prior_ev_probability` = clipped sum

**Step 6: Convert prior to recommended adjustment**

Translate the prior into a multiplicative EV haircut that downstream consumers can apply to their own EV calculation. See [Quick Reference](#quick-reference) for the mapping.

- [ ] If prior >= 0.50: `recommended_adjustment` = 1.00 (no haircut; rare case)
- [ ] If prior = 0.45: `recommended_adjustment` = 0.95
- [ ] If prior = 0.40: `recommended_adjustment` = 0.90
- [ ] If prior = 0.35: `recommended_adjustment` = 0.85
- [ ] If prior <= 0.30: `recommended_adjustment` = 0.80 (deep haircut; strong adverse-selection signal)
- [ ] Downstream consumer multiplies their own EV by this factor: `adjusted_EV = own_EV x recommended_adjustment`

**Step 7: Write rationale and override hints**

Produce the string outputs that make the prior reviewable.

- [ ] `bayesian_rationale`: 2-4 sentences naming the base prior, the two largest adjustments, and the conclusion
- [ ] `override_hints`: 2-5 conditional statements of the form "If X, then re-run with Y adjusted to Z"
- [ ] Hints must be actionable -- each should identify
Files: 4
Size: 61.7 KB
Complexity: 44/100
Category: General

Related in General