σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
uantCraft AcademyFeuilles de routeParcours
Ctrl K
AO
+1,2 k apprenants
ConnexionRejoindre ↗
Feuilles de routeParcours
AO
+1,2 k apprenants
Connexion
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
uantCraft AcademyFeuilles de routeParcours
Ctrl K
AO
+1,2 k apprenants
ConnexionRejoindre ↗
Feuilles de routeParcours
AO
+1,2 k apprenants
Connexion
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
Parcours SciPy›Module 1 · Ajuster et trouver›Sujet 1.6·~50 minIntermédiaire

Moindres carrés et ajustement de courbes

Position dans le parcoursModule 1 sur 3 · Sujet 6 sur 6
1.6 Moindres carrés et ajustement de courbes
—Score du lab— / 100XP total—Série—

Ajuster une courbe en réduisant les erreurs

Beaucoup de modèles sont des courbes à quelques paramètres, et ajuster signifie choisir les paramètres qui rapprochent la courbe des données. scipy.optimize.least_squares(fun, x0) le fait. On écrit fun(p), qui renvoie le vecteur des résidus, un par donnée, où un résidu est la valeur du modèle moins la valeur observée. La fonction minimise alors le coût 12∑ri2\tfrac12\sum r_i^221​∑ri2​. Elle part de votre estimation x0 et avance grâce au jacobien JJJ, le tableau qui dit comment chaque résidu change quand chaque paramètre change. Un pas de Gauss–Newton résout J⊤J δ=−J⊤rJ^{\top}J\,\delta=-J^{\top}rJ⊤Jδ=−J⊤r, puis déplace les paramètres de δ\deltaδ. Pour un modèle linéaire en ses paramètres, un seul pas tombe sur la réponse. bounds=(bas, haut) garde les paramètres dans une plage raisonnable. curve_fit est une enveloppe plus simple qui prend directement le modèle f(x,parameˋtres)f(x,\text{paramètres})f(x,parameˋtres).

Les erreurs au carré laissent un point fou dominer : un résidu de 101010 compte pour 100100100. Une perte robuste croît plus lentement pour les grands résidus. Avec loss='soft_l1' et f_scale=1, la pénalité est ρ(z)=2(1+z−1)\rho(z)=2(\sqrt{1+z}-1)ρ(z)=2(1+z​−1), où zzz est le résidu au carré. L'ajustement des courbes de taux en est l'usage classique. La courbe de Nelson–Siegel est y(τ)=β0+β11−e−τ/λτ/λ+β2(1−e−τ/λτ/λ−e−τ/λ)y(\tau)=\beta_0+\beta_1\frac{1-e^{-\tau/\lambda}}{\tau/\lambda}+\beta_2\Big(\frac{1-e^{-\tau/\lambda}}{\tau/\lambda}-e^{-\tau/\lambda}\Big)y(τ)=β0​+β1​τ/λ1−e−τ/λ​+β2​(τ/λ1−e−τ/λ​−e−τ/λ). Elle a un niveau de long terme β0\beta_0β0​, une pente β1\beta_1β1​, une bosse β2\beta_2β2​ et une longueur de décroissance λ\lambdaλ en années, et quatre nombres décrivent toute la courbe. Après l'ajustement, le niveau de bruit est estimé par s=SSE/(n−p)s=\sqrt{\mathrm{SSE}/(n-p)}s=SSE/(n−p)​, avec nnn points et ppp paramètres.

