σμ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 Academyロードマップスキル
Ctrl K
AO
+1.2k 人の学習者
ログイン参加する ↗
ロードマップスキル
AO
+1.2k 人の学習者
ログイン
  • 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 Academyロードマップスキル
Ctrl K
AO
+1.2k 人の学習者
ログイン参加する ↗
ロードマップスキル
AO
+1.2k 人の学習者
ログイン
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
SciPy スキル›モジュール 1 · 当てはめと探索›トピック 1.4·~50 分中級

最小化と根探し

スキル上の位置モジュール 1/3 · トピック 4/6
1.4 最小化と根探し
—ラボスコア— / 100合計XP—連続日数—

2つの仕事:最も低い点を探す、曲線がゼロを横切る点を探す

scipy.optimize は2種類の問題を解きます。1つ目は関数 f(x)f(x)f(x) の最小化、つまり出力が最も小さくなる入力を探すことです。minimize(f, x0) を呼び、x0 は最初の推測値です。BFGS は fff の勾配に沿って下ります。Nelder-Mead は勾配が要らず、値を比べるだけです。SLSQP は、合計が1になる重みのような境界や制約も扱えます。答えは局所的な最小値、つまり出発した谷の底にすぎず、別の x0 なら別の答えになりえます。必ず res.success を確認してください。

2つ目の問題は根探し、つまり g(x)=0g(x)=0g(x)=0 を解くことです。brentq(g, a, b) は、両端で ggg の符号が逆になる区間(挟み込み)を必要とし、区間を何度も半分にして必ず根を見つけます。nnn 回半分にすると区間の幅は (b−a)/2n(b-a)/2^n(b−a)/2n です。newton(g, x0, fprime) は ggg の傾きを使うのではるかに速いですが、良い出発点が必要で、傾きがほぼ平らだと遠くへ飛ぶことがあります。金融では債券の最終利回りが根です。債券の価格式を市場価格に等しくする利率 yyy のことです。ニュートン法の1歩は y新=y−g(y)/g′(y)y_{\text{新}}=y-g(y)/g'(y)y新​=y−g(y)/g′(y) です。

