:rocket: Version 2.15.1 out now! Read the release notes here..
skpro is a library for supervised probabilistic prediction in python.
It provides scikit-learn-like, scikit-base compatible interfaces to:
- tabular supervised regressors for probabilistic prediction - interval, quantile and distribution predictions
- tabular probabilistic time-to-event and survival prediction - instance-individual survival distributions
- metrics to evaluate probabilistic predictions, e.g., pinball loss, empirical coverage, CRPS, survival losses
- reductions to turn
scikit-learnregressors into probabilisticskproregressors, such as bootstrap or conformal - building pipelines and composite models, including tuning via probabilistic performance metrics
- symbolic probability distributions with value domain of
pandas.DataFrame-s andpandas-like interface
:books: Documentation
| Documentation | | | -------------------------- | -------------------------------------------------------------- | | :star: [Tutorials] | New to skpro? Here's everything you need to know! | | :clipboard: [Binder Notebooks] | Example notebooks to play with in your browser. | | :woman_technologist: [User Guides] | How to use skpro and its features. | | :scissors: [Extension Templates] | How to build your own estimator using skpro's API. | | :control_knobs: [API Reference] | The detailed reference for skpro's API. | | :hammer_and_wrench: [Changelog] | Changes and version history. | | :deciduous_tree: [Roadmap] | skpro's software and community development plan. | | :pencil: [Related Software] | A list of related software. |
[tutorials]: https://skpro.readthedocs.io/en/latest/tutorials.html [binder notebooks]: https://mybinder.org/v2/gh/sktime/skpro/main?filepath=examples [user guides]: https://skpro.readthedocs.io/en/latest/user_guide.html [extension templates]: https://github.com/sktime/skpro/tree/main/extension_templates [api reference]: https://skpro.readthedocs.io/en/latest/api_reference.html [changelog]: https://skpro.readthedocs.io/en/latest/changelog.html [roadmap]: https://skpro.readthedocs.io/en/latest/roadmap.html [related software]: https://skpro.readthedocs.io/en/latest/related_software.html
:speech_balloon: Where to ask questions
Questions and feedback are extremely welcome! We strongly believe in the value of sharing help publicly, as it allows a wider audience to benefit from it.
skpro is maintained by the sktime community, we use the same social channels.
| Type | Platforms |
| ------------------------------- | --------------------------------------- |
| :bug: Bug Reports | [GitHub Issue Tracker] |
| :sparkles: Feature Requests & Ideas | [GitHub Issue Tracker] |
| :woman_technologist: Usage Questions | [GitHub Discussions] · [Stack Overflow] |
| :speech_balloon: General Discussion | [GitHub Discussions] |
| :factory: Contribution & Development | dev-chat channel · [Discord] |
| :globe_with_meridians: Community collaboration session | [Discord] - Fridays 13 UTC, dev/meet-ups channel |
[github issue tracker]: https://github.com/sktime/skpro/issues [github discussions]: https://github.com/sktime/skpro/discussions [stack overflow]: https://stackoverflow.com/questions/tagged/sktime [discord]: https://discord.com/invite/54ACzaFsn7
:dizzy: Features
Our objective is to enhance the interoperability and usability of the AI model ecosystem:
- `
skprois compatible with [scikit-learn] and [sktime], e.g., ansktimeproba forecaster can
skpro proba regressor which in an sklearn regressor with proba mode added by skpro
skpro provides a mini-package management framework for first-party implementations,and for interfacing popular second- and third-party components,
such as [cyclic-boosting], [MAPIE], or [ngboost] packages.
[scikit-learn]: https://scikit-learn.org/stable/
[sktime]: https://www.sktime.net
[MAPIE]: https://mapie.readthedocs.io/en/latest/
[cyclic-boosting]: https://cyclic-boosting.readthedocs.io/en/latest/
[ngboost]: https://stanfordmlgroup.github.io/projects/ngboost/
skpro curates libraries of components of the following types:
| Module | Status | Links |
|---|---|---|
| [Probabilistic tabular regression] | maturing | Tutorial · API Reference · Extension Template |
| [Time-to-event (survival) prediction] | maturing | Tutorial · API Reference · Extension Template |
| [Performance metrics] | maturing | API Reference |
| [Probability distributions] | maturing | Tutorial · API Reference · Extension Template |
[Probabilistic tabular regression]: https://github.com/sktime/skpro/tree/main/skpro/regression
[Time-to-event (survival) prediction]: https://github.com/sktime/skpro/tree/main/skpro/survival
[Performance metrics]: https://github.com/sktime/skpro/tree/main/skpro/metrics
[Probability distributions]: https://github.com/sktime/skpro/tree/main/skpro/distributions
:hourglass_flowing_sand: Installing
skpro
To install
skpro, use pip:
pip install skpro
or, with maximum dependencies,
pip install skpro[all_extras]
Releases are available as source packages and binary wheels. You can see all available wheels here.
:zap: Quickstart
Making probabilistic predictions
` python
from sklearn.datasets import load_diabetes
from sklearn.ensemble import RandomForestRegressor
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from skpro.regression.residual import ResidualDouble
step 1: data specification
X, y = load_diabetes(return_X_y=True, as_frame=True)
X_train, X_new, y_train, y_test = train_test_split(X, y)
step 2: specifying the regressor - any compatible regressor is valid!
example - "squaring residuals" regressor
random forest for mean prediction
linear regression for variance prediction
reg_mean = RandomForestRegressor()
reg_resid = LinearRegression()
reg_proba = ResidualDouble(reg_mean, reg_resid)
step 3: fitting the model to training data
reg_proba.fit(X_train, y_train)
step 4: predicting labels on new data
probabilistic prediction modes - pick any or multiple
full distribution prediction
y_pred_proba = reg_proba.predict_proba(X_new)
interval prediction
y_pred_interval = reg_proba.predict_interval(X_new, coverage=0.9)
quantile prediction
y_pred_quantiles = reg_proba.predict_quantiles(X_new, alpha=[0.05, 0.5, 0.95])
variance prediction
y_pred_var = reg_proba.predict_var(X_new)
mean prediction is same as "classical" sklearn predict, also available
y_pred_mean = reg_proba.predict(X_new)
### Evaluating predictions
python
step 5: specifying evaluation metric
from skpro.metrics import CRPS
metric = CRPS() # continuous rank probability score - any skpro metric works!
step 6: evaluat metric, compare predictions to actuals
metric(y_test, y_pred_proba)
>> 32.19
`
:wave: How to get involved
There are many ways to get involved with development of
skpro, which is
developed by the sktime community.
We follow the all-contributors
specification: all kinds of contributions are welcome - not just code.
| Documentation | |
| -------------------------- | -------------------------------------------------------------- |
| :gift_heart: [Contribute] | How to contribute to skpro. |
| :school_satchel: [Mentoring] | New to open source? Apply to our mentoring program! |
| :date: [Meetings] | Join our discussions, tutorials, workshops, and sprints! |
| :woman_mechanic: [Developer Guides] | How to further develop the skpro code base. |
| :medal_sports: [Contributors] | A list of all contributors. |
| :raising_hand: [Roles] | An overview of our core community roles. |
| :money_with_wings: [Donate] | Fund sktime and skpro maintenance and development. |
| :classical_building: [Governance] | How and by whom decisions are made in the sktime community. |
[contribute]: https://github.com/sktime/skpro/blob/main/CONTRIBUTING.md
[donate]: https://opencollective.com/sktime
[developer guides]: https://skpro.readthedocs.io/en/latest/developer_guide.html
[contributors]: https://github.com/sktime/skpro/graphs/contributors
[governance]: https://www.sktime.net/en/latest/get_involved/governance.html
[mentoring]: https://github.com/sktime/mentoring
[meetings]: https://calendar.google.com/calendar/u/0/[email protected]&ctz=UTC
[roles]: https://www.sktime.net/en/latest/about/team.html
:wave: Citation
To cite
skpro` in a scientific publication, see citations.
