Skip to main content

SkLearn2PMML Build Status

Python package for converting Scikit-Learn pipelines to PMML.

Features

This package is a thin Python wrapper around the JPMML-SkLearn library.

News and Updates

The current version is 0.133.1 (30 August, 2026):

pip install sklearn2pmml==0.133.1

See the NEWS.md file.

Prerequisites

  • Java 11 or newer. The Java executable must be available on system path.
  • Python 3.8 or newer.

Installation

Installing a release version from PyPI:

pip install sklearn2pmml

Alternatively, installing the latest snapshot version from GitHub:

pip install --upgrade git+https://github.com/jpmml/sklearn2pmml.git

Usage

Native Scikit-Learn

SkLearn2PMML can convert a wide variety of Scikit-Learn and Scikit-Learn adjacent estimators as-is.

The list of supported transformer, selector and predictor (aka model) classes is given in the features.md file of the JPMML-SkLearn project.

Keep SkLearn2PMML maximally up-to-date. One and the same package version -- preferably the latest and greatest -- is able to work with all Scikit-Learn 0.17 (ca 2015) and newer versions.

Library

Use the sklearn2pmml.sklearn2pmml(estimator, pmml_path) utility function to convert a fitted estimator object to PMML:

from sklearn2pmml import sklearn2pmml

estimator = ...
estimator.fit(X, y)

# Convert a live estimator object
sklearn2pmml(estimator, "Estimator.pmml")

The estimator argument may also be a path-like object to an estimator pickle file in local filesystem:

from sklearn2pmml import sklearn2pmml

import joblib

joblib.dump(estimator, "Estimator.pkl")

sklearn2pmml("Estimator.pkl", "Estimator.pmml")

SkLearn2PMML uses a custom Java component (rather than the built-in Python unpickler component) for reading pickle files. As such, it is safe to use with unvetted pickle files.

Command-line application

The sklearn2pmml module is executable.

The main application simply calls the sklearn2pmml.sklearn2pmml() utility function. At minimum, it is necessary to provide the input pickle file (-i or --input; supports joblib, pickle or dill variants) and output PMML file paths (-o or --output):

python -m sklearn2pmml --input Estimator.pkl --output Estimator.pmml

To see all supported command-line options, pass --help:

python -m sklearn2pmml --help

On some platforms, the Pip package installer additionally makes the main application available as a top-level command:

sklearn2pmml --input pipeline.pkl --output pipeline.pmml

PMML-enhanced Scikit-Learn

Native Scikit-Learn estimators have rather limited portability between environments, because they lack adequate metadata. For example, they did not collect and store even the most crucial metadata about the feature matrix (ie. the feature_names_in_ attribute) prior to Scikit-Learn 1.0 (ca 2021).

SkLearn2PMML provides the sklearn2pmml.pipeline.PMMLPipeline meta-estimator class, which extends the sklearn.pipeline.Pipeline class with the following functionality:

  • Collect feature and label metadata using the fit(X, y) method:
    • The column names of the X dataset become input field names. Otherwise, they default to x1, x2, ..., x{n_features_in_}.
    • The column names of the y dataset become target field name(s). Otherwise, they default to y (single-output case) or y1, y2, ..., y{n_outputs_} (multi-output case).
  • Perform prediction post-processing using predict_transform(X), predict_proba_transform(X) and apply_transform(X) methods (operating on predict_transformer, predict_proba_transformer and apply_transformer attributes, respectively).
  • Embed model verification data using the verify(X) method.
  • Configure the representation of final estimator step using the configure(**pmml_options) method.
  • Perform extra edits (ie. insert, update or delete PMML XML fragments) on the PMML document using the customize(command, xpath_expr, pmml_element) method.

PMML-enhanced workflow:

#from sklearn.pipeline import Pipeline
from sklearn2pmml import sklearn2pmml
from sklearn2pmml.pipeline import PMMLPipeline

#pipeline = Pipeline(...)
# Activate prediction post-processing
pipeline = PMMLPipeline(..., predict_transformer = ...)
pipeline.fit(X, y)

# Embed small but representative sample for self-check purposes during deployment
pipeline.verify(X.sample(n = 10))

# Default prediction
yt = pipeline.predict(X)
# Default prediction, together with its transformation results
yt_transformed = pipeline.predict_transform(X)

