The ranker is a gradient-boosted ranking model, retrained from scratch at every rebalance on 53 cross-sectional features. It is only ever shown observations whose 63-day return horizon had already closed, so no fold can learn from a future it would not have seen.
Mean information coefficient
0.013
Average rank correlation between the model's ordering and the return that followed. Live equity factors typically sit between 0.02 and 0.06.
Folds with positive IC
53%
16 of 30 out-of-sample quarters ranked the market the right way round.
Top minus bottom quintile
-0.94%
Average quarterly return gap between the names the model liked most and least.
Weight in the blend
35%
The remainder is the rule-based composite, which carries the majority share.
The proposal set out to test a learning-to-rank model against an interpretable baseline. This is what the walk-forward test actually found.
0.62
Information ratio
No fitted parameters. Cannot overfit the test.
0.29
Information ratio
Retrained every quarter on the data available then.
0.83
Information ratio
65% rule, 35% model.
The gradient-boosted ranker did not beat the hand-built score on its own.
A KSE-100 cross-section offers about a hundred rows per quarter, and roughly thirty usable quarters. That is a few thousand training examples for 53 noisy features, where the signal-to-noise ratio of a quarterly stock return is low by nature. Under those conditions a flexible model spends most of its capacity fitting noise, while a weighted average of sector-relative z-scores gives up flexibility and keeps the signal. The model still earns a minority share of the blend, because its errors are not the same errors the rule-based score makes, and combining the two beat either alone. Reporting this rather than tuning the model until it wins is the point of running the comparison walk-forward.
Rank correlation between the model's ordering on the rebalance date and the return actually delivered over the quarter that followed. Every bar is a genuine out-of-sample test.
The bars swing either side of zero, which is what honest quarterly stock forecasting looks like. What matters is that the average sits above zero and that the losing quarters are not systematically the same kind of quarter.
Share of total split gain, averaged over the seed ensemble of the most recent fit.
Each row is one retrain. The training set only ever grows, and it never contains a label whose horizon was still open on the rebalance date.
| Rebalance | Train rows | Quarters | IC | Q1 − Q5 |
|---|---|---|---|---|
| 01 Jul 16 | 0 | 0 | warm-up | — |
| 03 Oct 16 | 101 | 1 | warm-up | — |
| 02 Jan 17 | 202 | 2 | warm-up | — |
| 03 Apr 17 | 303 | 3 | warm-up | — |
| 03 Jul 17 | 404 | 4 | warm-up | — |
| 02 Oct 17 | 505 | 5 | warm-up | — |
| 01 Jan 18 | 606 | 6 | warm-up | — |
| 02 Apr 18 | 707 | 7 | warm-up | — |
| 02 Jul 18 | 808 | 8 | 0.087 | +5.1% |
| 01 Oct 18 | 909 | 9 | -0.186 | -17.2% |
| 01 Jan 19 | 1,010 | 10 | -0.125 | -2.1% |
| 01 Apr 19 | 1,010 | 10 | 0.190 | +8.6% |
| 01 Jul 19 | 1,212 | 12 | -0.029 | -16.2% |
| 01 Oct 19 | 1,313 | 13 | -0.010 | -8.6% |
| 01 Jan 20 | 1,414 | 14 | 0.142 | -5.0% |
| 01 Apr 20 | 1,515 | 15 | -0.352 | -15.8% |
| 01 Jul 20 | 1,616 | 16 | -0.159 | -15.0% |
| 01 Oct 20 | 1,717 | 17 | 0.116 | +14.3% |
| 01 Jan 21 | 1,818 | 18 | 0.046 | -1.2% |
| 01 Apr 21 | 1,818 | 18 | -0.083 | -10.5% |
| 01 Jul 21 | 2,020 | 20 | -0.250 | -23.2% |
| 01 Oct 21 | 2,121 | 21 | -0.060 | -1.2% |
| 03 Jan 22 | 2,222 | 22 | -0.202 | -14.5% |
| 01 Apr 22 | 2,222 | 22 | -0.082 | -2.7% |
| 01 Jul 22 | 2,424 | 24 | -0.129 | -14.2% |
| 03 Oct 22 | 2,525 | 25 | 0.183 | +14.0% |
| 02 Jan 23 | 2,626 | 26 | -0.177 | -11.3% |
| 03 Apr 23 | 2,727 | 27 | 0.119 | +9.1% |
| 03 Jul 23 | 2,828 | 28 | 0.192 | +12.5% |
| 02 Oct 23 | 2,929 | 29 | 0.210 | +20.5% |
| 01 Jan 24 | 3,030 | 30 | 0.185 | +18.3% |
| 01 Apr 24 | 3,131 | 31 | 0.184 | +7.5% |
| 01 Jul 24 | 3,232 | 32 | -0.022 | +1.5% |
| 01 Oct 24 | 3,333 | 33 | 0.053 | -5.9% |
| 01 Jan 25 | 3,434 | 34 | 0.184 | +6.5% |
| 01 Apr 25 | 3,434 | 34 | 0.330 | +12.3% |
| 01 Jul 25 | 3,636 | 36 | 0.022 | -9.2% |
| 01 Oct 25 | 3,737 | 37 | 0.012 | +15.3% |
| 31 Dec 25 | 3,838 | 38 | warm-up | — |