2008/04/13

保険商品の値段から入院する確率を算出してみた-02

前回の続きです。それでは計算によって求められた確率を載せたいと思います。

結果

結果は以下のとおりです。保険料の金額は「価格.comの保険カテゴリ」で調べました。また、金融工学では通常ローンの利率を国債などの無リスク資産の年率で計算するので、今回はそれに合わせて日本の国債の年利1.37%を用いて計算しました(左上のボタンで全画面表示にできます)。

求められた確率をグラフで表すと以下のようになります。

probability10year

これではちょっと分かりにくいので、1年のうちに入院をする確率に補正してみましょう。10年間ずっと健康である確率をQとします。1年ずっと健康である確率Pがそれぞれ独立であり、すべて等しいと仮定すると、

P = Q^(1/10) (^はべき乗を表す)

となるので、これを用いて計算すると、

probability1year

となりました。40代に入ってから、入院の確率が幾何級数的に増加していますね。

求めた確率は結局何を表しているのか?

前回の記事では2つの保険商品から1つの単純な賭けの問題に変形して確率を求めました。これは商品の値段ともらえる値段の期待値が等しくなる確率、言い換えると、「あなたも会社側も、お互い得も損もしない賭け事となる確率」です。この確率はお互いにとって中立であると言う意味で、金融工学では「リスク中立確率(Risk-neutral Probability)」といいます。

実際はそれだと会社側にとって利益がでないので、本当の確率は会社にとって有利な確率、つまりリスク中立確率よりも低い確率であると推測されます。

問題点

今回の計算では10年健康でいたら1回だけボーナスがもらえるという前提で計算をしたんですが、実際は保険料はそのままで、10年ごとに健康だったらボーナスをもらえるという商品なんです。そのため今回の計算だと、10年以降も健康でいる確率は考慮されていないわけです。これはわざわざ10年後に自分にとってさらに有利になる(保険料は同じなのに、歳を取るごとに入院する確率は増えるため)商品をわざわざ解約していることになるため、今回算出した確率は元からリスク中立でない、高めの確率を算出しているということになります。

で、その10年後の確率も考慮して解くってなるとちょい行列計算とか入って専門的になっちゃうんで、今回はやりません。ひまがあったらやってみます。

2008/04/10

保険商品の値段から入院する確率を算出してみた-01

insurance

photo by wonderferret (creative commons license)

ちょっくら好奇心が沸いたので、金融工学を駆使して医療保険から入院をする確立を算出してみました。専門家にしか分からないような文章にしたらそもそもこれを書く意味がなくなってしまうので、あんま興味ない人や数学にあんま強くない人でもそれなりに楽しめるような内容を目指します。

それでは保険に関する簡単な説明をしたあと、確率のおーまかな算出方法を示して、それによる結果を提示していきます。結果は次回に載せるので、算出方法は興味ないけど結果はちょっと興味あるかもって人は今回は読まないほうがいいかも。

保険商品って?

保険にはダイヤモンドの輝きもなければ、
パソコンの便利さもありません。
けれど目に見えぬこの商品には、
人間の血が通ってます。

ていうCMが流れたことがありますが、結局のところ保険と言うのは金融商品の一種で、誤解を恐れずにいうならば、「自分が不幸になるほうにお金を賭けて、当たったらお金がもらえる商品」です。これによって不幸になったときの損失を減らし、万が一のときに備えることができるわけです。

このように金融商品を用いることで様々なリスクを回避したり低減しようとする手法を、一般に「リスクヘッジ(risk hedge)」といいます。金融工学はこのリスクヘッジ全般に対する理論体系が確立されているので、今回はこれを用いて入院する確率を算出してみます。

確率を算出するのに用いた商品

今回は確率の計算に「アリコのいっしょうおまかせ入院保険」のNAプランとNCプランを用いました。この保険は月払いで保険料を払い、もし

  • 入院したら1日に1万円
  • 手術になったらさらに10万円
  • もし10年間入院しなかったらボーナスとしてNAプランなら10万円、NCプランなら20万円

がもらえる保険です。アリコ側は入院率をどれくらいで見積もっているんでしょうか?

新しく商品を作ってみる

その答えを出すためには、まずこの確率的に複雑な2つの商品をどうにかして単純な賭けの問題に変形する必要があります。そこでためしに次の例を考えてみます。

