qbuntuqbuntu

LightGBM Factor Model (JP All Stocks)

slug: ml-factor-lgbm-9f-jp-all
performance summary
Sharpe (median)
-1.19
Max DD
-55.5%
Win rate
Alpha (ann.)
p-value
0.02
backtest period: 2022-02-012026-02-20
Sharpe across 1536 grid runs:median -1.19best 0.38 (not representative)worst -2.12p25–p75 -1.44-0.84

Hypothesis

A LightGBM model trained on cross-sectional factor features can predict next-period stock returns. Testing the same model on the full Japanese stock universe.

Why it didn't work

Across 1536 grid combinations, median Sharpe=-1.19, best=0.38. Primary failure mode: no_edge.

Facts (7)

Average monthly return correlation with other strategies in DOWN regime: 0.04
Pairwise Pearson correlation of monthly returns across 42 strategies, filtered to DOWN regime months (N=3, N225 < SMA20 < SMA60)
correlation0.04
Average monthly return correlation with other strategies (full period): -0.06
Pairwise Pearson correlation of monthly returns across 42 strategies, full backtest period
correlation-0.06
Best grid Sharpe ratio is 0.38 (p=0.45).
period 2022-02-01–2026-02-20; cost=5bps
sharpe_ratio0.38
Median Sharpe across 1536 grid runs is -1.19.
Full grid of 1536 parameter combinations.
sharpe_ratio-1.19
Median Sharpe in DOWN regime is -1.22 across 1536 runs.
Regime=DOWN, N225 SMA20/SMA60 classification.
sharpe_ratio-1.22
Median Sharpe in FLAT regime is -0.75 across 1536 runs.
Regime=FLAT, N225 SMA20/SMA60 classification.
sharpe_ratio-0.75
Median Sharpe in UP regime is -2.15 across 1536 runs.
Regime=UP, N225 SMA20/SMA60 classification.
sharpe_ratio-2.15

Runs (30)

