Introduction
Stochastic dominance screening uses distributional comparisons to identify assets or portfolios that are preferable for wide classes of investors, without assuming normal returns or specific utility functions. It’s a nonparametric, utility-consistent filter you can use to rule out investments that are dominated for all monotone or all monotone and concave utility functions.
Why does this matter to you? If you’re designing portfolios for risk-averse investors, mean-variance methods can miss distributional features like skewness and fat tails. Stochastic dominance asks a simpler question, what choices give higher expected utility for broad preference classes, and then enforces that in screening or optimization. How do you do it in practice, and what do the constraints look like in a numerical optimizer?
- Understand the meaning and implications of first-order and second-order stochastic dominance.
- Learn sample-based, nonparametric tests and linear programming formulations to screen assets.
- See how to add dominance constraints to portfolio optimization for risk-averse investors.
- Get practical implementation tips, including discretization, bootstrap testing, and sample-size guidance.
- Avoid common pitfalls like overfitting, mixing return and wealth scales, and ignoring transaction costs.
Key Takeaways
- First-order stochastic dominance (FSD) guarantees higher expected utility for all nondecreasing utilities, while second-order (SSD) guarantees it for all nondecreasing concave utilities, that is risk-averse investors.
- You can test dominance nonparametrically by comparing empirical CDFs and their integrals across a grid of thresholds, with bootstrapped p-values for sample uncertainty.
- Dominance constraints are implementable in solvers by discretizing thresholds and imposing linear inequalities, which leads to tractable linear or quadratic programs.
- Screening via dominance narrows candidate universes without assuming normal returns, but it requires careful handling of estimation error, transaction costs, and data frequency.
Understanding stochastic dominance
Stochastic dominance compares distributions directly. For two assets X and Y, FSD, written X FSD Y, holds if for every outcome level x the cumulative distribution function of X is less than or equal to that of Y. In words, X yields outcomes at least as large as Y across the entire support, with strict inequality somewhere. That implies every investor who prefers more wealth will prefer X.
SSD, written X SSD Y, is weaker. It allows some crossings of the CDFs, but requires the area under the CDF of X to be less than or equal to that of Y at every threshold. SSD captures all risk-averse investors who dislike variance in the sense of concave utilities. You should view FSD as a dominance for all increasing utilities, and SSD as dominance for all increasing concave utilities.
Formal definitions, without heavy math
- FSD: For all x, F_X(x) ≤ F_Y(x), with strict inequality for some x.
- SSD: For all x, ∫_{-∞}^x F_X(t) dt ≤ ∫_{-∞}^x F_Y(t) dt, with strict inequality for some x.
SSD implies that X has both higher mean and more desirable tail behavior for risk-averse investors, though it does not require a higher mean alone. You’ll often see SSD framed in terms of expected shortfall or partial integrals of CDF differences.
Screening assets with FSD and SSD
Screening is the simplest practical use case. You can run pairwise dominance tests across your candidate universe and eliminate assets that are dominated. The approach is nonparametric so you never assume returns are Gaussian or that utility follows a specific form.
Step-by-step screening workflow
- Collect return histories at a chosen frequency, typically daily or monthly depending on your horizon and liquidity needs. For long-horizon strategic screens use monthly returns; for trading-grade universes use daily returns.
- Decide on the outcome variable. You can use period returns, cumulative wealth over a horizon, or scenario outcomes from a model. Be consistent when comparing assets.
- Build empirical CDFs for each asset on a common support. Use a grid of thresholds that covers the range of observed returns, for example 100 quantiles or fixed increments of 0.5% for daily returns.
- For FSD, check CDF differences at every grid point. For SSD, compute cumulative integrals of the CDF differences across the grid.
- Use bootstrap resampling across time to estimate sampling uncertainty and compute p-values for rejecting the null of dominance. This guards against false positives when sample sizes are small.
Here is a concise numerical example you can follow right away.
Numerical example: comparing two simplified assets
Suppose you have discrete outcomes for two assets over a one-day horizon. Asset A outcomes and probabilities: outcomes = {-5%, 0%, 10%} with probs = {0.2, 0.5, 0.3}. Asset B outcomes: {-10%, 2%, 8%} with probs = {0.25, 0.25, 0.5}.
- Compute empirical CDFs. At x = -10% CDF_A = 0, CDF_B = 0.25.
- At x = -5% CDF_A = 0.2, CDF_B = 0.25. At x = 0% CDF_A = 0.7, CDF_B = 0.25. At x = 8% CDF_A = 0.7, CDF_B = 0.75. At x = 10% CDF_A = 1, CDF_B = 1.
- For FSD we check if CDF_A ≤ CDF_B at all points. It fails at x = 0% because 0.7 > 0.25, so A does not FSD B.
- For SSD compute integrated CDFs up to each point. Numerically summing discrete probabilities multiplied by thresholds shows whether the cumulative integrals for A are ≤ those for B. If they are everywhere, A SSD B.
This small example shows FSD is strict, but SSD may still hold or fail depending on the integrated values. You should implement the integrals numerically on a fine grid in real data.
Optimization with dominance constraints
Once you can test dominance pairwise, you can embed dominance as constraints in portfolio optimization. That allows you to construct portfolios that dominate a benchmark or avoid portfolios dominated by a candidate.
Linear constraint formulation
Use discretization of outcome thresholds to convert dominance conditions to linear inequalities. For a candidate portfolio w and benchmark b, discretize thresholds x_j for j=1..m. For SSD, the constraint is for every j:
sum_i w_i * S_i(x_j) <= B_S(x_j)
where S_i(x_j) is the empirical integral of the CDF of asset i up to x_j, and B_S is the benchmark integral. These are linear in the weights w_i. For FSD you use CDF values not integrals. Combine these with your objective, for example maximize expected return or Sharpe subject to these linear inequalities and budget and weight bounds.
Practical solver choices and tractability
With m thresholds and n assets, you get m linear constraints. Typical m values range from 50 to 200 depending on your sample size. That keeps problems small enough for linear programming solvers or quadratic programs if your objective is mean-variance. If you add cardinality constraints you’ll need mixed-integer programming and more compute time.
Bootstrap the constraints to control Type I error. Instead of hard constraints require that dominance holds at a chosen confidence level, for example 95 percent. Implement this by generating bootstrap samples of empirical CDFs and enforcing the constraint across quantiles of the bootstrap distribution. That yields a conservative, statistically-aware portfolio.
Connections to risk measures
SSD constraints imply improvements in expected shortfall at many tail probabilities. If portfolio A SSD portfolio B, then for many tail levels A will have equal or lower expected shortfall. This is useful because you can link SSD constraints to regulatory or internal risk limits based on Expected Shortfall or CVaR.
Practical implementation and testing
Implementation requires choices that materially affect results: data frequency, whether you use returns or terminal wealth, the discretization grid, and how you handle transaction costs. Make deliberate choices and test sensitivity.
Data choices and sample sizing
Monthly data reduces noise but smooths tails. Daily data captures tail events but induces serial correlation. If you use returns with serial correlation adjust resampling via block bootstrap. For screening you typically want at least 250 independent observations per asset. Below that you should be cautious and prefer wider bootstrap intervals.
Bootstrap testing and p-values
Bootstrap the time series to estimate sampling distributions of CDF differences and integrated differences. Compute a p-value for the hypothesis that A dominates B by testing whether the supremum of the positive part of the CDF difference is significantly above zero. Use studentized statistics when variance heteroskedasticity is present.
Transaction costs, turnover and implementation shortfall
Dominance tests that ignore transaction costs can recommend portfolios that are dominated net of costs. Always simulate trading costs in the outcome variable when you care about implementable dominance. That means subtracting estimated round-trip costs from outcomes before building CDFs.
Real-world examples and demonstration
Example 1, screening large cap tech: Suppose you screen $AAPL, $MSFT, and $TSLA over the last 3 years of daily returns. After adjusting for trading costs and using a grid of 100 thresholds, you find $AAPL does not FSD $TSLA because $TSLA has higher probabilities of large positive returns, but $AAPL SSD $MSFT because the integrated CDF for $AAPL is lower at most thresholds, indicating risk-averse preference for $AAPL over $MSFT despite similar means.
Example 2, enforcing SSD against a benchmark: You want a portfolio that SSD dominates $SPY over a 12-month horizon. Discretize monthly return thresholds at 120 points and add SSD linear constraints to a mean-variance objective. Solve the quadratic program and then bootstrap to ensure constraints hold at 95 percent confidence. The resulting portfolio will typically tilt toward assets with both higher right-tail mass and lower downside mass compared with $SPY.
These are simplified descriptions, but they show how screening and constrained optimization change portfolio shape compared with naive mean-variance. You’ll often see reduced weight on assets with fat left tails and increased weight on assets with favorable integrated CDFs.
Common Mistakes to Avoid
- Mixing return scales, for example comparing daily returns with monthly outcomes. Always use a consistent outcome definition, either per-period returns or horizon wealth.
- Using too fine a grid with too little data. Overfitting grid noise can cause false dominance. Use a reasonable grid such as 50 to 200 thresholds and bootstrap to assess robustness.
- Ignoring transaction costs and taxes. Include estimated round-trip costs in outcomes if you plan to implement trades.
- Assuming dominance is transitive without checking. SSD is not always transitive in finite samples; verify pairwise relationships rather than chaining blindly.
- Relying on single-sample tests without bootstrap. Small samples can make dominance look significant when it is not. Always quantify sampling uncertainty.
FAQ
Q: How many thresholds should I use when discretizing CDFs?
A: Use between 50 and 200 thresholds as a starting point depending on sample size. Fewer thresholds stabilize tests with small samples. More thresholds capture fine-grained differences with large samples. Always run sensitivity analysis.
Q: Does SSD imply lower volatility in the mean-variance sense?
A: Not necessarily. SSD is about integrated CDFs and expected utility for concave utilities. It often correlates with lower downside risk and lower expected shortfall, but it does not guarantee lower variance because variance is symmetric and SSD focuses on downside improvements.
Q: Can I use stochastic dominance on nonstationary return series?
A: You can, but be careful. Nonstationarity invalidates resampling that assumes identical distribution. Use rolling-window analysis, regime filters, or scenario-based outcomes to control for changing distributional properties.
Q: How do I account for estimation error in dominance-constrained optimization?
A: Bootstrap the empirical CDFs and enforce constraints at a chosen confidence level. Alternatively, use robust optimization techniques that add slack proportional to sampling variance. These approaches reduce false positives from noisy data.
Bottom Line
Stochastic dominance screening and dominance-constrained optimization let you build portfolios that are robust to parametric assumptions and consistent with broad classes of investor preferences. They give you a principled, nonparametric way to eliminate weak assets or to enforce risk-averse improvement relative to a benchmark.
Start by implementing pairwise nonparametric tests with bootstrapped p-values, choose a practical discretization grid, and then embed the linear dominance constraints into your optimizer. Test sensitivity to frequency, transaction costs, and sample length before deploying any production strategy. At the end of the day, stochastic dominance gives you a way to reason about distributions directly, and that can materially improve outcomes for risk-averse investors.



