quantopian / empyrical

Common financial risk and performance metrics. Used by zipline and pyfolio.
https://quantopian.github.io/empyrical
Apache License 2.0
1.29k stars 403 forks source link

Remove Information Ratio #41

Closed twiecki closed 7 years ago

twiecki commented 7 years ago

Our Information Ratio calculation (https://github.com/quantopian/empyrical/blob/master/empyrical/stats.py#L590) is wrong as noted by @marketneutral: "The definition is wrong. You need a risk model to calc active risk to benchmark. And the benchmark look through to calc active return."

As this is still a ways off, we should rather delete it instead of having a wrong measure in here.

jbredeche commented 7 years ago

Cc @joshpayne - this probably means we remove from the full backtest screen?

twiecki commented 7 years ago

Yes.

cgdeboer commented 7 years ago

Perhaps the information_ratio could be renamed simple_information_ratio or excess_sharpe. Excess return / tracking error (which is what is represented now) can perhaps still be a reasonable proxy for an information ratio that uses a more correct "active risk" measure.

I imagine that @marketneutral is referring to the distinction between Active Risk and Tracking Error which is detailed in several places, but most notably the Qian and Hua paper listed below.

Active Risk and Information Ratio Journal of Investment Management, Vol. 2, No. 320-34 (Third Quarter 2004)

Any thoughts ?

twiecki commented 7 years ago

That seems reasonable to me.

marketneutral commented 7 years ago

In order to report a statistic on a strategy, it should be

The current form of information_ratio is neither (except in perhaps some very narrowly contrived situations). It should be removed or changed. In the absence of a full implementation vis a via Qian and Hua, we could make a simple change that would improve things:

The current definition is in the form:

adjusted_returns = strategy_returns - benchmark_returns
active_risk = std(adjusted_returns)
IR = adjusted_returns / active_risk

This could be changed to:

adjusted_returns = strategy_returns - beta * benchmark_returns
active_risk = std(adjusted_returns)
IR = adjusted_returns / active_risk

where beta is the beta as calculated elsewhere.

cgdeboer commented 7 years ago

Ok guys, how about this:

  1. add a new statistic called "information_ratio". We can describe in the doc string the assumptions with respect to the Active Risk component. Calculations would follow the logic that @marketneutral posted above.

  2. rename the existing statistic "excess_sharpe". A sound reason for keeping this in there is as follows: a lot of financial information vendors calculate information ratio using no risk model. (what starts with 'M', and rhymes with 'Orningstar'). It maybe helpful for folks (like me) to have a metric to use as a comparision to what vendors might display.

That ok, at least for now ?