import os import json import joblib import numpy as np os.environ["CUDA_VISIBLE_DEVICES"] = "-1" import yfinance as yf import features import matplotlib matplotlib.use("Agg") def Predict(): # Define paths (consistent with your previous script) SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__)) DATA_DIR = os.path.join(SCRIPT_DIR, "data") MODEL_PATH = os.path.join(DATA_DIR, "model.keras") # Pull 1 month of current data to make prediction against | for volatility 20 df = yf.download("SPY", period="2mo", auto_adjust=True) if not df.empty: df = features.MakeFeatures(df, 1) df = features.CleanDF(df) # Drop our predictor df.drop('Target_Close', axis=1, inplace=True) # Lazy load this so it doesnt interfere with yfinance from keras.models import load_model # Load the model reconstructed_model = load_model(MODEL_PATH) # Verify it loaded correctly reconstructed_model.summary() # Load the scalers feature_scaler = joblib.load(os.path.join(DATA_DIR, "feature_scaler.pkl")) target_scaler = joblib.load(os.path.join(DATA_DIR, "target_scaler.pkl")) # Scale the data scaled_data = feature_scaler.transform(df) # Predict scaled_predictions = reconstructed_model.predict(scaled_data) # Use the loaded target scaler to get back to % change actual_prediction = target_scaler.inverse_transform(scaled_predictions) # 'predictions' will be a 2D array, flatten it if you want a simple list flat_predictions = actual_prediction.flatten().tolist() print(f"Predicted Target_Close: {flat_predictions}") return json.dumps(flat_predictions) if __name__ == "__main__": Predict()