{"id":13775543,"url":"https://github.com/henrikbostrom/crepes","last_synced_at":"2025-05-16T08:05:51.469Z","repository":{"id":37768458,"uuid":"428992317","full_name":"henrikbostrom/crepes","owner":"henrikbostrom","description":"Python package for conformal prediction","archived":false,"fork":false,"pushed_at":"2025-04-01T12:59:38.000Z","size":25491,"stargazers_count":496,"open_issues_count":2,"forks_count":39,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-19T18:31:20.078Z","etag":null,"topics":["confidence-intervals","conformal-classifiers","conformal-prediction","conformal-predictive-systems","conformal-regressors","cumulative-distribution-function","jupyter-notebook","machine-learning","prediction-intervals","prediction-sets","python","quantile-regression","regression","scikit-learn","sklearn","uncertainty-quantification"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/henrikbostrom.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-11-17T09:59:15.000Z","updated_at":"2025-04-17T01:15:25.000Z","dependencies_parsed_at":"2024-01-16T12:49:19.392Z","dependency_job_id":"ae6bc710-908a-4658-bb70-d952e2a1a9e7","html_url":"https://github.com/henrikbostrom/crepes","commit_stats":{"total_commits":192,"total_committers":2,"mean_commits":96.0,"dds":0.00520833333333337,"last_synced_commit":"742d2cece004d6a2abcceec2b6fc5050852d6616"},"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/henrikbostrom%2Fcrepes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/henrikbostrom%2Fcrepes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/henrikbostrom%2Fcrepes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/henrikbostrom%2Fcrepes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/henrikbostrom","download_url":"https://codeload.github.com/henrikbostrom/crepes/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254493378,"owners_count":22080126,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["confidence-intervals","conformal-classifiers","conformal-prediction","conformal-predictive-systems","conformal-regressors","cumulative-distribution-function","jupyter-notebook","machine-learning","prediction-intervals","prediction-sets","python","quantile-regression","regression","scikit-learn","sklearn","uncertainty-quantification"],"created_at":"2024-08-03T17:01:40.741Z","updated_at":"2025-05-16T08:05:46.460Z","avatar_url":"https://github.com/henrikbostrom.png","language":"Python","funding_links":[],"categories":["Python","Tools 🛠️"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\u003ca href=\"https://crepes.readthedocs.io\"\u003e\u003cimg alt=\"crepes\" src=\"https://github.com/henrikbostrom/crepes/blob/main/docs/crepes_logo.png\"\u003e\u003c/a\u003e\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://pypi.org/project/crepes/\"\u003e\u003cimg src=\"https://img.shields.io/badge/pypi package-0.8.0-brightgreen\" alt=\"PyPI version\" height=20 align=\"center\"\u003e\u003c/a\u003e\n\u003ca href=\"https://anaconda.org/conda-forge/crepes\"\u003e\u003cimg src=\"https://img.shields.io/badge/conda--forge-0.8.0-orange\" alt=\"conda-forge version\" height=20 align=\"center\"\u003e\u003c/a\u003e\n\u003ca href=\"https://pepy.tech/project/crepes\"\u003e\u003cimg src=\"https://static.pepy.tech/badge/crepes?dummy=unused\" alt=\"Downloads\" height=20 align=\"center\"\u003e\u003c/a\u003e\n\u003ca href=\"https://crepes.readthedocs.io/en/latest\"\u003e\u003cimg src=\"https://readthedocs.org/projects/crepes/badge/?version=latest\" alt=\"docs status\" height=20 align=\"center\"\u003e\u003c/a\u003e \n\u003ca href=\"https://github.com/henrikbostrom/crepes/tree/main?tab=readme-ov-file#BSD-3-Clause-1-ov-file\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-BSD--3--clause-blue\" alt=\"License\" height=20 align=\"center\"\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/henrikbostrom/crepes/releases/tag/v0.8.0\"\u003e\u003cimg src=\"https://img.shields.io/github/release-date/henrikbostrom/crepes\" alt=\"Release date\" height=20 align=\"center\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cbr\u003e\n\n`crepes` is a Python package for conformal prediction that implements conformal classifiers,\nregressors, and predictive systems on top of any standard classifier\nand regressor, turning the original predictions into\nwell-calibrated p-values and cumulative distribution functions, or\nprediction sets and intervals with coverage guarantees.\n\nThe `crepes` package implements standard and Mondrian conformal\nclassifiers as well as standard, normalized and Mondrian conformal\nregressors and predictive systems. While the package allows you to use\nyour own functions to compute difficulty estimates, non-conformity\nscores and Mondrian categories, there is also a separate module,\ncalled `crepes.extras`, which provides some standard options for\nthese.\n\n## Installation\n\nFrom [PyPI](https://pypi.org/project/crepes/)\n\n```bash\npip install crepes\n```\n\nFrom [conda-forge](https://anaconda.org/conda-forge/crepes)\n\n```bash\nconda install conda-forge::crepes\n```\n\n## Documentation\n\nFor the complete documentation, see [crepes.readthedocs.io](https://crepes.readthedocs.io/en/latest/).\n\n## Quickstart\n\nLet us illustrate how we may use `crepes` to generate and apply\nconformal classifiers with a dataset from\n[www.openml.org](https://www.openml.org), which we first split into a\ntraining and a test set using `train_test_split` from\n[sklearn](https://scikit-learn.org), and then further split the\ntraining set into a proper training set and a calibration set:\n\n```python\nfrom sklearn.datasets import fetch_openml\nfrom sklearn.model_selection import train_test_split\n\ndataset = fetch_openml(name=\"qsar-biodeg\", parser=\"auto\")\n\nX = dataset.data.values.astype(float)\ny = dataset.target.values\n\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5)\n\nX_prop_train, X_cal, y_prop_train, y_cal = train_test_split(X_train, y_train,\n                                                            test_size=0.25)\n```\n\nWe now \"wrap\" a random forest classifier, fit it to the proper\ntraining set, and fit a standard conformal classifier through the\n`calibrate` method:\n\n```python\nfrom crepes import WrapClassifier\nfrom sklearn.ensemble import RandomForestClassifier\n\nrf = WrapClassifier(RandomForestClassifier(n_jobs=-1))\n\nrf.fit(X_prop_train, y_prop_train)\n\nrf.calibrate(X_cal, y_cal)\n```\n\nWe may now produce p-values for the test set (an array with as many\ncolumns as there are classes):\n\n```python\nrf.predict_p(X_test)\n```\n\n```numpy\narray([[0.00427104, 0.74842304],\n       [0.07874355, 0.2950549 ],\n       [0.50529983, 0.01557963],\n       ...,\n       [0.8413356 , 0.00201167],\n       [0.84402215, 0.00654927],\n       [0.29601955, 0.07766093]])\n```\n\nWe can also get prediction sets, represented by binary vectors\nindicating presence (1) or absence (0) of the class labels that\ncorrespond to the columns, here at the 90% confidence level:\n\n```python\nrf.predict_set(X_test, confidence=0.9)\n```\n\n```numpy\narray([[0, 1],\n       [0, 1],\n       [1, 0],\n       ...,\n       [1, 0],\n       [1, 0],\n       [1, 0]])\n```\n\nSince we have access to the true class labels, we can evaluate the\nconformal classifier (here using all available metrics which is the\ndefault), at the 99% confidence level:\n\n```python\nrf.evaluate(X_test, y_test, confidence=0.99)\n```\n\n```python\n{'error': 0.007575757575757569,\n 'avg_c': 1.6325757575757576,\n 'one_c': 0.36742424242424243,\n 'empty': 0.0,\n 'ks_test': 0.0033578466103315894,\n 'time_fit': 1.9073486328125e-06,\n 'time_evaluate': 0.04798746109008789}\n```\n\nTo control the error level across different groups of objects of\ninterest, we may use so-called Mondrian conformal classifiers. A\nMondrian conformal classifier is formed by providing a function or a\n`MondrianCategorizer` (defined in `crepes.extras`) as an additional\nargument, named `mc`, for the `calibrate` method.\n\nFor illustration, we will use the predicted labels of the underlying\nmodel to form the categories. Note that the prediction sets are generated\nfor the test objects using the same categorization (under the hood).\n\n```python\nrf_mond = WrapClassifier(rf.learner)\n\nrf_mond.calibrate(X_cal, y_cal, mc=rf_mond.predict)\n\nrf_mond.predict_set(X_test)\n```\n\n```numpy\narray([[0, 1],\n       [1, 1],\n       [1, 0],\n       ...,\n       [1, 0],\n       [1, 0],\n       [1, 1]])\n```\n\nThe class-conditional conformal classifier is a special type of Mondrian\nconformal classifier, for which the categories are formed by the true labels;\nwe can generate one by setting `class_cond=True` in the call to `calibrate`\n\n```python\nrf_classcond = WrapClassifier(rf.learner)\n\nrf_classcond.calibrate(X_cal, y_cal, class_cond=True)\n\nrf_classcond.evaluate(X_test, y_test, confidence=0.99)\n```\n\n```python\n{'error': 0.0018939393939394478,\n 'avg_c': 1.740530303030303,\n 'one_c': 0.25946969696969696,\n 'empty': 0.0,\n 'ks_test': 0.11458837583733483,\n 'time_fit': 7.152557373046875e-07,\n 'time_evaluate': 0.06147575378417969}\n ```\n\nWhen employing an inductive conformal predictor, the predicted\np-values (and consequently the errors made) for a test set are not\nindependent. Semi-online conformal predictors can however make them\nindependent by updating the calibration set immediately after each\nprediction (assuming that the true label is then available). We can\nturn the conformal classifiers into semi-online conformal classifiers\nby enabling online calibration, i.e., setting `online=True` when calling\nthe above methods, while also providing the true labels, e.g.,\n\n```python\nrf_classcond.predict_p(X_test, y_test, online=True)\n```\n\n```numpy\narray([[8.13837566e-05, 8.86436603e-01],\n       [6.60518590e-02, 4.02350293e-01],\n       [4.28646783e-01, 4.29930890e-02],\n       ...,\n       [7.05118942e-01, 9.45056960e-03],\n       [7.27003479e-01, 1.27347189e-02],\n       [1.76403756e-01, 1.21434924e-01]])\n```\n\nSimilarly, we can evaluate the conformal classifier while using online\ncalibration:\n\n```python\nrf_classcond.evaluate(X_test, y_test, confidence=0.99, online=True)\n```\n\n```python\n{'error': 0.007575757575757569,\n 'avg_c': 1.6117424242424243,\n 'one_c': 0.38825757575757575,\n 'empty': 0.0,\n 'ks_test': 0.14097384777782784,\n 'time_fit': 1.9073486328125e-06,\n 'time_evaluate': 0.05298352241516113}\n```\n\nLet us also illustrate how `crepes` can be used to generate conformal\nregressors and predictive systems. Again, we import a dataset from\n[www.openml.org](https://www.openml.org), which we split into a\ntraining and a test set and then further split the training set into a\nproper training set and a calibration set:\n\n```python\nfrom sklearn.datasets import fetch_openml\nfrom sklearn.model_selection import train_test_split\n\ndataset = fetch_openml(name=\"house_sales\", version=3, parser=\"auto\")\n\nX = dataset.data.values.astype(float)\ny = dataset.target.values.astype(float)\n\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5)\nX_prop_train, X_cal, y_prop_train, y_cal = train_test_split(X_train, y_train,\n                                                            test_size=0.25)\n```\n\nLet us now \"wrap\" a `RandomForestRegressor` from\n[sklearn](https://scikit-learn.org) using the class `WrapRegressor`\nfrom `crepes` and fit it (in the usual way) to the proper training\nset:\n\n```python\nfrom sklearn.ensemble import RandomForestRegressor\nfrom crepes import WrapRegressor\n\nrf = WrapRegressor(RandomForestRegressor())\nrf.fit(X_prop_train, y_prop_train)\n```\n\nWe may now fit a conformal regressor using the calibration set through\nthe `calibrate` method:\n\n```python\nrf.calibrate(X_cal, y_cal)\n```\n\nThe conformal regressor can now produce prediction intervals for the\ntest set, here using a confidence level of 99%:\n\n```python\nrf.predict_int(X_test, confidence=0.99)\n```\n\n```numpy\narray([[1938866.06, 3146372.54],\n       [ 225335.1 , 1432841.58],\n       [-403305.49,  804200.99],\n       ...,\n       [ 443742.33, 1651248.81],\n       [-343684.48,  863822.  ],\n       [-153629.93, 1053876.55]])\n```\n\nThe output is a [NumPy](https://numpy.org) array with a row for each\ntest instance, and where the two columns specify the lower and upper\nbound of each prediction interval.\n\nWe may request that the intervals are cut to exclude impossible\nvalues, in this case below 0, and if we also rely on the default\nconfidence level (0.95), the output intervals will be a bit tighter:\n\n```python\nrf.predict_int(X_test, y_min=0)\n```\n\n```numpy\narray([[2302049.84, 2783188.76],\n       [ 588518.88, 1069657.8 ],\n       [      0.  ,  441017.21],\n       ...,\n       [ 806926.11, 1288065.03],\n       [  19499.3 ,  500638.22],\n       [ 209553.85,  690692.77]])\n```\n\nThe above intervals are not normalized, i.e., they are all of the same\nsize (at least before they are cut). We could make them more\ninformative through normalization using difficulty estimates; objects\nconsidered more difficult will be assigned wider intervals.\n\nWe will use a `DifficultyEstimator` from the `crepes.extras` module\nfor this purpose. Here we estimate the difficulty by the standard\ndeviation of the target of the k (default `k=25`) nearest neighbors in\nthe proper training set to each object in the calibration set. A small\nvalue (beta) is added to the estimates, which may be given through an\nargument to the function; below we just use the default, i.e.,\n`beta=0.01`.\n\nWe first fit the difficulty estimator and then calibrate the conformal\nregressor, using the calibration objects and labels together the\ndifficulty estimator:\n\n```python\nfrom crepes.extras import DifficultyEstimator\n\nde = DifficultyEstimator()\nde.fit(X_prop_train, y=y_prop_train)\n\nrf.calibrate(X_cal, y_cal, de=de)\n```\n\nTo obtain prediction intervals, we just have to provide test objects\nto the `predict_int` method, as the difficulty estimates will be\ncomputed by the incorporated difficulty estimator:\n\n```python\nrf.predict_int(X_test, y_min=0)\n```\n\n```numpy\narray([[1769594.36212355, 3315644.23787645],\n       [ 693827.99796647,  964348.68203353],\n       [ 124886.97469338,  276008.52530662],\n       ...,\n       [ 661373.45043166, 1433617.68956833],\n       [ 178769.2939384 ,  341368.2260616 ],\n       [ 222837.12801117,  677409.49198883]])\n```\n\nDepending on the employed difficulty estimator, the normalized\nintervals may sometimes be unreasonably large, in the sense that they\nmay be several times larger than any previously observed\nerror. Moreover, if the difficulty estimator is uninformative, e.g.,\ncompletely random, the varying interval sizes may give a false\nimpression of that we can expect lower prediction errors for instances\nwith tighter intervals. Ideally, a difficulty estimator providing\nlittle or no information on the expected error should instead lead to\nmore uniformly distributed interval sizes.\n\nA Mondrian conformal regressor can be used to address these problems,\nby dividing the object space into non-overlapping so-called Mondrian\ncategories, and forming a (standard) conformal regressor for each\ncategory. We may form a Mondrian conformal regressor by providing a\nfunction or a `MondrianCategorizer` (defined in `crepes.extras`) as an\nadditional argument, named `mc`, for the `calibrate` method.\n\nHere we employ a `MondrianCategorizer`; it may be fitted in several\ndifferent ways, and below we show how to form categories by binning of\nthe difficulty estimates into 20 bins, using the difficulty estimator\nfitted above.\n\n```python\nfrom crepes.extras import MondrianCategorizer\n\nmc_diff = MondrianCategorizer()\nmc_diff.fit(X_cal, de=de, no_bins=20)\n\nrf.calibrate(X_cal, y_cal, mc=mc_diff)\n```\n\nWhen making predictions, the test objects will be assigned to Mondrian categories\naccording to the incorporated `MondrianCategorizer` (or labeling function):\n\n```python\nrf.predict_int(X_test, y_min=0)\n```\n\n```numpy\narray([[1152528.9 , 3932709.7 ],\n       [ 692366.75,  965809.93],\n       [ 124254.81,  276640.69],\n       ...,\n       [ 622939.57, 1472051.57],\n       [ 155346.82,  364790.7 ],\n       [ 239474.31,  660772.31]])\n```\n\nSimilarly to semi-online conformal classifiers, we may enable online calibration\nalso for conformal regressors; this is again done by setting `online=True` when\ncalling any of the applicable methods, while also providing the true labels, e.g.,\n\n```python\nrf.predict_p(X_test, y_test, online=True)\n```\n\n```numpy\narray([0.09369225, 0.52548032, 0.49992477, ..., 0.72979714, 0.87495964,\n       0.58352253])\n```\n\nWe can easily switch from conformal regressors to conformal\npredictive systems. The latter produce cumulative distribution\nfunctions (conformal predictive distributions). From these we can\ngenerate prediction intervals, but we can also obtain percentiles,\ncalibrated point predictions, as well as p-values for given target\nvalues. Let us see how we can go ahead to do that.\n\nWell, there is only one thing above that changes: just provide\n`cps=True` to the `calibrate` method.\n\nWe can, for example, form normalized Mondrian conformal predictive\nsystems, by providing both a Mondrian categorizer and difficulty estimator\nto the `calibrate` method. Here we will consider Mondrian categories formed\nfrom binning the point predictions:\n\n```python\nmc_pred = MondrianCategorizer()\nmc_pred.fit(X_cal, f=rf.predict, no_bins=5)\n\nrf.calibrate(X_cal, y_cal, de=de, mc=mc_pred, cps=True)\n```\n\nWe can now make predictions with the conformal predictive system,\nthrough several different methods, e.g., `predict_percentiles`:\n\n```python\nrf.predict_percentiles(X_test, higher_percentiles=[90, 95, 99])\n```\n\n```numpy\narray([[3120432.14791764, 3403976.16608241, 3952384.13595105],\n       [ 930191.36994287,  979804.59585495, 1075762.49571536],\n       [ 236278.82580469,  253387.66592079,  329933.49293406],\n       ...,\n       [1336110.21956702, 1477739.04927264, 1751666.10820498],\n       [ 298621.13482031,  317029.35735016,  399388.68783836],\n       [ 564574.75363948,  615226.06727944,  762212.9912238 ]])\n```\n\nSimilarly to semi-online conformal classifiers and regressors, we can enable\nonline calibration also for conformal predictive systems; here we generate\nprediction intervals at the default (95%) confidence level:\n\n```python\nrf.predict_int(X_test, y_test, y_min=0, online=True)\n```\n\n```numpy\narray([[1719676.80439219, 3707173.76806116],\n       [ 684289.27240227, 1032856.71531186],\n       [ 127189.61835749,  274385.59426486],\n       ...,\n       [ 630347.70469164, 1594876.58130005],\n       [ 167399.51044545,  337513.60197203],\n       [ 232815.51352497,  641580.14787679]])\n```\n\nWe may also obtain the full conformal predictive distribution for each test\ninstance, as defined by the threshold values:\n\n```python\nrf.predict_cpds(X_test)\n```\n\nFor a Mondrian conformal predictive system (or any semi-online conformal\npredictive system), the output is a vector containing one CPD per test instance,\nwhile for a standard or normalized conformal predictive system (for which online\ncalibration is not enabled), the output is a 2-dimensional array.\n\nThe resulting vector of vectors is not displayed here, but we instead provide a plot\nfor the CPD of a random test instance:\n\n![cpd](https://user-images.githubusercontent.com/7838741/235081969-328d7a23-26c9-4799-a246-8c35fd7ac88e.png)\n\n## Examples\n\nFor additional examples of how to use the package and module, see [the documentation](https://crepes.readthedocs.io/en/latest/), [this Jupyter notebook using WrapClassifier and WrapRegressor](https://github.com/henrikbostrom/crepes/blob/main/docs/crepes_nb_wrap.ipynb), and [this Jupyter notebook using ConformalClassifier, ConformalRegressor, and ConformalPredictiveSystem](https://github.com/henrikbostrom/crepes/blob/main/docs/crepes_nb.ipynb).\n\nYou may also take a look at the [slides from my tutorial at COPA 2024](\u003chttps://github.com/henrikbostrom/crepes/blob/main/docs/COPA Tutorial 2024.pdf\u003e) and the accompanying [Jupyter notebook](\u003chttps://github.com/henrikbostrom/crepes/blob/main/docs/COPA Tutorial 2024.ipynb\u003e).\n\n## Citing crepes\n\nYou are welcome to cite the following paper:\n\nBoström, H. 2024. Conformal Prediction in Python with crepes. Proceedings of the 13th Symposium on Conformal and Probabilistic Prediction with Applications, PMLR 230:236-249 [Link](https://raw.githubusercontent.com/mlresearch/v230/main/assets/bostrom24a/bostrom24a.pdf)\n\nBibtex entry:\n\n```bibtex\n@inproceedings{bostrom2024,\n  title={Conformal Prediction in Python with crepes},\n  author={Bostr{\\\"o}m, Henrik},\n  booktitle={Proc. of the 13th Symposium on Conformal and Probabilistic Prediction with Applications},\n  pages={236--249},\n  year={2024},\n  organization={PMLR}\n}\n```\n\nAn early version of the package was described in:\n\nBoström, H., 2022. crepes: a Python Package for Generating Conformal Regressors and Predictive Systems. Proceedings of the 11th Symposium on Conformal and Probabilistic Prediction with Applications, PMLR 179:24-41 [Link](https://proceedings.mlr.press/v179/bostrom22a/bostrom22a.pdf)\n\nBibtex entry:\n\n```bibtex\n@inproceedings{bostrom2022,\n  title={crepes: a Python Package for Generating Conformal Regressors and Predictive Systems},\n  author={Bostr{\\\"o}m, Henrik},\n  booktitle={Proc. of the 11th Symposium on Conformal and Probabilistic Prediction with Applications},\n  pages={24--41},\n  year={2022},\n  organization={PMLR}\n}\n```\n\n## References\n\n\u003ca id=\"1\"\u003e[1]\u003c/a\u003e Vovk, V., Gammerman, A. and Shafer, G., 2022. Algorithmic learning in a random world. 2nd edition. Springer [Link](https://link.springer.com/book/10.1007/978-3-031-06649-8)\n\n\u003ca id=\"2\"\u003e[2]\u003c/a\u003e Papadopoulos, H., Proedrou, K., Vovk, V. and Gammerman, A., 2002. Inductive confidence machines for regression. European Conference on Machine Learning, pp. 345-356. [Link](https://link.springer.com/chapter/10.1007/3-540-36755-1_29)\n\n\u003ca id=\"3\"\u003e[3]\u003c/a\u003e Johansson, U., Boström, H., Löfström, T. and Linusson, H., 2014. Regression conformal prediction with random forests. Machine learning, 97(1-2), pp. 155-176. [Link](https://link.springer.com/article/10.1007/s10994-014-5453-0)\n\n\u003ca id=\"4\"\u003e[4]\u003c/a\u003e Boström, H., Linusson, H., Löfström, T. and Johansson, U., 2017. Accelerating difficulty estimation for conformal regression forests. Annals of Mathematics and Artificial Intelligence, 81(1-2), pp.125-144. [Link](https://link.springer.com/article/10.1007/s10472-017-9539-9)\n\n\u003ca id=\"5\"\u003e[5]\u003c/a\u003e Boström, H. and Johansson, U., 2020. Mondrian conformal regressors. In Conformal and Probabilistic Prediction and Applications. PMLR, 128, pp. 114-133. [Link](https://proceedings.mlr.press/v128/bostrom20a.html)\n\n\u003ca id=\"6\"\u003e[6]\u003c/a\u003e Vovk, V., Petej, I., Nouretdinov, I., Manokhin, V. and Gammerman, A., 2020. Computationally efficient versions of conformal predictive distributions. Neurocomputing, 397, pp.292-308. [Link](https://www.aminer.org/pub/5e09aac9df1a9c0c416c9b70/computationally-efficient-versions-of-conformal-predictive-distributions)\n\n\u003ca id=\"7\"\u003e[7]\u003c/a\u003e Boström, H., Johansson, U. and Löfström, T., 2021. Mondrian conformal predictive distributions. In Conformal and Probabilistic Prediction and Applications. PMLR, 152, pp. 24-38. [Link](https://proceedings.mlr.press/v152/bostrom21a.html)\n\n\u003ca id=\"8\"\u003e[8]\u003c/a\u003e Vovk, V., 2022. Universal predictive systems. Pattern Recognition. 126: pp. 108536 [Link](https://dl.acm.org/doi/abs/10.1016/j.patcog.2022.108536)\n\n\n- - -\n\nAuthor: Henrik Boström (bostromh@kth.se)\nCopyright 2025 Henrik Boström\nLicense: BSD 3 clause\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhenrikbostrom%2Fcrepes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhenrikbostrom%2Fcrepes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhenrikbostrom%2Fcrepes/lists"}