Skip to main content

CEEMDAN_LSTM is a Python project for decomposition-integration forecasting models based on EMD methods and LSTM.

Project description

CEEMDAN_LSTM

Thanks for everyone's support and advice. I recently made a major update to the code, and now you can install the module directly using pip. Feel free to email me if you have any questions or error reports.

Background

CEEMDAN_LSTM is a Python module for decomposition-integration forecasting models based on EMD methods and LSTM. It aims at helping beginners quickly make a decomposition-integration forecasting by CEEMDAN, Complete Ensemble Empirical Mode Decomposition with Adaptive Noise (Torres et al. 2011), and LSTM, Long Short-Term Memory recurrent neural network (Hochreiter and Schmidhuber, 1997). If you use or refer to the content of this module, please cite paper: (F. Zhou, Z. Huang, C. Zhang, Carbon price forecasting based on CEEMDAN and LSTM, Applied Energy, 2022, Volume 311, 118601, ISSN 0306-2619.)

Flowchart

Note, as it decomposes the entire series first, there is some look-ahead bias.

Install

(1) PyPi (recommended)

The quickest way to install package is through pip.

pip install CEEMDAN_LSTM

(2) From package

Download the package CEEMDAN_LSTM-1.1a0.tar.gz by click Code -> Download ZIP. After unzipping, move the package where you like.

pip install .(your file path)/CEEMDAN_LSTM-1.1a0.tar.gz

(3) From source

If you want to modify the code, you should download the code and build package yourself. The source is publicaly available and hosted on GitHub: https://github.com/FateMurphy/CEEMDAN_LSTM. To download the code you can either go to the source code page and click Code -> Download ZIP, or use git command line.
After modify the code, you can install the modified package by using command line:

python setup.py install

Or, you can link to the path for the convenient modification, eg. sys.path.append(.your file path/), and then import.

Import and quickly predict

import CEEMDAN_LSTM as cl
cl.quick_keras_predict(data=None) # default dataset: sse_index.csv

Help and example

You can use the code to call for a help. You can copy the code from the output of cl.show_keras_example() to run forecasting and help you learn more about the code.

cl.help()
cl.show_keras_example()
cl.show_keras_example_model()
cl.details_keras_predict(data=None)

Start to Forecast

Take Class: keras_predictor() as an example.

Brief summary and forecast

cl.statis_tests()
kr = cl.keras_predictor()
df_result = kr.hybrid_keras_predict(data, show_data=True, show_model=True, plot_result=True, save_result=True)

0. Statistical tests (not necessary)

The code will ouput the reuslt of ADF test, Ljung-Box Test, Jarque-Bera Test, and plot ACF and PACF figures to evaluate stationarity, autocorrelation, and normality.

cl.statis_tests()

1.Declare the parameters

Note, when declare the PATH, folders will be created automatically, inculding the figure and log folders.

kr = cl.keras_predictor(PATH=None, FORECAST_HORIZONS=30, FORECAST_LENGTH=30, KERAS_MODEL='GRU', 
                        DECOM_MODE='CEEMDAN', INTE_LIST=None, REDECOM_LIST={'co-imf0':'vmd'},
                        NEXT_DAY=False, DAY_AHEAD=1, NOR_METHOD='minmax', FIT_METHOD='add', 
                        USE_TPU=False , **kwargs))
