Jano¶
Language: English | Español
Temporal Simulation and Backtesting Toolkit for Time-Dependent Machine Learning Systems
The missing layer between ML models and production temporal validation.
Explicit partition policies
Define train/test or train/validation/test layouts with durations, row counts or fractions.
Temporal clocks
Advance by calendar time, row counts, online batches or user-defined retraining checkpoints.
Drift becomes visible
By keeping folds anchored in time, changes in outcomes, calibration or behavior are easier to spot.
Flexible tabular inputs
Run the same API on pandas, NumPy or Polars data while keeping one temporal engine underneath.
A visual summary of how Jano lays out temporal partitions, folds and reporting across time.
Jano is a Python toolkit designed to structure, execute and analyze temporal simulations for machine learning systems operating on time-correlated data. It provides a formal framework to define time-aware partitioning policies, run walk-forward evaluations, execute models under explicit retraining rules and generate auditable reports that reflect how systems behave under realistic, production-like temporal dynamics.
Unlike traditional random splits that implicitly assume i.i.d. data, Jano treats chronology as a first-class constraint. It is built for scenarios where leakage must be tightly controlled and where system performance is expected to evolve over time because of drift, retraining cycles or changing data distributions.
At its core, Jano introduces explicit temporal partitioning abstractions. Users can define train, validation and test segments through durations, row counts or proportions, compose them into rolling, expanding or fixed-window strategies, and use temporal gaps to model the latency that often exists between training, prediction and label availability. For online settings, Jano can advance along the same timeline by observed events, micro-batches or user-defined retraining checkpoints.
The recommended public surface centers on TemporalSimulation and WalkForwardPolicy for fold-level simulation, WalkForwardRunner for model execution over those folds, and TemporalBacktestSplitter for manual iteration and lower-level control. Jano does not compute drift metrics directly; instead, it exposes temporal structure in evaluation results so drift, regime changes and model decay become easier to inspect fold by fold.
Typical use cases include:
Walk-forward validation for forecasting and time-aware classification.
Simulation of retraining policies and deployment strategies.
Execution of model benchmarks under explicit retraining rules.
Monitoring model stability across time slices.
Evaluating decision policies under evolving data conditions.
Supported input backends:
pandas.DataFramewith named columnsnumpy.ndarraywith integer column referencespolars.DataFramethrough the optionaljano[polars]extra
Contents
- Overview
- Random Splits vs Temporal Validation
- Temporal Discretization Clocks
- Concepts
- Simulation reporting
- Example
- Running a model with retrain policies
- Evaluation profiles
- Calendar-aligned duration windows
- Choosing the partition engine
- Low-level manual control
- Fixed cutoff studies
- Composed policy: optimize train history inside each walk-forward iteration
- Temporal semantics and leakage control
- Feature-specific lookback windows
- Simple HTML preview
- What it returns
- What the HTML shows
- Using chart data directly
- MCP server
- AI-ready usage
- Benchmark
- External datasets
- API reference
- Installation and Release
- About Me