{"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/calibrated-one-class-classification-for","title":"Calibrated One-class Classification for Unsupervised Time Series Anomaly Detection","arxiv_id":"2207.12201","date":"2022-07-25","proceeding":null,"authors":["Hongzuo Xu","Yijie Wang","Songlei Jian","Qing Liao","Yongjun Wang","Guansong Pang"],"abstract":"Time series anomaly detection is instrumental in maintaining system availability in various domains. Current work in this research line mainly focuses on learning data normality deeply and comprehensively by devising advanced neural network structures and new reconstruction/prediction learning objectives. However, their one-class learning process can be misled by latent anomalies in training data (i.e., anomaly contamination) under the unsupervised paradigm. Their learning process also lacks knowledge about the anomalies. Consequently, they often learn a biased, inaccurate normality boundary. To tackle these problems, this paper proposes calibrated one-class classification for anomaly detection, realizing contamination-tolerant, anomaly-informed learning of data normality via uncertainty modeling-based calibration and native anomaly-based calibration. Specifically, our approach adaptively penalizes uncertain predictions to restrain irregular samples in anomaly contamination during optimization, while simultaneously encouraging confident predictions on regular samples to ensure effective normality learning. This largely alleviates the negative impact of anomaly contamination. Our approach also creates native anomaly examples via perturbation to simulate time series abnormal behaviors. Through discriminating these dummy anomalies, our one-class learning is further calibrated to form a more precise normality boundary. Extensive experiments on ten real-world datasets show that our model achieves substantial improvement over sixteen state-of-the-art contenders.","url_abs":"https://arxiv.org/abs/2207.12201v2","url_pdf":"https://arxiv.org/pdf/2207.12201v2.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":"calibrated-one-class-classification-for","repo_url":"https://github.com/xuhongzuo/couta","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"Apache-2.0"}}],"tasks":[{"task_slug":"anomaly-detection","task_name":"Anomaly Detection"},{"task_slug":"one-class-classification","task_name":"One-Class Classification"},{"task_slug":"one-class-classifier","task_name":"One-class classifier"},{"task_slug":"time-series-1","task_name":"Time Series"},{"task_slug":"time-series","task_name":"Time Series Analysis"},{"task_slug":"time-series-anomaly-detection","task_name":"Time Series Anomaly Detection"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2207.12201","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2207.12201"}},"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/xuhongzuo/couta","reach":{"status":"ok","spdx":"Apache-2.0"}}],"summary":{"unverified":14},"by_repo_kind":{"official":{"samples":14,"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":"5bfa4b4ceafb84c9","entry":"adjust_scores","repo":"xuhongzuo/couta","repo_kind":"official","path":"src/utils_eval.py","file_url":"https://github.com/xuhongzuo/couta/blob/HEAD/src/utils_eval.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":"5bfa4b4ceafb84c9"}},{"code_sha256_prefix":"1be0714f24c5f3db","entry":"cosine","repo":"xuhongzuo/couta","repo_kind":"official","path":"src/experiments/data_generator_collective_case.py","file_url":"https://github.com/xuhongzuo/couta/blob/HEAD/src/experiments/data_generator_collective_case.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":"1be0714f24c5f3db"}},{"code_sha256_prefix":"3f2b46c7dfce194f","entry":"create_batch_neg","repo":"xuhongzuo/couta","repo_kind":"official","path":"src/algorithms/couta_algo.py","file_url":"https://github.com/xuhongzuo/couta/blob/HEAD/src/algorithms/couta_algo.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":"3f2b46c7dfce194f"}},{"code_sha256_prefix":"d95b338432e5df83","entry":"data_standardize","repo":"xuhongzuo/couta","repo_kind":"official","path":"src/utils_general.py","file_url":"https://github.com/xuhongzuo/couta/blob/HEAD/src/utils_general.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":"d95b338432e5df83"}},{"code_sha256_prefix":"a69f0fe91418b83e","entry":"get_best_f1","repo":"xuhongzuo/couta","repo_kind":"official","path":"src/utils_eval.py","file_url":"https://github.com/xuhongzuo/couta/blob/HEAD/src/utils_eval.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":"a69f0fe91418b83e"}},{"code_sha256_prefix":"6695ea1de391d0cc","entry":"get_data_lst","repo":"xuhongzuo/couta","repo_kind":"official","path":"main_utils.py","file_url":"https://github.com/xuhongzuo/couta/blob/HEAD/main_utils.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":"6695ea1de391d0cc"}},{"code_sha256_prefix":"22c9707971cf2a58","entry":"get_logger","repo":"xuhongzuo/couta","repo_kind":"official","path":"main_utils.py","file_url":"https://github.com/xuhongzuo/couta/blob/HEAD/main_utils.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":"22c9707971cf2a58"}},{"code_sha256_prefix":"ad6de4f08952b158","entry":"get_metrics","repo":"xuhongzuo/couta","repo_kind":"official","path":"src/utils_eval.py","file_url":"https://github.com/xuhongzuo/couta/blob/HEAD/src/utils_eval.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":"ad6de4f08952b158"}},{"code_sha256_prefix":"0d6ed0e36e58f5e7","entry":"get_model_configs","repo":"xuhongzuo/couta","repo_kind":"official","path":"main_utils.py","file_url":"https://github.com/xuhongzuo/couta/blob/HEAD/main_utils.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":"0d6ed0e36e58f5e7"}},{"code_sha256_prefix":"f1e66a69ff07171c","entry":"get_sequences_data","repo":"xuhongzuo/couta","repo_kind":"official","path":"src/utils_general.py","file_url":"https://github.com/xuhongzuo/couta/blob/HEAD/src/utils_general.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":"f1e66a69ff07171c"}},{"code_sha256_prefix":"370f5ea00f912a03","entry":"get_sub_seqs","repo":"xuhongzuo/couta","repo_kind":"official","path":"src/algorithms/algorithm_utils.py","file_url":"https://github.com/xuhongzuo/couta/blob/HEAD/src/algorithms/algorithm_utils.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":"370f5ea00f912a03"}},{"code_sha256_prefix":"588a35c94648bbe1","entry":"minmax_norm","repo":"xuhongzuo/couta","repo_kind":"official","path":"src/utils_general.py","file_url":"https://github.com/xuhongzuo/couta/blob/HEAD/src/utils_general.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":"588a35c94648bbe1"}},{"code_sha256_prefix":"8561f20e4c8119f3","entry":"series_segmentation","repo":"xuhongzuo/couta","repo_kind":"official","path":"src/experiments/data_generator_collective_case.py","file_url":"https://github.com/xuhongzuo/couta/blob/HEAD/src/experiments/data_generator_collective_case.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":"8561f20e4c8119f3"}},{"code_sha256_prefix":"d67d19b30290c8e8","entry":"sine","repo":"xuhongzuo/couta","repo_kind":"official","path":"src/experiments/data_generator_collective_case.py","file_url":"https://github.com/xuhongzuo/couta/blob/HEAD/src/experiments/data_generator_collective_case.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":"d67d19b30290c8e8"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}