weboyajiの株式投資ブログ

売買記録、トレードテク、銘柄分析など

モデルによる銘柄評価を試みる 〜 発展的スクリーニングあるいは徒労 〜

   

昨今流行りのデータ分析の手法を使って銘柄評価をしてみようというお話です。

手順は以下のとおり。

  1. 銘柄リストを用意する
  2. 銘柄リストから予測値を算出するモデル(※)を構築する
  3. 構築したモデルで銘柄を評価する

(※)モデルとは、y=ax+bのような数式のことです。モデルを構築するとは、予測値yを算出する式ax+bを作るということです。

銘柄リストを用意する

分析対象の銘柄リストを用意します。今回はSBI証券(株マップ?)のスクリーニング機能で「成長型」条件でスクリーニングした58銘柄を使います。

・SBI証券のスクリーニング機能 ※要ログイン

https://www.kabumap.com/servlets/Query

スクリーニングされた銘柄リスト

このリストをExcelなどにコピペしてcsvファイルにします。

growth.csvとしてファイル保存。なお一行目の項目名は半角英数に変えています。後の工程で文字化けすると鬱陶しいので。

これで分析用の材料ができました。

 

銘柄リストから予測値を算出するモデル(※)を構築する

先ほどの銘柄リストをもとにモデルを構築します。

まず、モデルで算出する予測値は何にしましょうか。「株価」がわかりやすいでしょうか?しかし株価は売買単元などによって数値の意味が異なるので各銘柄共通のものさしにできません。あまり面倒なことはしたくないので…今回は株価の代わりに「PER」を予測値に採用します。

銘柄リストをもとにPERに影響を与える要因を特定し、その要因からPERを予測するモデルを構築します。

リストのクリーニング

まず各項目の平均値、最大値・最小値など基本統計量をざっと確認。

PERの列を見ると平均55倍、最小10倍〜332倍のようです。ずいぶん開きがありますね。

PERの分布を見てみると…

PER0-100倍の間に大半がある一方、100オーバーにぽつぽつイレギュラーがいます。

空気読めてない銘柄はどれやということでPERが高い順に並べてみると…

(クリックすると拡大されます)

コロワイドは売上成長率から見てもPER高過ぎでしょう…というわけでリストから除外します。

アイフリークモバイル以下は売上成長率も高いのでギリOKということで残しておきます。この辺りの判断は好みですね。

これで異常値を除外した銘柄リストができました。

テストデータを取っておく

銘柄リストのうち一部をテストデータとして外します。

全体の5%としてランダムに選んだところ以下3件が該当しました。

このデータはあとで完成したモデルの予測値と突き合わせます。

この3件を除外した銘柄リストでモデル構築を行います。

PERの影響要因を調べる

PERと各項目の相関係数を調べます。

PERの列を見ると、PBR、経利変化率(keiri_growth)、売上成長率(sales_growth)の相関係数が高いようです。

でもちょっと待ってください。PBRがPERに影響を与えるでしょうか?これはいわゆる見かけの相関で、株価が高ければPERもPBRも高くなるため、見かけ上PERとPBRの相関が高く出ていると思われます。

経利変化率(keiri_growth)、売上成長率(sales_growth)とPERの散布図も見ておきましょう。

荒いですが、経利変化率(keiri_growth)または売上成長率(sales_growth)が高いほどPERも高いという関係が見て取れます。

というわけでPBRは除外し、経利変化率(keiri_growth)、売上成長率(sales_growth)を影響要因として考えると良さそうです。

 

しかし、上の表をよく見るとこの経利変化率(keiri_growth)と売上成長率(sales_growth)の間も相関係数が0.4あります。

散布図を見て見ると…

売上成長率(sales_growth)が高いほど経利変化率(keiri_growth)も高いという関係があるようにも見えます。

確かに売上が伸びれば利益も着いてくるのはありえる話。

一般に、相関の高いものを複数影響要因として採用するとモデルの精度が下がるという問題が起こります。

よって、PERの影響要因は売上成長率(sales_growth)のみとした方が良いかもしれません。

さてどうしたものか。

ここでは

  • モデル1・・・影響要因は経利変化率(keiri_growth)と売上成長率(sales_growth)
  • モデル2・・・影響要因は売上成長率(sales_growth)

と2つのモデルを作って精度が高い方を採用する方針とします。

 

重回帰分析

前段の影響要因からPERを予測するモデルを構築します。今回は重回帰分析を使用します。

Pythonで重回帰分析を実施すると以下のようになりました。

モデル1・・・影響要因は経利変化率(keiri_growth)と売上成長率(sales_growth)

Coefficients Name
0 0.115763 keiri_growth
1 1.135405 sales_growth
17.0766307826

つまり、

PER = keiri_growth×0.115763 + sales_growth×1.135405 +17.0766307826

です。

モデル2・・・影響要因は上成長率(sales_growth)

Coefficients Name
0 1.513395 sales_growth
14.6076273107

つまり、

PER =sales_growth×1.513395 +14.6076273107

です。

構築したモデルで銘柄を評価する

上記のモデル1,2で算出した予測PERとテストデータの実績PERを突き合わせて乖離率を見てみます。

(クリックすると拡大されます)

モデル1は乖離率46%〜139%、モデル2は乖離率41%〜125%となりました。

モデル2の方がやや精度が高いでしょうか。

とはいえどちらも乖離の幅が大きいので、影響要因として組み込む項目の見直しや加工を施すことで改善した方が良さそうですね。

 

おまけ

モデル2の乖離率が小さい順に並べると、予測PERに対して実績PERが低い順の銘柄リストになります。

上位の銘柄はもっとPERが上がってもいい=株価が上がってもいいものと見ることもできます。

武蔵精密工業なんかいいんじゃないかなと思って株価を見たらちょうど上がってしまってますね。ちょっと残念。

 

おわりに

既存の銘柄リストから傾向を炙り出して予測値を算出する方法をご紹介しました。

このような方法を使うと単純に指標でスクリーニングするより実態に合った銘柄抽出ができるかもしれません。

なお分析にはPythonを使いましたが別にExcelでも構いません。というかExcelの方が楽です。重回帰分析も多分Excelでできますし。

分析すること自体が目的ではないので、あまり凝っても徒労に終わると思いますが、試しに色々やってみると意外な発見があっておもしろいですよ^^

# 余談ですが分析系の仕事を個人でやりたい。。のでそのようなお話あればコッソリお知らせください。

以上、「モデルによる銘柄評価を試みる」でした。

 

 - 雑記