機械学習で最強の銘柄スクリーニングを自作!Pythonで自分だけの予測モデルを作る方法

  • URLをコピーしました!

機械学習を活用した株の銘柄スクリーニングは、従来の「指標が一定値以下」という固定的な条件を超え、複雑なデータの関連性から未来を予測する強力な武器になります。この記事では、Pythonを使って自分だけの予測モデルを構築し、明日狙うべき銘柄を自動で抽出するまでの全工程を解説します。

プログラミング未経験に近い方でも、Google Colabという無料のツールを使えば、今日からAI投資家への第一歩を踏み出すことが可能です。理論だけで終わらず、実際にコードを動かして「自分だけの最強リスト」を作る楽しさを体験してください。

目次

機械学習を使った株スクリーニングで何ができる?

これまでの株スクリーニングといえば、「PERが15倍以下」「配当利回りが3%以上」といった単一の条件を組み合わせるのが一般的でした。しかし、機械学習を取り入れることで、人間では気づけないような「上昇前の予兆」を複数の指標から多角的に判断できるようになります。

たとえば、株価、出来高、移動平均線の位置関係が特定のパターンになったとき、数日後に株価が跳ね上がる傾向にあるといった、目には見えない法則性をAIが過去データから学習します。これにより、感情に左右されず、根拠に基づいた銘柄選定を自動化できるのが最大の魅力です。

既存ツールにはない自作ならではのメリット

自作のスクリーニングツールを持つ最大の利点は、自分だけの「勝ちパターン」をモデルに組み込める点にあります。市販のツールは万人向けに作られていますが、自作なら「特定の業種だけを狙う」「暴落時だけに特化した予測を行う」といったカスタマイズが自由自在です。

また、既存のサイトでは更新が遅いデータや、有料でしか手に入らないような細かいテクニカル指標も、Pythonを使えば無料で、かつリアルタイムに近い形で取得して分析できます。自分だけの評価軸で全銘柄をランク付けできるため、まだ誰にも気づかれていない「お宝銘柄」を先回りして見つけることが可能になるのです。

過去のパターンから未来の騰落を予測する仕組み

機械学習による予測は、占いとは異なります。過去数十年分におよぶ膨大な株価の動きを「教師データ」としてAIに読み込ませ、現在のチャートの形が過去のどのパターンに似ているかを計算させます。

具体的には、以下のようなデータの流れで予測を行います。

  • 過去10年分の四本値(始値・高値・安値・終値)を読み込む
  • 移動平均線やRSIなどのテクニカル指標を算出する
  • 「この指標のときに5日後に上がったか」という結果を紐付ける
  • 今日のデータを見て、過去の「上がるパターン」に近い銘柄を探す

AIは数千回の試行錯誤を繰り返し、最も的中率の高い判断基準を自ら作り上げます。私たちはその結果をランキング形式で受け取るだけでいいのです。

必要な知識は「基礎的なPython操作」だけで大丈夫

「AIを作るなんて、数学の天才でないと無理だ」と思うかもしれませんが、今のPythonには非常に優秀なライブラリ(便利な道具セット)が揃っています。難しい数式を解く必要はなく、目的に合った道具を順番に呼び出すだけで、高度な予測モデルが完成します。

投資の知識についても、基本的なチャートの読み方さえ知っていれば問題ありません。むしろ、複雑な手法を知りすぎている人よりも、AIが出したデータの結果を素直に受け入れられる初心者の方が、意外と良い成果を出すこともあります。まずはコードをコピーして動かし、数字が変化する様子を眺めることから始めてみましょう。

開発環境を1分で準備しよう

Pythonの学習で最も多くの人が挫折するのは、自分のパソコンにプログラミングができる環境を整える「環境構築」のステップです。設定を一つ間違えるだけでエラーが出てしまい、嫌になってしまうことがよくあります。

そこで今回は、Googleが無料で提供している「Google Colaboratory(通称:Google Colab)」を使います。これは、ブラウザ上でPythonを動かせるサービスで、設定作業は一切不要です。Googleアカウントさえあれば、1分後にはコードを書き始めることができます。

Google Colabを使えばインストール不要で始められる

Google Colabを使うメリットは、設定が不要なことだけではありません。株価の分析には膨大な計算が必要になることがありますが、Googleの強力なコンピューターの力を借りることで、手元のパソコンが低スペックでも高速に処理を終えることができます。

以下の表に、一般的なPC環境とGoogle Colabの比較をまとめました。

項目自分のパソコン(ローカル)Google Colab
準備時間30分〜1時間以上1分(ログインのみ)
PCへの負担計算中に重くなるほとんどなし
ライブラリの用意自分で一つずつ入れる最初から揃っている
場所を選ばない自分のPCが必要スマホやタブレットでも可

