AI株価予想をゼロから構築!yfinanceとPythonで「自分流」の学習モデルを作る方法

  • URLをコピーしました!

「明日の株価がどう動くか、自分だけの予測モデルで確かめてみたい」と考えたことはありませんか。ネット上には多くの予想サイトがありますが、その根拠がブラックボックスであることも少なくありません。

Pythonを使えば、世界中のプロが利用しているデータソースから無料で情報を引き出し、自分だけの「AI株価予想モデル」を構築できます。この記事では、データの取得から学習、そして実際の予想まで、手を動かしながら完成させるステップを詳しく解説します。

目次

なぜAI予測モデルを自作するのか?

投資の世界において、既製品のツールを使うのは便利ですが、そこには「なぜその結論に至ったのか」という過程が見えません。自作のモデルを持つことは、単なる予想以上の価値をあなたにもたらします。

この章では、AIモデルを自律的に構築するメリットと、自作することによって投資判断がどのように変わるのかを整理します。まずは、ツールを作る目的を明確にしましょう。

有料ツールにはない「自分だけの仮説」を試せる

市場に出回っている予想ツールは、一般的な指標をもとに作られています。しかし、あなただけが気づいている「特定の曜日の偏り」や「特定の指標が重なった時の動き」があるかもしれません。

自作モデルであれば、そうした独自のアイデアを自由に組み込めます。例えば、「昨日の出来高が急増し、かつRSIが30を下回った翌日はどうなるか」といった個別の条件をAIに学習させることが可能です。

既製品に従うだけの投資から脱却し、自分の頭で考えた戦略をデータで裏付ける。これこそが、自作モデルを持つ最大の醍醐味です。

ブラックボックスを排除して予測の根拠を理解する

多くのAIツールは、結論だけを提示します。しかし、なぜ「買い」なのかが分からないまま資金を投じるのは、ギャンブルに近い行為です。

自分でコードを書き、データを加工する過程を通じれば、どの指標が予測に強く影響しているのかが手に取るように分かります。「このモデルは移動平均線を重視しすぎているな」といった弱点まで把握できれば、予測が外れた際の修正も容易になります。

根拠が明確であれば、一時的な相場の変動に惑わされることなく、自分のシステムを信じて運用を続けるメンタルも養われます。

Pythonのスキルが上がり投資の客観性が高まる

AIモデルを構築する過程で身につくPythonのスキルは、株価予想以外にも幅広く応用できます。データの自動収集や複雑な計算の自動化は、日々の銘柄分析を劇的に効率化します。

また、感情を排除して数字だけで判断する「客観性」が身につくことも大きな利点です。人間はどうしても「上がってほしい」という希望的観測を持ちがちですが、AIは過去の事実のみに基づいて淡々と答えを出します。

  • 感情に左右されない一貫した判断ができる
  • 数千銘柄を瞬時にスクリーニングできる
  • 自分の予測精度を数値で冷静に振り返れる

こうしたデータ主導のアプローチは、長期的に生き残る投資家になるための強力な武器になります。

yfinanceを使って株価データを瞬時に集める

AIの学習に欠かせないのが「質の高いデータ」です。Pythonには、Yahoo Financeから無料で株価情報を取得できるyfinanceという非常に便利なライブラリがあります。

この章では、環境構築からデータの取得方法までを解説します。まずは、分析の土台となるデータセットを手に入れましょう。

ライブラリをインストールして準備を整える

まずはPython環境に、データ取得と加工に必要な道具を揃えます。以下のコマンドを実行して、必要なライブラリをインストールしてください。

pip install yfinance pandas matplotlib scikit-learn

これらは、それぞれ以下の役割を担います。

  • yfinance: 株価データのダウンロード
  • pandas: データの表形式での管理・加工
  • matplotlib: チャートや予測結果の可視化
  • scikit-learn: AI(機械学習)モデルの構築

日本株や米国株のデータを取得する方法

yfinanceを使えば、ティッカーシンボルを指定するだけで、過去数十年分のデータを取得できます。日本株の場合は、銘柄コードの後に「.T(東京証券取引所)」を付けるのがルールです。

例えば、トヨタ自動車(7203)のデータを取得するコードは次のようになります。

import yfinance as yf

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

print(data.head())

期間(start, end)を自由に変えることで、短期的なデイトレード用のデータから、長期投資用のデータまで柔軟に集めることが可能です。

取得したデータの構造と中身をチェックしよう

ダウンロードしたデータには、投資判断に必要な主要な5つの項目が含まれています。AIに学習させる前に、各項目の意味を再確認しておきましょう。

項目名意味AI学習での役割
Open始値その日の取引が始まった価格
High / Low高値 / 安値その日の価格変動の幅を示す
Close終値最も重視される価格(予測の対象)
Adj Close修正終値分割や配当を考慮した正確な価格
Volume出来高取引の活発さ(トレンドの裏付け)

