alpha-combination-and-neutralizationlisted
Install: claude install-skill howard-lynn-ye/fin-skills
# Alpha combination and neutralization
**Three numbers in a standard alpha research note are routinely wrong, and none of them raise.**
The IC t-stat, because the observations are not independent. The word "neutral", because the
exposure came from the wrong window. And the winsorization step, because it was placed after a
rank and clips nothing.
Everything marked ✅ Measured comes from `scripts/alpha_combine.py` — numpy + pandas + scipy,
seed 20260909, 200 names x 1,200 days x 8 sectors, **7 s**. The panel's alphas have their skill
planted in *known* components of the return, so neutralization can be checked rather than
asserted.
## 1. Conventions this skill uses, so the numbers can be checked
| Quantity | Definition here |
|---|---|
| IC | cross-sectional correlation of the alpha known at `t` with the forward return from `t` |
| rank IC | the Spearman version — Pearson on within-row ranks |
| ICIR | `mean(IC)/std(IC)`, annualized by `sqrt(252)` |
| one-way turnover | `0.5 * Σ_i |w_t,i − w_{t−1,i}|` on a unit-gross book; `1.0` = the book flipped |
| net | gross minus `bps × one-way turnover`, the convention `../../../fin-core/skills/backtest-validation/scripts/cost_curve.py` consumes |
✅ Measured — the script's vectorized rank IC agrees with `scipy.stats.spearmanr` row by row to
**1.39e−17**. Do not take a hand-rolled IC on trust; ten rows against scipy costs nothing.
## 2. IC is not the number that decides anything
✅ Measured, five alphas, daily rebalance, 10 bps one-w