0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

機械学習で株価の予測モデルを作ろうと思ったとき、初学者が一番最初にぶつかる壁があります。
それは、「そもそも、どのデータ(説明変数)を集めてくればいいの?」という問題です。今回は日本を代表する企業「トヨタ自動車」の株価を例に、「説明変数の見つけ方(仮説立て)と、データによる検証方法」に特化して解説します。


1. データの前に「ビジネスモデル」を考える(仮説出し)

APIなどで適当にデータをかき集める前に、まずはトヨタという企業が「どうやって儲けているのか」、そのビジネス構造から逆算して、株価に影響を与えそうな要因(仮説)を洗い出します。

  • 仮説A:グローバルに車を売っている(為替の影響)
    トヨタは海外での売上比率が非常に高い企業です。海外で稼いだドルを日本円に換算した際、円安であればあるほど帳簿上の利益が膨らみます。
    候補変数:ドル円(為替レート)
  • 仮説B:日本市場を牽引する超大型株である(市場全体の影響)
    日経平均を構成する最大級の主力銘柄であるため、日本株市場全体が買われている時はトヨタも買われ、売られている時はトヨタも売られるはずです。
    候補変数:日経平均株価
  • 仮説C:車を作るには資源が必要(原材料価格の影響)
    自動車の製造コストや、購入者のランニングコスト(ガソリン代)は、原油価格に左右されます。資源高になれば利益が圧迫されたり、車の買い控えが起きたりするかもしれません。
    候補変数:原油先物価格
  • 仮説D:自動車業界全体のトレンド(競合の影響)
    EV(電気自動車)シフトの波など、自動車セクター全体の期待値を見るための指標も必要そうです。
    候補変数:テスラの株価

このように、「なんとなく」ではなく、ビジネスの構造からロジカルに候補となる変数をリストアップすることが第一歩です。


2. データを取得し、まずは「形」を見る(散布図行列)

仮説が立てられたら、実際にこれらのデータを取得し、トヨタの株価(目的変数)と本当に連動しているのかを検証(EDA:探索的データ分析)します。

数字の計算に入る前に、まずはデータの「形」を目視で確認します。
なぜなら、データに「異常な外れ値」が混ざっていたり、「U字型のカーブ」を描いていたりした場合、この後に行う相関計算(直線的な関係しか測れない)が狂ってしまうからです。

Pythonの yfinance を使い、散布図行列(ペアプロット)を出力します。

import yfinance as yf
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import japanize_matplotlib

# 1. データの取得(仮説で出した5つの変数をセット)
tickers = {
    '7203.T': 'トヨタ',
    '^N225': '日経平均',
    'JPY=X': 'ドル円',
    'CL=F': '原油先物',
    'TSLA': 'テスラ'
}
df = yf.download(list(tickers.keys()), start='2023-01-01')['Close'].dropna()
df.rename(columns=tickers, inplace=True)

# 2. 散布図行列の出力
sns.pairplot(df, plot_kws={'alpha': 0.5})
plt.suptitle('散布図行列(データの形を目視確認)', y=1.02)
plt.show()

出力された行列の「トヨタ」の行を見て、「右肩上がりの綺麗な斜め直線になっているか」「変な方向に点が飛んでいないか」をチェックし、外れ値がないことを確認します。

image.png


3. 「数字」で仮説の答え合わせをする(相関ヒートマップ)

形に問題がないことがわかったら、いよいよ数字で白黒つけます。
ピアソンの相関係数(-1.0 から 1.0)を計算し、視覚的にわかりやすい相関ヒートマップを出力します。

# 3. 相関ヒートマップの出力
plt.figure(figsize=(8, 6))
# df.corr() が相関係数を一瞬で計算してくれます
sns.heatmap(df.corr(), annot=True, cmap='RdBu_r', vmin=-1, vmax=1)
plt.title('相関ヒートマップ(数値で確認)')
plt.show()

image.png

このヒートマップの「トヨタ」の列に注目し、先ほど立てた仮説の答え合わせをしましょう。

  • トヨタ × ドル円 = 0.86(強い正の相関)
    仮説Aは正解!「円安になればなるほど株価が上がる」という強い連動性が証明されました。最強の説明変数として採用します。
  • トヨタ × 日経平均 = 0.75(強い正の相関)
    仮説Bも正解!市場全体の動きと強く連動しているため、これも採用します。
  • トヨタ × テスラ = 0.47(中程度の相関)
    仮説Dは「そこそこ」。完全に無関係ではありませんが、主力変数にするには少し弱いです。
  • トヨタ × 原油先物 = 0.03(無相関)
    仮説Cは完全にハズレ。「原油が高くなると〜」というロジックは一見もっともらしいですが、データで見ると直接的な連動性はほぼゼロでした。

このようにして、人間の思い込み(原油が関係するはずだ等)をデータで客観的にジャッジし、予測のノイズになる変数をここで思い切って捨てます。


4. 最後の罠:「変数同士の被り」を排除する

「よし、相関の強い『ドル円』と『日経平均』を説明変数にしてAIに学習させよう!」と焦ってはいけません。最後にチェックすべき超重要事項があります。
それが「多重共線性(マルチコ)の回避」です。

ヒートマップの「日経平均」と「ドル円」の交点を見てください。相関係数が 0.75 となっています。
つまり、「説明変数である日経平均とドル円自体が、非常に似た動きをしている(円安になると日経平均も上がる)」ということです。

似たような動きをする変数を複数同時に予測モデルに組み込むと、AIが「どっちの指標を基準に計算すればいいんだ?」と迷ってしまい、計算ロジックが破綻してしまいます。
今回のように説明変数同士の相関が強い場合は、「目的変数(トヨタ)とより相関が強い方だけを残し、もう片方は捨てる」といったアーキテクチャの整理(疎結合化)が必要です。


まとめ:良い予測モデルは「良い仮説」から生まれる

「どんな機械学習アルゴリズムを使うか」よりも、「ビジネスを理解して正しい変数を集め、データで検証し、不要なものを捨てる」という泥臭い工程こそが、モデルの精度を9割方決定づけます。

いきなりコードを書いてAIにデータを投げる前に、まずは「そのサービスの利益を左右する要因は何か?」を紙に書き出し、ヒートマップで答え合わせをするところから始めてみてください。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?