あなたはこの「自分が不幸になると得をする商品」を自由に売買できたとします。そこであなたはNAプランを1単位売って、NCプランを1単位買うことにしました。そうするとどういうことが起こるでしょうか?

  • あなたはNCプランの保険料からNAプランの保険料を差し引いた分の金額を支払う必要があります。
  • もしあなたが10年のうちに1回でも入院や手術になった場合、アリコ側からはNCプランの給付金がもらえますが、同時にあなたはNAプランの給付金を売った相手に支払う義務を負うことになります。つまりあなたの利益は±0ということになります。
  • もしあなたが10年の間ずっと健康でいるならば、あなたは20万-10万=10万の利益を得ることになります。

これはつまり、2つの商品から「あなたが10年間健康でいれば10万の利益が得られる商品」を作ったことになります。この2つの商品の組み合わせで出来た商品を便宜上『健康プラン』と名づけることにします。

そしてこの健康プランは毎月同じ額の料金を支払う必要があります。これは毎月同額の料金を支払うという点で、車や住宅のローンと同じです。つまりこれは言い換えると「あなたはこの健康プランという商品を分割払いで買っている」ことになります。

いよいよ確率の算出

ここまでくればもうちょいです。あとはこの分割払いで買っている健康プランの値段はいったいどれくらいなのかを算出すればいいわけです。仮にこの健康プランの値段が8万円だったとします。健康だったときにもらえる金額は10万円ですので、この8万円を「10年間ずっと健康である確率の期待値」と見ると、その確率は

10年間ずっと健康である確率 = 8万円 ÷ 10万円 = 80%

となるため、逆に10年間のうち1回でも入院する確率は

100% - 80% = 20%

となるわけです。

長くなったので次回はその計算結果を載せたいと思います。ここまで読んでくれた人ありがとー!

2008/03/29

投資のプロははたしてサルに負けるのか?

絵の内容と文章は関係ないよ!

ちょっと挑戦的なタイトル。現在「金融工学入門」の息抜きとして、投資するまえにこれを見ろ!とクオンツから評判の「ウォール街のランダム・ウォーク」を読みすすめています。まだ読んでいる最中なんですけど、内容的には「バブルに乗って急上昇の株を買う」とか「数日で運用金額を数倍にしようとして、値動きが激しい株を買う」なんていうことはせずに、過去の教訓を学び、金融工学の立場からランダムウォーク理論やファンダメンタル分析を頭に入れて、リスクを考慮した投資をしましょうみたいな感じです。

ちなみに「ランダムウォーク理論」っていうのは端的に言うと、

「微小時間の値動きがブラウン運動となる理論」

もっと分かりやすくいうと、

「すべての値動きはランダムだから過去の値動きから将来の株価の分析やっても意味ないよ!」

っていう、金融工学から出てきた理論です。この理論によると、「目隠しをしたサルに新聞の相場欄めがけてダーツを投げさせ選んだ銘柄でポートフォリオを組んでも、専門家が注意深く選んだポートフォリオとさほど変わりない運用結果が得られる(p.4)」ことになります。

これは正直プロのチャーチストから見れば不快極まりない理論なわけで、もちろん批判も多いのです。個人的には長いスパンでは成り立つとは思いますが、短期ではあんま成り立たない理論だと思います。前の記事であんなこと書いちゃいましたし。

で、話がそれちゃったんですけど、面白いなと思ったのが1960年代あたりにアメリカで起こった「エレクトロニクス・バブル」の紹介です。そのころはとにかく「成長」という言葉がをアメリカ全土をとりまき、特にテクノロジー関係の銘柄はその高い成長率から、非常に高い株価がつけられました。そのため、テクノロジーとは全く関係のない会社も「エレクトロニクス」という名前をつければ株価が急伸するという異常な事態に見舞われました。

社名こそが鍵であった。「トロン」と名のつく会社は、アストロン、ドゥトロン、バルカトロン、トランジトロンなどなど多数であった。また、「ニックス」のつく会社も、サーキトロニクス、スプロニクス、ビデオトロニクスなどがあり、さらに何社か○○エレクトロソニクスという会社もあった。そのきわめつけは、全ての要素を盛り込んだ「パワートロン・ウルトラソニックス」という会社であった。

投資信託業界のリーダーの一つのドレイファス・アンド・カンパニーのジャック・ドレイファスは、この狂気の流行について次のようにコメントした。

