Cardinal
Machine learning for systematic stock selection.
Cardinal ranks S&P 500 stocks using fundamental, sentiment, and technical signals, with a longer-term goal of real-time recommendations informed by historical and current data.
Why point-in-time data matters
A backtest is only honest if it uses the same information that was actually available at the time. Testing against today's S&P 500 membership, correcting prices after the fact, or evaluating only companies that still exist all introduce look-ahead bias, survivorship bias, and historically incorrect constituent membership. Cardinal avoids this by reconstructing a point-in-time S&P 500 universe, with constituents and prices as they were actually known on each date, back to January 1, 2000.
Incorrect historical test
Today's S&P 500 applied backward in time
Point-in-time test
Constituents and prices as they were actually known on each date
System & pipeline
Point-in-time universe
S&P 500 constituents and prices as they were known on each historical date, back to January 2000
16 market signals
Fundamental, sentiment, and technical factors, scored for every stock
Cross-sectional ranking
Each stock scored relative to the rest of the universe at every point in time
Walk-forward evaluation
Rolling, out-of-sample testing across historical time windows
Benchmark comparison
Rankings measured against a momentum baseline
Factor diagnostics
Factor-exposure analysis checks whether results reflect genuine signal
Each of the three signal families feeds a single cross-sectional score: a relative rank for every stock in the universe at every point in time.
Evaluation methodology
Rankings are tested with walk-forward backtesting: train on a historical window, evaluate the next period out-of-sample, then roll forward and repeat.
Momentum baseline
Rankings are benchmarked against a momentum strategy, not judged in isolation.
Factor-exposure diagnostics
Checks whether results come from genuine signal or from unintended factor tilts.
Engineering & data challenges
The model is only as trustworthy as the historical data it sees.
Index membership changes over time, testing only against companies that exist today skews results, and prices have to reflect what was actually known on each historical date. Cardinal's data pipeline resolves company and ticker identity across history and reconstructs constituents and prices back to January 1, 2000 to keep that history honest.
Index membership changes
S&P 500 constituents added and removed over time
Survivorship bias
Testing only against companies that exist today skews results
Identity & data-quality resolution
Company and ticker identity tracked correctly across history
Historically correct pricing
Prices as known on each date, back to January 2000