Анастасия commited on
Commit
246a07c
·
1 Parent(s): bc2783e
.DS_Store CHANGED
Binary files a/.DS_Store and b/.DS_Store differ
 
images/img.png CHANGED

Git LFS Details

  • SHA256: 23731a0a9b13c427002d1be1f7b84f4f5accbe4dcbc216ac90cb0798174e2372
  • Pointer size: 132 Bytes
  • Size of remote file: 2.8 MB

Git LFS Details

  • SHA256: 52f7b89b1bd4162b14d02854b9bc77938c01676a13ad198f43919239b6c48694
  • Pointer size: 132 Bytes
  • Size of remote file: 2.8 MB
pages/1_📈_Прогноз_индекса. Prophet.py CHANGED
@@ -18,7 +18,7 @@ st.image('images/img.png')
18
  START = "2021-01-01"
19
  TODAY = date.today().strftime("%Y-%m-%d")
20
 
21
- period = st.slider('Количество дней прогноза:', 1, 14, 14)
22
 
23
  # @st.cache_data
24
  def load_data():
@@ -35,20 +35,6 @@ def load_data():
35
  dji, data_500, sse, imoex = load_data()
36
  latest_date = dji['Date'].iloc[-1].strftime('%Y-%m-%d')
37
  st.markdown(f"<h3 style='text-align: center;'>Цены актуальны на последнюю дату закрытия торгов {latest_date}</h3>", unsafe_allow_html=True)
38
- # # Добавляем кнопку обновления данных
39
- # if st.button("Обновить данные", type="primary"):
40
- # dji = yf.download('^DJI', START, TODAY)
41
- # dji.reset_index(inplace=True)
42
- # data_500 = yf.download('^GSPC', START, TODAY)
43
- # data_500.reset_index(inplace=True)
44
- # sse = yf.download('000001.SS', START, TODAY)
45
- # sse.reset_index(inplace=True)
46
- # imoex = yf.download('IMOEX.ME', START, TODAY)
47
- # imoex.reset_index(inplace=True)
48
- # st.success("Данные успешно обновлены!")
49
-
50
- # if st.button("или Обновить данные", type="primary"):
51
- # dji, data_500, sse, imoex = load_data()
52
 
53
  def evaluate_trend_first_day(predicted_value, actual_value):
54
  # Разница между первым днем прогноза и последним днем тестовых данных
@@ -227,9 +213,8 @@ def index(ind, holidays_df, text1, text2, k=0):
227
  if check:
228
  col1, col2 = st.columns([1, 1])
229
  with col1:
