最適化セミナーのご案内

2.19 イールドカーブ推定問題

 イールドカーブとは,償還期間の異なる利回りをもつ債権等について,利回りと償還期間の相関を描いた曲線(縦軸:利回り,横軸:償還期間)のことをいいます.ここでは,この利回りがスポットレート(現時点から将来のある時点まで保有される資産にかかる金利のこと)である場合を対象とします.なお,イールドカーブの形状には順イールド(右上がりの曲線)と逆イールド(右下がりの曲線)があり,前者は短期金利よりも長期金利のほうが高くなることを意味し,後者は逆に短期金利よりも長期金利のほうが低くなることを意味しています.

 以下の例題では,実際の観測点からスポットレートを推定する問題を考え,ひいては,イールドカーブの推定を行います.

例題

 期間(償還期間)が1~10期まであり,各々に対するスポットレート$r_{t}$を用いて,関数Sが

\[S(t;r_{1}, \ldots, r_{t}) \equiv 1/\sum_{i=1}^{t} d_{i}, d_{i} \equiv 1/(1 + 0.01 \cdot r_{i})^{i}\]

のように定義されているとする.観測結果$(t,S(t))$の組

\[(t_{i}, S_{i})\quad i \in \{1,\ldots,60\}\]

が与えられているとき,

\[\sum_{i} \{ S(t_{i}) - S_{i} \}^{2}\]

を最小化するようなスポットレートを推定せよ.

 この問題を定式化すると以下のようになります.

 なお,求めるスポットレートの単位は%(パーセント)とし,非負であるものとします.

集合
$Term$ 期間(償還期間)集合
$Point$ 観測点の集合
 
定数
$tvalue_{i}, i \in Point$ 観測点が何期目か
$Svalue_{i}, i \in Point$ 観測値
 
変数
$r_{t}, t \in Term$ $t$期に対するスポットレート
 
目的関数(最小化)
$\displaystyle \sum_i \{ S(tvalue_i) - Svalue_i \}^2, S(t; r_1, \ldots, r_t) \equiv 1/\sum_{i=1}^t (1/(1 + 0.01 \cdot r_i)^i)$ 理論値と観測値の誤差の二乗和
 
制約条件
$0 \le r_t, \forall t \in Term$ スポットレートの非負条件

 この問題は目的関数が非線形ですので,非線形計画問題になります.

 定式化した結果をSIMPLEで記述すると以下のようになります.

// スポットレートの設定
Set Term(name="期間"); // 期間集合
Term = "1 .. 10";
Element t(set=Term);
Variable r(name="スポットレート", index=t);

// 観測点
Set Point;
Element i(set=Point);
Parameter tvalue(name="tvalue", index=i); // 何期目か
Parameter Svalue(name="Svalue", index=i); // 観測値(S)

// 関数設定
Expression d(index=t);
d[t] = 1 / pow(1+0.01*r[t], t);
// tvalue[i] 期における S の理論値
Expression S(index=i);
S[i] = 1 / sum(d[t], (t, t<=tvalue[i])); // tvalue[i] 期までの和
Expression diff(index=i);
diff[i] = S[i] - Svalue[i];

// 目的関数
Objective err(name="理論値と観測値の誤差の二乗和", type=minimize);
err = sum(pow(diff[i], 2), i);

// 制約条件
0 <= r[t]; // スポットレートの非負条件

// 求解
solve();

// 結果の標準出力
err.val.print();
simple_printf("\n");
r.val.print();

 データファイル(tSvalue.csv)は以下のようになります.

i,tvalue,Svalue
1,1,1.020476
2,1,1.020582
3,1,1.021692
4,1,1.020304
5,1,1.021171
6,1,1.020387
7,2,0.520158
8,2,0.518884
9,2,0.519507
10,2,0.518841
11,2,0.519271
12,2,0.519520
13,3,0.355121
14,3,0.353832
15,3,0.355088
16,3,0.353742
17,3,0.354565
18,3,0.354443
19,4,0.271774
20,4,0.271318
21,4,0.272115
22,4,0.272244
23,4,0.272818
24,4,0.271190
25,5,0.222502
26,5,0.223564
27,5,0.222312
28,5,0.223726
29,5,0.222489
30,5,0.223251
31,6,0.190145
32,6,0.190989
33,6,0.191429
34,6,0.191156
35,6,0.191077
36,6,0.191451
37,7,0.168971
38,7,0.167869
39,7,0.168913
40,7,0.168672
41,7,0.167762
42,7,0.167502
43,8,0.152239
44,8,0.150571
45,8,0.151664
46,8,0.151251
47,8,0.152121
48,8,0.151681
49,9,0.138188
50,9,0.138396
51,9,0.139097
52,9,0.139389
53,9,0.138134
54,9,0.138999
55,10,0.128923
56,10,0.129079
57,10,0.129807
58,10,0.129427
59,10,0.128610
60,10,0.129465

 このモデルを実行すると,以下のような解が得られます.

理論値と観測値の誤差の二乗和=1.55961e-005
スポットレート[1]=2.07687
スポットレート[2]=2.82648
スポットレート[3]=3.7392
スポットレート[4]=3.94733
スポットレート[5]=4.37835
スポットレート[6]=4.91976
スポットレート[7]=5.05778
スポットレート[8]=5.44321
スポットレート[9]=5.5893
スポットレート[10]=6.57376
,[*] = [t]

 

 

上に戻る