Skip to content

Overfitting and Regularization: The Central Problem of ML

Data leakage, poor generalization, and fragile strategies are the same thing wearing different clothes. Regularization controls variance. It does not fix bad data, and it does not fix wanting the strategy to work.

6 of 8 ~25 min

Overfitting: The Central Problem

If you remember one thing from machine learning, remember this: a model that fits your training data perfectly is broken. Always.

Overfitting is mistaking memorization for learning. The model sees the training set, memorizes every example along with its noise, and reports excellent performance. The validation set tells a different story: the model fails on new data because it memorized instead of generalizing.

In quant finance, overfitting is the number one killer of strategies. Every “promising” backtest you have seen in a Medium post was almost certainly overfit. Every factor that worked for five years and then died was overfit. Every “secret” signal a vendor sells is likely overfit too, sometimes by them and more often by the customers who take it home and tune it. Read this one carefully, because nearly everything that follows about validation is a corollary of it.

The Core Tension

Every model has parameters. A linear regression has pp coefficients. A neural network has thousands or millions. A gradient boosting ensemble has hundreds of trees with thousands of leaves. More parameters means more flexibility, and more flexibility means the model can fit more patterns in the training data, including the patterns that are pure noise and will never repeat.

That produces three states. Too few parameters and the model cannot capture the true pattern, so training error is high and test error is high too: underfitting. Too many and the model captures the true pattern and memorizes the noise, so training error approaches zero while test error stays high: overfitting. Just right and the model captures the pattern while ignoring the noise, with moderate training error and low test error: generalization.

Your job is to find the point in the middle. You get there with regularization, cross-validation, and discipline.

First, Learn to Measure How Much You Overfit

The most diagnostic symptom of overfitting is a large gap between training and test performance. Concretely: train MSE of 0.001 (looks amazing, the model appears to have learned perfectly), test MSE of 0.10 (worse than guessing the mean), a test error 100 times the training error. What happened is that the model had enough flexibility to fit the training data exactly, including each example’s idiosyncratic noise. On new data the noise patterns differ, so its confident predictions are systematically wrong.

Turn that intuition into a number you can watch:

Gap Ratio=Test ErrorTrain Error\text{Gap Ratio} = \frac{\text{Test Error}}{\text{Train Error}}

A healthy model sits in [1.1,1.5][1.1, 1.5]. Above 2 is overfit. Above 5 is severely overfit. And a gap ratio below 1.1 with high absolute error puts you on the other side entirely: underfitting, with a model too simple to capture even what is in the training data.

Sharpe ratios have the matching version:

Performance Retention=Out-of-Sample SharpeIn-Sample Sharpe\text{Performance Retention} = \frac{\text{Out-of-Sample Sharpe}}{\text{In-Sample Sharpe}}

Retention in [0.5,0.8][0.5, 0.8] is normal, because models always lose something out-of-sample. Below 0.3 indicates severe overfitting. Above 1.0 should worry you more, not less: out-of-sample beating in-sample usually means lookahead bias.

Track both ratios for every model you train. If retention comes in below 0.3, throw the model away and start over rather than trying to rescue it.

The Bias-Variance Decomposition

The formal version of those heuristics is this. For squared error, expected test error decomposes into three components:

E[(y−f^(x))2]=Bias2[f^(x)]+Var[f^(x)]+σ2\mathbb{E}[(y - \hat{f}(x))^2] = \text{Bias}^2[\hat{f}(x)] + \text{Var}[\hat{f}(x)] + \sigma^2

where σ2\sigma^2 is irreducible noise, the variance of yy around the true function f(x)f(x). No model reduces it. It is the floor.

The other two terms are yours. Bias² is how wrong the model is on average: a linear model fitting a quadratic has high bias, because it cannot represent the true function and will be systematically wrong even with infinite training data. Variance is how much the model would change if trained on different data: a 100-degree polynomial fitting 30 points has low bias (it can fit anything) and high variance (swap the dataset and it looks nothing alike).

The trade-off is that simpler models have high bias and low variance while complex models have low bias and high variance, and the sweet spot minimizes bias² plus variance. Note this is not the same as minimizing training error. Training error measures fit, not generalization.

(Hastie, Tibshirani, Friedman, The Elements of Statistical Learning, 2nd ed., Ch. 7. ISBN 978-0387848570.)