δ=−(J⊤J)−1J⊤r,cost=12∑ri2,ρ(z)=2(1+z−1),s=SSEn−p\delta=-(J^{\top}J)^{-1}J^{\top}r,\qquad \text{cost}=\tfrac12\sum r_i^{2},\qquad \rho(z)=2(\sqrt{1+z}-1),\qquad s=\sqrt{\frac{\mathrm{SSE}}{n-p}}δ=−(J⊤J)−1J⊤r,cost=21​∑ri2​,ρ(z)=2(1+z​−1),s=n−pSSE​​(1)
Une droite par l'origineAjustons y=a xy=a\,xy=ax aux points (1;2,1)(1;2{,}1)(1;2,1), (2;3,9)(2;3{,}9)(2;3,9) et (3;6,2)(3;6{,}2)(3;6,2). Partons de a=1a=1a=1. Les résidus sont r=ax−y=(−1,1;−1,9;−3,2)r=ax-y=(-1{,}1;-1{,}9;-3{,}2)r=ax−y=(−1,1;−1,9;−3,2) et le jacobien est J=x=(1;2;3)J=x=(1;2;3)J=x=(1;2;3). Alors J⊤r=−14,5J^{\top}r=-14{,}5J⊤r=−14,5 et J⊤J=14J^{\top}J=14J⊤J=14, donc δ=14,5/14=1,036\delta=14{,}5/14=1{,}036δ=14,5/14=1,036 et la nouvelle valeur est a=2,036a=2{,}036a=2,036. C'est déjà la réponse, car le modèle est linéaire en aaa. Les résidus à la réponse sont 0,0640{,}0640,064, −0,171-0{,}171−0,171 et 0,0930{,}0930,093, donc le coût est 0,02110{,}02110,0211. Un résidu de 101010 coûte 100100100 avec les carrés mais seulement ρ=18,10\rho=18{,}10ρ=18,10 avec soft_l1. Sur données réelles, une courbe de Nelson–Siegel ajustée par least_squares aux dix rendements du Trésor du 9 octobre 2026 (3 mois à 30 ans) a un niveau de 5,75%5{,}75\%5,75%, une pente de −1,52-1{,}52−1,52 (la courbe monte avec l'échéance) et λ=2,7\lambda=2{,}7λ=2,7 ans, et s'écarte des rendements cotés de seulement 7,37{,}37,3 points de base en moyenne, et de 131313 au pire. Ajuster 444 paramètres à 101010 points avec SSE=0,54\mathrm{SSE}=0{,}54SSE=0,54 laisse n−p=6n-p=6n−p=6 degrés de liberté et s=0,54/6=0,30s=\sqrt{0{,}54/6}=0{,}30s=0,54/6​=0,30.
  • Résidus en entrée, paramètres en sortie : fun(p) renvoie modèle moins données, et least_squares réduit la somme des carrés.
  • Perte robuste pour les valeurs aberrantes : soft_l1 empêche un point fou d'entraîner toute la courbe.
  • Quatre nombres pour une courbe : Nelson–Siegel résume une courbe de taux par un niveau, une pente, une bosse et une longueur de décroissance.

Lab : ce qui est noté

  • Une pente par l'origine10 pts
  • Un pas de Gauss–Newton15 pts
  • Une pénalité robuste15 pts
  • Le niveau de bruit après un ajustement10 pts
  • Les arguments de least_squares10 pts
  • Un flux d'ajustement de courbe10 pts
  • Pourquoi une perte robuste30 pts
0/ 7 traités
Exercices
1Réponse numérique10 ptsSans réponse

Pour y=a xy=a\,xy=ax, le meilleur aaa est ∑xiyi/∑xi2\sum x_iy_i/\sum x_i^{2}∑xi​yi​/∑xi2​. Avec x=(1;2;3)x=(1;2;3)x=(1;2;3) et y=(2,1;3,9;6,2)y=(2{,}1;3{,}9;6{,}2)y=(2,1;3,9;6,2), que vaut aaa ? Donnez trois décimales.

a=a =a=accepté : ± 0.003
2Réponse numérique15 ptsSans réponse

Partez de a=1a=1a=1. Les résidus sont r=(−1,1;−1,9;−3,2)r=(-1{,}1;-1{,}9;-3{,}2)r=(−1,1;−1,9;−3,2) et J=(1;2;3)J=(1;2;3)J=(1;2;3), avec J⊤r=−14,5J^{\top}r=-14{,}5J⊤r=−14,5 et J⊤J=14J^{\top}J=14J⊤J=14. Que vaut le pas δ=−J⊤r/J⊤J\delta=-J^{\top}r/J^{\top}Jδ=−J⊤r/J⊤J ? Donnez trois décimales.

d=d =d=accepté : ± 0.003
3Réponse numérique15 ptsSans réponse

Un résidu de 101010 a pour carré z=100z=100z=100. Avec soft_l1 et f_scale=1, la pénalité est ρ(z)=2(1+z−1)\rho(z)=2(\sqrt{1+z}-1)ρ(z)=2(1+z​−1). Que vaut ρ\rhoρ ? Donnez deux décimales.

rho=rho =rho=accepté : ± 0.05
4Réponse numérique10 ptsSans réponse

Une courbe à p=4p=4p=4 paramètres est ajustée à n=10n=10n=10 points et la somme des carrés des résidus vaut SSE=0,54\mathrm{SSE}=0{,}54SSE=0,54. Que vaut s=SSE/(n−p)s=\sqrt{\mathrm{SSE}/(n-p)}s=SSE/(n−p)​ ? Donnez deux décimales.

s=s =s=accepté : ± 0.005
5Associer10 ptsSans réponse

Associez chaque argument à son rôle.

Choisissez le partenaire de chaque élément de gauche.

fun
x0
bounds
loss
6Remettre les étapes dans l'ordre10 ptsSans réponse

Mettez dans l'ordre les étapes d'ajustement d'une courbe de taux.

Faites glisser pour réordonner, ou placez le focus sur un élément, Espace pour le soulever, les flèches pour le déplacer et Espace pour le déposer.

  1. 1Regarder les résidus et l'indicateur de succès
  2. 2Appeler least_squares avec un départ et des bornes
  3. 3Choisir le modèle, ici Nelson–Siegel
  4. 4Écrire une fonction renvoyant modèle moins données
7Expliquer avec des mots30 ptsSans réponse

Une mauvaise cotation est loin des neuf autres rendements. En une ou deux phrases, expliquez pourquoi un ajustement des moindres carrés simple est attiré vers elle et pourquoi soft_l1 aide.

Mode mathsSaisie au clavier ou en LaTeXExercice 1 sur 7 · Ctrl ⏎ pour vérifier

Connectez-vous pour exécuter votre code.

Tous les cours sont gratuits à lire. Créez un compte ou connectez-vous pour exécuter du code, lancer les tests et soumettre ce lab.

  • IDE dans le navigateur avec terminal bash — rien à installer
  • Correction instantanée, XP et votre place dans le parcours
Créer un compteSe connecter
OU
Continuer avec GitHub