「これまで40年間、靴の紐を製造してきた堅実な小規模会社で、株価収益率6倍の会社があったとしよう。この会社の名前を"Shoelace inc."から"Electronics and Silicon Furth-Burners"に変えたとしよう。今日の市場では"Electronics"と"Silicon"の組み合わせは株価収益率15倍に値する。しかし、本当の鍵は"Furth-Burners"という、誰も理解できない言葉に隠されている。誰も分からない言葉と言うのは、総合評価を倍増させる効果がある。ということは、靴紐製造の事業そのものの株価収益率が6倍、"Electronics"と"Silicon"の名前で15倍、合わせて21倍の価値がある。これがさらに"Furth-Burners"という名前のために倍になるため、この新社名の株価収益率は42倍になるのである。」(p.40-41)

完全にバカにしています。ただ、この馬鹿げたバブルを教訓にしたかというとそうでもなく、やっぱり現在でもテクノロジー系統の株価というのはニュースに敏感に反応する傾向があるようです(ライブドアショックとかもありましたし)。テクノロジー関係について良く分かっていない投資家が多いため、そのぶん敏感にならざるを得ないのかもしれません。

もし狙うとしたらニュースがないためにしぼんで割安になっている株を購入して、プラスのニュースが出たときに売るっていう感じでしょうか。あるいは狂気の沙汰となっている状態に空売りして、急落したときに買い戻すとか(諸刃の剣)。

2008/03/21

システムトレードの研究-2

第一回の続きです。今回は初めてのプログラムと言うことなので、平均-分散(mean-variance)理論を利用して簡単なプログラムを組んでみます。

プログラムに用いる言語は何が最適?

  1. MetaTraderなどの独自言語
    単純なプログラムの場合はこれが一番効率的だが、いちいち覚えなきゃいけないのがめんどくさい。あと今回扱うデータは30万×6通貨と大量なんで、速度や安定性も心配。
  2. C or C++
    速度から見れば一番最適なんだけど、コードの行数が単純に多くなる。ポインタ関係のバグとかで手間取るのは勘弁。
  3. Rとかの統計言語
    データ解析で非常に活躍するが、バックテストを行うのには不向き?(本来の分野とはかけ離れている)
  4. C# , VB.net などの .net 言語
    一番最適なような気がする。システム部分をいちいち製作しなきゃいけないけれど、その分柔軟性があり、なによりC# 3.0からLinqとラムダ式という超強力な武器が手に入る。速度の問題も気になるところはunsafe or 外部dllという手段があるし。
  5. Haskell or Ocaml
    関数型言語で実装したほうがコード数が少なくなる場合が多々あるし、なにしろこのタイプの言語は数学系統に強い。現在は見送るが、将来的に学びたい言語。

といろいろ検討した結果、C#となりました。

始めに作ったプログラム

始めに作った売買プログラムは非常に簡単で、以下の手順だけでシステムを組みました。

なお今回取引する金融商品はFX,売買する通貨はオーストラリアドル、スイスフラン、ユーロ、英ポンド、ニュージーランドドル、アメリカドル / 円の6つで、実際の取引に生じるスプレッド、スワップポイントは今回無視しました。

  1. 過去10分前までのデータから収益率r、その標準偏差σを計算し、評価関数

    を用いてランク付けする。
  2. 一番上のランクになった通貨を売買。期待収益率が正ならば対象通貨を買い、負ならば対象通貨を売る。
  3. その10分後に対象銘柄を売却か、購入する。

これを1年間に渡って繰り返した場合、100万円の元出がいくらかになったかを計算します。評価に用いた為替レートの1分足データはForexiteから取得しました。

で、作ったプログラムが以下。正直適当です。


問題発生

ところがこのようなシステムを実際に稼動してみると、どうも収益が逆に-20,30万くらい少なくなっている傾向があるようです。これでは良いシステムとは言えません。

そこでそれなら逆転の発想で、単純に売買ルールを逆にしてみればプラスになるんじゃ!ということでシステムを稼動してみると、思惑通りプラスとなりました。今回のバックテストで得られた結果のグラフがこちらです。

