【ランダムフォレスト】次に上がる銘柄の「特徴」を特定!機械学習で作る決定木モデル

  • URLをコピーしました!

「株価が上がる理由を、もっと客観的に知りたい」と考えたことはありませんか。 投資の世界には膨大な指標がありますが、どの数字が今の相場に効いているのかを人間がすべて把握するのは困難です。そこで役立つのが、機械学習の手法の一つである「ランダムフォレスト」です。

この手法を使えば、膨大なデータの中から「次に上がる銘柄」に共通する特徴を、AIが自動で見つけ出してくれます。この記事では、プログラミング初心者でも迷わず銘柄分析モデルを作れるよう、具体的なコードと共に手順を詳しく解説します。

目次

なぜランダムフォレストは銘柄選定に向いているのか?

ランダムフォレストは、投資のプロやデータサイエンティストの間でも非常に人気が高い手法です。その理由は、株価というノイズの多いデータに対しても「安定して高い予測力」を発揮できる点にあります。

この章では、ランダムフォレストの仕組みを噛み砕いて解説します。なぜこの手法が、個別の銘柄選びにおいて人間の勘や経験を補ってくれるのか、そのメリットを3つの視点から整理しました。まずは、AIがどのようにして「多数決」で答えを導き出すのか、その全体像を把握しましょう。

複数の決定木が多数決で答えを導き出す

ランダムフォレストの核となるのは「決定木(けっていぎ)」と呼ばれる仕組みです。これは、データを「PERが15倍以下か?」「RSIが30以下か?」といった質問で枝分かれさせていく分析手法です。ランダムフォレストは、この決定木を数百個と大量に作り、それぞれの予測結果を多数決でまとめます。

例えば、100個の木のうち80個が「この株は上がる」と答えたなら、最終的な予測も「上がる」となります。 一人の専門家の意見に頼るのではなく、100人の専門家の意見を総合するような仕組みのため、一時の極端な値動きに惑わされにくいのが特徴です。

もちろん、一つひとつの木が完璧である必要はありません。 「弱いつながり」をたくさん集めることで、全体として非常に強力な判断基準を作り上げるのが、このアルゴリズムの真骨頂といえます。

複雑な相場のパターンを過学習せずに捉えられる

機械学習で最も怖いのは、過去のデータに合わせすぎてしまい、未来の予測に全く使えなくなる「過学習」という現象です。ランダムフォレストは、学習データをランダムに入れ替えたり、質問に使う指標をわざと制限したりすることで、この罠を回避します。

「たまたま去年の12月だけ有効だったパターン」を覚えるのではなく、より汎用的な「上昇銘柄の共通点」を探し出す力が優れています。 以下の表に、一般的な単一モデルとランダムフォレストの違いをまとめました。

比較項目単一の決定木ランダムフォレスト
予測の安定性低い(ブレやすい)高い(安定している)
過学習のリスク高い低い
複雑なデータの扱い苦手得意
分析の解釈非常に容易容易

Google スプレッドシートにエクスポート

このように、データの「ブレ」を抑えながら、株価の複雑なメカニズムを柔軟に学習できる点が、投資における大きな武器になります。

予測の根拠となる「重要指標」を特定できる

多くのAIモデルは「なぜその答えになったか」がブラックボックスになりがちです。しかし、ランダムフォレストは「どの指標が予測に最も貢献したか」を数値として教えてくれます。これを「特徴量の重要度」と呼びます。

「今の相場ではPERよりも、RSIの方が上昇に関係している」といった事実が客観的にわかります。 これにより、人間はAIの予測を鵜呑みにするのではなく、納得感を持って投資判断を下せるようになります。

確かにAIの予測が100%当たることはありませんが、根拠が示されることで「今回はこの指標を重視して選ぼう」といった戦略的な運用が可能になります。 経験則を裏付ける、あるいは新しい投資の視点を与えてくれる頼もしい相棒となります。

分析を始めるためのPython環境を準備しよう

プログラムを動かすといっても、自分のパソコンに難しい設定をする必要はありません。ブラウザ一つあれば、無料でプロ級の分析環境を手に入れることができます。

この章では、Googleが提供する「Google Colab」を活用した環境構築の手順を説明します。必要な道具(ライブラリ)のインストールから、実際の株価データの読み込みまで、スムーズに進めるための準備を整えていきましょう。以下のステップに従えば、誰でもすぐに分析のスタートラインに立てます。

必要なライブラリをまとめてインストールする

まずは、データ分析に欠かせない3つの道具を準備します。これらは、Pythonの世界では「三種の神器」とも言えるほど標準的なものです。

以下のコードをコピーして、Google Colabのセルに貼り付けて実行してください。

!pip install yfinance scikit-learn pandas matplotlib

