evo-imp - Evolutionary Symbolic Imputer
A scikit-learn-compatible missing-value imputer for tabular data, powered
by DEAP. evo-imp evolves an interpretable
symbolic expression per feature with Genetic Programming, capturing
non-linear relationships that SimpleImputer/KNNImputer/IterativeImputer
cannot represent. It is a natural first step in the pipeline, upstream of
evo-gpfe (feature engineering) and evo-gafs
(feature selection).
Part of the evo-suite family (import name: evo_imp).
Documentation: https://evo-suite.readthedocs.io/
Why evo-imp?
| Capability | evo-imp |
|---|---|
| Interpretable, non-linear imputation: a symbolic expression per feature | Yes |
| Holdout-validated fitness: reported RMSE/fallback decision use a held-out split, not in-sample | Yes |
Never worse than the mean: automatic fallback when GP does not improve over SimpleImputer(mean) |
Yes |
Native scikit-learn transformer EvoImputer, usable in a Pipeline |
Yes |
Optional sympy-based expression simplification for readability |
Yes |
Built-in multi-dataset EvoImpBenchmarkRunner and MCAR evaluation helpers |
Yes |
Installation
pip install evo-imp # core
pip install "evo-imp[viz]" # + matplotlib for the plotting helpers
pip install "evo-imp[simplify]" # + sympy for simplify_expressions=True
Quickstart
from sklearn.datasets import load_diabetes
from evo_imp import EvoImpConfig, EvoImputer, introduce_mcar
X = load_diabetes(as_frame=True).data
X_missing, _ = introduce_mcar(X.values, missing_rate=0.20, random_seed=42)
imputer = EvoImputer(
config=EvoImpConfig(population_size=150, n_generations=30, verbose=False)
)
X_imputed = imputer.fit_transform(X_missing)
print(imputer.summary())
print(imputer.get_expressions())
Unlike the rest of evo-suite, EvoImputer is unsupervised (fit(X, y=None)) and its whole purpose is to accept NaN input — see the
Concepts guide
for why this is a deliberate exception to the family's usual scikit-learn
conventions.
Documentation & examples
- Full documentation (user guide + API reference): https://evo-suite.readthedocs.io/
- Runnable examples: the repository's
examples/evo-imp/directory.
Citation
@software{evo_imp,
author = {Skrauba, Axel},
title = {evo-imp: Evolutionary Symbolic Imputer for tabular data},
year = {2026},
version = {0.1.0},
url = {https://github.com/AxelSkrauba/evo-suite}
}
License
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file evo_imp-0.1.0.tar.gz.
File metadata
- Download URL: evo_imp-0.1.0.tar.gz
- Upload date:
- Size: 29.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b8bf9d4990b7c281bdf43943ff9766ca823fecc7d7a83ca62e839e60ee7dd609
|
|
| MD5 |
2adac1e60c8c652a5cc7bba09f15f9a8
|
|
| BLAKE2b-256 |
e62555ac9bfdd650cd8d24630c8b2ec39541cd8fc9b90afb2dd5f8f9e2d62bc2
|
Provenance
The following attestation bundles were made for evo_imp-0.1.0.tar.gz:
Publisher:
publish.yml on AxelSkrauba/evo-suite
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
evo_imp-0.1.0.tar.gz -
Subject digest:
b8bf9d4990b7c281bdf43943ff9766ca823fecc7d7a83ca62e839e60ee7dd609 - Sigstore transparency entry: 2387211009
- Sigstore integration time:
-
Permalink:
AxelSkrauba/evo-suite@11221b2fa8eb7b94542f0cdcc6b4f263e857fdb1 -
Branch / Tag:
refs/tags/evo-imp-v0.1.0 - Owner: https://github.com/AxelSkrauba
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@11221b2fa8eb7b94542f0cdcc6b4f263e857fdb1 -
Trigger Event:
push
-
Statement type:
File details
Details for the file evo_imp-0.1.0-py3-none-any.whl.
File metadata
- Download URL: evo_imp-0.1.0-py3-none-any.whl
- Upload date:
- Size: 32.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d234d6f10b43219fa6bb627d2f44fb93b08a8958c1fe97a5ee016bc771595f2
|
|
| MD5 |
6158c9d1114114039787cbdeea073b1d
|
|
| BLAKE2b-256 |
55d209b30b8a19175bb579933cdb191e354e04a71e77231e68d5934dbb67233b
|
Provenance
The following attestation bundles were made for evo_imp-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on AxelSkrauba/evo-suite
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
evo_imp-0.1.0-py3-none-any.whl -
Subject digest:
8d234d6f10b43219fa6bb627d2f44fb93b08a8958c1fe97a5ee016bc771595f2 - Sigstore transparency entry: 2387211179
- Sigstore integration time:
-
Permalink:
AxelSkrauba/evo-suite@11221b2fa8eb7b94542f0cdcc6b4f263e857fdb1 -
Branch / Tag:
refs/tags/evo-imp-v0.1.0 - Owner: https://github.com/AxelSkrauba
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@11221b2fa8eb7b94542f0cdcc6b4f263e857fdb1 -
Trigger Event:
push
-
Statement type: