Factor Research
A factor is a claim that an ordering of assets today predicts their returns
tomorrow. Rankings are cheap — every column of numbers orders a universe. This
skill measures whether the ordering carries information, how fast it decays,
and whether it survives its own turnover.
Position in the pipeline
point-in-time-research guards the data that builds the factor panel. This
skill judges the panel. Survivors go to backtest-validation, where costs and
selection bias get their turn. A factor evaluated on contaminated data has a
fictional IC — run PIT discipline first if the panel provenance is unclear.
What gets measured (one way, no options)
- Rank IC series — per-period cross-sectional Spearman of factor(t) vs
next-period returns. Rank, not Pearson: factors are orderings, and Pearson
IC is one outlier away from flattery. Mean IC, IC-IR, t-stat, hit rate.
- Decay — mean IC at 1/5/10/21-period horizons. Fast decay + high
turnover = the edge pays the broker.
- Quantile discipline — mean forward return per quintile and the share of
ordered adjacent steps. A real factor orders the middle of the book, not
just the two extreme buckets.
- Stability — first-half vs second-half IC (a sign flip is fatal) and
factor rank autocorrelation (turnover proxy).
Workflow
- Establish the panel: factor values as-of each date (long format
date,symbol,value), the return matrix, the frequency, and where the factor
values came from. If provenance is unclear, route through
point-in-time-research before trusting any IC.
- Run
python scripts/factor_evaluate.py --factor factor.csv --returns returns.csv --freq daily --json report.json
(or --demo to show the mechanics).
- Report judgement first, then the evidence: IC/IR/t/hit-rate, decay curve,
quantile spread, turnover. Interpretation thresholds live in
references/methodology.md.
- Route by verdict:
valid / valid_but_moderate → hand to
backtest-validation (the factor is a hypothesis, not yet a strategy);
weak / invalid → the deliverable is the rejection and which check
failed. Do not "fix" a dead factor by trying variants until one passes —
that is selection bias, and backtest-validation's DSR will ask how many
variants were tried.
- When comparing multiple factors, evaluate each on the same universe and
window, and report the count of factors examined alongside the winner.
Guardrails
- IC below noise threshold is reported as "no signal", never rounded up to
"slightly positive".
- No strategy construction on a
weak/invalid verdict.
- Multiple factors tried = trials disclosed downstream to backtest-validation.
- Decay and turnover are always reported together — a horizon-1 edge with
churny ranks is flagged, not celebrated.
1---2name: factor-research3description: Evaluate whether a cross-sectional factor genuinely predicts returns. Trigger for "这个因子有效吗", "算一下IC", "动量因子在A股还有效吗", "帮我评估这个选股信号", "factor IC", "is this signal predictive", "compare momentum vs value factors", or whenever the user (1) proposes or computes a ranking/score across assets and asks if it works, (2) asks which factor explains recent moves, (3) wants factors screened/ranked before building a strategy, or (4) hands a signal to strategy construction. Fire even for informal phrasing ("这个指标选股靠谱吗"). Do NOT trigger for single-asset technical indicator questions (no cross-section) or for validating a finished strategy's returns (that is backtest-validation).4---56# Factor Research78A factor is a claim that an ordering of assets today predicts their returns9tomorrow. Rankings are cheap — every column of numbers orders a universe. This10skill measures whether the ordering carries information, how fast it decays,11and whether it survives its own turnover.1213## Position in the pipeline1415`point-in-time-research` guards the data that builds the factor panel. This16skill judges the panel. Survivors go to `backtest-validation`, where costs and17selection bias get their turn. **A factor evaluated on contaminated data has a18fictional IC — run PIT discipline first if the panel provenance is unclear.**1920## What gets measured (one way, no options)21221. **Rank IC series** — per-period cross-sectional Spearman of factor(t) vs23 next-period returns. Rank, not Pearson: factors are orderings, and Pearson24 IC is one outlier away from flattery. Mean IC, IC-IR, t-stat, hit rate.252. **Decay** — mean IC at 1/5/10/21-period horizons. Fast decay + high26 turnover = the edge pays the broker.273. **Quantile discipline** — mean forward return per quintile and the share of28 ordered adjacent steps. A real factor orders the middle of the book, not29 just the two extreme buckets.304. **Stability** — first-half vs second-half IC (a sign flip is fatal) and31 factor rank autocorrelation (turnover proxy).3233## Workflow34351. Establish the panel: factor values as-of each date (long format36 date,symbol,value), the return matrix, the frequency, and where the factor37 values came from. If provenance is unclear, route through38 point-in-time-research before trusting any IC.392. Run `python scripts/factor_evaluate.py --factor factor.csv --returns returns.csv --freq daily --json report.json`40 (or `--demo` to show the mechanics).413. Report judgement first, then the evidence: IC/IR/t/hit-rate, decay curve,42 quantile spread, turnover. Interpretation thresholds live in43 `references/methodology.md`.444. Route by verdict: `valid` / `valid_but_moderate` → hand to45 backtest-validation (the factor is a hypothesis, not yet a strategy);46 `weak` / `invalid` → the deliverable is the rejection and which check47 failed. Do not "fix" a dead factor by trying variants until one passes —48 that is selection bias, and backtest-validation's DSR will ask how many49 variants were tried.505. When comparing multiple factors, evaluate each on the same universe and51 window, and report the count of factors examined alongside the winner.5253## Guardrails5455- IC below noise threshold is reported as "no signal", never rounded up to56 "slightly positive".57- No strategy construction on a `weak`/`invalid` verdict.58- Multiple factors tried = trials disclosed downstream to backtest-validation.59- Decay and turnover are always reported together — a horizon-1 edge with60 churny ranks is flagged, not celebrated.