runparamssharpeUPFLATDOWN
num_leaves=7, learning_rate=0.01, n_estimators=50, feature_set=9f-base, walk_forward_window=60, regime_gate=False
r-ml-factor-lgbm-9f-jp-all-0000
num_leaves: 7
feature_set: "9f-base"
regime_gate: false
-0.96-1.43-0.81-0.46
num_leaves=7, learning_rate=0.01, n_estimators=50, feature_set=9f-base, walk_forward_window=60, regime_gate=True
r-ml-factor-lgbm-9f-jp-all-0001
num_leaves: 7
feature_set: "9f-base"
regime_gate: true
-1.26-2.84-0.81-0.46
num_leaves=7, learning_rate=0.01, n_estimators=100, feature_set=9f-base, walk_forward_window=60, regime_gate=False
r-ml-factor-lgbm-9f-jp-all-0002
num_leaves: 7
feature_set: "9f-base"
regime_gate: false
-1.44-2.06-1.19-1.24
num_leaves=7, learning_rate=0.01, n_estimators=500, feature_set=9f-base, walk_forward_window=60, regime_gate=False
r-ml-factor-lgbm-9f-jp-all-0006
num_leaves: 7
feature_set: "9f-base"
regime_gate: false
-1.33-1.68-1.07-1.83
num_leaves=7, learning_rate=0.1, n_estimators=50, feature_set=9f-base, walk_forward_window=60, regime_gate=False
r-ml-factor-lgbm-9f-jp-all-0024
num_leaves: 7
feature_set: "9f-base"
regime_gate: false
-1.20-2.29-0.68-1.04
num_leaves=7, learning_rate=0.1, n_estimators=200, feature_set=9f-base, walk_forward_window=60, regime_gate=True
r-ml-factor-lgbm-9f-jp-all-0029
num_leaves: 7
feature_set: "9f-base"
regime_gate: true
-2.12-3.82-1.43-2.61
num_leaves=31, learning_rate=0.03, n_estimators=200, feature_set=9f-base, walk_forward_window=60, regime_gate=True
r-ml-factor-lgbm-9f-jp-all-0077
num_leaves: 31
feature_set: "9f-base"
regime_gate: true
-1.40-3.26-0.64-1.90
num_leaves=63, learning_rate=0.01, n_estimators=50, feature_set=9f-base, walk_forward_window=60, regime_gate=False
r-ml-factor-lgbm-9f-jp-all-0096
num_leaves: 63
feature_set: "9f-base"
regime_gate: false
-1.23-1.60-1.02-1.41
num_leaves=7, learning_rate=0.05, n_estimators=500, feature_set=9f-base, walk_forward_window=120, regime_gate=False
r-ml-factor-lgbm-9f-jp-all-0150
num_leaves: 7
feature_set: "9f-base"
regime_gate: false
-1.19-1.91-0.91-0.88
num_leaves=31, learning_rate=0.1, n_estimators=500, feature_set=9f-base, walk_forward_window=120, regime_gate=False
r-ml-factor-lgbm-9f-jp-all-0222
num_leaves: 31
feature_set: "9f-base"
regime_gate: false
-1.33-2.19-1.05-0.39
num_leaves=7, learning_rate=0.01, n_estimators=50, feature_set=9f-base, walk_forward_window=250, regime_gate=False
r-ml-factor-lgbm-9f-jp-all-0256
num_leaves: 7
feature_set: "9f-base"
regime_gate: false
-0.15-0.32-0.10+0.18
num_leaves=15, learning_rate=0.01, n_estimators=500, feature_set=9f-base, walk_forward_window=250, regime_gate=True
r-ml-factor-lgbm-9f-jp-all-0295
num_leaves: 15
feature_set: "9f-base"
regime_gate: true
-1.04-2.09-0.75-0.18
num_leaves=63, learning_rate=0.03, n_estimators=500, feature_set=9f-base, walk_forward_window=250, regime_gate=True
r-ml-factor-lgbm-9f-jp-all-0367
num_leaves: 63
feature_set: "9f-base"
regime_gate: true
-1.22-1.88-0.98-0.93
num_leaves=7, learning_rate=0.01, n_estimators=50, feature_set=15f-swing, walk_forward_window=60, regime_gate=False
r-ml-factor-lgbm-9f-jp-all-0384
num_leaves: 7
feature_set: "15f-swing"
regime_gate: false
-0.49-0.67-0.62+0.95
num_leaves=15, learning_rate=0.1, n_estimators=50, feature_set=15f-swing, walk_forward_window=60, regime_gate=False
r-ml-factor-lgbm-9f-jp-all-0440
num_leaves: 15
feature_set: "15f-swing"
regime_gate: false
-1.50-2.55-1.15-0.54
num_leaves=7, learning_rate=0.01, n_estimators=50, feature_set=15f-swing, walk_forward_window=120, regime_gate=False
r-ml-factor-lgbm-9f-jp-all-0512
num_leaves: 7
feature_set: "15f-swing"
regime_gate: false
-0.40-0.81-0.08-1.22
num_leaves=31, learning_rate=0.03, n_estimators=50, feature_set=15f-swing, walk_forward_window=120, regime_gate=False
r-ml-factor-lgbm-9f-jp-all-0584
num_leaves: 31
feature_set: "15f-swing"
regime_gate: false
-1.11-1.07-1.23-0.39
num_leaves=7, learning_rate=0.05, n_estimators=50, feature_set=15f-swing, walk_forward_window=250, regime_gate=False
r-ml-factor-lgbm-9f-jp-all-0656
num_leaves: 7
feature_set: "15f-swing"
regime_gate: false
-0.44+0.02-0.93+1.50
num_leaves=31, learning_rate=0.1, n_estimators=50, feature_set=15f-swing, walk_forward_window=250, regime_gate=False
r-ml-factor-lgbm-9f-jp-all-0728
num_leaves: 31
feature_set: "15f-swing"
regime_gate: false
-0.86-0.23-1.01-1.99
num_leaves=15, learning_rate=0.01, n_estimators=50, feature_set=8f-no-volume, walk_forward_window=60, regime_gate=False
r-ml-factor-lgbm-9f-jp-all-0800
num_leaves: 15
feature_set: "8f-no-volume"
regime_gate: false
-1.43-2.49-1.17+0.32
num_leaves=63, learning_rate=0.03, n_estimators=50, feature_set=8f-no-volume, walk_forward_window=60, regime_gate=False
r-ml-factor-lgbm-9f-jp-all-0872
num_leaves: 63
feature_set: "8f-no-volume"
regime_gate: false
-1.62-3.15-0.96-0.97
num_leaves=15, learning_rate=0.05, n_estimators=50, feature_set=8f-no-volume, walk_forward_window=120, regime_gate=False
r-ml-factor-lgbm-9f-jp-all-0944
num_leaves: 15
feature_set: "8f-no-volume"
regime_gate: false
-1.13-1.37-0.66-3.23
num_leaves=63, learning_rate=0.1, n_estimators=50, feature_set=8f-no-volume, walk_forward_window=120, regime_gate=False
r-ml-factor-lgbm-9f-jp-all-1016
num_leaves: 63
feature_set: "8f-no-volume"
regime_gate: false
-1.24-1.74-0.75-2.68
num_leaves=7, learning_rate=0.05, n_estimators=200, feature_set=8f-no-volume, walk_forward_window=250, regime_gate=False
r-ml-factor-lgbm-9f-jp-all-1044
num_leaves: 7
feature_set: "8f-no-volume"
regime_gate: false
+0.38+0.69+0.23+0.35
num_leaves=31, learning_rate=0.01, n_estimators=50, feature_set=8f-no-volume, walk_forward_window=250, regime_gate=True
r-ml-factor-lgbm-9f-jp-all-1089
num_leaves: 31
feature_set: "8f-no-volume"
regime_gate: true
-1.18-2.89-0.55-0.93
num_leaves=7, learning_rate=0.03, n_estimators=50, feature_set=7f-no-mrs, walk_forward_window=60, regime_gate=True
r-ml-factor-lgbm-9f-jp-all-1161
num_leaves: 7
feature_set: "7f-no-mrs"
regime_gate: true
-0.76-3.58-0.01+1.07
num_leaves=31, learning_rate=0.05, n_estimators=50, feature_set=7f-no-mrs, walk_forward_window=60, regime_gate=True
r-ml-factor-lgbm-9f-jp-all-1233
num_leaves: 31
feature_set: "7f-no-mrs"
regime_gate: true
-1.87-4.45-0.90-2.04
num_leaves=7, learning_rate=0.1, n_estimators=50, feature_set=7f-no-mrs, walk_forward_window=120, regime_gate=True
r-ml-factor-lgbm-9f-jp-all-1305
num_leaves: 7
feature_set: "7f-no-mrs"
regime_gate: true
-1.52-3.02-0.92-1.73
num_leaves=63, learning_rate=0.01, n_estimators=50, feature_set=7f-no-mrs, walk_forward_window=120, regime_gate=True
r-ml-factor-lgbm-9f-jp-all-1377
num_leaves: 63
feature_set: "7f-no-mrs"
regime_gate: true
-1.74-2.97-1.04-3.60
num_leaves=15, learning_rate=0.03, n_estimators=50, feature_set=7f-no-mrs, walk_forward_window=250, regime_gate=True
r-ml-factor-lgbm-9f-jp-all-1449
num_leaves: 15
feature_set: "7f-no-mrs"
regime_gate: true
-1.30-2.45-0.61-2.78

Target universe

Tokyo Stock Exchange all listed (Prime/Standard/Growth), ~3747 stocks
source: qbuntu-analysis · kabu STATION REST API + J-Quants daily bars
computed asof: 2026-08-06T01:50:20

Related strategies