セットアップの苦労を飛ばして、一番楽しい「予測と分析」に時間を使いましょう。

必要なライブラリを一括で読み込むコード

まずは、株価データの取得や分析に欠かせない「4つの武器」を準備します。Colabの新しいノートブックを開き、最初のセルに以下のコードを貼り付けて実行してください。

import yfinance as yf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.ensemble import RandomForestClassifier

実行は「再生ボタン」を押すだけです。これだけで、世界中の株価データを操り、AIを構築する準備がすべて整いました。エラーが出なければ、あなたの環境は完璧にセットアップされています。

日本株データを扱うための初期設定

日本株を扱う際には、特有のルールが一つだけあります。それは、銘柄コードの末尾に「.T(東京証券取引所の略)」を付けることです。たとえば、トヨタ自動車なら「7203」ではなく「7203.T」と指定します。

この決まりさえ覚えておけば、日本国内のほぼすべての銘柄にアクセスできます。また、分析結果のグラフで日本語が文字化けしないように設定する手法もありますが、最初はシンプルな英語表記のまま進めるのが最もエラーが少なく、スムーズに学習を進めるコツです。

予測の元となる株価データを取得する

AIを賢くするためには、質の良いデータが大量に必要です。株価の世界では「yfinance」というライブラリを使うのが定番です。これを使えば、Yahoo! Financeから株価データを無料で、かつ数秒でダウンロードできます。

データの取得は、単に数字を眺めるためではなく、AIが「何が起きると株価が動くのか」を学ぶための教科書を作る作業です。まずは特定の銘柄でデータを取得してみて、中身がどのようになっているかを確認するところから始めましょう。

yfinanceを使って東京証券取引所のデータを引き出す

まずは、特定の銘柄(ここでは例としてトヨタ自動車:7203.T)の過去データを取得してみます。以下のコードを実行すると、過去の株価が表形式で表示されます。

# トヨタ自動車のデータを取得
ticker = "7203.T"
data = yf.download(ticker, start="2010-01-01")

# 中身を確認
print(data.tail())

このように、日付ごとの始値、高値、安値、終値、出来高が取得できます。データ期間を長く設定すればするほど、AIは多くの「暴落」や「急騰」を経験し、より賢いモデルへと成長していきます。

過去5年〜10年分のデータを一瞬で保存する方法

機械学習では、最低でも5年分、できれば10年分以上のデータを用意するのが理想的です。短期的なブームだけでなく、数年おきにやってくる景気サイクルをモデルに教え込むためです。

データを保存する際は、CSV形式で書き出しておくと便利です。毎回ダウンロードし直す手間が省けますし、Excelで中身を確認することもできます。

  • data.to_csv("stock_data.csv") と一行書くだけで保存可能
  • ネット回線が不安定な時でも、保存済みデータを使えば分析を続行できる
  • 複数の銘柄をまとめて一つのファイルにするのも簡単

データを集める際は、一つの銘柄だけでなく、日経平均(^N225)などの指数データも一緒に取っておくと、市場全体の地合いを考慮した精度の高い分析が可能になります。

欠損値や異常値を整理してデータの質を高める

取得したばかりのデータには、時折「抜け漏れ」や「おかしな数字」が混ざっています。祝日で市場が閉まっていたり、データ配信のミスで極端な値が入っていたりする場合です。これらを放置すると、AIが混乱してしまい、予測精度がガクッと落ちてしまいます。

データの掃除(データクリーニング)は、地味ですが最も重要な工程です。

  1. データの空欄を前の日の株価で埋める(fillnaメソッド)
  2. 取引が成立していない出来高ゼロの日を除外する
  3. 分割などで株価が急変した箇所の修正を確認する

例えば、data = data.dropna() と記述するだけで、中身のない行をきれいに削除できます。AIに「きれいな教科書」を渡すことが、最強のスクリーニングツールを作る近道です。

AIの判断材料になる「特徴量」を作成する

株価そのものの数字だけをAIに渡しても、なかなか精度の良い予測はできません。人間がチャートを見るときに「移動平均線より上にあるか」や「買われすぎではないか」をチェックするように、AIにも判断のヒントを与える必要があります。

この判断のヒントのことを機械学習では「特徴量」と呼びます。単なる株価の数字を加工して、意味のある指標へと変換する作業です。ここでどのような特徴量を作るかが、自作ツールの「オリジナリティ」であり、腕の見せどころとなります。

移動平均線からの乖離率を算出する

