docchi's picture
Upload 8 files
546b08c verified
raw
history blame contribute delete
No virus
2.49 kB
from sklearn.preprocessing import MinMaxScaler
import numpy as np
import pandas as pd
from datetime import datetime, timedelta
import tensorflow as tf
from tensorflow.keras.models import load_model as tf_load_model
# Define the scaler globally
scaler = MinMaxScaler(feature_range=(0, 1))
def feature_engineering(stock_data):
# Define the end date for fetching data (yesterday's date)
end_date = datetime.now() - timedelta(days=1)
# Fetch data until yesterday's date
dataset = stock_data["Close"].loc[:end_date]
dataset = pd.DataFrame(dataset)
data = dataset.values
# 75% to Train, 25% to Test
train_size = int(len(data) * 0.85)
test_size = len(data) - train_size
train_data = data[:train_size]
test_data = data[train_size-5:]
scaled_train = scaler.fit_transform(np.array(train_data).reshape(-1, 1))
scaled_test = scaler.transform(np.array(test_data).reshape(-1, 1))
# Create dataset with 60 time steps and (59 input and only 1 output in each) as this is a regression problem
X_train = []
y_train = []
for i in range(60, len(scaled_train)):
X_train.append(scaled_train[i-5:i, 0])
y_train.append(scaled_train[i, 0])
# Convert Xs, y to arrays
X_train, y_train = np.array(X_train), np.array(y_train)
# Reshape data
X_train = np.reshape(X_train, (X_train.shape[0], X_train.shape[1], 1))
# Creating a testing set with 60 time-steps and 1 output
X_test = []
y_test = []
for i in range(5, len(scaled_test)):
X_test.append(scaled_test[i-5:i, 0])
y_test.append(scaled_test[i, 0])
X_test, y_test = np.array(X_test), np.array(y_test)
X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))
return X_test
# Function to load a specific model
def load_custom_model(selected_model):
if selected_model == 'BCA':
model = tf_load_model('model_bca.keras')
elif selected_model == 'BNI':
model = tf_load_model('model_bni.keras')
elif selected_model == 'BRI':
model = tf_load_model('model_bri.keras')
elif selected_model == 'Mandiri':
model = tf_load_model('model_mri.keras')
else:
model = None
return model
def run_inference(model, X_test):
# Perform inference using the loaded model
predicted_prices = model.predict(X_test)
# Inverse scaling to get the actual prices
predicted_prices = scaler.inverse_transform(predicted_prices)
return predicted_prices