{"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/what-s-a-good-imputation-to-predict-with","title":"What's a good imputation to predict with missing values?","arxiv_id":"2106.00311","date":"2021-06-01","proceeding":null,"authors":["Marine Le Morvan","Julie Josse","Erwan Scornet","Gaël Varoquaux"],"abstract":"How to learn a good predictor on data with missing values? Most efforts focus on first imputing as well as possible and second learning on the completed data to predict the outcome. Yet, this widespread practice has no theoretical grounding. Here we show that for almost all imputation functions, an impute-then-regress procedure with a powerful learner is Bayes optimal. This result holds for all missing-values mechanisms, in contrast with the classic statistical results that require missing-at-random settings to use imputation in probabilistic modeling. Moreover, it implies that perfect conditional imputation is not needed for good prediction asymptotically. In fact, we show that on perfectly imputed data the best regression function will generally be discontinuous, which makes it hard to learn. Crafting instead the imputation so as to leave the regression function unchanged simply shifts the problem to learning discontinuous imputations. Rather, we suggest that it is easier to learn imputation and regression jointly. We propose such a procedure, adapting NeuMiss, a neural network capturing the conditional links across observed and unobserved variables whatever the missing-value pattern. Experiments confirm that joint imputation and regression through NeuMiss is better than various two step procedures in our experiments with finite number of samples.","url_abs":"https://arxiv.org/abs/2106.00311v2","url_pdf":"https://arxiv.org/pdf/2106.00311v2.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":"what-s-a-good-imputation-to-predict-with","repo_url":"https://github.com/marinelm/impute_then_regress","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":{"status":"ok","spdx":"BSD-3-Clause"}}],"tasks":[{"task_slug":"imputation","task_name":"Imputation"},{"task_slug":"missing-values","task_name":"Missing Values"},{"task_slug":"regression-1","task_name":"regression"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2106.00311","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2106.00311"}},"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/marinelm/impute_then_regress","reach":{"status":"ok","spdx":"BSD-3-Clause"}}],"summary":{"ran_violates":1,"unverified":5},"by_repo_kind":{"official":{"samples":6,"ran":1,"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":"b8e95809ca2c17c9","entry":"sigmoid","repo":"marinelm/impute_then_regress","repo_kind":"official","path":"python/amputation.py","file_url":"https://github.com/marinelm/impute_then_regress/blob/HEAD/python/amputation.py","link_basis":"harvester_set","language":"python","status":"ran_violates","verification_level":2,"contract_check":"VIOLATES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"b8e95809ca2c17c9"}},{"code_sha256_prefix":"1bd33fd77d53d5d2","entry":"MAR_logistic","repo":"marinelm/impute_then_regress","repo_kind":"official","path":"python/amputation.py","file_url":"https://github.com/marinelm/impute_then_regress/blob/HEAD/python/amputation.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"1bd33fd77d53d5d2"}},{"code_sha256_prefix":"8a8b3036187fb31a","entry":"MCAR","repo":"marinelm/impute_then_regress","repo_kind":"official","path":"python/amputation.py","file_url":"https://github.com/marinelm/impute_then_regress/blob/HEAD/python/amputation.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"8a8b3036187fb31a"}},{"code_sha256_prefix":"6d7e7d6df4583ab3","entry":"f_wave","repo":"marinelm/impute_then_regress","repo_kind":"official","path":"python/plot_f_star.py","file_url":"https://github.com/marinelm/impute_then_regress/blob/HEAD/python/plot_f_star.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"6d7e7d6df4583ab3"}},{"code_sha256_prefix":"6e539d1064db9965","entry":"gen_params","repo":"marinelm/impute_then_regress","repo_kind":"official","path":"python/ground_truth.py","file_url":"https://github.com/marinelm/impute_then_regress/blob/HEAD/python/ground_truth.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"6e539d1064db9965"}},{"code_sha256_prefix":"331daf5073fe2fab","entry":"gen_params_selfmasking","repo":"marinelm/impute_then_regress","repo_kind":"official","path":"python/ground_truth.py","file_url":"https://github.com/marinelm/impute_then_regress/blob/HEAD/python/ground_truth.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"BSD-3-Clause","inline_ok":true,"mcp_get_code":{"code_sha256":"331daf5073fe2fab"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}