Draw it and it gets clearer. Imagine 30 data points (xi,yi)(x_i, y_i) where y=x2+noisey = x^2 + \text{noise}, and fit three models. A linear fit (y=ax+by = ax + b) misses the curvature entirely and predicts y≈0y \approx 0 for ∣x∣>1|x| > 1; its test error is high because the model itself is wrong, and that is high bias. A 100-degree polynomial snakes through every single point with essentially zero training error, but the curve between the points is wild, carrying 99 inflection points whose only job is hitting each example exactly; its test error is catastrophic, and that is high variance. A 3-degree polynomial (y=a+bx+cx2+dx3y = a + bx + cx^2 + dx^3) captures the curvature with just enough complexity, misses some of the noise, and has far lower test error than either extreme.

The 100-degree polynomial learned the noise. The linear model ignored the signal. The cubic got the balance right. And most overfitting in practice is a researcher choosing the 100-degree polynomial because it looked better on the training plot.

Two Plots That Tell You Which Side You Are On

The learning curve plots training and validation error as functions of training set size. Both high and converging to similar values is the underfitting signature: more data will not help, the model is too simple. Training error far below validation error, with the gap narrowing as you add data, is the overfitting signature: the model still has room to learn signal from data it has not seen. Training error slightly below validation error, both low, small gap: healthy fit.

The validation curve plots training and validation error as functions of a single hyperparameter, such as regularization strength. For a well-behaved hyperparameter both curves should be U-shaped, with the optimum where they converge.

These are the cheapest diagnostics in ML and the most informative. Make both for every model you train.

Five Costumes Overfitting Wears

Parameter explosion is the blunt version: too many parameters relative to data points. The classic setup is 1000 features, 500 training samples, and an unregularized linear regression, where the design matrix XTXX^T X is rank-deficient or nearly so, the OLS solution is unstable, and the model has nothing to fit but noise. The rule of thumb is at least 10 samples per parameter, and that is for linear models; for flexible models like neural networks and boosted trees you want 100 or more.

Training too long is the second. Keep training a neural network or boosting model until the training loss hits zero and you have memorized the training set, while validation loss probably stopped improving 50 epochs earlier. Early stopping, halting when validation loss stops decreasing, is the cheapest regularization you will ever find.

Hyperparameter over-tuning is the third, and it disguises itself as real work. Try 1000 combinations, evaluate each on the validation set, report the best: the best one is overfit to the validation set, which is now part of your training process, and your reported performance is biased upward. The fix is a third set, the test set, touched once at the very end, or nested cross-validation (see the cross-validation article).

Feature selection bias is the fourth and the most defensible-sounding. You have 500 candidate features, compute each one’s correlation with the target on the training set, take the top 50, train on those, and evaluate on a test set that looks great. The problem is that the top 50 were chosen using training-set performance, so some of them correlate with the target purely by chance; the act of selection consumed statistical significance, and your test-set evaluation never accounted for that spend. The fix is to select features inside the cross-validation loop, so each fold selects on its own training data only.

Lookahead bias is the fifth and the most lethal: use tomorrow’s data to predict today and the model is unrealistically good because it has the answer. It is a form of overfitting because the model is fitting a future it will never have in deployment. Our article on data leakage goes deeper, but the sentence is worth repeating on its own: lookahead bias is overfitting.

The Regularization Toolkit

Regularization is the set of techniques that prevent overfitting by penalizing model complexity. There are many; these seven you must know.

The foundation is L2 regularization (Ridge), which adds a penalty on the squared magnitude of the coefficients:

Lridge=Ldata+λ∑jβj2\mathcal{L}_{\text{ridge}} = \mathcal{L}_{\text{data}} + \lambda \sum_j \beta_j^2

The penalty shrinks all coefficients toward zero, and the solution has a closed form:

β^ridge=(XTX+λI)−1XTy\hat{\beta}_{\text{ridge}} = (X^T X + \lambda I)^{-1} X^T y

It shrinks coefficients without driving them to exactly zero, so every feature stays in the model with reduced influence. That is what you want when you believe all features contribute something. λ\lambda controls the strength and is tuned by cross-validation.

L1 regularization (Lasso) swaps in an absolute-value penalty:

Llasso=Ldata+λ∑j∣βj∣\mathcal{L}_{\text{lasso}} = \mathcal{L}_{\text{data}} + \lambda \sum_j |\beta_j|

L1 has a property L2 lacks: it drives some coefficients to exactly zero, performing automatic feature selection and producing a sparse model that uses only a subset of features. Use it when you suspect most features are noise. The cost is that when features are correlated, lasso tends to pick one and ignore the rest, which makes it unstable.

