ts_rnn requires the following to run:
- Python 3.7.3+
You could install the latest version from PyPi:
pip install ts-rnn
You could install the latest version directly from Github:
pip install https://github.com/LevPerla/Time_Series_Prediction_RNN/archive/master.zip
Download the source code by cloning the repository or by pressing 'Download ZIP' on this page.
Install by navigating to the proper directory and running:
python setup.py install
To import TS_RNN model run
from ts_rnn.model import TS_RNN
First of all, we need to set architecture of RNN in config in the way like this:
rnn_arch = {"layers": [
["LSTM", {"units": 64,
"return_sequences": False,
"kernel_initializer": "glorot_uniform",
"activation": "linear"}],
["Dropout", {"rate": 0.2}],
["Dense", {"activation": "linear"}]
]}
WARNING: Last RNN block need to gave return_sequences: False, another - True
# LSTM block
["LSTM", {Keras layer params}],
["GRU", {Keras layer params}],
["SimpleRNN", {Keras layer params}],
["Bidirectional", {Keras layer params}],
["Dropout", {Keras layer params}],
["Dense", {Keras layer params}]
- n_lags - length of the input vector;
- horizon - length of prediction horizon;
- rnn_arch - description of the model's parameters in Python dictionary format;
- strategy - prediction strategy: "Direct", "Recursive", "MiMo", "DirRec", "DirMo"
- tuner - tupe of Keras.tuner: "RandomSearch", "BayesianOptimization", "Hyperband"
- tuner_hp - keras_tuner.HyperParameters class
- n_step_out - length of the output vector (Need to define only for DirMo strategy);
- loss - Keras loss to train model;
- optimizer - Keras optimizer to train model.
- n_features - number of time series in the input (only for factors forecasting);
- save_dir - dir to save logs
model = TS_RNN(rnn_arch=rnn_arch, # dict with model architecture
n_lags=12, # length of the input vector
horizon=TEST_LEN, # length of prediction horizon
strategy="MiMo", # Prediction strategy from "Direct", "Recursive", "MiMo", "DirRec", "DirMo"
loss="mae", # Keras loss
optimizer="adam", # Keras optimizer
n_features=X_train.shape[1] # also you need to define this if use factors
)
- fit - train the neural network;
- predict - predict by the neural network by input;
- forecast - predict by the neural network by last train values;
- summary - print NNs architecture
- save - save model files to dict
FIT
my_callbacks = [callbacks.EarlyStopping(patience=30, monitor='val_loss')]
model.fit(factors_train=factors_val, # pd.DataFrame with factors time series
target_train=target_val, # pd.DataFrame or pd.Series with target time series
factors_val=factors_val, # pd.DataFrame with factors time series
target_val=target_val, # pd.DataFrame or pd.Series with target time series
epochs=100, # num epoch to train
batch_size=12, # batch_size
callbacks=my_callbacks, # Keras callbacks
save_dir="../your_folder", # folder to image save
verbose=2) # verbose
PREDICT
predicted = model.predict(factors=factors_to_pred,
target=target_to_pred,
prediction_len=len(y_test))
FORECAST
predicted = model.forecast(prediction_len=HORIZON)
SUMMARY
model.summary()
SAVE
model.save(model_name='tsrnn_model', save_dir='path')
Also you may load TS_RNN model from folder
from ts_rnn.model import load_ts_rnn
model = load_ts_rnn(os.path.join('path', 'tsrnn_model'))
Info: For better performance use MinMaxScaler and Deseasonalizer before fitting
from sklearn.model_selection import train_test_split
from ts_rnn.model import TS_RNN
import pandas as pd
HORIZON = 12
data_url = "https://raw.githubusercontent.com/LevPerla/Time_Series_Prediction_RNN/master/data/series_g.csv"
target = pd.read_csv(data_url, sep=";").series_g
target_train, target_test = train_test_split(target, test_size=HORIZON, shuffle=False)
model = TS_RNN(n_lags=12, horizon=HORIZON)
model.fit(target_train=target_train,
target_val=target_test,
epochs=40,
batch_size=12,
verbose=1)
model.summary()
predicted = model.predict(target=target_train[-model.n_lags:], prediction_len=HORIZON)