Spaces:
Sleeping
Sleeping
File size: 2,223 Bytes
fc9d5c1 602bdb4 fc9d5c1 9eca625 fc9d5c1 9eca625 21cc39d 9eca625 602bdb4 22ba16b 602bdb4 fc9d5c1 602bdb4 fc9d5c1 49c8dfd 602bdb4 fc9d5c1 59a1ae2 fc9d5c1 9eca625 0aa9585 9eca625 ee99114 9eca625 ee99114 fc9d5c1 49c8dfd 602bdb4 49c8dfd fc9d5c1 21cc39d 49c8dfd 3faa322 59a1ae2 602bdb4 fc9d5c1 |
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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
import gradio as gr
import pandas as pd
from neuralprophet import NeuralProphet
import io
import warnings
from torch.optim.lr_scheduler import OneCycleLR
warnings.filterwarnings("ignore", category=UserWarning)
url = "VN Index Historical Data.csv"
df = pd.read_csv(url)
df = df[["Date", "Price"]]
df = df.rename(columns={"Date": "ds", "Price": "y"})
df.fillna(method='ffill', inplace=True)
df.dropna(inplace=True)
class CustomNeuralProphet(NeuralProphet):
def lr_scheduler_step(self, epoch, batch_idx, optimizer):
# Custom logic for OneCycleLR scheduler step
for param_group in optimizer.param_groups:
if "lr_scheduler" in param_group:
lr_scheduler = param_group["lr_scheduler"]
lr_scheduler.step()
optimizer = None
m = CustomNeuralProphet(
n_forecasts=30,
n_lags=12,
changepoints_range=1,
num_hidden_layers=3,
yearly_seasonality=True,
n_changepoints=150,
trend_reg_threshold=False,
d_hidden=3,
global_normalization=True,
seasonality_reg=1,
unknown_data_normalization=True,
seasonality_mode="multiplicative",
drop_missing=True,
learning_rate=0.03,
)
# Set the custom LR scheduler
optimizer = m.optimizer
optimizer.lr_scheduler = {
"scheduler": OneCycleLR(optimizer),
"interval": "step",
"frequency": 1,
}
m.fit(df, freq='D')
future = m.make_future_dataframe(df, periods=30, n_historic_predictions=True)
forecast = m.predict(future)
def predict_vn_index(option=None):
fig = m.plot(forecast)
path = "forecast_plot.png"
fig.savefig(path)
disclaimer = "Quý khách chỉ xem đây là tham khảo, công ty không chịu bất cứ trách nhiệm nào về tình trạng đầu tư của quý khách."
return path, disclaimer
if __name__ == "__main__":
dropdown = gr.inputs.Dropdown(["VNIndex"], label="Choose an option", default="VNIndex")
image_output = gr.outputs.Image(type="file", label="Forecast Plot")
disclaimer_output = gr.outputs.Textbox(label="Disclaimer")
interface = gr.Interface(fn=predict_vn_index, inputs=dropdown, outputs=[image_output, disclaimer_output], title="Dự báo VN Index 30 ngày tới")
interface.launch()
|