Elastic Net adds both together:

Lelastic=Ldata+λ1∑j∣βj∣+λ2∑jβj2\mathcal{L}_{\text{elastic}} = \mathcal{L}_{\text{data}} + \lambda_1 \sum_j |\beta_j| + \lambda_2 \sum_j \beta_j^2

Sparsity from L1, stability from L2, and the standard compromise between the two (it is ElasticNet in sklearn). When features are visibly correlated, it usually holds up better than pure L1 or pure L2.

Those three are for linear models. On the neural network side the workhorse is dropout: during training, randomly zero out 20–50% of activations in each layer, which forces the network not to lean on any single neuron, since every neuron must be useful in several contexts. At test time dropout is off and all neurons are used. The effect resembles training an ensemble of networks that share parameters, at essentially zero computational cost.

Early stopping works across model families and asks the least of you: stop when validation loss stops improving. No penalty term, no extra hyperparameters beyond patience (how many epochs to wait). Boosting models implement it directly and every neural network framework supports it. Use it.

Data augmentation takes a different angle: if you cannot get more data, manufacture some. Rotations, flips, crops, and color jitter for images. Paraphrases, back-translation, and synonym replacement for text. Feature noise and mixup (linear combinations of example pairs) for tabular data. It works because the model sees a wider distribution and can no longer memorize individual examples, and it is close to free.

The last one is the simplest and the most frequently skipped: reduce model capacity. Fewer parameters, shallower network, fewer features. If your model is overfitting, the first thing to try is making it smaller. Most beginners reflexively reach for more regularization. The right reflex is less model.

(Goodfellow, Bengio, Courville, Deep Learning, Ch. 7. ISBN 978-0262035613.)

All of These Are the Same Bet

Every regularization method shares one sentence: given two models with equal training loss, prefer the simpler one. That is Occam’s razor formalized. The simpler model is more likely to be capturing true signal rather than noise, it has fewer degrees of freedom available for memorization, and it will generalize better.

Why does the bet pay off? Because the world is sparse. The true function generating your data almost certainly has far fewer effective parameters than the model you are fitting, and the rest is noise. Regularization is the wager that your model should look more like the world and less like your particular sample of data.

There is a Bayesian statement of the same idea, and it is worth knowing because it tells you when regularization fails. A prior distribution over parameters encodes beliefs about how large they should be: L2 corresponds to a Gaussian prior on the weights, L1 to a Laplace prior, and maximum likelihood is MAP estimation under a uniform prior. This is not a theoretical nicety. It says regularization is prior knowledge, which works when the prior is correct or at least reasonable and hurts when the prior is badly wrong. Ridge assumes coefficients are small; if you genuinely have a strong signal with a coefficient of 100, ridge shrinks it toward zero and you pay for that directly in performance.

For quant data, the prior that “most coefficients are small and a few are large” is usually reasonable: markets are noisy, most features have weak effects, and the value comes from a few strong signals combined with many weak ones. Ridge-like priors match that shape, and that is the real reason they work in finance.

A word on where these tools came from, since the names sound like they arrived from completely different decades. Ridge regression is Hoerl & Kennard (1970) introducing L2 regularization to linear regression. Lasso is Tibshirani (1996) introducing L1 with sparsity. Weight decay in neural networks is equivalent to L2 and has been in use since the 1980s. Dropout (Hinton et al., 2012) was the modern breakthrough for neural network regularization. Early stopping was known informally for decades and formalized in the 1990s. Batch normalization (Ioffe & Szegedy, 2015) contributes mild regularization as a side effect. Regularization has been reinvented several times across statistics and ML, each reinvention a real contribution, and none of them changed the underlying fact: regularization trades training fit for generalization, and the exchange rate is set by the bias-variance decomposition.

How Much Regularization Depends on How Much Data

The optimal regularization strength scales with sample size. Roughly: the noisier the data and the larger the feature count relative to the sample count, the more regularization you need, and as nn grows the optimal strength should come down. The same direction holds for the other tools, with dropout rates going higher on smaller datasets and weight decay going lower as the training set grows. These are qualitative relationships. Fix the actual values by cross-validation rather than plugging into a closed-form expression you half-remember.

This also explains why transfer learning works. A model pre-trained on a huge dataset of images or text needs less regularization when fine-tuned on a small one, because the pre-training already acted as a strong regularizer, which is to say an informative prior.

