Jack Preuveneers

← Projects

2025–2026Private

Vela Portfolio Optimiser

Venture returns are driven by a handful of extreme outcomes, which makes the central question of portfolio construction not expected return but the probability of holding any outlier at all. This tool answers it by simulation: correlated outcome sampling across portfolio size and stage mix, with an exhaustive search over allocations under real constraints.

Next.js · Python · NumPy · Cloud Functions

The question that actually matters

In a power-law return distribution the mean is a poor guide to anything. A fund's outcome is decided by whether it holds one of the few companies that return the fund, and the probability of holding zero of them is the risk that dominates every other risk.

So the design question is combinatorial rather than statistical in the usual sense: how many positions, at what stages, with what correlation between outcomes, gives an acceptable probability of at least k outliers.

The probability of holding zero outliers falling as portfolio size grows, decaying faster when company outcomes are independent than when they are correlated.ρ = 0.4, correlatedρ = 0, independentP(0)0portfolio sizeCorrelation decides whether more positions actually diversify.

Correlation is the hard part

If company outcomes were independent the arithmetic would be straightforward. They are not. Companies in the same sector, vintage and macro environment succeed and fail together, and that correlation structure determines whether adding positions genuinely diversifies or merely buys more copies of the same bet.

The correlation matrix is computed from public-market data: sector ETFs, regional baskets and founder baskets standing in for exposures that private markets do not report. A frequency-weighted calibration then sets the baseline pairwise correlation to a target average drawn from segment-level analysis, so the simulated world is anchored to a measured one rather than an assumed one.

Reproducing an existing published correlation result, to confirm the structure rather than merely assert it, is the part of this work aimed at publication.

Searching allocations exhaustively

Allocation is discrete, not continuous, because real mandates are. Weights move on a five per cent grid, every sector takes at least five per cent and at most twenty-five, a residual sector is pinned at five, and the weights must sum to one hundred.

Rather than hill-climbing toward a local optimum, the optimiser enumerates every valid combination by backtracking with pruning, evaluates return, volatility and Sharpe for each, and ranks the best hundred. Eight sectors produce 18,320 valid portfolios, which is small enough to search completely and large enough that intuition is no guide.

Sector allocations on a five per cent grid between a five per cent floor and a twenty-five per cent cap, enumerated exhaustively and ranked by Sharpe ratio.25% cap5% floorsector weights, 5% incrementsEight sectors give 18,320 valid portfolios.Every one is scored; the best 100 are ranked.

From simulation to real data

The models began on simulated distributions, which is the right way to understand a mechanism and the wrong way to make a decision. The current work moves the backend onto real private-market data, so the distributions being sampled are estimated from outcomes rather than assumed from a functional form.

Context

A web port of a desktop application, built so the research group can use it without a local Python environment: a Next.js frontend over a Python simulation backend on cloud functions. Built for Oliver Wyman via Vela Partners, and used to present quantitative strategy to institutional limited partners.