Skip to article frontmatterSkip to article content
Contents
De industrie als financier: indexfondsen, DFA, AQR
Maarten Nies

De industrie als financier: indexfondsen, DFA, AQR

1Overzicht

Verliest actief beheer omdat niemand vaardig is? Nee, want dat de gemiddelde actieve dollar na kosten achterblijft, volgt al uit een optelsom. De vaardigheid die wel bestaat, komt in evenwicht bij de beheerder terecht en niet bij de belegger. Een deel van dat antwoord is bewezen en een deel gemeten, want de rekenkunde is een stelling, en dat factoren en kosten de persistentie van fondsrendementen verklaren, is een waarneming van Carhart. Of er daarnaast een restje vaardigheid overblijft, is een open vraag, want de data laten meer dan één verklaring toe. In dit college

  • laten we met drie beleggers en twee aandelen zien dat de actieve beleggers samen vóór kosten precies de markt halen;

  • bewijzen we die rekenkunde van Sharpe en leiden we het evenwicht van Berk en Green af, waarin een vaardige beheerder groeit tot de belegger niets extra’s meer overhoudt;

  • bespreken we hoe de standaardfout van alpha, de bootstrap van Fama en French en de false discovery rate vaardigheid van geluk proberen te scheiden;

  • simuleren we 2000 fondsen waarvan we de waarheid kennen, om te zien hoeveel vaardige fondsen die methoden terugvinden;

  • repliceren we op 50 Amerikaanse fondsen de gemiddelde alpha, de bootstrap van Fama en French en de persistentie van Carhart.

Jensen vond in 1968 dat beleggingsfondsen na kosten gemiddeld 1,1% per jaar achterbleven bij de markt Jensen (1968). Sharpe liet in 1991 in drie pagina’s zien waarom dat vóór kosten niet anders kan Sharpe (1991). Intussen bouwden dezelfde academische kringen de bijbehorende industrie. Wells Fargo begon in 1971 het eerste indexfonds voor institutionele beleggers en Vanguard in 1976 het eerste voor particulieren. Oud-studenten van Fama richtten Dimensional Fund Advisors (1981) en AQR (1998) op, die de factorpremies uit Fama-French 1992/1993 en Jegadeesh-Titman, Carhart en momentum crashes als product verkochten. Santa-Clara noemt het de eigenaardige sociologie van het vak dat juist de onderzoekers die aantoonden dat actief beheer faalt, zelf actieve beheerders oprichtten Santa-Clara (2026). Toch hadden ze in beide rollen gelijk. Berk en Green gaven Berk & Green (2004) die schijnbare tegenspraak een model, en Fama en French Fama & French (2010) en Barras, Scaillet en Wermers Barras et al. (2010) leverden de statistiek waarmee het college eindigt.

2Intuïtie: waarom zou dit waar zijn?

Elk aandeel is van iemand. Tellen we de portefeuilles van alle beleggers op, dan komt er precies de markt uit. Splitsen we de beleggers in twee groepen, zij die de markt kopen en niets doen en zij die iets anders doen, dan haalt de eerste groep het marktrendement. De tweede groep bezit samen dus de rest van de markt, en omdat die rest dezelfde samenstelling heeft, haalt ook die groep samen het marktrendement. Voor elke actieve belegger die de markt verslaat, blijft er dus een andere actieve belegger evenveel achter. Trekken we daarna de kosten af, die bij actief beheer hoger zijn, dan verliest de gemiddelde actieve dollar, zonder dat er een model van risico aan te pas komt. Beleggers namen die rekenkunde pas laat ter harte, want pas eind 2019 hielden indexfondsen en index-ETF’s (beursgenoteerde indexfondsen) samen 15% van de Amerikaanse beurswaarde, evenveel als actief beheerde aandelenfondsen Investment Company Institute (2020).

Dat oud-studenten van Fama toch actieve bedrijven oprichtten, is om drie redenen geen tegenspraak.

  • De rekenkunde gaat over alle actieve dollars, zodat fondsen samen kunnen winnen van particulieren, die volgens Santa-Clara te veel handelen en de verkeerde aandelen houden Santa-Clara (2026)Barber & Odean (2000).

  • DFA en AQR verkochten vooral goedkope blootstelling aan premies, en voor de rekenkunde maakt het niet uit of zo’n premie een vergoeding voor risico is of een vergissing van anderen.

  • Vaardigheid kan bestaan zonder dat beleggers er iets van merken.

Het derde punt vraagt om uitleg. Een goede beheerder trekt geld aan, en een groter fonds plaatst grotere orders, die de prijs tegen het fonds in bewegen zoals de Kyle-λ\lambda uit Kyle, Glosten-Milgrom en liquiditeit voorspelt. Het geld blijft stromen tot het rendement voor de belegger niet meer bijzonder is, zodat de beheerder de vergoeding krijgt en de belegger het marktrendement. We verwachten dus dat goede jaren een fonds groter maken zonder dat het daarna beter rendeert. Vaardigheid wordt dan eerder zichtbaar in de omvang van fondsen dan in hun rendementen. Bovendien is de standaardfout van een alpha na twintig jaar nog ruim één procentpunt per jaar, zodat ook duizenden fondsen zonder vaardigheid een staart van sterren opleveren. De vraag is dan niet of één fonds goed is, maar of er meer goede fondsen zijn dan toeval oplevert.

3Toy-voorbeeld: drie beleggers en twee aandelen

We laden eerst de pakketten die in het hele college nodig zijn.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from scipy import stats

import hap
from hap import data as hap_data
hap.plotting.setup()

rng = np.random.default_rng(20240101)

De markt bestaat uit twee aandelen, A met marktwaarde 60 en B met marktwaarde 40. Over het jaar rendeert A +10%+10\% en B −5%-5\%. Drie beleggers bezitten samen alles, en de passieve belegger P betaalt minder kosten dan de actieve beleggers X en Y.

Beleggerin Ain Bvermogenkosten
passief P3020500,1%0{,}1\%
actief X255301,0%1{,}0\%
actief Y515201,0%1{,}0\%
markt6040100
  1. De markt rendeert 0,6×10+0,4×(−5)=4%0{,}6 \times 10 + 0{,}4 \times (-5) = 4\%, en P haalt dat ook, omdat hij A en B in de verhouding 60:40 houdt.

  2. X zette zwaar in op A en haalt (25×10−5×5)/30=7,5%(25 \times 10 - 5 \times 5)/30 = 7{,}5\%.

  3. Y zat vooral in B en haalt (5×10−15×5)/20=−1,25%(5 \times 10 - 15 \times 5)/20 = -1{,}25\%.

  4. X en Y bezitten samen 30 in A en 20 in B, weer 60:40, en halen samen (30×7,5+20×(−1,25))/50=4%(30 \times 7{,}5 + 20 \times (-1{,}25))/50 = 4\%.

  5. Na 1%1\% kosten houden X en Y samen 3,0%3{,}0\% over, 0,90{,}9 procentpunt minder dan P met zijn 3,9%3{,}9\%.

De code rekent dezelfde stappen na en zet ze naast de handberekening.

holdings = pd.DataFrame(
    {"A": [30.0, 25.0, 5.0], "B": [20.0, 5.0, 15.0]},
    index=["passief P", "actief X", "actief Y"],
)
stock_ret = pd.Series({"A": 0.10, "B": -0.05})
costs = pd.Series({"passief P": 0.001, "actief X": 0.010, "actief Y": 0.010})

wealth = holdings.sum(axis=1)
gross = holdings @ stock_ret / wealth
net = gross - costs
market = holdings.sum() @ stock_ret / wealth.sum()

active = ["actief X", "actief Y"]
active_gross = wealth[active] @ gross[active] / wealth[active].sum()
active_net = wealth[active] @ net[active] / wealth[active].sum()
cost_gap = net["passief P"] - active_net
assert np.isclose(active_gross, market) and np.isclose(active_net, 0.03)

pd.DataFrame({
    "met de hand (%)": [4.0, 7.5, -1.25, 4.0, 3.0, 0.9],
    "code (%)": 100 * np.array([market, gross["actief X"], gross["actief Y"],
                                active_gross, active_net, cost_gap]),
}, index=["marktrendement", "bruto X", "bruto Y", "X en Y samen, bruto",
          "X en Y samen, netto", "P netto min X en Y netto"]).round(4)
Loading...

Hand en code komen op alle zes regels overeen. X versloeg de markt wel, maar Y betaalde daar precies voor, en na kosten verliezen de actieve beleggers samen 0,9 procentpunt op de passieve belegger.

4Theorie

