*An AI Stock Predictor (Demo) is a project to showcase ML + finance, while keeping it clear it’s for educational purposes only.
import yfinance as yf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
# -------------------------
# 1. Fetch Stock Data
# -------------------------
def get_stock_data(ticker="AAPL", period="1y"):
data = yf.download(ticker, period=period)
return data
# -------------------------
# 2. Feature Engineering
# -------------------------
def prepare_data(data):
data["Prediction"] = data["Close"].shift(-30) # predict 30 days ahead
X = np.array(data[["Close"]])
X = X[:-30]
y = np.array(data["Prediction"])
y = y[:-30]
return X, y
# -------------------------
# 3. Train Model
# -------------------------
def train_model(X, y):
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
model = LinearRegression()
model.fit(X_train, y_train)
preds = model.predict(X_test)
mse = mean_squared_error(y_test, preds)
return model, mse, X_test, y_test, preds
# -------------------------
# 4. Forecast Future Prices
# -------------------------
def forecast(model, data):
X_forecast = np.array(data[["Close"]])[-30:]
forecast_pred = model.predict(X_forecast)
return forecast_pred
# -------------------------
# 5. Visualize Results
# -------------------------
def plot_results(data, forecast_pred):
plt.figure(figsize=(12, 6))
data["Close"].plot(label="Actual Close Price")
forecast_index = range(len(data), len(data) + 30)
plt.plot(forecast_index, forecast_pred, label="Predicted Next 30 Days", color="red")
plt.legend()
plt.title("AI Stock Price Predictor (Demo)")
plt.xlabel("Days")
plt.ylabel("Price (USD)")
plt.show()
# -------------------------
# Main
# -------------------------
if __name__ == "__main__":
ticker = input("Enter stock ticker (default AAPL): ") or "AAPL"
data = get_stock_data(ticker)
print(data.tail())
X, y = prepare_data(data)
model, mse, X_test, y_test, preds = train_model(X, y)
print(f" Model trained with MSE: {mse:.2f}")
forecast_pred = forecast(model, data)
plot_results(data, forecast_pred)
No comments:
Post a Comment