【Python】AIモデルを作ろう!試しに、株価の予測をやってみよう! 初心者 Twitter Facebook はてブ Pocket LINE コピー 2025.03.03 #python #プログラミング #初心者
コメント
import pandas as pd
import numpy as np
import yfinance as yf
import matplotlib.pyplot as plt
# 株価データを取得(例:トヨタ自動車 7203.T)
ticker = “7203.T”
df = yf.download(ticker, start=”2023-01-01″, end=”2024-01-01″)
# 必要なカラムを選択
df = df[[‘Close’]]
df[‘Returns’] = df[‘Close’].pct_change() # 日次リターン
df.dropna(inplace=True) # 欠損値を削除
# データの可視化
df[‘Close’].plot(figsize=(10, 5), title=”Toyota Stock Price”)
plt.show()
# 移動平均を特徴量に追加
df[‘SMA_5’] = df[‘Close’].rolling(window=5).mean() # 5日移動平均
df[‘SMA_10’] = df[‘Close’].rolling(window=10).mean() # 10日移動平均
df[‘SMA_20’] = df[‘Close’].rolling(window=20).mean() # 20日移動平均
# 過去のデータを特徴量に
df[‘Lag_1’] = df[‘Close’].shift(1)
df[‘Lag_2’] = df[‘Close’].shift(2)
df.dropna(inplace=True) # 欠損値を削除
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
# 目的変数(翌日が上昇なら1, 下降なら0)
df[‘Target’] = (df[‘Close’].shift(-1) > df[‘Close’]).astype(int)
# 特徴量と目的変数を選択
features = [‘SMA_5’, ‘SMA_10’, ‘SMA_20’, ‘Lag_1’, ‘Lag_2’]
X = df[features]
y = df[‘Target’]
# 訓練データとテストデータに分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, shuffle=False)
# モデルの学習
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
# 予測と評価
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f”予測精度: {accuracy:.2f}”)
import pandas as pd
import numpy as np
import yfinance as yf
import matplotlib.pyplot as plt
# 株価データを取得(例:トヨタ自動車 7203.T)
ticker = “7203.T”
df = yf.download(ticker, start=”2023-01-01″, end=”2024-01-01″)
# 必要なカラムを選択
df = df[[‘Close’]]
df[‘Returns’] = df[‘Close’].pct_change() # 日次リターン
df.dropna(inplace=True) # 欠損値を削除
# データの可視化
df[‘Close’].plot(figsize=(10, 5), title=”Toyota Stock Price”)
plt.show()
# 移動平均を特徴量に追加
df[‘SMA_5’] = df[‘Close’].rolling(window=5).mean() # 5日移動平均
df[‘SMA_10’] = df[‘Close’].rolling(window=10).mean() # 10日移動平均
df[‘SMA_20’] = df[‘Close’].rolling(window=20).mean() # 20日移動平均
# 過去のデータを特徴量に
df[‘Lag_1’] = df[‘Close’].shift(1)
df[‘Lag_2’] = df[‘Close’].shift(2)
df.dropna(inplace=True) # 欠損値を削除
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
# 目的変数(翌日が上昇なら1, 下降なら0)
df[‘Target’] = (df[‘Close’].shift(-1) > df[‘Close’]).astype(int)
# 特徴量と目的変数を選択
features = [‘SMA_5’, ‘SMA_10’, ‘SMA_20’, ‘Lag_1’, ‘Lag_2’]
X = df[features]
y = df[‘Target’]
# 訓練データとテストデータに分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, shuffle=False)
# モデルの学習
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
# 予測と評価
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f”予測精度: {accuracy:.2f}”)