De theorie beantwoordt de vraag uit het Overzicht in drie stappen. Eerst laten we zien dat de gemiddelde actieve dollar vóór kosten precies de markt haalt en na hogere kosten dus achterblijft, als identiteit en zonder model. Daarna volgt het model van Berk en Green, waarin vaardigheid bestaat maar de belegger in evenwicht niets extra’s oplevert. Dat model verschuift de vraag van “bestaat vaardigheid?” naar “hoe meten we die in duizenden fondsen?”. Daarom eindigen we met drie meetinstrumenten: de standaardfout van alpha, de bootstrap en de false discovery rate.

4.1Sharpes rekenkunde

Het gemiddelde rendement van de actieve beleggers is vóór kosten gelijk aan het marktrendement, in elke periode. Er zijn NN effecten met marktwaarden M1,t,…,MN,tM_{1,t}, \dots, M_{N,t} en rendementen Ri,t+1R_{i,t+1} tussen tt en t+1t+1, zodat het marktrendement Rm,t+1=∑iMi,tRi,t+1/∑iMi,tR_{m,t+1} = \sum_i M_{i,t} R_{i,t+1} / \sum_i M_{i,t} is; het subscript mm staat hier voor de markt. Belegger jj houdt op tt voor hi,tj≥0h_{i,t}^{j} \geq 0 dollar in effect ii, met vermogen Wtj=∑ihi,tjW^{j}_t = \sum_i h_{i,t}^{j} en bruto rendement Rt+1j=∑ihi,tjRi,t+1/WtjR^{j}_{t+1} = \sum_i h^{j}_{i,t} R_{i,t+1} / W^{j}_t.

Sharpe noemt een belegger passief als hij van elk effect hetzelfde deel bezit, dus hi,tj=θjMi,th_{i,t}^{j} = \theta_j M_{i,t} voor alle ii met een vaste θj>0\theta_j > 0 Sharpe (1991). Elke andere belegger is actief, en de verzamelingen passieve en actieve beleggers heten P\mathcal{P} en A\mathcal{A}. De kosten cjc_j zijn een fractie van het vermogen, bijvoorbeeld 0,1%0{,}1\% voor P en 1%1\% voor X en Y.

Het bewijs telt de posities op. De passieve beleggers bezitten samen een vast deel Θ=∑j∈Pθj\Theta = \sum_{j\in\mathcal{P}}\theta_j van elk effect. De actieve beleggers bezitten dus samen het deel 1−Θ1 - \Theta van elk effect, en een evenredig stuk van de markt heeft het rendement van de markt. In het toy-voorbeeld is Θ=0,5\Theta = 0{,}5, want P bezit de helft van A en de helft van B, en dus bezitten X en Y samen ook van elk aandeel de helft.

Proof 1

Tel de posities van de actieve beleggers in effect ii op en gebruik dat alles gehouden wordt: ∑j∈Ahi,tj=Mi,t−∑j∈PθjMi,t=(1−Θ) Mi,t\sum_{j\in\mathcal{A}} h^{j}_{i,t} = M_{i,t} - \sum_{j\in\mathcal{P}} \theta_j M_{i,t} = (1-\Theta)\, M_{i,t}, met Θ<1\Theta < 1 omdat A\mathcal{A} iets bezit. Het gezamenlijke vermogen van de actieve beleggers is dan (1−Θ)∑iMi,t(1-\Theta)\sum_i M_{i,t}, en hun gezamenlijke opbrengst in dollars is

∑j∈AWtjRt+1j=∑i(∑j∈Ahi,tj)Ri,t+1=(1−Θ)∑iMi,tRi,t+1.\sum_{j\in\mathcal{A}} W^{j}_t R^{j}_{t+1} = \sum_i \Big(\sum_{j\in\mathcal{A}} h^{j}_{i,t}\Big) R_{i,t+1} = (1-\Theta) \sum_i M_{i,t} R_{i,t+1}.

Delen door het gezamenlijke vermogen geeft de eerste gelijkheid. Omdat de kosten per belegger een vaste aftrek zijn, is het gewogen gemiddelde na kosten Rm,t+1−cˉAR_{m,t+1} - \bar c_{\mathcal{A}}. Een passieve belegger haalt Rm,t+1−cjR_{m,t+1} - c_j. □\square

De eerste gelijkheid in (1) zegt dat de actieve beleggers samen vóór kosten precies de markt halen, de tweede dat ze na kosten achterblijven zodra hun kosten gemiddeld hoger zijn dan die van passieve beleggers. Het bewijs gebruikt geen verwachtingen, zodat de uitspraak in élke periode geldt. Ze gaat wel over alle actieve dollars, en een echte indexbelegger moet bij indexwijzigingen en emissies handelen. Onder kosten vallen bovendien alle kosten, van vergoedingen en spreads tot de prijsimpact uit Kyle, Glosten-Milgrom en liquiditeit. French telde ze op voor de Amerikaanse beurs French (2008) en kwam over 1980–2006 uit op 0,67% van de marktwaarde per jaar. Omdat de bruto alpha’s samen nul zijn, is dat volgens hem ook wat de gemiddelde belegger per jaar had kunnen winnen door passief te beleggen.

4.2Het model van Berk en Green

Vaardigheid en een nettoalpha van nul gaan samen zodra kapitaal vrij naar een fonds kan stromen en een groter fonds per dollar meer handelskosten maakt. Biedt een fonds na kosten meer verwacht rendement dan de index, dan verplaatsen beleggers hun geld ernaartoe. Die instroom stopt pas wanneer het fonds zo groot is dat het extra rendement op is. In evenwicht voorspelt het verleden daarom niets over het rendement van de belegger, maar veel over de omvang van het fonds.

We volgen Berk & Green (2004), maar noemen hun vaardigheid aa om verwarring met de geschatte Jensen-alpha te voorkomen. De beheerder haalt op actief beheerd geld een risicogecorrigeerd overrendement vóór kosten Rt+1=a+et+1R_{t+1} = a + e_{t+1}, met onafhankelijke ruis et+1∼N(0,σ2)e_{t+1} \sim N(0, \sigma^2) en σ\sigma in de orde van 5%5\% per jaar. Niemand kent aa, ook de beheerder niet. De markt begint met de prior (de verdeling vóór de eerste waarneming) a∼N(ϕ0,η2)a \sim N(\phi_0, \eta^2) en schrijft τ=1/η2\tau = 1/\eta^2 en ω=1/σ2\omega = 1/\sigma^2 voor de precisies. Met de regel van Bayes is de verwachte vaardigheid na tt jaar

ϕt=E[a∣R1,…,Rt]=τϕ0+ω∑s=1tRsτ+t ω,\phi_t = \E[a \mid R_1,\dots,R_t] = \frac{\tau \phi_0 + \omega \sum_{s=1}^{t} R_s}{\tau + t\,\omega},

een gewogen gemiddelde van de prior en de waarnemingen, zodat elk goed jaar ϕt\phi_t verhoogt.

De beheerder belegt qa,tq_{a,t} actief en qI,tq_{I,t} in de index, samen qt=qa,t+qI,tq_t = q_{a,t} + q_{I,t}. Het actieve deel kost C(qa,t)C(q_{a,t}), met C(0)=0C(0) = 0 en stijgende marginale kosten (C′>0C' > 0, C′′>0C'' > 0) die op den duur elk denkbaar rendement overtreffen (lim⁡q→∞C′(q)>1\lim_{q\to\infty} C'(q) > 1), zodat het fonds eindig groot blijft, en hij rekent een vergoeding ff per beheerde dollar. Het rendement voor de belegger boven de index is dan

rt+1=qa,tqtRt+1−C(qa,t)+fqtqt.r_{t+1} = \frac{q_{a,t}}{q_t} R_{t+1} - \frac{C(q_{a,t}) + f q_t}{q_t}.

Het eerste deel is de vaardigheid, verdund over het hele fonds, en het tweede deel zijn de handelskosten en de vergoeding per dollar. Beleggers leveren kapitaal zolang Et[rt+1]≥0\E_t[r_{t+1}] \geq 0, en de beheerder maximaliseert zijn vergoeding fqtf q_t onder die voorwaarde.

Proof 2

Stap 1: de voorwaarde van de belegger is bindend. De verwachting van (4) is (ϕtqa,t−C(qa,t)−fqt)/qt(\phi_t q_{a,t} - C(q_{a,t}) - f q_t)/q_t. De doelfunctie fqtf q_t stijgt in qtq_t en de voorwaarde ϕtqa,t−C(qa,t)−fqt≥0\phi_t q_{a,t} - C(q_{a,t}) - f q_t \geq 0 daalt erin, dus in het optimum geldt gelijkheid.

