Une barre d'erreur pour chaque affirmation
Un backtest dit qu'une stratégie a gagné 0,05 % par jour. Compétence ou chance ? Un test d'hypothèse répond par une p-valeur : si la vraie moyenne était nulle, à quelle fréquence un échantillon paraîtrait-il aussi bon ? stats.ttest_1samp(r, 0.0) teste une moyenne, et stats.ttest_ind(a, b, equal_var=False) compare deux actifs sans supposer qu'ils ont la même volatilité (test de Welch, le choix sûr par défaut). stats.jarque_bera(r) vérifie si les rendements sont normaux d'après l'asymétrie et l'aplatissement. Une petite p-valeur est un indice contre l'idée testée, pas la preuve de l'idée qu'on aime. Et un test ne vaut que par ses hypothèses : le test t suppose des queues fines, ce que les rendements quotidiens n'ont pas.
Quand les formules sont douteuses, rééchantillonnez. Le bootstrap tire de nombreux échantillons avec remise dans vos données, recalcule une statistique à chaque fois (la moyenne, un ratio de Sharpe, un quantile) et lit un intervalle dans la dispersion des résultats : stats.bootstrap((r,), stat, method='percentile', random_state=np.random.default_rng(seed)). La statistique doit accepter un argument axis, car SciPy passe un lot entier de rééchantillons d'un coup, et la graine rend la réponse reproductible. Un test de permutation mélange les étiquettes de deux groupes pour voir à quelle fréquence le hasard seul donne un écart aussi grand que celui observé. Enfin, testez 62 actifs au seuil de 5 % et environ trois paraîtront significatifs par pur hasard. stats.false_discovery_control(p) applique la correction de Benjamini–Hochberg et indique quelles découvertes survivent.
- Welch par défaut : ne supposez pas que deux actifs ont la même volatilité.
- Rééchantillonner dans le doute : un bootstrap demande une statistique avec un argument
axiset une graine. - Comptez vos tests : 62 tests à 5 % donnent environ trois fausses découvertes ; corrigez-les.
Lab : ce qui est noté
- La moyenne est-elle nulle ?8 pts
- Deux actifs, deux volatilités8 pts
- Un test de normalité6 pts
- Un intervalle bootstrap18 pts
- Un ratio de Sharpe annualisé8 pts
- Un ratio de Sharpe avec barre d'erreur10 pts
- Un test de permutation14 pts
- Compter les fausses découvertes12 pts
- L'étude complète16 pts