Probabilistic Sharpe Ratio

From @jrai in the forums, a nice description with code of probabilistic sharpe. Has anyone written a version of this for Numerai? Of course on Numerai, we don’t use returns but instead correlation with the target but perhaps this idea can be used as a way to choose models that generalize much better out of sample. I think things like skewness, kurtosis will matter for your distribution of era correlations for the same reasons.

Can anyone show with cross validation whether it’s better to optimize for probabilistic sharpe than smart sharpe from @mdo?

here is some of the code (not by me):

May also be helpful in Numerai Quant


Better confidence intervals around a flawed metric is still a…flawed metric. What this adjustment is trying to get at is to maximize the upside variance / downside variance, which partial moments already do.


Adjusted Sharpe ratio was introduced by Pezier (2005) in:

Alexander, Carol and Sheedy, Elizabeth, eds. (2005) The professional risk managers’ handbook: a comprehensive guide to current theory and best practices. PRMIA Publications, New York & London. ISBN 9780976609704

Adjusted Sharpe Ratio adjusts for skewness and kurtosis by incorporating a penalty factor for negative skewness and excess kurtosis.

The formula is given in a different paper since i couldn’t access the book:

*NOTE: Carol Alexander is a personal friend/mentor

I calculate the adjusted sharpe ratio which adjusts for Numerai’s trading costs as well:

import numpy as np
import scipy
from scipy.stats import skew, kurtosis

def annual_sharpe(x):
    return ((np.mean(x) -0.010415154) /np.std(x)) * np.sqrt(12)

def adj_sharpe(x):
    return annual_sharpe(x) * (1 + ((skew(x) / 6) * annual_sharpe(x)) - ((kurtosis(x) - 3) / 24) * (annual_sharpe(x) ** 2))

You should pass validation scores to these functions since they are monthly; adjust to weekly compounding to use this on your live performance.