{"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/node-gam-neural-generalized-additive-model","title":"NODE-GAM: Neural Generalized Additive Model for Interpretable Deep Learning","arxiv_id":"2106.01613","date":"2021-06-03","proceeding":"ICLR 2022 4","authors":["Chun-Hao Chang","Rich Caruana","Anna Goldenberg"],"abstract":"Deployment of machine learning models in real high-risk settings (e.g. healthcare) often depends not only on the model's accuracy but also on its fairness, robustness, and interpretability. Generalized Additive Models (GAMs) are a class of interpretable models with a long history of use in these high-risk domains, but they lack desirable features of deep learning such as differentiability and scalability. In this work, we propose a neural GAM (NODE-GAM) and neural GA$^2$M (NODE-GA$^2$M) that scale well and perform better than other GAMs on large datasets, while remaining interpretable compared to other ensemble and deep learning models. We demonstrate that our models find interesting patterns in the data. Lastly, we show that we improve model accuracy via self-supervised pre-training, an improvement that is not possible for non-differentiable GAMs.","url_abs":"https://arxiv.org/abs/2106.01613v3","url_pdf":"https://arxiv.org/pdf/2106.01613v3.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":"node-gam-neural-generalized-additive-model","repo_url":"https://github.com/zzzace2000/nodegam","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":null},{"paper_slug":"node-gam-neural-generalized-additive-model","repo_url":"https://github.com/enouenj/sparse-interaction-additive-networks","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":null}],"tasks":[{"task_slug":"additive-models","task_name":"Additive models"},{"task_slug":"deep-learning","task_name":"Deep Learning"},{"task_slug":"fairness","task_name":"Fairness"},{"task_slug":"self-supervised-learning","task_name":"Self-Supervised Learning"}],"methods":[{"method_slug":"gam","method_name":"GAM"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2106.01613","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2106.01613"}},"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/zzzace2000/nodegam","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/enouenj/sparse-interaction-additive-networks","reach":null}],"summary":{"ran":7,"ran_draft_wrong":1,"ran_honours":1,"unverified":6},"by_repo_kind":{"official":{"samples":12,"ran":7,"repositories":1},"listed":{"samples":3,"ran":2,"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":3,"samples":[{"code_sha256_prefix":"b6ad3ad95af90645","entry":"Entmax15Function","repo":"zzzace2000/nodegam","repo_kind":"official","path":"nodegam/arch.py","file_url":"https://github.com/zzzace2000/nodegam/blob/HEAD/nodegam/arch.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"b6ad3ad95af90645"}},{"code_sha256_prefix":"c484ea17a487fd2a","entry":"FeedForwardDNN","repo":"enouenj/sparse-interaction-additive-networks","repo_kind":"listed","path":"src/sian/models/models.py","file_url":"https://github.com/enouenj/sparse-interaction-additive-networks/blob/HEAD/src/sian/models/models.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"c484ea17a487fd2a"}},{"code_sha256_prefix":"98280132e17d7ecb","entry":"GAM_ODST","repo":"zzzace2000/nodegam","repo_kind":"official","path":"nodegam/arch.py","file_url":"https://github.com/zzzace2000/nodegam/blob/HEAD/nodegam/arch.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"98280132e17d7ecb"}},{"code_sha256_prefix":"eda16069762b4af9","entry":"ModuleWithInit","repo":"zzzace2000/nodegam","repo_kind":"official","path":"nodegam/arch.py","file_url":"https://github.com/zzzace2000/nodegam/blob/HEAD/nodegam/arch.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"eda16069762b4af9"}},{"code_sha256_prefix":"c9033c4ad6b84b0c","entry":"ODST","repo":"zzzace2000/nodegam","repo_kind":"official","path":"nodegam/arch.py","file_url":"https://github.com/zzzace2000/nodegam/blob/HEAD/nodegam/arch.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"c9033c4ad6b84b0c"}},{"code_sha256_prefix":"f84da3894ffcc730","entry":"SmallModel","repo":"enouenj/sparse-interaction-additive-networks","repo_kind":"listed","path":"src/sian/models/models.py","file_url":"https://github.com/enouenj/sparse-interaction-additive-networks/blob/HEAD/src/sian/models/models.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"f84da3894ffcc730"}},{"code_sha256_prefix":"328250adf4274596","entry":"Timer","repo":"zzzace2000/nodegam","repo_kind":"official","path":"nodegam/arch.py","file_url":"https://github.com/zzzace2000/nodegam/blob/HEAD/nodegam/arch.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"328250adf4274596"}},{"code_sha256_prefix":"d5065b01c734ab2a","entry":"_make_ix_like","repo":"zzzace2000/nodegam","repo_kind":"official","path":"nodegam/arch.py","file_url":"https://github.com/zzzace2000/nodegam/blob/HEAD/nodegam/arch.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"d5065b01c734ab2a"}},{"code_sha256_prefix":"f43369bac5c86b96","entry":"check_numpy","repo":"zzzace2000/nodegam","repo_kind":"official","path":"nodegam/arch.py","file_url":"https://github.com/zzzace2000/nodegam/blob/HEAD/nodegam/arch.py","link_basis":"first_harvest_node","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"f43369bac5c86b96"}},{"code_sha256_prefix":"b507292035444fc2","entry":"Blocksparse_Deep_Relu_GAM","repo":"enouenj/sparse-interaction-additive-networks","repo_kind":"listed","path":"src/sian/models/models.py","file_url":"https://github.com/enouenj/sparse-interaction-additive-networks/blob/HEAD/src/sian/models/models.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"b507292035444fc2"}},{"code_sha256_prefix":"36b224091f68a938","entry":"Entmoid15","repo":"zzzace2000/nodegam","repo_kind":"official","path":"nodegam/arch.py","file_url":"https://github.com/zzzace2000/nodegam/blob/HEAD/nodegam/arch.py","link_basis":"first_harvest_node","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":"36b224091f68a938"}},{"code_sha256_prefix":"dc7e97327b2af44f","entry":"GAMAdditiveMixin","repo":"zzzace2000/nodegam","repo_kind":"official","path":"nodegam/arch.py","file_url":"https://github.com/zzzace2000/nodegam/blob/HEAD/nodegam/arch.py","link_basis":"first_harvest_node","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":"dc7e97327b2af44f"}},{"code_sha256_prefix":"4a3d4c115bd3fa46","entry":"GAMBlock","repo":"zzzace2000/nodegam","repo_kind":"official","path":"nodegam/arch.py","file_url":"https://github.com/zzzace2000/nodegam/blob/HEAD/nodegam/arch.py","link_basis":"first_harvest_node","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":"4a3d4c115bd3fa46"}},{"code_sha256_prefix":"c1c7c834a428ca47","entry":"ODSTBlock","repo":"zzzace2000/nodegam","repo_kind":"official","path":"nodegam/arch.py","file_url":"https://github.com/zzzace2000/nodegam/blob/HEAD/nodegam/arch.py","link_basis":"first_harvest_node","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":"c1c7c834a428ca47"}},{"code_sha256_prefix":"bc0337a39644d30e","entry":"process_in_chunks","repo":"zzzace2000/nodegam","repo_kind":"official","path":"nodegam/arch.py","file_url":"https://github.com/zzzace2000/nodegam/blob/HEAD/nodegam/arch.py","link_basis":"first_harvest_node","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":"bc0337a39644d30e"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}