aeon
The facts
Its description
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 the agent reads to decide when to use it.
Tools it may use, or may not
allowed-tools: Read Write Edit Bash
Tools it may use while it runs without asking you first.
Files it mentions
references/classification.md, references/regression.md, references/clustering.md, references/forecasting.md, references/anomaly_detection.md (first 5 of 11 lines)
Files the text names, such as ones to read or write. Found by matching words, so treat them as pointers.
Licence
BSD-3-Clause license, from the skill file
The terms its author shares it under, which let it be shown here.
Other settings
compatibility: 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. metadata: version: "1.3" last-reviewed: "2026-09-30" skill-author: K-Dense Inc.
More settings at the top of the file, shown as written.
Other files in this skill (11) Close
The text
Most marks come from matching words in the file, so treat them as pointers.
Aeon Time Series Machine Learning
Raw lines 1 to 14Overview
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.
Raw lines 15 to 20When 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.
Raw lines 50 to 53Core Capabilities
Raw lines 54 to 551. 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:
KNeighborsTimeSeriesClassifierwith 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)Raw lines 81 to 973. 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_Raw lines 98 to 1144. 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 onceRaw lines 115 to 1365. 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 > thresholdRaw lines 137 to 1526. 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)Raw lines 153 to 1647. Similarity Search
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 excludedRaw lines 165 to 179Feature 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)Raw lines 180 to 212Distance 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)Raw lines 242 to 259Datasets 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"])Raw lines 260 to 283Common Workflows
Raw lines 284 to 285Classification 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)Raw lines 286 to 301Feature 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)Raw lines 302 to 318Anomaly 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()Raw lines 319 to 336Best Practices
Raw lines 337 to 338Data Preparation
- Normalize when scientifically appropriate: Per-series z-normalization removes amplitude and level; preserve them when they carry the target signal ``
python from aeon.transformations.collection import Normalizer normalizer = Normalizer() X_train = normalizer.fit_transform(X_train) X_test = normalizer.transform(X_test)
- Handle Missing Values: Impute before analysis ``
python from aeon.transformations.collection import SimpleImputer imputer = SimpleImputer(strategy='mean') X_train = imputer.fit_transform(X_train)
- Check Data Format: Collections use
(n_cases, n_channels, n_timepoints); single series usually use(n_channels, n_timepoints)withaxis=1. TimeEval loaders return timepoints by channels: useaxis=0where supported. Check capability tags for missing values, multivariate and unequal-length support (see data format)
Model Selection
- Start Simple: Begin with ROCKET variants before deep learning
- 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
- Compare Baselines: Test against simple methods (1-NN Euclidean, Naive)
- Consider Resources: ROCKET for speed, deep learning if GPU available
Algorithm Selection Guide
For Fast Prototyping:
- Classification:
MiniRocketClassifier - Regression:
MiniRocketRegressor - Clustering:
TimeSeriesKMeanswith 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:
KNeighborsTimeSeriesClassifierwith DTW - Avoid: Deep learning (requires large data)
Reference Documentation
Detailed information available in references/:
classification.md- Selected classification algorithmsregression.md- Regression methodsclustering.md- Clustering algorithmsforecasting.md- Forecasting approachesanomaly_detection.md- Anomaly detection methodssegmentation.md- Segmentation algorithmssimilarity_search.md- Pattern matching and motif discoverytransformations.md- Feature extraction and preprocessingdistances.md- Time series distance metricsnetworks.md- Deep learning architecturesdatasets_benchmarking.md- Data loading and evaluation tools
Additional Resources
- Documentation: https://www.aeon-toolkit.org/
- GitHub: https://github.com/aeon-toolkit/aeon
- Examples: https://www.aeon-toolkit.org/en/stable/examples.html
- API Reference: https://www.aeon-toolkit.org/en/stable/api_reference.html
Boilerplate, lines 407 to 422. The same text appears in 125 other files here. Close
From K-Dense-AI/scientific-agent-skills at 5f2bc03, 2026-10-26. Not read by a model yet. Summary and techniques by Claude Opus 5.5 on 2026-11-06.