StockPredict / core /utils.py
aromidvar1355's picture
Update core/utils.py
a114d65 verified
import numpy as np
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
import yfinance as yf
import os
def download_yahoo_data(ticker, start_date, end_date):
df = yf.download(ticker, start=start_date, end=end_date)
df = df[['Close']].dropna()
df.reset_index(inplace=True)
return df
def load_offline_csv(file):
df = pd.read_csv(file)
if 'Date' in df.columns:
df['Date'] = pd.to_datetime(df['Date'])
df.set_index('Date', inplace=True)
return df
def prepare_sequences(data, window_size):
X, y = [], []
for i in range(len(data) - window_size):
X.append(data[i:i + window_size])
y.append(data[i + window_size])
return np.array(X), np.array(y)
def scale_data(df, column='Close'):
scaler = StandardScaler()
scaled = scaler.fit_transform(df[[column]])
return scaled, scaler
def inverse_transform(scaler, data):
return scaler.inverse_transform(data)
def compute_metrics(y_true, y_pred):
return {
"MSE": mean_squared_error(y_true, y_pred),
"MAE": mean_absolute_error(y_true, y_pred),
"R²": r2_score(y_true, y_pred)
}
def rolling_backtest(model, X, y, step=5):
predictions = []
for i in range(0, len(X) - step, step):
X_batch = X[i:i + step]
pred = model.predict(X_batch)
predictions.extend(pred.flatten())
return predictions
# core/utils.py
import matplotlib.pyplot as plt
def plot_loss_curve(train_losses, val_losses=None):
plt.figure(figsize=(10, 5))
plt.plot(train_losses, label='Train Loss', color='blue')
if val_losses is not None:
plt.plot(val_losses, label='Validation Loss', color='orange')
plt.title('Training Loss Curve')
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.savefig("loss_curve.png") # Saves the plot
plt.close()