投資家が最も注目する指標の一つが、移動平均線です。特に「株価が移動平均線からどれだけ離れているか」という乖離率は、リバウンド狙いの買いや、過熱感による売りの判断に非常に役立ちます。

乖離率を算出することで、AIは「今はさすがに売られすぎだから、そろそろ上がるだろう」といった予測ができるようになります。

# 25日移動平均線からの乖離率を計算
data['MA25'] = data['Close'].rolling(window=25).mean()
data['Diff_MA25'] = (data['Close'] - data['MA25']) / data['MA25'] * 100

この「乖離率」という数値は、株価の絶対額(100円か10,000円か)に依存しないため、異なる銘柄同士を同じ基準で比較する際にも非常に有効です。

RSIやボリンジャーバンドで過熱感を数値化する

次に、オシレーター系と呼ばれる指標を追加しましょう。RSIは「買われすぎ・売られすぎ」を0から100の数字で表したものです。一般的に70以上は過熱、30以下は底打ちと言われますが、AIはこの「一般的なルール」が本当に正しいのか、あるいは「80を超えてからが本当の爆上げだ」といった隠れたルールを発見してくれます。

以下の指標を組み合わせてみましょう。

  • RSI: 直近の上げ幅と下げ幅の比率
  • ボリンジャーバンド: 株価が収まる統計的な範囲
  • 変化率(ROC): 数日前と比べて何%動いたか

これらの指標を複数組み合わせることで、AIは「RSIが低い、かつボリンジャーバンドのマイナス2シグマにタッチしたとき」といった、より精度の高いエントリーポイントを学習できるようになります。

財務指標(PER・PBR)を組み合わせて精度を上げる

チャートの動き(テクニカル)だけでなく、企業の価値(ファンダメンタル)の情報を加えると、モデルの安定感が増します。どんなにチャートの形が良くても、あまりにも割高な銘柄は長続きしないことが多いからです。

以下の表は、モデルに組み込むべき主要な指標の例です。

指標カテゴリ具体的な項目AIが学ぶこと
テクニカル乖離率、RSI、MACD売買のタイミングと勢い
ボラティリティ標準偏差、ATR銘柄の荒っぽさ(リスク)
ファンダメンタルPER、PBR、自己資本比率銘柄の割安度と健全性

これらのデータを一つの表にまとめ、AIに「これらがこの数値のとき、将来はどうなったか?」を考えさせます。テクニカルとファンダメンタルを融合させた分析は、個人の手作業では限界がありますが、Pythonなら一瞬で完了します。

実際に予測モデルを構築して学習させる

準備した「特徴量(ヒント)」と「実際の株価の動き(答え)」を使って、AIに学習をさせます。ここで重要なのは、何を「正解」とするかです。翌日の株価を完璧に当てるのはプロでも至難の業ですが、「数日以内に数%上がる確率が高い銘柄」に絞れば、的中率は格段に上がります。

今回は、最もバランスが良く、初心者でも扱いやすい「ランダムフォレスト」というアルゴリズムを使います。これは、大量の「もし〜なら」という条件分岐(決定木)を作り、それらを総合して多数決で予測を出す仕組みです。

予測対象は「5日後に3%以上上昇するか」に設定しよう

モデルを作る前に、AIに何を当てさせたいかを決めます。翌日の1円単位の動きを追うとノイズが多くなりがちです。そこで、現実的な投資戦略として「1週間(5営業日)の間に3%以上値上がりするかどうか」を予測対象にするのがおすすめです。

  • 3%以上上がったら「1(アタリ)」
  • それ以外は「0(ハズレ)」

このようにデータを加工してAIに渡します。これを「分類問題」と呼びます。単なる数値予測よりも「買うか、買わないか」の判断が明確になるため、スクリーニングツールとして非常に使いやすくなります。

Scikit-learnを使ってランダムフォレストで学習する

Pythonの「Scikit-learn」というライブラリを使えば、驚くほど簡単にAIの学習が実行できます。複雑な計算過程を意識する必要はありません。

# 特徴量(X)と答え(y)を分ける
X = data[['Diff_MA25', 'RSI', 'ROC']]
y = np.where(data['Close'].shift(-5) > data['Close'] * 1.03, 1, 0)

# モデルの作成と学習
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)

この fit という命令を出した瞬間、AIは過去のチャートを猛烈な勢いで読み込み、独自の判断基準を作り上げます。学習が終われば、あとは新しいデータを流し込むだけで「この銘柄が5日後に上がる確率は80%です」といった予測を出せるようになります。

過去データで「答え合わせ」をして精度を確認する方法