For quant ML, where datasets are small compared to image or text corpora, regularization should be aggressive. A dropout rate of 0.5 on a 10,000-example dataset is reasonable. The same dropout on a 10,000,000-example dataset is wasted capacity.

One thing should be stated plainly here: regularization substitutes for data, and it substitutes imperfectly. With 100 examples and 10 features, regularization helps. With 10 examples and 10 features, no amount of it will save you, and what you need is more data. The effective sample size regularization buys you is bounded; the amount more data buys you is not. So when you are choosing between “fit a model with more regularization on the data I have” and “get more data and fit a less-regularized model,” usually take the second.

In quant, “more data” typically means longer history or higher frequency. Both have ceilings, since markets change and microstructure effects dominate at very high frequencies. But where it is possible, more data is the cleanest fix for overfitting there is.

Information Criteria: AIC and BIC

For parametric models there is another regularization route: trade fit against complexity with a closed-form penalty.

AIC=−2log⁡L+2k\text{AIC} = -2 \log L + 2k BIC=−2log⁡L+klog⁡n\text{BIC} = -2 \log L + k \log n

where LL is the likelihood, kk is the number of parameters, and nn is the sample size. Both penalize complexity, with BIC penalizing more heavily as nn grows. Their targets actually differ, since AIC aims at out-of-sample prediction error while BIC aims at the marginal likelihood under a particular prior, but for selection between nested models they usually agree.

AIC and BIC are less common in modern ML, where cross-validation dominates, but they remain useful for quick model selection, especially in econometrics. The limitation is that they require models fit by maximum likelihood, which is straightforward for linear and generalized linear models and awkward for neural networks or boosting ensembles.

Four Situations Where Regularization Cannot Help

Recognizing these saves months.

The signal-to-noise ratio is too low is the first. If your target has R2=0.001R^2 = 0.001 in the population, no model will find a reliable signal, and regularization will shrink your coefficients toward zero and leave you underfitting. The problem is not regularization; there is nothing to find. The features are uninformative is the second: if all 500 of your features are noise, regularization sets every coefficient to zero, which is correct behavior rather than overfitting. The labels are wrong is the third: if 30% of your training labels are mislabeled, perhaps due to corporate actions you never adjusted for, no model learns the true pattern and regularization only makes things worse. The relationship is non-stationary is the fourth: if the link between features and target was stable in 2010-2015 and different by 2020, no model trained on the older data works in 2020, regularization is beside the point, and the data is the problem.

In all four cases the right response is the same: fix the underlying issue with better data, cleaner labels, or regime-aware modeling. Regularization is not a substitute for any of them.

The Myth of “Smart” Regularization

In the early 2010s a wave of papers proposed “smart” regularization: learn the regularization strength per feature, adapt the penalty during training, use meta-learning to choose the schedule. Most of that was overfit to specific benchmarks.

The honest version is that simple regularization (L2, dropout, early stopping) with a properly chosen strength performs about as well as anything fancy. The hyperparameters that matter are the ones you already know, learning rate, regularization strength, and model capacity, chosen by cross-validation.

Fancy regularization methods buy you something marginal. Honest validation buys you an improvement in expected out-of-sample performance of an entirely different order. That comparison is not rhetoric; it decides where your hours should go, which is into validation.

What Quant Researchers Have to Dodge on Top

Everything above is general ML. Quant adds a set of overfitting risks that do not appear in standard ML benchmarks at all.

Publication bias comes first. Published factors are survivors: you see the winners (value, momentum, quality) and not the 1,000 losers that never worked. Try to replicate published factors on out-of-sample data and a substantial share of them will fail, not because the original researchers were wrong but because you only ever saw the ones that worked in the original sample.

Multiple testing comes second, and it is the same mechanism from the inside. Try 1000 strategies on historical data and report the best one: of course it works on backtest, because you ran 1000 trials and the probability that at least one looked great by chance is close to 1. The Deflated Sharpe Ratio (López de Prado, 2014) exists for this, adjusting for the number of trials, the skewness and kurtosis of returns, and the correlation between trials. One common misreading is worth correcting here: the DSR outputs a probability, namely the chance of observing a Sharpe that high under a null of zero true skill, not a discounted Sharpe number. So the right phrasing is not “a Sharpe of 2.0 across 50 strategies is worth a deflated Sharpe of 0.5”; it is “after 50 trials, a Sharpe of 2.0 often is not even significant.” The headline number is what gets you the job. The DSR is what determines whether you make money.