これらの数値が日ごとに並んだ「時系列データ」が、AIにとっての教科書となります。まずはこの表がきれいに取得できていることを確認してください。

AIに学習させるための「ヒント」をデータに加える

生の株価データ(終値など)だけをAIに見せても、なかなか良い予測はできません。AIが「今は上昇トレンドだ」「今は売られすぎだ」と判断できるように、ヒントとなる指標を追加してあげる必要があります。

これを「特徴量生成」と呼びます。この章では、テクニカル指標をデータに組み込む具体的な方法を紹介します。

終値だけでなく移動平均やRSIを計算する方法

代表的なテクニカル指標である「移動平均線」や「RSI」を、Pandasを使って計算してみましょう。これらは価格の勢いや方向性を示す強力なヒントになります。

# 5日移動平均と25日移動平均を追加
data['MA5'] = data['Close'].rolling(window=5).mean()
data['MA25'] = data['Close'].rolling(window=25).mean()

# 前日比(リターン)を追加
data['Return'] = data['Close'].pct_change()

このように、過去数日間の傾向を数値化することで、AIは「単なる価格」ではなく「価格の動きのパターン」を学習できるようになります。

前日比やボラティリティの変化を数値化する

価格そのもの(1,000円など)は銘柄によって大きく異なりますが、変化率(+2%など)は共通の尺度として使えます。AIには、絶対的な価格よりも「どれくらい動いたか」という変化の情報を与えるのがコツです。

また、価格の変動幅(ボラティリティ)も重要な指標です。相場が荒れているのか、落ち着いているのかという背景情報を加えることで、AIはより慎重な予測を行うようになります。

例えば、高値と安値の差を終値で割った数値を「その日のボラティリティ」として追加すると、AIは急落の予兆を捉えやすくなることがあります。

欠損値を取り除いて綺麗なデータセットを作る

指標を計算すると、最初の数日分はデータが足りずに「NaN(空っぽ)」になります(例:5日移動平均なら最初の4日は計算できない)。この空のデータが混ざっていると、AIはエラーを起こしてしまいます。

# 空のデータがある行を全て削除
data = data.dropna()

学習を始める前に、必ずこのクリーニング作業を行いましょう。ゴミの混じっていない綺麗なデータセットを作ることが、予測精度の8割を決めると言っても過言ではありません。

予測モデルの仕組みとアルゴリズムの選び方

AIにどの「計算アルゴリズム」を使わせるかは非常に重要です。株価のような複雑なデータを扱うには、いくつかの定番の手法があります。

ここでは、初心者から上級者までがよく使う2つの代表的な手法を比較します。自分の目的に合ったものを選べるようになりましょう。

初心者でも扱いやすい「ランダムフォレスト」の強み

ランダムフォレストは、複数の「決定木(もし〜なら、という条件分岐)」を組み合わせて多数決で答えを出す手法です。

この手法の良いところは、データの中に多少のノイズがあっても精度が落ちにくく、設定が簡単である点です。「移動平均が上向きで、かつ出来高が増えたら上がる」といった複雑な条件を、AIが勝手に見つけ出してくれます。

計算速度も速いため、まずはこのアルゴリズムで「AI予測の感覚」を掴むのがおすすめです。

時系列データの扱いに長けた「LSTM」とは?

より本格的な予測を目指すなら、「LSTM(Long Short-Term Memory)」というディープラーニングの手法があります。これは「過去の流れ(記憶)」を保持しながら、未来を予測するのが得意なアルゴリズムです。

アルゴリズム得意なこと難易度
ランダムフォレスト複数の指標の組み合わせを分析低(初心者向け)
LSTM過去数日間の「流れ」を重視高(計算も重い)

株価は前日、前々日の動きが今日に影響を与えるため、LSTMは非常に相性が良いとされています。ただし、設定が難しく、十分なデータ量がないと逆に精度が下がってしまうこともあるため注意が必要です。

「回帰」で価格を当てるか「分類」で方向を当てるか

予測のゴールをどこに設定するかも重要です。

  1. 回帰: 「明日の終値は1,050円だ」と、具体的な価格を予測する。
  2. 分類: 「明日は今日より上がるか、下がるか」という方向だけを予測する。

実は、具体的な価格を当てるのは非常に難易度が高いです。投資判断としては「上がるか下がるか」が分かれば十分なことも多いため、まずは「分類(上がる・下がるの2択)」から始めるのが、実戦的なモデルを作る近道です。

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

それでは、実際にAIにデータを読み込ませて「勉強」をさせてみましょう。ここでは、扱いやすいランダムフォレストを使った構築手順を解説します。

