はじめに
さて、AIの原理を知りたい・・・・(もちろんこれもありますが)
というより、株価を分析して、買ってみたいwという下心があり、
AIでの実装も少しずつ進めていこうと思います。
別記事で・・・・導入したローカルLLMを使いながら、(半)自動でソースを実装していきたいと思います
初回の今回は「ARモデル」。
一言で言うなら「前の予測結果を次の予測に使っていく回帰モデル」です
実装
まずは、準備ですが、タイトル通り、Yahoo強しw
VSCODE、pythonの環境準備は割愛します。
必要ライブラリは下記
pip install yfinance statsmodels pandas matplotlib scikit-learn
そして、Qwen3.6:27BのLLMにソースを作成してもらいました
LLMとのやり取りで気になった点はローカルLLM検証のほうに記載します
import yfinance as yf
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.ar_model import AutoReg
# --- 1. データの取得 (過去 5 年分) ---
start_date = "2019-01-01"
df = yf.download("6758.T", start=start_date, end=None)
series = df['Close']
# --- 2. データを「学習用」と「テスト用」に分割 (直近 2 年間を表示) ---
test_days = 480 # 約 2 年間
train_data = series[:-test_days]
test_data = series[-test_days:]
# --- 3. モデル A (lags=5) と B (lags=20) の学習・予測 ---
model_a = AutoReg(train_data, lags=5)
fitted_model_a = model_a.fit()
forecast_a = fitted_model_a.predict(start=len(train_data), end=len(series)-1)
model_b = AutoReg(train_data, lags=20)
fitted_model_b = model_b.fit()
forecast_b = fitted_model_b.predict(start=len(train_data), end=len(series)-1)
# --- 4. RMSE の計算 (NumPy を使用) ---
# √(平均((実際値 - 予測値)^2)) の計算式です
rmse_a = np.sqrt(np.mean((test_data.values - forecast_a.values) ** 2))
rmse_b = np.sqrt(np.mean((test_data.values - forecast_b.values) ** 2))
print(f"【検証結果: RMSE (平均誤差額)】")
print(f"モデル A (lags=5): {rmse_a:.2f} 円")
print(f"モデル B (lags=20): {rmse_b:.2f} 円")
print()
print(f"※値が小さいほど、実際の株価に近いことを意味します。")
# --- 5. グラフ描画 ---
plt.figure(figsize=(12, 6))
plt.plot(test_data.index, test_data.values, label='Actual Price', color='black', linewidth=2)
plt.plot(test_data.index, forecast_a.values, label='AR Model (Lags=5)', color='blue', linestyle='--')
plt.plot(test_data.index, forecast_b.values, label='AR Model (Lags=20)', color='green', linestyle=':')
plt.title('Comparison: AR Model RMSE Verification (~2 Years)')
plt.xlabel('Date')
plt.ylabel('Stock Price (JPY)')
plt.legend()
plt.grid(True, alpha=0.5)
plt.tight_layout()
plt.show()
ちょっと簡単すぎに見えますが、動かしてみます
📚 さらに理解を深めたい方には、時系列分析の書籍がお薦めです!
リンク
動作結果

【検証結果: RMSE (平均誤差額)】
モデル A (lags=5): 1133.86 円
モデル B (lags=20): 1079.95 円
※値が小さいほど、実際の株価に近いことを意味します。
ソース解説
- 1.はデータ取得のため、割愛。ただし、最新のデータまで取るようにしています。(日によって結果変わります)
- 2.は直近2年分をテストデータ、そこから5年分を訓練データに分けている
- 3.でARモデルを作成と予測を実行。pythonライブラリなので、お決まりの構文です
- 4.でモデルの評価です。RMSEという「平均を二乗してルートをとることで、どれくらい離れているか」を確認しています
- 5.はグラフ描画なので、記載の通りです。(今や自動でここまで出してくれますね)
結果解説
差が1000程度、で20日の方が精度がよい。まぁ期間長い方が良いのはそうですが、そうならない場合もあるとのことです。
ただ、誤差1000円。。。10万円で誤差1000円ならよいですが、グラフを見ての通り3000~5000円での誤差1000円は、予測としては厳しいですよねぇ。因みに株式コード6758なので、ソニーがサンプルです。
どうやらARモデルは株価のデータと相性悪いみたいです。
このモデル自体が「平均に戻ろうとする」性質持っているそうです。
原理的に、1つ前の予測結果を次の予想に使うので、どんどん予測した結果が平均に収束していってるみたいです。
まとめ
- ARモデルは株価分析には適していない(他の会社でもやろうと思ったけど、やめておきましょう)
- ARIMAモデルは「差分をとる」ことでこの”平均に戻ろうとする性質”(非定常なデータ)に対応できるらしいので、次回実装してみる
📒 noteで自己回帰分析のまとめを公開しています
note ご指定のページが見つかりません


コメント