ynew=y−g(y)g′(y),g(y)=51+y+105(1+y)2−98,width after n halvings=b−a2ny_{\text{new}}=y-\frac{g(y)}{g'(y)},\qquad g(y)=\frac{5}{1+y}+\frac{105}{(1+y)^{2}}-98,\qquad \text{width after }n\text{ halvings}=\frac{b-a}{2^{n}}ynew​=y−g′(y)g(y)​,g(y)=1+y5​+(1+y)2105​−98,width after n halvings=2nb−a​(1)
2年債の利回りある債券は1年後に 555、2年後に 105105105 を支払い、価格は 989898 です。y=6%y=6\%y=6% から始めます。価格式は 98.1798.1798.17 なので g=0.17g=0.17g=0.17、傾きは g′=−5/1.062−210/1.063=−180.8g'=-5/1.06^{2}-210/1.06^{3}=-180.8g′=−5/1.062−210/1.063=−180.8 です。ニュートン法の1歩で y=0.06−0.17/(−180.8)=6.092%y=0.06-0.17/(-180.8)=6.092\%y=0.06−0.17/(−180.8)=6.092% となり、区間 [0,0.5][0,0.5][0,0.5] の brentq は根 6.0923%6.0923\%6.0923% を確認します。区間 [0,1][0,1][0,1] の二分法で誤差を 0.0010.0010.001 以内にするには 2n≥10002^{n}\ge10002n≥1000 なので n=10n=10n=10 回です。最小化の例として、ボラティリティが 202020 と 101010、相関が 0.20.20.2 の2資産の共分散は 404040 で、最小分散の第1資産の重みは (100−40)/(400+100−80)=0.143(100-40)/(400+100-80)=0.143(100−40)/(400+100−80)=0.143 です。実データでは、2005年2月からの 5,4045{,}4045,404 日で、SPYとTLTの年率ボラティリティは 19.0%19.0\%19.0% と 14.6%14.6\%14.6%、相関は −0.30-0.30−0.30 です。最小分散のSPYの重みは 40%40\%40% で、ボラティリティは 9.7%9.7\%9.7% になります。谷が2つある関数 x4−3x2+xx^{4}-3x^{2}+xx4−3x2+x では、minimize は x0=2x_0=2x0​=2 から 1.131.131.13、x0=−2x_0=-2x0​=−2 から −1.30-1.30−1.30(より低い方)で止まります。
  • 最小化か求解か:minimize は低い点を、brentq と newton は関数がゼロになる点を探す。
  • 挟み込みは保証:符号が違えば brentq は必ず収束し、newton は速いが良い出発点が要る。
  • 最小値は局所的かもしれない:複数の出発点を試し、res.x を信じる前に res.success を読む。

ラボ:採点される内容

  • ニュートン法の1歩15点
  • 二分法の分割回数10点
  • 最小分散の重み15点
  • 仕事ごとの適切な道具15点
  • インプライド・ボラティリティの手順10点
  • 局所的かもしれない最小値10点
  • なぜ挟み込みか、なぜニュートン法は失敗しうるか25点
0/ 7問回答済み
問題
1数値で答える15点未回答

上の債券で、y=0.06y=0.06y=0.06 のとき g=0.1666g=0.1666g=0.1666、g′=−180.77g'=-180.77g′=−180.77 です。新しい推測値 y−g/g′y-g/g'y−g/g′ は何%ですか。小数第3位まで答えてください。

y=y =y=許容:± 0.003
2数値で答える10点未回答

根を区間 [0,1][0,1][0,1] で挟み込みます。区間の幅を 0.0010.0010.001 以下にするには、何回 nnn 半分にする必要がありますか。つまり 2n≥10002^{n}\ge10002n≥1000 です。

n=n =n=許容:± 0.01
3数値で答える15点未回答

2つの資産のボラティリティは 202020 と 101010、共分散は 404040 です。分散を最小にする第1資産の重みは w=(σb2−c)/(σa2+σb2−2c)w=(\sigma_b^{2}-c)/(\sigma_a^{2}+\sigma_b^{2}-2c)w=(σb2​−c)/(σa2​+σb2​−2c) です。www はいくつですか。小数第3位まで答えてください。

w=w =w=許容:± 0.002
4対応づけ15点未回答

各道具を、最も合う状況に結び付けてください。

左の各項目に対応するものを選んでください。

brentq
newton
minimize (SLSQP)
minimize (Nelder-Mead)
5手順を並べ替える10点未回答

オプション価格からインプライド・ボラティリティを求める手順を並べ替えてください。

ドラッグして並べ替えます。または項目にフォーカスし、スペースで持ち上げ、矢印キーで移動、スペースで置きます。

  1. 1答えでオプションを再評価して確かめる
  2. 2挟み込み区間で brentq を呼ぶ
  3. 3誤差の符号が逆になる低いボラと高いボラを選ぶ
  4. 4価格誤差をボラティリティの関数として書く
6選択10点未回答

2つの谷がある曲線で minimize を x0=2x_0=2x0​=2 から始めたところ、success=True で x=1.13x=1.13x=1.13 が返りました。もっと深い谷があると疑います。次の最善の一手は何ですか。

7言葉で説明する25点未回答

brentq が符号の逆な2点を求める理由と、ニュートン法が速いのに失敗しうる理由を、1〜2文で説明してください。

数学モードキーボードまたは LaTeX で入力問題1/7 · Ctrl ⏎ で確認

コードを実行するにはログインしてください。

レクチャーはすべて無料で読めます。コードの実行、テスト、ラボの提出にはアカウントの作成かログインが必要です。

  • ブラウザ内IDEとbashターミナル。インストール不要
  • 即時採点、XP、スキルでの現在地
アカウントを作成ログイン
または
GitHubで続ける