Skip to content

Label Quality: The Most Underappreciated Problem in Quant Finance

In supervised learning, garbage in garbage out. Label quality—how accurately your target variable reflects what you're actually trying to predict—is the most underappreciated problem in quant finance.

7 of 10 ~3 min

Every supervised learning model in finance is trained to predict something. The “something” is the label (also called the target or dependent variable). For quant finance, the label is typically: “what will the return be over the next N days?”

Label quality determines the ceiling of your model’s performance. No ML architecture, no feature engineering, no hyperparameter tuning can compensate for a bad label. And in quant finance, label quality is systematically underestimated as a problem.

Why Label Quality Is Hard in Finance

Return labels are noisy. Tomorrow’s return is the sum of many components: alpha signal, noise, microstructure effects, liquidity effects, exogenous shocks. The fraction that’s genuinely predictable from today’s features is small. Most of the label is noise.

Alpha is transient. True alpha—the predictable component of returns—decays as more traders exploit it. A label that was predictable in 2015 may not be predictable in 2024. The label itself is moving target.

Market structure changes. When you define “next-day return” as close-to-close, you’re assuming market microstructure is stable. It isn’t. Decimalization, high-frequency trading, and market structure changes alter the label’s properties over time.

The Problem with Return Labels

Consider the standard label: r_{t+1}^{(i)} = (price_{t+1}^{(i)} / price_t^{(i)}) - 1

This label has several problems:

1. It’s dominated by noise. For a typical stock, daily return variance is ~1% (σ ≈ 1%). A factor with IC = 0.05 explains only ~0.25% of variance (IC² = 0.0025). The label is 97.5% noise.

2. It mixes alpha with microstructure. Close-to-close return includes:

  • Genuine alpha signal (what you want to predict)
  • Bid-ask bounce (noise from market microstructure)
  • Liquidity effects (especially for small caps)
  • Intraday momentum/reversal patterns

3. It ignores trading costs. A “prediction” of 0.1% daily return is worthless if your trading costs are 0.15%. Your label should be net return after costs.

Better Labels

Net Return Label

Subtract estimated transaction costs from gross return:

rnet(i)=rgross(i)−TC^(i)r_{net}^{(i)} = r_{gross}^{(i)} - \hat{TC}^{(i)}

Where TC is estimated round-trip transaction cost for the position.

Alpha Label (Return Decomposition)

Decompose returns into alpha and noise components:

r(i)=α(i)+ϵ(i)r^{(i)} = \alpha^{(i)} + \epsilon^{(i)}

Train on α (if you can estimate it) rather than r. Practitioners often use factor models to estimate α.

Barra-Style Fundamental Return

Use fundamental unexpected return (analyst earnings surprises minus market expectations) as label, which has better signal-to-noise than raw returns.

Alternative Labels

LabelUse Case
Residual return (alpha)When you have a good risk model
Sharpe-contributed returnWhen you want risk-adjusted labels
Net return after costsWhen TC is the binding constraint
Analyst forecast errorFor event-driven strategies
Macro-factor surpriseFor macro strategies

How to Test Label Quality

Label stability test. Compute autocorrelation of labels at different lags. For a good label, autocorrelation should reflect the persistence of the signal. Pure noise has zero autocorrelation at all lags except 0.

import pandas as pd
import numpy as np

def test_label_stability(returns, lags=[1, 5, 10, 20]):
    """
    Test label stability via autocorrelation.
    """
    results = {}
    for lag in lags:
        acf = returns.autocorr(lag=lag)
        results[f'lag_{lag}'] = acf

    # Random label: all ACFs ≈ 0
    # Signal-containing label: ACF at relevant lags > 0
    return pd.Series(results)

Signal-to-noise ratio. Estimate the fraction of label variance that’s predictable:

SNR=Var(α^)Var(r)SNR = \frac{\text{Var}(\hat{\alpha})}{\text{Var}(r)}

where α̂ is your model’s predicted alpha component.

Common Pitfalls

Training on noisy labels. If your label is 97% noise, your model will fit noise. Use a denoised label (alpha residual) or a better label definition.

Data snooping with labels. Choosing a label definition that makes your backtest look good is data snooping. The label should be defined before you see the backtest results.

Survivorship bias in labels. Using only currently-traded stocks’ historical returns ignores delisted stocks, which biases your label upward (delisted stocks tend to have large negative returns before delisting).

References

  • López de Prado, Advances in Financial Machine Learning, Ch. 3. Wiley, 2018. ISBN: 978-1-119-48208-6.
  • Ang, Asset Management, Ch. 5. Oxford University Press, 2014. ISBN: 978-0-19-995932-3.
  • Marcos, Advances in Wealth Management, Ch. 7. Wiley, 2022. ISBN: 978-1-119-82601-7.