# Default PMML representation
sklearn2pmml(pipeline, "Pipeline.pmml")

pipeline.configure(...)
#pipeline.customize(...)

# Customized PMML representation
sklearn2pmml(pipeline, "Pipeline-customized.pmml")

Additionally, SkLearn2PMML provides a number of PMML-oriented transformer, selector and predictor classes:

  • sklearn2pmml.decoration. Capture or declare the domain of individual features by their operational type using ContinuousDomain, CategoricalDomain or OrdinalDomain meta-transformers. Give transformed features meaningful names using Alias and MultiAlias meta-transformers.
  • sklearn2pmml.preprocessing. Transform features using ExpressionTransformer (any to any), CutTransformer (continuous to discrete), LookupTransformer (discrete to discrete), and many other transformers.
  • sklearn2pmml.cross_reference. Cross-reference features and transformed features at subsequent transformer steps using Memorizer and Recaller meta-transformers.
  • sklearn2pmml.ensemble. Estimate conditionally using the SelectFirstTransformer meta-transformer, plus SelectFirstClassifier and SelectFirstRegressor meta-predictors. Combine predictors using GBDTLRClassifier and GBDTLMRegressor meta-predictors.
  • sklearn2pmml.postprocessing. Transform predictions using the BusinessDecisionTransformer transformer.

For example, mapping and pre-processing the Audit dataset:

from sklearn.compose import ColumnTransformer
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import OneHotEncoder
from sklearn2pmml.decoration import Alias, CategoricalDomain, ContinuousDomain
from sklearn2pmml.preprocessing import ExpressionTransformer

import pandas

df = pandas.read_csv("Audit.csv")

# Group features by type (operational type plus data type)
cat_cols = ["Education", "Employment", "Marital", "Occupation", "Gender"]
cont_int_cols = ["Age", "Hours"]
cont_float_cols = ["Income"]

transformer = ColumnTransformer([
	# Features
	("cat", make_pipeline(CategoricalDomain(), OneHotEncoder()), cat_cols),
	("cont_int", ContinuousDomain(), cont_int_cols),
	("cont_float", ContinuousDomain(), cont_float_cols),
	# Transformed features
	("hourly_income", Alias(ExpressionTransformer("X['Income'] / (X['Hours'] * 52)"), name = "Hourly_Income"), ["Income", "Hours"])
], remainder = "drop")
transformer.fit(df)

Xt = transformer.transform(df)

Documentation

Integrations:

Extensions:

Miscellaneous:

Archived:

License

SkLearn2PMML is licensed under the terms and conditions of the GNU Affero General Public License, Version 3.0.

If you would like to use SkLearn2PMML in a proprietary software project, then it is possible to enter into a licensing agreement which makes SkLearn2PMML available under the terms and conditions of the BSD 3-Clause License instead.

Additional information

SkLearn2PMML is developed and maintained by Openscoring Ltd, Estonia.

Interested in using Java PMML API software in your company? Please contact info@openscoring.io

Metadata

Release files for sklearn2pmml 0.133.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sklearn2pmml 0.133.1
File Size Uploaded
sklearn2pmml-0.133.1.tar.gz 7.8 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for sklearn2pmml 0.133.1
File Interpreter ABI Platform
sklearn2pmml-0.133.1-py3-none-any.whl Python 3 none any Details

Total release size: 15.5 MB

Release files / sklearn2pmml-0.133.1.tar.gz

Download URL sklearn2pmml-0.133.1.tar.gz
Size 7.8 MB
Tags Source
SHA-256 checksum
How to use checksums
5b4d7c8fc704c62d1787b40ce11b86fed2d0492d9d4b85c41676132b9399157c
BLAKE2b-256 checksum
How to use checksums
f8cc2a34da1b74619c9e6ac4311ff8ea218541460d8e3596d76d4464bf6564f5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.16

Release files / sklearn2pmml-0.133.1-py3-none-any.whl

Download URL sklearn2pmml-0.133.1-py3-none-any.whl
Size 7.8 MB
Tags Python 3
SHA-256 checksum
How to use checksums
abfd37be9a0754443c1098d8198e044d7008b7af4912cba54d371fedd28e73d7
BLAKE2b-256 checksum
How to use checksums
074a5798a454f766b862fd0eccbbbfcef6cd6a1d67f214fd06790d21d50f22a5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.16

Release history Release notifications | RSS feed

This release

