【初心者向け】回帰分析で株価トレンドをPythonで分析する方法

基礎知識・戦略

※本記事のコードや情報は執筆時点の仕様に基づいています。投資は自己責任であり、必ずデモ環境や少額資金でテストした上で運用してください。

回帰分析とは何か

回帰分析は「X(説明変数)からY(目的変数)を予測する」統計手法です。最も基本的な単回帰分析は、2つの変数の関係を直線で表します。

株価分析における代表的な使い方として「時間の経過(X軸)に対して株価(Y軸)がどのように変化しているか」というトレンドラインの算出があります。

指標 意味 目安
傾き(係数) Xが1増えたときのYの変化量 正なら上昇トレンド
切片 X=0のときのYの値 基準点
R²スコア(決定係数) 回帰式がデータをどれだけ説明できるか 0〜1、1に近いほど当てはまり良好

R²スコアの重要性

R²スコアが0.8以上なら「この直線はデータをよく説明している」と言えます。逆にR²が0.1以下なら、直線関係はほとんどなく、回帰の意味が薄れます。株価のトレンドが強い時期はR²が高く、もみ合い相場では低くなる傾向があります。

Pythonでトレンド分析を実装する

import yfinance as yf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score

matplotlib.rcParams['font.family'] = 'Meiryo'

# ==============================
# 設定エリア
# ==============================
SYMBOL = "7203.T"   # 分析対象
PERIOD = "1y"       # 期間

# ==============================
# データ取得
# ==============================
df = yf.Ticker(SYMBOL).history(period=PERIOD)
df = df.reset_index()

# 日付を数値インデックスに変換(回帰の入力用)
X = np.arange(len(df)).reshape(-1, 1)  # 0, 1, 2, ... と連番
y = df["Close"].values

# ==============================
# 線形回帰モデルの学習
# ==============================
model = LinearRegression()
model.fit(X, y)

# 予測値(トレンドライン)
y_pred = model.predict(X)
r2     = r2_score(y, y_pred)
slope  = model.coef_[0]

print(f"傾き(1日あたりの変化): {slope:+.2f} 円/日")
print(f"年間変化量(推定): {slope * 252:+.0f} 円")
print(f"R²スコア: {r2:.3f}")
if r2 >= 0.7:
    print("→ 強いトレンドあり(回帰の当てはまり良好)")
elif r2 >= 0.4:
    print("→ 緩やかなトレンドあり")
else:
    print("→ トレンドは弱い(もみ合い相場の可能性)")

# ==============================
# グラフ描画
# ==============================
fig, ax = plt.subplots(figsize=(12, 5))
ax.plot(df["Date"], y, color='steelblue', linewidth=1, label='実際の株価', alpha=0.8)
ax.plot(df["Date"], y_pred, color='red', linewidth=2, linestyle='--',
        label=f'トレンドライン(R²={r2:.2f})')

ax.set_title(f"{SYMBOL} 線形トレンド分析")
ax.set_xlabel("日付")
ax.set_ylabel("終値(円)")
ax.legend()
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig("trend_regression.png", dpi=150)
plt.show()

sklearn のインストール

pip install scikit-learn

まとめ

  • 回帰分析は変数間の関係を直線(または曲線)で表す手法
  • R²スコアが高いほど回帰式がデータに当てはまっている
  • 株価への適用では「時間 vs 価格」でトレンドの強さを定量化できる
  • R²が低い期間はもみ合い相場で、トレンドフォロー戦略が機能しにくい
タイトルとURLをコピーしました