推奨銘柄無料公開ブログ

勝率はどの程度信頼できるか

投資顧問サービスを選ぶとき、アナリストの勝率を気にする方が多いようです。
しかしこの勝率という評価尺度はどの程度信頼できるのでしょうか?
ここでは投資の達人プレミアムのアナリストを比較しながら考えてみます。

2015年4月28日現在、投資の達人プレミアムには以下7名のアナリストが登録されています。
熊谷 亮
黒岩 泰
向後 はるみ
西村 剛
藤村 哲也
戸松 信博
日経225
一番勝率が高いアナリストは勝率74.1%の熊谷氏です。
一見すると勝率の高い熊谷氏が良いように思えます。

しかしここで注目して欲しいのは、彼らが売りの予測も出しているアナリストかどうかという点です。
黒岩氏の実績熊谷氏の実績を比較してください。
実績を見ると、黒岩氏は買い予測だけではなく売り予測も積極的に出すタイプのアナリストだとわかります。
しかし熊谷氏は買い予測だけを出すアナリストのようです。

そして、投資の達人プレミアムのサービスが始まった2013年7月1日から現在までの日経平均株価の値動きを見てみましょう。
日経平均株価【998407】:株式/株価 - Yahoo!ファイナンス
22ヶ月のうち、初値より終値が高くなっている月は15ヶ月ありました。
ということは、何も考えずに毎月一回適当な銘柄の買い予測(保有期間は一ヶ月)を出すだけでも、勝率はおよそ15/22 = 68%程度になったということです。

つまり、買い予測だけを出すアナリストは運良く日経平均株価が上昇している相場だったために勝率が底上げされている可能性があるのです。勝率が50%を超えているからといって必ずしもそのアナリストに株価を予測能力があるということにはなりません。逆に言えば、下降相場においては勝率が50%を下回っているからといって必ずしも無能なアナリストだとは限らない、ということでもあります。

投資の達人プレミアムに登録されているアナリストのうち、買い予測と売り予測を両方とも出しているアナリストは黒岩氏と「日経225の達人」の二名です。この二名は勝率が50%に近い値になっています。恐らくこの二名には予測能力は無いか、有ったとしてもわずかだと思われます。そしてその他のアナリストは全員が買い予測を中心に行うアナリストです。その他のアナリストに本当に市場を予測する能力があるのかは、勝率だけを見ても分かりません。

実際のところは、熊谷氏の勝率は74.1%なので、日経平均株価の勝率68%を超えています。そして熊谷氏の「平均パフォーマンス 6.2%」という数値は、もしこれが本当だとしたら驚嘆に値する数値です。やはりアナリストは伊達ではないということでしょうか。(しかし実はこれらの数値も正確なものではないようです。熊谷氏のページの下部にある「実績値の記載について」を参照してください。また投資の達人プレミアムについては怪しい噂もあるので入会を考えている方はご注意ください)

勝率を考える時は、そのアナリストが買いと売りの予測をどの程度の比率で出しているか、予測を行っていた期間の市場が上昇相場だったかどうかなど、総合的に考えるようにしてください。

なお、もしアナリストの予測精度を定量的に比較したいのであれば、勝率ではなくF値のような評価尺度もあります。上昇相場のような不均衡データにはF値の方が評価尺度としてより適しています。参考にしてください。 

当サイトの予測情報をCSVファイルに変換するScalaスクリプトを公開します

これまでに当サイトに投稿してきた全ての予測情報を一括でダウンロードしCSVファイルに変換するScalaスクリプトを公開します。
Scala 2.9.1にて動作確認済みです(Scalaインタプリタのダウンロードはこちらからどうぞ)。
import scala.xml.XML
import scala.io.Source
import java.lang.Thread
import java.io.PrintWriter

val latestUrl = {
val node = XML.load("http://stockedge.jp/?xml")

val item = node.\\("item").head

item.\("link").text
}

val ArticleIdRe =
"http://stockedge.jp/blog-entry-(\\d+)\\.html".r

val ArticleIdRe(id) = latestUrl

val PubDateRe = """\d\d\d\d-\d\d-\d\dT\d\d""".r

val TrRe = ";tr>.+?;/tr>".replaceAll(";","<").r