これらのライブラリは、以下の役割を担っています。

  • yfinance: 世界中の株価データを無料で取得する。
  • scikit-learn: ランダムフォレストなどの機械学習を実行する。
  • pandas: 表形式のデータをエクセル感覚で加工する。

まずは、これらの道具が使える状態であることを確認しましょう。 エラーが出なければ、あなたの分析環境はすでに半分以上完成したも同然です。

yfinanceで株価データを読み込む設定

次に、分析したい銘柄の過去データを取得します。yfinanceを使えば、銘柄コードを指定するだけで、数年分の株価が一瞬で手に入ります。

今回は、米国株なら「AAPL」、日本株なら「7203.T」のように指定します。

import yfinance as yf

# 銘柄と期間を指定してデータをダウンロード
df = yf.download("7203.T", start="2020-01-01", end="2024-12-31")
print(df.head())

このように1行のコードで、日付ごとの始値、高値、安値、終値、出来高が揃います。 手動でエクセルに入力する手間を考えれば、これがいかに革命的なことか実感できるはずです。

データを加工しやすくPandasで整理する

取得した生データには、時折「欠損値」と呼ばれるデータの抜けが含まれることがあります。これをそのままにするとAIがエラーを起こすため、Pandasを使って綺麗に掃除します。

具体的には、土日や祝日のデータが抜けている箇所を埋めたり、不要な列を削除したりします。

以下のリストは、データ整理の際に行うべき基本的な処理をまとめたものです。

  • 欠損値の除去: データがない行を削除する
  • 型変換: 日付が正しく日付として認識されているか確認する
  • インデックスの設定: 日付を基準に並び替える

「データが綺麗であること」は、AIの予測精度を高めるための絶対条件です。 整理整頓されたデータを準備することが、分析の成功率を大きく左右します。

モデルの知能を決める「特徴量」を作成して教える

AIは生身の価格だけを見せても、その意味を理解できません。人間が「移動平均線より上か?」と考えるように、AIにも分析のヒントとなる「指標(特徴量)」を与えてあげる必要があります。

この章では、株価の動きをAIに教え込むための、具体的な指標の作り方を解説します。テクニカル指標と財務指標、そして「何日後にどうなったか」という正解データの作り方を学びましょう。AIを賢くさせるための「エサ」を工夫することが、銘柄選定の腕を磨くことにつながります。

テクニカル指標を計算して動きを数値化する

株価の勢いや過熱感を伝えるために、テクニカル指標を計算します。ランダムフォレストは、複数の指標を組み合わせた「もし〜なら」というパターンを見つけるのが得意です。

まずは、定番の移動平均線やRSI(相対力指数)をコードで作成してみましょう。

# 5日移動平均線からの乖離率
df['MA_diff'] = (df['Adj Close'] - df['Adj Close'].rolling(5).mean()) / df['Adj Close']
# 前日比の騰落率
df['Return'] = df['Adj Close'].pct_change()

このように、単純な価格ではなく「変化率」として渡すのがコツです。 単に「1000円」と教えるよりも「前日より3%上がった」と教える方が、AIはパターンを捉えやすくなります。

「例えば」の話ですが、自分がチャートを見るときに何を重視しているかをコードに落とし込んでみてください。 あなたの投資の視点をAIに授けるプロセスこそ、機械学習の醍醐味です。

財務指標を組み合わせて企業の質を評価に加える

株価の動きだけでなく、企業の「稼ぐ力」を特徴量に加えると、モデルの解釈性が高まります。yfinanceを使えば、PER(株価収益率)などの財務データも取得可能です。

財務データを加えることで、「チャートはいいけど、割高すぎる銘柄」をAIが避けるようになります。

  • PER: 収益力に対して割安かどうか
  • PBR: 資産価値に対して割安かどうか
  • ROE: 資金をどれだけ効率よく使っているか

これらの指標を計算コードに組み込むことで、AIはより多角的な視点を持つようになります。 以下の表に、AIに教えるべき代表的な指標(特徴量)の例をまとめました。

特徴量の種類具体的な指標AIが学べること
トレンド移動平均乖離率現在の勢いが強すぎないか
オシレーターRSI売られすぎて反発の兆しはないか
出来高出来高変化率注目度が急激に高まっていないか
財務PER利益に対して株価が手頃か

Google スプレッドシートにエクスポート

「〇日後に株価が上がったか」という正解ラベルを作る

AIに「学習」をさせるためには、過去のデータに対して「これが正解だったよ」と教えてあげる必要があります。これを「ラベル(目的変数)」と呼びます。

今回は「5日後の株価が、今日より3%以上上がっていたら1、そうでなければ0」というルールを作ってみます。

