Posted by & filed under 開発.


 前回 は遅延指数による為替予測を遺伝的アルゴリズム (以下、GA [Genetic Algorithm]) で行うプログラム (azumi くん) の設計部分の話をしました。

 最初にお断りをしておくと。azumi くんは、世の中の経済事情を全く考慮に入れておらず、そこまで作り込んでもいないシロモノで、はっきり言っておもちゃです。
 もちろん単なる当てずっぽうではなく、過去の為替レートの中に遅延指数が隠れているという期待の基 GA によってそいつを解析し、未来を予測をしようとしていますが。そもそも遅延指数が存在しなければ、ここでの予測は当てずっぽうにすぎません。仮に遅延指数が存在していたとしても、見つけられなければ、やはり出力結果は当てずっぽうです(GA は “解” そのものを出すのではなく、”解っぽい” モノを出すので)。
 間違っても、現ナマを賭けて、一山当ててやろうなどと思わないでください。
 というわけで。これの情報を鵜呑みにしたために発生した損害は一切保証しませんのであしからず。

 言い訳が済んだところで。さっそく中身 [1] を見ていきます。
 azumi くんのクラス構造はとても単純で、次の2つだけです。

 まずは Value クラス。こいつは value.rb で定義されて、ある日の為替レートの終値に関する情報を持つクラスです。アトリビューションとして、日付、為替価値と為替価値の前日比の情報を持ちます。
 次に Chromosome クラス。こいつは chromosome.rb で定義され、前回紹介した3つの遺伝子情報をアトリビューションに持つ、染色体を模したクラスです。

 それでは GA による解析の中身を見ていきます。
 以下が、この処理を行う azumi_training.rb のソースコード全文です。

 4,5 行目は初期化処理になります。
 4 行目の処理では、シリアライズした Chromosome オブジェクト群をメモリに戻しています。
 5 行目は、過去の為替レート [2] から Value オブジェクト群を生成し、Value クラスのクラス変数の配列にブッこみます。

 あとは GA の評価・交配処理を行っています。初期世代の染色体が持つ DNA 配列 (前回の “遺伝子情報” のくだりの1番目) はランダムに設定します。
 8 行目で、現世代の全染色体を評価関数に突っこみ、適応度を算出します。この適応度が、遅延指数としてのどれだけ有効かという「有効性」と、それがどれだけ過去に再現したかの「一般性」を表します。
 また eval_all メソッド内部では、エリート保存戦略によって解析速度を上げます。
 そして 9 行目で、不良遺伝子を持つ個体の淘汰と、各染色体の交配処理を行います。交配は、シンプルな1点交叉を行います。ただ多様性を出すために、交差点はランダムに設定します。また、これも多様性の為に一定確率で突然変異をお越し、DNA 配列情報 (遅延指数出現の予測日数) の数値をいじります。
 そして、世代交代後の染色体に対して上述の処理を繰り返します。

 多様性が出るようにする理由は、(動かしてみるとわかりますが)多様性を考慮しないである一定世代まで進化させると、遺伝子全体が局所解に落ち着き、それ以上変化しなくなります。
 人間で例えると、優勢遺伝子によって駆逐された同じ顔つきで同じ体系、同じ肌の色、同じ体質の人間が溢れ返っている様子を想像してください。
 それが本当の解ならばいいのですが。本当の解かどうかを確かめることは出来ないので、なるべく局所解に落ちないように、それでいて適応度を上げるようにします。
 突然変異は多様性を出す為の有名なやり方ですが。他にも、各民族(別に設定した評価関数によって残った個体)が特定の地域に偏在し、時々往来して交配するという現在の世界を模した「島モデル」といったようなやり方などもあります。

 最後に。次の日 (raw_data.txt の最後の行の次) の為替レートの予測をする処理について。
 次が、この処理を行う azumi_eval.rb のコードの全文です。

 7 行目以外は進化処理と同じです。
 進化させた個体のうち、エリート個体の遺伝子による評価を行います。具体的には『エリート個体の遺伝子が遅延指数である』という前提で、どれだけそれが現象として現れているのかを判定します。具体的には以下の擬似コードの処理を行います。

 これもやってみるとわかりますが。学習を行う過去の為替レートの期間によって結果は大きく変わります。
 期間を短く (過去 1,2 年くらい) 設定すると。ここ数年、慢性的に円高が続いているので、エリート個体はこぞって「円高になる」と言ってきます(円高になると予測した個体が生き残る為)。
 期間を長く(過去 10 年くらい)遡って学習すると、今度は遅延指数が見つからなくなります。

 やはり。過去の為替レートの情報だけで、為替予想をするのは難しいです。

[1] http://dev.ariel-networks.com/wp/wp-content/uploads/2011/10/azumi.tar.gz
[2] http://homepage1.nifty.com/Gaku/


関連文書:

  • 関連文書は見つからんがな

Comments are closed.