A portfolio running at 23.9% realized vol with a -46.2% drawdown has a sizing problem, however clean its objective. KellyBoost trains a boosted tree whose output directly sets simplex weights against realized compounding. There is no forecast stage. Li derives the gradient and analytic diagonal Hessian of negative log growth in closed form, then checks both with central finite differences. His dependency-free pure-numpy engine also matches brute-force split selection and leaf values to 1e-10. The mathematics holds up. Deployment does not beat the two-stage forecaster.

Li states the result plainly in his abstract: "The exact Hessian beats its first-order substitutes on the selection protocol by a factor of three and loses to them deployed: the optimizer is not the problem; the estimated full-Kelly target is." His defence assigns the failure to the estimated full-Kelly target rather than trees, boosting or the derivations. The advertised result, he adds, is the four-of-four loss effect, rather than KellyBoost's absolute deployed growth. Whether that defence survives the evidence is the live question.

We also ran the idea on liquid US-listed ETFs as substitutes for the paper's eight legs. This exercise neither replicates nor tests the paper. The substitution fits the mechanism because KellyBoost learns conditional long-only weights from features and return paths, without relying on futures carry, roll, basis or term structure. Every figure below comes from the paper and was computed on index mutual fund series. None of those figures transfers to our ETF version of the book.

The tree sets the weights

Each row combines one date's features with realized 20-trading-day simple returns for eight legs. One multi-output XGBoost model, using vector leaves and multi_output_tree, produces K logits per row. Softmax converts them into long-only weights that sum to one. The row loss is -log(1 + w'y). Its sample mean equals negative realized log growth, so minimization estimates a feature-conditional Kelly allocation.

The derivatives are closed form. Li obtains g_k = sigma_k (S - y_k) / (1 + S), with S denoting the row's portfolio return. An asset that beats the rest of the book gets its logit pushed upward. The move depends on its current weight and is divided by realized wealth growth. For diagonal curvature, h_k = g_k(1 - 2 sigma_k) + g_k^2.

Curvature can be negative. Since XGBoost divides leaf values by aggregated Hessian mass, Li uses its absolute value. The safeguard activates in 50% of (row, asset) cells during the first boosting round and 27% in the last. Rectification therefore governs much of the fit.

Assets interact through the shared split search. Once a partition has been selected, the K outputs separate into K scalar Newton steps. Any proposed split must earn its place across all legs, allowing one regime variable to support one split for the entire portfolio. At deployment, Li averages four members. Each member is trained after removing one row, with hyperparameters left unchanged.

Removing one row, roughly 0.02% of the panel, changes live leg weights by whole percentage points. Nearly tied splits switch places, then later rounds compound the difference. Averaging reduces the distance from a 16-member book at about 1/sqrt(K), while realized growth stays flat in K. Li presents the committee as a cure for operational fragility, rather than a source of accuracy. That description fits the evidence.

The committed experiment

The paper uses eight legs from a committed Yahoo Finance snapshot: growth equity (VIGRX), value (VIVAX), long Treasuries (VUSTX), international (VGTSX), energy (VGENX), gold, silver and cash at the 13-week bill. Mutual fund share classes provide more history than ETFs. The panel begins in 2003-02, with decisions every 21 trading days.

A purged walk-forward on the development segment ending 2012-12 jointly selects hyperparameters and features. Both are then frozen. The single performance measurement covers 2013-01 through 2026-07, comprising 163 decisions across 13.6 years with expanding-window refits.

Gross of costs, KellyBoost records mean log growth of 0.47 per decision (x100), a 6.2% annualized return, 23.9% vol, a 0.30 Sharpe and a -46.2% maximum drawdown. Measured turnover is 7.9x. After one-way proportional costs, performance falls to 5.8% and a 0.28 Sharpe at 5bps, then 4.5% and 0.23 at 20bps. The unconditional Kelly portfolio, refitted on every date, earns 4.1% with a 0.22 Sharpe. Features added value.

Does the loss matter?

Li calls the 2x2 comparison "the whole claim": {boosted tree, MLP} x {growth objective, argmax classification surrogate}. The surrogate assigns each date to its winning leg and fits cross-entropy. Learner class and feature pipeline remain fixed while the loss changes. The growth objective wins four of four comparisons. With searched features, trees score 0.47 against 0.35. On the same 174 hand-built columns, they score 0.39 against 0.32. MLP results are 0.56 against 0.20 and 0.67 against 0.49.

Per-decision paired differences range from +0.07 to +0.37. Pooling the cells gives +0.18, a 95% interval of [-0.11, +0.50], and bootstrap Pr(delta>0) = 0.89. Across block lengths of 1 to 12 decisions, that probability remains between 0.84 and 0.96. Li acknowledges that the interval contains zero.

Turnover makes the case more persuasive. The growth loss trades less in every cell: 7.9x against 13.1x for searched trees, 4.8x against 10.8x on the hand-built set, then 11.8x against 16.8x and 15.4x against 16.0x for the MLPs. At 20bps, the pooled difference expands to +0.25 and Pr(delta>0) rises to 0.95.

