補間処理(その1)

線形補間

 金融のデータを取り扱っていると頻繁にデータが欠測している場合に遭遇する。高度な手法では時系列モデルやベイズ推定などの手法を使って推定するらしいが、普通は前後のデータから補間して推定するだろう。数学的な補間処理の方法はいくつもあるだろうが、基本的に利用するのは以下で紹介する線形補間スプライン補間であり、この2つを使いこなせればほとんどの場合で困ることはないと考えられる。

 これは有限個の時点\(\small t_0,t_1,\cdots,t_{n-1}(t_0<t_1<\cdots<t_{n-1})\)の観測値\(\small x_0,x_1,\cdots,x_{n-1}\)が与えられた場合に、任意の時点に対応する値\(\small x(t)\)を求める問題として定式化できる。線形補間は$$\small x(t) = \alpha(t) x_{i-1} + (1-\alpha(t)) x_{i}, \quad t_{i-1} \leq t < t_i$$と補間する方法であり、​\(\small \alpha\)は時間について加重平均をとり、\(\small \alpha(t) = \frac{t_i-t}{t_i-t_{i-1}}\)​とおけばよい。これで、すべての​\(\small t_i\)について​\(\small x(t_i) = x_i\)が成り立ち、\(\small x(t)\)は与えられた点をすべて通る補間関数となる。\(\small \alpha\)を消去して$$\small x(t) = x_{i-1} + \frac{x_{i}-x_{i-1}}{t_{i}-t_{i-1}} (t-t_{i-1}), \quad t_{i-1} \leq t < t_i$$と書いた方が直感的に理解しやすいだろう。これは各区間\(\small [t_{i-1},t_{i})\)の時間に関する観測値の1次微分$$\small x’_i=\frac{x_i-x_{i-1}}{t_i-t_{i-1}}, \quad i=1,2,\cdots,n-1$$が一定であると仮定して補間している処理であることがわかるだろう。

スプライン補間

 やってみるとわかることだが、線形補間による補間を行うと大抵のデータはカクカクした動きになって見栄えが良くない。これは1次の導関数が連続関数でないことに原因がある。これを解消するには観測時点\(\small t_0,t_1,\cdots,t_{n-1}\)の1次微分の値\(\small x’_0,x’_1,\cdots,x’_{n-1}\)があるとして、各時点の傾きを線形補間で連続な関数にすればよいだろう。要するに、$$\small x'(t) = x’_{i-1} + \frac{x’_{i}-x’_{i-1}}{t_{i}-t_{i-1}} (t-t_{i-1}) \qquad \qquad \qquad \qquad \qquad \qquad \qquad \;\; \\ \small x(t) = x_{i-1} + \int_{t_{i-1}}^t x'(s) ds \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \quad \; \\ \small = x_{i-1} + x’_{i-1}(t-t_{i-1}) + \frac{1}{2}\frac{x’_{i}-x’_{i-1}}{t_{i}-t_{i-1}}(t-t_{i-1})^2, \quad t_{i-1} \leq t < t_i$$と書きたいわけである。\(\small t=t_i\)のとき\(\small x(t_i) = x_i\)で連続関数でなければならないので、$$\small \frac{x_i-x_{i-1}}{t_i-t_{i-1}} = \frac{1}{2}(x’_{i}+x’_{i-1}), \quad i = 1,2,\cdots,n-1$$が成り立つ必要がある。左辺は観測できるデータであるから、この条件から\(\small x’_0,x’_1,\cdots,x’_{n-1}\)を求めてやればよいことがわかる。ただし、求める値が\(\small n\)個であるのに対して方程式が\(\small n-1\)個しかない。わかりやすい仮定として\(\small x’_0=x’_1\)とおけば、この値は手前の方から順番に求めることができる。このように手前から連立方程式の解を計算することはしばしばブートストラップ法(Bootstrapping)といわれる。手前から穴を埋めていくのが靴ひもを順番に通していくことと似ているためだそうである。このような補間計算方法はスプライン補間といわれており、ここで紹介した方法は2次関数で補間しているので2次スプライン補間という。

実際のスプライン補間

 実をいうと2次スプライン補間は使われることはほとんどないと思われる。現実に利用されるのは3次関数で補間する3次スプライン補間(キュービックスプライン補間)がほとんどである。おそらく滑らかに補間するという点では次数が多い関数の方が有利であるためであるが、4次以上になるとそれほどメリットが無くなるのと同時に計算のための仮定を増やさなければならないため、3次スプライン補間が最も利用されているのであろうと考えられる。3次スプライン補間は2次の導関数を$$\small x’’(t) = x’’_{i-1} + \frac{x’’_{i}-x’’_{i-1}}{t_{i}-t_{i-1}} (t-t_{i-1}), \quad t_{i-1} \leq t < t_i$$と定義して、原データ、1次の導関数が連続関数になるという条件を課して、2次微分の値\(\small x’’_0,x’’_1,\cdots,x’’_{n-1}\)を計算する方法である。計算がテクニカルなのでページを変えて説明する。実用上線形補間で困ることはほとんどないが滑らかな補間値が欲しい場合はスプライン補間を用いるとよいだろう。このブログでスプライン補間と言っている個所はすべて3次スプライン補間のことを指していると考えてよい。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする