{"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/actionable-interpretability-through","title":"FOCUS: Flexible Optimizable Counterfactual Explanations for Tree Ensembles","arxiv_id":"1911.12199","date":"2019-11-27","proceeding":null,"authors":["Ana Lucic","Harrie Oosterhuis","Hinda Haned","Maarten de Rijke"],"abstract":"Model interpretability has become an important problem in machine learning (ML) due to the increased effect that algorithmic decisions have on humans. Counterfactual explanations can help users understand not only why ML models make certain decisions, but also how these decisions can be changed. We frame the problem of finding counterfactual explanations as a gradient-based optimization task and extend previous work that could only be applied to differentiable models. In order to accommodate non-differentiable models such as tree ensembles, we use probabilistic model approximations in the optimization framework. We introduce an approximation technique that is effective for finding counterfactual explanations for predictions of the original model and show that our counterfactual examples are significantly closer to the original instances than those produced by other methods specifically designed for tree ensembles.","url_abs":"https://arxiv.org/abs/1911.12199v4","url_pdf":"https://arxiv.org/pdf/1911.12199v4.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":"actionable-interpretability-through","repo_url":"https://github.com/a-lucic/focus","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"tf","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":null,"task_name":"counterfactual"}],"methods":[{"method_slug":"interpretability","method_name":"Interpretability"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":"https://syntology.ai/paper/1911.12199","atlas_url":"https://app.syntology.ai/?focus=1911.12199","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"1911.12199"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-25T09:33:49+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/a-lucic/focus","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"unverified":8},"by_repo_kind":{"official":{"samples":8,"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":"268b8e02cea293a9","entry":"filter_hinge_loss","repo":"a-lucic/focus","repo_kind":"official","path":"src/utils.py","file_url":"https://github.com/a-lucic/focus/blob/HEAD/src/utils.py","link_basis":"first_harvest_node","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":"268b8e02cea293a9"}},{"code_sha256_prefix":"e44c92a22d6734f7","entry":"get_exact_classification_tree","repo":"a-lucic/focus","repo_kind":"official","path":"src/trees.py","file_url":"https://github.com/a-lucic/focus/blob/HEAD/src/trees.py","link_basis":"first_harvest_node","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":"e44c92a22d6734f7"}},{"code_sha256_prefix":"b461486afd1165ba","entry":"get_indices","repo":"a-lucic/focus","repo_kind":"official","path":"src/dataset.py","file_url":"https://github.com/a-lucic/focus/blob/HEAD/src/dataset.py","link_basis":"first_harvest_node","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":"b461486afd1165ba"}},{"code_sha256_prefix":"630006c3a2ea1901","entry":"get_prob_classification_forest","repo":"a-lucic/focus","repo_kind":"official","path":"src/trees.py","file_url":"https://github.com/a-lucic/focus/blob/HEAD/src/trees.py","link_basis":"first_harvest_node","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":"630006c3a2ea1901"}},{"code_sha256_prefix":"35dea20c96c023b6","entry":"get_prob_classification_tree","repo":"a-lucic/focus","repo_kind":"official","path":"src/trees.py","file_url":"https://github.com/a-lucic/focus/blob/HEAD/src/trees.py","link_basis":"first_harvest_node","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":"35dea20c96c023b6"}},{"code_sha256_prefix":"45d10176e075b7fb","entry":"read_tsv_file","repo":"a-lucic/focus","repo_kind":"official","path":"src/dataset.py","file_url":"https://github.com/a-lucic/focus/blob/HEAD/src/dataset.py","link_basis":"first_harvest_node","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":"45d10176e075b7fb"}},{"code_sha256_prefix":"7d450d769c3817b7","entry":"safe_euclidean","repo":"a-lucic/focus","repo_kind":"official","path":"src/utils.py","file_url":"https://github.com/a-lucic/focus/blob/HEAD/src/utils.py","link_basis":"first_harvest_node","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":"7d450d769c3817b7"}},{"code_sha256_prefix":"d8f81cd1bb22f7a0","entry":"true_euclidean","repo":"a-lucic/focus","repo_kind":"official","path":"src/utils.py","file_url":"https://github.com/a-lucic/focus/blob/HEAD/src/utils.py","link_basis":"first_harvest_node","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":"d8f81cd1bb22f7a0"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}