val csvRows = (6 to id.toInt).map{ i =>
Thread.sleep(1000)

val url =
"http://stockedge.jp/blog-entry-" + i + ".html"

println("download " + url)

val lines =
Source.fromURL(url, "UTF-8").getLines.toList

lines.find(_.contains("pred")).map{ table =>
val html = lines.mkString

val pubDate = PubDateRe.findFirstIn(html).get

TrRe.
findAllIn(table).
filter(line =>
line.contains("dir_up") ||
line.contains("dir_down")).
map(_.replaceAll(";/td>;td>".replaceAll(";","<"),",").replaceAll("<[^>]+>","")).
map(pubDate + "," + _)
}
}.flatten.flatten

val pw = new PrintWriter("pred.csv")

csvRows.foreach(pw.println)

pw.close()
このスクリプトを走らせると、カレントディレクトリに「pred.csv」という名前のCSVファイルが作成されます。
pred.csvは以下のようなフォーマットになっています。
2014-08-27T04,下降,スリープログループ【2375】,290,2014-09-26
2014-08-28T04,下降,ラクーン【3031】,520,2014-09-27
2014-08-29T04,上昇,パーク24【4666】,1770,2014-09-28
2014-08-29T04,下降,菱洋エレクトロ【8068】,1165,2014-09-28
2014-08-30T04,下降,土屋ホールディングス【1840】,313,2014-09-29
2014-08-30T04,上昇,アイ・ケイ・ケイ【2198】,872,2014-09-29
...
このCSVファイルの行はそれぞれ、予測の公開日、予測方向、銘柄名、現在の株価(前日の終値)、予測の終了日、に対応しています。「2014-08-28T04」は「2014年08月27日04時」を意味します。
CSVファイルになっていれば当サイトの予測が実際にどの程度当たっているのか検証しやすくなります。どうぞご利用ください。 

使用しているプログラミング言語について

当サイトのデータ解析で使用しているプログラミング言語について、大雑把にですが書いておきます。

一般的に、データ解析の行程はETL(Extraction、Translation、Loading)と呼ばれる3項目が大部分(8~9割)を占めています[1]。
3項目とは
・データの収集
・変換(前処理)
・読み込み
のことです。

上記した3項目の実装には静的型付け関数型言語のScalaを利用しています。
Scalaは強力な型チェックやパターンマッチの網羅性保証[2]などコンパイラによる静的検証機能が豊富なので、バグの少ないソフト開発を行うことができます[3]。
またJane Street CapitalのYaron Minskyによると「関数型言語を使っていると優秀な技術者を雇いやすくなる(関数型言語を使っている技術者の平均レベルが高いため)」[4]とのことなので、この観点から見ても関数型言語を使う利点があると考えています。

ETLが終わった後の解析にはRとPythonを使っています。
Rは古典的で枯れた機械学習手法のライブラリが充実しており、Pythonは先進的な機械学習手法のライブラリ(e.g. [5])が多数あります。
なので、解析は基本的にRで行い、Rでは力不足な部分にPythonを使うようにしています。
また、機械学習は全てライブラリに頼っているわけではなく、スクラッチからコードを書いている部分もあります。

ソースコードの管理はgitで行っています。

以上、非常に大雑把な情報ではありますが、参考にしていただければと思います。

参考
[1] 越智 修司・高田 敦史 (2014). データ分析が支えるスマホゲーム開発 ~ユーザー動向から見えてくるアプリケーションの姿~, 114.
[2] http://www.slideshare.net/Tindr/scala-sealed-classes
[3] Ray, Baishakhi, et al. "A large scale study of programming languages and code quality in github." Proceedings of the ACM SIGSOFT 20th International Symposium on the Foundations of Software Engineering. 2014.
[4] Minsky, Yaron, and Stephen Weeks. "Caml trading–experiences with functional programming on wall street." Journal of Functional Programming 18.04 (2008): 553-564.
[5] http://deeplearning.net/software/pylearn2/ 

このサイトについて

small.jpg

当サイトでは機械学習を使った株価の予測情報を公開しています。


当サイトで使用しているAIについて

統計的機械学習を用いて1カ月先の株価を予測します。
フォワードテスト(検証期間は2011年2月8日から2014年8月1日)の結果は、一トレードの平均リターンは2.78%、年利換算すると日経平均プラス11.88%のリターンが得られました(空売りを行っていないのでリターンは日経平均に連動します)。ただしこれらの数値は手数料(一トレード毎に約定金額の0.1~0.2%程度かかります)やマーケットインパクトなどを考慮していないので、実際のリターンはもう少し小さいものになります。
フォワードテストにおける予測の勝率は57.83%でした。AIを用いた実際のファンドが実務で求められる勝率は55%だと言われている[1]ので、当サイトの57.83%という勝率は十分に実務で使用可能なレベルであると思われます。

