Reference 0018

Alpha Uncertainty Card

The optimizer doesn't average your errors — it argmaxes them. Subtract the error bar before you hand it anything.

The Winner's Curse

α̂_i = α_i + noise   (unbiased!)  but the solver funds the LARGEST α̂
⇒  E[ promised α̂ᵀw* ]  >  E[ delivered αᵀw* ]     always

promised - delivered = the promise gap: report it on every backtest

The Remedies Ladder

1. shrink:    τα̂ + (1-τ)μ̄          (Black-Litterman = this, industrialized)
2. penalize:  rank by α̂_i - δs_i     (s_i = error bar; the lab's dial)
3. robust:    worst case over a set:

   box  α ∈ [α̂ ± δs]:   max_w min_α αᵀw = α̂ᵀw - δΣ s_i|w_i|   ← L1! (Ref 0015)
   ellipsoid:              α̂ᵀw - δ√(wᵀSw)                    ← SOCP

box-robust ⇒ NO-HOLD ZONE: names whose alpha can't clear
their own error bar get weight exactly zero (sparse books)

CVXPY Snippet

objective = cp.Maximize(alpha_hat @ w
                        - delta * cp.norm1(cp.multiply(s, w))   # box-robust
                        - gamma * risk)
# concave in a maximize: DCP-legal. +delta would be the padding bug (Ref 0015).

Whiteboard Traps

"estimates are unbiased so the book is fine":  selection bias ≠ estimate bias
backtest picked from many candidates:          same argmax, same curse
δ too big:                                    insurance you don't need; delivery plateaus
robust ≠ pessimistic forecast:                 it's a penalty on POSITIONS, not on views

Use this page with Lesson 0018 (same-luck-different-caution lab), Reference 0015 (the L1 mechanics), and Reference 0012 (zone logic). Source: MOSEK Portfolio Cookbook, estimation-error and robust chapters.