Skip to main content

Meta-Learning for Time Series Forecasting

Project description

MetaTS | Meta-Learning for Global Time Series Forecasting

example workflow PyPI version fury.io made-with-python GitHub license image

Features:

  • Generating meta features
    • Statistical features : TsFresh, User defined features
    • Automated feature extraction using Deep Unsupervised Learning : Deep AutoEncoder (MLP, LSTM, GRU, ot custom model)
  • Supporting sktime and darts libraries for base-forecasters
  • Providing a Meta-Learning pipeline

Quick Start

Installing the package

pip install metats

Generating a toy dataset by sampling from two different processes

from metats.datasets import ETSDataset

ets_generator = ETSDataset({'A,N,N': 512,
                            'M,M,M': 512}, length=30, freq=4)

data, labels = ets_generator.load(return_family=True)
colors = list(map(lambda x: (x=='A,N,N')*1, labels))

Normalizing the time series

from sklearn.preprocessing import StandardScaler

scaled_data = StandardScaler().fit_transform(data.T)
data = scaled_data.T[:, :, None]

Checking How data looks like

import matplotlib.pyplot as plt
_ = plt.plot(data[10, :, 0])

image

Generating the meta-features

Statistical features using TsFresh

from metats.features.statistical import TsFresh

stat_features = TsFresh().transform(data)

Deep Unsupervised Features

Training an AutoEncoder
from metats.features.unsupervised import DeepAutoEncoder
from metats.features.deep import AutoEncoder, MLPEncoder, MLPDecoder

enc = MLPEncoder(input_size=1, input_length=30, latent_size=8, hidden_layers=(16,))
dec = MLPDecoder(input_size=1, input_length=30, latent_size=8, hidden_layers=(16,))

ae = AutoEncoder(encoder=enc, decoder=dec)
ae_feature = DeepAutoEncoder(auto_encoder=ae, epochs=150, verbose=True)

ae_feature.fit(data)
Generating features using the auto-encoder
deep_features = ae_feature.transform(data)

Visualizing both statistical and deep meta-features

Dimensionality reduction using UMAP for visualization

from umap import UMAP
deep_reduced = UMAP().fit_transform(deep_features)
stat_reduced = UMAP().fit_transform(stat_features)

Visualizing the statistical features:

plt.scatter(stat_reduced[:512, 0], stat_reduced[:512, 1], c='#e74c3c', label='ANN')
plt.scatter(stat_reduced[512:, 0], stat_reduced[512:, 1], c='#9b59b6', label='MMM')
plt.legend()
plt.title('TsFresh Meta-Features')
_ = plt.show()

And similarly the auto encoder's features

plt.scatter(deep_reduced[:512, 0], deep_reduced[:512, 1], c='#e74c3c', label='ANN')
plt.scatter(deep_reduced[512:, 0], deep_reduced[512:, 1], c='#9b59b6', label='MMM')
plt.legend()
plt.title('Deep Unsupervised Meta-Features')
_ = plt.show()

image image

Meta-Learning Pipeline

Creating a meta-learning pipeline with selection strategy:

from metats.pipeline import MetaLearning

pipeline = MetaLearning(method='selection', loss='mse')

Adding AutoEncoder features:

from metats.features.unsupervised import DeepAutoEncoder
from metats.features.deep import AutoEncoder, MLPEncoder, MLPDecoder

enc = MLPEncoder(input_size=1, input_length=23, latent_size=8, hidden_layers=(16,))
dec = MLPDecoder(input_size=1, input_length=23, latent_size=8, hidden_layers=(16,))

ae = AutoEncoder(encoder=enc, decoder=dec)
ae_features = DeepAutoEncoder(auto_encoder=ae, epochs=200, verbose=True)

pipeline.add_feature(ae_features)

You can add as many features as you like:

from metats.features.statistical import TsFresh

stat_features = TsFresh()
pipeline.add_feature(stat_features)

Adding two sktime forecaster as base-forecasters

from sktime.forecasting.naive import NaiveForecaster
from sktime.forecasting.compose import make_reduction
from sklearn.neighbors import KNeighborsRegressor

regressor = KNeighborsRegressor(n_neighbors=1)
forecaster1 = make_reduction(regressor, window_length=15, strategy="recursive")

forecaster2 = NaiveForecaster() 

pipeline.add_forecaster(forecaster1)
pipeline.add_forecaster(forecaster2)

Specify some meta-learner

from sklearn.ensemble import RandomForestClassifier

pipeline.add_metalearner(RandomForestClassifier())

Training the pipeline

pipeline.fit(data, fh=7)

Prediction for another set of data

pipeline.predict(data, fh=7)

About the package

Contributors

  • Sasan Barak
  • Amirabbas Asadi

We wish to see your name in the list of contributors, So we are waiting for pull requests!

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

metats-0.2.1.tar.gz (16.9 kB view details)

Uploaded Source

Built Distribution

metats-0.2.1-py3-none-any.whl (16.7 kB view details)

Uploaded Python 3

File details

Details for the file metats-0.2.1.tar.gz.

File metadata

  • Download URL: metats-0.2.1.tar.gz
  • Upload date:
  • Size: 16.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.65.0 CPython/3.8.10

File hashes

Hashes for metats-0.2.1.tar.gz
Algorithm Hash digest
SHA256 941cc8245be1b5599cd91a2ae5bf88db19a075a0b223387ee8c46c9325b6d27c
MD5 120ddafd18251e6dbc172b7b74d97bc9
BLAKE2b-256 df834c9d15851cc5d10d90136a9aa691212cc1fd5dd8dc7840b56ccce58762f0

See more details on using hashes here.

File details

Details for the file metats-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: metats-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 16.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.22.0 requests-toolbelt/0.9.1 tqdm/4.65.0 CPython/3.8.10

File hashes

Hashes for metats-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 db2124dcc6034a3d682469b4106750de926ae1066025dbef3576394cfd0915ce
MD5 cd87eb75b3858794e834e98dcaa29543
BLAKE2b-256 ca4167430b8b854556a07199f06b7bc444a9f782c9f015c660d6c7dc20071cd4

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