HyperParameters Description
PATH the saving path of figures and logs, eg. 'D:/CEEMDAN_LSTM/'
FORECAST_HORIZONS the length of each input row(x_train.shape), which means the number of previous days related to today, also called Timestep, Forecast_horizons, or Sliding_windows_length in some papers
FORECAST_LENGTH the length of the days to forecast (test set)
KERAS_MODEL the Keras model, eg. 'GRU', 'LSTM', 'DNN', 'BPNN', or model = Sequential()
DECOM_MODE the decomposition method, eg.'EMD', 'VMD', 'CEEMDAN'
INTE_LIST the integration list, eg. pd.Dataframe, (int) 3, (str) '233', (list) [0,0,1,1,1,2,2,2], ...
REDECOM_LIST the re-decomposition list, eg. '{'co-imf0':'vmd', 'co-imf1':'emd'}', pd.DataFrame
NEXT_DAY set True to only predict next out-of-sample value
DAY_AHEAD define to forecast n days' ahead, eg. 0, 1, 2 (default int 1)
NOR_METHOD the normalizing method, eg. 'minmax'-MinMaxScaler, 'std'-StandardScaler, otherwise without normalization
FIT_METHOD the fitting method to stablize the forecasting result (not necessarily useful), eg. 'add', 'ensemble'
USE_TPU change Keras model to TPU model (for google Colab)
Keras Parameters Description (more details refer to https://keras.io)
epochs training epochs/iterations, eg. 30-1000
dropout dropout rate of 3 dropout layers, eg. 0.2-0.5
units the units of network layers, which (3 layers) will set to 4units, 2units, units, eg. 4-32
activation activation function, all layers will be the same, eg. 'tanh', 'relu'
batch_size training batch_size for parallel computing, eg. 4-128
shuffle whether randomly disorder the training set during training process, eg. True, False
verbose report of training process, eg. 0 not displayed, 1 detailed, 2 rough
valid_split proportion of validation set during training process, eg. 0.1-0.2
opt network optimizer, eg. 'adam', 'sgd'
opt_lr optimizer learning rate, eg. 0.001-0.1
opt_loss optimizer loss, eg. 'mse','mae','mape','hinge', refer to https://keras.io/zh/losses/.
opt_patience optimizer patience of adaptive learning rate, eg. 10-100
stop_patience early stop patience, eg. 10-100

2. Forecast

You can try the following forecasting methods. Note, kr. is the class defined in step 1, necessary for the code.

df_result = kr.single_keras_predict(data, show_data=True, show_model=True, plot_result=True, save_result=True)
# df_result = kr.ensemble_keras_predict(data, show_data=True, show_model=True, plot_result=True, save_result=True)
# df_result = kr.respective_keras_predict(data, show_data=True, show_model=True, plot_result=True, save_result=True)
# df_result = kr.hybrid_keras_predict(data, show_data=True, show_model=True, plot_result=True, save_result=True)
# df_result = kr.multiple_predict(data, run_times=10, predict_method='single', save_each_result=False)
Forecast Method Description
Single Method Use Keras model to directly forecast with vector input
Ensemble Method Use decomposition-integration Keras model to directly forecast with matrix input
Respective Method Use decomposition-integration Keras model to respectively forecast each IMFs with vector input
Hybrid Method Use the ensemble method to forecast high-frequency IMF and the respective method for other IMFs.
Multiple Method Multiple run of above method
Rolling Method Rolling run of above method to avoid the look-ahead bias, but take a long long time

3. Validate

(1) Plot heatmap

You need to install seaborn first, and the input should be 2D-array.

cl.plot_heatmap(data, corr_method='pearson', fig_path=None)

(2) Diebold-Mariano-Test (DM test)

Dm test will output the DM test statistics and its p-value. You can refer to https://github.com/johntwk/Diebold-Mariano-Test.

rt = cl.dm_test(actual_lst, pred1_lst, pred2_lst, h=1, crit="MSE", power=2)

4. Next-day Forecast

Set NEXT_DAY=True.

kr = cl.keras_predictor(NEXT_DAY=True)
df_result = kr.hybrid_keras_predict(data, show_data=True, show_model=True, plot_result=True, save_result=True)
# df_result = kr.rolling_keras_predict(data, predict_method='single', save_each_result=False)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

CEEMDAN_LSTM-1.2a0.tar.gz (301.9 kB view details)

Uploaded Source

File details

Details for the file CEEMDAN_LSTM-1.2a0.tar.gz.

File metadata

  • Download URL: CEEMDAN_LSTM-1.2a0.tar.gz
  • Upload date:
  • Size: 301.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.8.5

File hashes

Hashes for CEEMDAN_LSTM-1.2a0.tar.gz
Algorithm Hash digest
SHA256 eb8a8087388a165e6cb38a55107ee0a1a8c10dab4ca1ffa5e7cf2c54074126a3
MD5 2e98ad3c032a4dfdd031c51b0ef25eb3
BLAKE2b-256 267a8ede31c1f15c4f8eb14d8e2edff5acb0154e34e6a9296149cdbf0c888949

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page