{"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/decision-trees-for-decision-making-under-the","title":"Decision Trees for Decision-Making under the Predict-then-Optimize Framework","arxiv_id":"2003.00360","date":"2020-02-29","proceeding":"ICML 2020 1","authors":["Adam N. Elmachtoub","Jason Cheuk Nam Liang","Ryan McNellis"],"abstract":"We consider the use of decision trees for decision-making problems under the predict-then-optimize framework. That is, we would like to first use a decision tree to predict unknown input parameters of an optimization problem, and then make decisions by solving the optimization problem using the predicted parameters. A natural loss function in this framework is to measure the suboptimality of the decisions induced by the predicted input parameters, as opposed to measuring loss using input parameter prediction error. This natural loss function is known in the literature as the Smart Predict-then-Optimize (SPO) loss, and we propose a tractable methodology called SPO Trees (SPOTs) for training decision trees under this loss. SPOTs benefit from the interpretability of decision trees, providing an interpretable segmentation of contextual features into groups with distinct optimal solutions to the optimization problem of interest. We conduct several numerical experiments on synthetic and real data including the prediction of travel times for shortest path problems and predicting click probabilities for news article recommendation. We demonstrate on these datasets that SPOTs simultaneously provide higher quality decisions and significantly lower model complexity than other machine learning approaches (e.g., CART) trained to minimize prediction error.","url_abs":"https://arxiv.org/abs/2003.00360v2","url_pdf":"https://arxiv.org/pdf/2003.00360v2.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":"decision-trees-for-decision-making-under-the","repo_url":"https://github.com/rtm2130/SPOTree","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"none","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"decision-making","task_name":"Decision Making"},{"task_slug":"parameter-prediction","task_name":"Parameter Prediction"},{"task_slug":"prediction","task_name":"Prediction"}],"methods":[{"method_slug":"interpretability","method_name":"Interpretability"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"syntology_url":null,"atlas_url":"https://app.syntology.ai/?focus=2003.00360","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2003.00360"}},"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/rtm2130/SPOTree","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"unverified":6},"by_repo_kind":{"official":{"samples":6,"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":"d14368a6ac160e31","entry":"are_Ys_diverse","repo":"rtm2130/SPOTree","repo_kind":"official","path":"Algorithms/leaf_model.py","file_url":"https://github.com/rtm2130/SPOTree/blob/HEAD/Algorithms/leaf_model.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":"d14368a6ac160e31"}},{"code_sha256_prefix":"f02da1686128d4ea","entry":"fast_avg","repo":"rtm2130/SPOTree","repo_kind":"official","path":"Algorithms/mtp.py","file_url":"https://github.com/rtm2130/SPOTree/blob/HEAD/Algorithms/mtp.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":"f02da1686128d4ea"}},{"code_sha256_prefix":"b7a6eb966a81f15d","entry":"get_sub","repo":"rtm2130/SPOTree","repo_kind":"official","path":"Algorithms/leaf_model.py","file_url":"https://github.com/rtm2130/SPOTree/blob/HEAD/Algorithms/leaf_model.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":"b7a6eb966a81f15d"}},{"code_sha256_prefix":"10c729cf3c596899","entry":"truncate_train_x","repo":"rtm2130/SPOTree","repo_kind":"official","path":"Algorithms/SPO2CART.py","file_url":"https://github.com/rtm2130/SPOTree/blob/HEAD/Algorithms/SPO2CART.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":"10c729cf3c596899"}},{"code_sha256_prefix":"fdaf0bd43e914908","entry":"which","repo":"rtm2130/SPOTree","repo_kind":"official","path":"Algorithms/mtp.py","file_url":"https://github.com/rtm2130/SPOTree/blob/HEAD/Algorithms/mtp.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":"fdaf0bd43e914908"}},{"code_sha256_prefix":"e0e413f3ac375123","entry":"which_child_multi","repo":"rtm2130/SPOTree","repo_kind":"official","path":"Algorithms/mtp.py","file_url":"https://github.com/rtm2130/SPOTree/blob/HEAD/Algorithms/mtp.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":"e0e413f3ac375123"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}