This page explains how the rankings are built and shows the backtests behind them. Every chart can be clicked to open a large, zoomable view. The research is informative but limited, and we have tried to say plainly where.
The short version
Higher-ranked stocks have tended to earn more than lower-ranked ones in our 2014 to 2023 sample, for the learned models especially, but the gaps are small relative to how much individual stock returns vary.
No algorithm we tried is reliably better than the others. After accounting for the fact that we tested about three dozen variants, none of the new ones beats the two experimental columns already on the homepage.
The sample is thinner than it looks. Only 36 of the 111 test dates contain 50 or more stocks, and overlapping 36-month outcomes mean the data behave like roughly nine independent periods.
Treat everything here as research, not a forecast. Past backtests, especially on a list of companies that exist today, overstate what to expect. Nothing on this site is investment advice.
The live Final Score
The published Final Score is a hand-set weighted mix of five percentile-ranked factors. Each factor is ranked across the whole list, so the score lands on a 0 to 1 scale.
Factor
Weight
Gross Profitability to Total Assets
45%
3-Year Revenue CAGR
20%
Year-over-Year Share Shrink (buybacks)
15%
12-Month Momentum
10%
Year-over-Year Revenue Growth
10%
P/E Ratio (latest price divided by trailing-twelve-month EPS, shown only when EPS is positive) and Earnings Yield (trailing-twelve-month EBIT divided by enterprise value, following the EBIT/TEV convention in Quantitative Value) are displayed for context. Enterprise value is market cap plus current and long-term debt minus cash and short-term investments. Our data source does not report preferred stock or minority interest, so those are not included. They are not part of the Final Score.
The experimental columns
Two experimental scores sit beside the Final Score. They are for comparison and do not affect the published rank.
Revenue/Shrink/Assets is an equal-weight rank average of 3-year revenue CAGR, share shrink and low asset growth. The three factors were picked using the full sample, so its backtest is in-sample and flatters it.
Huber All11 is a robust regression on 11 percentile-ranked factors. The homepage version is trained on 24-month forward return ranks. The research on this page evaluates the same model family with a 36-month target in a walk-forward test, so the exact live version is not what was backtested.
We also tested a range of other approaches (gradient boosting, ridge and random-forest models, IC-weighted blends, factor-subset searches, quality and momentum gates, a small-cap tilt). Three are worth watching in a shadow test: monotone LightGBM, a 12-month-label Huber model, and a 24-month-label Ridge model. None is on the homepage. See the results table for why none has earned a place yet.
Backtest setup
Universe: a fixed list of roughly 300 US-listed companies that exist today. Companies that were delisted or acquired are missing, which biases results upward (survivorship bias), and probably most for small names.
Sample: 9,936 stock-observations on 111 month-end dates from January 2014 to April 2023. Each date contains only the companies whose latest quarter had just become public (a 45-day filing lag is applied), so dates hold anywhere from 11 to 256 stocks.
Outcome: the next 36 months of total return, using prices adjusted for splits and dividends.
No peeking: learned models are retrained on an expanding window, using only observations whose 36-month outcome had already finished at the scoring date.
Grouping: on each date, stocks are ranked by score and split into equal-sized buckets (deciles or quintiles). We compare the average outcome of the best bucket with the worst.
Mean and median: bars show the mean return, diamonds the median. Returns are skewed to the right, so a few big winners pull the mean well above the median.
Uncertainty: intervals are 95% circular block bootstrap intervals over dates (blocks of 36 months), which respects the overlap between consecutive outcomes. They are probably still too narrow.
How much data is behind each chart?
Stocks per test date. On 75 of 111 dates there are only 11 to 49 stocks, so a decile holds one to four names and its average is mostly noise. The decile and quintile charts below therefore use only the 36 dates with 50 or more stocks (about 23 per decile). Those dates hold 83% of all observations.
Deciles: mean and median return
Decile 1 holds the lowest-ranked stocks, decile 10 the highest. Bars are average 36-month returns, diamonds are medians, whiskers are 95% bootstrap intervals for the mean. Blue panels are the homepage experimental columns, orange are research candidates, grey is the live score. Deciles are noisy: neighbouring bars are usually within each other's intervals, so look at the broad slope and at the gap between mean and median rather than at any single bar.
Quintiles: a steadier view
Same idea with five buckets. Each bucket holds about 46 stocks per date, so the averages are more stable than deciles. We treat quintiles as the main view and deciles as the detailed one.
Stability: first half versus second half
Does the pattern hold in both halves? Light bars use dates through mid-2018, dark bars use later dates. Each of the four learned models shown has a smaller top-minus-bottom gap in the second half, the live Final Score turns negative, and Revenue/Shrink/Assets does the opposite (negative first, positive second). With 17 and 19 dates per half the intervals are wide.
Top minus bottom, with uncertainty
Quintile spread per algorithm. The dot is the average gap between the top and bottom fifth; the bar is its 95% interval. Most bars cross zero and overlap, so the ordering between neighbouring algorithms is not reliable. The right panel shows the first-half and second-half gap.
Candidates versus baselines. This asks the direct question: is a candidate better than Huber All11, Revenue/Shrink/Assets, or the live score? Against the two experimental columns every interval includes zero. Only monotone LightGBM clearly beats the live Final Score, which is a weaker bar to clear. After correcting for having tried about 34 variants, the best candidate's edge is not statistically distinguishable from luck (p about 0.08).
Results table
Quintile spread = average 36-month return of the top fifth minus the bottom fifth, in percentage points, with a 95% bootstrap interval in brackets. IC is the average rank correlation between score and outcome.
Algorithm
Spread, all 111 dates
Spread, 36 dates with 50+ stocks
First / second half
IC
Our read
Final Score (live)Live Final Score
+7 [-15, +34]
+12 [-31, +58]
+27 / -12
0.096
Live score. Best rank correlation, weakest tails; turns negative in the second half.
Equal-weight live 5Live Final Score
+11 [-8, +36]
+10 [-33, +55]
+22 / +1
0.113
Reference: equal-weight version of the live five factors.
Revenue/Shrink/AssetsHomepage experimental column
+15 [-0, +33]
+6 [-9, +24]
-6 / +34
0.039
Kept as a benchmark. Factors were chosen on the full sample; negative first half, strong second half.
Huber All11Homepage experimental column
+18 [+4, +36]
+35 [+11, +61]
+24 / +12
0.051
Kept. Most stable of the baselines across both halves.
Monotone LightGBMResearch candidate (not on site)
+25 [+7, +46]
+26 [-5, +58]
+37 / +14
0.084
Shadow-test only. Highest nominal spread, but fades in the second half.
Huber, 12m labelResearch candidate (not on site)
+24 [+9, +39]
+35 [+9, +67]
+27 / +21
0.068
Shadow-test only. Same model class as Huber All11 with a shorter label.
Ridge, 24m labelResearch candidate (not on site)
+19 [+4, +32]
+24 [+7, +41]
+20 / +17
0.051
Shadow-test only. Simple and stable, but smaller in magnitude.
Random forest, top tercileDiagnostic / rejected
+22 [+0, +43]
+29 [+2, +56]
+15 / +29
0.071
Rejected. Inconsistent across metrics.
Rank-average ensembleDiagnostic / rejected
+12 [-8, +34]
+21 [+0, +46]
+19 / +6
0.059
Rejected. No better than Huber All11.
Live 5 + 20% small-cap tiltDiagnostic / rejected
+17 [-11, +46]
+36 [+5, +74]
+33 / +2
0.120
Rejected. The gain is mostly a size / survivorship effect.
Small-cap only (not an algorithm)Diagnostic / rejected
+22 [-8, +51]
+57 [+38, +80]
+24 / +19
0.049
Diagnostic: smallest names alone. Explains why the tilt was rejected.
What the backtest cannot tell you
Small, lumpy cross-sections. Most dates hold 11 to 49 stocks. That is why the bucket charts use only the best-populated dates.
Overlapping outcomes. A 36-month return window is shared by about three dozen neighbouring dates. 111 dates behave like roughly nine independent periods, and the intervals shown probably understate the uncertainty.
Many variants tried. Choosing the best of about 34 variants builds in an optimistic bias. A formal best-of-34 test finds no variant significantly better than zero spread at the 5% level.
Survivorship bias. The list contains today's companies. Firms that failed or were acquired are absent, which helps small names most. When we added a small-cap tilt it looked good, but small-cap alone did better, so we read it as a size and survivorship effect and rejected it.
One market regime. 2014 to 2023 was a long growth and quality stretch. Value-style factors did poorly in it. Results may not carry over.
Revenue/Shrink/Assets is in-sample. Its factors were chosen with the full sample, and it moved from slightly negative to strongly positive between halves.
Rank correlation versus tails. The live score has the best IC but the weakest top-versus-bottom gap. Which one matters depends on whether you care about the whole ordering or only the top.
No costs. Returns ignore trading costs, taxes and liquidity.
Show earlier charts (older sample and method set; read with caution)
These come from an earlier, broader study (2008 onward, different method list, all dates pooled equally). They were made before we audited cross-section sizes, so their top-decile and decile-spread numbers are less reliable than the charts above. The older decile and 10%-spread charts have been retired and replaced by the sections above.
Mean rank IC by method, earlier study.Top 20% minus bottom 20% spread, earlier study.How similar the methods' rankings are. Highly correlated methods are largely restating one ordering.Hypothetical growth of $10k in each method's top decile. Top deciles on thin dates can be a single stock, so treat this as illustration only.
This page describes research on historical data. It is not investment advice, and past results do not predict future returns.