Generated banner for Aeon
Generated logo for Aeon

Aeon

K-DenseCommunityCreated by K-Dense Inc.

  • Skill
  • Tool integration
  • Data and AI
  • MIT
  • Low risk

From the author

This skill should be used for time series machine learning tasks including classification, regression, clustering, forecasting, anomaly detection, segmentation, and similarity search. Use when working with temporal data, sequential patterns, or time-indexed observations requiring specialized algorithms beyond standard ML approaches. Particularly suited for univariate and multivariate time series analysis with scikit-learn compatible APIs.
— the description by K-Dense Inc.

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

Aeon is a robust Python library designed for time series analysis, offering a unified estimator API for classification, regression, clustering, forecasting, anomaly detection, segmentation, and similarity search. It supports both univariate and multivariate data, providing specialized algorithms that go beyond standard machine learning approaches. The toolkit is built to be compatible with the scikit-learn ecosystem, making it accessible for researchers and data scientists to integrate temporal data processing into existing pipelines.

What it does

  • Classifies time series data using convolutional, deep learning, dictionary, and distance-based methods.
  • Performs time series regression and clustering with specialized distance metrics like DTW.
  • Detects anomalies and change points in temporal sequences using distance and distribution-based algorithms.
  • Provides forecasting capabilities for predicting future values in time series data.
  • Enables similarity search to find motifs and repeated patterns within temporal datasets.
  • Offers extensive feature extraction and transformation tools, including ROCKET and Catch22.

When to use it

  • When working with temporal data that requires specialized algorithms beyond standard ML.
  • When you need a scikit-learn compatible API for time series classification or regression.
  • When performing anomaly detection or motif discovery in sequential data.
  • When benchmarking different time series algorithms on standard datasets.
  • When you need to extract meaningful features from time series for use in traditional ML models.

Advantages

  • Consistent, scikit-learn compatible API reduces learning curve.
  • Wide range of specialized algorithms for diverse time series tasks.
  • Supports both univariate and multivariate time series analysis.
  • Includes benchmarking tools for evaluating model performance.
  • Highly modular with support for deep learning and feature-based approaches.

Usage examples

“Classify time series data using the RocketClassifier.”
The agent initializes a RocketClassifier, fits it to the training data, and evaluates its accuracy on the test set using the standard scikit-learn fit/score pattern.
“Detect anomalies in a time series using STOMP.”
The agent applies the STOMP detector to the series, calculates anomaly scores, and identifies points exceeding a specified percentile threshold.
“Perform time series clustering with TimeSeriesKMeans.”
The agent configures a TimeSeriesKMeans clusterer with a chosen distance metric and returns cluster labels and centers for the input data.
“Extract features from time series using ROCKET.”
The agent uses the ROCKET transformer to convert raw time series into a feature matrix, which is then used to train a standard classifier like RandomForest.

Install

  1. Download the skill as a ZIP:

    https://autogineer.com/agent-skills/k-dense-ai/aeon/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip aeon.zip -d .agents/skills

Documentation by K-Dense Inc.

Aeon Time Series Machine Learning

Overview

Aeon is a scikit-learn compatible Python toolkit for time series machine learning (aeon-toolkit.org). It provides algorithms across classification, regression, clustering, forecasting, anomaly detection, segmentation, similarity search, distances, transformations, benchmarking, and visualization — with a consistent estimator API.

Version note: Reviewed against aeon 1.6.0 (Python 3.13). Small synthetic checks cover classification, regression, clustering, forecasts, preprocessing, distances, search, segmentation, matrix profiles, metrics, and local dataset I/O. Remote archive and TensorFlow training snippets are illustrative; they were not executed during this review. Reference catalogs are selected methods, not exhaustive lists. See the 1.6 release notes.

When to Use This Skill

Apply this skill when:

  • Classifying or predicting from time series data

  • Detecting anomalies or change points in temporal sequences

  • Clustering similar time series patterns

  • Forecasting future values

  • Finding repeated patterns (motifs) or unusual subsequences (discords)

  • Comparing time series with specialized distance metrics

  • Extracting features from temporal data

Installation

Requires Python 3.11-3.14. Pin the reviewed release for reproducibility:

uv pip install "aeon==1.6.0"

Install only the extras required by the chosen estimator. The broad optional set is available as:

uv pip install "aeon[all_extras]==1.6.0"

On zsh, quote the extras: uv pip install "aeon[all_extras]==1.6.0".

