Upward-Move Scorecard
Credit-scorecard methodology applied to price direction: daily trend features are coarse-classed into bins, converted to Weight of Evidence, ranked by Information Value, fitted with logistic regression and scaled into points — the same pipeline used to build a credit scorecard.
Train 2021-08-04 → 2024-09-26 (115,054 rows) · Test 2025-04-04 → 2026-02-04 (31,090 rows, strictly later).
| Decile | Rows | Rose | Lift |
|---|---|---|---|
| 1 (best) | 3,109 | 57.16% | 1.143 |
| 2 | 3,109 | 57.48% | 1.15 |
| 3 | 3,109 | 56.61% | 1.132 |
| 4 | 3,109 | 57.54% | 1.151 |
| 5 | 3,109 | 46.25% | 0.925 |
| 6 | 3,109 | 47.76% | 0.955 |
| 7 | 3,109 | 46.0% | 0.92 |
| 8 | 3,109 | 44.97% | 0.899 |
| 9 | 3,109 | 41.78% | 0.836 |
| 10 (worst) | 3,109 | 44.45% | 0.889 |
The practical test: does the top decile actually rise more often than the bottom? A monotonic gradient down this table is worth more than the headline AUC. Lift is the decile's up-rate divided by the 49.91% base rate.
| Feature | Group | IV | Bins | Coefficient |
|---|---|---|---|---|
| vol_63d | Volatility | 0.07115 | 7 | -0.6663 |
| beta_63d | Relative strength | 0.04547 | 6 | -0.6523 |
| vol_21d | Volatility | 0.04473 | 8 | -0.0222 |
| ret_252d | Momentum | 0.04308 | 5 | -0.6319 |
| atr_pct | Volatility | 0.03565 | 9 | 0.2478 |
| ma50_vs_ma200 | Trend | 0.03256 | 5 | -0.7054 |
| px_vs_ma200 | Trend | 0.02224 | 4 | 0.0393 |
| ret_126d | Momentum | 0.01543 | 5 | 0.3412 |
| drawdown_from_high | Mean reversion | 0.0135 | 4 | -0.6776 |
| dollar_volume_log | Volume | 0.01309 | 4 | -0.9942 |
| px_vs_ma50 | Trend | 0.00827 | 3 | -0.2063 |
| ret_21d | Momentum | 0.00719 | 4 | 0.0789 |
| trend_slope_21d | Trend | 0.00719 | 4 | 0.0789 |
| px_vs_ma20 | Trend | 0.00659 | 4 | -0.0712 |
| ret_63d | Momentum | 0.00633 | 3 | -0.3153 |
| ret_5d | Momentum | 0.00596 | 4 | -0.2753 |
| rel_ret_21d | Relative strength | 0.00584 | 4 | -0.3592 |
| rel_ret_63d | Relative strength | 0.00387 | 3 | 0.2854 |
| range_position | Mean reversion | 0.00347 | 4 | -0.782 |
| ret_1d | Momentum | 0.00329 | 4 | -0.0085 |
| volume_trend | Volume | 0.00293 | 4 | -0.2926 |
| vol_ratio | Volatility | 0.00121 | 2 | -0.8699 |
| obv_slope | Volume | 0.00096 | 3 | |
| zscore_20d | Mean reversion | 0.00064 | 3 | |
| rsi_14 | Mean reversion | 0.00059 | 6 | |
| volume_z | Volume | 0.00054 | 4 |
IV measures how much a feature separates risers from non-risers. Because WoE is ln(non-event/event), a negative coefficient means the feature predicts upward moves. Features below the IV floor were dropped before fitting.
| Feature | Group | Band | Rows | Rose | WoE | Points |
|---|---|---|---|---|---|---|
| vol_63d | Volatility | <= 0.1695 | 10,575 | 33.02% | 0.702 | 0 |
| vol_63d | Volatility | (0.1695, 0.1978] | 10,575 | 45.46% | 0.1771 | 10 |
| vol_63d | Volatility | (0.1978, 0.2224] | 10,574 | 46.98% | 0.1156 | 11 |
| vol_63d | Volatility | (0.2224, 0.2464] | 10,575 | 48.66% | 0.0484 | 13 |
| vol_63d | Volatility | (0.2464, 0.2728] | 10,574 | 51.27% | -0.0559 | 15 |
| vol_63d | Volatility | (0.2728, 0.309] | 10,575 | 53.27% | -0.1361 | 16 |
| vol_63d | Volatility | > 0.309 | 42,298 | 55.01% | -0.2063 | 17 |
| beta_63d | Relative strength | <= 0.5357 | 21,150 | 43.71% | 0.2479 | 0 |
| beta_63d | Relative strength | (0.5357, 0.685] | 10,574 | 45.61% | 0.1708 | 1 |
| beta_63d | Relative strength | (0.685, 0.9217] | 21,149 | 46.26% | 0.1446 | 2 |
| beta_63d | Relative strength | (0.9217, 1.043] | 10,575 | 48.42% | 0.0582 | 4 |
| beta_63d | Relative strength | (1.043, 1.187] | 10,574 | 55.28% | -0.2171 | 9 |
| beta_63d | Relative strength | > 1.187 | 31,724 | 56.49% | -0.2661 | 10 |
| vol_21d | Volatility | <= 0.1504 | 11,195 | 38.04% | 0.4824 | 0 |
| vol_21d | Volatility | (0.1504, 0.1806] | 11,195 | 44.22% | 0.2271 | 0 |
| vol_21d | Volatility | (0.1806, 0.2062] | 11,194 | 46.79% | 0.1231 | 0 |
| vol_21d | Volatility | (0.2062, 0.2321] | 11,195 | 49.28% | 0.0234 | 0 |
| vol_21d | Volatility | (0.2321, 0.2639] | 11,194 | 49.71% | 0.0065 | 0 |
| vol_21d | Volatility | (0.2639, 0.3019] | 11,195 | 52.48% | -0.1046 | 0 |
| vol_21d | Volatility | (0.3019, 0.5198] | 33,583 | 54.29% | -0.1773 | 0 |
| vol_21d | Volatility | > 0.5198 | 11,195 | 55.28% | -0.2175 | 0 |
| ret_252d | Momentum | <= 0.04096 | 39,058 | 45.85% | 0.1621 | 0 |
| ret_252d | Momentum | (0.04096, 0.0983] | 7,810 | 47.9% | 0.0798 | 2 |
| ret_252d | Momentum | (0.0983, 0.1683] | 7,811 | 49.2% | 0.0277 | 2 |
| ret_252d | Momentum | (0.1683, 0.2715] | 7,811 | 55.46% | -0.2236 | 7 |
| ret_252d | Momentum | > 0.2715 | 15,623 | 58.56% | -0.3501 | 9 |
| atr_pct | Volatility | <= 0.01655 | 22,626 | 41.93% | 0.3203 | 4 |
| atr_pct | Volatility | (0.01655, 0.01853] | 11,313 | 46.07% | 0.1521 | 3 |
| atr_pct | Volatility | (0.01853, 0.02041] | 11,314 | 49.41% | 0.0183 | 2 |
| atr_pct | Volatility | (0.02041, 0.02254] | 11,312 | 50.95% | -0.0436 | 1 |
| atr_pct | Volatility | (0.02254, 0.02509] | 11,313 | 51.95% | -0.0834 | 1 |
| atr_pct | Volatility | (0.02509, 0.02851] | 11,313 | 53.18% | -0.1327 | 1 |
| atr_pct | Volatility | (0.02851, 0.03312] | 11,313 | 53.43% | -0.1426 | 1 |
| atr_pct | Volatility | (0.03312, 0.04054] | 11,313 | 54.23% | -0.175 | 0 |
| atr_pct | Volatility | > 0.04054 | 11,313 | 55.58% | -0.2296 | 0 |
| ma50_vs_ma200 | Trend | <= -0.007352 | 34,333 | 46.26% | 0.1431 | 0 |
| ma50_vs_ma200 | Trend | (-0.007352, 0.01494] | 8,583 | 46.83% | 0.1205 | 0 |
| ma50_vs_ma200 | Trend | (0.01494, 0.0596] | 17,166 | 48.95% | 0.0353 | 2 |
| ma50_vs_ma200 | Trend | (0.0596, 0.08936] | 8,583 | 52.57% | -0.1095 | 5 |
| ma50_vs_ma200 | Trend | > 0.08936 | 17,166 | 57.99% | -0.3292 | 10 |
| px_vs_ma200 | Trend | <= 0.05005 | 51,499 | 47.53% | 0.0923 | 0 |
| px_vs_ma200 | Trend | (0.05005, 0.08115] | 8,583 | 48.68% | 0.0462 | 0 |
| px_vs_ma200 | Trend | (0.08115, 0.1226] | 8,583 | 50.34% | -0.0204 | 0 |
| px_vs_ma200 | Trend | > 0.1226 | 17,166 | 57.07% | -0.2915 | 0 |
| ret_126d | Momentum | <= 0.06648 | 57,893 | 47.98% | 0.0722 | 3 |
| ret_126d | Momentum | (0.06648, 0.1157] | 9,649 | 48.11% | 0.0671 | 3 |
| ret_126d | Momentum | (0.1157, 0.1809] | 9,649 | 50.34% | -0.0221 | 3 |
| ret_126d | Momentum | (0.1809, 0.2972] | 9,649 | 54.77% | -0.2001 | 1 |
| ret_126d | Momentum | > 0.2972 | 9,649 | 56.75% | -0.2803 | 0 |
| drawdown_from_high | Mean reversion | <= -0.3161 | 10,634 | 58.41% | -0.3446 | 8 |
| drawdown_from_high | Mean reversion | (-0.3161, -0.2365] | 10,633 | 50.47% | -0.0241 | 1 |
| drawdown_from_high | Mean reversion | (-0.2365, -0.1165] | 31,905 | 48.83% | 0.0419 | 0 |
| drawdown_from_high | Mean reversion | > -0.1165 | 53,162 | 48.67% | 0.048 | 0 |
| dollar_volume_log | Volume | <= 13.86 | 11,506 | 54.24% | -0.1751 | 8 |
| dollar_volume_log | Volume | (13.86, 15.65] | 23,010 | 53.27% | -0.1362 | 7 |
| dollar_volume_log | Volume | (15.65, 16.1] | 11,506 | 52.59% | -0.1088 | 6 |
| dollar_volume_log | Volume | > 16.1 | 69,032 | 47.56% | 0.0926 | 0 |
| px_vs_ma50 | Trend | <= -0.08385 | 10,781 | 56.05% | -0.2481 | 2 |
| px_vs_ma50 | Trend | (-0.08385, -0.0489] | 10,780 | 52.04% | -0.0865 | 1 |
| px_vs_ma50 | Trend | > -0.0489 | 86,243 | 48.84% | 0.0417 | 0 |
| ret_21d | Momentum | <= -0.09582 | 11,195 | 55.79% | -0.2381 | 0 |
| ret_21d | Momentum | (-0.09582, -0.05676] | 11,195 | 51.47% | -0.0641 | 0 |
| ret_21d | Momentum | (-0.05676, -0.03205] | 11,194 | 49.12% | 0.0301 | 1 |
| ret_21d | Momentum | > -0.03205 | 78,362 | 48.9% | 0.0387 | 1 |
| trend_slope_21d | Trend | <= -1.209 | 11,195 | 55.79% | -0.2381 | 0 |
| trend_slope_21d | Trend | (-1.209, -0.7012] | 11,195 | 51.47% | -0.0641 | 0 |
| trend_slope_21d | Trend | (-0.7012, -0.3909] | 11,194 | 49.12% | 0.0301 | 1 |
| trend_slope_21d | Trend | > -0.3909 | 78,362 | 48.9% | 0.0387 | 1 |
| px_vs_ma20 | Trend | <= -0.05414 | 11,225 | 54.92% | -0.2029 | 1 |
| px_vs_ma20 | Trend | (-0.05414, -0.03136] | 11,224 | 52.54% | -0.107 | 0 |
| px_vs_ma20 | Trend | (-0.03136, -0.01765] | 11,224 | 49.8% | 0.0028 | 0 |
| px_vs_ma20 | Trend | > -0.01765 | 78,569 | 48.77% | 0.0438 | 0 |
| ret_63d | Momentum | <= -0.1463 | 10,579 | 55.3% | -0.2179 | 2 |
| ret_63d | Momentum | (-0.1463, -0.08571] | 10,572 | 51.71% | -0.0737 | 1 |
| ret_63d | Momentum | > -0.08571 | 84,595 | 48.96% | 0.0364 | 0 |
| ret_5d | Momentum | <= -0.04895 | 11,432 | 54.69% | -0.1932 | 2 |
| ret_5d | Momentum | (-0.04895, -0.02816] | 11,431 | 52.45% | -0.1033 | 1 |
| ret_5d | Momentum | (-0.02816, -0.01583] | 11,431 | 49.6% | 0.0108 | 0 |
| ret_5d | Momentum | > -0.01583 | 80,020 | 48.85% | 0.0407 | 0 |
| rel_ret_21d | Relative strength | <= -0.08727 | 11,195 | 54.58% | -0.189 | 2 |
| rel_ret_21d | Relative strength | (-0.08727, -0.05305] | 11,195 | 52.1% | -0.0895 | 1 |
| rel_ret_21d | Relative strength | (-0.05305, -0.03152] | 11,194 | 50.67% | -0.0321 | 1 |
| rel_ret_21d | Relative strength | > -0.03152 | 78,362 | 48.76% | 0.0443 | 0 |
| rel_ret_63d | Relative strength | <= -0.1435 | 10,575 | 53.97% | -0.1642 | 0 |
| rel_ret_63d | Relative strength | (-0.1435, -0.08735] | 10,575 | 51.62% | -0.0701 | 1 |
| rel_ret_63d | Relative strength | > -0.08735 | 84,596 | 49.14% | 0.0292 | 2 |
| range_position | Mean reversion | <= 0.3185 | 31,900 | 48.08% | 0.0718 | 0 |
| range_position | Mean reversion | (0.3185, 0.4343] | 10,635 | 48.75% | 0.0448 | 1 |
| range_position | Mean reversion | (0.4343, 0.9475] | 53,165 | 50.61% | -0.0293 | 2 |
| range_position | Mean reversion | > 0.9475 | 10,634 | 52.71% | -0.1135 | 4 |
| ret_1d | Momentum | <= -0.02214 | 11,491 | 53.76% | -0.1559 | 0 |
| ret_1d | Momentum | (-0.02214, -0.0125] | 11,497 | 51.1% | -0.0491 | 0 |
| ret_1d | Momentum | (-0.0125, -0.006941] | 11,484 | 49.97% | -0.0037 | 0 |
| ret_1d | Momentum | > -0.006941 | 80,434 | 49.13% | 0.0298 | 0 |
| volume_trend | Volume | <= -0.4219 | 10,634 | 52.95% | -0.1233 | 1 |
| volume_trend | Volume | (-0.4219, -0.3081] | 10,633 | 51.26% | -0.0553 | 1 |
| volume_trend | Volume | (-0.3081, -0.1518] | 21,267 | 50.6% | -0.0291 | 1 |
| volume_trend | Volume | > -0.1518 | 63,800 | 48.89% | 0.0394 | 0 |
| vol_ratio | Volatility | <= 1.265 | 95,165 | 49.58% | 0.0116 | 0 |
| vol_ratio | Volatility | > 1.265 | 10,574 | 52.48% | -0.1042 | 3 |
This is the deliverable a credit team would hand over: every feature's bands with the points they earn. Each feature's worst band scores 0, so the total is the base score plus everything the current configuration earns. Model output for research — not financial advice, and a 0.5647 AUC means it is wrong very often.