見出し画像

日本株の1週間変動率を題材に機械学習の初歩である決定木をやってみました

 トレーディングビューさんは、株データをcsvでダウンロードできます。
 とても便利ですが、データ数が多すぎてすべてに目を通すのは時間がかかります。
 一般的にはBIツールやエクセル等でソート(ランキング)したり、セクター毎の比較をしたりします。
 今回は、データマイニング用ツールのOrangeを使って、初歩の機械学習でどんなことができるか、やってみました。


データの見える化からです

データです

 トレーディングビューさんから、4月14日現在の東証の株データをダウンロードしました。
 57因子で4258個(銘柄)のデータです。
 トレーディングビューさんからは、もっと沢山の因子をダウンロードできますが、その中から適当な57因子を選択しています。
 今回は、57因子のうちの「1週変動率」に着目して整理しました。

データ数
因子一覧

散布図で見てみました

 1週変動率を縦軸(y軸)、時価総額を横軸(x軸)にとった散布図です。
 飛び抜けて大きい時価総額の銘柄は「トヨタ」さんです。「トヨタ」さんはこの時価総額でも株価値上がりですので、どれだけのお金が集まっているかを考えると恐ろしいところです。(それだけ、日本が買われているので良いことですが・・・)
 時価総額が小さい銘柄ほど、1週変動率の振れ幅が大きいです。「小型株ほど夢があるけどリスクもある」ということが解ります。

1週変動率と時価総額

色々な軸を選んで比較しますが、結構面倒です

 こんな感じで色々な軸で比較をしていきますが、結構面倒です。
 実は、株を長くやっていると「今は景気変動株!」とか「今はグロース!」とか「不動産株だよ」とか「いやいや低PBR」とか「それは古い!今や〇〇」と色々な選択軸について分析するようになります。
 トレーディングビューさんでも「セクター」や「業種」といったカテゴリを付けてくれていますので、個別に選択して地道に分析することが可能です。
 ただ、「とりあえず、概要が知りたい!」「どんな銘柄が値上がりしたの?」みたいなことを知りたくなることがあります。

機械学習してみました

 機械学習では、ターゲットとする因子を「目的変数」、それに影響を与える因子を「説明変数」と呼ぶことが多いです。
 今回は、「1週変動率」を目的変数としました。
 「1週変動率」で機械学習した場合、どんな結果になるかを見てみました。

決定木でどんな因子があるか見てみました

 決定木は、もっとも簡単な機械学習です。分類木と回帰木がありますが、今回は理解しやすい分類木を使用しました。
 分類木だと、目的変数をカテゴリにする必要があるので、「1週変動率」を「5%未満」と「5%以上」の2つに分けました。(1週間で5%上昇した銘柄です。1週間前に分かっていれば大儲け!!)
 全因子を使った「決定木(分類木)」を下記に示します。1週変動率が5%以上だったのは505銘柄で11.9%のようです。
 全因子の場合、「週間パフォーマンス」が大きいほど「1週変動率が5%以上」のものが多い、という決定木になりました。

決定木 全因子です。

 うーん、あまり面白く無いです。「1週変動率」が「週間パフォーマンス」に関係するのは、小学生でも推定できますし・・・。
 これ、機械学習でありがちです。
 高い費用をかけてデータ分析したは良いけど、「当たり前の結果」しか出ずに、担当窓口の技術者がお偉いさんに説明する際に窮することが多いです。
 お偉いさんは「高い費用かけて、結果がこれ??」と言ってきますし、データサイエンティストは「頂いたデータでは、この通りです」と言って取りつく島も無かったりします(Pythonで機械学習できる程度の若手の場合です。ベテランは色々相談に乗ってくれます)。
 ただ、見方を変えると結構凄いことなんです。機械学習だと、因子の名称は全く関係なく、「週間パフォーマンス」が「A1」、当期利益が「A2」とかでも、同じ決定木を出してくれます。
 すなわち、予断を持たずに全因子を分析して、そのうちで最も分類できる因子を機械的に計算しただけで、この結果が出てくると言うことです。

 機械学習をうまく利用するには、人間の判断や経験がどうしても必要になります。
 この場合、「週間〇〇」や「月間〇〇」とかの因子が出てくるのは、人間的には当たり前なので、事前に因子から削除します。
 そのようにして作成した「決定木(分類木)」です。

適当に因子を絞った決定木

 今度は、「予想配当利回り」が3.28以上の銘柄が351/2604と「週間変動率が5%以上」の比率が大きく、さらにそのうち「時価総額」が145億円に満たない銘柄が260/1510とさらに比率が大きいくと分類されていることが解ります。
 こうなると、先ほどの「週間パフォーマンス」よりも参考になる指標になります。
 人間がこれを見ると、「配当」が良くて「時価総額」が比較的小さく「予想EPS」が比較的小さい銘柄が今週買われた、と取れます。自分のイメージと合っていれば「やっぱりな」ですし、イメージと違えば「?、なんでだろう、見落とし合ったかな?」と新たな気づきが出るかもしれません。
 私の場合、「やっぱり配当が高いほうが買われていて、今週は小型株にも物色が広がっているのかー」と感じました。
 この分類木で最も「週間変動率が5%以上」の比率が高いのは、「予想配当利回り」「時価総額」「予想EPS」の組み合わせで35/114の30.7%です。(表示が「予想配当利回り」になっていますが、これはこの次の分類の因子になります。若干ややこしいですが仕様なのでご容赦を)
 この、銘柄を選択して、テーブル表示すると該当の35/114銘柄の詳細を見ることができます。
 こうなってくると、分析の効率が上がるかもしれません。

選択しました
選択したデータをテーブル表示しました

あくまでも、機械的に分類しただけです

 決定木は人間が理解しやすいですが、あくまでも「機械が数値的に分類しただけ」の結果で、そこに意味が無いことがあります。
 なので、因子を選択しなおしたり、分類条件を調整したりして、「人間が見落としている因子」を探ることが、多くの場合必要になります。
 逆に、1発で役に立つ結果が出たら「お前の目は節穴か?」だったりします。(若手で、機械学習(AI)をやり始めの方にありがちだったり・・・)
 でも、使いようによっては、この決定木だけでも、「製造業での不良解析」「購買データでのユーザー解析」等では、結構役に立ったりします。

数値予想をしたいところですが

 一番やりたいのは、「他の因子」で「1週間後の変動率」を予測することです。これが解れば、今日のデータをトレーディングビューさんからダウンロードしてOrangeで解析して、1週間後の変動率予測の上位を買えば来週には「ウッホウッホ」です。
 ところが、そうは甘く無く、今回のデータセットで「1週変動率」を目的変数として機械学習してみても充分な精度は出せません(線形回帰、勾配部ースティング等やってみましたが、紹介できる精度になりませんでした)。
 こんな初歩の機械学習では、歯が立たないようです。
 まあ、やりようはありますが、そんなことをするなら人間が予想した方が納得感が高い(私の場合)です。
 今回作成したOrangeのワークフローを参考に示します。

今回作成したOrange ワークフロー

まとめ

 日本株の1週間変動率を題材に機械学習の初歩である決定木をやってみました。
 それなりに、新たな気づきが得られるようです。

 株価としての感想では、まだ、予想利回りで物色されている感じがしました。
 長期投資を主戦場としていた身としては「もう、買われ過ぎて、手が出しにくいよー」の状況だと感じています。それでも買っていかないと、乗り遅れてしまうし、難しいところです。


この記事が気に入ったらサポートをしてみませんか?