230
- st.write("**Информация.** \
231
- Прогноз составлен на тестовой выборке с возможностью выбора периода до 14 дней. \
232
- Дополнительно приведен прогноз для будущего периода с указанием тенденции дельнейшего развития.")
233
  st.markdown("**Метрики для тестовой выборки:**")
234
  st.write(f"MAPE: {mape_test:.2f}%")
235
  st.write(f"RMSE: {rmse_test:.2f}")
 
18
  START = "2021-01-01"
19
  TODAY = date.today().strftime("%Y-%m-%d")
20
 
21
+ period = st.slider('Количество дней прогноза:', 7, 14, 14)
22
 
23
  # @st.cache_data
24
  def load_data():
 
35
  dji, data_500, sse, imoex = load_data()
36
  latest_date = dji['Date'].iloc[-1].strftime('%Y-%m-%d')
37
  st.markdown(f"<h3 style='text-align: center;'>Цены актуальны на последнюю дату закрытия торгов {latest_date}</h3>", unsafe_allow_html=True)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
 
39
  def evaluate_trend_first_day(predicted_value, actual_value):
40
  # Разница между первым днем прогноза и последним днем тестовых данных
 
213
  if check:
214
  col1, col2 = st.columns([1, 1])
215
  with col1:
216
+ st.write(f"**Информация.** \
217
+ Горизонт планирования {period} дней. Валидация модели на тестовой выборке ({period} дней).")
 
218
  st.markdown("**Метрики для тестовой выборки:**")
219
  st.write(f"MAPE: {mape_test:.2f}%")
220
  st.write(f"RMSE: {rmse_test:.2f}")
pages/2_💲 _Прогноз_акций. Prophet.py CHANGED
@@ -22,7 +22,7 @@ TODAY = date.today().strftime("%Y-%m-%d")
22
  stocks = ('AAPL', 'UNH', 'MSFT', 'GS', 'HD', 'AMGN', 'MCD', 'CAT', 'CRM', 'V', 'BA', 'HON', 'TRV', 'AXP', 'JPM', 'IBM', 'JNJ', 'WMT', 'PG', 'CVX', 'MRK', 'MMM', 'NKE', 'DIS', 'KO', 'DOW', 'CSCO', 'INTC', 'VZ', 'WBA')
23
  selected_stock = st.selectbox('Выберите тикер из индекса Dow Jones', stocks)
24
 
25
- period = st.slider('Количество дней прогноза:', 1, 14, 14)
26
 
27
  # @st.cache_data
28
  def load_data(ticker):
@@ -154,9 +154,8 @@ def ticker(data, holidays_df, text1, text2, k):
154
  if check:
155
  col1, col2 = st.columns([1, 1])
156
  with col1:
157
- st.write("**Информация.** \
158
- Прогноз составлен на тестовой выборке с возможностью выбора периода до 14 дней. \
159
- Дополнительно приведен прогноз для будущего периода с указанием тенденции дельнейшего развития.")
160
  st.markdown("**Метрики для тестовой выборки:**")
161
  st.write(f"RMSE: {rmse_test:.2f}")
162
  st.write(f"MAPE: {mape_test:.2f}%")
@@ -167,6 +166,8 @@ def ticker(data, holidays_df, text1, text2, k):
167
  # Оценка тренда на период прогноза
168
  trend_evaluation_period = evaluate_trend_period(forecast_14_days[['ds', 'yhat']])
169
  st.write(trend_evaluation_period)
 
 
170
  with col2:
171
  forecast_results = pd.DataFrame({
172
  'Дата': forecast_14_days['ds'].iloc[-period:].values,
 
22
  stocks = ('AAPL', 'UNH', 'MSFT', 'GS', 'HD', 'AMGN', 'MCD', 'CAT', 'CRM', 'V', 'BA', 'HON', 'TRV', 'AXP', 'JPM', 'IBM', 'JNJ', 'WMT', 'PG', 'CVX', 'MRK', 'MMM', 'NKE', 'DIS', 'KO', 'DOW', 'CSCO', 'INTC', 'VZ', 'WBA')
23
  selected_stock = st.selectbox('Выберите тикер из индекса Dow Jones', stocks)
24
 
25
+ period = st.slider('Количество дней прогноза:', 7, 14, 14)
26
 
27
  # @st.cache_data
28
  def load_data(ticker):
 
154
  if check:
155
  col1, col2 = st.columns([1, 1])
156
  with col1:
157
+ st.write(f"**Информация.** \
158
+ Горизонт планирования {period} дней. Валидация модели на тестовой выборке ({period} дней).")
 
159
  st.markdown("**Метрики для тестовой выборки:**")
160
  st.write(f"RMSE: {rmse_test:.2f}")
161
  st.write(f"MAPE: {mape_test:.2f}%")
 
166
  # Оценка тренда на период прогноза
167
  trend_evaluation_period = evaluate_trend_period(forecast_14_days[['ds', 'yhat']])
168
  st.write(trend_evaluation_period)
169
+ st.info("📌 Кастомная метрика “weighted MAPE’’ - \
170
+ взвешенное среднее абсолютных процентных ошибок 1 дня прогноза по отношению к значениям крайних 7 дней.")
171
  with col2:
172
  forecast_results = pd.DataFrame({
173
  'Дата': forecast_14_days['ds'].iloc[-period:].values,
pages/3_🪙_Прогноз_Bitcoin USD. BiLSTM.py CHANGED
@@ -19,7 +19,7 @@ st.image('images/img.png')
19
 
20
  START = "2021-01-01"
21
  TODAY = date.today().strftime("%Y-%m-%d")
22
- period = st.slider('Количество дней прогноза:', 1, 14, 14)
23
 
24
  df = yf.download('BTC-USD', START, TODAY)
25
  df.reset_index(inplace=True)
@@ -119,7 +119,7 @@ fig.add_trace(go.Scatter(x=formatted_dates,
119
  name='Прогноз будущее',
120
  line=dict(color='red', width=2, dash='dash')))
121
 
122
- fig.update_layout(title=f'Прогноз по Bitcoin на {period} дней',
123
  xaxis_title='Дата',
124
  yaxis_title='Цена закрытия',
125
  xaxis=dict(tickangle=45),
@@ -141,7 +141,7 @@ fig.add_trace(go.Scatter(x=formatted_dates,
141
  name='Прогноз будущее',
142
  line=dict(color='red', width=2, dash='dash')))
143
 
144
- fig.update_layout(title=f'Прогноз по Bitcoin на {period} дней (в интервале месяца)',
145
  xaxis_title='Дата',
146
  yaxis_title='Цена закрытия',
147
  xaxis=dict(tickangle=45),
@@ -153,7 +153,7 @@ fig.update_layout(title=f'Прогноз по Bitcoin на {period} дней (в
153
  st.plotly_chart(fig, use_container_width=True)
154
 
155
  # Генерация дат для будущих педсказаний
156
- future_dates = [df['Date'].values[-1] + np.timedelta64(i+1, 'D') for i in range(14)]
157
 
158
  # Расчет тренда на первый день
159
  trend_first_day = adjusted_future_predictions[0] - df['Adj Close'].iloc[-1]
@@ -169,8 +169,8 @@ check = st.checkbox('Результаты прогноза Bitcoin')
169
  if check:
170
  col1, col2 = st.columns([1, 1])
171
  with col1:
172
- st.write("**Информация.** \
173
- Прогноз составлен для будущего периода с возможностью выбора до 14 дней с указанием тенденции дельнейшего развития.")
174
  st.markdown("**Метрики для тестовой выборки:**")
175
  st.write(f"RMSE: {test_rmse:.2f}")
176
  st.write(f"MAPE: {test_mape:.2f}%")
@@ -179,6 +179,8 @@ if check:
179
  st.write(f'Тенденция на первый день: {trend_first_day_text}')
180
  # Оценка тренда на период прогноза
181
  st.write(f'Тенденция на период прогноза: {trend_last_day_text}')
 
 
182
  with col2:
183
  results = pd.DataFrame({
184
  'Дата': future_dates,
 
19
 
20
  START = "2021-01-01"
21
  TODAY = date.today().strftime("%Y-%m-%d")
22
+ period = st.slider('Количество дней прогноза:', 7, 14, 14)
23
 
24
  df = yf.download('BTC-USD', START, TODAY)
25
  df.reset_index(inplace=True)
 
119
  name='Прогноз будущее',
120
  line=dict(color='red', width=2, dash='dash')))
121
 
122
+ fig.update_layout(title=f'График прогноза для {period} дней по Bitcoin, USD 🇺🇸',
123
  xaxis_title='Дата',
124
  yaxis_title='Цена закрытия',
125
  xaxis=dict(tickangle=45),
 
141
  name='Прогноз будущее',
142
  line=dict(color='red', width=2, dash='dash')))
143
 
144
+ fig.update_layout(title=f'График прогноза для {period} дней по Bitcoin, USD (в интервале месяца)🇺🇸',
145
  xaxis_title='Дата',
146
  yaxis_title='Цена закрытия',
147
  xaxis=dict(tickangle=45),
 
153
  st.plotly_chart(fig, use_container_width=True)
154
 
155
  # Генерация дат для будущих педсказаний
156
+ future_dates = [df['Date'].values[-1] + np.timedelta64(i+1, 'D') for i in range(period)]
157
 
158
  # Расчет тренда на первый день
159
  trend_first_day = adjusted_future_predictions[0] - df['Adj Close'].iloc[-1]
 
169
  if check:
170
  col1, col2 = st.columns([1, 1])
171
  with col1:
172
+ st.write(f"**Информация.** \
173
+ Горизонт планирования {period} дней. Валидация модели на тестовой выборке ({period} дней).")
174
  st.markdown("**Метрики для тестовой выборки:**")
175
  st.write(f"RMSE: {test_rmse:.2f}")
176
  st.write(f"MAPE: {test_mape:.2f}%")
 
179
  st.write(f'Тенденция на первый день: {trend_first_day_text}')
180
  # Оценка тренда на период прогноза
181
  st.write(f'Тенденция на период прогноза: {trend_last_day_text}')
182
+ st.info("📌 Кастомная метрика “weighted MAPE’’ - \
183
+ взвешенное среднее абсолютных процентных ошибок 1 дня прогноза по отношению к значениям крайних 7 дней.")
184
  with col2:
185
  results = pd.DataFrame({
186
  'Дата': future_dates,
pages/__init__.py ADDED
File without changes