For the matrix-profile examples: uv pip install "aeon==1.6.0" stumpy. Range precision/recall/F-score depend on prts, whose current NumPy<2 requirement conflicts with aeon 1.6; use the runnable AUC metrics or a separately validated environment. Deep learning estimators use TensorFlow. Inspect an estimator's python_dependencies tag before installing optional packages.

Experimental modules

Upstream treats forecasting, anomaly_detection, segmentation, similarity_search, and visualisation as experimental — interfaces may change between minor releases. Prefer stable modules (classification, regression, clustering, distances, transformations) for production pipelines unless you need these tasks.

Core Capabilities

1. Time Series Classification

Categorize time series into predefined classes. See references/classification.md for selected methods.

Quick Start:

from aeon.classification.convolution_based import RocketClassifier
from aeon.datasets import load_classification

# Load data
X_train, y_train = load_classification("GunPoint", split="train")
X_test, y_test = load_classification("GunPoint", split="test")

# Train classifier
clf = RocketClassifier(n_kernels=10000)
clf.fit(X_train, y_train)
accuracy = clf.score(X_test, y_test)

Algorithm Selection:

  • Speed + Performance: MiniRocketClassifier, Arsenal

  • Accuracy candidates to validate: HIVECOTEV2, InceptionTimeClassifier

  • Interpretability: ShapeletTransformClassifier, Catch22Classifier

  • Small Datasets: KNeighborsTimeSeriesClassifier with DTW distance

2. Time Series Regression

Predict continuous values from time series. See references/regression.md for algorithms.

Quick Start:

from aeon.regression.convolution_based import RocketRegressor
from aeon.datasets import load_regression

X_train, y_train = load_regression("Covid3Month", split="train")
X_test, y_test = load_regression("Covid3Month", split="test")

reg = RocketRegressor()
reg.fit(X_train, y_train)
predictions = reg.predict(X_test)
3. Time Series Clustering

Group similar time series without labels. See references/clustering.md for methods.

Quick Start:

from aeon.clustering import TimeSeriesKMeans

clusterer = TimeSeriesKMeans(
    n_clusters=3,
    distance="dtw",
    averaging_method="ba"
)
labels = clusterer.fit_predict(X_train)
centers = clusterer.cluster_centers_
4. Forecasting

Predict future time series values (experimental module in aeon 1.x). See references/forecasting.md for forecasters.

Quick Start:

import numpy as np
from aeon.forecasting import NaiveForecaster
from aeon.forecasting.stats import ARIMA

y_train = np.array([1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0])

# predict returns one value at the configured horizon, not a 5-value vector
naive = NaiveForecaster(strategy="drift", horizon=5)
naive.fit(y_train)
y_at_5 = naive.predict(y_train)  # 15.0

# ARIMA uses p/d/q (not order=); multi-step via iterative_forecast
arima = ARIMA(p=1, d=1, q=1)
y_pred = arima.iterative_forecast(y_train, prediction_horizon=5)  # fits once
5. Anomaly Detection

Identify unusual patterns or outliers. See references/anomaly_detection.md for detectors.

Quick Start:

from aeon.anomaly_detection.series.distance_based import STOMP

detector = STOMP(window_size=50)
anomaly_scores = detector.fit_predict(y)

# Higher scores indicate anomalies
threshold = np.percentile(anomaly_scores, 95)
anomalies = anomaly_scores > threshold
6. Segmentation

Partition time series into regions with change points. See references/segmentation.md.

Quick Start:

from aeon.segmentation import ClaSPSegmenter

segmenter = ClaSPSegmenter()
change_points = segmenter.fit_predict(y)

Find similar patterns within or across time series. See references/similarity_search.md.

Quick Start:

from aeon.similarity_search.subsequence import MASS

# X_train: (n_cases, n_channels, n_timepoints); query: (n_channels, 20)
searcher = MASS(length=20, normalize=True).fit(X_train)
query = X_train[0, :, :20]
indices, distances = searcher.predict(query, k=3, X_index=(0, 0))
# indices rows are (case_index, window_start); self-match is excluded

Feature Extraction and Transformations

Transform time series for feature engineering. See references/transformations.md.

ROCKET Features:

from aeon.transformations.collection.convolution_based import Rocket

rocket = Rocket()
X_features = rocket.fit_transform(X_train)

# Use features with any sklearn classifier
from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier()
clf.fit(X_features, y_train)

Statistical Features:

from aeon.transformations.collection.feature_based import Catch22

catch22 = Catch22()
X_features = catch22.fit_transform(X_train)

Preprocessing:

from aeon.transformations.collection import MinMaxScaler, Normalizer

scaler = Normalizer()  # Z-normalization
X_normalized = scaler.fit_transform(X_train)

