Elhanan commited on
Commit
029abbc
1 Parent(s): 30bbc37
Files changed (2) hide show
  1. app.py +69 -0
  2. requirements.txt +6 -0
app.py ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import yfinance as yf
3
+ from datetime import datetime, timedelta
4
+ from sklearn.neighbors import KNeighborsRegressor
5
+ from sklearn.ensemble import ExtraTreesRegressor
6
+ from xgboost import XGBRegressor
7
+ from sklearn.preprocessing import MinMaxScaler
8
+
9
+ def get_stock_data(date, stock_symbol, model_type):
10
+ end_date = datetime.strptime(date, "%Y-%m-%d")
11
+ start_date = end_date - timedelta(days=365*2)
12
+ start_date_str = start_date.strftime("%Y-%m-%d")
13
+ end_date_str = end_date.strftime("%Y-%m-%d")
14
+
15
+ stock = yf.download(stock_symbol, start=start_date_str, end=end_date_str)
16
+
17
+ data = stock
18
+
19
+ X = data.iloc[1:].values
20
+ Y = data.iloc[1:]['Open'].shift(-1).dropna().values
21
+
22
+ X = X[1:-1]
23
+ Y = Y[1:]
24
+
25
+ # Normalize X and Y
26
+ scaler = MinMaxScaler()
27
+ X_scaled = scaler.fit_transform(X)
28
+ Y_scaled = scaler.fit_transform(Y.reshape(-1, 1))
29
+
30
+ X_test = data.tail(1).values
31
+
32
+ match model_type:
33
+ case "KNN":
34
+ # Fit KNN model
35
+ knn = KNeighborsRegressor()
36
+ knn.fit(X_scaled, Y_scaled)
37
+ prediction_scaled = knn.predict(X_test)
38
+ prediction = scaler.inverse_transform(prediction_scaled)[0][0]
39
+ case "XGBoost":
40
+ xgb = XGBRegressor()
41
+ xgb.fit(X_scaled, Y_scaled)
42
+ prediction_scaled = xgb.predict(X_test)
43
+ prediction_scaled = prediction_scaled.reshape(1,-1)
44
+ prediction = scaler.inverse_transform(prediction_scaled)[0][0]
45
+ # Add other models
46
+ # Extra Trees chosen for no particular reason
47
+ case "Extra Trees Regressor":
48
+ etr = ExtraTreesRegressor()
49
+ etr.fit(X_scaled, Y_scaled)
50
+ prediction_scaled = etr.predict(X_test)
51
+ prediction_scaled = prediction_scaled.reshape(1,-1)
52
+ prediction = scaler.inverse_transform(prediction_scaled)[0][0]
53
+
54
+
55
+ return str(prediction)
56
+
57
+ def stock_data_interface(date, stock_symbol,model_type):
58
+ prediction = get_stock_data(date, stock_symbol,model_type)
59
+ return prediction
60
+
61
+ iface = gr.Interface(fn=stock_data_interface,
62
+ inputs=[gr.inputs.Textbox(label="Date (YYYY-MM-DD)"),
63
+ gr.inputs.Textbox(label="Stock Symbol"),
64
+ gr.inputs.Dropdown(choices=["KNN","XGBoost","Extra Trees Regressor"], label="Type of model")],
65
+ outputs=[gr.outputs.Textbox(label="Prediction")],
66
+ title="Stock Data Interface",
67
+ description="Enter a date and a stock symbol to retrieve the stock data for the past two years and predict on the latest data.")
68
+
69
+ iface.launch()
requirements.txt ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ gradio
2
+ yfinance
3
+ pandas
4
+ numpy
5
+ plotly
6
+ matplotlib