{"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/estimating-the-contamination-factor-s","title":"Estimating the Contamination Factor's Distribution in Unsupervised Anomaly Detection","arxiv_id":"2210.10487","date":"2022-10-19","proceeding":null,"authors":["Lorenzo Perini","Paul Buerkner","Arto Klami"],"abstract":"Anomaly detection methods identify examples that do not follow the expected behaviour, typically in an unsupervised fashion, by assigning real-valued anomaly scores to the examples based on various heuristics. These scores need to be transformed into actual predictions by thresholding, so that the proportion of examples marked as anomalies equals the expected proportion of anomalies, called contamination factor. Unfortunately, there are no good methods for estimating the contamination factor itself. We address this need from a Bayesian perspective, introducing a method for estimating the posterior distribution of the contamination factor of a given unlabeled dataset. We leverage on outputs of several anomaly detectors as a representation that already captures the basic notion of anomalousness and estimate the contamination using a specific mixture formulation. Empirically on 22 datasets, we show that the estimated distribution is well-calibrated and that setting the threshold using the posterior mean improves the anomaly detectors' performance over several alternative methods. All code is publicly available for full reproducibility.","url_abs":"https://arxiv.org/abs/2210.10487v2","url_pdf":"https://arxiv.org/pdf/2210.10487v2.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":"estimating-the-contamination-factor-s","repo_url":"https://github.com/kulikdm/pythresh","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"BSD-2-Clause"}},{"paper_slug":"estimating-the-contamination-factor-s","repo_url":"https://github.com/lorenzo-perini/gammagmm","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"tf","reach":null},{"paper_slug":"estimating-the-contamination-factor-s","repo_url":"https://github.com/lorenzo-perini/ballad","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"none","reach":{"status":"ok","spdx":"Apache-2.0"}}],"tasks":[{"task_slug":"anomaly-detection","task_name":"Anomaly Detection"},{"task_slug":"unsupervised-anomaly-detection","task_name":"Unsupervised Anomaly Detection"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":null,"atlas_url":"https://app.syntology.ai/?focus=2210.10487","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2210.10487"}},"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/lorenzo-perini/gammagmm","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/kulikdm/pythresh","reach":{"status":"ok","spdx":"BSD-2-Clause"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/lorenzo-perini/ballad","reach":{"status":"ok","spdx":"Apache-2.0"}}],"summary":{"unverified":4},"by_repo_kind":{"official":{"samples":2,"ran":0,"repositories":1},"listed":{"samples":2,"ran":0,"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":"96da6813160c3c32","entry":"add_validation_labels","repo":"lorenzo-perini/ballad","repo_kind":"listed","path":"BALLAD.py","file_url":"https://github.com/lorenzo-perini/ballad/blob/HEAD/BALLAD.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"96da6813160c3c32"}},{"code_sha256_prefix":"0c8de9aa0f150604","entry":"find_delta_tau","repo":"lorenzo-perini/gammagmm","repo_kind":"official","path":"gammaGMM.py","file_url":"https://github.com/lorenzo-perini/gammagmm/blob/HEAD/gammaGMM.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"0c8de9aa0f150604"}},{"code_sha256_prefix":"a0db0b73dbbaa962","entry":"load_dataset","repo":"lorenzo-perini/ballad","repo_kind":"listed","path":"BALLAD.py","file_url":"https://github.com/lorenzo-perini/ballad/blob/HEAD/BALLAD.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"a0db0b73dbbaa962"}},{"code_sha256_prefix":"27cde4ebd11b29ba","entry":"order_components","repo":"lorenzo-perini/gammagmm","repo_kind":"official","path":"gammaGMM.py","file_url":"https://github.com/lorenzo-perini/gammagmm/blob/HEAD/gammaGMM.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"27cde4ebd11b29ba"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}