All notable changes to Vectrix will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
HTML dashboard generator and visualization module polish.
HTML Dashboard (vectrix.viz.dashboard)
dashboard()function generates self-contained HTML reports with embedded Plotly charts- shadcn/ui dark theme design tokens — 3-layer brightness, transparency borders, monochrome palette
- Report narrative flow: Overview → Data Profile → Forecast Results → Visualizations
- Vectrix brand icon (base64 embedded) and gradient wordmark in header
- Custom title support via
titleparameter DashboardResultclass with.show()(Jupyter inline / browser),.save(path),.html- Terminal progress feedback via stderr during dashboard generation
- Data Profile section with DNA feature bars, descriptive statistics, key insights, recommended models
- Forecast Results section with accuracy KPIs and integrated model comparison table
- Partial report support — any combination of forecast/analysis/comparison/historical
theme.py: HEATMAP_COLORSCALE updated to 5-step monochrome (dark green → teal → cyan → violet → dark purple)- Removed unused imports across viz module (COLORS in charts.py, report.py, dashboard.py)
- Fixed extraneous f-string prefixes in report.py
07_visualization.md: Added HTML Dashboard section with basic usage, custom title, save, partial reports, terminal progressAPI_SPEC.md: Addeddashboard()function signature,DashboardResultmethods, report structure
Code quality and architecture cleanup release — eliminates MODEL_INFO indirection layer, enforces registry as single source of truth for all model metadata, fixes ETSModel refit bug, and adds refit contract tests.
ETSModel refit() State Corruption
engine/ets.py:_computeSSE()called_filter()which mutatedself.level/trend/seasonalas a side-effect during optimization- This caused refit() on the same data to produce 175%+ divergence from original fit()
- Added state save/restore in
_computeSSEusing try/finally pattern - All 6 refit-capable models now pass same-data similarity test (<5% divergence)
Registry as Single Source of Truth (SSoT)
engine/registry.py: Addedtier,seasonal,hourlyfields toModelSpec- Added
selectModels()for data-characteristic-based model selection - Added
getCoreModelIds()for dynamic ensemble core pool vectrix.py: Replaced hardcoded model lists withselectModels()andgetCoreModelIds()flat_defense/diagnostic.py: ReplacedMODEL_INFOimport withgetModelInfo()direct callmodels/selector.py: Same —MODEL_INFO→getModelInfo()direct calltypes.py: Removed_LazyModelInfoclass andMODEL_INFOvariable entirely (48 lines deleted)
Exception Handling
vectrix.py: Replaced 6 bareexcept Exception:with specific types (ValueError,RuntimeError,np.linalg.LinAlgError, etc.)
Code Deduplication
vectrix.py: Unified sequential/parallel model evaluation result handling intostoreResult()helper
Refit Contract Tests
tests/test_refit_contract.py: 30 tests covering 6 refit-capable models- Tests: returns_self, output_shape, output_finite, ci_ordering, same_data_similar_output
- Total tests: 573 → 603
0.0.15 - 2026-03-05
Accuracy & engine improvement release — FFT period detection bug fix eliminates spurious seasonal periods that degraded M4 Daily OWA from 0.820 to 0.996. Three new Rust DNA functions added. PeriodicDropDetector seasonal false positive fix. Visualization module (plotly). Overall M4 AVG OWA improved from 0.877 to 0.848.
FFT Period Detection Bug (Root Cause of Daily OWA 0.996)
analyzer/autoAnalyzer.py:_detectSeasonalPeriods()used FFT which produced spurious periods (53, 144, 168 for Daily data)- These wrong periods propagated through
forecast()pipeline, degrading accuracy across all M4 frequency groups - Replaced FFT-based detection with frequency-based lookup table (Daily→7, Monthly→12, etc.)
- M4 Daily OWA: 0.996 → 0.820 (17.7% improvement)
- M4 AVG OWA: 0.877 → 0.848 (3.3% improvement)
PeriodicDropDetector Seasonal False Positives
vectrix.py: Normal seasonal patterns (e.g., 24h Hourly cycle) were falsely detected as "periodic drops"- This triggered interpolation that destroyed training data, harming forecast accuracy
- Added check: if detected drop period matches or aligns with seasonal period, skip drop correction
Ruff Lint Errors
- Fixed import sort order in
engine/tsfeatures.py - Removed unused
numpyimports inviz/charts.pyandviz/report.py - Removed unused
make_subplotsimport inviz/charts.py
Rust DNA Functions (3 new, total 29)
sample_entropy: Measures time series complexity/regularityapproximate_entropy: Similar to sample entropy with different algorithmhurst_exponent: Long-range dependence measurement via R/S analysis- Python vectorized fallbacks using numpy broadcasting + stride_tricks
engine/tsfeatures.pyauto-selects Rust or Python implementation
Visualization Module (viz/)
viz/charts.py: Individual Plotly chart functions (forecastChart, analysisChart, etc.)viz/report.py: Composite report generators combining multiple chartsviz/theme.py: Dark theme configuration with consistent color palette
Experiments (E047-E054)
- E047~E050: Speed optimization experiments (all rejected — Python overhead is not in hot loops)
- E051: Daily diagnosis — DOT engine alone gives 0.605 but pipeline gives 0.908 (50% gap)
- E052: Root cause identified — FFT produces spurious periods (53, 144, 168)
- E053: basePeriod-only wins all 6 frequency groups (-19.3% avg improvement)
- E054: Integrated pipeline benchmark with both fixes applied
AdaptiveModelSelector Registry-Based
models/selector.py: Replaced hardcoded FLAT_RESISTANCE and MIN_DATA dicts with dynamic lookup fromengine/registry.py
M4 Benchmark Numbers Updated Across All Files
- Daily OWA: 0.996 → 0.820 (12 files updated)
- AVG OWA: 0.877 → 0.848 (12 files updated)
- Files: constants.json, README.md, docs/benchmarks.md, llms.txt, llms-full.txt, landing components, blog posts, API_SPEC.md
0.0.14 - 2026-03-04
Model refit() interface — each model owns its own refit logic, eliminating the last model-specific if/elif chain in vectrix.py. GitHub Deployments fix.
refit() Interface Added to All Auto Models
AutoETS.refit(newData): reuses selected model structure (error/trend/seasonal type + smoothing params), skips model selectionETSModel.refit(newData): reuses smoothing parameters, skips optimizationAutoARIMA.refit(newData): reuses selected order (p,d,q)(P,D,Q)[m], skips order selectionOptimizedTheta.refit(newData): reuses selected theta value, skips theta optimizationAutoMSTL.refit(newData): reuses detected periods, skips period detection
vectrix.py _refitModelOnFullData Simplified (50 lines → 8 lines)
- Removed 5-branch if/elif chain with model-specific refit logic
- Now uses
hasattr(model, 'refit')— zero model-specific code in vectrix.py - Removed
refitStrategyfield fromModelSpec— no longer needed
GitHub Actions: Deployment Tracking Fix
- Added
environment: pypito publish job in.github/workflows/publish.yml - Enables GitHub Deployments section to track each release (previously showed only first deployment)
ModelSpec.refitStrategyfield — replaced by model-ownedrefit()methods
0.0.13 - 2026-03-04
Model Registry architecture — eliminates coupling between model metadata, model creation, and orchestration. Adding a new model now requires editing only 1 file instead of 5.
Architecture: Model Registry Pattern (engine/registry.py)
- Created
engine/registry.pyas the Single Source of Truth for all model metadata ModelSpecdataclass: modelId, name, description, factory, needsPeriod, minData, flatResistance, bestForcreateModel(modelId, period): unified model instantiation — replaces 200-line if/elif chain in vectrix.pygetRegistry(),getModelSpec(),listModelIds(),getModelInfo(): centralized access to model information- Adding a new forecasting model now requires only 1 edit: add a
ModelSpecentry toregistry.py
vectrix.py Refactored (959 → 709 lines, -26%)
- Removed
NATIVE_MODELSclass dict (80+ lines) — replaced bygetRegistry() - Removed
_fitAndPredictNativeWithCache200-line if/elif chain — replaced bycreateModel()+fit()+predict() _getModelName()static method replaces repeated dict lookups
types.py MODEL_INFO Unified
MODEL_INFOis now a lazy-loading proxy that reads fromengine/registry.pyon first access- Backward compatible: all existing code using
MODEL_INFO[modelId]continues to work - Eliminates duplicate model metadata between types.py and vectrix.py
engine/registry.py: Model registry module withModelSpec,getRegistry(),createModel(),getModelInfo()
0.0.12 - 2026-03-04
DOT-Hybrid holdout validation release — 8-way config selection for period>1 data now uses holdout validation instead of in-sample MAE, reducing overfitting on Quarterly (-1.25%) and Monthly (-2.55%) forecasts. AVG OWA improved from 0.8831 to ~0.876.
DOT-Hybrid Engine Holdout Validation
engine/dot.py:_fitHybrid()now uses holdout-based config selection whenperiod > 1and sufficient data available- When
period > 1: splits data into train/validation, evaluates 8 variant configurations on held-out segment, selects best by validation MAE, then refits on full data - When
period <= 1(Yearly, Daily, Weekly): preserves original in-sample MAE selection — no behavioral change - When
period >= 24(Hourly): unchanged, uses classic DOT path as before - Added
_predictVariantSteps()helper method for multi-step holdout prediction - Net effect: Quarterly OWA -1.25%, Monthly OWA -2.55%, zero regression on other groups
Experiment Files (4 new DOT improvement experiments)
modelCreation/043_dotAutoPeriodHoldout.py: ACF-based auto period detection (REJECTED, +1.29%) + holdout validation (ACCEPTED, -0.79%)modelCreation/044_dailyWeeklySpecialist.py: Classic DOT for Weekly (ACCEPTED, -2.18%) + Core3 ensemble for Daily/Weekly (REJECTED, +21%/+8%)modelCreation/045_integratedImprovement.py: Integrated holdout + Weekly classic (AVG -0.94%, but Yearly +1.16% regression)modelCreation/046_finalIntegration.py: Final rule validation — period<=1 classic vs period>1 holdout isolation confirmed safe
- ACF-based auto period detection detects spurious short periods (2,3) from noise — harmful for accuracy
- Holdout validation eliminates in-sample overfitting in 8-way config selection for seasonal data
- Core3 ensemble (DOT+CES+4Theta) is harmful for period=1 data — CES/4Theta struggle without seasonality
- Classic DOT is good for Weekly (period=1) but catastrophic for Yearly (period=1) — Yearly needs Hybrid's trend exploration
- Safe improvement scope: only
1 < period < 24benefits from holdout validation
0.0.11 - 2026-03-04
Progressive Disclosure release — Easy API now supports Level 2 guided control with model selection, ensemble strategy, and confidence interval parameters, while maintaining full backward compatibility with Level 1 zero-config usage.
Easy API Progressive Disclosure (Level 2 Parameters)
forecast():models=(select specific model IDs),ensemble=('mean', 'weighted', 'median', 'best'),confidence=(0.80~0.99 CI level)analyze():features=(toggle feature extraction),changepoints=(toggle detection),anomalies=(toggle detection),anomaly_threshold=(z-score sensitivity)regress():alpha=(regularization strength for ridge/lasso),diagnostics=(auto-run diagnostics)compare():models=(compare specific model subset)
Vectrix Class Level 2 Parameters
Vectrix.forecast():models=,ensembleMethod=,confidenceLevel=parameters with full validation- Ensemble methods: 'mean' (simple average), 'weighted' (inverse-MAPE), 'median', 'best' (single model)
- Confidence interval rescaling from 0.95 default to any level using scipy.stats.norm
Documentation
- README.md / README_KR.md: "Philosophy & Roadmap" section with identity, API layers (Level 1-3), roadmap, expansion principles
- CLAUDE.md: Expansion/maintenance principles (API design, engine, speed, accuracy, docs/marketing)
- Updated Easy API examples showing Level 1 and Level 2 usage side by side
easy.py: All functions now accept Level 2 parameters with sensible defaults preserving Level 1 behaviorvectrix.py:forecast()acceptsmodels,ensembleMethod,confidenceLevelwith validation and error messages- Identity principles updated: added Progressive Disclosure and benchmark-based honesty
0.0.10 - 2026-03-04
Research & stability release — 16 DOT improvement experiments (E020E030, E013E015), DOT-Hybrid engine OWA 0.885 re-verified, CES combination approach tested and rolled back.
Experiment Files (16 new experiments)
modelCreation/013~015: Novel ensemble models (WDE, RGF, EPE) — all rejected, DOT/CES wall too highmodelCreation/020~024: Fundamentally novel approaches (Compression, Topological, Gravitational, Evolutionary, Causal Entropy) — all rejected, structural decomposition models remain superiormodelCreation/025~030: DOT engine improvement attempts (Multi-Season, DOT+CES Combined, Holdout Selection, Adaptive Theta Bounds, Residual Correction, Engine Verification)- E026 DOT+CES Combined showed within-experiment improvement but degraded vs E019 baseline (0.918 vs 0.885) — rolled back
- E029 Residual Correction catastrophically harmful (Monthly +0.202 regression)
- All 6 experiments documented with full results in docstrings
engine/dot.py: Minor docstring fix (OWA 0.884 → 0.885), code style consistency in fit/predict methodsCLAUDE.md: Added Novel Approaches research section, updated experiment folder range to 001~019
- DOT-Hybrid standalone remains the strongest engine (AVG OWA 0.885)
- DOT residuals are near white noise — post-processing (residual correction, period re-detection, theta bounds) cannot improve further
- CES combination adds 4.5x speed overhead while degrading accuracy vs baseline
- Model-free approaches (compression, topology, gravity) consistently fail — structural assumptions (trend + seasonality + error decomposition) are essential for forecasting accuracy
0.0.9 - 2026-03-03
Accuracy & speed release — DOT-Hybrid model achieves M4 Competition OWA 0.885 (beats #18 Theta 0.897), with 9.8x benchmark speedup from Rust dot_hybrid_objective.
DOT-Hybrid Mode (M4 OWA: 0.905 → 0.885)
- Period < 24: 8-way auto-select (2 trend × 2 model × 2 season types) with exponential trend and multiplicative theta line
- Period ≥ 24: Original 3-parameter DOT optimization (preserves Hourly OWA 0.722)
- Automatic mode switching at
_HYBRID_THRESHOLD = 24 - Yearly OWA 0.797 (world-class, near M4 #1 ES-RNN 0.821)
- NumPy-vectorized combination functions replacing Python for-loops
Rust Acceleration: dot_hybrid_objective (26th function)
- Full DOT-Hybrid objective: buildThetaLine + golden section alpha optimization + SES filter + combine + MAE — all in Rust
- Golden section search (50 iterations) replaces scipy
minimize_scalarinside Rust for alpha optimization - M4 100K benchmark: 16.6 min → 1.7 min (9.8x faster)
- Per-group speedups: Yearly 3x, Quarterly 3.7x, Monthly 4.8x, Weekly 7.7x, Daily 9.8x, Hourly 53x
engine/dot.py:DynamicOptimizedThetanow includes hybrid mode with backward-compatible APIrust/src/lib.rs: 25 → 26 Rust-accelerated functions- Version sync: pyproject.toml, Cargo.toml, init.py all at 0.0.9
0.0.8 - 2026-03-03
Built-in Rust engine release — Rust acceleration expanded to all engines and compiled into every wheel. No [turbo] extra, no flags — pip install vectrix includes the Rust engine like Polars.
Rust Engine Expansion (13 → 25 functions)
garch_filter,egarch_filter,gjr_garch_filter: GARCH family negative log-likelihood hot loopstbats_filter: Fourier harmonic state update loopdtsf_distances,dtsf_fit_residuals: O(n²) sliding window pattern matching (biggest speedup)mstl_extract_seasonal,mstl_moving_average: MSTL seasonal decompositioncroston_tsb_filter: Croston TSB SES update loopesn_reservoir_update: Echo State Network reservoir state computation O(n×N²)four_theta_fitted,four_theta_deseasonalize: 4Theta fitted values + seasonal decomposition- All 25 functions compiled into the default wheel — no separate
[turbo]install needed
CI/CD: macOS x86_64 wheel
- Added
macos-13build target for Intel Mac users - Now 4 platform builds: Linux x86_64, macOS ARM, macOS x86_64, Windows x86_64
Messaging: "optional Rust turbo" → "built-in Rust engine"
pyproject.toml: Description updated to reflect built-in Rust engineREADME.md: Removed all "optional" Rust language, comparison table updated- Landing page: Hero, Features, Install, Performance, Numbers sections rewritten
- Docs (EN/KO): Installation guides rewritten — no
[turbo]extra mentioned - SEO metadata: All "Rust turbo" → "built-in Rust engine" across meta tags, schema, OG tags
Version sync: pyproject.toml, Cargo.toml, init.py all at 0.0.8
0.0.7 - 2026-03-02
AI integration release — llms.txt for instant AI understanding, MCP server for tool use, Claude Code skills for workflow automation.
llms.txt / llms-full.txt
llms.txt: Structured project overview following the llms.txt standard — documentation links, quick start, API sectionsllms-full.txt: Complete API reference (every class, method, parameter, return type, common mistakes) — AI reads once, understands the full library- Deployed to GitHub Pages root:
eddmpython.github.io/vectrix/llms.txtandllms-full.txt - Included in PyPI package for local access
MCP Server (Model Context Protocol)
- 10 tools:
forecast_timeseries,forecast_csv,analyze_timeseries,compare_models,run_regression,detect_anomalies,backtest_model,list_sample_datasets,load_sample_dataset - 2 resources:
vectrix://models,vectrix://api-reference - 2 prompts:
forecast_workflow,regression_workflow - Compatible with Claude Desktop, Claude Code, and any MCP client
- Setup:
pip install "vectrix[mcp]"+claude mcp add
Claude Code Skills (3)
vectrix-forecast: Time series forecasting workflow with full API referencevectrix-analyze: DNA profiling, anomaly detection, regime analysisvectrix-regress: R-style regression, diagnostics, variable selection- Auto-loaded in project directory, invocable via
/vectrix-forecastetc.
pyproject.toml: Addedmcpoptional dependency,includefor llms.txt/mcp in wheeldocs.yml: Copy llms.txt and llms-full.txt to GitHub Pages deploy directory- README.md / README_KR.md: Added "AI Integration" section (llms.txt, MCP, Skills)
- CLAUDE.md: Added README update policy (mandatory update after every feature change)
0.0.6 - 2026-03-02
Documentation & deployment release — tutorials, showcases, EasyForecastResult enhancements, and unified SvelteKit landing + MkDocs GitHub Pages deployment.
EasyForecastResult Enhancements
compare(): Side-by-side model comparison table with sMAPE, MAPE, RMSE, MAE metricsall_forecasts(): DataFrame of all valid model forecasts for manual analysis- Accuracy attributes:
.mape,.rmse,.mae,.smapeon EasyForecastResult for quick access Vectrix._refitAllModels(): Refit all valid models after best model selection for compare/all_forecasts
Tutorials (Markdown, 6 topics × 2 languages = 12 files)
- 01_quickstart: One-line forecasting, result inspection, visualization
- 02_analyze: DNA profiling, feature fingerprinting, changepoint detection
- 03_regression: R-style formula regression, diagnostics, robust methods
- 04_models: 30+ model catalog, manual selection, comparison workflow
- 05_adaptive: Regime detection, self-healing, constraints, forecast DNA
- 06_business: Anomaly detection, what-if scenarios, backtesting, business metrics
Showcases (marimo interactive notebooks)
- 03_modelComparison: 30+ model comparison with DNA analysis
- 04_businessIntelligence: Anomaly detection, scenarios, backtesting
- Companion .md pages for GitHub Pages visibility (8 files)
Unified GitHub Pages Deployment
- SvelteKit landing page now serves at root (
/vectrix/) - MkDocs documentation serves at
/vectrix/docs/ docs.ymlworkflow builds both SvelteKit + MkDocs and merges into single deployment- All landing page links updated to point to
/vectrix/docs/paths - SvelteKit
paths.baseconfigured viaBASE_PATHenvironment variable - Header/Footer components use
{base}import for correct asset paths
Documentation Navigation
- mkdocs.yml nav updated with tutorial and showcase sub-pages
- showcase/index and tutorials/index updated with content descriptions
- README.md and README_KR.md updated: 573 tests, compare API, new models, doc links
0.0.5 - 2026-03-02
Performance release — Rust turbo acceleration extended to DOT, CES, and 4Theta models (vectrix-core 0.2.0).
Rust Turbo Mode Extended (vectrix-core 0.2.0)
- DOT (Dynamic Optimized Theta): 68ms → 2.8ms (24x faster) —
dot_objective,dot_residualsRust hot paths - AutoCES (Complex Exponential Smoothing): 118ms → 9.6ms (12x faster) —
ces_nonseasonal_sse,ces_seasonal_sseRust hot paths - 4Theta (Adaptive Theta Ensemble): 63ms → 5.6ms (11x faster) — wired existing
ses_sse/ses_filterRust functions - Total: 13 Rust-accelerated functions (was 9, added 4 new)
- 3-tier fallback preserved: Rust > Numba JIT > Pure Python
- All functions produce bit-identical results with Python reference implementations
0.0.4 - 2026-03-02
Quality & internationalization release — full English docstring conversion, 573 tests (+186), improved model selection with DOT/CES defaults.
English Docstring Conversion
- Complete Korean→English conversion across all 60+ source modules
- All docstrings, error messages, comments, and user-facing strings now in English
- API Reference documentation (mkdocstrings) now renders correctly in English
- Korean column detection keywords (
'날짜', '일자', '일시') preserved for Korean DataFrame auto-detection
Model Selection Improvement
- DOT (Dynamic Optimized Theta) and AutoCES now included as default model candidates
- M4-validated: DOT OWA 0.905 (#18 level), AutoCES OWA 0.927 — both top-performing general-purpose models
- Hourly data: DTSF + MSTL prioritized for multi-seasonal pattern capture
- Fallback models upgraded from four_theta/esn to dot/auto_ces
Test Coverage Expansion (387 → 573, +48%)
test_new_models.py: 45 tests for DTSF, ESN, 4Theta (pattern matching, nonlinear, M4-style holdout)test_business.py: 45 tests for anomaly detection, backtesting, metrics, what-if, reports, HTML reportstest_infrastructure.py: 43 tests for flat defense, hierarchy reconciliation, batch, persistence, TSFrame, AutoAnalyzertest_engine_utils.py: 53 tests for ARIMAX, cross-validation, decomposition, diagnostics, periodic drop, comparison, imputation
- Test assertions updated for English error messages (pipeline, holiday names)
- FlatPredictionType enum comments translated
0.0.3 - 2026-02-28
Performance release — Rust-accelerated core loops (vectrix-core), built-in sample datasets, and pandas 2.x compatibility fixes.
Rust Turbo Mode (vectrix-core)
- Native Rust extension for core forecasting hot loops via PyO3 + maturin
- 9 accelerated functions:
ets_filter,ets_loglik,css_objective,seasonal_css_objective,ses_sse,ses_filter,theta_decompose,arima_css,batch_ets_filter - 3-tier fallback: Rust > Numba JIT > Pure Python — transparent, no code changes needed
- Pre-built wheels for Linux (manylinux), macOS (x86 + ARM), Windows (x86_64), Python 3.10-3.13
- Install via
pip install "vectrix[turbo]"— no Rust compiler needed for users - GitHub Actions CI workflow (
publish-core.yml) for automated wheel builds oncore-v*tags
Built-in Sample Datasets
- 7 deterministic sample datasets for quick testing:
airline(144 monthly),retail(730 daily),stock(252 business daily),temperature(1095 daily),energy(720 hourly),web(180 daily),intermittent(365 daily) loadSample(name): Load a sample dataset as DataFramelistSamples(): List all available datasets with metadata- 41 tests covering all datasets
Performance Improvements
- AutoETS: 348ms → 32ms (10.8x faster with Rust turbo)
- AutoARIMA: 195ms → 35ms (5.6x faster)
- Theta: 1.3ms → 0.16ms (8.1x faster)
forecast()end-to-end: 295ms → 52ms (5.6x faster)- ETS filter hot loop: 0.17ms → 0.003ms (67x faster)
- ARIMA CSS objective: 0.19ms → 0.001ms (157x faster)
- pandas 2.x frequency deprecation:
"M"→"ME","Q"→"QE","Y"→"YE","H"→"h"
- Complete bilingual docs site (EN/KO) with i18n plugin
- Installation guide updated with Rust Turbo Mode section
- README updated with turbo benchmarks, sample datasets, comparison table
- 387 tests (up from 346), 5 skipped (optional dependency guards)
0.0.2 - 2026-02-28
Feature expansion release — Foundation Model wrappers, deep learning models, multivariate forecasting, probabilistic distributions, multi-country holidays, and pipeline system.
Foundation Model Wrappers (Optional)
ChronosForecaster: Amazon Chronos-2 zero-shot forecasting wrapper with batch prediction and quantile outputTimesFMForecaster: Google TimesFM 2.5 wrapper with covariate support and multi-horizon prediction- Optional dependency groups:
foundation(torch + chronos-forecasting),neural(neuralforecast)
Deep Learning Model Wrappers (Optional)
NeuralForecaster: NeuralForecast wrapper supporting NBEATS, NHITS, TFT architectures- Convenience classes:
NBEATSForecaster,NHITSForecaster,TFTForecaster - Automatic numpy ↔ NeuralForecast DataFrame conversion
Probabilistic Forecast Distributions
ForecastDistribution: Parametric distribution forecasting (Gaussian, Student-t, Log-Normal)DistributionFitter: Automatic distribution selection via AIC comparisonempiricalCRPS: Closed-form Gaussian CRPS + Monte Carlo CRPS for other distributions- Full distribution API: quantile, interval, sample, pdf, crps methods
Multivariate Models
VARModel: Vector AutoRegression with automatic lag selection (AIC/BIC) and Granger causality testVECMModel: Vector Error Correction Model with Johansen-style cointegration rank estimation
Multi-Country Holiday Support
- US holidays: 4 fixed (New Year, Independence Day, Veterans Day, Christmas) + 6 floating (MLK, Presidents', Memorial, Labor, Columbus, Thanksgiving)
- Japan holidays: 13 fixed national holidays (元日, 建国記念の日, etc.)
- China holidays: 5 fixed holidays (元旦, 劳动节, 国庆节)
getHolidays(year): Unified holiday query for KR/US/JP/CNadjustForecast(): Apply estimated event effects to point forecasts_nthWeekdayOfMonth(): Floating holiday date calculation helper
Pipeline System
ForecastPipeline: sklearn-style sequential chaining with automatic inverse transform on predictions- 8 built-in transformers:
Differencer,LogTransformer,BoxCoxTransformer,Scaler(zscore/minmax),Deseasonalizer,Detrend,OutlierClipper,MissingValueImputer - Named step access, parameter nesting (
step__param), repr display
Speed Improvements
- Parallelized model evaluation in
Vectrix._evaluateNativeModelsviaThreadPoolExecutor - Parallelized cross-validation candidate loop in M3/M4 benchmark runners
- ~13% faster M3 Monthly benchmark (11.22s → 9.70s)
Test Coverage
- 346 tests (up from 275), 5 skipped (optional dependency guards)
0.0.1 - 2026-02-27
Initial public release of Vectrix -- a zero-config time series forecasting library built with pure NumPy + SciPy.
Core Forecasting Engine (30+ Models)
- AutoETS: 30 Error x Trend x Seasonal combinations with AICc model selection (Hyndman-Khandakar stepwise algorithm)
- AutoARIMA: Seasonal ARIMA with stepwise order selection, CSS objective function
- Theta / Dynamic Optimized Theta (DOT): Original Theta method + M3 Competition winner methodology
- AutoCES: Complex Exponential Smoothing (Svetunkov 2023)
- AutoTBATS: Trigonometric seasonality for complex multi-seasonal time series
- GARCH / EGARCH / GJR-GARCH: Conditional volatility modeling with asymmetric effects
- Croston Classic / SBA / TSB / AutoCroston: Intermittent and lumpy demand forecasting
- Logistic Growth: Prophet-style saturating trends with user-defined capacity constraints
- AutoMSTL: Multi-seasonal STL decomposition with ARIMA residual forecasting
- Baseline models: Naive, Seasonal Naive, Mean, Random Walk with Drift, Window Average
Novel Methods
- Lotka-Volterra Ensemble: Ecological competition dynamics for adaptive model weighting
- Phase Transition Forecaster: Critical slowing down detection for regime shift prediction
- Adversarial Stress Tester: 5 perturbation operators (spike, dropout, drift, noise, swap) for forecast robustness analysis
- Hawkes Intermittent Demand: Self-exciting point process for clustered demand patterns
- Entropic Confidence Scorer: Shannon entropy-based forecast uncertainty quantification
Adaptive Intelligence
- Regime Detection: Pure numpy Hidden Markov Model implementation (Baum-Welch + Viterbi)
- Self-Healing Forecast: CUSUM + EWMA drift detection with conformal prediction correction
- Constraint-Aware Forecasting: 8 business constraint types (non-negative, range, capacity, YoY change, sum, monotone, ratio, custom)
- Forecast DNA: 65+ time series feature fingerprinting with meta-learning model recommendation and similarity search
- Flat Defense: 4-level system (diagnostic, detection, correction, prevention) against flat prediction failure
Easy API
forecast(): One-call forecasting with automatic model selection, accepts str/DataFrame/Series/ndarray/list/tuple/dictanalyze(): Time series DNA profiling, changepoint detection, anomaly identificationregress(): R-style formula regression (y ~ x1 + x2) with full diagnosticsquick_report(): Combined analysis + forecast report generation- Rich result objects with
.plot(),.to_csv(),.to_json(),.to_dataframe(),.summary(),.describe()
Regression & Diagnostics
- 5 regression methods: OLS, Ridge, Lasso, Huber, Quantile
- R-style formula interface:
regress(data=df, formula="sales ~ ads + price") - Full diagnostics suite: Durbin-Watson, Breusch-Pagan, VIF, Jarque-Bera normality tests
- Variable selection: Stepwise (forward/backward), regularization CV, best subset
- Time series regression: Newey-West HAC, Cochrane-Orcutt, Prais-Winsten, Granger causality
Business Intelligence
- Anomaly detection with automated outlier identification and natural language explanation
- What-if analysis: Scenario-based forecast simulation with parameter perturbation
- Backtesting: Rolling origin cross-validation with MAE, RMSE, MAPE, SMAPE metrics
- Hierarchy reconciliation: Bottom-up, Top-down, MinTrace optimal (Wickramasuriya 2019)
- Prediction intervals: Conformal prediction + Bootstrap methods
Infrastructure
- Batch forecasting API with ThreadPoolExecutor parallelization
- Model persistence:
.fxmbinary format with save/load/info utilities - TSFrame: Time series DataFrame wrapper with frequency detection
- Global model: Cross-series learning for related time series
- Numba JIT acceleration for core computations (optional dependency)
- 275 tests covering all models, edge cases, and integration scenarios
- GitHub Actions CI: Matrix testing (Python 3.10-3.13, Ubuntu + Windows)
- PyPI trusted publisher deployment via GitHub Actions