← Blog/blog/lineage-search-valid-evaluation-ledger

The 75-step factor search that does not count failed generations

An LLM proposes a trading factor, the backtest scores it, and evolution mutates the promising branches. The obvious failure is a family monopoly: one early winner keeps receiving the search budget while structurally different ideas disappear. Liu and colleagues make the family tree itself part of the algorithm.

01

Allocate budget to families before individuals

A formulaic alpha factor is a symbolic expression that turns market history into a cross-sectional signal for future returns. A lineage is the descendants of one seed expression: mutation keeps the parent family, while crossover assigns the child to the parent whose expression provides the main backbone.

Lineage-Stratified Parent Selection (LSPS) first chooses a lineage. Its quality term is the best active factor in that lineage. Its diversity term is one divided by the lineage size plus one. The paper mixes 80% quality with 20% inverse size, then samples an individual within the chosen family. A separate elite archive remembers the strongest factors, so exploration need not erase exploitation.

def lineage_probabilities(best, sizes, quality_weight=0.8):
    quality_total = sum(best)
    quality = [value / quality_total for value in best]
    inverse_size = [1 / (size + 1) for size in sizes]
    diversity_total = sum(inverse_size)
    diversity = [value / diversity_total for value in inverse_size]
    return [
        quality_weight * q + (1 - quality_weight) * d
        for q, d in zip(quality, diversity)
    ]

The TypeScript core drives the illustrations; Python and C++ are line-for-line translations. In the toy below, one lineage is twice as strong but four times as large. With the paper's 0.8 quality weight, its next-search probability is 58.3%, not the 66.7% produced by quality alone.

larger, stronger lineagesmaller, weaker lineage
Illustrative LSPS mixture for two lineages. Moving right increases the quality weight from 0 to 1; the smaller lineage loses its exploration bonus but never because its members were individually compared first.
02

The family tree improves both quality and breadth

On CSI 500, adding LSPS raises the paper-reported test IC from 0.0381 to 0.0512. Lineage entropy rises from 0.405 to 2.154, and average abstract syntax tree distance rises from 0.509 to 0.747. These are unusually clean ablation results: the more balanced search also finds the stronger final factor set.

Paper-reported CSI 500 test IC. This is an ablation result, not a synthetic reconstruction.
Paper-reported lineage entropy in the active factor pool. Higher values mean the search is spread more evenly across descent families.

Entropy is easier to interpret after exponentiating it into an effective count: the number of equally represented lineages with the same uncertainty. An illustrative 40/5/3/2 population has only 2.03 effective lineages; five equal groups have 5.

Paper-reported CSI 500 IC for prior ablations. “Lineage only” removes global priors; “global only” removes lineage priors.
03

Seventy-five valid evaluations can mean far more calls

The paper gives the search a budget of 200 valid evaluations, starts from ten LLM-generated roots, and requests three valid mutations plus two valid crossovers per generation. A slot may be tried five times. Grammar failures, duplicates, non-executable expressions, constant outputs, and failed evaluations are logged but excluded from the budget.

Search quantityPaper settingWhat it counts
valid-evaluation budget200accepted, evaluated factors
target offspring / generation3 mutation + 2 crossovervalid slots
maximum attempts / slot5candidate-generation calls
reported strong plateauabout 75valid evaluations only
Paper-reported search settings and accounting units.

The chart below is explicitly illustrative, not a claim about the paper's unreported acceptance rate. Under a constant independent acceptance rate, expected generation calls equal valid evaluations divided by that rate. At 20% acceptance, a 75-valid-evaluation plateau corresponds to 375 expected calls; at 50%, it is 150.

100% accepted50% accepted20% accepted
Illustrative call accounting under constant acceptance rates. The paper reports the horizontal concept—valid evaluations—but not these acceptance-rate scenarios.
04

What the headline results do—and do not—establish

The full method is impressive on its stated protocol. On CSI 500 it reports IC 0.0512, annualized return 15.55%, information ratio 0.9856, and maximum drawdown 19.39%. On S&P 500 it reports IC 0.0134, annualized return 27.00%, information ratio 1.1693, and maximum drawdown 17.05%. Training uses 2015–2020, validation runs through April 2022, and testing covers May 2022 through April 2026.

Those numbers establish performance per accepted evaluation under one backend, one temperature, one prompt system, and one 200-evaluation budget. They do not establish performance per token, dollar, or hour. The distinction matters because lineage priors may improve candidate validity as well as factor quality; excluding rejected attempts hides exactly that potential systems benefit.

05

What to probe next

Rerun every ablation with three ledgers: valid evaluations, total LLM calls, and generated tokens. Report failure reasons by method and plot best validation IC against all three budgets. Then repeat with a second model backend and several seeds. That would show whether lineage memory finds better factors, produces fewer unusable formulas, or both.

To explore how a simple predictive signal becomes a fitted model, continue with the site's interactive linear-regression page.

References

  1. Xintong Liu, Chenkai Zhang, Yanzhao Ma, and Peng Yang (2026). Lineage-Aware Search Control for LLM-Based Evolutionary Factor Mining. arXiv:2610.29663
  2. Edmund K. Burke, Steven Gustafson, Graham Kendall, and Natalio Krasnogor (2003). Is increased diversity in genetic programming beneficial? An analysis of lineage selection. Proceedings of the 2003 Congress on Evolutionary Computation