numeraire.core.stats.return_loss#

numeraire.core.stats.return_loss(candidate: NDArray[float64], benchmark: NDArray[float64], *, ddof: int = 0) float[source]#

DGU (2009) eq. 17 return-loss of candidate relative to benchmark.

The additional expected return the benchmark would earn on its own risk-return line at the candidate’s risk, minus the candidate’s own mean: (mean_bench / std_bench) * std_cand - mean_cand. Positive => the candidate underperforms the benchmark’s Sharpe trade-off (the DGU sign convention). Both are aligned per-period return series; NaNs are dropped pairwise. ddof=0 matches DGU’s MLE moments.