学習が終わったら、そのモデルがどれくらい信じられるのかを確認しなければなりません。このとき、学習に使ったデータをそのまま使ってテストしてはいけません。過去の問題の答えを丸暗記しているだけかもしれないからです。

そこで、データを「学習用(前半)」と「テスト用(後半)」に分けます。

  1. 2010年〜2022年のデータでAIを鍛える
  2. 2023年の「AIがまだ見たことのないデータ」を解かせてみる
  3. 実際の株価の動きと、AIの予測がどれだけ一致したか計算する

この工程を「バックテスト」と呼びます。もしテストでの成績が悪ければ、特徴量を見直したり、別のアルゴリズムを試したりして改良を重ねます。この「作っては試す」の繰り返しが、モデルを最強へと近づけていきます。

翌日の注目銘柄を抽出するスクリーニングを実行しよう

モデルが完成したら、いよいよ本番です。東京証券取引所に上場している数千の銘柄を一つずつAIにチェックさせ、明日の朝に買うべき「金の卵」をリストアップさせましょう。

一つ一つの銘柄を手作業で確認するのは不可能ですが、プログラムなら全銘柄のスキャンも数分で終わります。人間が行うのは、AIが絞り込んだ数件の銘柄について、最終的なニュースチェックや板の状況を確認するだけ。投資の効率が劇的に向上します。

上場銘柄リストをループ処理で全スキャンする

まず、スキャン対象となる銘柄コードのリストを用意します。JPX(日本取引所グループ)の公式サイトから全銘柄のリストをダウンロードし、Pythonで読み込みます。

あとは「銘柄リストから一つ取り出す → データを取得する → 指標を計算する → AIが判定する」という流れをループ(繰り返し)処理で回すだけです。

for ticker in ticker_list:
    # データを取得して予測
    pred_score = model.predict_proba(current_data)[:, 1]
    # スコアが高いものだけを表示
    if pred_score > 0.7:
        print(f"注目銘柄: {ticker}")

このように、自信を持って「上がる」と言える確率(スコア)が一定以上のものだけを表示させるように設定します。

予測スコアが高い順にランキングを表示するコード

単に銘柄を出すだけでなく、AIが「より自信を持っている順」に並べ替えて表示させると、判断がしやすくなります。スコアが高い銘柄は、AIから見て「過去の急騰パターンに非常に酷似している」ことを意味します。

ランキング形式にすることで、資金が限られている場合でも、どの銘柄に優先的に投資すべきかが一目でわかります。上位5銘柄程度に絞って監視リストに入れるのが、実戦的な活用法です。

条件に合致した銘柄をCSVで書き出す

スクリーニングの結果は、画面に表示するだけでなく、CSVファイルとして保存しておきましょう。

  • 銘柄コード、社名
  • AIの予測スコア
  • 現在の株価、RSIなどの重要指標

これらをセットにして保存しておけば、後から「あの時のAIの予測は正しかったのか?」を検証する際にも役立ちます。毎日自動でスクリーニングを実行し、結果を自分のメールやLINEに飛ばすように設定すれば、忙しい会社員の方でも手間なくAI投資を継続できます。

モデルを実戦で使うための注意点

どんなに優れたAIモデルでも、万能ではありません。特に株価の世界には「絶対」は存在せず、予期せぬ出来事によってデータ上の法則が無視されることも多々あります。

自作ツールを実戦で活用するためには、AIの「弱点」を正しく理解し、それを補うためのルールを持っておくことが不可欠です。ここでは、初心者が陥りやすい罠と、それを回避する方法について解説します。

「過去にだけ強いモデル」になっていないか確認する

機械学習の世界で最も恐ろしいのが「過学習(オーバーフィッティング)」です。これは、過去のデータに完璧に合わせようとしすぎて、少しでも状況が変わると全く使い物にならなくなる現象を指します。

例えば、アベノミクスのような「何を買っても上がる相場」のデータだけで学習したAIは、下落相場が来たときに全く対応できません。

  • 偏った期間のデータだけで学習させない
  • あまりに複雑すぎる条件(特徴量)を作らない
  • 定期的に新しいデータでモデルを更新する

常に「今の相場」にモデルが適応しているかを疑い、テストを繰り返す姿勢が大切です。

予測が外れたときの損切りルールを併用しよう

AIが高い予測スコアを出したとしても、それはあくまで「確率」の話です。80%の確率で当たると言われても、残りの20%は外れます。この20%を引いたときに、いかに損失を小さく抑えるかが投資の成否を分けます。

AIの予測に基づいたエントリーであっても、以下のような機械的な出口戦略は必ず用意しておきましょう。

  1. 購入価格から〇%下がったら、AIの予測に関わらず売却する
  2. 5日経っても目標株価に達しなかったら、一旦決済する
  3. 市場全体に影響を与えるような特大ニュースが出たらリセットする