Distance Metrics

Specialized temporal distance measures. See references/distances.md for selected distances.

Usage:

from aeon.distances import dtw_distance, dtw_pairwise_distance

# Single distance
distance = dtw_distance(x, y, window=0.1)

# Pairwise distances
distance_matrix = dtw_pairwise_distance(X_train)

# Use with classifiers
from aeon.classification.distance_based import KNeighborsTimeSeriesClassifier

clf = KNeighborsTimeSeriesClassifier(
    n_neighbors=5,
    distance="dtw",
    distance_params={"window": 0.2}
)

Available Distances:

  • Elastic: DTW, DDTW, WDTW, ERP, EDR, LCSS, TWE, MSM

  • Lock-step: Euclidean, Manhattan, Minkowski

  • Shape-based: Shape DTW, SBD

Deep Learning Networks

Neural architectures for time series. See references/networks.md.

Architectures:

  • Convolutional: FCNClassifier, ResNetClassifier, InceptionTimeClassifier

  • Recurrent: RecurrentNetwork; temporal convolution: TCNNetwork

  • Autoencoders: AEFCNClusterer, AEResNetClusterer

Usage:

from aeon.classification.deep_learning import InceptionTimeClassifier

clf = InceptionTimeClassifier(n_epochs=100, batch_size=32)
clf.fit(X_train, y_train)
predictions = clf.predict(X_test)

Datasets and Benchmarking

Load standard benchmarks and evaluate performance. See references/datasets_benchmarking.md.

Load Datasets:

from aeon.datasets import load_classification, load_gunpoint, load_regression

# Classification (generic loader or dataset-specific helper)
X_train, y_train = load_classification("GunPoint", split="train")
X_train, y_train = load_gunpoint(split="train")  # same UCR dataset

# Regression
X_train, y_train = load_regression("Covid3Month", split="train")

Benchmarking:

from aeon.benchmarking.results_loaders import get_estimator_results

# Compare with published results
published = get_estimator_results("ROCKET", ["GunPoint"])

Common Workflows

Classification Pipeline
from aeon.transformations.collection import Normalizer
from aeon.classification.convolution_based import RocketClassifier
from sklearn.pipeline import Pipeline

pipeline = Pipeline([
    ('normalize', Normalizer()),
    ('classify', RocketClassifier())
])

pipeline.fit(X_train, y_train)
accuracy = pipeline.score(X_test, y_test)
Feature Extraction + Traditional ML
from aeon.transformations.collection.convolution_based import Rocket
from sklearn.ensemble import GradientBoostingClassifier

# Extract features
rocket = Rocket()
X_train_features = rocket.fit_transform(X_train)
X_test_features = rocket.transform(X_test)

# Train traditional ML
clf = GradientBoostingClassifier()
clf.fit(X_train_features, y_train)
predictions = clf.predict(X_test_features)
Anomaly Detection with Visualization
from aeon.anomaly_detection.series.distance_based import STOMP
import matplotlib.pyplot as plt

detector = STOMP(window_size=50)
scores = detector.fit_predict(y)

plt.figure(figsize=(15, 5))
plt.subplot(2, 1, 1)
plt.plot(y, label='Time Series')
plt.subplot(2, 1, 2)
plt.plot(scores, label='Anomaly Scores', color='red')
plt.axhline(np.percentile(scores, 95), color='k', linestyle='--')
plt.show()

Best Practices

Data Preparation
  1. Normalize when scientifically appropriate: Per-series z-normalization removes amplitude and level; preserve them when they carry the target signal

    from aeon.transformations.collection import Normalizer
    normalizer = Normalizer()
    X_train = normalizer.fit_transform(X_train)
    X_test = normalizer.transform(X_test)
  2. Handle Missing Values: Impute before analysis

    from aeon.transformations.collection import SimpleImputer
    imputer = SimpleImputer(strategy='mean')
    X_train = imputer.fit_transform(X_train)
  3. Check Data Format: Collections use (n_cases, n_channels, n_timepoints); single series usually use (n_channels, n_timepoints) with axis=1. TimeEval loaders return timepoints by channels: use axis=0 where supported. Check capability tags for missing values, multivariate and unequal-length support (see data format)

Model Selection
  1. Start Simple: Begin with ROCKET variants before deep learning

  2. Use Validation: Tune within training data. Split by subject/group for repeated measurements and chronologically for forecasting or overlapping windows; random splits can leak information

  3. Compare Baselines: Test against simple methods (1-NN Euclidean, Naive)

  4. Consider Resources: ROCKET for speed, deep learning if GPU available

Algorithm Selection Guide

