Performance Attribution¶
The module empyrical.perf_attrib facilitates the attribution of performance to various risk factors.
- 
empyrical.perf_attrib.compute_exposures(positions, factor_loadings)¶
- Compute daily risk factor exposures. - Parameters
- positions: pd.Series
- A series of holdings as percentages indexed by date and ticker. - Examples: - dt ticker 2017-01-01 AAPL 0.417582 - TLT 0.010989 XOM 0.571429 - 2017-01-02 AAPL 0.202381
- TLT 0.535714 XOM 0.261905 
 
- factor_loadingspd.DataFrame
- Factor loadings for all days in the date range, with date and ticker as index, and factors as columns. - Example: - momentum reversal - dt ticker 2017-01-01 AAPL -1.592914 0.852830 - TLT 0.184864 0.895534 XOM 0.993160 1.149353 - 2017-01-02 AAPL -0.140009 -0.524952
- TLT -1.066978 0.185435 XOM -1.798401 0.761549 
 
 
- Returns
- risk_exposures_portfoliopd.DataFrame
- df indexed by datetime, with factors as columns - Example: - momentum reversal - dt 2017-01-01 -0.238655 0.077123 2017-01-02 0.821872 1.520515 
 
 
- 
empyrical.perf_attrib.perf_attrib(returns, positions, factor_returns, factor_loadings)¶
- Attributes the performance of a returns stream to a set of risk factors. - Performance attribution determines how much each risk factor, e.g., momentum, the technology sector, etc., contributed to total returns, as well as the daily exposure to each of the risk factors. The returns that can be attributed to one of the given risk factors are the common_returns, and the returns that _cannot_ be attributed to a risk factor are the specific_returns. The common_returns and specific_returns summed together will always equal the total returns. - Parameters
- returnspd.Series
- Returns for each day in the date range. - Example: - 2017-01-01 -0.017098 2017-01-02 0.002683 2017-01-03 -0.008669 
- positions: pd.Series
- Daily holdings in percentages, indexed by date. - Examples: - dt ticker 2017-01-01 AAPL 0.417582 - TLT 0.010989 XOM 0.571429 - 2017-01-02 AAPL 0.202381
- TLT 0.535714 XOM 0.261905 
 
- factor_returnspd.DataFrame
- Returns by factor, with date as index and factors as columns - Example: - momentum reversal - 2017-01-01 0.002779 -0.005453 2017-01-02 0.001096 0.010290 
- factor_loadingspd.DataFrame
- Factor loadings for all days in the date range, with date and ticker as index, and factors as columns. - Example: - momentum reversal - dt ticker 2017-01-01 AAPL -1.592914 0.852830 - TLT 0.184864 0.895534 XOM 0.993160 1.149353 - 2017-01-02 AAPL -0.140009 -0.524952
- TLT -1.066978 0.185435 XOM -1.798401 0.761549 
 
 
- Returns
- tuple of (risk_exposures_portfolio, perf_attribution)
- risk_exposures_portfoliopd.DataFrame
- df indexed by datetime, with factors as columns - Example: - momentum reversal - dt 2017-01-01 -0.238655 0.077123 2017-01-02 0.821872 1.520515 
- perf_attributionpd.DataFrame
- df with factors, common returns, and specific returns as columns, and datetimes as index - Example: - momentum reversal common_returns specific_returns - dt 2017-01-01 0.249087 0.935925 1.185012 1.185012 2017-01-02 -0.003194 -0.400786 -0.403980 -0.403980