ML 42: Stacking Learns to Pick the Best Model, Given Honest Predictions

Disclosure: this post was written with the assistance of an AI system (Claude), which wrote the analysis code, ran the experiments and drafted the text. The topic, the constraints, the data choices and the final review are the author’s. Four base models on a simulated task, 100 to 3,000 training rows, and a logistic meta-model on their probabilities. Fitted on in-sample predictions it gave 1-NN a weight of 13 and reproduced its accuracy exactly (0....

October 13, 2026 · 9 min · Jongha Jeon

ML 43: Naive Bayes Counts Correlated Evidence Twice, and Only Its Probabilities Notice

Disclosure: this post was written with the assistance of an AI system (Claude), which wrote the analysis code, ran the experiments and drafted the text. The topic, the constraints, the data choices and the final review are the author’s. Gaussian naive Bayes on the breast-cancer data, whose features include radius, perimeter and area of the same nuclei, scored accuracy 0.940 against logistic regression’s 0.981, with log loss 0.611 against 0.073; 67% of its errors came with confidence above 0....

October 13, 2026 · 9 min · Jongha Jeon

ML 44: Cross-Validation Folds Are Not Independent Samples, and the t-Test Assumes They Are

Disclosure: this post was written with the assistance of an AI system (Claude), which wrote the analysis code, ran the experiments and drafted the text. The topic, the constraints, the data choices and the final review are the author’s. Two algorithms with exactly equal expected accuracy, by symmetry, compared on 400 data sets of 300 rows. The paired t-test on ten cross-validation folds declared a difference at the 5% level in 14....

October 13, 2026 · 8 min · Jongha Jeon

ML 45: A Test Set Answers Honestly Only the First Time

Disclosure: this post was written with the assistance of an AI system (Claude), which wrote the analysis code, ran the experiments and drafted the text. The topic, the constraints, the data choices and the final review are the author’s. Three ways to wear out a holdout without training on it. On a leaderboard of 1,000 coin-flip labels, the majority vote of random guesses that scored above 0.5 reached 0.713 after 1,000 submissions and 0....

October 13, 2026 · 9 min · Jongha Jeon

ML 46: The Right Threshold Is a Cost Ratio, If the Probabilities Are Calibrated

Disclosure: this post was written with the assistance of an AI system (Claude), which wrote the analysis code, ran the experiments and drafted the text. The topic, the constraints, the data choices and the final review are the author’s. Episode 4’s simulated task with a miss costing r times a false alarm. At r = 10, flagging at 0.5 cost 1.44 to 2.00 per case, against 0.497 for flagging every case....

October 13, 2026 · 9 min · Jongha Jeon

ML 47: The Model With the Best AUC Was Never the Best When Misses Cost Ten Times More

Disclosure: this post was written with the assistance of an AI system (Claude), which wrote the analysis code, ran the experiments and drafted the text. The topic, the constraints, the data choices and the final review are the author’s. Five models on a simulated task, ten training sets each. A random forest had the highest AUC every time (0.754) and the lowest cost every time when both errors cost the same....

October 13, 2026 · 9 min · Jongha Jeon

ML 48: What a Model Relies On Is Not What to Change

Disclosure: this post was written with the assistance of an AI system (Claude), which wrote the analysis code, ran the experiments and drafted the text. The topic, the constraints, the data choices and the final review are the author’s. A simulated system with an unmeasured common cause, a habit it drives, a treatment that raises the outcome’s risk, and a test result produced by the outcome. Boosted trees put 0.45 of permutation importance on the test result, and raising it by one standard deviation in the model’s input raised the predicted risk by 0....

October 13, 2026 · 8 min · Jongha Jeon

ML 49: Target the Effect, Not the Risk

Disclosure: this post was written with the assistance of an AI system (Claude), which wrote the analysis code, ran the experiments and drafted the text. The topic, the constraints, the data choices and the final review are the author’s. A simulated retention offer, a randomised trial behind it and a budget for 20% of customers. Offering it to the highest predicted churners prevented 20.1 to 22.0 churns per 1,000 customers, about what random targeting prevented (21....

October 13, 2026 · 9 min · Jongha Jeon

ML 50: A Rule That Chooses Its Own Data Learns Its Own Choices

Disclosure: this post was written with the assistance of an AI system (Claude), which wrote the analysis code, ran the experiments and drafted the text. The topic, the constraints, the data choices and the final review are the author’s. Two simulated districts, ten inspections a day for a year, violations found only where inspectors go; district B’s true rate 20% above A’s. Sending inspectors where more violations had been found put every visit in one district by the year’s end in all 500 runs, the lower-rate district in 46%....

October 13, 2026 · 9 min · Jongha Jeon

Two Thirds of the Move Happens Before the Headline

Disclosure: this post was written with the assistance of an AI system (Claude), which wrote the analysis code, ran the experiments and drafted the text. The topic, the constraints, the data choices and the final review are the author’s. ‘It’s already priced in’ and ‘buy the rumour, sell the news’ are two of the oldest things anyone says about markets, and both put the price move before the headline rather than after it....

August 19, 2026 · 14 min · Jongha Jeon