For Fast Prototyping:

  • Classification: MiniRocketClassifier

  • Regression: MiniRocketRegressor

  • Clustering: TimeSeriesKMeans with Euclidean

For Accuracy Comparisons:

  • Classification: HIVECOTEV2, InceptionTimeClassifier

  • Regression: InceptionTimeRegressor

  • Forecasting: AutoARIMA, AutoETS, TCNForecaster (TensorFlow dependency for deep learning)

For Interpretability:

  • Classification: ShapeletTransformClassifier, Catch22Classifier

  • Features: Catch22, TSFresh

For Small Datasets:

  • Distance-based: KNeighborsTimeSeriesClassifier with DTW

  • Avoid: Deep learning (requires large data)

Reference Documentation

Detailed information available in references/:

  • classification.md - Selected classification algorithms

  • regression.md - Regression methods

  • clustering.md - Clustering algorithms

  • forecasting.md - Forecasting approaches

  • anomaly_detection.md - Anomaly detection methods

  • segmentation.md - Segmentation algorithms

  • similarity_search.md - Pattern matching and motif discovery

  • transformations.md - Feature extraction and preprocessing

  • distances.md - Time series distance metrics

  • networks.md - Deep learning architectures

  • datasets_benchmarking.md - Data loading and evaluation tools

Additional Resources

Citing Scientific Agent Skills

This skill is part of Scientific Agent Skills by K-Dense. If it materially contributed to a manuscript, report, presentation, or code release, add the paper to the references or software section and tell the user you did so:

Kassis, T., Agarwal, V., He, Y., Patel, D., & Brueckner, A. M. (2026). Scientific Agent Skills: A Library of Procedural Knowledge for Research Agents. arXiv:2609.00065. https://doi.org/10.48550/arXiv.2609.00065

Always cite the current version. The DOI and https://arxiv.org/abs/2609.00065 resolve to the latest arXiv version, so never append a version suffix such as v1. When network access is available, fetch https://arxiv.org/abs/2609.00065 (or http://export.arxiv.org/api/query?id_list=2609.00065) before writing the reference and take the author list, year, and version from that record. If the record lists a journal reference or publisher DOI, cite the published version instead.

Files

references/segmentation.md

Time Series Segmentation

Aeon provides algorithms to partition time series into regions with distinct characteristics, identifying change points and boundaries.

Segmentation Algorithms

Binary Segmentation
  • BinSegmenter - Recursive binary segmentation

    • Iteratively splits series at most significant change points

    • Parameters: n_cps, model, min_size, jump (requires ruptures)

    • Use when: Known number of segments, hierarchical structure

Classification-Based
  • ClaSPSegmenter - Classification Score Profile

    • Uses classification performance to identify boundaries

    • Discovers segments where classification distinguishes neighbors

    • Use when: Segments have different temporal patterns

Fast Pattern-Based
  • FLUSSSegmenter - Fast Low-cost Unipotent Semantic Segmentation

    • Efficient semantic segmentation using arc crossings

    • Based on matrix profile

    • Use when: Large time series, need speed and pattern discovery

Information Theory
  • InformationGainSegmenter - Information gain maximization

    • Finds boundaries maximizing information gain

    • Use when: Statistical differences between segments

Gaussian Modeling
  • GreedyGaussianSegmenter - Greedy Gaussian approximation

    • Models segments as Gaussian distributions

    • Incrementally adds change points

    • Use when: Segments follow Gaussian distributions

Hierarchical Agglomerative
  • EAggloSegmenter - Bottom-up merging approach

    • Estimates change points via agglomeration

    • Use when: Want hierarchical segmentation structure

Hidden Markov Models
  • HMMSegmenter - HMM with Viterbi decoding

    • Probabilistic state-based segmentation

    • Use when: Segments represent hidden states

Dimensionality-Based
  • HidalgoSegmenter - Heterogeneous Intrinsic Dimensionality Algorithm

    • Detects changes in local dimensionality

    • Use when: Dimensionality shifts between segments

Baseline
  • RandomSegmenter - Random change point generation

    • Use when: Need null hypothesis baseline

Quick Start

from aeon.segmentation import ClaSPSegmenter
import numpy as np

# Create time series with regime changes
y = np.concatenate([
    np.sin(np.linspace(0, 10, 100)),      # Segment 1
    np.cos(np.linspace(0, 10, 100)),      # Segment 2
    np.sin(2 * np.linspace(0, 10, 100))   # Segment 3
])

# Segment the series
segmenter = ClaSPSegmenter(period_length=20, n_cps=2)
change_points = segmenter.fit_predict(y)

