Overview
SysIdentPy is a Python system-identification toolkit for building nonlinear dynamic models from time-series data. Its central framework is NARMAX, with variants including NARX, NAR, NFIR, ARX and ARMA. It supports a modeling workflow rather than supplying a pretrained predictor: users choose lag settings, basis functions, model-selection methods and estimators for their own data. The package is built on NumPy, with SciPy and Matplotlib among its declared dependencies.
The supplied examples pass training input and output arrays into model fitting, then use validation arrays to generate predictions. A polynomial NARX example combines FROLS structure selection with least-squares estimation and reports selected regressors, estimated parameters and error-reduction ratios. Other demonstrated paths use a custom PyTorch neural network or a CatBoost estimator within a NARX configuration. Prediction plots, root relative squared error and residual-correlation utilities support assessment of fitted models.
Beyond fitting, SysIdentPy provides SimulateNARMAX for investigating specified models and supports multiobjective parameter estimation using affine information. These capabilities make it relevant to evaluating dynamic-process models and nonlinear forecasting approaches, but the supplied examples do not establish suitability for any particular chemical process or operational deployment. Array API dispatch is explicitly experimental and opt-in: non-NumPy one-step prediction can remain backend-native, while sequential prediction currently falls back to NumPy on the CPU before converting results back. PyTorch is needed for the neural-network path, while the package metadata lists it as an optional dependency.
Key Features
- Builds NARMAX-family models, including NARX, NAR, NARMA, NFIR, ARMA and ARX, with configurable input and output lags.
- Selects model terms using methods such as FROLS, MetaMSS, AOLS, UOFR, Entropic Regression and Orthogonal Floating Search.
- Provides linear and nonlinear basis functions, more than 15 parameter-estimation methods, and multiobjective estimation using affine information.
- Supports custom PyTorch neural NARX architectures and compatible external estimators, with a CatBoost NARX example supplied.
- Provides SimulateNARMAX, prediction metrics, model-term displays, prediction plots and residual-correlation utilities.
- Offers experimental Array API dispatch for supported selection algorithms, simulation, metrics, utilities and Polynomial, Fourier and Bilinear basis functions, with documented sequential-prediction fallback.
Use Cases
- Intended evaluation: fit a nonlinear input–output model to recorded process measurements and assess its predictions and residual correlations before considering process-control use.
- Intended evaluation: compare polynomial NARX, neural NARX and an external-estimator NARX approach on the same training and validation time series.
- Intended evaluation: investigate a published NARMAX model with SimulateNARMAX and compare alternative parameter-estimation methods.
How to Use
Read the installation guide and check the supplied package metadata for Python and dependency requirements. Include PyTorch when evaluating neural NARX; external-estimator examples may need additional packages.
Follow the quickstart guide to understand the input and output arrays, lag settings and training/validation workflow. Start with the supplied simulated-data example before adapting it to process measurements.
Use the repository examples to choose a modeling route. The polynomial example combines FROLS, Polynomial and LeastSquares; alternatives demonstrate NARXNN and CatBoost-based NARX.
Fit on training data and predict on validation data. Inspect selected terms and parameters where available, then assess prediction plots, root relative squared error and residual correlations using the documented utilities.
If evaluating another array backend, consult the Array API dispatch guide first. Distinguish backend-native one-step predictions from sequential predictions that use the documented NumPy/CPU fallback.