replication study : vancouver stock exchange index (rounding error 1983)
丸め誤差の問題例として、Vancouver Stock Exchange(VSE)のインデックスの話を知りました。
概要は以下のリンクのpdfファイルの通りですが、インデックスを計算するときの処理の影響で、本来であれば1100ポイントぐらいのはずが、520ポイントとして計算されててしまっていたという問題です。
https://www5.in.tum.de/~huckle/Vancouv.pdf
原因としては、インデックスを計算するときに小数点4桁目を切り捨てていたことが挙げられていて、これが22ヶ月間続いたことで小さな誤差が累積して上記のような多きな乖離となったとのことです。
ただ、個別の株価は正しく計算されているのに、インデックス計算時の丸め誤差だけで、インデックスが下がり続けることがありえるのか疑問に思いました。
関連の文書を探してみましたが、「切り捨て処理が原因」程度しか書かれておらず、どのようにインデックスを計算していたのかが不明であったため、どのような計算をすれば丸め誤差の影響が累積してインデックスが下がり続けるのか、検証してみました。
結論から言うとわかりませんでした。ただ、平均の取り方によってインデックスが下がり続けることがありえることがわかったため、メモとして残しておきます。
検証用の設定
話を単純にするために以下の設定としました。
- 株価は2種類(A, B)
- 株価が変動するのはAのみ
- AとBはいずれも100円からスタートする
- Aの株価は+0.0006円と-0.0006円の変動を繰り返す
- A, Bいずれの株価も実際の値は小数点以下4桁まで計算されており、正確に計算されている。
- インデックスを計算するときのみ、A, Bの両方の株価の小数点4桁目が切り捨てられる。
- インデックス自体も小数点以下4桁目を切り捨てる。
- インデックスは株価の単純平均を取る。
インデックスが下がらないケース
インデックスの計算時に、毎回A, Bの株価の平均を取ると、インデックスは継続してさがりませんでした。
インデックスが下がるケース
インデックスを計算する際に、変化した株価の分のみインデックスを調整してみました。
この処理は、1つの銘柄が変わったときに全ての平均を取り直すと計算量が多くなることを避けるために取られる可能性があると考えます。
(実際は1500銘柄ほどのため、1つの銘柄の価格変化に対して1,500銘柄分の平均を取り直すより、1銘柄の影響を調整したほうが計算量は少ないはずです。)
この場合だと、インデックスを計算するときに、前回の小数点以下4桁目の切捨ての影響が累積されます。ただ、この場合、本質的な問題は平均の取り方の方だと思います。
補足
実際のインデックスの計算方法は不明のため、上記はあくまで私の想像です。また、この場合、切捨て処理が問題というよりは平均の取り方が問題のため、実際のインデックスの計算方法とは違うのではないかと思います。
いずれにしても、思考実験として、平均の取り方でもインデックスが下がり続ける可能性があるということがわかったので良しとしようと思います。