If you need the more general multiple-testing correction, three standard tools exist. Bonferroni divides your significance threshold by the number of trials, which is conservative and assumes independent tests. Holm-Bonferroni is less conservative and adjusts thresholds sequentially. Benjamini-Hochberg (FDR) controls the false discovery rate rather than the family-wise error rate, which is often more appropriate when what you care about is the proportion of false positives among your discoveries. For Sharpe ratios specifically, the Deflated Sharpe Ratio is the right correction.

In-sample tuning comes third: choosing hyperparameters that maximize backtest Sharpe is overfitting. The hyperparameters that worked best on your backtest are not the ones that will work best going forward. They are the ones that best fit the specific historical period you happened to use.

Regime change comes fourth. Your model learned 2010-2019 patterns, the market in 2022 is different, and the model has no idea. Retraining on rolling windows helps. Regime features (volatility, trend strength, sector rotation) help. The underlying fact that patterns shift does not go away.

(López de Prado, M., Advances in Financial Machine Learning, Ch. 7–8. ISBN 978-1119482086.)

Four More Leaks That Do Not Look Like Bugs

Those were overfitting risks. These are leakage channels, and they do not exist in other domains.

Survivorship bias. Your dataset includes only stocks that exist today; the bankrupt and the delisted are absent, and their absence distorts both the feature distribution and the target distribution. The fix is a point-in-time database that includes delisted names. Most free datasets are survivorship-biased, so verify before you use one.

Corporate actions. Splits, mergers, spinoffs, dividends. Without adjustment your “price” feature is not the same object across time, and any meaningful analysis needs a split-adjusted price series.

Reporting lags. Fundamental data (earnings, balance sheet) is reported late. Q2 earnings reported in August apply to the period ending June 30, so using the reported value as a feature for predicting June returns means using the future. Lag fundamentals by at least the reporting lag.

Indicator definitions that changed. Many technical indicators and factor definitions were revised over the years. Backtest “RSI(14) on the S&P 500” with a 1980s-vintage calculation and you may not be using today’s standard formula. The fix is to specify the formula precisely and hold it fixed across the whole backtest.

None of these are “bugs” in the traditional sense. They are properties of the data that demand careful handling, and most published quant research trips over at least one of them. Be skeptical of off-the-shelf backtests.

One Dissection: What an Overfit Backtest Looks Like

To make all of this concrete, walk through a fictional but entirely realistic example. The researcher, call her Maya, is trying to predict 5-day forward returns for US equities from 2000 to 2023.

Step one, data assembly. Maya downloads daily prices for the Russell 3000 from 2000 to 2023 and computes 87 features: momentum over multiple horizons, value ratios, technical indicators, sector dummies. Target: 5-day forward return. Nothing wrong so far.

Step two, train/test split. Maya splits 70/30 randomly. Train is 2000-2016 plus a random 30% of 2017-2023; test is 2017-2023 minus whatever went to train. Already overfit: the random split leaks the future into train.

Step three, feature selection. Maya computes each feature’s correlation with the target on the training set and picks the top 30. Overfit again: feature selection on training data, outside any CV loop.

Step four, model training. Maya trains an XGBoost model, tuning hyperparameters via 5-fold cross-validation on the training set, trying 200 combinations of learning rate, depth, and min_child_weight. Borderline overfit: too many trials on the same data.

Step five, evaluation. Test Sharpe 2.8. Hit rate 57%. Information Coefficient 0.08. Maya is ecstatic.

Step six, reality check. Maya deploys into a paper trading account for six months. Live Sharpe 0.4. IC 0.01. Hit rate 51%.

What went wrong? Everything. The random split leaked future information, feature selection used the entire training set, and hyperparameter tuning burned 200 trials. The reported performance was overfit by a factor of 5 to 10. Notice that nothing was wrong with Maya’s algorithm: XGBoost is a good tool, 5-fold CV is good practice, and 87 features is not many. The process was wrong.

So the fix is not a different algorithm. It is discipline: sort by date and split walk-forward (train 2000-2015, validation 2016-2018, test 2019-2023), touching the test set once; inside each walk-forward step, do feature selection on that step’s training data only; cap hyperparameter trials around 20 and use Bayesian optimization or random search; and after deployment, track live performance and update the model on a rolling basis.

That is more work and yields smaller headline numbers. The smaller numbers are real.

The Decay Curve: Overfitting Exposes Itself Over Time

Maya’s model gave itself away within six months of live trading, and that is not a coincidence. Overfitting has a fairly consistent temporal signature, which quant researchers watch through the out-of-sample decay curve: how fast does performance degrade the longer the model is held out?