AIが未来を当てるためには、過去のデータで「練習問題」を解かせる必要があります。

データを「学習用」と「テスト用」に分けるルール

株価分析において、絶対にやってはいけないのが「未来のデータで学習させてしまうこと」です。2024年の予測をしたいのに、2024年のデータを学習に使ってしまっては、答えを見ながらテストを受けるようなものです。

  • 学習用データ: 2020年〜2023年のデータ(AIの勉強用)
  • テスト用データ: 2024年のデータ(AIの実力テスト用)

このように、時間を基準にしてスパッとデータを分ける必要があります。これを正しく行うことで、AIの「本当の実力」を測ることができます。

scikit-learnを使ってモデルにデータを読み込ませる

Pythonのscikit-learnを使えば、モデルの作成は驚くほど簡単です。以下のコードは、AIを生成して学習させる基本的な流れです。

from sklearn.ensemble import RandomForestClassifier

# AIモデルの作成(ランダムフォレスト)
model = RandomForestClassifier(n_estimators=100, random_state=42)

# 学習の実行
# X_trainが特徴量(ヒント)、y_trainが正解(翌日の上下)
model.fit(X_train, y_train)

fitという命令が、AIが一生懸命「法則性」を探しているプロセスです。

学習が正常に進んでいるかを確認するステップ

学習が終わったら、まずは「学習用データそのもの」に対してAIがどれくらい正解できるかを確認します。

もし学習用データで100%正解しているのに、テスト用データで全く当たらない場合は、AIが過去のデータに固執しすぎている(オーバーフィッティング)証拠です。

「ほどほどに過去の傾向を掴んでいる」状態が理想的です。学習が終わった直後のワクワク感をおさえ、まずは冷静に数字を確認しましょう。

構築したAIモデルの予測精度を正しく評価する

AIが「明日は上がる」と答えたとしても、それがどれくらい信じられるのかを知る必要があります。この評価を怠ると、精度の低い予測を信じて大損するリスクがあります。

この章では、AIの実力を数値化する指標と、グラフを使った視覚的なチェック方法を学びます。

予測値と実際の株価のズレを数値化しよう

価格を予測する「回帰モデル」の場合、予測した値と実際の値が平均してどれくらいズレているか(MAE:平均絶対誤差)を計算します。

例えば、1,000円の株に対してMAEが10円なら、あなたのAIはだいたい±10円の範囲で予測できているということです。この数値が小さければ小さいほど、精度の高いモデルだと言えます。

正解率だけで判断してはいけない「評価の罠」

「上がるか下がるか」を当てる分類モデルの場合、「正解率(Accuracy)」がよく使われます。しかし、ここに大きな罠があります。

例えば、相場全体が絶好調で、毎日株価が上がっている時期なら、AIが「毎日上がる」と答えるだけで正解率は80%を超えてしまいます。これはAIが賢いのではなく、単に地合いが良いだけです。

  • 精度(Precision): 「上がる」と予測した時の、実際の的中率
  • 再現率(Recall): 「実際に上がった日」のうち、何割を予測できていたか

これらの指標をバランスよく見ることで、AIが「本当の意味でトレンドを捉えているか」が判明します。

グラフを使って予測結果を視覚的にチェックする

数字だけでは分からない特徴を掴むために、実際の株価と予測値をグラフに重ねて表示してみましょう。

import matplotlib.pyplot as plt

plt.plot(test_actual, label="Actual")
plt.plot(test_pred, label="Predicted")
plt.legend()
plt.show()

グラフを見ると、「上昇は当てるけれど、急落には反応できていない」といったモデルの癖が一目で分かります。この気づきが、次回のモデル改善に繋がります。

明日の株価を予想するプログラムを動かしてみよう

いよいよ本番です。今日までの最新データを使って、AIに「明日の予測」を出させてみましょう。

このセクションでは、予測を実行するコードと、その結果をどう解釈すべきかを解説します。

最新のデータを取り込んで予測を実行するコード

予測に必要なのは、直近数日分のデータです。これをyfinanceで取得し、学習時と同じようにテクニカル指標を計算してAIに渡します。

# 今日の最新データを取得
latest_data = yf.download(ticker, period="1mo", interval="1d")
# 特徴量を計算(学習時と同じロジック)
# ...(中略)...
# 明日の予測を実行
prediction = model.predict(last_features)

if prediction[0] == 1:
    print("予測:明日は上昇する見込みです")
else:
    print("予測:明日は下落する見込みです")

このように、毎日決まった時間にプログラムを動かすことで、自分だけの「AI投資顧問」が出来上がります。

予測結果をどのように解釈して活用するか

AIが出した予測を「神のお告げ」のように信じてはいけません。予測はあくまで「過去のパターンに基づけば、こうなる確率が高い」という統計的な結果に過ぎません。

