Skip to main content

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!

Release files for metats 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for metats 0.2.1
File Size Uploaded
metats-0.2.1.tar.gz 16.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for metats 0.2.1
File Interpreter ABI Platform
metats-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 33.5 kB

Release files / metats-0.2.1.tar.gz

Download URL metats-0.2.1.tar.gz
Size 16.9 kB
Tags Source
SHA-256 checksum
How to use checksums
941cc8245be1b5599cd91a2ae5bf88db19a075a0b223387ee8c46c9325b6d27c
BLAKE2b-256 checksum
How to use checksums
df834c9d15851cc5d10d90136a9aa691212cc1fd5dd8dc7840b56ccce58762f0
Upload date
Uploaded using Trusted Publishing?
What is 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

Release files / metats-0.2.1-py3-none-any.whl

Download URL metats-0.2.1-py3-none-any.whl
Size 16.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
db2124dcc6034a3d682469b4106750de926ae1066025dbef3576394cfd0915ce
BLAKE2b-256 checksum
How to use checksums
ca4167430b8b854556a07199f06b7bc444a9f782c9f015c660d6c7dc20071cd4
Upload date
Uploaded using Trusted Publishing?
What is 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

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 release files

0.2.0

2 release files

0.1.5

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page