σμ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 AcademyHojas de rutaRutas
Ctrl K
AO
+1,2 k estudiantes
Iniciar sesiónUnirse ↗
Hojas de rutaRutas
AO
+1,2 k estudiantes
Iniciar sesión
  • 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 AcademyHojas de rutaRutas
Ctrl K
AO
+1,2 k estudiantes
Iniciar sesiónUnirse ↗
Hojas de rutaRutas
AO
+1,2 k estudiantes
Iniciar sesión
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
Ruta de SciPy›Módulo 1 · Ajustar y encontrar›Tema 1.6·~50 minIntermedio

Mínimos cuadrados y ajuste de curvas

Posición en la rutaMódulo 1 de 3 · Tema 6 de 6
1.6 Mínimos cuadrados y ajuste de curvas
—Puntuación del lab— / 100XP total—Racha—

Ajustar una curva reduciendo los errores

Muchos modelos son curvas con pocos parámetros, y ajustar significa elegir los parámetros que acercan la curva a los datos. scipy.optimize.least_squares(fun, x0) lo hace. Usted escribe fun(p), que devuelve el vector de residuos, uno por dato, donde un residuo es el valor del modelo menos el valor observado. La función minimiza entonces el coste 12∑ri2\tfrac12\sum r_i^221​∑ri2​. Parte de su estimación x0 y avanza con el jacobiano JJJ, la tabla de cómo cambia cada residuo cuando cambia cada parámetro. Un paso de Gauss–Newton resuelve J⊤J δ=−J⊤rJ^{\top}J\,\delta=-J^{\top}rJ⊤Jδ=−J⊤r y luego mueve los parámetros en δ\deltaδ. Para un modelo lineal en sus parámetros, un solo paso cae en la respuesta. bounds=(bajo, alto) mantiene los parámetros en un rango razonable. curve_fit es una envoltura más amable que recibe directamente el modelo f(x,paraˊmetros)f(x,\text{parámetros})f(x,paraˊmetros).

Los errores al cuadrado dejan que un punto salvaje domine: un residuo de 101010 cuenta 100100100. Una pérdida robusta crece más despacio para residuos grandes. Con loss='soft_l1' y f_scale=1 la penalización es ρ(z)=2(1+z−1)\rho(z)=2(\sqrt{1+z}-1)ρ(z)=2(1+z​−1), donde zzz es el residuo al cuadrado. El ajuste de curvas de tipos es el uso clásico. La curva de Nelson–Siegel es 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−τ/λ). Tiene un nivel de largo plazo β0\beta_0β0​, una pendiente β1\beta_1β1​, una joroba β2\beta_2β2​ y una longitud de decaimiento λ\lambdaλ en años, y cuatro números describen toda la curva. Tras el ajuste, el nivel de ruido se estima con s=SSE/(n−p)s=\sqrt{\mathrm{SSE}/(n-p)}s=SSE/(n−p)​, con nnn puntos y ppp parámetros.

δ=−(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)
Una recta por el origenAjustemos y=a xy=a\,xy=ax a los puntos (1;2,1)(1;2{,}1)(1;2,1), (2;3,9)(2;3{,}9)(2;3,9) y (3;6,2)(3;6{,}2)(3;6,2). Partamos de a=1a=1a=1. Los residuos son 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) y el jacobiano es J=x=(1;2;3)J=x=(1;2;3)J=x=(1;2;3). Entonces J⊤r=−14,5J^{\top}r=-14{,}5J⊤r=−14,5 y J⊤J=14J^{\top}J=14J⊤J=14, así que δ=14,5/14=1,036\delta=14{,}5/14=1{,}036δ=14,5/14=1,036 y el nuevo valor es a=2,036a=2{,}036a=2,036. Ya es la respuesta, porque el modelo es lineal en aaa. Los residuos en la respuesta son 0,0640{,}0640,064, −0,171-0{,}171−0,171 y 0,0930{,}0930,093, así que el coste es 0,02110{,}02110,0211. Un residuo de 101010 cuesta 100100100 con cuadrados pero solo ρ=18,10\rho=18{,}10ρ=18,10 con soft_l1. Con datos reales, una curva de Nelson–Siegel ajustada con least_squares a los diez rendimientos del Tesoro del 9 de octubre de 2026 (3 meses a 30 años) tiene un nivel de 5,75%5{,}75\%5,75%, una pendiente de −1,52-1{,}52−1,52 (la curva sube con el plazo) y λ=2,7\lambda=2{,}7λ=2,7 años, y se aparta de los rendimientos cotizados solo 7,37{,}37,3 puntos básicos de media y 131313 en el peor caso. Ajustar 444 parámetros a 101010 puntos con SSE=0,54\mathrm{SSE}=0{,}54SSE=0,54 deja n−p=6n-p=6n−p=6 grados de libertad y s=0,54/6=0,30s=\sqrt{0{,}54/6}=0{,}30s=0,54/6​=0,30.
  • Residuos de entrada, parámetros de salida: fun(p) devuelve modelo menos datos y least_squares reduce la suma de cuadrados.
  • Pérdida robusta para atípicos: soft_l1 evita que un punto salvaje arrastre toda la curva.
  • Cuatro números para una curva: Nelson–Siegel resume una curva de tipos con un nivel, una pendiente, una joroba y una longitud de decaimiento.

