Statistics for Traders #39: Multinomial logistic regression on the same UK Core CPI × GBPCHF 6-window response panel Stats #34/#35/#36/#37/#38 used. LOO-CV accuracy 87/196 = 44.39% (best variant C=10 standardized) — BEATS LDA 84/196 = 42.86% (+1.53pp) and QDA 79/196 = 40.31% (+4.08pp). But McNemar's exact test on LDA vs logit LOO (b=1, c=4, exact 2-sided p=0.375) is NOT significant — practical dead heat between the two linear classifiers. Standardized coefficients confirm Stats #35's canonical direction: the 1-minute window dominates (biggest coefficient magnitudes on 1m across all 5 classes); 4h and 5m contribute essentially nothing.
Multinomial logistic regression on the same UK Core CPI × GBPCHF n=196, K=5, d=6 panel Stats #34-38 used. Best LOO accuracy 87/196 = 44.39% at the C=10 standardized variant — beats LDA (Stats #36) at 84/196 = 42.86% by +1.53pp, and beats QDA (Stats #38) at 79/196 = 40.31% by +4.08pp.
But the LDA→logit gain is not statistically significant. McNemar’s 2×2 on the LOO predictions counts 11 disagreements (b=1 LDA-right/logit-wrong, c=4 LDA-wrong/logit-right); exact 2-sided p-value = 0.375. Three correct predictions out of 196 is not enough to distinguish “logit is better” from “sampling noise.” Practical dead heat between the two linear classifiers.

