How Challenging is CVaR Optimization?
This article presents the challenges of solving fully general CVaR optimization problems in Python.

Conditional Value-at-Risk (CVaR) optimization was originally introduced by Rockafellar and Uryasev (2000), where they showed that the problem can be solved for fully general Monte Carlo distributions using linear programming.
Hence, the starting point is the market representation from the next-generation investment framework, which is carefully presented in the Portfolio Construction and Risk Management book.
The initial approach to solving the problem is fairly straightforward, and there is an explanation of how to use non-uniform Sequential Entropy Pooling scenario probabilities in Section 6.2.1 of the Portfolio Construction and Risk Management book.
However, as shown in the accompanying code to Section 6.2.1, the original formulation is quite slow, being 20-75 times slower than fast algorithms.
The original CVaR optimization formulation also has a tendency to be unstable. Hence, it becomes practically infeasible for Resampled Portfolio Stacking optimization, which seems to be the preferred method for introducing fully general parameter uncertainty into portfolio optimization among institutional investors.
Faster CVaR optimization algorithms exist, but these are much more challenging to discover and implement to run in a stable way.
CVaR optimization benchmark problems
To show you what kind of CVaR problems we can solve in practice and at what speed, we have just created the CVaR optimization benchmark repository.
The problems become increasingly complex, ranging from efficient frontier optimization with uniform probabilities of long-only cash portfolios to derivatives portfolio optimization with transaction costs, absolute leverage constraint, and non-uniform probabilities.
In total, there are 24 CVaR optimization problems that you can try to solve, potentially assessing the speed and stability of your CVaR optimization algorithms.
For each of these 24 problem formulations, we sample 100 expected return vectors that you can use for resampled portfolio optimization with mean uncertainty.
The efficient frontier optimization problem can be solved using the open-source fortitudo.tech Python package, which you can see an example of for the first problems.

