File size: 2,343 Bytes
0c6b0a3 0558ebf 0c6b0a3 6979b79 0c6b0a3 0558ebf 0c6b0a3 dc95b73 0c6b0a3 6979b79 0c6b0a3 6979b79 0c6b0a3 6979b79 0c6b0a3 6979b79 0c6b0a3 6979b79 0c6b0a3 d865720 6979b79 0558ebf 6979b79 0558ebf 1471a2f |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
import pandas as pd
from datetime import datetime
from datetime import timedelta
import numpy as np
import statsmodels.api as sm
import plotly.express as px
import plotly.graph_objects as go
import warnings
warnings.filterwarnings("ignore")
# from sklearn.metrics import mean_squared_error
df = pd.read_csv('us-shareprices-daily.csv', sep=';')
def get_model_accuracy(data, ticker_symbol):
stock_data = data[data['Ticker'] == ticker_symbol]
# get MSE for testing data using 85/15 split for chosen stock symbol
train_data, test_data = stock_data[0:int(len(stock_data)*0.85)], stock_data[int(len(stock_data)*0.85):]
training_data = train_data['Close'].values
test_data = test_data['Close'].values
history = [x for x in training_data]
model_predictions = []
N_test_observations = len(test_data)
for time_point in range(N_test_observations):
model = sm.tsa.statespace.SARIMAX(history, order=(1,1,1))
model_fit = model.fit(disp=0)
output = model_fit.forecast()
yhat = output[0]
model_predictions.append(yhat)
true_test_value = test_data[time_point]
history.append(true_test_value)
MSE_error = mean_squared_error(test_data, model_predictions)
return 'Testing Mean Squared Error is {}'.format(MSE_error)
def arima_chart(tickers):
df = pd.read_csv('data_and_sp500.csv')
df = df[['Date']+tickers]
fig = px.line(df, x='Date', y=df.columns)
for ticker in tickers:
x = np.array(df['Date'])
y = np.array(df[ticker])
ticker_df = pd.concat([df['Date'], df[ticker]], axis=1)
model = sm.tsa.statespace.SARIMAX(ticker_df[ticker], order=(21,1,7))
model_fit = model.fit(disp=-1)
# print(model_fit.summary())
forecast = model_fit.forecast(7, alpha=0.05)#.predict(start=1259, end=1289)
begin_date = datetime.strptime('2021-10-22', '%Y-%m-%d')
forecast_dates = [begin_date+timedelta(days=i-1258) for i in forecast.index]
fig.add_trace(go.Scatter(x=forecast_dates, y=forecast.to_list(),
mode='lines',
name='{} forecast'.format(ticker)))
fig.update_xaxes(range=[begin_date-timedelta(days=120), begin_date+timedelta(days=10)])
st.plotly_chart(fig, use_container_width=True)
|