Six classifier variants — logit wins, but by noise-margin
| Classifier | Full-fit | LOO acc | Δ vs LDA | Type |
|---|---|---|---|---|
| Baseline (majority) | 31.63% | 31.63% | -11.23pp | predict in_line always |
| QDA (Stats #38) | 57.14% | 40.31% | -2.55pp | generative quadratic |
| LDA (Stats #36) | 49.49% | 42.86% | — | generative linear |
| Mult. logit C=1 unscaled | 50.51% | 43.88% | +1.02pp | discriminative linear |
| Mult. logit unregularized | 50.51% | 43.88% | +1.02pp | discriminative linear |
| Mult. logit C=10 std ← best | 51.02% | 44.39% | +1.53pp | discriminative linear |
Multinomial logit variants all cluster at 43-44% LOO across the L2 penalty sweep C ∈ [1, 100]. Below C=0.1 the model collapses toward predict-majority (C=0.001: 70/196 = 35.71%, with 56/62 in_line recall but 2/53 small_beat). Above C=100 no further gain. The plateau shape says the classifier has learned essentially everything it can from this panel; penalty strength is a tiebreaker within a narrow window, not a lever.
McNemar's test — LDA vs logit LOO predictions
| Logit right | Logit wrong | Total | |
|---|---|---|---|
| LDA right | 83 | b=1 | 84 |
| LDA wrong | c=4 | 108 | 112 |
| Total | 87 | 109 | 196 |
McNemar’s test looks at the off-diagonal cells b and c — the classifiers agree on 191 of 196 predictions (both right 83 + both wrong 108) and disagree on 5. Of the 5 disagreements, 4 favor logit and 1 favors LDA. Under the null hypothesis of no classifier difference, b and c are drawn from a Binomial(b+c, 0.5). Exact 2-sided p-value: 2 × P(X ≤ 1 | X ~ Bin(5, 0.5)) = 0.375. Nowhere near significant.
Standardized coefficients — 1-minute dominates every class
| Class | 1m | 5m | 15m | 30m | 1h | 4h | Intercept |
|---|---|---|---|---|---|---|---|
| big_miss | -0.967 | -0.214 | -0.627 | -0.166 | +1.066 | -0.278 | -1.008 |
| small_miss | -1.239 | +0.019 | +0.850 | -1.158 | +0.080 | +0.134 | +0.549 |
| in_line | -0.207 | +0.308 | +0.596 | +0.194 | -1.234 | +0.231 | +1.069 |
| small_beat | +1.300 | -0.611 | +0.192 | +0.327 | -0.268 | -0.148 | +0.687 |
| big_beat | +1.112 | +0.498 | -1.011 | +0.803 | +0.356 | +0.061 | -1.297 |
Every class’s largest-magnitude coefficient sits on the 1-minute window: small_beat +1.300, small_miss -1.239, big_beat +1.112, big_miss -0.967. Beat classes carry POSITIVE 1m weight, miss classes carry NEGATIVE 1m weight, in_line hovers near zero. This is the DISCRIMINATIVE-classifier version of Stats #35’s canonical direction, which fit a generative model and also collapsed the discriminatory signal onto the 1-minute window (+0.058 standardized loading dominating the other five). Same underlying feature ranking, arrived at from opposite ends of the generative-vs-discriminative divide.
Intercepts (final column) mirror LDA’s log-prior offsets: big_beat -1.297 and big_miss -1.008 are the biggest negative intercepts (matching the small empirical priors 7.65% and 6.63%); in_line +1.069 is the biggest positive (matching the large 31.63% prior). Both LDA and multinomial logit fit the SAME priors and inherit the SAME 0/13 big_miss recall wall that Stats #36 documented.
Per-class recall — where the +3 net gain comes from
| Bucket | n | LDA | Logit | Δ | Reading |
|---|---|---|---|---|---|
| big_miss | 13 | 0 | 0 | 0 | log-prior handicap unchanged |
| small_miss | 53 | 26 | 28 | +2 | logit slightly sharper 1m slope |
| in_line | 62 | 30 | 32 | +2 | logit gives more predictions to majority |
| small_beat | 53 | 26 | 26 | 0 | tied |
| big_beat | 15 | 2 | 1 | -1 | logit loses one big_beat recall |
| TOTAL | 196 | 84 | 87 | +3 | +1.53pp — McNemar exact p=0.375 |
The +3 net gain concentrates on small_miss and in_line — the two mid-buckets on either side of the majority class. LDA and logit agree on 191 of 196 predictions (both right on 83, both wrong on 108); the 5 disagreements split 4-vs-1 in logit’s favor. Neither classifier recovers any big_miss; both hit the same log-prior wall.
Practical takeaway for the series
Stats #34 through Stats #39 have run the same n=196 panel through the entire canonical multivariate-classifier toolkit — one generative-Gaussian test (MANOVA), one generative dimension reduction (canonical direction), two generative classifiers (LDA, QDA), one distance-metric (Mahalanobis), and one discriminative classifier (multinomial logit). The three head-to-head classifier accuracies:
| Classifier | LOO acc | Post |
|---|---|---|
| QDA (quadratic generative) | 40.31% | Stats #38 — overfits per-class Σ |
| LDA (linear generative) | 42.86% | Stats #36 — pooled Σ |
| Multinomial logit (linear discriminative) | 44.39% | Stats #39 — today, best C=10 std |
| McNemar LDA vs logit p | 0.375 | not significant |
Choice of classifier is secondary to choice of feature panel. Practitioners defaulting to logistic regression are not leaving much accuracy on the table vs the LDA/QDA discriminants on real FX-macro bucket-classification problems of this size and shape. Every method concentrates coefficients on the 1-minute window. Every method fails on the tail (big_miss and big_beat) because the empirical-prior log-odds handicap dominates the modest ~0.18-0.35 SD centroid separations Stats #37 (Mahalanobis) measured. Fixing tail-bucket recall requires either uniform priors, class-balancing, or a shifted problem formulation — those are on the Stats #40+ backlog.
Verification note
Panel: 196 UK Core CPI y/y × GBPCHF releases (intersection of 1m/5m/15m/30m/1h/4h non_contaminated). Verified against live /api/v1/news-impact/releases with limit=500 across all 6 windows on 2026-09-08. All classifier accuracies verified with sklearn 1.9.0 (LogisticRegression, LinearDiscriminantAnalysis, QuadraticDiscriminantAnalysis) using LeaveOneOut cross-validation (n_splits = 196). Multinomial logit variants: penalty ∈ {L2, none}, C ∈ {0.001, 0.01, 0.1, 1, 10, 100}, with and without StandardScaler pre-processing. Best variant (C=10 with StandardScaler) reaches 87/196 = 44.39% LOO. McNemar exact test on LDA-vs-best-logit LOO predictions via scipy.stats.binom (b=1, c=4): 2-sided p = 2 · P(X ≤ 1 | X ~ Bin(5, 0.5)) = 0.375. Chart generated via a one-off script reusing scripts/insights-charts/svg.ts + theme.ts primitives and rasterizing with sharp. No new file committed under scripts/insights-charts/.