{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/performative-prediction","title":"Performative Prediction","arxiv_id":"2002.06673","date":"2020-02-16","proceeding":"ICML 2020 1","authors":["Juan C. Perdomo","Tijana Zrnic","Celestine Mendler-Dünner","Moritz Hardt"],"abstract":"When predictions support decisions they may influence the outcome they aim to predict. We call such predictions performative; the prediction influences the target. Performativity is a well-studied phenomenon in policy-making that has so far been neglected in supervised learning. When ignored, performativity surfaces as undesirable distribution shift, routinely addressed with retraining. We develop a risk minimization framework for performative prediction bringing together concepts from statistics, game theory, and causality. A conceptual novelty is an equilibrium notion we call performative stability. Performative stability implies that the predictions are calibrated not against past outcomes, but against the future outcomes that manifest from acting on the prediction. Our main results are necessary and sufficient conditions for the convergence of retraining to a performatively stable point of nearly minimal loss. In full generality, performative prediction strictly subsumes the setting known as strategic classification. We thus also give the first sufficient conditions for retraining to overcome strategic feedback effects.","url_abs":"https://arxiv.org/abs/2002.06673v4","url_pdf":"https://arxiv.org/pdf/2002.06673v4.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"performative-prediction","repo_url":"https://github.com/mrtzh/whynot","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"none","reach":{"status":"ok","spdx":"MIT"}},{"paper_slug":"performative-prediction","repo_url":"https://github.com/zykls/whynot","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"none","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"prediction","task_name":"Prediction"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2002.06673","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2002.06673"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/mrtzh/whynot","reach":{"status":"ok","spdx":"MIT"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/zykls/whynot","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"unverified":10},"by_repo_kind":{"listed":{"samples":10,"ran":0,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":0,"samples":[{"code_sha256_prefix":"ddf30472cf64bb94","entry":"check_and_cast_args","repo":"mrtzh/whynot","repo_kind":"listed","path":"whynot/causal_graphs.py","file_url":"https://github.com/mrtzh/whynot/blob/HEAD/whynot/causal_graphs.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"ddf30472cf64bb94"}},{"code_sha256_prefix":"5ad5c75f160ddf41","entry":"compute_ate","repo":"mrtzh/whynot","repo_kind":"listed","path":"whynot/algorithms/propensity_score_matching.py","file_url":"https://github.com/mrtzh/whynot/blob/HEAD/whynot/algorithms/propensity_score_matching.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"5ad5c75f160ddf41"}},{"code_sha256_prefix":"27663bc69d6c1aea","entry":"dataclass_to_box","repo":"mrtzh/whynot","repo_kind":"listed","path":"whynot/causal_graphs.py","file_url":"https://github.com/mrtzh/whynot/blob/HEAD/whynot/causal_graphs.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"27663bc69d6c1aea"}},{"code_sha256_prefix":"5207cda67d97bf0e","entry":"extract_params","repo":"mrtzh/whynot","repo_kind":"listed","path":"whynot/framework.py","file_url":"https://github.com/mrtzh/whynot/blob/HEAD/whynot/framework.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"5207cda67d97bf0e"}},{"code_sha256_prefix":"1a7197978bda289e","entry":"get_matched_dataset","repo":"mrtzh/whynot","repo_kind":"listed","path":"whynot/algorithms/propensity_score_matching.py","file_url":"https://github.com/mrtzh/whynot/blob/HEAD/whynot/algorithms/propensity_score_matching.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"1a7197978bda289e"}},{"code_sha256_prefix":"98c1773aa7ded37f","entry":"make","repo":"mrtzh/whynot","repo_kind":"listed","path":"whynot/gym/envs/registration.py","file_url":"https://github.com/mrtzh/whynot/blob/HEAD/whynot/gym/envs/registration.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"98c1773aa7ded37f"}},{"code_sha256_prefix":"8a4d20789854051c","entry":"parallelize","repo":"mrtzh/whynot","repo_kind":"listed","path":"whynot/utils.py","file_url":"https://github.com/mrtzh/whynot/blob/HEAD/whynot/utils.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"8a4d20789854051c"}},{"code_sha256_prefix":"caf87616e0180c33","entry":"parameter","repo":"mrtzh/whynot","repo_kind":"listed","path":"whynot/framework.py","file_url":"https://github.com/mrtzh/whynot/blob/HEAD/whynot/framework.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"caf87616e0180c33"}},{"code_sha256_prefix":"2718f2328806addb","entry":"register","repo":"mrtzh/whynot","repo_kind":"listed","path":"whynot/gym/envs/registration.py","file_url":"https://github.com/mrtzh/whynot/blob/HEAD/whynot/gym/envs/registration.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"2718f2328806addb"}},{"code_sha256_prefix":"bfa15a965f084103","entry":"spec","repo":"mrtzh/whynot","repo_kind":"listed","path":"whynot/gym/envs/registration.py","file_url":"https://github.com/mrtzh/whynot/blob/HEAD/whynot/gym/envs/registration.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"bfa15a965f084103"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}