# 5日後の上昇率を計算
df['Target_Next_5d'] = df['Adj Close'].shift(-5) / df['Adj Close']
# 3%以上の上昇を正解(1)とする
df['Label'] = (df['Target_Next_5d'] > 1.03).astype(int)

こうすることで、AIは「どんな特徴があるときに、5日後に3%以上上がるのか」という法則を必死に探すようになります。 このラベル作りは非常に重要です。

目標が高すぎると正解が少なくなってしまい、AIが学習を諦めてしまいます。 逆に低すぎると、誰でも当たるような予測になり、投資の役には立ちません。 まずは自分の狙いたい利益に合わせて、この数値を調整してみましょう。

ランダムフォレストを実際に動かして学習させる

指標(エサ)とラベル(正解)が揃ったら、いよいよランダムフォレストに学習を開始させます。ここでのポイントは、データの「分け方」です。

この章では、過去のデータを使ってAIを鍛え、未知のデータでその実力を試す手順を解説します。株価データ特有のルールを守りながら、実際に予測モデルを構築するコードを見ていきましょう。ここで正しく学習をさせることが、実戦で通用するモデルを作るための決定的な鍵となります。

データを訓練用とテスト用に時間軸で分ける

機械学習の基本は、データを「訓練用」と「テスト用」に分けることです。ただし、株価の場合は注意が必要です。未来のデータで過去を学習してしまわないよう、必ず時間軸に沿って分割します。

例えば、2020年から2023年のデータで学習し、2024年のデータでテストをするという形です。

# データを時間軸で8:2に分ける
train_size = int(len(df) * 0.8)
train = df.iloc[:train_size]
test = df.iloc[train_size:]

この手順を飛ばしてランダムに分けてしまうと、AIが「未来のカンニング」をしてしまい、見かけ倒しの高い精度が出てしまいます。 これを「データリーク」と呼び、初心者が最も陥りやすい罠の一つです。

「昨日の自分は、明日の株価を知らない」という現実と同じ状況を、AIにも作ってあげることが不可欠です。

scikit-learnで予測モデルを構築するコード

それでは、実際にランダムフォレストを呼び出しましょう。scikit-learnを使えば、数行のコードでモデルの構築から学習までを完結させることができます。

以下のコードを実行すると、AIが過去のパターンを分析し始めます。

from sklearn.ensemble import RandomForestClassifier

# 使う指標を指定
features = ['MA_diff', 'Return', 'Volume_change']
X_train = train[features].fillna(0)
y_train = train['Label']

# モデルの作成(決定木の数を100個にする)
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)

AIは裏側で100個の決定木を作り、それぞれの指標がどのように上昇に関係しているかを学習しています。 計算には少し時間がかかることもありますが、Google Colabなら数秒から数十秒で終わるはずです。

未知のデータに対してどれだけ的中したか確認する

学習が終わったら、テスト用データ(AIがまだ見ていない未来のデータ)を使って、予測の的中率を確認します。

どれだけの確率で上昇を言い当てられたのか、数字で客観的に評価しましょう。

from sklearn.metrics import accuracy_score

X_test = test[features].fillna(0)
y_test = test['Label']
y_pred = model.predict(X_test)

print(f"的中率: {accuracy_score(y_test, y_pred):.2f}")

もし的中率が50%を大きく超えていれば、そのモデルには一定の優位性があるといえます。 ただし、単なる的中率だけでなく、後述する「どの指標が効いたのか」を確認することが、実戦での信頼感に繋がります。

分析の目的は、AIに丸投げすることではなく、AIを納得できる根拠の一つにすることだということを忘れないでください。

どの指標が上昇に効いたのかを可視化して分析する

予測の結果が出たら、次はその「理由」を深掘りします。ランダムフォレストの素晴らしい点は、AIの頭の中を覗き見して、どの指標を重視したかを確認できることです。

この章では、分析結果の解釈方法を解説します。どの数字が上昇のサインになっていたのかを可視化することで、投資家としての経験値をAIから吸収しましょう。この「振り返り」こそが、AIを本当の武器に変えるための最も重要なプロセスです。

特徴量の重要度をランキング形式で取り出す

ランダムフォレストには feature_importances_ という便利な機能があります。これを使えば、各指標がどれくらい予測に寄与したかをランキング形式で表示できます。

例えば、「移動平均乖離率」が1位であれば、その期間の相場ではリバウンドや勢いが重要だったということがわかります。

import matplotlib.pyplot as plt

# 重要度を取得
importances = model.feature_importances_
# グラフにして表示
plt.bar(features, importances)
plt.title("Importance of Indicators")
plt.show()

こうして視覚化することで、「自分の予想通りだった」あるいは「意外な指標が効いていた」といった発見があります。 AIが示した重要度は、今の相場における「勝てるルール」を反映している可能性があります。

今の相場で重視すべき指標の正体を探る

