{"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/arxiv-2607-09371","title":"Spectrally Deconfounded Gradient Boosting","arxiv_id":"2607.09371","date":"2026-07-10","proceeding":null,"authors":["Andrea Nava","Peter Bühlmann","Fabio Sigrist"],"abstract":"Flexible machine-learning methods can be sensitive to hidden confounding: they may learn associations induced by unobserved confounders rather than stable signals. Spectral deconfounding mitigates this problem by shrinking high-variance directions of the covariate matrix that, under dense confounding, carry latent confounder information. Existing work has largely focused on linear models. We develop a nonlinear spectral deconfounding framework for gradient boosting. Our approach replaces the ordinary squared-error loss by a spectral loss, which alters the boosting dynamics by slowing down learning in confounding-aligned directions. We show that deconfounding is not achieved by the spectral loss alone, but by the interaction between spectral shrinkage and regularization, especially in terms of early stopping. Moreover, we provide a mixed-model interpretation that connects LAVA-type shrinkage to random-effects adjustment and yields an empirical-Bayes procedure for tuning the spectral loss. We also extend the method to general likelihoods and nonlinear confounding using Laplace approximations and kernel random effects. Across synthetic and real-world experiments, spectrally deconfounded boosting improves estimation of the target function under hidden confounding and is substantially more scalable than existing nonlinear spectral deconfounding baselines.","url_abs":"https://arxiv.org/abs/2607.09371","url_pdf":"https://arxiv.org/pdf/2607.09371","source":{"archive":null,"snapshot":"2025-07-28","note":"not in the Papers with Code archive (frozen at the snapshot)","row_kind":"graph","title_abstract_authors_date":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)"},"code_links":[],"tasks":[],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2607.09371","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2607.09371"}},"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":[{"mentioned_in_github":null,"is_official":null,"provenance":"deterministic:regex_extraction","mentioned_in_paper":null,"url":"https://github.com/fabsig/GPBoost","reach":null},{"mentioned_in_github":null,"is_official":null,"provenance":"deterministic:regex_extraction","mentioned_in_paper":null,"url":"https://github.com/AndreaThomNava/spectral-boosting","reach":{"status":"ok"}}],"summary":{"ran":13,"unverified":6},"by_repo_kind":{"found_in_text":{"samples":19,"ran":13,"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":19,"samples":[{"code_sha256_prefix":"8c6b93d2af55cdf0","entry":"driver_source","repo":"fabsig/GPBoost","repo_kind":"found_in_text","path":"helpers/check_cpu_quota_fixtures.py","file_url":"https://github.com/fabsig/GPBoost/blob/HEAD/helpers/check_cpu_quota_fixtures.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"8c6b93d2af55cdf0"}},{"code_sha256_prefix":"ab97f6d90b4e59a3","entry":"early_stopping","repo":"fabsig/GPBoost","repo_kind":"found_in_text","path":"python-package/gpboost/callback.py","file_url":"https://github.com/fabsig/GPBoost/blob/HEAD/python-package/gpboost/callback.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"ab97f6d90b4e59a3"}},{"code_sha256_prefix":"cf90f0acecfd103d","entry":"get_alias","repo":"fabsig/GPBoost","repo_kind":"found_in_text","path":"helpers/parameter_generator.py","file_url":"https://github.com/fabsig/GPBoost/blob/HEAD/helpers/parameter_generator.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"cf90f0acecfd103d"}},{"code_sha256_prefix":"4b472b054a47b6c4","entry":"get_names","repo":"fabsig/GPBoost","repo_kind":"found_in_text","path":"helpers/parameter_generator.py","file_url":"https://github.com/fabsig/GPBoost/blob/HEAD/helpers/parameter_generator.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"4b472b054a47b6c4"}},{"code_sha256_prefix":"da3530e625e85eb0","entry":"get_nested_categories","repo":"fabsig/GPBoost","repo_kind":"found_in_text","path":"python-package/gpboost/basic.py","file_url":"https://github.com/fabsig/GPBoost/blob/HEAD/python-package/gpboost/basic.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"da3530e625e85eb0"}},{"code_sha256_prefix":"32d8fddff620930c","entry":"get_parameter_infos","repo":"fabsig/GPBoost","repo_kind":"found_in_text","path":"helpers/parameter_generator.py","file_url":"https://github.com/fabsig/GPBoost/blob/HEAD/helpers/parameter_generator.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"32d8fddff620930c"}},{"code_sha256_prefix":"2076b13e5ea7eb87","entry":"is_numeric","repo":"fabsig/GPBoost","repo_kind":"found_in_text","path":"python-package/gpboost/basic.py","file_url":"https://github.com/fabsig/GPBoost/blob/HEAD/python-package/gpboost/basic.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"2076b13e5ea7eb87"}},{"code_sha256_prefix":"3388ef831c610fe9","entry":"is_numpy_1d_array","repo":"fabsig/GPBoost","repo_kind":"found_in_text","path":"python-package/gpboost/basic.py","file_url":"https://github.com/fabsig/GPBoost/blob/HEAD/python-package/gpboost/basic.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"3388ef831c610fe9"}},{"code_sha256_prefix":"6c9c1fb3bee0ec4b","entry":"mount","repo":"fabsig/GPBoost","repo_kind":"found_in_text","path":"helpers/check_cpu_quota_fixtures.py","file_url":"https://github.com/fabsig/GPBoost/blob/HEAD/helpers/check_cpu_quota_fixtures.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"6c9c1fb3bee0ec4b"}},{"code_sha256_prefix":"e6c75775b1454e01","entry":"print_evaluation","repo":"fabsig/GPBoost","repo_kind":"found_in_text","path":"python-package/gpboost/callback.py","file_url":"https://github.com/fabsig/GPBoost/blob/HEAD/python-package/gpboost/callback.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"e6c75775b1454e01"}},{"code_sha256_prefix":"cec8e8040d7890c5","entry":"record_evaluation","repo":"fabsig/GPBoost","repo_kind":"found_in_text","path":"python-package/gpboost/callback.py","file_url":"https://github.com/fabsig/GPBoost/blob/HEAD/python-package/gpboost/callback.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"cec8e8040d7890c5"}},{"code_sha256_prefix":"603210f99dc97740","entry":"run_benchmark","repo":"fabsig/GPBoost","repo_kind":"found_in_text","path":"external_libs/compute/perf/perf.py","file_url":"https://github.com/fabsig/GPBoost/blob/HEAD/external_libs/compute/perf/perf.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"603210f99dc97740"}},{"code_sha256_prefix":"d7ab03027143d595","entry":"run_perf_process","repo":"fabsig/GPBoost","repo_kind":"found_in_text","path":"external_libs/compute/perf/perf.py","file_url":"https://github.com/fabsig/GPBoost/blob/HEAD/external_libs/compute/perf/perf.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"d7ab03027143d595"}},{"code_sha256_prefix":"5e40ad7c7baa0d4d","entry":"cv","repo":"fabsig/GPBoost","repo_kind":"found_in_text","path":"python-package/gpboost/engine.py","file_url":"https://github.com/fabsig/GPBoost/blob/HEAD/python-package/gpboost/engine.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"5e40ad7c7baa0d4d"}},{"code_sha256_prefix":"31d87799622a22b8","entry":"grid_search_tune_parameters","repo":"fabsig/GPBoost","repo_kind":"found_in_text","path":"python-package/gpboost/engine.py","file_url":"https://github.com/fabsig/GPBoost/blob/HEAD/python-package/gpboost/engine.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"31d87799622a22b8"}},{"code_sha256_prefix":"a16341846c82053f","entry":"plot_importance","repo":"fabsig/GPBoost","repo_kind":"found_in_text","path":"python-package/gpboost/plotting.py","file_url":"https://github.com/fabsig/GPBoost/blob/HEAD/python-package/gpboost/plotting.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"a16341846c82053f"}},{"code_sha256_prefix":"818bdd7ea5b5bb7c","entry":"plot_metric","repo":"fabsig/GPBoost","repo_kind":"found_in_text","path":"python-package/gpboost/plotting.py","file_url":"https://github.com/fabsig/GPBoost/blob/HEAD/python-package/gpboost/plotting.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"818bdd7ea5b5bb7c"}},{"code_sha256_prefix":"695eadbc51698a3e","entry":"plot_split_value_histogram","repo":"fabsig/GPBoost","repo_kind":"found_in_text","path":"python-package/gpboost/plotting.py","file_url":"https://github.com/fabsig/GPBoost/blob/HEAD/python-package/gpboost/plotting.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"695eadbc51698a3e"}},{"code_sha256_prefix":"4772352de75c28c7","entry":"train","repo":"fabsig/GPBoost","repo_kind":"found_in_text","path":"python-package/gpboost/engine.py","file_url":"https://github.com/fabsig/GPBoost/blob/HEAD/python-package/gpboost/engine.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"4772352de75c28c7"}}]},"arxiv_metadata":{"licence":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)","fields":["title","abstract","authors","date"],"primary_category":"cs.LG","source":"arxiv_2026.jsonl"},"syntology_extracted_results":null}