「AIが言ったから上がるはずだ」と固執せず、あくまでAIは「有利な賭け」を教えてくれるツールだと割り切ることが重要です。

相場の急変時にはモデルを再学習させる必要がある

市場のルールは、ある日突然変わることがあります。金利の変動や国際情勢の変化により、昨日までの「上がるパターン」が通用しなくなるのです。このような「構造変化」が起きたとき、古いデータで学んだAIは無力になります。

そのため、モデルは一度作って終わりではありません。

  • 最低でも数ヶ月に一度は、最新のデータを取り込んで学習し直す
  • 相場の性質(上昇トレンド、レンジ相場、下落トレンド)に合わせて、複数のモデルを使い分ける
  • AIの予測精度が落ちてきたと感じたら、一旦運用を止めて原因を探る

AIを常に「最新の常識」でアップデートし続けるメンテナンス能力こそが、自作ツールを最強に保つ秘訣です。

さらに精度を高めるためのヒント

基本的なモデルが動くようになったら、さらに精度を高めるための工夫を取り入れてみましょう。Pythonの世界は奥が深く、少し手を加えるだけで予測の質を大きく向上させるテクニックがたくさんあります。

ここでは、一歩先を行くための3つのアプローチを紹介します。最初からすべてを盛り込む必要はありません。一つずつ試してみて、自分の手法に合うものを見つけてください。

決定木系モデル(LightGBM)を試してみる

今回紹介したランダムフォレスト以外にも、株価予測で非常に高い成果を上げている「LightGBM」というアルゴリズムがあります。これは、予測のミスを次々と修正しながら学習を進める「勾配ブースティング」という手法の一種です。

  • ランダムフォレスト: 並列に多数決を取る
  • LightGBM: 間違えた部分に重点を置いて順番に学習する

一般的に、株価のような複雑なデータの分析においては、LightGBMの方が高い精度が出やすいと言われています。コードの書き方もランダムフォレストと似ているため、切り替えもスムーズに行えます。

ニュースなどのテキスト情報を感情分析に取り入れる

株価は数字だけで動いているわけではありません。決算発表の内容や、SNSでの盛り上がりといった「言葉」の情報も大きな影響を与えます。Pythonの自然言語処理ライブラリを使えば、ニュース記事を読み込んで「ポジティブ(買い)」か「ネガティブ(売り)」かを数値化できます。

この数値を特徴量として追加することで、「チャートの形が良く、かつニュースでも話題になっている銘柄」といった、より精度の高い絞り込みが可能になります。

米国株の指標を日本株の予測に組み込む

日本株は、米国市場の動きに強く影響を受けることが知られています。前夜のニューヨーク市場が暴落すれば、翌日の日本株も下がりやすいのは周知の事実です。

この関係性をAIに教え込みましょう。日本株のデータだけでなく、以下の指標も特徴量に加えます。

  • ダウ平均株価(.DJI)の騰落率
  • ナスダック(.IXIC)の動き
  • ドル円(JPY=X)の為替レート

「昨日のアメリカが強かった日の翌朝、この日本株はどう動いたか」をAIが学ぶことで、日本株単体のデータだけでは説明できない動きも捉えられるようになります。

まとめ:自分だけのAIで銘柄選びを自動化しよう

機械学習を用いた株スクリーニングの自作は、決して手の届かない高度な技術ではありません。Pythonという強力な道具を使い、Google Colabという環境を活用すれば、個人投資家でも機関投資家に劣らない分析環境を手に入れることができます。

この記事で紹介したステップを振り返ってみましょう。

  • 準備: Google Colabで環境を整え、ライブラリを読み込む
  • データ: yfinanceで過去の株価を取得し、不要なデータを取り除く
  • 特徴量: 移動平均線やRSIなどの「判断のヒント」を計算する
  • 学習: ランダムフォレストを使って、未来の騰落をAIに学ばせる
  • 実行: 全銘柄をスキャンし、予測スコアが高い銘柄を抽出する

大切なのは、一度コードを動かして「自分で予測を出した」という経験を持つことです。最初は的中率が低くても、指標を入れ替えたり、モデルのパラメータを調整したりする過程で、自分なりの投資の軸が磨かれていきます。

AIはあなたの感情を排除し、データに基づいた冷静な判断を下してくれます。しかし、最後に注文ボタンを押すのは、あなた自身です。AIという最高の相棒を使いこなし、これまでの「なんとなく」の投資を「根拠ある」投資へと変えていきましょう。

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

この記事を書いた人

目次