Spaces:
Runtime error
Runtime error
# Import necessary libraries | |
from datetime import datetime | |
import streamlit as st | |
import yfinance as yf | |
from predictions import feature_engineering, load_custom_model, run_inference | |
# Main function to run the app | |
def main(): | |
st.title("Stock Prediction App") | |
# Define the ticker symbols | |
ticker_symbols = ['BCA', 'BRI', 'Mandiri', 'BNI', 'BSI'] | |
# Create a dropdown menu for selecting a ticker symbol | |
selected_ticker = st.selectbox('Select a Ticker', ticker_symbols) | |
# Button to trigger prediction | |
if st.button("Predict the following bank company"): | |
with st.spinner('Loading...'): | |
# Fetch stock data for the selected ticker symbol | |
stock_data = fetch_stock_data(selected_ticker) | |
if stock_data is not None: | |
# Perform model inference | |
predicted_price = perform_inference(stock_data, selected_ticker) | |
# Display the predicted price | |
st.write(f"Predicted Close Price for {selected_ticker}: {predicted_price}") | |
else: | |
st.error("Failed to retrieve data for the selected ticker. Please try again.") | |
# Function to perform inference on the stock data | |
def perform_inference(stock_data, selected_ticker): | |
# Perform feature engineering | |
X_test = feature_engineering(stock_data) | |
# Load the corresponding model | |
model = load_custom_model(selected_ticker) | |
if model is not None: | |
# Run inference | |
predicted_prices = run_inference(model, X_test) | |
return predicted_prices[-1] # Return the last predicted price | |
else: | |
return None | |
# Function to fetch stock data for the selected ticker symbol | |
def fetch_stock_data(selected_ticker): | |
# Define the start date (1 year ago) and end date (today) | |
start_date = datetime(2023, 1, 1) | |
end_date = datetime.now() | |
# Fetch stock data based on the selected ticker symbol | |
if selected_ticker == 'BCA': | |
return yf.download('BBCA.JK', start=start_date, end=end_date) | |
elif selected_ticker == 'BRI': | |
return yf.download('BBRI.JK', start=start_date, end=end_date) | |
elif selected_ticker == 'Mandiri': | |
return yf.download('BMRI.JK', start=start_date, end=end_date) | |
elif selected_ticker == 'BNI': | |
return yf.download('BBNI.JK', start=start_date, end=end_date) | |
elif selected_ticker == 'BSI': | |
return yf.download('BRIS.JK', start=start_date, end=end_date) | |
else: | |
return None | |
# Run the main function | |
if __name__ == "__main__": | |
main() | |