print(f"Detected change points: {change_points}")

Output Format

Output depends on the estimator. ClaSPSegmenter and BinSegmenter return change-point locations; HMMSegmenter and InformationGainSegmenter return a dense state/segment label per timepoint. In this API returns_dense=True denotes boundary locations and False denotes per-timepoint labels. Check the concrete estimator and convert label changes before calling boundary metrics:

# Dense labels to boundaries (when labels is a label per timepoint):
change_points = np.flatnonzero(np.diff(labels) != 0) + 1
# e.g. change_points = [100, 200]
# This divides series into: [0:100], [100:200], [200:end]

Algorithm Selection

  • Speed priority: FLUSSSegmenter, BinSegmenter

  • Accuracy priority: ClaSPSegmenter, HMMSegmenter

  • Known segment count: BinSegmenter(n_cps=number_of_segments - 1)

  • Chosen boundary budget: ClaSPSegmenter uses n_cps; InformationGainSegmenter uses k_max. Defaults do not infer an unconstrained number of regimes

  • Pattern changes: FLUSSSegmenter, ClaSPSegmenter

  • Statistical changes: InformationGainSegmenter, GreedyGaussianSegmenter

  • State transitions: HMMSegmenter

The snippets using domain variables are illustrative templates; the synthetic ClaSP, information-gain, and HMM examples were exercised on aeon 1.6.

Common Use Cases

Regime Change Detection

Identify when time series behavior fundamentally changes:

from aeon.segmentation import InformationGainSegmenter

segmenter = InformationGainSegmenter(k_max=3)
# Positive multivariate channels; single-channel entropy is uninformative.
sensor_channels = np.random.default_rng(42).uniform(0.1, 1, (2, 100))
labels = segmenter.fit_predict(sensor_channels, axis=1)
change_points = np.flatnonzero(np.diff(labels) != 0) + 1
Activity Segmentation

Segment sensor data into activities:

from aeon.segmentation import ClaSPSegmenter

segmenter = ClaSPSegmenter(period_length=20, n_cps=2)
boundaries = segmenter.fit_predict(sensor_magnitude)  # one univariate series
Seasonal Boundary Detection

Decode a two-state example with known emission and transition probabilities. HMMSegmenter does not learn those parameters from observations:

from aeon.segmentation import HMMSegmenter
from scipy.stats import norm

segmenter = HMMSegmenter(
    emission_funcs=[(norm.pdf, {"loc": 0, "scale": 0.5}),
                    (norm.pdf, {"loc": 5, "scale": 0.5})],
    transition_prob_mat=np.array([[0.95, 0.05], [0.05, 0.95]]),
)
observations = np.array([0.1, -0.1, 0.2, 4.9, 5.1, 5.0])
segments = segmenter.fit_predict(observations)

Evaluation Metrics

Use segmentation quality metrics:

from aeon.benchmarking.metrics.segmentation import (
    count_error,
    hausdorff_error
)

# Count error: difference in number of change points
count_err = count_error(y_true, y_pred)

# Hausdorff: maximum distance between predicted and true points
hausdorff_err = hausdorff_error(y_true, y_pred)

Best Practices

  1. Normalize data: Ensures change detection not dominated by scale

  2. Choose appropriate metric: Different algorithms optimize different criteria

  3. Validate segments: Visualize to verify meaningful boundaries

  4. Handle noise: Consider smoothing before segmentation

  5. Domain knowledge: Use expected segment count if known

  6. Parameter tuning: Adjust sensitivity parameters (thresholds, penalties)

Visualization

import matplotlib.pyplot as plt

plt.figure(figsize=(12, 4))
plt.plot(y, label='Time Series')
for cp in change_points:
    plt.axvline(cp, color='r', linestyle='--', label='Change Point')
plt.legend()
plt.show()

Sources: segmentation API, release source.

Requirements and compatibility

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Needs: Declares allowed tools, Needs network access, Needs Python

The author says: Requires Python 3.11-3.14 and aeon 1.6.0. Optional stumpy for matrix profiles, TensorFlow for deep learning. Network needed only for installation and remote datasets/results.

Security

What our scanner noticed· Low risk

  • Instructions that use the network

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Created by
K-Dense Inc.
Publisher
K-Dense (Community)
Source
K-Dense-AI/scientific-agent-skills · skills/aeon · commit a25cf9e
Licence
MIT License (redistribution allowed)
  • LICENSE (added by AutoGineer from LICENSE.md)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

AutoGineer is not affiliated with or endorsed by K-Dense Inc. or K-Dense.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download aeon.zip