A quantitative research project for evaluating alpha signal quality, robustness, and decay.
This project focuses on the research layer before portfolio construction:
Does the alpha signal actually contain information?
Instead of presenting a trading strategy, the repository builds a clean diagnostic framework around synthetic market data and alpha scores. The goal is to test whether a signal is persistent, directionally useful, robust across time, and economically interpretable before it is translated into portfolio weights.
The workflow is intentionally focused on alpha validation:
- Simulate synthetic asset returns and alpha scores
- Measure cross-sectional Rank IC
- Test information decay across multiple forward horizons
- Evaluate long-short quantile spread behavior
- Estimate signal stability through turnover diagnostics
- Summarize results in a compact research report
The data is synthetic by design. The objective is not to claim a live trading edge, but to demonstrate a reproducible quantitative research process.
Rank IC measures whether higher-ranked securities by signal tend to achieve higher future returns.
RankIC_t = SpearmanRankCorr(signal_t, forward_return_{t+1})
This is a common first-pass test for cross-sectional alpha quality.
A useful signal should have a measurable relationship with future returns, but that relationship usually weakens over longer horizons.
The project evaluates Rank IC at multiple horizons:
1d, 2d, 5d, 10d, 20d
Assets are sorted into signal quantiles. The spread between the top and bottom signal buckets provides a simple economic interpretation of the signal.
Spread_t = mean(return_top_quantile) - mean(return_bottom_quantile)
A signal can look attractive but still be difficult to implement if rankings change too aggressively. The project measures rank turnover as a proxy for stability.
alpha-diagnostics-lab/
├── README.md
├── requirements.txt
├── pyproject.toml
├── run_analysis.py
├── src/
│ └── alpha_diagnostics/
│ ├── __init__.py
│ ├── simulate.py
│ ├── diagnostics.py
│ ├── plotting.py
│ └── report.py
├── tests/
│ └── test_diagnostics.py
├── notebooks/
│ └── alpha_diagnostics_walkthrough.ipynb
├── data/
│ ├── alpha_scores.csv
│ ├── simulated_returns.csv
│ ├── rank_ic.csv
│ ├── information_decay.csv
│ ├── quantile_returns.csv
│ ├── quantile_spread.csv
│ ├── turnover.csv
│ └── summary_metrics.csv
├── figures/
│ ├── rolling_rank_ic.png
│ ├── information_decay.png
│ ├── quantile_spread.png
│ └── signal_diagnostics_dashboard.png
├── assets/
│ └── social_preview.png
└── reports/
└── alpha_diagnostics_summary.md
Clone the repository and install the dependencies:
pip install -r requirements.txtRun the full analysis:
python run_analysis.pyThis creates updated files in:
data/figures/reports/
Run tests:
pytestThe synthetic signal shows a positive average Rank IC, a clear decay profile over longer horizons, and a constructive long-short quantile spread. This is the type of diagnostic evidence one would want before moving into portfolio construction.
The result should not be interpreted as a live investment strategy. It is a research framework for testing alpha signals under controlled conditions.
Potential extensions:
- Add sector-neutral Rank IC
- Add transaction cost sensitivity
- Add regime-level diagnostics
- Add bootstrap confidence intervals
- Add factor exposure checks
- Connect the validated signal to a portfolio construction layer
This project pairs naturally with Signal-to-Portfolio:
Alpha Diagnostics Lab → validates signal quality
Signal-to-Portfolio → translates alpha scores into portfolio weights
Together they form a compact research pipeline from alpha validation to portfolio construction.



