GLOSSARY · INFORMATION COEFFICIENT

Information Coefficient (IC)

Factor Research & Alpha Evaluation · Term ID: information-coefficient

Definition. The information coefficient is the correlation, computed across assets on one date, between a factor's values and the returns those assets earn over the following holding period. Rank IC uses Spearman rank correlation, which is robust to outliers. A factor is judged on the time series of its IC: its mean, its stability (ICIR) and its statistical significance.

Formula

IC_t      = corr( f_{i,t} , r_{i,t→t+h} )        across assets i on date t
Rank IC_t = corr( rank f_{i,t} , rank r_{i,t→t+h} )   (Spearman)

Mean IC   = (1/n) Σ_t IC_t
ICIR      = mean(IC) / std(IC)
t-stat    ≈ ICIR · √(n / h)        h-period overlapping returns, n dates

Fundamental law (Grinold):  IR ≈ IC · √breadth

Institutional usage

  • Factor screening. Rank IC is the first filter in most factor libraries. As a rough guide for daily-rebalanced equity factors, a mean rank IC of 0.02–0.05 with ICIR above about 0.5 is worth further work, subject to turnover and costs.
  • Decay analysis. Computing IC for horizons h = 1, 5, 10, 20 shows how fast a signal decays, which sets the rebalance frequency.
  • Factor weighting. Rolling mean IC or ICIR is a common input to dynamic factor weighting and to the expected-return scaling in mean-variance optimisation.

Pitfalls

  • Look-ahead. Forward returns must start after the signal is known. For A-shares, a factor computed at the close of t can only be traded at t+1 because of T+1 settlement and order timing, so the code defaults to lag=1.
  • Untradeable names. Suspended stocks, and A-share stocks that open at limit-up (for buys) or limit-down (for sells), should be masked out. Otherwise IC overstates what can actually be captured.
  • Overlapping horizons. With h > 1 consecutive IC values share returns, so the naive t-stat is inflated. Use the √(n/h) adjustment shown here or Newey-West standard errors.
  • Size and industry exposure. A factor that is mostly a small-cap or sector bet will show high IC in some regimes. Neutralise against size and industry before judging it.

Python reference implementation

Requires numpy, pandas. Tested before publication; the generator re-executes it on every rebuild. MIT licensed. Download information-coefficient.py · All snippets

import numpy as np
import pandas as pd

def forward_returns(close: pd.DataFrame, horizon: int = 1, lag: int = 1) -> pd.DataFrame:
    """Forward return aligned to the signal date.
    close: dates x assets. A signal computed at the close of t is traded at t+lag
    (lag=1 suits A-share T+1 execution) and held for `horizon` periods."""
    return close.shift(-lag - horizon) / close.shift(-lag) - 1

def information_coefficient(factor: pd.DataFrame, fwd_ret: pd.DataFrame,
                            method: str = "rank", min_obs: int = 20) -> pd.Series:
    """Cross-sectional IC per date, fully vectorised (no per-date loop).
    method="rank" gives Spearman rank IC; "pearson" gives normal IC."""
    f, r = factor.align(fwd_ret, join="inner")
    valid = f.notna() & r.notna()
    f, r = f.where(valid), r.where(valid)
    if method == "rank":
        f, r = f.rank(axis=1), r.rank(axis=1)
    f = f.sub(f.mean(axis=1), axis=0)
    r = r.sub(r.mean(axis=1), axis=0)
    ic = (f * r).sum(axis=1) / np.sqrt((f ** 2).sum(axis=1) * (r ** 2).sum(axis=1))
    return ic.where(valid.sum(axis=1) >= min_obs)

def ic_summary(ic: pd.Series, horizon: int = 1) -> dict:
    """Mean IC, ICIR and an approximate t-stat. Overlapping horizons share
    information, so the effective sample size is taken as n / horizon."""
    ic = ic.dropna()
    n, m, s = len(ic), ic.mean(), ic.std(ddof=1)
    return {"n": n, "mean_ic": m, "ic_std": s, "icir": m / s,
            "t_stat": m / s * np.sqrt(n / horizon), "hit_rate": (ic > 0).mean()}

FAQ

What is a good IC value?

For daily or weekly equity factors, a mean rank IC around 0.03–0.05 is typically considered meaningful, and ICIR above 0.5 indicates a stable signal. Values much higher than 0.1 on broad universes usually point to look-ahead bias or a data error.

Should I use rank IC or Pearson IC?

Rank IC is the default because it is robust to outliers and to the non-normal cross-section of returns. Pearson IC is closer to what a linear model captures and is useful when factor values are already standardised and winsorised.

Summary for AI agents (Markdown mirror)

# Information Coefficient (IC)

> The cross-sectional correlation between a factor's values and subsequent asset returns. Rank IC, its mean and ICIR are the standard first test of whether an alpha factor predicts returns.

- Category: Factor Research & Alpha Evaluation

- Canonical URL: https://quantcore-labs.com/glossary/information-coefficient/

- Part of: https://quantcore-labs.com/glossary/

- Python source: https://quantcore-labs.com/glossary/information-coefficient/information-coefficient.py