銘柄選びのデータマイニング的アプローチ(スクリーニングからマイニングへ)

第1回:はじめに

皆さんは、銘柄をどのような基準で選択していますか?インターネット上のサイトで希望の銘柄の業績やチャート程度ならタダで得られるようになった昨今ですが、わざわざ自分で株価データを蓄積して、バカ高い金払って株ソフトを利用するのは、テクニカル指標によるスクリーニングを行うためではないでしょうか?拙者も少し前までは、株ソフトの真髄はスクリーニングにありと考えていました。そのため、ChartScapeでは、抽出条件設定のユーザインターフェースとかに注力していたのですが、反面「ちょっと違うかな…」との思い、漠然とした違和感のようなもの、もありました。

テクニカル指標によるスクリーニングでは、例えば、

といったことは容易に調べることはできます。しかし、私たちが知りたいのは厳密にこれらの条件を満たす銘柄のリストではありません。もっと柔軟に、ある指標は条件からちょっとだけはずれていても、他の指標がフィットしていたらそれもいっしょに見つけたい訳です。要はより抽象的な条件によるスクリーニングがしたいのです。抽象度が最も高い究極の条件は、「上がりそうな銘柄」や「下がりそうな銘柄」ということになろうかと思います。

従来のスクリーニングは、決定木による分類ということができます。いま簡単のために指標が2つ(例えば、13日RCIと100日移動平均乖離率)しかないとします。各日の各銘柄は、横軸を13日RCI、縦軸を100日移動平均乖離率とする平面上にプロットすることが可能です。決定木による分類では、この平面をX軸とY軸に平行な直線で分割した矩形領域内にある点(銘柄)を求めることができる訳です。


決定木の例


決定木による分類の例

実際はN個のテクニカル指標を組み合わせるわけですから、N次元空間上の領域を求めることになります。空間上の点はN個のテクニカル指標からなるベクトル
  v = (v1, v2, ... vN)  
で表現します。このベクトルを「特徴ベクトル」といいます。わたしたちの目的は、N次元空間中に散在する特徴ベクトルから目的の(上がりそうな)ベクトルを抽出するという問題を解くことになります。先の決定木による分類は、単純に矩形領域内に含まれるベクトルを求めているだけであるため、違和感に結びついたのだと思います。

では、柔軟な条件で分類するには、どうしたらよいでしょう。いま、上がりそうな銘柄の特徴ベクトル(v0)が既知だったとします。調べたい銘柄の特徴ベクトル(v)とv0のN次元空間上の距離が近いほど、上がりそうであるといえるでしょう。2つのベクトル間の距離は2ベクトル間のコサインを計算することにより求めることができます。コサインの値が1に近いほど2つのベクトル間の距離が近いことになります。N次元空間上の2ベクトルのなす角のコサインは次式で求めることができます。
  cosθ = vv0 / |v||v0|  
ベクトル間の距離から近いものを選ぶ手法は、k-NN(k-Nearest Neighbour)として知られています。要は、目標のベクトルと近いものから順にk個を選ぶという単純な方法です。


k-NNによる分類の例

k-NNで従来のような画一的なスクリーニングとはおさらばし、画期的な銘柄抽出が可能と思いきや、実は「上がりそうな銘柄の特徴ベクトル」はどうやって見つけるのかを解決しなければなりません。これは、過去の事例に学ぶのが最良の方法です。 大量の特徴ベクトルの事例から、「ほにゃららの特徴を持つベクトルは短期的に値上がりする」といったルールを見つけ出すことをデータマイニングといいます。マイニングとは「発掘」のことですね。本連載では、データマイニングのテクニックを紹介しつつ、「銘柄マイニング」への適用の可能性を模索していきたいと思います。

次回(もし次回があれば)は、スクリーニングがなぜダメなのかを検証してみたいと思います。


戻る