重要度のランキングは、分析する期間や銘柄によって刻一刻と変化します。安定した時期には「PER」などの財務指標が効くかもしれませんが、相場が荒れているときは「ボラティリティ」などの動きの激しさが重要視されることもあります。

AIが示した重要度の推移を追うことで、相場の「地合い」の変化を感じ取れるようになります。

  • 上昇局面: トレンド系の指標の重要度が上がる
  • ボックス圏: オシレーター系の指標(売られすぎなど)が重視される
  • 暴落時: 出来高の急増などが判断基準になる

こうした傾向を把握しておけば、次に同様の相場が来たときに、何を基準に銘柄を選ぶべきかの強力なヒントになります。

投資家としての直感とAIの判断を比較してみよう

「AIが買いだと言っているけれど、自分はまだ下がると思う」という場面は必ず出てきます。そんなときは、どちらかが正しいと決めるのではなく、なぜ意見が割れたのかを考えてみましょう。

共感文になりますが、AIの判断を完全に信じ込むのは勇気がいりますよね。 しかし、AIの判断根拠(重要度)を確認することで、「自分が無視していた視点」に気づくことができます。

例えば、自分は業績ばかり見ていたけれど、AIは需給(出来高)の悪化を敏感に察知していた、というケースです。 AIを自分の「盲点」を突いてくれるアドバイザーとして活用することで、投資の質はさらに高まります。

予測モデルを実戦で使うための改善策と注意点

最後に、このモデルを実際の投資に活かすための心得をお伝えします。機械学習は魔法の杖ではありません。使い方を誤ると、大きな損失を招くリスクもあります。

この章では、AI運用において誰もが直面する課題とその対策について解説します。過学習を防ぐコツや、モデルの「寿命」についても触れておきましょう。これらの注意点を守ることで、AIという強力なツールを長く、安全に使い続けることができるようになります。

過去のデータに合わせすぎる「過学習」を防ぐコツ

前述の通り、過学習はAI分析における最大の敵です。これを防ぐためには、決定木の「深さ」を制限することが有効です。

「max_depth」というパラメータを設定することで、AIが細かいノイズを無視するように仕向けます。

# 木の深さを5段階までに制限する
model = RandomForestClassifier(n_estimators=100, max_depth=5)

こうすることで、モデルはよりシンプルで汎用的な法則だけを学習するようになります。 「過去に100点」のモデルではなく、「未来に70点」を出し続けられる柔軟なモデルを目指しましょう。

精度100%はあり得ないという前提で運用する

どれほど優れたアルゴリズムであっても、明日の株価を100%言い当てることは不可能です。株価はニュース、金利、政治、そして投資家の心理など、AIには見えない無数の要因で動いているからです。

AIの予測はあくまで「過去のパターンに基づいた確率的な予測」として捉えるべきです。

  • 損切りの徹底: 予測が外れたときの撤退ルールを決めておく
  • 分散投資: AIの予測が外れる可能性を考慮し、資金を集中させない
  • 人間によるチェック: AIが示した理由(指標)が、今の地合いに合っているか確認する

AIの予測を「最終的な意思決定」ではなく「判断の材料の一つ」として位置づけることが、賢い運用の鉄則です。

時代遅れのモデルにならないよう定期的に学習し直す

相場の性質は、数ヶ月単位でガラリと変わります。去年有効だったモデルが、今年も通用するとは限りません。

最新のデータを取り込み、定期的に学習をやり直すことが不可欠です。

  1. 週次・月次での更新: 最新1ヶ月分のデータを加えてモデルを更新する
  2. モデルの劣化チェック: 的中率が落ちてきたら、特徴量(指標)を見直す
  3. 継続的な検証: 常にテストデータで精度を確認する癖をつける

AIは「育て続ける」ものです。 手間をかけてモデルをメンテナンスし続けることで、あなたの銘柄分析モデルはより実戦に強いものへと進化していきます。

まとめ:AIを「納得のいく判断」の助けにする

この記事では、ランダムフォレストを使って上昇銘柄の特徴を特定し、分析モデルを作る方法を解説してきました。

  • ランダムフォレストは多数決の仕組みで、安定した予測が得られる
  • 特徴量の重要度を確認することで、上昇の根拠を数値で理解できる
  • データの分割と学習には、時系列を守るという鉄則がある
  • 過学習の防止と定期的な更新が、実戦で勝ち続けるための鍵となる

AIは単なる自動販売機ではありません。あなたが選んだ指標(特徴量)がどう機能するかを教えてくれる、知的なパートナーです。まずは気になる1銘柄から、今回紹介したコードを動かしてみてください。その一歩が、これまでの「なんとなく」の投資から、データに基づいた「根拠のある」投資への転換点になるはずです。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

目次