AI Stock Predictor (Demo)

*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: