Skip to main content

slimtsf · Sliding-Window Multivariate Time-Series Forest

PyPI version CI Python 3.9+ License: MIT

A minimal, scikit-learn–compatible library for classifying multivariate time-series data using multi-scale sliding-window feature extraction.


Install

pip install slimtsf

Quick Start

import numpy as np
from slimtsf import SlimTSFClassifier

# X: (n_cases, n_channels, n_timepoints)  — 3-D numpy array
X_train = np.random.randn(100, 3, 120)
y_train = np.array([0] * 50 + [1] * 50)

clf = SlimTSFClassifier(n_estimators=200, random_state=42)
clf.fit(X_train, y_train)

X_test = np.random.randn(20, 3, 120)
predictions  = clf.predict(X_test)        # shape (20,)
probabilities = clf.predict_proba(X_test) # shape (20, 2)

Transformers only (composable use)

from slimtsf import SlidingWindowIntervalTransformer, IntervalStatsPoolingTransformer

# Stage 1 — extract sliding-window features
stage1 = SlidingWindowIntervalTransformer(
    window_sizes=[8, 16, 32],      # or None for auto
    window_step_ratio=0.5,
    feature_functions=["mean", "std", "slope"],
)
interval_features = stage1.fit_transform(X_train)  # (n_cases, n_interval_features)

# Stage 2 — pool across windows
stage2 = IntervalStatsPoolingTransformer(aggregations=("min", "mean", "max"))
pooled = stage2.fit_transform(
    interval_features,
    feature_metadata=stage1.feature_metadata_,     # wires Stage 1 → Stage 2
)  # (n_cases, n_pooled_features)

Use with scikit-learn tools

Because SlimTSFClassifier exposes fitted stage attributes, you can access the underlying sklearn RF and use it with standard sklearn utilities:

from sklearn.model_selection import cross_val_score

# Fit first, then use sklearn metrics on transformed data
clf.fit(X_train, y_train)
Xt = clf.stage2_.transform(clf.stage1_.transform(X_train))

scores = cross_val_score(clf.stage3_, Xt, y_train, cv=5)
print(scores.mean())

How It Works

3-D time-series X  (n_cases, n_channels, n_timepoints)
    │
    ▼  Stage 1 — SlidingWindowIntervalTransformer
    │  Slide windows of multiple sizes across each channel.
    │  Compute mean / std / slope per window.
    │  Output: 2-D matrix  (n_cases, n_interval_features)
    │
    ▼  Stage 2 — IntervalStatsPoolingTransformer
    │  For each (channel, feature) group,
    │  pool across windows: min / mean / max.
    │  Output: 2-D compact matrix  (n_cases, n_pooled_features)
    │  *Note: Stage 1 and Stage 2 outputs are configurable for downstream use via `feature_mode` (`"both"` concatenates them).*
    │
    ▼  Stage 3 — Bootstrap Feature Selection (Optional)
    │  Run multiple bootstrap resampling passes (using tree or statistical methods)
    │  to rank and select the top most stable features by selection frequency count.
    │  Output: 2-D refined matrix  (n_cases, n_selected_features)
    │
    ▼  Stage 4 — RandomForestClassifier (scikit-learn)
       Classify the final selected feature matrix.
       Output: predicted labels / probabilities

API Reference

SlimTSFClassifier

Parameter Type Default Description
window_sizes list[int] | None None Window sizes. Auto if None ([T, T//2, …]).
window_step_ratio float 0.5 Step = ratio × window size.
feature_functions list[str|FeatureFunction] ("mean","std","slope") Per-window features.
aggregations list[str] | None ("min","mean","max") Pooling statistics across windows. Pass None to skip Stage 2.
feature_mode str "both" Features to pass downstream: "both", "interval", or "pooled".
bootstrap bool False Run multi-pass feature selection before final RF.
bootstrap_run int 10 Number of passes for feature ranking.
top_rank int 5 Top features to select per pass.
importance_method str "gini" Method for feature calculation: "gini", "permutation", "shap", "fisher", "anova-f".
n_estimators int 200 Number of RF trees.
max_depth int|None None Max tree depth.
class_weight str|dict|None "balanced" RF class weighting.
random_state int|None None Reproducibility seed.
n_jobs int 1 Parallel jobs for RF (-1 = all CPUs).
number_of_jobs int 1 Parallel workers for interval computation in Stage 1.
verbose int|bool False Controls pipeline execution verbosity output logs.

Methods: fit(X, y) · predict(X) · predict_proba(X) · get_feature_names_out() · get_feature_selection_frequencies()

Fitted attributes: stage1_ · stage2_ · stage3_ · classes_ · n_features_in_ · feature_selection_counts_


SlidingWindowIntervalTransformer

Input: X — shape (n_cases, n_channels, n_timepoints)
Output: 2-D feature matrix (n_cases, n_interval_features)

Methods: fit(X) · transform(X) · fit_transform(X) · get_feature_names_out()
Fitted attributes: feature_metadata_ · interval_list_


IntervalStatsPoolingTransformer

Input: 2-D interval feature matrix from Stage 1 + feature_metadata
Output: 2-D pooled feature matrix (n_cases, n_pooled_features)

Methods: fit(X, feature_metadata) · transform(X) · fit_transform(X, feature_metadata) · get_feature_names_out()


Custom Feature Functions

from slimtsf import FeatureFunction, SlidingWindowIntervalTransformer
import numpy as np

# A custom feature: interquartile range
iqr = FeatureFunction(
    name="iqr",
    function=lambda seg: np.percentile(seg, 75, axis=1) - np.percentile(seg, 25, axis=1),
)

transformer = SlidingWindowIntervalTransformer(feature_functions=["mean", iqr])

Versioning

This project follows Semantic Versioning and Conventional Commits:

Commit prefix Effect
fix: patch release (0.1.x)
feat: minor release (0.x.0)
feat!: / BREAKING CHANGE: major release (x.0.0)
docs: chore: test: no release

Development

git clone https://github.com/kennaruk/slimtsf.git
cd slimtsf
pip install -e ".[dev]"
pytest -v

AI Collaboration & System Context

SlimTSF ships with embedded AI context and directives to ensure robust Test-Driven Development (TDD). If you are using an AI coding assistant (like Antigravity or Cursor), it will automatically pick up the rules in the .agents/ directory:

  • .agents/skills/slimtsf_tdd_workflow/SKILL.md — Enforces a strict Test-First -> Implement -> Re-test workflow.
  • .agents/llm_context.md — Provides an architectural system overview for agents.

License

MIT — see LICENSE.

Metadata

Release files for slimtsf 1.6.0

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

Source distribution (sdist)

Source distribution for slimtsf 1.6.0
File Size Uploaded
slimtsf-1.6.0.tar.gz 35.4 kB Details

Built distribution (wheel)

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

Total release size: 62.8 kB

Release files / slimtsf-1.6.0.tar.gz

Download URL slimtsf-1.6.0.tar.gz
Size 35.4 kB
Tags Source
SHA-256 checksum
How to use checksums
a403d9cf5bc78b80a6636781fa9c5557928b85d8984ee19ae003fd5734e3eff2
BLAKE2b-256 checksum
How to use checksums
9bdc39ee7f7a47e23ee4125f7f4991af8b5e4abc7b4de5a8abd54d56a00eed80
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.16

Release files / slimtsf-1.6.0-py3-none-any.whl

Download URL slimtsf-1.6.0-py3-none-any.whl
Size 27.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5012359f1e5b8189b720d059d6f65915ab9386a821f7b33adf434096da17c561
BLAKE2b-256 checksum
How to use checksums
fc4f99b44ed99b6f89675e80ddadfd4f865f36d528f55aa633f46249065bd66c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.16

Release history Release notifications | RSS feed

This release

1.6.0 This release

2 release files

1.5.0

2 release files

1.4.1

2 release files

1.4.0

2 release files

1.3.3

2 release files

1.3.2

2 release files

1.3.1

2 release files

1.3.0

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.3

2 release files

1.0.2

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