例えば、AIが「上がる」と言い、かつ自分のテクニカル分析でも「買いサイン」が出ており、さらに市場全体のニュースも良好……といったように、複数の根拠の一つとして扱うのが、賢いAIの使い方です。

複数の銘柄をまとめて一括で予想する仕組み

慣れてきたら、一つの銘柄だけでなく、日経平均採用の225銘柄をまとめて予測するループ処理を書いてみましょう。

全銘柄に対して予測を行い、「上昇確率が80%以上」と出た銘柄だけをピックアップして検討する。こうしたスクリーニング作業は、AIが最も得意とする分野です。あなたの投資の視野が、一気に広がります。

AI予想の精度をさらに引き上げるためのコツ

初期のモデルでは、正解率が50%程度(コイン投げと同じ)になることも珍しくありません。そこから精度を積み上げていく作業こそが、自分流モデル構築の醍醐味です。

精度を向上させるための、具体的なアプローチをいくつか紹介します。

決算スケジュールや為替などの外部要因を組み込む

株価は、その銘柄のチャートだけで決まるわけではありません。ドル円のレートや、米国の金利、原油価格などが強く影響する銘柄もあります。

yfinanceを使えば、為替(USDJPY=X)や指数のデータも簡単に取得できます。これらを学習データに追加することで、AIは「円安が進んでいるから、この輸出株は上がりやすい」といった、より高度な因果関係を学習できるようになります。

ハイパーパラメータを調整してモデルを最適化する

AIモデルには、「どれくらい深く学習するか」「いくつ決定木を作るか」といった、人間が調整すべき設定値(ハイパーパラメータ)があります。

これを調整するだけで、精度が数パーセント向上することがあります。PythonにはGridSearchCVなどの、最適な設定値を自動で探してくれるライブラリもあります。少しずつ「AIの調律」を行っていきましょう。

過去数年分のデータを増やして学習の質を高める

単純ですが、学習に使う期間を長くするのも有効です。

3年分のデータよりも、10年分のデータで学習させた方が、AIは「暴落時の動き」や「バブル期の動き」など、様々な市場環境を経験できます。ただし、古すぎるデータは今のアルゴリズム取引が主流の市場には合わないこともあるため、直近のデータを重視するような重み付けを検討するのも一つの手です。

運用を始める前に知っておきたい注意点

最後に、AI株価予想を行う上で避けては通れない「現実」についてお話しします。データ分析の罠にはまらないために、以下の3点は必ず意識しておいてください。

未来の情報を混ぜてしまう「リーク」を防ぐ

データの前処理中に、誤って「当日の終値」を「当日の予測のヒント」に使ってしまうミス(データリーク)は、初心者によくある間違いです。

これをやってしまうと、バックテストでは100%的中する「最強のモデル」が完成しますが、本番(未来の予測)では全く使い物になりません。予測に使うデータは、常に「予測したい日よりも前のもの」だけに限定されているか、厳重に確認してください。

株価はランダムウォークであるという前提を忘れない

「株価は過去の動きとは無関係に、ランダムに決まる」という考え方(ランダムウォーク理論)があります。もしこれが完全に正しいなら、AIによる予測は理論上不可能です。

実際には完全にランダムではありませんが、突発的なニュース、災害、政治的混乱などはAIには予測できません。AIが導き出せるのは、あくまで「過去の延長線上の未来」であることを肝に銘じておきましょう。

AIの予測はあくまで「一つの判断材料」として扱う

AIモデルは、あなたの投資をサポートする「優秀な助手」です。決定を下すのは常にあなた自身でなければなりません。

AIの予測を妄信してレバレッジをかけすぎたり、損切りルールを無視したりするのは本末転倒です。「AIがこう言っているけれど、市場の雰囲気はどうだろう?」と一歩引いて考える余裕を持つことが、資産を守りながら増やすための鉄則です。

まとめ:ツールを育てて自分だけの武器にする

AI株価予想を自作するプロセスを振り返ってみましょう。

  1. yfinanceで良質なデータを集める
  2. テクニカル指標を追加して、AIにヒントを与える
  3. アルゴリズムを選び、過去データで「勉強」させる
  4. 精度を評価し、自分のモデルの癖を理解する

最初は難しく感じるかもしれませんが、一行ずつコードを書いて動かしていくたびに、市場を見る解像度が上がっていくのを実感できるはずです。

完成したモデルは、あなたの資産を守り、育てるための「世界に一つだけの武器」になります。まずはyfinanceをインストールして、トヨタでもソフトバンクでも、あなたの気になる銘柄のデータを1年分ダウンロードするところから始めてみてください。

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

この記事を書いた人

目次