The argmax label is brittle, in Li's account. A tiny move in the leg that wins a month changes the entire label. Cross-entropy also gives equal treatment to a month won by 20 basis points and one won by 20 points. I agree with that diagnosis. Li discloses the remaining confound: the tree surrogate uses LightGBM while KellyBoost uses XGBoost, and the searched rows deploy separate feature lists for each method.

Where the extra growth appeared

The two-stage baseline fits one LightGBM regressor per leg, then sends those forecasts to a quadratic-Kelly optimizer using a trailing covariance. It beats every end-to-end learner in deployment, posting 0.82 log growth, an 8.2% return, a 0.40 Sharpe and a -40.4% drawdown. KellyBoost delivers 0.47 / 6.2% / 0.30 / -46.2%.

Table 1 reports moving-block bootstrap intervals in its last column, using the difference in annualized daily log growth versus KellyBoost. For the two-stage comparison, the interval is [-12.3, +10.0] and crosses zero. Li says no individual pairwise difference in the table clears its bootstrap interval. Costs nearly erase the deployed advantage as well. At 20bps and 16.5x turnover, the two-stage portfolio earns 4.7%, compared with KellyBoost's 4.5%. Sampling noise and costs contain the edge.

Li's proposed mechanism deserves attention. Monthly returns offer little forecastability, pushing squared-error estimates toward zero. As the abstract frames it, a full-covariance optimizer receiving near-zero means chooses a mild portfolio. KellyBoost's deployed committee instead carries a mean maximum leg weight of 0.70. A full-Kelly target applied to estimation error produces over-betting. The forecast stage that decision-focused learning aims to remove supplies free shrinkage here.

Table 3 complicates the comparison. On the hand-built 174 columns, KellyBoost reaches 0.39 while the two-stage pipeline reaches 0.38, with Sharpe ratios of 0.28 and 0.26. Drawdowns favour the two-stage portfolio: -48.3% for KellyBoost against -36.2%. Its growth advantage arrives only after feature search raises the two-stage score from 0.38 to 0.82.

Those searched rows are also the results Li asks readers to treat cautiously. He discloses that the evaluation segment was scored twice. The hand-built pipeline underperformed, after which the search layer was created in response. Li argues that this peek could only bias the study toward the positive result that failed to appear, while the negative result persists in both pipelines. I part company with the second part of that argument when judging the two-stage comparison itself.

Better curvature, worse deployment

The curvature ablation freezes the committed hyperparameters and feature list, changing only the Hessian treatment. On the development protocol, the exact rectified diagonal Hessian scores 4.19. A constant Hessian produces 1.43, while the g^2 Gauss-Newton surrogate reaches 0.54.

Deployment reverses the order. The constant Hessian earns 0.67 log growth, an 8.3% annualized return, a 0.63 Sharpe and a -23.6% drawdown. The exact version records 0.47, 6.2%, 0.30 and -46.2%. Smaller steps keep softmax weights closer to uniform. Fitting K independent trees per round instead of a single vector-leaf tree provides another version of the same result: a weaker selection score of 3.50, followed by stronger deployment at 0.65, 8.8% and a 0.40 Sharpe.

Li gives the diagonal approximation a fair defence. Off-diagonal terms account for around half of the per-row Frobenius mass, starting at 0.50 in round 0 and drifting to 0.62. At tuned lambda, diagonal and full eigenvalue-rectified leaf steps achieve mean cosine of at least 0.99 on leaf-sized row sets. Using one identical coarsened block grid and frozen parameters under the tuning protocol, the full leaf solver scores +0.0339 versus +0.0335 for the diagonal solver.

Every accidental source of shrinkage helped, and Li deliberately included none of it.

The code already contains a CRRA dial, which can temper the growth objective toward gentler sizing. Search considered gamma in [1, 10] and selected 1.14. Li's interpretation is the paper's sharpest: the selection protocol finds no in-sample reason to soften the objective. Risk preference must set the dial instead of search.

His conclusion proposes the experiments the paper now needs: explicit turnover penalties in z, plus growth objectives regularized directly or defined across a distributional uncertainty set. A fractional-Kelly blend of deployed weights, priced out of sample and still trailing the two-stage portfolio, would change my view of the estimation-error explanation.

One final number matters. KellyBoost deploys with five columns selected from 7,871 candidates using ten years of development data. They are two-year window quantiles of international equity curvature (35.9% of split gain), wheat (27.7%), copper (22.0%), a soybean drift quantile (7.7%) and financial-sector return skewness (6.7%). Li leaves their economic legibility with the reader and says this is part of the point.

The formulation is new, and the derivatives check out. With 23.9% realized vol and a -46.2% drawdown on an eight-leg allocation portfolio, its implied sizing rule is not yet tradeable.