カーブの大小はありますが、どれも上方向を向いており、マイナスの結果になっているグラフはありません(ただし月単位で見た場合、負の収益を出している月もある点に注意)。また収益もスプレッドを無視しているとはいえ、含み益が150万~380万。年利換算で150% ~ 380%。平均の月利は約8.0~11.8%という結果になりました。これは明らかに今回の取引が「劣マルチンゲール(有利な取引)」であることを表しています。

なぜそんなことが起こるのか

もし微小時間の値動きがブラウン運動のような完全にランダムな値動きをするならば、このように4年連続で、しかも比較的綺麗な損益曲線を描くことにはならないはずです。このことから以下のように結論付けることにしました。

「少なくとも過去4年間、外国為替市場における為替のレートは微小時間で正または負の方向に値が進んでいる場合、後にその動きとは逆の値動きになる傾向がある。」


なぜこのような値動きになるのか。これはあくまで仮定ですが、自分は以下のように考えました。

  • 外国為替市場では売りの圧力と買いの圧力がせめぎあって、その理想均衡点が価値を決定する。
  • その理想均衡点の動きは緩やかに推移していくため、微小時間では無視することができる。
  • もし価値が理想均衡点から明らかに乖離した値をとる場合、市場は価値が理想均衡点となるように逆方向の圧力がかかり、補正される。

これならば上の結論の説明がつきそうです。そして2007年の収益が最も少なかった理由として、

「2007年はサブプライム問題などにより売り買いの圧力が大きく変動したため、理想均衡点自体が大幅に変動し、予測がしにくかったのではないか」

と推論しました。

次回はこの仮定を検証してみますが、それよりもまずは金融工学をもっと勉強しなきゃ・・・(まだ300ページしか読み終わってない)自分が知らないことはまだまだたくさんある。

追記(03/23)

年利換算が間違っていたので修正しました。資産額じゃなくて純利益だったのを忘れてました。だめだこりゃ。

2008/03/20

システムトレードの研究-1

金融工学を学んでいる途中なんですけど、ぼちぼち平行してシステムトレードの研究をしてみたいと思います。映像とは全く関係ないっすねぇ :) もうそろそろブログのタイトルを違うものにしたほうがいいかもしれないです。

というわけでシステムトレードの研究です。この記事は正直研究日誌的なもので、実際に運用している人にとっては全く役立たないっす。数ヵ月後自分がこの記事を見て「うわぁこれはねーよ」って言って赤面するために書いてます。あんま気にしないでください。

うっし。それじゃあ書いていくか。

システムトレードとは

投資法の一種で、一般にはプログラミングによって金融商品の分析、売買を全てコンピュータに委託させる手法のことを指している。広義では一定のルールを予め決め、そのルールに従って売買を繰り返す手法もシステムトレードと言うので、必ずしもコンピュータで完全に自動売買させることを指すわけではない。

システムトレードの利点

  • 過去のデータを用いてシステムの検証ができる。過去のあらゆる時点でテストを行うことによって、その構築したシステムのパフォーマンスや欠点が判明し、よりよいシステムを構築することができる。
  • 感情を廃して取引を行えるため、きちんとしたプログラムを組めば人間よりも合理的な判断を行える。
    ex.人間は「損を極端に嫌う」という傾向がある。そのため一旦損をしてしまうと、その補填をしようと何回もリスクのある取引を行ってしまい、深みにはまってしまう(ざわ・・・ざわ・・・)とか。

システムトレードの欠点

  • 過去に無い相場に遭遇した場合、損失を出すリスクが高くなる。
  • 過度にパラメータを最適化してしまうと、未知の事象に対処しきれなくなってしまうため、むしろ損失してしまう場合がある。

欠点を克服するにはどうすればいい?

  • 十分に長い期間(5年以上くらい)バックテストを行うことで、システムのパフォーマンスや欠点を分析する。
  • パラメータが現時点において適切であるような「合理的」なパラメータになるよう学習させる。

雑感

  • システムトレードで検索すると胡散臭いサイトばっかり出てくるのはなんで?プログラムで自分は何もしなくて良いという所が受けるんだろうか。
  • システムトレードでExcelを使っている人が多いけど、個人的にはそんなにExcel VBA使いたがるのか理解できない。
  • という自分はC#信者。
  • なんで金融系ってオープンソースコミュニティが成熟していないんだろう。あんまそういう閉鎖的な部分ってよくないと思うんすけどねぇ

次に実際に自分がプログラムしたシステムトレードについて書いていきます。