{"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/fair-clustering-through-fairlets","title":"Fair Clustering Through Fairlets","arxiv_id":"1802.05733","date":"2018-02-15","proceeding":"NeurIPS 2017 12","authors":["Flavio Chierichetti","Ravi Kumar","Silvio Lattanzi","Sergei Vassilvitskii"],"abstract":"We study the question of fair clustering under the {\\em disparate impact}\ndoctrine, where each protected class must have approximately equal\nrepresentation in every cluster. We formulate the fair clustering problem under\nboth the $k$-center and the $k$-median objectives, and show that even with two\nprotected classes the problem is challenging, as the optimum solution can\nviolate common conventions---for instance a point may no longer be assigned to\nits nearest cluster center! En route we introduce the concept of fairlets,\nwhich are minimal sets that satisfy fair representation while approximately\npreserving the clustering objective. We show that any fair clustering problem\ncan be decomposed into first finding good fairlets, and then using existing\nmachinery for traditional clustering algorithms. While finding good fairlets\ncan be NP-hard, we proceed to obtain efficient approximation algorithms based\non minimum cost flow. We empirically quantify the value of fair clustering on\nreal-world datasets with sensitive attributes.","url_abs":"http://arxiv.org/abs/1802.05733v1","url_pdf":"http://arxiv.org/pdf/1802.05733v1.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":"fair-clustering-through-fairlets","repo_url":"https://github.com/talwagner/fair_clustering","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"none","reach":null},{"paper_slug":"fair-clustering-through-fairlets","repo_url":"https://github.com/guptakhil12/fair-clustering-fairlets","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":0,"framework":"none","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"clustering","task_name":"Clustering"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=1802.05733","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"1802.05733"}},"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/talwagner/fair_clustering","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/guptakhil12/fair-clustering-fairlets","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"ran_violates":1,"unverified":2},"by_repo_kind":{"listed":{"samples":3,"ran":1,"repositories":2}},"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":"4abfbfe28c107062","entry":"balanced","repo":"talwagner/fair_clustering","repo_kind":"listed","path":"fairtree.py","file_url":"https://github.com/talwagner/fair_clustering/blob/HEAD/fairtree.py","link_basis":"first_harvest_node","language":"python","status":"ran_violates","verification_level":1,"contract_check":"VIOLATES","metamorphic_tier":"deterministic","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"4abfbfe28c107062"}},{"code_sha256_prefix":"97877d39cec32092","entry":"balance_calculation","repo":"guptakhil12/fair-clustering-fairlets","repo_kind":"listed","path":"utils.py","file_url":"https://github.com/guptakhil12/fair-clustering-fairlets/blob/HEAD/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":"97877d39cec32092"}},{"code_sha256_prefix":"7512c7ade27d3fab","entry":"distance","repo":"guptakhil12/fair-clustering-fairlets","repo_kind":"listed","path":"utils.py","file_url":"https://github.com/guptakhil12/fair-clustering-fairlets/blob/HEAD/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":"7512c7ade27d3fab"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}