{"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-streaming-principal-component-analysis-1","title":"Fair Streaming Principal Component Analysis: Statistical and Algorithmic Viewpoint","arxiv_id":"2310.18593","date":"2023-10-28","proceeding":"NeurIPS 2023 11","authors":["Junghyun Lee","Hanseul Cho","Se-Young Yun","Chulhee Yun"],"abstract":"Fair Principal Component Analysis (PCA) is a problem setting where we aim to perform PCA while making the resulting representation fair in that the projected distributions, conditional on the sensitive attributes, match one another. However, existing approaches to fair PCA have two main problems: theoretically, there has been no statistical foundation of fair PCA in terms of learnability; practically, limited memory prevents us from using existing approaches, as they explicitly rely on full access to the entire data. On the theoretical side, we rigorously formulate fair PCA using a new notion called \\emph{probably approximately fair and optimal} (PAFO) learnability. On the practical side, motivated by recent advances in streaming algorithms for addressing memory limitation, we propose a new setting called \\emph{fair streaming PCA} along with a memory-efficient algorithm, fair noisy power method (FNPM). We then provide its {\\it statistical} guarantee in terms of PAFO-learnability, which is the first of its kind in fair PCA literature. Lastly, we verify the efficacy and memory efficiency of our algorithm on real-world datasets.","url_abs":"https://arxiv.org/abs/2310.18593v1","url_pdf":"https://arxiv.org/pdf/2310.18593v1.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-streaming-principal-component-analysis-1","repo_url":"https://github.com/hanseuljo/fair-streaming-pca","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"jax","reach":{"status":"ok"}}],"tasks":[],"methods":[{"method_slug":"pca","method_name":"PCA"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2310.18593","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2310.18593"}},"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":"deterministic:regex_extraction","url":"https://github.com/HanseulJo/fair-streaming-pca","reach":{"status":"ok"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/hanseuljo/fair-streaming-pca","reach":{"status":"ok"}}],"summary":{"ran":3,"ran_honours":3,"ran_fixture":2,"unverified":1},"by_repo_kind":{"official":{"samples":9,"ran":8,"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":9,"samples":[{"code_sha256_prefix":"2465949524b1a154","entry":"Buffer","repo":"hanseuljo/fair-streaming-pca","repo_kind":"official","path":"synthetic_fair_streaming_pca/fairPCA.py","file_url":"https://github.com/hanseuljo/fair-streaming-pca/blob/HEAD/synthetic_fair_streaming_pca/fairPCA.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"2465949524b1a154"}},{"code_sha256_prefix":"d3f3d6b53145d83b","entry":"StreamingFairBlockPCA","repo":"hanseuljo/fair-streaming-pca","repo_kind":"official","path":"synthetic_fair_streaming_pca/fairPCA.py","file_url":"https://github.com/hanseuljo/fair-streaming-pca/blob/HEAD/synthetic_fair_streaming_pca/fairPCA.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"d3f3d6b53145d83b"}},{"code_sha256_prefix":"339a0a3420250ea3","entry":"fairness_metric_neural_network","repo":"HanseulJo/fair-streaming-pca","repo_kind":"official","path":"downstream_tasks_fair_streaming_pca/experiment_as_in_Lee_real_data/MLP_analysis.py","file_url":"https://github.com/HanseulJo/fair-streaming-pca/blob/HEAD/downstream_tasks_fair_streaming_pca/experiment_as_in_Lee_real_data/MLP_analysis.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"339a0a3420250ea3"}},{"code_sha256_prefix":"98ed1e24a85a9833","entry":"grassmanian_distance","repo":"hanseuljo/fair-streaming-pca","repo_kind":"official","path":"synthetic_fair_streaming_pca/fairPCA.py","file_url":"https://github.com/hanseuljo/fair-streaming-pca/blob/HEAD/synthetic_fair_streaming_pca/fairPCA.py","link_basis":"first_harvest_node","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"98ed1e24a85a9833"}},{"code_sha256_prefix":"87f0dae0cbce984b","entry":"sin","repo":"hanseuljo/fair-streaming-pca","repo_kind":"official","path":"synthetic_fair_streaming_pca/fairPCA.py","file_url":"https://github.com/hanseuljo/fair-streaming-pca/blob/HEAD/synthetic_fair_streaming_pca/fairPCA.py","link_basis":"first_harvest_node","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"87f0dae0cbce984b"}},{"code_sha256_prefix":"db62c8228324a1ac","entry":"sin_v2","repo":"hanseuljo/fair-streaming-pca","repo_kind":"official","path":"synthetic_fair_streaming_pca/fairPCA.py","file_url":"https://github.com/hanseuljo/fair-streaming-pca/blob/HEAD/synthetic_fair_streaming_pca/fairPCA.py","link_basis":"first_harvest_node","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"db62c8228324a1ac"}},{"code_sha256_prefix":"fbf4038d91eb4ea0","entry":"standard_PCA","repo":"HanseulJo/fair-streaming-pca","repo_kind":"official","path":"downstream_tasks_fair_streaming_pca/src/fair_pca/fair_PCA.py","file_url":"https://github.com/HanseulJo/fair-streaming-pca/blob/HEAD/downstream_tasks_fair_streaming_pca/src/fair_pca/fair_PCA.py","link_basis":"plan_row","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"fbf4038d91eb4ea0"}},{"code_sha256_prefix":"3a7bda4453faf9bc","entry":"standard_kernel_PCA","repo":"HanseulJo/fair-streaming-pca","repo_kind":"official","path":"downstream_tasks_fair_streaming_pca/src/fair_pca/fair_PCA.py","file_url":"https://github.com/HanseulJo/fair-streaming-pca/blob/HEAD/downstream_tasks_fair_streaming_pca/src/fair_pca/fair_PCA.py","link_basis":"plan_row","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"3a7bda4453faf9bc"}},{"code_sha256_prefix":"a694d5b207ea28de","entry":"apply_fair_PCA_to_dataset","repo":"HanseulJo/fair-streaming-pca","repo_kind":"official","path":"downstream_tasks_fair_streaming_pca/src/fair_pca/fair_PCA.py","file_url":"https://github.com/HanseulJo/fair-streaming-pca/blob/HEAD/downstream_tasks_fair_streaming_pca/src/fair_pca/fair_PCA.py","link_basis":"plan_row","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":"a694d5b207ea28de"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}