File size: 2,213 Bytes
fc9d5c1
 
a807e9f
fc9d5c1
 
a807e9f
fc9d5c1
 
 
 
 
 
 
 
 
d8600b1
fc9d5c1
 
602bdb4
 
a807e9f
 
fc9d5c1
 
a807e9f
602bdb4
fc9d5c1
 
 
 
 
a807e9f
fc9d5c1
 
a807e9f
fc9d5c1
 
 
 
 
a807e9f
 
 
 
 
 
 
 
0d8cd1d
a807e9f
 
fc9d5c1
 
 
 
a807e9f
0d8cd1d
 
a807e9f
 
 
c1d5b13
a807e9f
 
 
 
 
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
import gradio as gr
import pandas as pd
from neuralprophet import NeuralProphet, set_log_level
import warnings

set_log_level("ERROR")
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)

m = NeuralProphet(
    n_forecasts=30,
    n_lags=12,
    changepoints_range=1,
    num_hidden_layers=3,
    daily_seasonality=False,
    weekly_seasonality=True,
    yearly_seasonality=True,
    n_changepoints=150,
    trend_reg_threshold=False,  # Disable trend regularization threshold
    d_hidden=3,
    global_normalization=True,
    seasonality_reg=1,
    unknown_data_normalization=True,
    seasonality_mode="multiplicative",
    drop_missing=True,
    learning_rate=0.03
)

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):
    fig1 = m.plot(forecast)
    fig1_path = "forecast_plot1.png"
    fig1.savefig(fig1_path)

    # Add code to generate the second image (fig2)
    fig2 = m.plot_latest_forecast(forecast)  # Replace this line with code to generate the second image
    fig2_path = "forecast_plot2.png"
    fig2.savefig(fig2_path)
    disclaimer = "Dự đoán được thực hiện bởi thuật toán AI học sâu (Deep Learning), bởi đội ngũ AI Consultant. 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 fig1_path, fig2_path, disclaimer


if __name__ == "__main__":
    dropdown = gr.inputs.Dropdown(["VNIndex"], label="Choose an option", default="VNIndex")
    outputs = [
        gr.outputs.Image(type="filepath", label="Lịch sử VNIndex và dự đoán"),
        gr.outputs.Image(type="filepath", label="Dự đoán VNIndex cho 30 ngày tới"),
        gr.outputs.Textbox(label="Disclaimer")
    ]
    interface = gr.Interface(fn=predict_vn_index, inputs=dropdown, outputs=outputs, title="Dự báo VN Index 30 ngày tới")
    interface.launch()