0.133.1 This release

2 release files

0.112.1

1 release file

0.111.1

1 release file

0.111.0

1 release file

0.109.0

1 release file

0.108.0

1 release file

0.107.0

1 release file

0.106.0

1 release file

0.105.1

1 release file

0.105.0

1 release file

0.104.1

1 release file

0.104.0

1 release file

0.103.2

1 release file

0.103.1

1 release file

0.103.0

1 release file

0.102.0

1 release file

0.100.2

1 release file

0.100.1

1 release file

0.99.3

1 release file

0.99.2

1 release file

0.99.1

1 release file

0.99.0

1 release file

0.98.1

1 release file

0.98.0

1 release file

0.97.3

1 release file

0.97.2

1 release file

0.97.1

1 release file

0.97.0

1 release file

0.96.0

1 release file

0.95.1

1 release file

0.95.0

1 release file

0.94.1

1 release file

0.94.0

1 release file

0.93.0

1 release file

0.92.2

1 release file

0.92.1

1 release file

0.92.0

1 release file

0.91.1

1 release file

0.91.0

1 release file

0.90.4

1 release file

0.90.3

1 release file

0.90.2

1 release file

0.90.1

1 release file

0.90.0

1 release file

0.89.1

1 release file

0.89.0

1 release file

0.88.1

1 release file

0.88.0

1 release file

0.87.1

1 release file

0.87.0

1 release file

0.86.3

1 release file

0.86.2

1 release file

0.86.1

1 release file

0.86.0

1 release file

0.85.0

1 release file

0.84.2

1 release file

0.84.1

1 release file

0.84.0

1 release file

0.83.0

1 release file

0.82.0

1 release file

0.81.0

1 release file

0.80.0

1 release file

0.79.0

1 release file

0.78.1

1 release file

0.78.0

1 release file

0.77.2

1 release file

0.77.1

1 release file

0.77.0

1 release file

0.76.1

1 release file

0.76.0

1 release file

0.75.0

1 release file

0.74.4

1 release file

0.74.3

1 release file

0.74.2

1 release file

0.74.1

1 release file

0.74.0

1 release file

0.73.5

1 release file

0.73.4

1 release file

0.73.3

1 release file

0.73.2

1 release file

0.73.1

1 release file

0.73.0

1 release file

0.72.0

1 release file

0.71.1

1 release file

0.71.0

1 release file

0.70.0

1 release file

0.69.0

1 release file

0.68.0

1 release file

0.67.0

1 release file

0.66.1

1 release file

0.66.0

1 release file

0.65.0

1 release file

0.64.1

1 release file

0.64.0

1 release file

0.63.1

1 release file

0.63.0

1 release file

0.62.0

1 release file

0.61.0

1 release file

0.60.0

1 release file

0.59.0

1 release file

0.58.0

1 release file

0.57.0

1 release file

0.56.2

1 release file

0.56.1

1 release file

0.56.0

1 release file

0.55.4

1 release file

0.55.3

1 release file

0.55.2

1 release file

0.55.1

1 release file

0.55.0

1 release file

0.54.0

1 release file

0.53.0

1 release file

0.52.1

1 release file

0.52.0

1 release file

0.51.2

1 release file

0.51.1

1 release file

0.51.0

1 release file

0.50.1

1 release file

0.50.0

1 release file

0.49.3

1 release file

0.49.2

1 release file

0.49.1

1 release file

0.49.0

1 release file

0.48.0

1 release file

0.47.2

1 release file

0.47.1

1 release file

0.47.0

1 release file

0.46.0

1 release file

0.45.0

1 release file

0.44.0

1 release file

0.43.0

1 release file

0.42.0

1 release file

0.41.0

1 release file

0.40.0

1 release file

0.39.0

1 release file

0.38.2

1 release file

0.38.1

1 release file

0.38.0

1 release file

0.37.0

1 release file

0.36.1

1 release file

0.36.0

1 release file

0.35.2

1 release file

0.35.1

1 release file

0.35.0

1 release file

0.34.0

1 release file

0.33.0

1 release file

0.32.0

1 release file

0.31.1

1 release file

0.31.0

1 release file

0.30.0

1 release file

0.29.0

1 release file

0.28.2

1 release file

0.28.1

1 release file

0.28.0

1 release file

0.27.0

1 release file

0.26.0

1 release file

0.25.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page