Stap 2: marginale kosten gelijk aan verwachte alpha. De beheerder kiest qaq_a en qq, met de Lagrangiaan

L=fq+λp(ϕtqa−C(qa)−fq)+λf(q−qa),\mathcal{L} = f q + \lambda^p\big(\phi_t q_a - C(q_a) - f q\big) + \lambda^f (q - q_a),

waarin λp\lambda^p de schaduwprijs van de participatievoorwaarde is en λf\lambda^f die van qI=q−qa≥0q_I = q - q_a \geq 0. De eerste-ordevoorwaarde voor qaq_a is λp(ϕt−C′(qa))=λf\lambda^p(\phi_t - C'(q_a)) = \lambda^f, en die voor qq is f(1−λp)+λf=0f(1 - \lambda^p) + \lambda^f = 0. Heeft het fonds een indexdeel, dan bindt qI≥0q_I \geq 0 niet en is λf=0\lambda^f = 0 (complementariteit), zodat λp=1>0\lambda^p = 1 > 0 en C′(qa,t)=ϕtC'(q_{a,t}) = \phi_t. Invullen in de bindende voorwaarde geeft qt=(ϕtqa,t−C(qa,t))/fq_t = (\phi_t q_{a,t} - C(q_{a,t}))/f, en de oplossing is inwendig zolang qI,t=qt−qa,t>0q_{I,t} = q_t - q_{a,t} > 0. Anders is qI,t=0q_{I,t} = 0 en λf>0\lambda^f > 0, zodat C′(qa,t)<ϕtC'(q_{a,t}) < \phi_t en qtq_t de vergelijking ϕt=(C(qt)+fqt)/qt\phi_t = (C(q_t) + f q_t)/q_t oplost.

Stap 3: het rendement is niet te voorspellen. De bindende voorwaarde is precies Et[rt+1]=0\E_t[r_{t+1}] = 0. Dan is E[rt+1g]=E[g Et[rt+1]]=0\E[r_{t+1} g] = \E[g\,\E_t[r_{t+1}]] = 0 en E[rt+1]=0\E[r_{t+1}] = 0, dus de covariantie is nul.

Stap 4: de omvang stijgt met elk goed jaar. In het inwendige geval geeft de omhullende-stelling dqt/dϕt=qa,t/f>0dq_t/d\phi_t = q_{a,t}/f > 0. In het randgeval is ϕt=C(qt)/qt+f\phi_t = C(q_t)/q_t + f, en C(q)/qC(q)/q stijgt strikt omdat CC strikt convex is met C(0)=0C(0) = 0. Ten slotte is ∂ϕt/∂Rs=ω/(τ+tω)>0\partial\phi_t/\partial R_s = \omega/(\tau + t\omega) > 0. □\square

Met getallen wordt het evenwicht tastbaar. Neem een verwachte vaardigheid van ϕ=3%\phi = 3\% per jaar, kwadratische handelskosten C(qa)=b qa2C(q_a) = b\, q_a^2 met b=0,005b = 0{,}005 per miljard dollar, zodat de kosten per actieve dollar b qab\,q_a zijn, en een vergoeding f=1%f = 1\%.

  • Mag de beheerder geen index bijmengen, dan stroomt er geld toe tot ϕ−b q−f=0\phi - b\,q - f = 0, dus tot q=(0,03−0,01)/0,005=4q = (0{,}03 - 0{,}01)/0{,}005 = 4 miljard, en verdient hij 40 miljoen per jaar.

  • Mag hij het surplus in de index beleggen, dan beheert hij actief tot 2b qa=ϕ2b\,q_a = \phi, dus qa=3q_a = 3 miljard, en brengen beleggers geld tot ϕ qa−b qa2=fq\phi\,q_a - b\,q_a^2 = f q, dus q=(0,09−0,045)/0,01=4,5q = (0{,}09 - 0{,}045)/0{,}01 = 4{,}5 miljard. De vergoeding van 45 miljoen is dan precies de waarde die hij toevoegt.

  • Schat de markt zijn verwachte vaardigheid na een goed jaar op ϕ=4%\phi = 4\%, dan groeit het fonds naar q=(0,16−0,08)/0,01=8q = (0{,}16 - 0{,}08)/0{,}01 = 8 miljard, 78% meer dan de 4,5 miljard hierboven.

Het fonds met indexdeel is groter en deels een closet indexer (een fonds dat voor actief beheer rekent maar grotendeels de index volgt). De code rekent de drie gevallen na.

phi, b, f = 0.03, 0.005, 0.01        # expected skill, cost per $bn, fee

q_all_active = (phi - f) / b
q_active = phi / (2 * b)
q_total = (phi * q_active - b * q_active**2) / f
investor_alpha = (phi * q_active - b * q_active**2 - f * q_total) / q_total
value_added = phi * q_active - b * q_active**2

phi_new = 0.04
q_active_new = phi_new / (2 * b)
q_total_new = (phi_new * q_active_new - b * q_active_new**2) / f

print(f"versie 1: q* = {q_all_active:.2f} mld, vergoeding = {1000 * f * q_all_active:.1f} mln")
print(f"versie 2: q_a = {q_active:.2f} mld, q = {q_total:.2f} mld, "
      f"vergoeding = {1000 * f * q_total:.1f} mln")
print(f"toegevoegde waarde = {1000 * value_added:.1f} mln, nettoalpha belegger = {investor_alpha:.4%}")
print(f"na herwaardering naar phi = 4%: q = {q_total_new:.2f} mld "
      f"(instroom {q_total_new / q_total - 1:.0%})")
assert np.isclose(q_all_active, 4) and np.isclose(q_total, 4.5) and np.isclose(q_total_new, 8)
versie 1: q* = 4.00 mld, vergoeding = 40.0 mln
versie 2: q_a = 3.00 mld, q = 4.50 mld, vergoeding = 45.0 mln
toegevoegde waarde = 45.0 mln, nettoalpha belegger = 0.0000%
na herwaardering naar phi = 4%: q = 8.00 mld (instroom 78%)

De belegger houdt in alle gevallen een nettoalpha van nul over, ondanks een beheerder met een verwachte vaardigheid van drie procent. Het goede jaar brengt instroom en geen beter rendement, en daarmee wordt vaardigheid zichtbaar in de omvang van het fonds, zoals we in de Intuïtie verwachtten.

Voor kwadratische kosten wordt alles expliciet, met qa,t=ϕt/(2b)q_{a,t} = \phi_t/(2b) en qt=ϕt2/(4bf)q_t = \phi_t^2/(4bf) zolang ϕt≥2f\phi_t \geq 2f. De omvang is kwadratisch in de verwachte vaardigheid, zodat een beheerder die twee keer zo goed wordt geacht, vier keer zoveel geld beheert. Hogere schaalkosten bb maken het fonds kleiner, en een hogere vergoeding ff ook, omdat de belegger dan al bij een kleiner fonds niets extra’s meer overhoudt. De vergoeding in dollars, fqt=ϕt2/(4b)f q_t = \phi_t^2/(4b), hangt echter niet van ff af, want een duurder fonds krijgt precies zoveel minder geld dat de beheerder evenveel verdient.

4.3Wat het model voorspelt: geen persistentie in rendementen

Als vaardigheid bestaat en langzaam verandert, zou een naïeve lezing verwachten dat de winnaars van vorig jaar ook dit jaar beter zijn. Carhart toetste dat Carhart (1997) op 1892 fondsen over 1962–1993, in een steekproef zonder survivorship bias (vertekening doordat alleen overlevende fondsen in de data zitten). Hij vond dat gemeenschappelijke factoren en kosten de persistentie vrijwel volledig verklaren. Het eerdere “hot hands”-resultaat kwam grotendeels van momentum (relatieve winnaars van het afgelopen jaar blijven een tijd winnen) in de aandelen van de fondsen Jegadeesh & Titman (1993). Alleen de slechtste fondsen bleven significant slecht. Carhart concludeerde dat zijn resultaten het bestaan van vaardige beheerders niet ondersteunen.

Volgens Theorem 1 is die conclusie te snel, omdat het ontbreken van persistentie in rendementen precies is wat het model ook bij vaardige beheerders voorspelt. Berk en Green kalibreerden hun model op kapitaalstromen en overlevingskansen en vonden dat ongeveer 80% van de actieve beheerders genoeg vaardigheid heeft om de eigen vergoeding terug te verdienen Berk & Green (2004). Vaardigheid moet dan in dollars worden gemeten. Berk en Van Binsbergen vermenigvuldigden daarom de bruto alpha ten opzichte van de goedkoopste indexfondsen met het beheerde vermogen Berk & Binsbergen (2015). Volgens de werkversie van dat onderzoek uit 2012 voegde de gemiddelde beheerder op die manier ongeveer 2 miljoen dollar per jaar toe, en die vaardigheid bleef over tien jaar bestaan Berk & Binsbergen (2012).

4.4Alpha meten en de standaardfout

Een fonds moet niet de markt verslaan, maar een mechanische portefeuille met dezelfde blootstellingen. Een fonds dat kleine waardeaandelen koopt en de markt verslaat, heeft immers niets gedaan wat DFA niet goedkoper verkoopt. Voor fonds ii met overrendement Ri,t+1eR^{e}_{i,t+1} en KK factorrendementen ft+1\mathbf{f}_{t+1} is de prestatieregressie

Ri,t+1e=αi+βi⊤ft+1+εi,t+1R^{e}_{i,t+1} = \alpha_i + \boldsymbol{\beta}_i^\top \mathbf{f}_{t+1} + \varepsilon_{i,t+1}

Voor het CAPM is f=Rme\mathbf{f} = R^{e}_{m} Jensen (1968) en voor het driefactormodel f=(Rme,SMB,HML)\mathbf{f} = (R^{e}_{m}, \mathrm{SMB}, \mathrm{HML}) Fama & French (1993). Het vierfactormodel van Carhart Carhart (1997) voegt daar de momentumfactor UMD aan toe, zoals in (4). Omdat de factoren overrendementen van verhandelbare portefeuilles zijn, is αi\alpha_i het gemiddelde rendement van het fonds min dat van de replicerende portefeuille βi⊤f\boldsymbol{\beta}_i^\top \mathbf{f}. De vraag is dan hoe lang we moeten kijken voordat α^i\hat\alpha_i iets zegt.

Proof 3

Met X=[1,F]\mathbf{X} = [\mathbf{1}, \mathbf{F}] is Var⁡(b^∣F)=σε2(X⊤X)−1\Var(\hat{\boldsymbol b}\mid\mathbf{F}) = \sigma^2_\varepsilon (\mathbf{X}^\top \mathbf{X})^{-1} en X⊤X/T=(1μ^f⊤μ^fΣ^f+μ^fμ^f⊤)\mathbf{X}^\top\mathbf{X}/T = \begin{pmatrix} 1 & \hat{\boldsymbol\mu}_f^\top \\ \hat{\boldsymbol\mu}_f & \hat{\boldsymbol\Sigma}_f + \hat{\boldsymbol\mu}_f\hat{\boldsymbol\mu}_f^\top \end{pmatrix}. Het (1,1)(1,1)-element van de inverse is volgens de formule voor gepartitioneerde matrices 1/(1−μ^f⊤(Σ^f+μ^fμ^f⊤)−1μ^f)1/(1 - \hat{\boldsymbol\mu}_f^\top(\hat{\boldsymbol\Sigma}_f + \hat{\boldsymbol\mu}_f\hat{\boldsymbol\mu}_f^\top)^{-1}\hat{\boldsymbol\mu}_f). Sherman-Morrison geeft μ^f⊤(Σ^f+μ^fμ^f⊤)−1μ^f=s/(1+s)\hat{\boldsymbol\mu}_f^\top(\hat{\boldsymbol\Sigma}_f + \hat{\boldsymbol\mu}_f\hat{\boldsymbol\mu}_f^\top)^{-1}\hat{\boldsymbol\mu}_f = s/(1+s) met s=μ^f⊤Σ^f−1μ^fs = \hat{\boldsymbol\mu}_f^\top\hat{\boldsymbol\Sigma}_f^{-1}\hat{\boldsymbol\mu}_f, dus het element is 1/(1−s/(1+s))=1+s1/(1 - s/(1+s)) = 1+s. Vermenigvuldig met σε2/T\sigma^2_\varepsilon/T. □\square

De term tussen haakjes in (7) is één plus de gekwadrateerde maximale Sharpe-ratio van de factoren per periode. Bij een Sharpe-ratio van ongeveer 0,14 per maand is hij rond 1,02. Het probleem is daarom niet de formule maar de ruis, net als bij de standaardfout van 2% van een gemiddeld rendement. De tracking error (de standaarddeviatie van ε\varepsilon, het rendement dat de factoren niet verklaren) van een actief aandelenfonds is al gauw 5%5\% per jaar. Een beheerder met een werkelijke alpha van 1%1\% haalt na TT jaar dan een verwachte tt-waarde van 1⋅T/51 \cdot \sqrt{T}/5. Voor t=2t = 2 zijn dan 100 jaar nodig, en bij een alpha van 2%2\% nog altijd 25 jaar. Omdat één fonds zo niet te beoordelen is, kijkt de literatuur naar de hele cross-sectie van fondsen.

4.5Geluk of vaardigheid: de bootstrap

Als geen enkel fonds vaardig is, volgen de geschatte tt-waarden van alpha de verdeling van de ruis, zodat alleen een staart die dikker is dan die van de ruis op vaardigheid wijst. Fondsrendementen zijn echter niet normaal, hebben verschillende volatiliteiten en zijn onderling sterk gecorreleerd, zodat een tabel van de tt-verdeling de verkeerde nulhypothese beschrijft. De bootstrap (herhaald trekken uit de eigen data) maakt die nulverdeling daarom uit de data zelf. Fama en French hielden ook de correlatie tussen fondsen vast door hele maanden te trekken Fama & French (2010).

Omdat alle fondsen dezelfde maanden krijgen, bevat de gesimuleerde cross-sectie ook de gemeenschappelijke schokken van de echte. Liggen de werkelijke staartpercentielen in bijna alle trekkingen buiten de simulaties, dan zijn er meer extreme fondsen dan geluk verklaart. Fama en French vonden dat weinig Amerikaanse aandelenfondsen genoeg verdienen om hun kosten te dekken. Vóór kosten zagen ze in beide staarten wel sporen van slechte en goede beheerders Fama & French (2010).

4.6Veel toetsen tegelijk: de false discovery rate

Wie 2000 fondsen toetst op een niveau van 5%, vindt zonder enige vaardigheid honderd “significante” fondsen. De vraag is daarom niet hoe vaak een fonds zonder vaardigheid ten onrechte wordt verworpen, maar welk deel van de verwerpingen onterecht is. Stel dat MM hypothesen H1,…,HMH_1,\dots,H_M met p-waarden p1,…,pMp_1,\dots,p_M zijn getoetst, waarvan M0M_0 waar. Met VV het aantal onterechte en RR het totale aantal verwerpingen is de false discovery rate (het verwachte aandeel onterechte ontdekkingen) FDR=E[V/max⁡(R,1)]\mathrm{FDR} = \E[V/\max(R,1)].

Proof 4

Neem een ware nulhypothese ii en laat R(i)R^{(i)} het aantal verwerpingen zijn als pip_i door 0 wordt vervangen, zodat R(i)R^{(i)} alleen van de andere p-waarden afhangt. De procedure heeft de eigenschap dat {Hi verworpen,R=k}={pi≤qk/M, R(i)=k}\{H_i \text{ verworpen}, R = k\} = \{p_i \leq qk/M,\ R^{(i)} = k\}, omdat een verworpen pip_i het aantal verwerpingen niet verandert als hij naar nul gaat. Dus

FDR=∑i∈H0∑k=1M1kPr⁡ ⁣(pi≤qkM, R(i)=k)=∑i∈H0∑k=1M1k qkM Pr⁡ ⁣(R(i)=k)=qM∑i∈H01=q M0M,\mathrm{FDR} = \sum_{i \in H_0} \sum_{k=1}^{M} \frac{1}{k} \Pr\!\left(p_i \leq \tfrac{qk}{M},\ R^{(i)} = k\right) = \sum_{i \in H_0} \sum_{k=1}^{M} \frac{1}{k}\,\frac{qk}{M}\,\Pr\!\left(R^{(i)} = k\right) = \frac{q}{M}\sum_{i\in H_0} 1 = q\,\frac{M_0}{M},

waarbij de tweede stap onafhankelijkheid en uniformiteit gebruikt en de derde dat R(i)≥1R^{(i)} \geq 1 zeker is, want pi=0p_i = 0 wordt altijd verworpen. □\square

Barras, Scaillet en Wermers gebruikten dezelfde uniformiteit Barras et al. (2010) om niet te beslissen welk fonds vaardig is, maar te schatten hoeveel fondsen dat zijn. Ze delen de fondsen in drie groepen: fondsen met een alpha na kosten van nul (aandeel π0\pi_0), onvaardige fondsen met een negatieve alpha (πA−\pi_A^-) en vaardige fondsen met een positieve alpha (πA+\pi_A^+).

Het bewijs laat ook de zwakte zien: een vaardig fonds dat niet significant is, telt mee als nulfonds, zodat π^A+\hat\pi^{+}_A bij weinig data te laag uitvalt. Barras, Scaillet en Wermers vonden dat ongeveer driekwart van de fondsen na kosten een alpha van nul had, wat past bij het evenwicht van Berk en Green. Vóór 1996 zagen ze een flink aandeel vaardige fondsen, maar in 2006 vrijwel geen meer Barras et al. (2010).

5Simulatie: 2000 fondsen, waarvan een paar kunnen wat ze beloven

Welk deel van de vaardige fondsen vinden de tt-toets, de bootstrap en de false discovery rate terug als we de waarheid kennen? Dat hangt vermoedelijk af van de lengte van de steekproef, dus variëren we die ook. Er zijn M=2000M = 2000 fondsen en T=240T = 240 maanden. Van de fondsen heeft 70% een alpha na kosten van nul, 10% een alpha van +2%+2\% per jaar en 20% een alpha van −2%-2\% per jaar. Die laatste groep verliest twee keer de kosten van X en Y uit het toy-voorbeeld.

Elk fonds heeft een marktbèta tussen 0,80{,}8 en 1,21{,}2 en een tracking error van 1,5%1{,}5\% per maand, ongeveer 5%5\% per jaar zoals in de theorie. De marktpremie is 0,6%0{,}6\% per maand met een volatiliteit van 4,5%4{,}5\%. Voor een vaardig fonds is de verwachte tt-waarde 0,167240/1,5≈1,70{,}167\sqrt{240}/1{,}5 \approx 1{,}7, zodat zo’n fonds wel vaardig is, maar gemiddeld niet significant. De eerste cel schat voor elk fonds de CAPM-alpha en de tt-waarde ervan.

def alpha_tstats(Y, F):
    """OLS intercepts, t-statistics and slopes for every column of Y on factors F.

    Y is a (T, M) array of excess returns, F a (T, K) array of factors without a
    constant. Standard errors are homoskedastic.
    """
    # TODO: naar hap.stats (cross-sectional alpha regression)
    T = Y.shape[0]
    X = np.column_stack([np.ones(T), F])
    XtX_inv = np.linalg.inv(X.T @ X)
    coef = XtX_inv @ X.T @ Y
    resid = Y - X @ coef
    s2 = (resid**2).sum(axis=0) / (T - X.shape[1])
    se_alpha = np.sqrt(s2 * XtX_inv[0, 0])
    return coef[0], coef[0] / se_alpha, coef[1:]


def simulate_universe(n_months, rng, counts=(1400, 200, 400), alpha_ann=0.02,
                      sigma_eps=0.015):
    """Simulate fund excess returns: groups 0 = zero alpha, 1 = skilled, 2 = unskilled."""
    groups = np.repeat([0, 1, 2], counts)
    alpha = np.array([0.0, alpha_ann, -alpha_ann])[groups] / 12
    mkt = rng.normal(0.006, 0.045, n_months)
    beta = rng.uniform(0.8, 1.2, groups.size)
    eps = rng.normal(0.0, sigma_eps, (n_months, groups.size))
    return alpha + np.outer(mkt, beta) + eps, mkt[:, None], groups


Y_sim, F_sim, groups = simulate_universe(240, rng)
alpha_sim, t_sim, _ = alpha_tstats(Y_sim, F_sim)

group_names = ["nul-alpha", "vaardig", "onvaardig"]
pd.DataFrame({
    "aantal": [np.sum(groups == g) for g in range(3)],
    "gem. t(alpha)": [t_sim[groups == g].mean() for g in range(3)],
    "aandeel t > 2": [np.mean(t_sim[groups == g] > 2) for g in range(3)],
    "aandeel t < -2": [np.mean(t_sim[groups == g] < -2) for g in range(3)],
}, index=group_names).round(3)
Loading...

De tabel laat het probleem zien. Van de 1400 nulfondsen haalt 2,0% toch t>2t > 2, en dat zijn 28 fondsen met geluk, terwijl van de 200 vaardige fondsen maar 36% die drempel haalt. Van de honderd fondsen met t>2t > 2 is daardoor iets meer dan een kwart niet vaardig, en bijna twee derde van de vaardige fondsen blijft onzichtbaar. In de figuur hieronder gaat het om de rechterstaart, waar de gestapelde balken van nulfondsen en vaardige fondsen door elkaar lopen.

Source
fig, ax = plt.subplots()
bins = np.linspace(-6, 6, 61)
ax.hist([t_sim[groups == g] for g in (2, 0, 1)], bins=bins, stacked=True,
        label=["onvaardig (20%)", "nul-alpha (70%)", "vaardig (10%)"], edgecolor="white")
grid = np.linspace(-6, 6, 400)
ax.plot(grid, stats.t.pdf(grid, 238) * t_sim.size * (bins[1] - bins[0]), color="black",
        lw=1.2, label="nulverdeling, alle fondsen")
for c in (-2, 2):
    ax.axvline(c, color="black", ls="--", lw=0.8)
ax.set_xlabel("$t$-waarde van de geschatte alpha")
ax.set_ylabel("Aantal fondsen")
ax.set_title("2000 gesimuleerde fondsen over twintig jaar")
ax.legend()
plt.show()
<Figure size 990x550 with 1 Axes>
<Figure size 990x550 with 1 Axes>

Figure 1:De cross-sectie van t(α^)t(\hat\alpha) is een mengsel van drie verdelingen die elkaar grotendeels overlappen. De vaardige fondsen verschuiven de rechterstaart, maar veel van de fondsen met t>2t > 2 zijn nulfondsen met geluk, en de meeste vaardige fondsen halen de drempel niet.

Omdat de tt-toets per fonds zo weinig vaardige fondsen vindt, passen we nu de bootstrap toe alsof we de waarheid niet kenden, met 500 trekkingen. Fama en French schatten zelf geen aandeel vaardige fondsen. Om de methoden toch te vergelijken, nemen we het deel van de fondsen boven het 90e percentiel van de bootstrapverdeling, min de 10% die daar zonder vaardigheid verwacht wordt.

def bootstrap_t(Y, F, n_boot, rng):
    """Fama-French (2010) bootstrap: impose zero alpha, resample months jointly."""
    alpha, t_actual, _ = alpha_tstats(Y, F)
    Y_null = Y - alpha
    T = Y.shape[0]
    t_boot = np.empty((n_boot, Y.shape[1]))
    for b_i in range(n_boot):
        idx = rng.integers(0, T, T)
        t_boot[b_i] = alpha_tstats(Y_null[idx], F[idx])[1]
    return t_actual, t_boot


def compare_percentiles(t_actual, t_boot, pcts):
    """Actual cross-sectional percentiles against their bootstrap distribution."""
    actual = np.percentile(t_actual, pcts)
    simulated = np.percentile(t_boot, pcts, axis=1)          # (len(pcts), n_boot)
    return pd.DataFrame({
        "werkelijk": actual,
        "gem. simulatie": simulated.mean(axis=1),
        "% sim < werkelijk": 100 * (simulated < actual[:, None]).mean(axis=1),
    }, index=[f"p{p}" for p in pcts])


t_actual, t_boot = bootstrap_t(Y_sim, F_sim, 500, rng)
compare_percentiles(t_actual, t_boot, [1, 5, 10, 25, 50, 75, 90, 95, 99]).round(2)
Loading...

De bootstrap ziet dat er iets aan de hand is, want links liggen de werkelijke percentielen in alle simulaties lager en rechts vanaf het 90e percentiel hoger. Dat is het patroon dat Fama en French beschrijven. De volgende cel zet de bootstrap, de schatter van Barras, Scaillet en Wermers en de procedure van Benjamini en Hochberg naast de waarheid.

def fdr_proportions(t, df, lam=0.5, gamma=0.2):
    """Barras-Scaillet-Wermers (2010) proportions of zero, unskilled and skilled funds."""
    # TODO: naar hap.stats (false discovery rate)
    p = 2 * stats.t.sf(np.abs(t), df)
    pi0 = min(1.0, np.mean(p > lam) / (1 - lam))
    significant = p <= gamma
    pi_minus = np.mean(significant & (t < 0)) - pi0 * gamma / 2
    pi_plus = np.mean(significant & (t > 0)) - pi0 * gamma / 2
    return pi0, pi_minus, pi_plus


def benjamini_hochberg(p, q):
    """Boolean mask of hypotheses rejected by the Benjamini-Hochberg step-up rule."""
    order = np.argsort(p)
    below = p[order] <= q * np.arange(1, p.size + 1) / p.size
    k = below.nonzero()[0].max() + 1 if below.any() else 0
    reject = np.zeros(p.size, dtype=bool)
    reject[order[:k]] = True
    return reject


ff_cutoff = np.percentile(t_boot, 90)
ff_plus = np.mean(t_actual > ff_cutoff) - np.mean(t_boot > ff_cutoff)
pi0, pi_minus, pi_plus = fdr_proportions(t_sim, df=238)

bh = benjamini_hochberg(stats.t.sf(t_sim, 238), q=0.10)
realised_fdp = np.mean(groups[bh] != 1) if bh.any() else np.nan

pd.DataFrame({
    "waarheid": [0.70, 0.20, 0.10, 0.10, np.nan, np.nan],
    "schatting": [pi0, pi_minus, pi_plus, ff_plus, bh.sum(), realised_fdp],
}, index=["pi0 (BSW)", "pi- (BSW)", "pi+ (BSW)", "vaardig (FF-bootstrap)",
          "BH-ontdekkingen, q = 10%", "gerealiseerd aandeel onterecht"]).round(3)
Loading...

Om vaardige fondsen te tellen is de bootstrap zwak, want vertaald naar een aandeel vindt hij 2% vaardige fondsen tegen 10% in werkelijkheid. De schatter van Barras, Scaillet en Wermers geeft π^0=0,80\hat\pi_0 = 0{,}80 en π^A+=0,04\hat\pi_A^+ = 0{,}04, ook te laag, omdat vaardige fondsen die niet significant zijn als nulfonds meetellen. Benjamini-Hochberg vindt 16 vaardige fondsen zonder één onterechte ontdekking, wat betrouwbaar is, maar het zijn er 16 van de 200.

Eén universum zegt weinig over een schatter. We herhalen de simulatie daarom tweehonderd keer, voor steekproeven van tien, twintig en veertig jaar, en kijken naar de verdeling van π^A+\hat\pi_A^+.

horizons = [120, 240, 480]
n_universes = 200
pi_plus_draws = {T: np.empty(n_universes) for T in horizons}
pi0_draws = {T: np.empty(n_universes) for T in horizons}
for T in horizons:
    for u in range(n_universes):
        Y_u, F_u, _ = simulate_universe(T, rng)
        t_u = alpha_tstats(Y_u, F_u)[1]
        pi0_draws[T][u], _, pi_plus_draws[T][u] = fdr_proportions(t_u, df=T - 2)

pd.DataFrame({
    "gem. pi0": [pi0_draws[T].mean() for T in horizons],
    "gem. pi+": [pi_plus_draws[T].mean() for T in horizons],
    "SD pi+": [pi_plus_draws[T].std(ddof=1) for T in horizons],
    "5e pct pi+": [np.percentile(pi_plus_draws[T], 5) for T in horizons],
    "95e pct pi+": [np.percentile(pi_plus_draws[T], 95) for T in horizons],
}, index=[f"{T // 12} jaar" for T in horizons]).round(3)
Loading...

Het geschatte aandeel vaardige fondsen groeit met de lengte van de steekproef, van gemiddeld 0,032 na tien jaar tot 0,085 na veertig jaar, terwijl de spreiding tussen universa klein blijft. In de figuur gaat het om de afstand tussen elk histogram en de verticale lijn bij het ware aandeel van 10%.

Source
fig, ax = plt.subplots()
for T in horizons:
    ax.hist(pi_plus_draws[T], bins=30, alpha=0.6, label=f"{T // 12} jaar")
ax.axvline(0.10, color="black", lw=1.2, label="ware aandeel vaardig")
ax.set_xlabel("geschat aandeel vaardige fondsen $\\hat\\pi_A^+$")
ax.set_ylabel("Aantal gesimuleerde universa")
ax.set_title("Het aandeel vaardige fondsen, geschat in 200 universa")
ax.legend()
plt.show()
<Figure size 990x550 with 1 Axes>
<Figure size 990x550 with 1 Axes>

Figure 2:De schatter π^A+\hat\pi_A^+ varieert weinig tussen universa, maar is sterk vertekend: met tien jaar data vindt hij gemiddeld een derde van de vaardige fondsen, met veertig jaar 85%. Het probleem is gebrek aan onderscheidend vermogen, niet ruis, zodat een laag geschat aandeel vaardige fondsen ook op te weinig data kan wijzen.

6Replicatie op echte data

De eerste cel haalt de koersen op, zet ze om naar maandelijkse overrendementen en houdt de fondsen met een volledige historie sinds 1996 over.

tickers = (
    "FDGRX FLPSX FEQIX FDVLX FBGRX FOCPX FTRNX FFIDX FDCAX FGRIX FMCSX FDSSX FMAGX FCNTX "
    "AGTHX AIVSX ANCFX AMCPX AWSHX AMRMX PRGFX PRNHX TRBCX PRFDX PRDGX RPMGX PRWAX TRVLX "
    "VWNDX VWNFX VWUSX VPMCX VEIPX VQNPX VEXPX VMRGX VHCOX DODGX TWCUX TWCGX JANSX SEQUX "
    "MUTHX FKGRX NYVTX OAKMX PENNX MPGFX NBGNX HACAX PRBLX LMVTX CGMFX "
    "VFINX VTSMX NAESX VIVAX VIGRX VEXMX"
).split()
index_funds = {
    "VFINX": "Vanguard 500 Index", "VTSMX": "Vanguard Total Stock Market Index",
    "NAESX": "Vanguard Small-Cap Index", "VIVAX": "Vanguard Value Index",
    "VIGRX": "Vanguard Growth Index", "VEXMX": "Vanguard Extended Market Index",
}

prices = hap_data.yahoo(tickers, "1985-01-01").resample("ME").last()
fund_ret = (prices / prices.shift(1) - 1).iloc[1:]
factors = hap_data.french("F-F_Research_Data_Factors").join(hap_data.french("F-F_Momentum_Factor"))

sample = fund_ret.index.intersection(factors.index)
sample = sample[sample >= "1996-01-01"]
excess = fund_ret.loc[sample].sub(factors.loc[sample, "RF"], axis=0).dropna(axis=1)
fac = factors.loc[sample]
active_cols = [c for c in excess.columns if c not in index_funds]

print(f"{sample[0]:%Y-%m} t/m {sample[-1]:%Y-%m}: {len(sample)} maanden, "
      f"{len(active_cols)} actieve fondsen, {excess.shape[1] - len(active_cols)} indexfondsen")
print("weggevallen (te korte historie):", sorted(set(tickers) - set(excess.columns)))
1996-01 t/m 2026-07: 367 maanden, 50 actieve fondsen, 6 indexfondsen
weggevallen (te korte historie): ['CGMFX', 'JANSX', 'VMRGX']

Er blijven 367 maanden over, van januari 1996 tot en met juli 2026, en drie fondsen vallen af omdat hun historie te kort is. De volgende cel schat de alpha van elk fonds tegen het CAPM, het driefactormodel en het model van Carhart.

models = {"CAPM": ["Mkt-RF"], "FF3": ["Mkt-RF", "SMB", "HML"],
          "Carhart": ["Mkt-RF", "SMB", "HML", "Mom"]}
Y_act = excess[active_cols].to_numpy()
ew_active = Y_act.mean(axis=1, keepdims=True)

rows = {}
for name, cols in models.items():
    F = fac[cols].to_numpy()
    a_act, t_act, _ = alpha_tstats(Y_act, F)
    a_ew, t_ew, _ = alpha_tstats(ew_active, F)
    a_idx, t_idx, _ = alpha_tstats(excess[list(index_funds)].to_numpy(), F)
    rows[name] = {
        "actief: gem. alpha (%/jr)": 1200 * a_act.mean(),
        "actief: mediaan t": np.median(t_act),
        "actief: aandeel t > 2": np.mean(t_act > 2),
        "actief: aandeel t < -2": np.mean(t_act < -2),
        "gelijkgewogen actief: alpha (%/jr)": 1200 * a_ew[0],
        "gelijkgewogen actief: t": t_ew[0],
        **{f"{index_funds[k]}: alpha (%/jr)": 1200 * v for k, v in zip(index_funds, a_idx)},
        "VFINX: t": t_idx[0],
    }
performance = pd.DataFrame(rows)
performance.round(2)
Loading...

Het totale-marktindexfonds VTSMX heeft de verwachte alpha van −0,19%-0{,}19\% per jaar tegen het CAPM. De small-cap- en extended-marketfondsen blijven ruim één procent per jaar achter bij de factormodellen, terwijl het groei-indexfonds er juist boven ligt. Dat komt niet door slechte of goede beheerders, maar doordat SMB en HML papieren portefeuilles zonder kosten zijn die niemand kan kopen. Een fonds dat positief op die factoren laadt, lijkt daardoor achter te blijven, en een groeifonds met een negatieve HML-lading lijkt om dezelfde reden te winnen. Daarom meten Berk & Binsbergen (2015) vaardigheid tegen indexfondsen.

De 50 overlevende actieve fondsen doen het beter dan de fondsen van Jensen. Hun gelijkgewogen portefeuille heeft een Carhart-alpha van 0,53%0{,}53\% per jaar, niet significant, en 14% van de fondsen haalt t>2t > 2 (de tabel aan het eind zet de getallen naast de originelen). Dat ligt ruim anderhalf procentpunt boven de −1,1%-1{,}1\% die Jensen na kosten vond, en zo groot kan het effect van selectie op overleven dus zijn. De bootstrap hieronder gebruikt 2000 trekkingen en percentielen tussen het 5e en het 95e, omdat 50 fondsen geen staart hebben.

F_c4 = fac[models["Carhart"]].to_numpy()
t_real, t_real_boot = bootstrap_t(Y_act, F_c4, 2000, rng)
compare_percentiles(t_real, t_real_boot, [5, 10, 25, 50, 75, 90, 95]).round(2)
Loading...

Vanaf het 25e percentiel liggen de werkelijke tt-waarden boven het gemiddelde van de simulaties, en de mediaan ligt hoger dan in 95% van de trekkingen. In de figuur gaat het om de zwarte lijn van de werkelijke fondsen, die als geheel rechts van het histogram zonder vaardigheid ligt.

Source
fig, ax = plt.subplots()
bins = np.linspace(-5, 5, 41)
ax.hist(t_real_boot.ravel(), bins=bins, density=True, alpha=0.5,
        label="bootstrap, alle alpha's nul")
ax.hist(t_real, bins=bins, density=True, histtype="step", lw=2, color="black",
        label=f"werkelijk, {len(active_cols)} actieve fondsen")
ax.set_xlabel("$t$-waarde van de Carhart-alpha")
ax.set_ylabel("Dichtheid")
ax.set_title("Overlevende actieve fondsen tegen een bootstrap zonder vaardigheid, 1996-2026")
ax.legend()
plt.show()
<Figure size 990x550 with 1 Axes>
<Figure size 990x550 with 1 Axes>

Figure 3:De hele verdeling van werkelijke tt-waarden ligt rechts van de bootstrap zonder vaardigheid, met een mediaan van 0,740{,}74 tegen −0,03-0{,}03 in de simulaties. Zo ziet een steekproef eruit die op succes is geselecteerd, en dat hoeft geen vaardigheid te zijn.

Voor de persistentie schatten we elk jaar van 1999 tot en met 2025 de Carhart-alpha van elk actief fonds over de voorgaande 36 maanden. Daarna delen we de fondsen in drie groepen. Het abnormale rendement in het jaar erna meten we met de bèta’s uit de vormingsperiode, zodat er in de evaluatie niets wordt geschat.

years = range(1999, 2026)
spread, top_alpha, bottom_alpha, rank_corr_real = [], [], [], []
for year in years:
    form = (excess.index >= f"{year - 3}-01-01") & (excess.index < f"{year}-01-01")
    evaluate = (excess.index >= f"{year}-01-01") & (excess.index < f"{year + 1}-01-01")
    a_form, _, betas = alpha_tstats(Y_act[form], F_c4[form])
    abnormal = 12 * (Y_act[evaluate] - F_c4[evaluate] @ betas).mean(axis=0)
    ranks = pd.qcut(a_form, 3, labels=False)
    top_alpha.append(abnormal[ranks == 2].mean())
    bottom_alpha.append(abnormal[ranks == 0].mean())
    spread.append(top_alpha[-1] - bottom_alpha[-1])
    rank_corr_real.append(stats.spearmanr(a_form, abnormal)[0])

spread = np.array(spread)
pd.DataFrame({
    "gemiddelde": [100 * np.mean(top_alpha), 100 * np.mean(bottom_alpha), 100 * spread.mean(),
                   np.mean(rank_corr_real)],
    "SE": [100 * np.std(top_alpha, ddof=1) / np.sqrt(len(spread)),
           100 * np.std(bottom_alpha, ddof=1) / np.sqrt(len(spread)),
           100 * spread.std(ddof=1) / np.sqrt(len(spread)),
           np.std(rank_corr_real, ddof=1) / np.sqrt(len(spread))],
}, index=["hoogste terciel: alpha volgend jaar (%)", "laagste terciel: alpha volgend jaar (%)",
          "verschil hoog - laag (%)", "rangcorrelatie vorming-evaluatie"]).assign(
    t=lambda d: d["gemiddelde"] / d["SE"]).round(2)
Loading...

Het beste derde van de fondsen haalt het jaar daarna gemiddeld 0,13%0{,}13\% alpha en het slechtste derde −0,37%-0{,}37\%. Het verschil van 0,510{,}51 procentpunt heeft over 27 jaar een standaardfout van 0,590{,}59 (t=0,86t = 0{,}86), zodat er geen persistentie te zien is. Dat bewijst niet dat ze ontbreekt, want bij deze spreiding zou een verschil van een half procent per jaar pas na ongeveer 145 jaar een tt-waarde van 2 halen.

grootheidorigineelhier
gemiddelde nettoalpha actieve fondsen−1,1%-1{,}1\% per jaar (Jensen)+0,53%+0{,}53\%, t=1,36t = 1{,}36
alpha totale-marktindexfondsklein en negatief (verwachting)−0,19%-0{,}19\%
mediaan t(α^)t(\hat\alpha) tegen bootstrapweinig fondsen dekken hun kosten (Fama en French)0,740{,}74 tegen −0,03-0{,}03
persistentie, hoogste min laagste groepalleen de slechtste fondsen (Carhart)0,510{,}51 procentpunt, t=0,86t = 0{,}86

Gedeeltelijk geslaagd. Het indexfonds en de persistentie gedragen zich zoals verwacht. Het niveau van de alpha en de verschuiving in de bootstrap wijken af van de originelen, maar in de richting die de selectie op overleven meebrengt. Juist daardoor kunnen deze data de conclusie van Fama en French niet toetsen, want een steekproef van overlevenden laat geen fondsen zien die hun kosten niet terugverdienden.

7Wat er brak, en wat daarna kwam

Wat het model verklaart. Sharpes rekenkunde en het model van Berk en Green verklaren samen drie hardnekkige feiten over de beleggingsindustrie. De gemiddelde actieve dollar blijft na kosten achter, winnaars blijven geen winnaars, en toch stroomt geld achter winnaars aan. Ze verklaren ook de sociologie, want de oprichters van DFA en AQR hoefden de rekenkunde niet te weerleggen om een bedrijf te bouwen. De rekenkunde zegt immers niets over wie wint, maar alles over wat het kost.

Waar het breekt. Het breekt bij het meten van vaardigheid zelf. In onze simulatie met 10% vaardige fondsen vond de beste schatter met twintig jaar data er gemiddeld 6%. Onze echte steekproef levert een bootstrap die op vaardigheid lijkt, maar door de selectie op overleven valt die uitkomst niet te interpreteren. Barras, Scaillet en Wermers zagen het aandeel vaardige fondsen tussen 1996 en 2006 naar bijna nul dalen. Of de vaardigheid verdween of de toets zijn onderscheidend vermogen verloor, laten de data niet zien.

Risico of vergissing? In de Chicago-lezing is kapitaal net zo concurrerend als informatie. Vaardigheid bestaat dan en wordt beloond in vergoedingen, en DFA en AQR verkopen een vergoeding voor risico. In de Yale-lezing jagen beleggers rendementen na die ze niet kunnen beoordelen. Dan zijn de premies achter DFA en AQR vergissingen van anderen, en overleven dure fondsen omdat hun klanten de rekenkunde niet kennen. Data over de redenen waarom beleggers hun geld verplaatsen, zouden de lezingen kunnen scheiden, maar die data zijn omstreden. Santa-Clara’s praktijkles past op beide: wie een indexfonds koopt, draagt risico met een premie, en wie een actief fonds koopt, denkt iets te weten wat de prijs niet weet.

Wat er daarna kwam. Elke alpha in dit college is gemeten tegen een factormodel, en de keuze van dat model bepaalde het antwoord. Het volgende college, Cochrane: p = E[mx], laat zien dat elk zulk model een uitspraak is over één stochastische discontofactor mm (SDF, de factor waarmee alle payoffs worden verdisconteerd).

8Oefeningen

Solution to Exercise 1

Pas Proposition 1 toe op de actieve beleggers samen. Hun vermogensgewogen alpha is nul, dus 0,4×(−2%)+0,3 aF=00{,}4 \times (-2\%) + 0{,}3\, a_F = 0 en aF=0,8/0,3=2,67%a_F = 0{,}8/0{,}3 = 2{,}67\%. Na kosten haalt de fondsbelegger 2,67−1=1,67%2{,}67 - 1 = 1{,}67\% boven de markt, tegen −0,1%-0{,}1\% voor de indexbelegger, een voorsprong van 1,771{,}77 procentpunt. Worden de particulieren passief, dan bestaat A\mathcal{A} alleen uit fondsen, en zegt de propositie dat hun gewogen bruto alpha nul is.

w_index, w_funds, w_retail = 0.30, 0.30, 0.40
alpha_retail = -0.02
alpha_funds = -w_retail * alpha_retail / w_funds
print(f"bruto alpha fondsen          : {alpha_funds:.4%}")
print(f"netto voorsprong op de index : {(alpha_funds - 0.01) - (-0.001):.4%}")
bruto alpha fondsen          : 2.6667%
netto voorsprong op de index : 1.7667%

De rekenkunde verbiedt dus niet dat fondsen winnen, maar zegt wie er dan verliest. Dat het in de data meestal de fondsbeleggers zijn, is een empirisch feit en geen stelling.

Solution to Exercise 2

(1) Uit C′(qa)=2bqa=ϕtC'(q_a) = 2bq_a = \phi_t volgt qa=ϕt/(2b)q_a = \phi_t/(2b). De bindende voorwaarde van de belegger geeft fqt=ϕtqa−bqa2=ϕt2/(2b)−ϕt2/(4b)=ϕt2/(4b)f q_t = \phi_t q_a - b q_a^2 = \phi_t^2/(2b) - \phi_t^2/(4b) = \phi_t^2/(4b). De indexpositie qt−qa=ϕt(ϕt−2f)/(4bf)q_t - q_a = \phi_t(\phi_t - 2f)/(4bf) is niet negatief als en slechts als ϕt≥2f\phi_t \geq 2f.

(2) Met τ=1/0,012=10 000\tau = 1/0{,}01^2 = 10\,000 en ω=1/0,052=400\omega = 1/0{,}05^2 = 400 is ϕ1=(10 000×0,03+400×0,08)/10 400=3,19%\phi_1 = (10\,000 \times 0{,}03 + 400 \times 0{,}08)/10\,400 = 3{,}19\%.

b_bg, f_bg, phi0, eta, sigma, R1 = 0.005, 0.01, 0.03, 0.01, 0.05, 0.08
gamma_p, omega_p = 1 / eta**2, 1 / sigma**2
phi1 = (gamma_p * phi0 + omega_p * R1) / (gamma_p + omega_p)
q0, q1 = phi0**2 / (4 * b_bg * f_bg), phi1**2 / (4 * b_bg * f_bg)
print(f"phi_1 = {phi1:.4%}, q_0 = {q0:.3f} mld, q_1 = {q1:.3f} mld, instroom = {q1 / q0 - 1:.1%}")
phi_1 = 3.1923%, q_0 = 4.500 mld, q_1 = 5.095 mld, instroom = 13.2%

(3) Het verwachte rendement is nul, omdat de instroom de omvang precies zo zet dat E1[r2]=0\E_1[r_2] = 0. Een rendement van vijf procentpunt boven de verwachting verhoogt de geschatte vaardigheid met 0,19 procentpunt, en het fonds groeit van 4,5 naar 5,1 miljard dollar. Daarna is het fonds weer gewoon. Geld dat rendementen najaagt, kan dus rationeel zijn en toch niets opleveren.

Solution to Exercise 3
df_real = len(sample) - 5
pi0_r, pim_r, pip_r = fdr_proportions(t_real, df=df_real)
bh_real = benjamini_hochberg(stats.t.sf(t_real, df_real), q=0.10)
se_2000 = pi_plus_draws[480].std(ddof=1)
print(f"pi0 = {pi0_r:.2f}, pi- = {pim_r:.2f}, pi+ = {pip_r:.2f}")
print(f"BH-ontdekkingen (q = 10%): {bh_real.sum()} van {len(t_real)}")
print(f"SE pi+ bij 2000 fondsen (40 jaar): {se_2000:.3f}; "
      f"geschaald naar {len(t_real)} fondsen: {se_2000 * np.sqrt(2000 / len(t_real)):.3f}")
pi0 = 0.60, pi- = 0.02, pi+ = 0.18
BH-ontdekkingen (q = 10%): 0 van 50
SE pi+ bij 2000 fondsen (40 jaar): 0.007; geschaald naar 50 fondsen: 0.046

Op de overlevenden geeft de schatter π^0=0,60\hat\pi_0 = 0{,}60 en π^A+=0,18\hat\pi_A^+ = 0{,}18, maar Benjamini-Hochberg vindt geen enkel vaardig fonds. De standaardfout van π^A+\hat\pi_A^+ is bij 50 fondsen ongeveer 0,050{,}05, zes keer zo groot als bij 2000 fondsen, en de steekproef is bovendien op succes geselecteerd. Een geschat aandeel vaardige fondsen betekent daarom alleen iets in een groot universum zonder survivorship bias, en juist die data ontbreken hier.

References
  1. Jensen, M. C. (1968). The Performance of Mutual Funds in the Period 1945–1964. The Journal of Finance, 23(2), 389–416. 10.1111/j.1540-6261.1968.tb00815.x
  2. Sharpe, W. F. (1991). The Arithmetic of Active Management. Financial Analysts Journal, 47(1), 7–9. 10.2469/faj.v47.n1.7
  3. Santa-Clara, P. (2026). What I Learned About Asset Pricing. LinkedIn post. https://www.linkedin.com/pulse/what-i-learned-asset-pricing-pedro-santa-clara-apjce/
  4. Berk, J. B., & Green, R. C. (2004). Mutual Fund Flows and Performance in Rational Markets. Journal of Political Economy, 112(6), 1269–1295. 10.1086/424739
  5. Fama, E. F., & French, K. R. (2010). Luck versus Skill in the Cross-Section of Mutual Fund Returns. Journal of Finance, 65(5), 1915–1947. 10.1111/j.1540-6261.2010.01598.x
  6. Barras, L., Scaillet, O., & Wermers, R. (2010). False Discoveries in Mutual Fund Performance: Measuring Luck in Estimated Alphas. The Journal of Finance, 65(1), 179–216. 10.1111/j.1540-6261.2009.01527.x
  7. Investment Company Institute. (2020). 2020 Investment Company Fact Book. 60th edition. https://www.ici.org/system/files/attachments/pdf/2020_factbook.pdf
  8. Barber, B. M., & Odean, T. (2000). Trading Is Hazardous to Your Wealth: The Common Stock Investment Performance of Individual Investors. The Journal of Finance, 55(2), 773–806. 10.1111/0022-1082.00226
  9. French, K. R. (2008). Presidential Address: The Cost of Active Investing. The Journal of Finance, 63(4), 1537–1573. 10.1111/j.1540-6261.2008.01368.x
  10. Carhart, M. M. (1997). On Persistence in Mutual Fund Performance. The Journal of Finance, 52(1), 57–82. 10.1111/j.1540-6261.1997.tb03808.x
  11. Jegadeesh, N., & Titman, S. (1993). Returns to Buying Winners and Selling Losers: Implications for Stock Market Efficiency. The Journal of Finance, 48(1), 65–91. 10.1111/j.1540-6261.1993.tb04702.x
  12. Berk, J. B., & van Binsbergen, J. H. (2015). Measuring Skill in the Mutual Fund Industry. Journal of Financial Economics, 118(1), 1–20. 10.1016/j.jfineco.2015.05.002
  13. Berk, J. B., & van Binsbergen, J. H. (2012). Measuring Managerial Skill in the Mutual Fund Industry (NBER Working Paper No. 18184). National Bureau of Economic Research. https://www.nber.org/papers/w18184
  14. Fama, E. F., & French, K. R. (1993). Common Risk Factors in the Returns on Stocks and Bonds. Journal of Financial Economics, 33(1), 3–56. 10.1016/0304-405X(93)90023-5
  15. Benjamini, Y., & Hochberg, Y. (1995). Controlling the False Discovery Rate: A Practical and Powerful Approach to Multiple Testing. Journal of the Royal Statistical Society: Series B (Methodological), 57(1), 289–300. 10.1111/j.2517-6161.1995.tb02031.x

Deze onafhankelijke site is niet verbonden aan of onderschreven door QuantEcon. De vormgeving is gebaseerd op het MIT-gelicentieerde QuantEcon MyST-thema. Zie THIRD_PARTY_NOTICES.md voor de licentie-informatie.