トレード100回毎に計算した勝率の時系列変化をグラフにし、さらにノイズを除去するため長さ10の移動平均を取ったグラフが下記になります。
winning_percentage.jpg
勝率が0.5(50%)を下回っている時期もありますが、大部分は0.5以上の値になっており、ランダムな予測ではないことが解ります。

参考までに、投資顧問サービスを提供しているフィスコマーケットマスターズと比較してみます。フィスコマーケットマスターズは月額10800円でアナリストの予想を閲覧することができる投資顧問サービスです。2014年8月30日現在、フィスコマーケットマスターズのサイト全体での予測の勝率は57.4%となっています。

また、投資判断に機械学習を使用しているRebellion Researchというヘッジファンドがあります。インタビュー記事や公式HPによれば、Rebellion Researchは一カ月以上の長期投資を中心に行っており、予測には統計的機械学習を使用しているようです。

Rebellion Researchの2007~2010年のリターンは以下のようになっています[2][3]。
Rebellion ResearchS&P500
200717%3.55%
2008-26%-38.47%
200941%23.49%
201020%12.64%
平均13%0.3%
※2011年以降は見つからなかったので2010年までのデータです。

当サイトもRebellion Researchと似た手法を使っているので、彼らと同等に、市場平均プラス10%以上のリターンを上げることを当サイトの目標としています。


他サイトに対する当サイトの利点

フィスコマーケットマスターズではアナリストの推奨銘柄を、多いときで月に100銘柄程度を公開しています。
それに対して当サイトでは、月に平均600銘柄の予測情報を公開しています。
なぜそんなに多くの予測が可能なのかというと、AIは人間のように疲れることがないので、あらゆる銘柄を常に監視するように働かせておくことができるためです。
そして予測情報の数が多くなることにより、他の投資家様と投資先が被る確率が低くなりますので、投資家様がリターンを得られる確率が高くなります。

また、当サイトでは2014年11月6日より「AIによる予測」の欄に1~100の数値として予測の信頼度を共に出力しています。「予測がどれほど確からしいか」を厳密に数値化することは人間にとっては困難です。これはコンピュータによる統計解析を行っているからこそ算出可能な情報だと言えるでしょう。
この信頼度を利用すると勝率を底上げすることが可能です。以下の表は「予測の信頼度が一定値以上のときだけ買う」という条件でシミュレーションを行って結果の勝率を比較したものです。
信頼度勝率一トレードの平均リターン
全て買う57.83%2.78%
55%以上だけ60.14%3.19%
60%以上だけ61.82%3.52%
65%以上だけ63.07%3.92%
70%以上だけ63.90%3.97%
75%以上だけ65.10%3.8%
80%以上だけ68.02%4.07%
予測の信頼度が高いときだけ買う場合は、そうしない場合よりも勝率が上昇しています。またそれに伴い一トレードの平均リターンも上昇していることが解ります。


Q&A

Q. なぜ儲かる情報を無料で公開するのですか? 本当に儲かるなら自分で投資したらいいのでは?
A. 情報を公開する最大の理由は実績を残すためです。私は機械学習を専門とする技術者であって、資産を持っている資産家ではありません。株式投資は既に資金を持っている人ほど有利であり、私の全財産を投資に使っても得られるリターンの量はたかが知れています(とはいえ多少でも利益が得られるならと思い、自己資金での投資も行っています)。当サイトで実績を示すことにより、私募投信などで投資家を集める際に有利に事を運びたいという狙いがあります。

Q. 本当に予測しているのですか? 後からこっそりブログ内容を修正しているのでは?
A. ブログ内容を修正していないことの証拠として、記事をアップロードした直後にウェブ魚拓を取得しています。不安に思う方は魚拓ページの内容をご確認ください。
例:当サイトの記事およびその記事のウェブ魚拓
また2014年11月25日より、株のSNSサイト『みんなの株式』に予測を投稿しています(信頼度60%以上かつ買いの予測だけを投稿しています)。『みんなの株式』に一度投稿した予測は後で取り消すことができない仕組みになっています。合わせてご利用ください。

