{"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/invariant-collaborative-filtering-to","title":"Invariant Collaborative Filtering to Popularity Distribution Shift","arxiv_id":"2302.05328","date":"2023-02-10","proceeding":null,"authors":["An Zhang","Jingnan Zheng","Xiang Wang","Yancheng Yuan","Tat-Seng Chua"],"abstract":"Collaborative Filtering (CF) models, despite their great success, suffer from severe performance drops due to popularity distribution shifts, where these changes are ubiquitous and inevitable in real-world scenarios. Unfortunately, most leading popularity debiasing strategies, rather than tackling the vulnerability of CF models to varying popularity distributions, require prior knowledge of the test distribution to identify the degree of bias and further learn the popularity-entangled representations to mitigate the bias. Consequently, these models result in significant performance benefits in the target test set, while dramatically deviating the recommendation from users' true interests without knowing the popularity distribution in advance. In this work, we propose a novel learning framework, Invariant Collaborative Filtering (InvCF), to discover disentangled representations that faithfully reveal the latent preference and popularity semantics without making any assumption about the popularity distribution. At its core is the distillation of unbiased preference representations (i.e., user preference on item property), which are invariant to the change of popularity semantics, while filtering out the popularity feature that is unstable or outdated. Extensive experiments on five benchmark datasets and four evaluation settings (i.e., synthetic long-tail, unbiased, temporal split, and out-of-distribution evaluations) demonstrate that InvCF outperforms the state-of-the-art baselines in terms of popularity generalization ability on real recommendations. Visualization studies shed light on the advantages of InvCF for disentangled representation learning. Our codes are available at https://github.com/anzhang314/InvCF.","url_abs":"https://arxiv.org/abs/2302.05328v3","url_pdf":"https://arxiv.org/pdf/2302.05328v3.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":"invariant-collaborative-filtering-to","repo_url":"https://github.com/anzhang314/invcf","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"collaborative-filtering","task_name":"Collaborative Filtering"},{"task_slug":"representation-learning","task_name":"Representation Learning"}],"methods":[{"method_slug":"test","method_name":"Test"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2302.05328","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2302.05328"}},"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/anzhang314/invcf","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"ran":2,"ran_draft_wrong":3,"unverified":3},"by_repo_kind":{"official":{"samples":8,"ran":5,"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":"029327c4f6fb55d0","entry":"helper_load","repo":"anzhang314/invcf","repo_kind":"official","path":"data.py","file_url":"https://github.com/anzhang314/invcf/blob/HEAD/data.py","link_basis":"harvester_set","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":"029327c4f6fb55d0"}},{"code_sha256_prefix":"f1fe817c737b6fed","entry":"helper_load_train","repo":"anzhang314/invcf","repo_kind":"official","path":"data.py","file_url":"https://github.com/anzhang314/invcf/blob/HEAD/data.py","link_basis":"harvester_set","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":"f1fe817c737b6fed"}},{"code_sha256_prefix":"7513663e5a710c16","entry":"merge_user_list","repo":"anzhang314/invcf","repo_kind":"official","path":"main_synthetic.py","file_url":"https://github.com/anzhang314/invcf/blob/HEAD/main_synthetic.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"7513663e5a710c16"}},{"code_sha256_prefix":"63bb511f56afa437","entry":"merge_user_list_no_dup","repo":"anzhang314/invcf","repo_kind":"official","path":"main_synthetic.py","file_url":"https://github.com/anzhang314/invcf/blob/HEAD/main_synthetic.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"63bb511f56afa437"}},{"code_sha256_prefix":"380a5cea5655f733","entry":"save_checkpoint","repo":"anzhang314/invcf","repo_kind":"official","path":"main_synthetic.py","file_url":"https://github.com/anzhang314/invcf/blob/HEAD/main_synthetic.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"380a5cea5655f733"}},{"code_sha256_prefix":"92cd1d2e73d2a51b","entry":"clean","repo":"anzhang314/invcf","repo_kind":"official","path":"local_compile_setup.py","file_url":"https://github.com/anzhang314/invcf/blob/HEAD/local_compile_setup.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":"92cd1d2e73d2a51b"}},{"code_sha256_prefix":"b870a0c9899a893a","entry":"get_extensions","repo":"anzhang314/invcf","repo_kind":"official","path":"local_compile_setup.py","file_url":"https://github.com/anzhang314/invcf/blob/HEAD/local_compile_setup.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":"b870a0c9899a893a"}},{"code_sha256_prefix":"4443f98d2547d286","entry":"get_include_dirs","repo":"anzhang314/invcf","repo_kind":"official","path":"local_compile_setup.py","file_url":"https://github.com/anzhang314/invcf/blob/HEAD/local_compile_setup.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":"4443f98d2547d286"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}