06 — Benchmark-Relative Portfolio Management¶
Learning objectives¶
Calculate active weights and tracking error from a covariance matrix; calculate the realized information ratio from a return series; connect information coefficient, breadth, and the transfer coefficient through the Fundamental Law of Active Management.
Free learning pack¶
- CFA Institute, Analysis of Active Portfolio Management https://www.cfainstitute.org/insights/professional-learning/refresher-readings/2026/analysis-active-portfolio-management
- Information ratio — Wikipedia https://en.wikipedia.org/wiki/Information_ratio
- Fundamental Law of Active Management — Financial Edge Training https://www.fe.training/free-resources/portfolio-management/fundamental-law-of-active-management/
reference/concepts/tracking_error.md,information_ratio.md,information_coefficient.md,fundamental_law.md
Do not search for more material until these are insufficient.
PREDICT¶
A fund holds four names, two overweight and two underweight versus its benchmark by the same amount. Without calculating: does total portfolio volatility have to be higher than the benchmark's just because tracking error is nonzero?
import numpy as np
portfolio = np.array([.30, .25, .25, .20])
benchmark = np.array([.25, .25, .30, .20])
cov = np.array([
[.040, .010, .005, .002],
[.010, .020, .004, .001],
[.005, .004, .010, .003],
[.002, .001, .003, .030],
])
# MANUAL FIRST:
# compute active weights, then tracking error, by hand.
active = None
tracking_error_value = None
print(active, tracking_error_value)
PREDICT (information ratio)¶
Two managers both beat their benchmark by 2% on average per year. Manager A's active return bounces between +8% and -4% month to month; Manager B's stays between +3% and +1%. Without calculating, which manager has the higher information ratio?
Formula (realized information ratio)¶
active_returns_t = portfolio_return_t - benchmark_return_t
IR = mean(active_returns) / std(active_returns) * sqrt(periods_per_year)
portfolio_returns = [0.03, 0.05, 0.02]
benchmark_returns = [0.01, 0.02, 0.01]
# MANUAL FIRST:
# compute the active return each period, then the (unannualized,
# periods_per_year=1) information ratio by hand.
information_ratio_value = None
print(information_ratio_value)
PREDICT (Fundamental Law)¶
A manager has modest skill — an information coefficient of just 0.05 — but applies it across 400 independent bets a year (a broad, diversified stock-picking process). Another manager has excellent skill (IC = 0.15) but makes only 4 big, concentrated bets a year. Without calculating, whose expected information ratio is higher?
Formula (Fundamental Law of Active Management)¶
IR ~= IC * sqrt(BR) * TC
IC: information coefficient (skill) · BR: breadth (independent bets)
· TC: transfer coefficient (1.0 = unconstrained)
# MANUAL FIRST:
# compute the expected IR for each manager above (assume TC=1.0 for both)
# and confirm your prediction.
manager_a_ic, manager_a_breadth = 0.05, 400
manager_b_ic, manager_b_breadth = 0.15, 4
ir_a = None
ir_b = None
print(ir_a, ir_b)
Experiment¶
Manager A's 400 "independent" bets are actually just 20 real sector
calls, each expressed through 20 highly correlated single-name
positions (average pairwise correlation within a sector call ~0.6). Use
effective_breadth(400, average_correlation=0.6) to find Manager A's
true breadth, then recompute their expected IR. Does Manager A still
beat Manager B?
Reference¶
reference/concepts/tracking_error.md
reference/concepts/information_ratio.md
reference/concepts/information_coefficient.md
reference/concepts/fundamental_law.md
Promote¶
Use src/pm/active.py (active_weights, tracking_error,
information_ratio, information_coefficient, effective_breadth,
transfer_coefficient, fundamental_law_ir) only after your own
implementation.
Test¶
pytest tests/test_active.py
ORAL CHECK¶
Explain to a PM why two managers with the same average active return can have very different information ratios, and why a manager's effective breadth can be far smaller than their raw bet count if those bets are correlated.
Try /tutor information ratio or /tutor fundamental law for an
adaptive walkthrough.