Q. 「月に平均600銘柄の予測情報を公開しています」とありますが、月に100銘柄ぐらいしか掲載されていません。どうしてですか?
A. あくまで平均して600銘柄なので、月ごとによる変動があり、掲載が多い月も少ない月も御座います。掲載数が少なかった月の次の月は多くなる傾向がありますので、気長にお待ちください。

Q. AIの説明で「空売りを行わない」とありますが、実際には株価が下がることも予測されています。この予測をもとに空売りを行ってもいいのでしょうか?
A. 私自身の株取引では空売りを行っていません。また過去データを使ったAIシミュレーションでも空売りは禁止しています。何故なら、空売りには価格規制があり、また得られるリターンの量が最大でも100%である、という制限があるからです。出来る限り多くの情報を提供したいと思い、株価が下降するという予測情報も公開していますが、私自身は空売りを推奨はしていません。

Q. 実際に株を買うときはどのタイミングで買えばいいでしょうか?
A. 予測を出した翌営業日の初値で株を買ってください。当サイトで記載している「現在の株価」は予測を発表した当日の終値であり翌営業日の初値とはズレがあります。しかし最終的なパフォーマンスには大きな影響が無いことをシミュレーションにより確認しています。

Q. 買った株を売るときはどのタイミングで売ればいいでしょうか?
A. 基本的に「予測の終了日」に書かれている日付(休日であればその翌営業日)の終値で売ってください。ただし予測の終了日までに株価が下がりすぎることがありますので、適当なロスカット基準を設けてそれ以下の価格になればその時点で売るようにしてください。私が実際にトレードを行う場合は、一カ月の株価変動の2標準偏差である-30%を下回った時点でロスカットしています。

Q. 推奨された銘柄は注文数が多すぎて値がついていない状態でした。買うことができません。どうしたらいいですか?
A. 値が付いていなかった場合、推奨された日以降で最初に値がついた日の始値で買うようにしてください。

Q. 「本日の経済ニュース」という形でニュース記事へのリンクが載っています。なぜですか?
A. 経済ニュースの記事内容を解析することにより株価を予測できるという複数の独立した研究結果[1][4][5][6]があります。経済ニュースの傾向を見ることは株価の予測に役立ちますので、実際に投資を行う際の参考にしてください。

※その他質問などございましたらtwitter(@stock_edge)やメール(stockedge[at]sk2.so-net.ne.jp, [at]を@に)、あるいは当サイトのコメント欄などでお寄せください。答えられるものであれば積極的に返答致します。

参考
[1] Kuramoto, Takahisa, et al. "Analysis of Long-term Market Trend by Text-Mining of News Articles (Japanese Title: 新聞記事のテキストマイニングによる長期市場動向の分析)." Transactions of the Japanese Society for Artificial Intelligence 28 (2013): 291-296.
[2] Those Four Guys Who Started A Hedge Fund Right Out Of College Did Pretty Well In 2010
[3] S&P500 Total annual returns
[4] Schumaker, Robert P., and Hsinchun Chen. "Textual analysis of stock market prediction using breaking financial news: The AZFin text system." ACM Transactions on Information Systems (TOIS) 27.2 (2009): 12.
[5] Fung, Gabriel Pui Cheong, Jeffrey Xu Yu, and Wai Lam. "News sensitive stock trend prediction." Advances in Knowledge Discovery and Data Mining. Springer Berlin Heidelberg, 2002. 481-493.
[6] Kim, Yoosin, Seung Ryul Jeong, and Imran Ghani. "Text opinion mining to analyze news for stock market prediction." Int. J. Advance. Soft Comput. Appl 6.1 (2014).

更新履歴

2014年10月17日 機械学習に使用する学習データセットのサイズを増やしました。これにより汎化誤差が小さくなりました。
2014年11月6日 「AIによる予測」の欄に予測の信頼度が表示されるようになりました。この信頼度が高いほど予測が当たりやすい傾向があります。※ただしこれはあくまでも推定値なので、結果を保証するものではありません。
2014年11月25日 株のSNSサイト『みんなの株式』に予測を投稿するようになりました。信頼度60%以上かつ買いの予測を投稿しています。
2015年1月21日 機械学習に使用する学習データの更新タイミングを変更しました。
2015年3月21日 『みんなの株式』に日記を投稿するようになりました。
2015年4月11日 当サイトの予測情報をCSVファイルに変換するScalaスクリプトを公開しました。