Lab: qué se califica

  • Una pendiente por el origen10 pts
  • Un paso de Gauss–Newton15 pts
  • Una penalización robusta15 pts
  • El nivel de ruido tras un ajuste10 pts
  • Los argumentos de least_squares10 pts
  • Un flujo de ajuste de curvas10 pts
  • Por qué una pérdida robusta30 pts
0/ 7 respondidos
Ejercicios
1Respuesta numérica10 ptsSin responder

Para y=a xy=a\,xy=ax el mejor aaa es ∑xiyi/∑xi2\sum x_iy_i/\sum x_i^{2}∑xi​yi​/∑xi2​. Con x=(1;2;3)x=(1;2;3)x=(1;2;3) e y=(2,1;3,9;6,2)y=(2{,}1;3{,}9;6{,}2)y=(2,1;3,9;6,2), ¿cuánto vale aaa? Dé tres decimales.

a=a =a=aceptado: ± 0.003
2Respuesta numérica15 ptsSin responder

Parta de a=1a=1a=1. Los residuos son r=(−1,1;−1,9;−3,2)r=(-1{,}1;-1{,}9;-3{,}2)r=(−1,1;−1,9;−3,2) y J=(1;2;3)J=(1;2;3)J=(1;2;3), con J⊤r=−14,5J^{\top}r=-14{,}5J⊤r=−14,5 y J⊤J=14J^{\top}J=14J⊤J=14. ¿Cuánto vale el paso δ=−J⊤r/J⊤J\delta=-J^{\top}r/J^{\top}Jδ=−J⊤r/J⊤J? Dé tres decimales.

d=d =d=aceptado: ± 0.003
3Respuesta numérica15 ptsSin responder

Un residuo de 101010 tiene cuadrado z=100z=100z=100. Con soft_l1 y f_scale=1, la penalización es ρ(z)=2(1+z−1)\rho(z)=2(\sqrt{1+z}-1)ρ(z)=2(1+z​−1). ¿Cuánto vale ρ\rhoρ? Dé dos decimales.

rho=rho =rho=aceptado: ± 0.05
4Respuesta numérica10 ptsSin responder

Una curva de p=4p=4p=4 parámetros se ajusta a n=10n=10n=10 puntos y la suma de cuadrados de los residuos es SSE=0,54\mathrm{SSE}=0{,}54SSE=0,54. ¿Cuánto vale s=SSE/(n−p)s=\sqrt{\mathrm{SSE}/(n-p)}s=SSE/(n−p)​? Dé dos decimales.

s=s =s=aceptado: ± 0.005
5Emparejar10 ptsSin responder

Empareje cada argumento con lo que hace.

Elige la pareja de cada elemento de la izquierda.

fun
x0
bounds
loss
6Ordenar los pasos10 ptsSin responder

Ordene los pasos para ajustar una curva de tipos.

Arrastra para reordenar, o enfoca un elemento, pulsa Espacio para levantarlo, las flechas para moverlo y Espacio para soltarlo.

  1. 1Mirar los residuos y el indicador de éxito
  2. 2Llamar a least_squares con un inicio y límites
  3. 3Elegir el modelo, aquí Nelson–Siegel
  4. 4Escribir una función que devuelva modelo menos datos
7Explicar con palabras30 ptsSin responder

Una mala cotización está lejos de los otros nueve rendimientos. En una o dos frases, explique por qué un ajuste de mínimos cuadrados simple es atraído hacia ella y por qué soft_l1 ayuda.

Modo matemáticasEntrada por teclado o LaTeXEjercicio 1 de 7 · Ctrl ⏎ para comprobar

Inicia sesión para ejecutar tu código.

Todas las clases se pueden leer gratis. Crea una cuenta o inicia sesión para ejecutar código, lanzar las pruebas y enviar este lab.

  • IDE en el navegador con terminal bash — sin instalar nada
  • Corrección instantánea, XP y tu lugar en la ruta
Crear una cuentaIniciar sesión
O
Continuar con GitHub