A rough reference looks like this. A healthy model retains roughly 70–90% of in-sample Sharpe in out-of-sample year 1, 60–80% in year 2, 50–70% in year 3, and 30–50% by year 5. An overfit model drops to 30–50% in year 1, 10–20% in year 2, and near zero in year 3. Treat these as order-of-magnitude heuristics rather than measured constants; the actual numbers vary with strategy type, asset class, and sample period, and you should re-estimate them on your own data.

The curve is sometimes called the “Sharpe half-life”: how long until out-of-sample performance is half of in-sample. A healthy model’s half-life is measured in years. An overfit model’s is measured in months.

It also explains why 6 to 12 months of live paper trading before committing capital is standard practice: the decay curve reveals its full shape over that window. A strategy that looks great in backtest with a three-month half-life will expose itself during that period, and that is far cheaper than finding out after the capital is committed.

What Production Looks Like

In production, overfitting is not blocked by any single technique. It is blocked by a process:

  1. Hold-out test sets that are truly out-of-sample in time, not randomly carved.
  2. Walk-forward retraining on a regular cadence: weekly, monthly, quarterly.
  3. Champion-challenger frameworks where new models deploy alongside existing ones and only get promoted after outperformance is verified.
  4. Deflated performance metrics that account for the number of strategies tested.
  5. Live paper trading for a fixed evaluation period before committing capital.
  6. Position sizing that scales with model confidence, where that confidence is itself estimated honestly.

Those six are essentially the whole of production discipline, and all of them are defending against the same thing. The fancy models are a small part of the system. The discipline is the system.

The Checklist Before You Ship

Before you trust a backtest:

  • Split data into train / validation / test (60/20/20)
  • Train on train, tune on validation, evaluate on test: exactly once
  • Use walk-forward analysis (not random splits for time series)
  • Compute the Deflated Sharpe Ratio (adjust for multiple testing)
  • Out-of-sample Sharpe should be >50% of in-sample Sharpe, ideally >70%
  • If out-of-sample is <30% of in-sample, you have overfit
  • Re-validate after any change to features, hyperparameters, or training window
  • If you touch the test set more than once, it is no longer a test set

(Bishop, Pattern Recognition and Machine Learning, Ch. 3, 5. ISBN 978-0387310732.)

Finally: This Is Not Purely a Technical Problem

Most ML tutorials treat overfitting as a technical problem with technical solutions: regularize harder, get more data, use cross-validation. All correct, and all incomplete.

In quant research, overfitting is also a psychological problem. The researcher wants the strategy to work. So they rationalize touching the test set “just one more time.” They add features that happened to work last quarter. They keep training until the metrics look right. The discipline of honest validation means fighting those impulses daily, and no technical measure fights them for you.

This is also why “validation” in quant is not the same word as “validation” in academic ML. In academic ML it means testing on a held-out set from the same distribution. In quant it means estimating performance under live trading, with regime changes, transaction costs, market impact, and capacity constraints all accounted for. The first is necessary and not sufficient. The second adds one more clause: estimate the gap between backtest and live, discount the backtest Sharpe accordingly, and trust only what survives multiple out-of-sample periods.

That is a much higher bar, and most research fails it. The research that clears it is rare, and valuable for exactly that reason. The cure was never a cleverer algorithm. It is the willingness to abandon ideas that do not survive honest validation, which is a personal skill rather than a technical one, and the hardest part of this job to teach.

(Hastie, Tibshirani, Friedman, The Elements of Statistical Learning, 2nd ed., Ch. 3, 7. ISBN 978-0387848570.)

(López de Prado, M., Advances in Financial Machine Learning, Ch. 7–8. ISBN 978-1119482086.)

References

  • Hastie, Tibshirani, Friedman, The Elements of Statistical Learning, 2nd ed., Ch. 3, 7. ISBN 978-0387848570.
  • Goodfellow, I., Bengio, Y., Courville, A., Deep Learning, Ch. 7. ISBN 978-0262035613.
  • Bishop, C. M., Pattern Recognition and Machine Learning, Ch. 3, 5. ISBN 978-0387310732.
  • López de Prado, M., Advances in Financial Machine Learning, Ch. 7–8. ISBN 978-1119482086.
  • López de Prado, M. (2014). “The Deflated Sharpe Ratio: Correcting for Selection Bias, Backtest Overfitting and Non-Normality.” Full derivation in AFML §14.7.3.