From 23ad6d75c00f703cd1461666dd52fc1f9ac1be09 Mon Sep 17 00:00:00 2001 From: pat-alt <altmeyerpat@gmail.com> Date: Fri, 21 Apr 2023 07:37:26 +0200 Subject: [PATCH] ECCCo --- CITATION.bib | 6 +- Project.toml | 2 +- README.md | 4 +- .../dev/proposal/execute-results/html.json | 2 +- .../notebooks/intro/execute-results/html.json | 2 +- .../proposal/execute-results/html.json | 2 +- .../synthetic/execute-results/html.json | 2 +- docs/notebooks/intro.html | 16 +-- docs/notebooks/proposal.html | 2 +- docs/notebooks/synthetic.html | 12 +- docs/search.json | 8 +- notebooks/Manifest.toml | 2 +- notebooks/Project.toml | 2 +- notebooks/intro.qmd | 20 ++-- notebooks/mnist.qmd | 111 ++++++++++++++++-- notebooks/proposal.qmd | 2 +- notebooks/setup.jl | 4 +- notebooks/synthetic.qmd | 30 ++--- paper/paper.pdf | Bin 303536 -> 303533 bytes paper/paper.tex | 6 +- src/{ECCCE.jl => ECCCo.jl} | 4 +- src/generator.jl | 18 +-- src/penalties.jl | 2 +- test/runtests.jl | 4 +- www/cce_mnist.png | Bin 22069 -> 23455 bytes 25 files changed, 174 insertions(+), 89 deletions(-) rename src/{ECCCE.jl => ECCCo.jl} (71%) diff --git a/CITATION.bib b/CITATION.bib index 752944a7..860cec36 100644 --- a/CITATION.bib +++ b/CITATION.bib @@ -1,7 +1,7 @@ -@misc{ECCCE.jl, +@misc{ECCCo.jl, author = {Patrick Altmeyer}, - title = {ECCCE.jl}, - url = {https://github.com/pat-alt/ECCCE.jl}, + title = {ECCCo.jl}, + url = {https://github.com/pat-alt/ECCCo.jl}, version = {v0.1.0}, year = {2023}, month = {2} diff --git a/Project.toml b/Project.toml index 647598d4..0d31db08 100644 --- a/Project.toml +++ b/Project.toml @@ -1,4 +1,4 @@ -name = "ECCCE" +name = "ECCCo" uuid = "0232c203-4013-4b0d-ad96-43e3e11ac3bf" authors = ["Patrick Altmeyer"] version = "0.1.0" diff --git a/README.md b/README.md index c599843e..dff821d3 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ -# ECCCE +# ECCCo -[](https://github.com/pat-alt/ECCCE.jl/actions/workflows/CI.yml?query=branch%3Amain) +[](https://github.com/pat-alt/ECCCo.jl/actions/workflows/CI.yml?query=branch%3Amain) diff --git a/_freeze/dev/proposal/execute-results/html.json b/_freeze/dev/proposal/execute-results/html.json index 195e16d6..2dc9aae2 100644 --- a/_freeze/dev/proposal/execute-results/html.json +++ b/_freeze/dev/proposal/execute-results/html.json @@ -1,7 +1,7 @@ { "hash": "d7b4f9bf7f4bff7ce610fc8be4dcfb8b", "result": { - "markdown": "---\ntitle: High-Fidelity Counterfactual Explanations through Conformal Prediction\nsubtitle: Research Proposal\nabstract: |\n We propose Conformal Counterfactual Explanations: an effortless and rigorous way to produce realistic and faithful Counterfactual Explanations using Conformal Prediction. To address the need for realistic counterfactuals, existing work has primarily relied on separate generative models to learn the data-generating process. While this is an effective way to produce plausible and model-agnostic counterfactual explanations, it not only introduces a significant engineering overhead but also reallocates the task of creating realistic model explanations from the model itself to the generative model. Recent work has shown that there is no need for any of this when working with probabilistic models that explicitly quantify their own uncertainty. Unfortunately, most models used in practice still do not fulfil that basic requirement, in which case we would like to have a way to quantify predictive uncertainty in a post-hoc fashion.\n---\n\n\n\n## Motivation\n\nCounterfactual Explanations are a powerful, flexible and intuitive way to not only explain black-box models but also enable affected individuals to challenge them through the means of Algorithmic Recourse. \n\n### Counterfactual Explanations or Adversarial Examples?\n\nMost state-of-the-art approaches to generating Counterfactual Explanations (CE) rely on gradient descent in the feature space. The key idea is to perturb inputs $x\\in\\mathcal{X}$ into a black-box model $f: \\mathcal{X} \\mapsto \\mathcal{Y}$ in order to change the model output $f(x)$ to some pre-specified target value $t\\in\\mathcal{Y}$. Formally, this boils down to defining some loss function $\\ell(f(x),t)$ and taking gradient steps in the minimizing direction. The so-generated counterfactuals are considered valid as soon as the predicted label matches the target label. A stripped-down counterfactual explanation is therefore little different from an adversarial example. In @fig-adv, for example, generic counterfactual search as in @wachter2017counterfactual has been applied to MNIST data.\n\n\n\n\n\n{#fig-adv}\n\nThe crucial difference between adversarial examples and counterfactuals is one of intent. While adversarial examples are typically intended to go unnoticed, counterfactuals in the context of Explainable AI are generally sought to be \"plausible\", \"realistic\" or \"feasible\". To fulfil this latter goal, researchers have come up with a myriad of ways. @joshi2019realistic were among the first to suggest that instead of searching counterfactuals in the feature space, we can instead traverse a latent embedding learned by a surrogate generative model. Similarly, @poyiadzi2020face use density ... Finally, @karimi2021algorithmic argues that counterfactuals should comply with the causal model that generates them [CHECK IF WE CAN PHASE THIS LIKE THIS]. Other related approaches include ... All of these different approaches have a common goal: they aim to ensure that the generated counterfactuals comply with the (learned) data-generating process (DGB). \n\n::: {#def-plausible}\n\n## Plausible Counterfactuals\n\nFormally, if $x \\sim \\mathcal{X}$ and for the corresponding counterfactual we have $x^{\\prime}\\sim\\mathcal{X}^{\\prime}$, then for $x^{\\prime}$ to be considered a plausible counterfactual, we need: $\\mathcal{X} \\approxeq \\mathcal{X}^{\\prime}$.\n\n:::\n\nIn the context of Algorithmic Recourse, it makes sense to strive for plausible counterfactuals, since anything else would essentially require individuals to move to out-of-distribution states. But it is worth noting that our ambition to meet this goal, may have implications on our ability to faithfully explain the behaviour of the underlying black-box model (arguably our principal goal). By essentially decoupling the task of learning plausible representations of the data from the model itself, we open ourselves up to vulnerabilities. Using a separate generative model to learn $\\mathcal{X}$, for example, has very serious implications for the generated counterfactuals. @fig-latent compares the results of applying REVISE [@joshi2019realistic] to MNIST data using two different Variational Auto-Encoders: while the counterfactual generated using an expressive (strong) VAE is compelling, the result relying on a less expressive (weak) VAE is not even valid. In this latter case, the decoder step of the VAE fails to yield values in $\\mathcal{X}$ and hence the counterfactual search in the learned latent space is doomed. \n\n{#fig-latent}\n\n> Here it would be nice to have another example where we poison the data going into the generative model to hide biases present in the data (e.g. Boston housing).\n\n- Latent can be manipulated: \n - train biased model\n - train VAE with biased variable removed/attacked (use Boston housing dataset)\n - hypothesis: will generate bias-free explanations\n\n### From Plausible to High-Fidelity Counterfactuals {#sec-fidelity}\n\nIn light of the findings, we propose to generally avoid using surrogate models to learn $\\mathcal{X}$ in the context of Counterfactual Explanations.\n\n::: {#prp-surrogate}\n\n## Avoid Surrogates\n\nSince we are in the business of explaining a black-box model, the task of learning realistic representations of the data should not be reallocated from the model itself to some surrogate model.\n\n:::\n\nIn cases where the use of surrogate models cannot be avoided, we propose to weigh the plausibility of counterfactuals against their fidelity to the black-box model. In the context of Explainable AI, fidelity is defined as describing how an explanation approximates the prediction of the black-box model [@molnar2020interpretable]. Fidelity has become the default metric for evaluating Local Model-Agnostic Models, since they often involve local surrogate models whose predictions need not always match those of the black-box model. \n\nIn the case of Counterfactual Explanations, the concept of fidelity has so far been ignored. This is not altogether surprising, since by construction and design, Counterfactual Explanations work with the predictions of the black-box model directly: as stated above, a counterfactual $x^{\\prime}$ is considered valid if and only if $f(x^{\\prime})=t$, where $t$ denote some target outcome. \n\nDoes fidelity even make sense in the context of CE, and if so, how can we define it? In light of the examples in the previous section, we think it is urgent to introduce a notion of fidelity in this context, that relates to the distributional properties of the generated counterfactuals. In particular, we propose that a high-fidelity counterfactual $x^{\\prime}$ complies with the class-conditional distribution $\\mathcal{X}_{\\theta} = p_{\\theta}(X|y)$ where $\\theta$ denote the black-box model parameters. \n\n::: {#def-fidele}\n\n## High-Fidelity Counterfactuals\n\nLet $\\mathcal{X}_{\\theta}|y = p_{\\theta}(X|y)$ denote the class-conditional distribution of $X$ defined by $\\theta$. Then for $x^{\\prime}$ to be considered a high-fidelity counterfactual, we need: $\\mathcal{X}_{\\theta}|t \\approxeq \\mathcal{X}^{\\prime}$ where $t$ denotes the target outcome.\n\n:::\n\nIn order to assess the fidelity of counterfactuals, we propose the following two-step procedure:\n\n1) Generate samples $X_{\\theta}|y$ and $X^{\\prime}$ from $\\mathcal{X}_{\\theta}|t$ and $\\mathcal{X}^{\\prime}$, respectively.\n2) Compute the Maximum Mean Discrepancy (MMD) between $X_{\\theta}|y$ and $X^{\\prime}$. \n\nIf the computed value is different from zero, we can reject the null-hypothesis of fidelity.\n\n> Two challenges here: 1) implementing the sampling procedure in @grathwohl2020your; 2) it is unclear if MMD is really the right way to measure this. \n\n## Conformal Counterfactual Explanations\n\nIn @sec-fidelity, we have advocated for avoiding surrogate models in the context of Counterfactual Explanations. In this section, we introduce an alternative way to generate high-fidelity Counterfactual Explanations. In particular, we propose Conformal Counterfactual Explanations (ECCCE), that is Counterfactual Explanations that minimize the predictive uncertainty of conformal models. \n\n### Minimizing Predictive Uncertainty\n\n@schut2021generating demonstrated that the goal of generating realistic (plausible) counterfactuals can also be achieved by seeking counterfactuals that minimize the predictive uncertainty of the underlying black-box model. Similarly, @antoran2020getting ...\n\n- Problem: restricted to Bayesian models.\n- Solution: post-hoc predictive uncertainty quantification. In particular, Conformal Prediction. \n\n### Background on Conformal Prediction\n\n- Distribution-free, model-agnostic and scalable approach to predictive uncertainty quantification.\n- Conformal prediction is instance-based. So is CE. \n- Take any fitted model and turn it into a conformal model using calibration data.\n- Our approach, therefore, relaxes the restriction on the family of black-box models, at the cost of relying on a subset of the data. Arguably, data is often abundant and in most applications practitioners tend to hold out a test data set anyway. \n\n> Does the coverage guarantee carry over to counterfactuals?\n\n### Generating Conformal Counterfactuals\n\nWhile Conformal Prediction has recently grown in popularity, it does introduce a challenge in the context of classification: the predictions of Conformal Classifiers are set-valued and therefore difficult to work with, since they are, for example, non-differentiable. Fortunately, @stutz2022learning introduced carefully designed differentiable loss functions that make it possible to evaluate the performance of conformal predictions in training. We can leverage these recent advances in the context of gradient-based counterfactual search ...\n\n> Challenge: still need to implement these loss functions. \n\n## Experiments\n\n### Research Questions\n\n- Is CP alone enough to ensure realistic counterfactuals?\n- Do counterfactuals improve further as the models get better?\n- Do counterfactuals get more realistic as coverage\n- What happens as we vary coverage and setsize?\n- What happens as we improve the model robustness?\n- What happens as we improve the model's ability to incorporate predictive uncertainty (deep ensemble, laplace)?\n- What happens if we combine with DiCE, ClaPROAR, Gravitational?\n- What about CE robustness to endogenous shifts [@altmeyer2023endogenous]?\n\n- Benchmarking:\n - add PROBE [@pawelczyk2022probabilistically] into the mix.\n - compare travel costs to domain shits.\n\n> Nice to have: What about using Laplace Approximation, then Conformal Prediction? What about using Conformalised Laplace? \n\n## References\n\n", + "markdown": "---\ntitle: High-Fidelity Counterfactual Explanations through Conformal Prediction\nsubtitle: Research Proposal\nabstract: |\n We propose Conformal Counterfactual Explanations: an effortless and rigorous way to produce realistic and faithful Counterfactual Explanations using Conformal Prediction. To address the need for realistic counterfactuals, existing work has primarily relied on separate generative models to learn the data-generating process. While this is an effective way to produce plausible and model-agnostic counterfactual explanations, it not only introduces a significant engineering overhead but also reallocates the task of creating realistic model explanations from the model itself to the generative model. Recent work has shown that there is no need for any of this when working with probabilistic models that explicitly quantify their own uncertainty. Unfortunately, most models used in practice still do not fulfil that basic requirement, in which case we would like to have a way to quantify predictive uncertainty in a post-hoc fashion.\n---\n\n\n\n## Motivation\n\nCounterfactual Explanations are a powerful, flexible and intuitive way to not only explain black-box models but also enable affected individuals to challenge them through the means of Algorithmic Recourse. \n\n### Counterfactual Explanations or Adversarial Examples?\n\nMost state-of-the-art approaches to generating Counterfactual Explanations (CE) rely on gradient descent in the feature space. The key idea is to perturb inputs $x\\in\\mathcal{X}$ into a black-box model $f: \\mathcal{X} \\mapsto \\mathcal{Y}$ in order to change the model output $f(x)$ to some pre-specified target value $t\\in\\mathcal{Y}$. Formally, this boils down to defining some loss function $\\ell(f(x),t)$ and taking gradient steps in the minimizing direction. The so-generated counterfactuals are considered valid as soon as the predicted label matches the target label. A stripped-down counterfactual explanation is therefore little different from an adversarial example. In @fig-adv, for example, generic counterfactual search as in @wachter2017counterfactual has been applied to MNIST data.\n\n\n\n\n\n{#fig-adv}\n\nThe crucial difference between adversarial examples and counterfactuals is one of intent. While adversarial examples are typically intended to go unnoticed, counterfactuals in the context of Explainable AI are generally sought to be \"plausible\", \"realistic\" or \"feasible\". To fulfil this latter goal, researchers have come up with a myriad of ways. @joshi2019realistic were among the first to suggest that instead of searching counterfactuals in the feature space, we can instead traverse a latent embedding learned by a surrogate generative model. Similarly, @poyiadzi2020face use density ... Finally, @karimi2021algorithmic argues that counterfactuals should comply with the causal model that generates them [CHECK IF WE CAN PHASE THIS LIKE THIS]. Other related approaches include ... All of these different approaches have a common goal: they aim to ensure that the generated counterfactuals comply with the (learned) data-generating process (DGB). \n\n::: {#def-plausible}\n\n## Plausible Counterfactuals\n\nFormally, if $x \\sim \\mathcal{X}$ and for the corresponding counterfactual we have $x^{\\prime}\\sim\\mathcal{X}^{\\prime}$, then for $x^{\\prime}$ to be considered a plausible counterfactual, we need: $\\mathcal{X} \\approxeq \\mathcal{X}^{\\prime}$.\n\n:::\n\nIn the context of Algorithmic Recourse, it makes sense to strive for plausible counterfactuals, since anything else would essentially require individuals to move to out-of-distribution states. But it is worth noting that our ambition to meet this goal, may have implications on our ability to faithfully explain the behaviour of the underlying black-box model (arguably our principal goal). By essentially decoupling the task of learning plausible representations of the data from the model itself, we open ourselves up to vulnerabilities. Using a separate generative model to learn $\\mathcal{X}$, for example, has very serious implications for the generated counterfactuals. @fig-latent compares the results of applying REVISE [@joshi2019realistic] to MNIST data using two different Variational Auto-Encoders: while the counterfactual generated using an expressive (strong) VAE is compelling, the result relying on a less expressive (weak) VAE is not even valid. In this latter case, the decoder step of the VAE fails to yield values in $\\mathcal{X}$ and hence the counterfactual search in the learned latent space is doomed. \n\n{#fig-latent}\n\n> Here it would be nice to have another example where we poison the data going into the generative model to hide biases present in the data (e.g. Boston housing).\n\n- Latent can be manipulated: \n - train biased model\n - train VAE with biased variable removed/attacked (use Boston housing dataset)\n - hypothesis: will generate bias-free explanations\n\n### From Plausible to High-Fidelity Counterfactuals {#sec-fidelity}\n\nIn light of the findings, we propose to generally avoid using surrogate models to learn $\\mathcal{X}$ in the context of Counterfactual Explanations.\n\n::: {#prp-surrogate}\n\n## Avoid Surrogates\n\nSince we are in the business of explaining a black-box model, the task of learning realistic representations of the data should not be reallocated from the model itself to some surrogate model.\n\n:::\n\nIn cases where the use of surrogate models cannot be avoided, we propose to weigh the plausibility of counterfactuals against their fidelity to the black-box model. In the context of Explainable AI, fidelity is defined as describing how an explanation approximates the prediction of the black-box model [@molnar2020interpretable]. Fidelity has become the default metric for evaluating Local Model-Agnostic Models, since they often involve local surrogate models whose predictions need not always match those of the black-box model. \n\nIn the case of Counterfactual Explanations, the concept of fidelity has so far been ignored. This is not altogether surprising, since by construction and design, Counterfactual Explanations work with the predictions of the black-box model directly: as stated above, a counterfactual $x^{\\prime}$ is considered valid if and only if $f(x^{\\prime})=t$, where $t$ denote some target outcome. \n\nDoes fidelity even make sense in the context of CE, and if so, how can we define it? In light of the examples in the previous section, we think it is urgent to introduce a notion of fidelity in this context, that relates to the distributional properties of the generated counterfactuals. In particular, we propose that a high-fidelity counterfactual $x^{\\prime}$ complies with the class-conditional distribution $\\mathcal{X}_{\\theta} = p_{\\theta}(X|y)$ where $\\theta$ denote the black-box model parameters. \n\n::: {#def-fidele}\n\n## High-Fidelity Counterfactuals\n\nLet $\\mathcal{X}_{\\theta}|y = p_{\\theta}(X|y)$ denote the class-conditional distribution of $X$ defined by $\\theta$. Then for $x^{\\prime}$ to be considered a high-fidelity counterfactual, we need: $\\mathcal{X}_{\\theta}|t \\approxeq \\mathcal{X}^{\\prime}$ where $t$ denotes the target outcome.\n\n:::\n\nIn order to assess the fidelity of counterfactuals, we propose the following two-step procedure:\n\n1) Generate samples $X_{\\theta}|y$ and $X^{\\prime}$ from $\\mathcal{X}_{\\theta}|t$ and $\\mathcal{X}^{\\prime}$, respectively.\n2) Compute the Maximum Mean Discrepancy (MMD) between $X_{\\theta}|y$ and $X^{\\prime}$. \n\nIf the computed value is different from zero, we can reject the null-hypothesis of fidelity.\n\n> Two challenges here: 1) implementing the sampling procedure in @grathwohl2020your; 2) it is unclear if MMD is really the right way to measure this. \n\n## Conformal Counterfactual Explanations\n\nIn @sec-fidelity, we have advocated for avoiding surrogate models in the context of Counterfactual Explanations. In this section, we introduce an alternative way to generate high-fidelity Counterfactual Explanations. In particular, we propose Conformal Counterfactual Explanations (ECCCo), that is Counterfactual Explanations that minimize the predictive uncertainty of conformal models. \n\n### Minimizing Predictive Uncertainty\n\n@schut2021generating demonstrated that the goal of generating realistic (plausible) counterfactuals can also be achieved by seeking counterfactuals that minimize the predictive uncertainty of the underlying black-box model. Similarly, @antoran2020getting ...\n\n- Problem: restricted to Bayesian models.\n- Solution: post-hoc predictive uncertainty quantification. In particular, Conformal Prediction. \n\n### Background on Conformal Prediction\n\n- Distribution-free, model-agnostic and scalable approach to predictive uncertainty quantification.\n- Conformal prediction is instance-based. So is CE. \n- Take any fitted model and turn it into a conformal model using calibration data.\n- Our approach, therefore, relaxes the restriction on the family of black-box models, at the cost of relying on a subset of the data. Arguably, data is often abundant and in most applications practitioners tend to hold out a test data set anyway. \n\n> Does the coverage guarantee carry over to counterfactuals?\n\n### Generating Conformal Counterfactuals\n\nWhile Conformal Prediction has recently grown in popularity, it does introduce a challenge in the context of classification: the predictions of Conformal Classifiers are set-valued and therefore difficult to work with, since they are, for example, non-differentiable. Fortunately, @stutz2022learning introduced carefully designed differentiable loss functions that make it possible to evaluate the performance of conformal predictions in training. We can leverage these recent advances in the context of gradient-based counterfactual search ...\n\n> Challenge: still need to implement these loss functions. \n\n## Experiments\n\n### Research Questions\n\n- Is CP alone enough to ensure realistic counterfactuals?\n- Do counterfactuals improve further as the models get better?\n- Do counterfactuals get more realistic as coverage\n- What happens as we vary coverage and setsize?\n- What happens as we improve the model robustness?\n- What happens as we improve the model's ability to incorporate predictive uncertainty (deep ensemble, laplace)?\n- What happens if we combine with DiCE, ClaPROAR, Gravitational?\n- What about CE robustness to endogenous shifts [@altmeyer2023endogenous]?\n\n- Benchmarking:\n - add PROBE [@pawelczyk2022probabilistically] into the mix.\n - compare travel costs to domain shits.\n\n> Nice to have: What about using Laplace Approximation, then Conformal Prediction? What about using Conformalised Laplace? \n\n## References\n\n", "supporting": [ "proposal_files/figure-html" ], diff --git a/_freeze/notebooks/intro/execute-results/html.json b/_freeze/notebooks/intro/execute-results/html.json index 28ce12ee..f296ca9b 100644 --- a/_freeze/notebooks/intro/execute-results/html.json +++ b/_freeze/notebooks/intro/execute-results/html.json @@ -1,7 +1,7 @@ { "hash": "43d5045964ca39def434cb65914681bc", "result": { - "markdown": "::: {.cell execution_count=1}\n``` {.julia .cell-code}\ninclude(\"notebooks/setup.jl\")\neval(setup_notebooks)\n```\n:::\n\n\n# `ConformalGenerator`\n\nIn this section, we will look at a simple example involving synthetic data, a black-box model and a generic Conformal Counterfactual Generator.\n\n## Black-box Model\n\nWe consider a simple binary classification problem. Let $(X_i, Y_i), \\ i=1,...,n$ denote our feature-label pairs and let $\\mu: \\mathcal{X} \\mapsto \\mathcal{Y}$ denote the mapping from features to labels. For illustration purposes, we will use linearly separable data. \n\n::: {.cell execution_count=2}\n``` {.julia .cell-code}\ncounterfactual_data = load_linearly_separable()\n```\n:::\n\n\nWhile we could use a linear classifier in this case, let's pretend we need a black-box model for this task and rely on a small Multi-Layer Perceptron (MLP):\n\n::: {.cell execution_count=3}\n``` {.julia .cell-code}\nbuilder = MLJFlux.@builder Flux.Chain(\n Dense(n_in, 32, relu),\n Dense(32, n_out)\n)\nclf = NeuralNetworkClassifier(builder=builder, epochs=100)\n```\n:::\n\n\nWe can fit this model to data to produce plug-in predictions. \n\n## Conformal Prediction\n\nHere we will instead use a specific case of CP called *split conformal prediction* which can then be summarized as follows:^[In other places split conformal prediction is sometimes referred to as *inductive* conformal prediction.]\n\n1. Partition the training into a proper training set and a separate calibration set: $\\mathcal{D}_n=\\mathcal{D}^{\\text{train}} \\cup \\mathcal{D}^{\\text{cali}}$.\n2. Train the machine learning model on the proper training set: $\\hat\\mu_{i \\in \\mathcal{D}^{\\text{train}}}(X_i,Y_i)$.\n\nThe model $\\hat\\mu_{i \\in \\mathcal{D}^{\\text{train}}}$ can now produce plug-in predictions. \n\n::: callout-note\n\n## Starting Point\n\nNote that this represents the starting point in applications of Algorithmic Recourse: we have some pre-trained classifier $M$ for which we would like to generate plausible Counterfactual Explanations. Next, we turn to the calibration step. \n:::\n\n3. Compute nonconformity scores, $\\mathcal{S}$, using the calibration data $\\mathcal{D}^{\\text{cali}}$ and the fitted model $\\hat\\mu_{i \\in \\mathcal{D}^{\\text{train}}}$. \n4. For a user-specified desired coverage ratio $(1-\\alpha)$ compute the corresponding quantile, $\\hat{q}$, of the empirical distribution of nonconformity scores, $\\mathcal{S}$.\n5. For the given quantile and test sample $X_{\\text{test}}$, form the corresponding conformal prediction set: \n\n$$\nC(X_{\\text{test}})=\\{y:s(X_{\\text{test}},y) \\le \\hat{q}\\}\n$$ {#eq-set}\n\nThis is the default procedure used for classification and regression in [`ConformalPrediction.jl`](https://github.com/pat-alt/ConformalPrediction.jl). \n\nUsing the package, we can apply Split Conformal Prediction as follows:\n\n::: {.cell execution_count=4}\n``` {.julia .cell-code}\nX = table(permutedims(counterfactual_data.X))\ny = counterfactual_data.output_encoder.labels\nconf_model = conformal_model(clf; method=:simple_inductive)\nmach = machine(conf_model, X, y)\nfit!(mach)\n```\n:::\n\n\nTo be clear, all of the calibration steps (3 to 5) are post hoc, and yet none of them involved any changes to the model parameters. These are two important characteristics of Split Conformal Prediction (SCP) that make it particularly useful in the context of Algorithmic Recourse. Firstly, the fact that SCP involves posthoc calibration steps that happen after training, ensures that we need not place any restrictions on the black-box model itself. This stands in contrast to the approach proposed by @schut2021generating in which they essentially restrict the class of models to Bayesian models. Secondly, the fact that the model itself is kept entirely intact ensures that the generated counterfactuals maintain fidelity to the model. Finally, note that we also have not resorted to a surrogate model to learn more about $X \\sim \\mathcal{X}$. Instead, we have used the fitted model itself and a calibration data set to learn about the model's predictive uncertainty. \n\n## Differentiable CP\n\nIn order to use CP in the context of gradient-based counterfactual search, we need it to be differentiable. @stutz2022learning introduce a framework for training differentiable conformal predictors. They introduce a configurable loss function as well as smooth set size penalty.\n\n### Smooth Set Size Penalty\n\nStarting with the former, @stutz2022learning propose the following:\n\n$$\n\\Omega(C_{\\theta}(x;\\tau)) = = \\max (0, \\sum_k C_{\\theta,k}(x;\\tau) - \\kappa)\n$$ {#eq-size-loss}\n\nHere, $C_{\\theta,k}(x;\\tau)$ is loosely defined as the probability that class $k$ is assigned to the conformal prediction set $C$. In the context of Conformal Training, this penalty reduces the **inefficiency** of the conformal predictor. \n\nIn our context, we are not interested in improving the model itself, but rather in producing **plausible** counterfactuals. Provided that our counterfactual $x^\\prime$ is already inside the target domain ($\\mathbb{I}_{y^\\prime = t}=1$), penalizing $\\Omega(C_{\\theta}(x;\\tau))$ corresponds to guiding counterfactuals into regions of the target domain that are characterized by low ambiguity: for $\\kappa=1$ the conformal prediction set includes only the target label $t$ as $\\Omega(C_{\\theta}(x;\\tau))$. Arguably, less ambiguous counterfactuals are more **plausible**. Since the search is guided purely by properties of the model itself and (exchangeable) calibration data, counterfactuals also maintain **high fidelity**.\n\nThe left panel of @fig-losses shows the smooth size penalty in the two-dimensional feature space of our synthetic data.\n\n### Configurable Classification Loss\n\nThe right panel of @fig-losses shows the configurable classification loss in the two-dimensional feature space of our synthetic data.\n\n::: {.cell execution_count=5}\n\n::: {.cell-output .cell-output-display execution_count=6}\n{#fig-losses}\n:::\n:::\n\n\n## Fidelity and Plausibility\n\nThe main evaluation criteria we are interested in are *fidelity* and *plausibility*. Interestingly, we could also consider using these measures as penalties in the counterfactual search.\n\n### Fidelity\n\nWe propose to define fidelity as follows:\n\n::: {#def-fidelity}\n\n## High-Fidelity Counterfactuals\n\nLet $\\mathcal{X}_{\\theta}|y = p_{\\theta}(X|y)$ denote the class-conditional distribution of $X$ defined by $\\theta$. Then for $x^{\\prime}$ to be considered a high-fidelity counterfactual, we need: $\\mathcal{X}_{\\theta}|t \\approxeq \\mathcal{X}^{\\prime}$ where $t$ denotes the target outcome.\n\n:::\n\nWe can generate samples from $p_{\\theta}(X|y)$ following @grathwohl2020your. In @fig-energy, I have applied the methodology to our synthetic data.\n\n::: {.cell execution_count=6}\n``` {.julia .cell-code}\nM = ECCCE.ConformalModel(conf_model, mach.fitresult)\n\nniter = 100\nnsamples = 100\n\nplts = []\nfor (i,target) ∈ enumerate(counterfactual_data.y_levels)\n sampler = ECCCE.EnergySampler(M, counterfactual_data, target; niter=niter, nsamples=100)\n Xgen = rand(sampler, nsamples)\n plt = Plots.plot(M, counterfactual_data; target=target, zoom=-3,cbar=false)\n Plots.scatter!(Xgen[1,:],Xgen[2,:],alpha=0.5,color=i,shape=:star,label=\"X|y=$target\")\n push!(plts, plt)\nend\nPlots.plot(plts..., layout=(1,length(plts)), size=(img_height*length(plts),img_height))\n```\n\n::: {.cell-output .cell-output-display execution_count=7}\n{#fig-energy}\n:::\n:::\n\n\nAs an evaluation metric and penalty, we could use the average distance of the counterfactual $x^{\\prime}$ from these generated samples, for example.\n\n### Plausibility\n\nWe propose to define plausibility as follows:\n\n::: {#def-plausible}\n\n## Plausible Counterfactuals\n\nFormally, let $\\mathcal{X}|t$ denote the conditional distribution of samples in the target class. As before, we have $x^{\\prime}\\sim\\mathcal{X}^{\\prime}$, then for $x^{\\prime}$ to be considered a plausible counterfactual, we need: $\\mathcal{X}|t \\approxeq \\mathcal{X}^{\\prime}$.\n\n:::\n\nAs an evaluation metric and penalty, we could use the average distance of the counterfactual $x^{\\prime}$ from (potentially bootstrapped) training samples in the target class, for example.\n\n## Counterfactual Explanations\n\nNext, let's generate counterfactual explanations for our synthetic data. We first wrap our model in a container that makes it compatible with `CounterfactualExplanations.jl`. Then we draw a random sample, determine its predicted label $\\hat{y}$ and choose the opposite label as our target. \n\n::: {.cell execution_count=7}\n``` {.julia .cell-code}\nx = select_factual(counterfactual_data,rand(1:size(counterfactual_data.X,2)))\ny_factual = predict_label(M, counterfactual_data, x)[1]\ntarget = counterfactual_data.y_levels[counterfactual_data.y_levels .!= y_factual][1]\n```\n:::\n\n\nThe generic Conformal Counterfactual Generator penalises the only the set size only:\n\n$$\nx^\\prime = \\arg \\min_{x^\\prime} \\ell(M(x^\\prime),t) + \\lambda \\mathbb{I}_{y^\\prime = t} \\Omega(C_{\\theta}(x;\\tau)) \n$$ {#eq-solution}\n\n::: {.cell execution_count=8}\n\n::: {.cell-output .cell-output-display execution_count=9}\n{#fig-ce}\n:::\n:::\n\n\n## Multi-Class\n\n::: {.cell execution_count=9}\n``` {.julia .cell-code}\ncounterfactual_data = load_multi_class()\n```\n:::\n\n\n::: {.cell execution_count=10}\n``` {.julia .cell-code}\nX = table(permutedims(counterfactual_data.X))\ny = counterfactual_data.output_encoder.labels\n```\n:::\n\n\n::: {.cell execution_count=11}\n\n::: {.cell-output .cell-output-display execution_count=12}\n{#fig-pen-multi}\n:::\n:::\n\n\n::: {.cell execution_count=12}\n\n::: {.cell-output .cell-output-display execution_count=13}\n{#fig-losses-multi}\n:::\n:::\n\n\n::: {.cell execution_count=13}\n\n::: {.cell-output .cell-output-display execution_count=14}\n{#fig-energy-multi}\n:::\n:::\n\n\n::: {.cell execution_count=14}\n``` {.julia .cell-code}\nx = select_factual(counterfactual_data,rand(1:size(counterfactual_data.X,2)))\ny_factual = predict_label(M, counterfactual_data, x)[1]\ntarget = counterfactual_data.y_levels[counterfactual_data.y_levels .!= y_factual][1]\n```\n:::\n\n\n::: {.cell execution_count=15}\n\n::: {.cell-output .cell-output-display execution_count=16}\n{#fig-ce-multi}\n:::\n:::\n\n\n## Benchmarks\n\n::: {.cell execution_count=16}\n``` {.julia .cell-code}\n# Data:\ndatasets = Dict(\n :linearly_separable => load_linearly_separable(),\n :overlapping => load_overlapping(),\n :moons => load_moons(),\n :circles => load_circles(),\n :multi_class => load_multi_class(),\n)\n\n# Untrained Models:\nmodels = Dict(\n :cov75 => ECCCE.ConformalModel(conformal_model(clf; method=:simple_inductive, coverage=0.75)),\n :cov80 => ECCCE.ConformalModel(conformal_model(clf; method=:simple_inductive, coverage=0.80)),\n :cov90 => ECCCE.ConformalModel(conformal_model(clf; method=:simple_inductive, coverage=0.90)),\n :cov99 => ECCCE.ConformalModel(conformal_model(clf; method=:simple_inductive, coverage=0.99)),\n)\n```\n:::\n\n\nThen we can simply loop over the datasets and eventually concatenate the results like so:\n\n::: {.cell execution_count=17}\n``` {.julia .cell-code}\nusing CounterfactualExplanations.Evaluation: benchmark\nbmks = []\nmeasures = [\n CounterfactualExplanations.distance,\n ECCCE.distance_from_energy,\n ECCCE.distance_from_targets\n]\nfor (dataname, dataset) in datasets\n bmk = benchmark(\n dataset; \n models=deepcopy(models), \n generators=generators, \n measure=measures,\n suppress_training=false, dataname=dataname,\n n_individuals=10\n )\n push!(bmks, bmk)\nend\nbmk = reduce(vcat, bmks)\n```\n:::\n\n\n::: {.cell execution_count=18}\n``` {.julia .cell-code}\nf(ce) = CounterfactualExplanations.model_evaluation(ce.M, ce.data)\n@chain bmk() begin\n @group_by(model, generator, dataname, variable)\n @select(model, generator, dataname, ce, value)\n @mutate(performance = f(ce))\n @summarize(model=unique(model), generator=unique(generator), dataname=unique(dataname), performace=unique(performance), value=mean(value))\n @ungroup\n @filter(dataname == :multi_class)\n @filter(model == :cov99)\n @filter(variable == \"distance\")\nend\n```\n:::\n\n\n::: {#fig-benchmark .cell execution_count=19}\n\n::: {.cell-output .cell-output-display}\n{#fig-benchmark-1}\n:::\n\n::: {.cell-output .cell-output-display}\n{#fig-benchmark-2}\n:::\n\n::: {.cell-output .cell-output-display}\n{#fig-benchmark-3}\n:::\n\n::: {.cell-output .cell-output-display}\n{#fig-benchmark-4}\n:::\n\n::: {.cell-output .cell-output-display}\n{#fig-benchmark-5}\n:::\n\nBenchmark results for the different generators.\n:::\n\n\n", + "markdown": "::: {.cell execution_count=1}\n``` {.julia .cell-code}\ninclude(\"notebooks/setup.jl\")\neval(setup_notebooks)\n```\n:::\n\n\n# `ConformalGenerator`\n\nIn this section, we will look at a simple example involving synthetic data, a black-box model and a generic Conformal Counterfactual Generator.\n\n## Black-box Model\n\nWe consider a simple binary classification problem. Let $(X_i, Y_i), \\ i=1,...,n$ denote our feature-label pairs and let $\\mu: \\mathcal{X} \\mapsto \\mathcal{Y}$ denote the mapping from features to labels. For illustration purposes, we will use linearly separable data. \n\n::: {.cell execution_count=2}\n``` {.julia .cell-code}\ncounterfactual_data = load_linearly_separable()\n```\n:::\n\n\nWhile we could use a linear classifier in this case, let's pretend we need a black-box model for this task and rely on a small Multi-Layer Perceptron (MLP):\n\n::: {.cell execution_count=3}\n``` {.julia .cell-code}\nbuilder = MLJFlux.@builder Flux.Chain(\n Dense(n_in, 32, relu),\n Dense(32, n_out)\n)\nclf = NeuralNetworkClassifier(builder=builder, epochs=100)\n```\n:::\n\n\nWe can fit this model to data to produce plug-in predictions. \n\n## Conformal Prediction\n\nHere we will instead use a specific case of CP called *split conformal prediction* which can then be summarized as follows:^[In other places split conformal prediction is sometimes referred to as *inductive* conformal prediction.]\n\n1. Partition the training into a proper training set and a separate calibration set: $\\mathcal{D}_n=\\mathcal{D}^{\\text{train}} \\cup \\mathcal{D}^{\\text{cali}}$.\n2. Train the machine learning model on the proper training set: $\\hat\\mu_{i \\in \\mathcal{D}^{\\text{train}}}(X_i,Y_i)$.\n\nThe model $\\hat\\mu_{i \\in \\mathcal{D}^{\\text{train}}}$ can now produce plug-in predictions. \n\n::: callout-note\n\n## Starting Point\n\nNote that this represents the starting point in applications of Algorithmic Recourse: we have some pre-trained classifier $M$ for which we would like to generate plausible Counterfactual Explanations. Next, we turn to the calibration step. \n:::\n\n3. Compute nonconformity scores, $\\mathcal{S}$, using the calibration data $\\mathcal{D}^{\\text{cali}}$ and the fitted model $\\hat\\mu_{i \\in \\mathcal{D}^{\\text{train}}}$. \n4. For a user-specified desired coverage ratio $(1-\\alpha)$ compute the corresponding quantile, $\\hat{q}$, of the empirical distribution of nonconformity scores, $\\mathcal{S}$.\n5. For the given quantile and test sample $X_{\\text{test}}$, form the corresponding conformal prediction set: \n\n$$\nC(X_{\\text{test}})=\\{y:s(X_{\\text{test}},y) \\le \\hat{q}\\}\n$$ {#eq-set}\n\nThis is the default procedure used for classification and regression in [`ConformalPrediction.jl`](https://github.com/pat-alt/ConformalPrediction.jl). \n\nUsing the package, we can apply Split Conformal Prediction as follows:\n\n::: {.cell execution_count=4}\n``` {.julia .cell-code}\nX = table(permutedims(counterfactual_data.X))\ny = counterfactual_data.output_encoder.labels\nconf_model = conformal_model(clf; method=:simple_inductive)\nmach = machine(conf_model, X, y)\nfit!(mach)\n```\n:::\n\n\nTo be clear, all of the calibration steps (3 to 5) are post hoc, and yet none of them involved any changes to the model parameters. These are two important characteristics of Split Conformal Prediction (SCP) that make it particularly useful in the context of Algorithmic Recourse. Firstly, the fact that SCP involves posthoc calibration steps that happen after training, ensures that we need not place any restrictions on the black-box model itself. This stands in contrast to the approach proposed by @schut2021generating in which they essentially restrict the class of models to Bayesian models. Secondly, the fact that the model itself is kept entirely intact ensures that the generated counterfactuals maintain fidelity to the model. Finally, note that we also have not resorted to a surrogate model to learn more about $X \\sim \\mathcal{X}$. Instead, we have used the fitted model itself and a calibration data set to learn about the model's predictive uncertainty. \n\n## Differentiable CP\n\nIn order to use CP in the context of gradient-based counterfactual search, we need it to be differentiable. @stutz2022learning introduce a framework for training differentiable conformal predictors. They introduce a configurable loss function as well as smooth set size penalty.\n\n### Smooth Set Size Penalty\n\nStarting with the former, @stutz2022learning propose the following:\n\n$$\n\\Omega(C_{\\theta}(x;\\tau)) = = \\max (0, \\sum_k C_{\\theta,k}(x;\\tau) - \\kappa)\n$$ {#eq-size-loss}\n\nHere, $C_{\\theta,k}(x;\\tau)$ is loosely defined as the probability that class $k$ is assigned to the conformal prediction set $C$. In the context of Conformal Training, this penalty reduces the **inefficiency** of the conformal predictor. \n\nIn our context, we are not interested in improving the model itself, but rather in producing **plausible** counterfactuals. Provided that our counterfactual $x^\\prime$ is already inside the target domain ($\\mathbb{I}_{y^\\prime = t}=1$), penalizing $\\Omega(C_{\\theta}(x;\\tau))$ corresponds to guiding counterfactuals into regions of the target domain that are characterized by low ambiguity: for $\\kappa=1$ the conformal prediction set includes only the target label $t$ as $\\Omega(C_{\\theta}(x;\\tau))$. Arguably, less ambiguous counterfactuals are more **plausible**. Since the search is guided purely by properties of the model itself and (exchangeable) calibration data, counterfactuals also maintain **high fidelity**.\n\nThe left panel of @fig-losses shows the smooth size penalty in the two-dimensional feature space of our synthetic data.\n\n### Configurable Classification Loss\n\nThe right panel of @fig-losses shows the configurable classification loss in the two-dimensional feature space of our synthetic data.\n\n::: {.cell execution_count=5}\n\n::: {.cell-output .cell-output-display execution_count=6}\n{#fig-losses}\n:::\n:::\n\n\n## Fidelity and Plausibility\n\nThe main evaluation criteria we are interested in are *fidelity* and *plausibility*. Interestingly, we could also consider using these measures as penalties in the counterfactual search.\n\n### Fidelity\n\nWe propose to define fidelity as follows:\n\n::: {#def-fidelity}\n\n## High-Fidelity Counterfactuals\n\nLet $\\mathcal{X}_{\\theta}|y = p_{\\theta}(X|y)$ denote the class-conditional distribution of $X$ defined by $\\theta$. Then for $x^{\\prime}$ to be considered a high-fidelity counterfactual, we need: $\\mathcal{X}_{\\theta}|t \\approxeq \\mathcal{X}^{\\prime}$ where $t$ denotes the target outcome.\n\n:::\n\nWe can generate samples from $p_{\\theta}(X|y)$ following @grathwohl2020your. In @fig-energy, I have applied the methodology to our synthetic data.\n\n::: {.cell execution_count=6}\n``` {.julia .cell-code}\nM = ECCCo.ConformalModel(conf_model, mach.fitresult)\n\nniter = 100\nnsamples = 100\n\nplts = []\nfor (i,target) ∈ enumerate(counterfactual_data.y_levels)\n sampler = ECCCo.EnergySampler(M, counterfactual_data, target; niter=niter, nsamples=100)\n Xgen = rand(sampler, nsamples)\n plt = Plots.plot(M, counterfactual_data; target=target, zoom=-3,cbar=false)\n Plots.scatter!(Xgen[1,:],Xgen[2,:],alpha=0.5,color=i,shape=:star,label=\"X|y=$target\")\n push!(plts, plt)\nend\nPlots.plot(plts..., layout=(1,length(plts)), size=(img_height*length(plts),img_height))\n```\n\n::: {.cell-output .cell-output-display execution_count=7}\n{#fig-energy}\n:::\n:::\n\n\nAs an evaluation metric and penalty, we could use the average distance of the counterfactual $x^{\\prime}$ from these generated samples, for example.\n\n### Plausibility\n\nWe propose to define plausibility as follows:\n\n::: {#def-plausible}\n\n## Plausible Counterfactuals\n\nFormally, let $\\mathcal{X}|t$ denote the conditional distribution of samples in the target class. As before, we have $x^{\\prime}\\sim\\mathcal{X}^{\\prime}$, then for $x^{\\prime}$ to be considered a plausible counterfactual, we need: $\\mathcal{X}|t \\approxeq \\mathcal{X}^{\\prime}$.\n\n:::\n\nAs an evaluation metric and penalty, we could use the average distance of the counterfactual $x^{\\prime}$ from (potentially bootstrapped) training samples in the target class, for example.\n\n## Counterfactual Explanations\n\nNext, let's generate counterfactual explanations for our synthetic data. We first wrap our model in a container that makes it compatible with `CounterfactualExplanations.jl`. Then we draw a random sample, determine its predicted label $\\hat{y}$ and choose the opposite label as our target. \n\n::: {.cell execution_count=7}\n``` {.julia .cell-code}\nx = select_factual(counterfactual_data,rand(1:size(counterfactual_data.X,2)))\ny_factual = predict_label(M, counterfactual_data, x)[1]\ntarget = counterfactual_data.y_levels[counterfactual_data.y_levels .!= y_factual][1]\n```\n:::\n\n\nThe generic Conformal Counterfactual Generator penalises the only the set size only:\n\n$$\nx^\\prime = \\arg \\min_{x^\\prime} \\ell(M(x^\\prime),t) + \\lambda \\mathbb{I}_{y^\\prime = t} \\Omega(C_{\\theta}(x;\\tau)) \n$$ {#eq-solution}\n\n::: {.cell execution_count=8}\n\n::: {.cell-output .cell-output-display execution_count=9}\n{#fig-ce}\n:::\n:::\n\n\n## Multi-Class\n\n::: {.cell execution_count=9}\n``` {.julia .cell-code}\ncounterfactual_data = load_multi_class()\n```\n:::\n\n\n::: {.cell execution_count=10}\n``` {.julia .cell-code}\nX = table(permutedims(counterfactual_data.X))\ny = counterfactual_data.output_encoder.labels\n```\n:::\n\n\n::: {.cell execution_count=11}\n\n::: {.cell-output .cell-output-display execution_count=12}\n{#fig-pen-multi}\n:::\n:::\n\n\n::: {.cell execution_count=12}\n\n::: {.cell-output .cell-output-display execution_count=13}\n{#fig-losses-multi}\n:::\n:::\n\n\n::: {.cell execution_count=13}\n\n::: {.cell-output .cell-output-display execution_count=14}\n{#fig-energy-multi}\n:::\n:::\n\n\n::: {.cell execution_count=14}\n``` {.julia .cell-code}\nx = select_factual(counterfactual_data,rand(1:size(counterfactual_data.X,2)))\ny_factual = predict_label(M, counterfactual_data, x)[1]\ntarget = counterfactual_data.y_levels[counterfactual_data.y_levels .!= y_factual][1]\n```\n:::\n\n\n::: {.cell execution_count=15}\n\n::: {.cell-output .cell-output-display execution_count=16}\n{#fig-ce-multi}\n:::\n:::\n\n\n## Benchmarks\n\n::: {.cell execution_count=16}\n``` {.julia .cell-code}\n# Data:\ndatasets = Dict(\n :linearly_separable => load_linearly_separable(),\n :overlapping => load_overlapping(),\n :moons => load_moons(),\n :circles => load_circles(),\n :multi_class => load_multi_class(),\n)\n\n# Untrained Models:\nmodels = Dict(\n :cov75 => ECCCo.ConformalModel(conformal_model(clf; method=:simple_inductive, coverage=0.75)),\n :cov80 => ECCCo.ConformalModel(conformal_model(clf; method=:simple_inductive, coverage=0.80)),\n :cov90 => ECCCo.ConformalModel(conformal_model(clf; method=:simple_inductive, coverage=0.90)),\n :cov99 => ECCCo.ConformalModel(conformal_model(clf; method=:simple_inductive, coverage=0.99)),\n)\n```\n:::\n\n\nThen we can simply loop over the datasets and eventually concatenate the results like so:\n\n::: {.cell execution_count=17}\n``` {.julia .cell-code}\nusing CounterfactualExplanations.Evaluation: benchmark\nbmks = []\nmeasures = [\n CounterfactualExplanations.distance,\n ECCCo.distance_from_energy,\n ECCCo.distance_from_targets\n]\nfor (dataname, dataset) in datasets\n bmk = benchmark(\n dataset; \n models=deepcopy(models), \n generators=generators, \n measure=measures,\n suppress_training=false, dataname=dataname,\n n_individuals=10\n )\n push!(bmks, bmk)\nend\nbmk = reduce(vcat, bmks)\n```\n:::\n\n\n::: {.cell execution_count=18}\n``` {.julia .cell-code}\nf(ce) = CounterfactualExplanations.model_evaluation(ce.M, ce.data)\n@chain bmk() begin\n @group_by(model, generator, dataname, variable)\n @select(model, generator, dataname, ce, value)\n @mutate(performance = f(ce))\n @summarize(model=unique(model), generator=unique(generator), dataname=unique(dataname), performace=unique(performance), value=mean(value))\n @ungroup\n @filter(dataname == :multi_class)\n @filter(model == :cov99)\n @filter(variable == \"distance\")\nend\n```\n:::\n\n\n::: {#fig-benchmark .cell execution_count=19}\n\n::: {.cell-output .cell-output-display}\n{#fig-benchmark-1}\n:::\n\n::: {.cell-output .cell-output-display}\n{#fig-benchmark-2}\n:::\n\n::: {.cell-output .cell-output-display}\n{#fig-benchmark-3}\n:::\n\n::: {.cell-output .cell-output-display}\n{#fig-benchmark-4}\n:::\n\n::: {.cell-output .cell-output-display}\n{#fig-benchmark-5}\n:::\n\nBenchmark results for the different generators.\n:::\n\n\n", "supporting": [ "intro_files/figure-html" ], diff --git a/_freeze/notebooks/proposal/execute-results/html.json b/_freeze/notebooks/proposal/execute-results/html.json index e9804de6..87f9d399 100644 --- a/_freeze/notebooks/proposal/execute-results/html.json +++ b/_freeze/notebooks/proposal/execute-results/html.json @@ -1,7 +1,7 @@ { "hash": "24ab407f04257b00a84f7dcaee456281", "result": { - "markdown": "---\ntitle: High-Fidelity Counterfactual Explanations through Conformal Prediction\nsubtitle: Research Proposal\nabstract: |\n We propose Conformal Counterfactual Explanations: an effortless and rigorous way to produce realistic and faithful Counterfactual Explanations using Conformal Prediction. To address the need for realistic counterfactuals, existing work has primarily relied on separate generative models to learn the data-generating process. While this is an effective way to produce plausible and model-agnostic counterfactual explanations, it not only introduces a significant engineering overhead but also reallocates the task of creating realistic model explanations from the model itself to the generative model. Recent work has shown that there is no need for any of this when working with probabilistic models that explicitly quantify their own uncertainty. Unfortunately, most models used in practice still do not fulfil that basic requirement, in which case we would like to have a way to quantify predictive uncertainty in a post-hoc fashion.\n---\n\n\n\n## Motivation\n\nCounterfactual Explanations are a powerful, flexible and intuitive way to not only explain black-box models but also enable affected individuals to challenge them through the means of Algorithmic Recourse. \n\n### Counterfactual Explanations or Adversarial Examples?\n\nMost state-of-the-art approaches to generating Counterfactual Explanations (CE) rely on gradient descent in the feature space. The key idea is to perturb inputs $x\\in\\mathcal{X}$ into a black-box model $f: \\mathcal{X} \\mapsto \\mathcal{Y}$ in order to change the model output $f(x)$ to some pre-specified target value $t\\in\\mathcal{Y}$. Formally, this boils down to defining some loss function $\\ell(f(x),t)$ and taking gradient steps in the minimizing direction. The so-generated counterfactuals are considered valid as soon as the predicted label matches the target label. A stripped-down counterfactual explanation is therefore little different from an adversarial example. In @fig-adv, for example, generic counterfactual search as in @wachter2017counterfactual has been applied to MNIST data.\n\n\n\n\n\n\n\n{#fig-adv}\n\nThe crucial difference between adversarial examples and counterfactuals is one of intent. While adversarial examples are typically intended to go unnoticed, counterfactuals in the context of Explainable AI are generally sought to be \"plausible\", \"realistic\" or \"feasible\". To fulfil this latter goal, researchers have come up with a myriad of ways. @joshi2019realistic were among the first to suggest that instead of searching counterfactuals in the feature space, we can instead traverse a latent embedding learned by a surrogate generative model. Similarly, @poyiadzi2020face use density ... Finally, @karimi2021algorithmic argues that counterfactuals should comply with the causal model that generates them [CHECK IF WE CAN PHASE THIS LIKE THIS]. Other related approaches include ... All of these different approaches have a common goal: they aim to ensure that the generated counterfactuals comply with the (learned) data-generating process (DGB). \n\n::: {#def-plausible}\n\n## Plausible Counterfactuals\n\nFormally, if $x \\sim \\mathcal{X}$ and for the corresponding counterfactual we have $x^{\\prime}\\sim\\mathcal{X}^{\\prime}$, then for $x^{\\prime}$ to be considered a plausible counterfactual, we need: $\\mathcal{X} \\approxeq \\mathcal{X}^{\\prime}$.\n\n:::\n\nIn the context of Algorithmic Recourse, it makes sense to strive for plausible counterfactuals, since anything else would essentially require individuals to move to out-of-distribution states. But it is worth noting that our ambition to meet this goal, may have implications on our ability to faithfully explain the behaviour of the underlying black-box model (arguably our principal goal). By essentially decoupling the task of learning plausible representations of the data from the model itself, we open ourselves up to vulnerabilities. Using a separate generative model to learn $\\mathcal{X}$, for example, has very serious implications for the generated counterfactuals. @fig-latent compares the results of applying REVISE [@joshi2019realistic] to MNIST data using two different Variational Auto-Encoders: while the counterfactual generated using an expressive (strong) VAE is compelling, the result relying on a less expressive (weak) VAE is not even valid. In this latter case, the decoder step of the VAE fails to yield values in $\\mathcal{X}$ and hence the counterfactual search in the learned latent space is doomed. \n\n\n\n\n\n\n\n{#fig-latent}\n\n> Here it would be nice to have another example where we poison the data going into the generative model to hide biases present in the data (e.g. Boston housing).\n\n- Latent can be manipulated: \n - train biased model\n - train VAE with biased variable removed/attacked (use Boston housing dataset)\n - hypothesis: will generate bias-free explanations\n\n### From Plausible to High-Fidelity Counterfactuals {#sec-fidelity}\n\nIn light of the findings, we propose to generally avoid using surrogate models to learn $\\mathcal{X}$ in the context of Counterfactual Explanations.\n\n::: {#prp-surrogate}\n\n## Avoid Surrogates\n\nSince we are in the business of explaining a black-box model, the task of learning realistic representations of the data should not be reallocated from the model itself to some surrogate model.\n\n:::\n\nIn cases where the use of surrogate models cannot be avoided, we propose to weigh the plausibility of counterfactuals against their fidelity to the black-box model. In the context of Explainable AI, fidelity is defined as describing how an explanation approximates the prediction of the black-box model [@molnar2020interpretable]. Fidelity has become the default metric for evaluating Local Model-Agnostic Models, since they often involve local surrogate models whose predictions need not always match those of the black-box model. \n\nIn the case of Counterfactual Explanations, the concept of fidelity has so far been ignored. This is not altogether surprising, since by construction and design, Counterfactual Explanations work with the predictions of the black-box model directly: as stated above, a counterfactual $x^{\\prime}$ is considered valid if and only if $f(x^{\\prime})=t$, where $t$ denote some target outcome. \n\nDoes fidelity even make sense in the context of CE, and if so, how can we define it? In light of the examples in the previous section, we think it is urgent to introduce a notion of fidelity in this context, that relates to the distributional properties of the generated counterfactuals. In particular, we propose that a high-fidelity counterfactual $x^{\\prime}$ complies with the class-conditional distribution $\\mathcal{X}_{\\theta} = p_{\\theta}(X|y)$ where $\\theta$ denote the black-box model parameters. \n\n::: {#def-fidele}\n\n## High-Fidelity Counterfactuals\n\nLet $\\mathcal{X}_{\\theta}|y = p_{\\theta}(X|y)$ denote the class-conditional distribution of $X$ defined by $\\theta$. Then for $x^{\\prime}$ to be considered a high-fidelity counterfactual, we need: $\\mathcal{X}_{\\theta}|t \\approxeq \\mathcal{X}^{\\prime}$ where $t$ denotes the target outcome.\n\n:::\n\nIn order to assess the fidelity of counterfactuals, we propose the following two-step procedure:\n\n1) Generate samples $X_{\\theta}|y$ and $X^{\\prime}$ from $\\mathcal{X}_{\\theta}|t$ and $\\mathcal{X}^{\\prime}$, respectively.\n2) Compute the Maximum Mean Discrepancy (MMD) between $X_{\\theta}|y$ and $X^{\\prime}$. \n\nIf the computed value is different from zero, we can reject the null-hypothesis of fidelity.\n\n> Two challenges here: 1) implementing the sampling procedure in @grathwohl2020your; 2) it is unclear if MMD is really the right way to measure this. \n\n## Conformal Counterfactual Explanations\n\nIn @sec-fidelity, we have advocated for avoiding surrogate models in the context of Counterfactual Explanations. In this section, we introduce an alternative way to generate high-fidelity Counterfactual Explanations. In particular, we propose Conformal Counterfactual Explanations (ECCCE), that is Counterfactual Explanations that minimize the predictive uncertainty of conformal models. \n\n### Minimizing Predictive Uncertainty\n\n@schut2021generating demonstrated that the goal of generating realistic (plausible) counterfactuals can also be achieved by seeking counterfactuals that minimize the predictive uncertainty of the underlying black-box model. Similarly, @antoran2020getting ...\n\n- Problem: restricted to Bayesian models.\n- Solution: post-hoc predictive uncertainty quantification. In particular, Conformal Prediction. \n\n### Background on Conformal Prediction\n\n- Distribution-free, model-agnostic and scalable approach to predictive uncertainty quantification.\n- Conformal prediction is instance-based. So is CE. \n- Take any fitted model and turn it into a conformal model using calibration data.\n- Our approach, therefore, relaxes the restriction on the family of black-box models, at the cost of relying on a subset of the data. Arguably, data is often abundant and in most applications practitioners tend to hold out a test data set anyway. \n\n> Does the coverage guarantee carry over to counterfactuals?\n\n### Generating Conformal Counterfactuals\n\nWhile Conformal Prediction has recently grown in popularity, it does introduce a challenge in the context of classification: the predictions of Conformal Classifiers are set-valued and therefore difficult to work with, since they are, for example, non-differentiable. Fortunately, @stutz2022learning introduced carefully designed differentiable loss functions that make it possible to evaluate the performance of conformal predictions in training. We can leverage these recent advances in the context of gradient-based counterfactual search ...\n\n> Challenge: still need to implement these loss functions. \n\n## Experiments\n\n### Research Questions\n\n- Is CP alone enough to ensure realistic counterfactuals?\n- Do counterfactuals improve further as the models get better?\n- Do counterfactuals get more realistic as coverage\n- What happens as we vary coverage and setsize?\n- What happens as we improve the model robustness?\n- What happens as we improve the model's ability to incorporate predictive uncertainty (deep ensemble, laplace)?\n- What happens if we combine with DiCE, ClaPROAR, Gravitational?\n- What about CE robustness to endogenous shifts [@altmeyer2023endogenous]?\n\n- Benchmarking:\n - add PROBE [@pawelczyk2022probabilistically] into the mix.\n - compare travel costs to domain shits.\n\n> Nice to have: What about using Laplace Approximation, then Conformal Prediction? What about using Conformalised Laplace? \n\n## References\n\n", + "markdown": "---\ntitle: High-Fidelity Counterfactual Explanations through Conformal Prediction\nsubtitle: Research Proposal\nabstract: |\n We propose Conformal Counterfactual Explanations: an effortless and rigorous way to produce realistic and faithful Counterfactual Explanations using Conformal Prediction. To address the need for realistic counterfactuals, existing work has primarily relied on separate generative models to learn the data-generating process. While this is an effective way to produce plausible and model-agnostic counterfactual explanations, it not only introduces a significant engineering overhead but also reallocates the task of creating realistic model explanations from the model itself to the generative model. Recent work has shown that there is no need for any of this when working with probabilistic models that explicitly quantify their own uncertainty. Unfortunately, most models used in practice still do not fulfil that basic requirement, in which case we would like to have a way to quantify predictive uncertainty in a post-hoc fashion.\n---\n\n\n\n## Motivation\n\nCounterfactual Explanations are a powerful, flexible and intuitive way to not only explain black-box models but also enable affected individuals to challenge them through the means of Algorithmic Recourse. \n\n### Counterfactual Explanations or Adversarial Examples?\n\nMost state-of-the-art approaches to generating Counterfactual Explanations (CE) rely on gradient descent in the feature space. The key idea is to perturb inputs $x\\in\\mathcal{X}$ into a black-box model $f: \\mathcal{X} \\mapsto \\mathcal{Y}$ in order to change the model output $f(x)$ to some pre-specified target value $t\\in\\mathcal{Y}$. Formally, this boils down to defining some loss function $\\ell(f(x),t)$ and taking gradient steps in the minimizing direction. The so-generated counterfactuals are considered valid as soon as the predicted label matches the target label. A stripped-down counterfactual explanation is therefore little different from an adversarial example. In @fig-adv, for example, generic counterfactual search as in @wachter2017counterfactual has been applied to MNIST data.\n\n\n\n\n\n\n\n{#fig-adv}\n\nThe crucial difference between adversarial examples and counterfactuals is one of intent. While adversarial examples are typically intended to go unnoticed, counterfactuals in the context of Explainable AI are generally sought to be \"plausible\", \"realistic\" or \"feasible\". To fulfil this latter goal, researchers have come up with a myriad of ways. @joshi2019realistic were among the first to suggest that instead of searching counterfactuals in the feature space, we can instead traverse a latent embedding learned by a surrogate generative model. Similarly, @poyiadzi2020face use density ... Finally, @karimi2021algorithmic argues that counterfactuals should comply with the causal model that generates them [CHECK IF WE CAN PHASE THIS LIKE THIS]. Other related approaches include ... All of these different approaches have a common goal: they aim to ensure that the generated counterfactuals comply with the (learned) data-generating process (DGB). \n\n::: {#def-plausible}\n\n## Plausible Counterfactuals\n\nFormally, if $x \\sim \\mathcal{X}$ and for the corresponding counterfactual we have $x^{\\prime}\\sim\\mathcal{X}^{\\prime}$, then for $x^{\\prime}$ to be considered a plausible counterfactual, we need: $\\mathcal{X} \\approxeq \\mathcal{X}^{\\prime}$.\n\n:::\n\nIn the context of Algorithmic Recourse, it makes sense to strive for plausible counterfactuals, since anything else would essentially require individuals to move to out-of-distribution states. But it is worth noting that our ambition to meet this goal, may have implications on our ability to faithfully explain the behaviour of the underlying black-box model (arguably our principal goal). By essentially decoupling the task of learning plausible representations of the data from the model itself, we open ourselves up to vulnerabilities. Using a separate generative model to learn $\\mathcal{X}$, for example, has very serious implications for the generated counterfactuals. @fig-latent compares the results of applying REVISE [@joshi2019realistic] to MNIST data using two different Variational Auto-Encoders: while the counterfactual generated using an expressive (strong) VAE is compelling, the result relying on a less expressive (weak) VAE is not even valid. In this latter case, the decoder step of the VAE fails to yield values in $\\mathcal{X}$ and hence the counterfactual search in the learned latent space is doomed. \n\n\n\n\n\n\n\n{#fig-latent}\n\n> Here it would be nice to have another example where we poison the data going into the generative model to hide biases present in the data (e.g. Boston housing).\n\n- Latent can be manipulated: \n - train biased model\n - train VAE with biased variable removed/attacked (use Boston housing dataset)\n - hypothesis: will generate bias-free explanations\n\n### From Plausible to High-Fidelity Counterfactuals {#sec-fidelity}\n\nIn light of the findings, we propose to generally avoid using surrogate models to learn $\\mathcal{X}$ in the context of Counterfactual Explanations.\n\n::: {#prp-surrogate}\n\n## Avoid Surrogates\n\nSince we are in the business of explaining a black-box model, the task of learning realistic representations of the data should not be reallocated from the model itself to some surrogate model.\n\n:::\n\nIn cases where the use of surrogate models cannot be avoided, we propose to weigh the plausibility of counterfactuals against their fidelity to the black-box model. In the context of Explainable AI, fidelity is defined as describing how an explanation approximates the prediction of the black-box model [@molnar2020interpretable]. Fidelity has become the default metric for evaluating Local Model-Agnostic Models, since they often involve local surrogate models whose predictions need not always match those of the black-box model. \n\nIn the case of Counterfactual Explanations, the concept of fidelity has so far been ignored. This is not altogether surprising, since by construction and design, Counterfactual Explanations work with the predictions of the black-box model directly: as stated above, a counterfactual $x^{\\prime}$ is considered valid if and only if $f(x^{\\prime})=t$, where $t$ denote some target outcome. \n\nDoes fidelity even make sense in the context of CE, and if so, how can we define it? In light of the examples in the previous section, we think it is urgent to introduce a notion of fidelity in this context, that relates to the distributional properties of the generated counterfactuals. In particular, we propose that a high-fidelity counterfactual $x^{\\prime}$ complies with the class-conditional distribution $\\mathcal{X}_{\\theta} = p_{\\theta}(X|y)$ where $\\theta$ denote the black-box model parameters. \n\n::: {#def-fidele}\n\n## High-Fidelity Counterfactuals\n\nLet $\\mathcal{X}_{\\theta}|y = p_{\\theta}(X|y)$ denote the class-conditional distribution of $X$ defined by $\\theta$. Then for $x^{\\prime}$ to be considered a high-fidelity counterfactual, we need: $\\mathcal{X}_{\\theta}|t \\approxeq \\mathcal{X}^{\\prime}$ where $t$ denotes the target outcome.\n\n:::\n\nIn order to assess the fidelity of counterfactuals, we propose the following two-step procedure:\n\n1) Generate samples $X_{\\theta}|y$ and $X^{\\prime}$ from $\\mathcal{X}_{\\theta}|t$ and $\\mathcal{X}^{\\prime}$, respectively.\n2) Compute the Maximum Mean Discrepancy (MMD) between $X_{\\theta}|y$ and $X^{\\prime}$. \n\nIf the computed value is different from zero, we can reject the null-hypothesis of fidelity.\n\n> Two challenges here: 1) implementing the sampling procedure in @grathwohl2020your; 2) it is unclear if MMD is really the right way to measure this. \n\n## Conformal Counterfactual Explanations\n\nIn @sec-fidelity, we have advocated for avoiding surrogate models in the context of Counterfactual Explanations. In this section, we introduce an alternative way to generate high-fidelity Counterfactual Explanations. In particular, we propose Conformal Counterfactual Explanations (ECCCo), that is Counterfactual Explanations that minimize the predictive uncertainty of conformal models. \n\n### Minimizing Predictive Uncertainty\n\n@schut2021generating demonstrated that the goal of generating realistic (plausible) counterfactuals can also be achieved by seeking counterfactuals that minimize the predictive uncertainty of the underlying black-box model. Similarly, @antoran2020getting ...\n\n- Problem: restricted to Bayesian models.\n- Solution: post-hoc predictive uncertainty quantification. In particular, Conformal Prediction. \n\n### Background on Conformal Prediction\n\n- Distribution-free, model-agnostic and scalable approach to predictive uncertainty quantification.\n- Conformal prediction is instance-based. So is CE. \n- Take any fitted model and turn it into a conformal model using calibration data.\n- Our approach, therefore, relaxes the restriction on the family of black-box models, at the cost of relying on a subset of the data. Arguably, data is often abundant and in most applications practitioners tend to hold out a test data set anyway. \n\n> Does the coverage guarantee carry over to counterfactuals?\n\n### Generating Conformal Counterfactuals\n\nWhile Conformal Prediction has recently grown in popularity, it does introduce a challenge in the context of classification: the predictions of Conformal Classifiers are set-valued and therefore difficult to work with, since they are, for example, non-differentiable. Fortunately, @stutz2022learning introduced carefully designed differentiable loss functions that make it possible to evaluate the performance of conformal predictions in training. We can leverage these recent advances in the context of gradient-based counterfactual search ...\n\n> Challenge: still need to implement these loss functions. \n\n## Experiments\n\n### Research Questions\n\n- Is CP alone enough to ensure realistic counterfactuals?\n- Do counterfactuals improve further as the models get better?\n- Do counterfactuals get more realistic as coverage\n- What happens as we vary coverage and setsize?\n- What happens as we improve the model robustness?\n- What happens as we improve the model's ability to incorporate predictive uncertainty (deep ensemble, laplace)?\n- What happens if we combine with DiCE, ClaPROAR, Gravitational?\n- What about CE robustness to endogenous shifts [@altmeyer2023endogenous]?\n\n- Benchmarking:\n - add PROBE [@pawelczyk2022probabilistically] into the mix.\n - compare travel costs to domain shits.\n\n> Nice to have: What about using Laplace Approximation, then Conformal Prediction? What about using Conformalised Laplace? \n\n## References\n\n", "supporting": [ "proposal_files/figure-html" ], diff --git a/_freeze/notebooks/synthetic/execute-results/html.json b/_freeze/notebooks/synthetic/execute-results/html.json index 682d0f96..273069ba 100644 --- a/_freeze/notebooks/synthetic/execute-results/html.json +++ b/_freeze/notebooks/synthetic/execute-results/html.json @@ -1,7 +1,7 @@ { "hash": "617bb13e20ec081d43c585fd80675156", "result": { - "markdown": "::: {.cell execution_count=1}\n``` {.julia .cell-code}\ninclude(\"notebooks/setup.jl\")\neval(setup_notebooks);\n```\n:::\n\n\n# Synthetic data\n\n::: {.cell execution_count=2}\n``` {.julia .cell-code}\n# Data:\ndatasets = Dict(\n :linearly_separable => load_linearly_separable(),\n :overlapping => load_overlapping(),\n :moons => load_moons(),\n :circles => load_circles(),\n :multi_class => load_multi_class(),\n)\n\n# Hyperparameters:\ncvgs = [0.5, 0.75, 0.95]\ntemps = [0.01, 0.1, 1.0]\nΛ = [0.0, 0.1, 1.0, 10.0]\nl2_λ = 0.1\n\n# Classifiers:\nepochs = 250\nlink_fun = relu\nlogreg = NeuralNetworkClassifier(builder=MLJFlux.Linear(σ=link_fun), epochs=epochs)\nmlp = NeuralNetworkClassifier(builder=MLJFlux.MLP(hidden=(32,), σ=link_fun), epochs=epochs)\nensmbl = EnsembleModel(model=mlp, n=5)\nclassifiers = Dict(\n # :logreg => logreg,\n :mlp => mlp,\n # :ensmbl => ensmbl,\n)\n\n# Search parameters:\ntarget = 2\nfactual = 1\nmax_iter = 50\ngradient_tol = 1e-2\nopt = Descent(0.01)\n```\n:::\n\n\n\n\n\n\n::: {.cell execution_count=5}\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n:::\n\n\n## Benchmark\n\n::: {.cell execution_count=6}\n``` {.julia .cell-code}\n# Benchmark generators:\ngenerators = Dict(\n :wachter => GenericGenerator(opt=opt, λ=l2_λ),\n :revise => REVISEGenerator(opt=opt, λ=l2_λ),\n :greedy => GreedyGenerator(),\n)\n\n# Untrained Models:\nmodels = Dict(Symbol(\"cov$(Int(100*cov))\") => ECCCE.ConformalModel(conformal_model(mlp; method=:simple_inductive, coverage=cov)) for cov in cvgs)\n\n# Measures:\nmeasures = [\n CounterfactualExplanations.distance,\n ECCCE.distance_from_energy,\n ECCCE.distance_from_targets,\n CounterfactualExplanations.validity,\n]\n```\n:::\n\n\n### Single CE\n\n\n\n\n\n::: {.cell execution_count=9}\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n:::\n\n\n### Full Benchmark\n\n::: {.cell execution_count=10}\n``` {.julia .cell-code}\nbmks = []\nfor (dataname, dataset) in datasets\n for λ in Λ, temp in temps\n _generators = deepcopy(generators)\n _generators[:cce] = ECCCEGenerator(temp=temp, λ=[l2_λ,λ], opt=opt)\n _generators[:energy] = ECCCE.EnergyDrivenGenerator(λ=[l2_λ,λ], opt=opt)\n _generators[:target] = ECCCE.TargetDrivenGenerator(λ=[l2_λ,λ], opt=opt)\n bmk = benchmark(\n dataset; \n models=deepcopy(models), \n generators=_generators, \n measure=measures,\n suppress_training=false, dataname=dataname,\n n_individuals=5,\n initialization=:identity,\n )\n bmk.evaluation.λ .= λ\n bmk.evaluation.temperature .= temp\n push!(bmks, bmk)\n end\nend\nbmk = reduce(vcat, bmks)\n```\n:::\n\n\n::: {.cell execution_count=11}\n``` {.julia .cell-code}\nCSV.write(joinpath(output_path, \"synthetic_benchmark.csv\"), bmk())\n```\n:::\n\n\n::: {.cell execution_count=12}\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n:::\n\n\n", + "markdown": "::: {.cell execution_count=1}\n``` {.julia .cell-code}\ninclude(\"notebooks/setup.jl\")\neval(setup_notebooks);\n```\n:::\n\n\n# Synthetic data\n\n::: {.cell execution_count=2}\n``` {.julia .cell-code}\n# Data:\ndatasets = Dict(\n :linearly_separable => load_linearly_separable(),\n :overlapping => load_overlapping(),\n :moons => load_moons(),\n :circles => load_circles(),\n :multi_class => load_multi_class(),\n)\n\n# Hyperparameters:\ncvgs = [0.5, 0.75, 0.95]\ntemps = [0.01, 0.1, 1.0]\nΛ = [0.0, 0.1, 1.0, 10.0]\nl2_λ = 0.1\n\n# Classifiers:\nepochs = 250\nlink_fun = relu\nlogreg = NeuralNetworkClassifier(builder=MLJFlux.Linear(σ=link_fun), epochs=epochs)\nmlp = NeuralNetworkClassifier(builder=MLJFlux.MLP(hidden=(32,), σ=link_fun), epochs=epochs)\nensmbl = EnsembleModel(model=mlp, n=5)\nclassifiers = Dict(\n # :logreg => logreg,\n :mlp => mlp,\n # :ensmbl => ensmbl,\n)\n\n# Search parameters:\ntarget = 2\nfactual = 1\nmax_iter = 50\ngradient_tol = 1e-2\nopt = Descent(0.01)\n```\n:::\n\n\n\n\n\n\n::: {.cell execution_count=5}\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n:::\n\n\n## Benchmark\n\n::: {.cell execution_count=6}\n``` {.julia .cell-code}\n# Benchmark generators:\ngenerators = Dict(\n :wachter => GenericGenerator(opt=opt, λ=l2_λ),\n :revise => REVISEGenerator(opt=opt, λ=l2_λ),\n :greedy => GreedyGenerator(),\n)\n\n# Untrained Models:\nmodels = Dict(Symbol(\"cov$(Int(100*cov))\") => ECCCo.ConformalModel(conformal_model(mlp; method=:simple_inductive, coverage=cov)) for cov in cvgs)\n\n# Measures:\nmeasures = [\n CounterfactualExplanations.distance,\n ECCCo.distance_from_energy,\n ECCCo.distance_from_targets,\n CounterfactualExplanations.validity,\n]\n```\n:::\n\n\n### Single CE\n\n\n\n\n\n::: {.cell execution_count=9}\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n:::\n\n\n### Full Benchmark\n\n::: {.cell execution_count=10}\n``` {.julia .cell-code}\nbmks = []\nfor (dataname, dataset) in datasets\n for λ in Λ, temp in temps\n _generators = deepcopy(generators)\n _generators[:cce] = ECCCoGenerator(temp=temp, λ=[l2_λ,λ], opt=opt)\n _generators[:energy] = ECCCo.EnergyDrivenGenerator(λ=[l2_λ,λ], opt=opt)\n _generators[:target] = ECCCo.TargetDrivenGenerator(λ=[l2_λ,λ], opt=opt)\n bmk = benchmark(\n dataset; \n models=deepcopy(models), \n generators=_generators, \n measure=measures,\n suppress_training=false, dataname=dataname,\n n_individuals=5,\n initialization=:identity,\n )\n bmk.evaluation.λ .= λ\n bmk.evaluation.temperature .= temp\n push!(bmks, bmk)\n end\nend\nbmk = reduce(vcat, bmks)\n```\n:::\n\n\n::: {.cell execution_count=11}\n``` {.julia .cell-code}\nCSV.write(joinpath(output_path, \"synthetic_benchmark.csv\"), bmk())\n```\n:::\n\n\n::: {.cell execution_count=12}\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n\n::: {.cell-output .cell-output-display}\n{}\n:::\n:::\n\n\n", "supporting": [ "synthetic_files" ], diff --git a/docs/notebooks/intro.html b/docs/notebooks/intro.html index 6a00699b..99c0a5a3 100644 --- a/docs/notebooks/intro.html +++ b/docs/notebooks/intro.html @@ -351,14 +351,14 @@ C(X_{\text{test}})=\{y:s(X_{\text{test}},y) \le \hat{q}\} </div> <p>We can generate samples from <span class="math inline">\(p_{\theta}(X|y)\)</span> following <span class="citation" data-cites="grathwohl2020your">Grathwohl et al. (<a href="references.html#ref-grathwohl2020your" role="doc-biblioref">2020</a>)</span>. In <a href="#fig-energy">Figure <span>2.2</span></a>, I have applied the methodology to our synthetic data.</p> <div class="cell" data-execution_count="6"> -<div class="sourceCode cell-code" id="cb5"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a>M <span class="op">=</span> ECCCE.<span class="fu">ConformalModel</span>(conf_model, mach.fitresult)</span> +<div class="sourceCode cell-code" id="cb5"><pre class="sourceCode julia code-with-copy"><code class="sourceCode julia"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a>M <span class="op">=</span> ECCCo.<span class="fu">ConformalModel</span>(conf_model, mach.fitresult)</span> <span id="cb5-2"><a href="#cb5-2" aria-hidden="true" tabindex="-1"></a></span> <span id="cb5-3"><a href="#cb5-3" aria-hidden="true" tabindex="-1"></a>niter <span class="op">=</span> <span class="fl">100</span></span> <span id="cb5-4"><a href="#cb5-4" aria-hidden="true" tabindex="-1"></a>nsamples <span class="op">=</span> <span class="fl">100</span></span> <span id="cb5-5"><a href="#cb5-5" aria-hidden="true" tabindex="-1"></a></span> <span id="cb5-6"><a href="#cb5-6" aria-hidden="true" tabindex="-1"></a>plts <span class="op">=</span> []</span> <span id="cb5-7"><a href="#cb5-7" aria-hidden="true" tabindex="-1"></a><span class="cf">for</span> (i,target) <span class="op">∈</span> <span class="fu">enumerate</span>(counterfactual_data.y_levels)</span> -<span id="cb5-8"><a href="#cb5-8" aria-hidden="true" tabindex="-1"></a> sampler <span class="op">=</span> ECCCE.<span class="fu">EnergySampler</span>(M, counterfactual_data, target; niter<span class="op">=</span>niter, nsamples<span class="op">=</span><span class="fl">100</span>)</span> +<span id="cb5-8"><a href="#cb5-8" aria-hidden="true" tabindex="-1"></a> sampler <span class="op">=</span> ECCCo.<span class="fu">EnergySampler</span>(M, counterfactual_data, target; niter<span class="op">=</span>niter, nsamples<span class="op">=</span><span class="fl">100</span>)</span> <span id="cb5-9"><a href="#cb5-9" aria-hidden="true" tabindex="-1"></a> Xgen <span class="op">=</span> <span class="fu">rand</span>(sampler, nsamples)</span> <span id="cb5-10"><a href="#cb5-10" aria-hidden="true" tabindex="-1"></a> plt <span class="op">=</span> Plots.<span class="fu">plot</span>(M, counterfactual_data; target<span class="op">=</span>target, zoom<span class="op">=-</span><span class="fl">3</span>,cbar<span class="op">=</span><span class="cn">false</span>)</span> <span id="cb5-11"><a href="#cb5-11" aria-hidden="true" tabindex="-1"></a> Plots.<span class="fu">scatter!</span>(Xgen[<span class="fl">1</span>,<span class="op">:</span>],Xgen[<span class="fl">2</span>,<span class="op">:</span>],alpha<span class="op">=</span><span class="fl">0.5</span>,color<span class="op">=</span>i,shape<span class="op">=:</span>star,label<span class="op">=</span><span class="st">"X|y=</span><span class="sc">$</span>target<span class="st">"</span>)</span> @@ -477,10 +477,10 @@ x^\prime = \arg \min_{x^\prime} \ell(M(x^\prime),t) + \lambda \mathbb{I}_{y^\pr <span id="cb10-9"><a href="#cb10-9" aria-hidden="true" tabindex="-1"></a></span> <span id="cb10-10"><a href="#cb10-10" aria-hidden="true" tabindex="-1"></a><span class="co"># Untrained Models:</span></span> <span id="cb10-11"><a href="#cb10-11" aria-hidden="true" tabindex="-1"></a>models <span class="op">=</span> <span class="fu">Dict</span>(</span> -<span id="cb10-12"><a href="#cb10-12" aria-hidden="true" tabindex="-1"></a> <span class="op">:</span>cov75 <span class="op">=></span> ECCCE.<span class="fu">ConformalModel</span>(<span class="fu">conformal_model</span>(clf; method<span class="op">=:</span>simple_inductive, coverage<span class="op">=</span><span class="fl">0.75</span>)),</span> -<span id="cb10-13"><a href="#cb10-13" aria-hidden="true" tabindex="-1"></a> <span class="op">:</span>cov80 <span class="op">=></span> ECCCE.<span class="fu">ConformalModel</span>(<span class="fu">conformal_model</span>(clf; method<span class="op">=:</span>simple_inductive, coverage<span class="op">=</span><span class="fl">0.80</span>)),</span> -<span id="cb10-14"><a href="#cb10-14" aria-hidden="true" tabindex="-1"></a> <span class="op">:</span>cov90 <span class="op">=></span> ECCCE.<span class="fu">ConformalModel</span>(<span class="fu">conformal_model</span>(clf; method<span class="op">=:</span>simple_inductive, coverage<span class="op">=</span><span class="fl">0.90</span>)),</span> -<span id="cb10-15"><a href="#cb10-15" aria-hidden="true" tabindex="-1"></a> <span class="op">:</span>cov99 <span class="op">=></span> ECCCE.<span class="fu">ConformalModel</span>(<span class="fu">conformal_model</span>(clf; method<span class="op">=:</span>simple_inductive, coverage<span class="op">=</span><span class="fl">0.99</span>)),</span> +<span id="cb10-12"><a href="#cb10-12" aria-hidden="true" tabindex="-1"></a> <span class="op">:</span>cov75 <span class="op">=></span> ECCCo.<span class="fu">ConformalModel</span>(<span class="fu">conformal_model</span>(clf; method<span class="op">=:</span>simple_inductive, coverage<span class="op">=</span><span class="fl">0.75</span>)),</span> +<span id="cb10-13"><a href="#cb10-13" aria-hidden="true" tabindex="-1"></a> <span class="op">:</span>cov80 <span class="op">=></span> ECCCo.<span class="fu">ConformalModel</span>(<span class="fu">conformal_model</span>(clf; method<span class="op">=:</span>simple_inductive, coverage<span class="op">=</span><span class="fl">0.80</span>)),</span> +<span id="cb10-14"><a href="#cb10-14" aria-hidden="true" tabindex="-1"></a> <span class="op">:</span>cov90 <span class="op">=></span> ECCCo.<span class="fu">ConformalModel</span>(<span class="fu">conformal_model</span>(clf; method<span class="op">=:</span>simple_inductive, coverage<span class="op">=</span><span class="fl">0.90</span>)),</span> +<span id="cb10-15"><a href="#cb10-15" aria-hidden="true" tabindex="-1"></a> <span class="op">:</span>cov99 <span class="op">=></span> ECCCo.<span class="fu">ConformalModel</span>(<span class="fu">conformal_model</span>(clf; method<span class="op">=:</span>simple_inductive, coverage<span class="op">=</span><span class="fl">0.99</span>)),</span> <span id="cb10-16"><a href="#cb10-16" aria-hidden="true" tabindex="-1"></a>)</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> </div> <p>Then we can simply loop over the datasets and eventually concatenate the results like so:</p> @@ -489,8 +489,8 @@ x^\prime = \arg \min_{x^\prime} \ell(M(x^\prime),t) + \lambda \mathbb{I}_{y^\pr <span id="cb11-2"><a href="#cb11-2" aria-hidden="true" tabindex="-1"></a>bmks <span class="op">=</span> []</span> <span id="cb11-3"><a href="#cb11-3" aria-hidden="true" tabindex="-1"></a>measures <span class="op">=</span> [</span> <span id="cb11-4"><a href="#cb11-4" aria-hidden="true" tabindex="-1"></a> CounterfactualExplanations.distance,</span> -<span id="cb11-5"><a href="#cb11-5" aria-hidden="true" tabindex="-1"></a> ECCCE.distance_from_energy,</span> -<span id="cb11-6"><a href="#cb11-6" aria-hidden="true" tabindex="-1"></a> ECCCE.distance_from_targets</span> +<span id="cb11-5"><a href="#cb11-5" aria-hidden="true" tabindex="-1"></a> ECCCo.distance_from_energy,</span> +<span id="cb11-6"><a href="#cb11-6" aria-hidden="true" tabindex="-1"></a> ECCCo.distance_from_targets</span> <span id="cb11-7"><a href="#cb11-7" aria-hidden="true" tabindex="-1"></a>]</span> <span id="cb11-8"><a href="#cb11-8" aria-hidden="true" tabindex="-1"></a><span class="cf">for</span> (dataname, dataset) <span class="kw">in</span> datasets</span> <span id="cb11-9"><a href="#cb11-9" aria-hidden="true" tabindex="-1"></a> bmk <span class="op">=</span> <span class="fu">benchmark</span>(</span> diff --git a/docs/notebooks/proposal.html b/docs/notebooks/proposal.html index 4d65db90..d527e1a4 100644 --- a/docs/notebooks/proposal.html +++ b/docs/notebooks/proposal.html @@ -253,7 +253,7 @@ div.csl-indent { </section> <section id="conformal-counterfactual-explanations" class="level2" data-number="1.2"> <h2 data-number="1.2" class="anchored" data-anchor-id="conformal-counterfactual-explanations"><span class="header-section-number">1.2</span> Conformal Counterfactual Explanations</h2> -<p>In <a href="#sec-fidelity"><span>Section 1.1.2</span></a>, we have advocated for avoiding surrogate models in the context of Counterfactual Explanations. In this section, we introduce an alternative way to generate high-fidelity Counterfactual Explanations. In particular, we propose Conformal Counterfactual Explanations (ECCCE), that is Counterfactual Explanations that minimize the predictive uncertainty of conformal models.</p> +<p>In <a href="#sec-fidelity"><span>Section 1.1.2</span></a>, we have advocated for avoiding surrogate models in the context of Counterfactual Explanations. In this section, we introduce an alternative way to generate high-fidelity Counterfactual Explanations. In particular, we propose Conformal Counterfactual Explanations (ECCCo), that is Counterfactual Explanations that minimize the predictive uncertainty of conformal models.</p> <section id="minimizing-predictive-uncertainty" class="level3" data-number="1.2.1"> <h3 data-number="1.2.1" class="anchored" data-anchor-id="minimizing-predictive-uncertainty"><span class="header-section-number">1.2.1</span> Minimizing Predictive Uncertainty</h3> <p><span class="citation" data-cites="schut2021generating">Schut et al. (<a href="references.html#ref-schut2021generating" role="doc-biblioref">2021</a>)</span> demonstrated that the goal of generating realistic (plausible) counterfactuals can also be achieved by seeking counterfactuals that minimize the predictive uncertainty of the underlying black-box model. Similarly, <span class="citation" data-cites="antoran2020getting">Antorán et al. (<a href="references.html#ref-antoran2020getting" role="doc-biblioref">2020</a>)</span> …</p> diff --git a/docs/notebooks/synthetic.html b/docs/notebooks/synthetic.html index ec5ffcc2..c058f1e5 100644 --- a/docs/notebooks/synthetic.html +++ b/docs/notebooks/synthetic.html @@ -330,13 +330,13 @@ code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warni <span id="cb3-6"><a href="#cb3-6" aria-hidden="true" tabindex="-1"></a>)</span> <span id="cb3-7"><a href="#cb3-7" aria-hidden="true" tabindex="-1"></a></span> <span id="cb3-8"><a href="#cb3-8" aria-hidden="true" tabindex="-1"></a><span class="co"># Untrained Models:</span></span> -<span id="cb3-9"><a href="#cb3-9" aria-hidden="true" tabindex="-1"></a>models <span class="op">=</span> <span class="fu">Dict</span>(<span class="fu">Symbol</span>(<span class="st">"cov</span><span class="sc">$</span>(<span class="fu">Int</span>(<span class="fl">100</span><span class="op">*</span>cov))<span class="st">"</span>) <span class="op">=></span> ECCCE.<span class="fu">ConformalModel</span>(<span class="fu">conformal_model</span>(mlp; method<span class="op">=:</span>simple_inductive, coverage<span class="op">=</span>cov)) <span class="cf">for</span> cov <span class="kw">in</span> cvgs)</span> +<span id="cb3-9"><a href="#cb3-9" aria-hidden="true" tabindex="-1"></a>models <span class="op">=</span> <span class="fu">Dict</span>(<span class="fu">Symbol</span>(<span class="st">"cov</span><span class="sc">$</span>(<span class="fu">Int</span>(<span class="fl">100</span><span class="op">*</span>cov))<span class="st">"</span>) <span class="op">=></span> ECCCo.<span class="fu">ConformalModel</span>(<span class="fu">conformal_model</span>(mlp; method<span class="op">=:</span>simple_inductive, coverage<span class="op">=</span>cov)) <span class="cf">for</span> cov <span class="kw">in</span> cvgs)</span> <span id="cb3-10"><a href="#cb3-10" aria-hidden="true" tabindex="-1"></a></span> <span id="cb3-11"><a href="#cb3-11" aria-hidden="true" tabindex="-1"></a><span class="co"># Measures:</span></span> <span id="cb3-12"><a href="#cb3-12" aria-hidden="true" tabindex="-1"></a>measures <span class="op">=</span> [</span> <span id="cb3-13"><a href="#cb3-13" aria-hidden="true" tabindex="-1"></a> CounterfactualExplanations.distance,</span> -<span id="cb3-14"><a href="#cb3-14" aria-hidden="true" tabindex="-1"></a> ECCCE.distance_from_energy,</span> -<span id="cb3-15"><a href="#cb3-15" aria-hidden="true" tabindex="-1"></a> ECCCE.distance_from_targets,</span> +<span id="cb3-14"><a href="#cb3-14" aria-hidden="true" tabindex="-1"></a> ECCCo.distance_from_energy,</span> +<span id="cb3-15"><a href="#cb3-15" aria-hidden="true" tabindex="-1"></a> ECCCo.distance_from_targets,</span> <span id="cb3-16"><a href="#cb3-16" aria-hidden="true" tabindex="-1"></a> CounterfactualExplanations.validity,</span> <span id="cb3-17"><a href="#cb3-17" aria-hidden="true" tabindex="-1"></a>]</span></code><button title="Copy to Clipboard" class="code-copy-button"><i class="bi"></i></button></pre></div> </div> @@ -397,9 +397,9 @@ code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warni <span id="cb4-2"><a href="#cb4-2" aria-hidden="true" tabindex="-1"></a><span class="cf">for</span> (dataname, dataset) <span class="kw">in</span> datasets</span> <span id="cb4-3"><a href="#cb4-3" aria-hidden="true" tabindex="-1"></a> <span class="cf">for</span> λ <span class="kw">in</span> Λ, temp <span class="kw">in</span> temps</span> <span id="cb4-4"><a href="#cb4-4" aria-hidden="true" tabindex="-1"></a> _generators <span class="op">=</span> <span class="fu">deepcopy</span>(generators)</span> -<span id="cb4-5"><a href="#cb4-5" aria-hidden="true" tabindex="-1"></a> _generators[<span class="op">:</span>cce] <span class="op">=</span> <span class="fu">ECCCEGenerator</span>(temp<span class="op">=</span>temp, λ<span class="op">=</span>[l2_λ,λ], opt<span class="op">=</span>opt)</span> -<span id="cb4-6"><a href="#cb4-6" aria-hidden="true" tabindex="-1"></a> _generators[<span class="op">:</span>energy] <span class="op">=</span> ECCCE.<span class="fu">EnergyDrivenGenerator</span>(λ<span class="op">=</span>[l2_λ,λ], opt<span class="op">=</span>opt)</span> -<span id="cb4-7"><a href="#cb4-7" aria-hidden="true" tabindex="-1"></a> _generators[<span class="op">:</span>target] <span class="op">=</span> ECCCE.<span class="fu">TargetDrivenGenerator</span>(λ<span class="op">=</span>[l2_λ,λ], opt<span class="op">=</span>opt)</span> +<span id="cb4-5"><a href="#cb4-5" aria-hidden="true" tabindex="-1"></a> _generators[<span class="op">:</span>cce] <span class="op">=</span> <span class="fu">ECCCoGenerator</span>(temp<span class="op">=</span>temp, λ<span class="op">=</span>[l2_λ,λ], opt<span class="op">=</span>opt)</span> +<span id="cb4-6"><a href="#cb4-6" aria-hidden="true" tabindex="-1"></a> _generators[<span class="op">:</span>energy] <span class="op">=</span> ECCCo.<span class="fu">EnergyDrivenGenerator</span>(λ<span class="op">=</span>[l2_λ,λ], opt<span class="op">=</span>opt)</span> +<span id="cb4-7"><a href="#cb4-7" aria-hidden="true" tabindex="-1"></a> _generators[<span class="op">:</span>target] <span class="op">=</span> ECCCo.<span class="fu">TargetDrivenGenerator</span>(λ<span class="op">=</span>[l2_λ,λ], opt<span class="op">=</span>opt)</span> <span id="cb4-8"><a href="#cb4-8" aria-hidden="true" tabindex="-1"></a> bmk <span class="op">=</span> <span class="fu">benchmark</span>(</span> <span id="cb4-9"><a href="#cb4-9" aria-hidden="true" tabindex="-1"></a> dataset; </span> <span id="cb4-10"><a href="#cb4-10" aria-hidden="true" tabindex="-1"></a> models<span class="op">=</span><span class="fu">deepcopy</span>(models), </span> diff --git a/docs/search.json b/docs/search.json index c097c74a..bf32aeaf 100644 --- a/docs/search.json +++ b/docs/search.json @@ -18,7 +18,7 @@ "href": "notebooks/proposal.html#conformal-counterfactual-explanations", "title": "1 High-Fidelity Counterfactual Explanations through Conformal Prediction", "section": "1.2 Conformal Counterfactual Explanations", - "text": "1.2 Conformal Counterfactual Explanations\nIn Section 1.1.2, we have advocated for avoiding surrogate models in the context of Counterfactual Explanations. In this section, we introduce an alternative way to generate high-fidelity Counterfactual Explanations. In particular, we propose Conformal Counterfactual Explanations (ECCCE), that is Counterfactual Explanations that minimize the predictive uncertainty of conformal models.\n\n1.2.1 Minimizing Predictive Uncertainty\nSchut et al. (2021) demonstrated that the goal of generating realistic (plausible) counterfactuals can also be achieved by seeking counterfactuals that minimize the predictive uncertainty of the underlying black-box model. Similarly, Antorán et al. (2020) …\n\nProblem: restricted to Bayesian models.\nSolution: post-hoc predictive uncertainty quantification. In particular, Conformal Prediction.\n\n\n\n1.2.2 Background on Conformal Prediction\n\nDistribution-free, model-agnostic and scalable approach to predictive uncertainty quantification.\nConformal prediction is instance-based. So is CE.\nTake any fitted model and turn it into a conformal model using calibration data.\nOur approach, therefore, relaxes the restriction on the family of black-box models, at the cost of relying on a subset of the data. Arguably, data is often abundant and in most applications practitioners tend to hold out a test data set anyway.\n\n\nDoes the coverage guarantee carry over to counterfactuals?\n\n\n\n1.2.3 Generating Conformal Counterfactuals\nWhile Conformal Prediction has recently grown in popularity, it does introduce a challenge in the context of classification: the predictions of Conformal Classifiers are set-valued and therefore difficult to work with, since they are, for example, non-differentiable. Fortunately, Stutz et al. (2022) introduced carefully designed differentiable loss functions that make it possible to evaluate the performance of conformal predictions in training. We can leverage these recent advances in the context of gradient-based counterfactual search …\n\nChallenge: still need to implement these loss functions." + "text": "1.2 Conformal Counterfactual Explanations\nIn Section 1.1.2, we have advocated for avoiding surrogate models in the context of Counterfactual Explanations. In this section, we introduce an alternative way to generate high-fidelity Counterfactual Explanations. In particular, we propose Conformal Counterfactual Explanations (ECCCo), that is Counterfactual Explanations that minimize the predictive uncertainty of conformal models.\n\n1.2.1 Minimizing Predictive Uncertainty\nSchut et al. (2021) demonstrated that the goal of generating realistic (plausible) counterfactuals can also be achieved by seeking counterfactuals that minimize the predictive uncertainty of the underlying black-box model. Similarly, Antorán et al. (2020) …\n\nProblem: restricted to Bayesian models.\nSolution: post-hoc predictive uncertainty quantification. In particular, Conformal Prediction.\n\n\n\n1.2.2 Background on Conformal Prediction\n\nDistribution-free, model-agnostic and scalable approach to predictive uncertainty quantification.\nConformal prediction is instance-based. So is CE.\nTake any fitted model and turn it into a conformal model using calibration data.\nOur approach, therefore, relaxes the restriction on the family of black-box models, at the cost of relying on a subset of the data. Arguably, data is often abundant and in most applications practitioners tend to hold out a test data set anyway.\n\n\nDoes the coverage guarantee carry over to counterfactuals?\n\n\n\n1.2.3 Generating Conformal Counterfactuals\nWhile Conformal Prediction has recently grown in popularity, it does introduce a challenge in the context of classification: the predictions of Conformal Classifiers are set-valued and therefore difficult to work with, since they are, for example, non-differentiable. Fortunately, Stutz et al. (2022) introduced carefully designed differentiable loss functions that make it possible to evaluate the performance of conformal predictions in training. We can leverage these recent advances in the context of gradient-based counterfactual search …\n\nChallenge: still need to implement these loss functions." }, { "objectID": "notebooks/proposal.html#experiments", @@ -60,7 +60,7 @@ "href": "notebooks/intro.html#fidelity-and-plausibility", "title": "2 ConformalGenerator", "section": "2.4 Fidelity and Plausibility", - "text": "2.4 Fidelity and Plausibility\nThe main evaluation criteria we are interested in are fidelity and plausibility. Interestingly, we could also consider using these measures as penalties in the counterfactual search.\n\n2.4.1 Fidelity\nWe propose to define fidelity as follows:\n\nDefinition 2.1 (High-Fidelity Counterfactuals) Let \\(\\mathcal{X}_{\\theta}|y = p_{\\theta}(X|y)\\) denote the class-conditional distribution of \\(X\\) defined by \\(\\theta\\). Then for \\(x^{\\prime}\\) to be considered a high-fidelity counterfactual, we need: \\(\\mathcal{X}_{\\theta}|t \\approxeq \\mathcal{X}^{\\prime}\\) where \\(t\\) denotes the target outcome.\n\nWe can generate samples from \\(p_{\\theta}(X|y)\\) following Grathwohl et al. (2020). In Figure 2.2, I have applied the methodology to our synthetic data.\n\nM = ECCCE.ConformalModel(conf_model, mach.fitresult)\n\nniter = 100\nnsamples = 100\n\nplts = []\nfor (i,target) ∈ enumerate(counterfactual_data.y_levels)\n sampler = ECCCE.EnergySampler(M, counterfactual_data, target; niter=niter, nsamples=100)\n Xgen = rand(sampler, nsamples)\n plt = Plots.plot(M, counterfactual_data; target=target, zoom=-3,cbar=false)\n Plots.scatter!(Xgen[1,:],Xgen[2,:],alpha=0.5,color=i,shape=:star,label=\"X|y=$target\")\n push!(plts, plt)\nend\nPlots.plot(plts..., layout=(1,length(plts)), size=(img_height*length(plts),img_height))\n\n\n\n\nFigure 2.2: Energy-based conditional samples.\n\n\n\n\nAs an evaluation metric and penalty, we could use the average distance of the counterfactual \\(x^{\\prime}\\) from these generated samples, for example.\n\n\n2.4.2 Plausibility\nWe propose to define plausibility as follows:\n\nDefinition 2.2 (Plausible Counterfactuals) Formally, let \\(\\mathcal{X}|t\\) denote the conditional distribution of samples in the target class. As before, we have \\(x^{\\prime}\\sim\\mathcal{X}^{\\prime}\\), then for \\(x^{\\prime}\\) to be considered a plausible counterfactual, we need: \\(\\mathcal{X}|t \\approxeq \\mathcal{X}^{\\prime}\\).\n\nAs an evaluation metric and penalty, we could use the average distance of the counterfactual \\(x^{\\prime}\\) from (potentially bootstrapped) training samples in the target class, for example." + "text": "2.4 Fidelity and Plausibility\nThe main evaluation criteria we are interested in are fidelity and plausibility. Interestingly, we could also consider using these measures as penalties in the counterfactual search.\n\n2.4.1 Fidelity\nWe propose to define fidelity as follows:\n\nDefinition 2.1 (High-Fidelity Counterfactuals) Let \\(\\mathcal{X}_{\\theta}|y = p_{\\theta}(X|y)\\) denote the class-conditional distribution of \\(X\\) defined by \\(\\theta\\). Then for \\(x^{\\prime}\\) to be considered a high-fidelity counterfactual, we need: \\(\\mathcal{X}_{\\theta}|t \\approxeq \\mathcal{X}^{\\prime}\\) where \\(t\\) denotes the target outcome.\n\nWe can generate samples from \\(p_{\\theta}(X|y)\\) following Grathwohl et al. (2020). In Figure 2.2, I have applied the methodology to our synthetic data.\n\nM = ECCCo.ConformalModel(conf_model, mach.fitresult)\n\nniter = 100\nnsamples = 100\n\nplts = []\nfor (i,target) ∈ enumerate(counterfactual_data.y_levels)\n sampler = ECCCo.EnergySampler(M, counterfactual_data, target; niter=niter, nsamples=100)\n Xgen = rand(sampler, nsamples)\n plt = Plots.plot(M, counterfactual_data; target=target, zoom=-3,cbar=false)\n Plots.scatter!(Xgen[1,:],Xgen[2,:],alpha=0.5,color=i,shape=:star,label=\"X|y=$target\")\n push!(plts, plt)\nend\nPlots.plot(plts..., layout=(1,length(plts)), size=(img_height*length(plts),img_height))\n\n\n\n\nFigure 2.2: Energy-based conditional samples.\n\n\n\n\nAs an evaluation metric and penalty, we could use the average distance of the counterfactual \\(x^{\\prime}\\) from these generated samples, for example.\n\n\n2.4.2 Plausibility\nWe propose to define plausibility as follows:\n\nDefinition 2.2 (Plausible Counterfactuals) Formally, let \\(\\mathcal{X}|t\\) denote the conditional distribution of samples in the target class. As before, we have \\(x^{\\prime}\\sim\\mathcal{X}^{\\prime}\\), then for \\(x^{\\prime}\\) to be considered a plausible counterfactual, we need: \\(\\mathcal{X}|t \\approxeq \\mathcal{X}^{\\prime}\\).\n\nAs an evaluation metric and penalty, we could use the average distance of the counterfactual \\(x^{\\prime}\\) from (potentially bootstrapped) training samples in the target class, for example." }, { "objectID": "notebooks/intro.html#counterfactual-explanations", @@ -81,14 +81,14 @@ "href": "notebooks/intro.html#benchmarks", "title": "2 ConformalGenerator", "section": "2.7 Benchmarks", - "text": "2.7 Benchmarks\n\n# Data:\ndatasets = Dict(\n :linearly_separable => load_linearly_separable(),\n :overlapping => load_overlapping(),\n :moons => load_moons(),\n :circles => load_circles(),\n :multi_class => load_multi_class(),\n)\n\n# Untrained Models:\nmodels = Dict(\n :cov75 => ECCCE.ConformalModel(conformal_model(clf; method=:simple_inductive, coverage=0.75)),\n :cov80 => ECCCE.ConformalModel(conformal_model(clf; method=:simple_inductive, coverage=0.80)),\n :cov90 => ECCCE.ConformalModel(conformal_model(clf; method=:simple_inductive, coverage=0.90)),\n :cov99 => ECCCE.ConformalModel(conformal_model(clf; method=:simple_inductive, coverage=0.99)),\n)\n\nThen we can simply loop over the datasets and eventually concatenate the results like so:\n\nusing CounterfactualExplanations.Evaluation: benchmark\nbmks = []\nmeasures = [\n CounterfactualExplanations.distance,\n ECCCE.distance_from_energy,\n ECCCE.distance_from_targets\n]\nfor (dataname, dataset) in datasets\n bmk = benchmark(\n dataset; \n models=deepcopy(models), \n generators=generators, \n measure=measures,\n suppress_training=false, dataname=dataname,\n n_individuals=10\n )\n push!(bmks, bmk)\nend\nbmk = reduce(vcat, bmks)\n\n\nf(ce) = CounterfactualExplanations.model_evaluation(ce.M, ce.data)\n@chain bmk() begin\n @group_by(model, generator, dataname, variable)\n @select(model, generator, dataname, ce, value)\n @mutate(performance = f(ce))\n @summarize(model=unique(model), generator=unique(generator), dataname=unique(dataname), performace=unique(performance), value=mean(value))\n @ungroup\n @filter(dataname == :multi_class)\n @filter(model == :cov99)\n @filter(variable == \"distance\")\nend\n\n\n\n\n\n\n\n(a) Circles.\n\n\n\n\n\n\n\n(b) Linearly Separable.\n\n\n\n\n\n\n\n(c) Moons.\n\n\n\n\n\n\n\n(d) Multi-class.\n\n\n\n\n\n\n\n(e) Overlapping.\n\n\n\nFigure 2.8: Benchmark results for the different generators.\n\n\n\n\n\n\nGrathwohl, Will, Kuan-Chieh Wang, Joern-Henrik Jacobsen, David Duvenaud, Mohammad Norouzi, and Kevin Swersky. 2020. “Your Classifier Is Secretly an Energy Based Model and You Should Treat It Like One.†In. https://openreview.net/forum?id=Hkxzx0NtDB.\n\n\nSchut, Lisa, Oscar Key, Rory Mc Grath, Luca Costabello, Bogdan Sacaleanu, Yarin Gal, et al. 2021. “Generating Interpretable Counterfactual Explanations By Implicit Minimisation of Epistemic and Aleatoric Uncertainties.†In International Conference on Artificial Intelligence and Statistics, 1756–64. PMLR.\n\n\nStutz, David, Krishnamurthy Dj Dvijotham, Ali Taylan Cemgil, and Arnaud Doucet. 2022. “Learning Optimal Conformal Classifiers.†In. https://openreview.net/forum?id=t8O-4LKFVx." + "text": "2.7 Benchmarks\n\n# Data:\ndatasets = Dict(\n :linearly_separable => load_linearly_separable(),\n :overlapping => load_overlapping(),\n :moons => load_moons(),\n :circles => load_circles(),\n :multi_class => load_multi_class(),\n)\n\n# Untrained Models:\nmodels = Dict(\n :cov75 => ECCCo.ConformalModel(conformal_model(clf; method=:simple_inductive, coverage=0.75)),\n :cov80 => ECCCo.ConformalModel(conformal_model(clf; method=:simple_inductive, coverage=0.80)),\n :cov90 => ECCCo.ConformalModel(conformal_model(clf; method=:simple_inductive, coverage=0.90)),\n :cov99 => ECCCo.ConformalModel(conformal_model(clf; method=:simple_inductive, coverage=0.99)),\n)\n\nThen we can simply loop over the datasets and eventually concatenate the results like so:\n\nusing CounterfactualExplanations.Evaluation: benchmark\nbmks = []\nmeasures = [\n CounterfactualExplanations.distance,\n ECCCo.distance_from_energy,\n ECCCo.distance_from_targets\n]\nfor (dataname, dataset) in datasets\n bmk = benchmark(\n dataset; \n models=deepcopy(models), \n generators=generators, \n measure=measures,\n suppress_training=false, dataname=dataname,\n n_individuals=10\n )\n push!(bmks, bmk)\nend\nbmk = reduce(vcat, bmks)\n\n\nf(ce) = CounterfactualExplanations.model_evaluation(ce.M, ce.data)\n@chain bmk() begin\n @group_by(model, generator, dataname, variable)\n @select(model, generator, dataname, ce, value)\n @mutate(performance = f(ce))\n @summarize(model=unique(model), generator=unique(generator), dataname=unique(dataname), performace=unique(performance), value=mean(value))\n @ungroup\n @filter(dataname == :multi_class)\n @filter(model == :cov99)\n @filter(variable == \"distance\")\nend\n\n\n\n\n\n\n\n(a) Circles.\n\n\n\n\n\n\n\n(b) Linearly Separable.\n\n\n\n\n\n\n\n(c) Moons.\n\n\n\n\n\n\n\n(d) Multi-class.\n\n\n\n\n\n\n\n(e) Overlapping.\n\n\n\nFigure 2.8: Benchmark results for the different generators.\n\n\n\n\n\n\nGrathwohl, Will, Kuan-Chieh Wang, Joern-Henrik Jacobsen, David Duvenaud, Mohammad Norouzi, and Kevin Swersky. 2020. “Your Classifier Is Secretly an Energy Based Model and You Should Treat It Like One.†In. https://openreview.net/forum?id=Hkxzx0NtDB.\n\n\nSchut, Lisa, Oscar Key, Rory Mc Grath, Luca Costabello, Bogdan Sacaleanu, Yarin Gal, et al. 2021. “Generating Interpretable Counterfactual Explanations By Implicit Minimisation of Epistemic and Aleatoric Uncertainties.†In International Conference on Artificial Intelligence and Statistics, 1756–64. PMLR.\n\n\nStutz, David, Krishnamurthy Dj Dvijotham, Ali Taylan Cemgil, and Arnaud Doucet. 2022. “Learning Optimal Conformal Classifiers.†In. https://openreview.net/forum?id=t8O-4LKFVx." }, { "objectID": "notebooks/synthetic.html#benchmark", "href": "notebooks/synthetic.html#benchmark", "title": "3 Synthetic data", "section": "3.1 Benchmark", - "text": "3.1 Benchmark\n\n# Benchmark generators:\ngenerators = Dict(\n :wachter => GenericGenerator(opt=opt, λ=l2_λ),\n :revise => REVISEGenerator(opt=opt, λ=l2_λ),\n :greedy => GreedyGenerator(),\n)\n\n# Untrained Models:\nmodels = Dict(Symbol(\"cov$(Int(100*cov))\") => ECCCE.ConformalModel(conformal_model(mlp; method=:simple_inductive, coverage=cov)) for cov in cvgs)\n\n# Measures:\nmeasures = [\n CounterfactualExplanations.distance,\n ECCCE.distance_from_energy,\n ECCCE.distance_from_targets,\n CounterfactualExplanations.validity,\n]\n\n\n3.1.1 Single CE\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n3.1.2 Full Benchmark\n\nbmks = []\nfor (dataname, dataset) in datasets\n for λ in Λ, temp in temps\n _generators = deepcopy(generators)\n _generators[:cce] = ECCCEGenerator(temp=temp, λ=[l2_λ,λ], opt=opt)\n _generators[:energy] = ECCCE.EnergyDrivenGenerator(λ=[l2_λ,λ], opt=opt)\n _generators[:target] = ECCCE.TargetDrivenGenerator(λ=[l2_λ,λ], opt=opt)\n bmk = benchmark(\n dataset; \n models=deepcopy(models), \n generators=_generators, \n measure=measures,\n suppress_training=false, dataname=dataname,\n n_individuals=5,\n initialization=:identity,\n )\n bmk.evaluation.λ .= λ\n bmk.evaluation.temperature .= temp\n push!(bmks, bmk)\n end\nend\nbmk = reduce(vcat, bmks)\n\n\nCSV.write(joinpath(output_path, \"synthetic_benchmark.csv\"), bmk())" + "text": "3.1 Benchmark\n\n# Benchmark generators:\ngenerators = Dict(\n :wachter => GenericGenerator(opt=opt, λ=l2_λ),\n :revise => REVISEGenerator(opt=opt, λ=l2_λ),\n :greedy => GreedyGenerator(),\n)\n\n# Untrained Models:\nmodels = Dict(Symbol(\"cov$(Int(100*cov))\") => ECCCo.ConformalModel(conformal_model(mlp; method=:simple_inductive, coverage=cov)) for cov in cvgs)\n\n# Measures:\nmeasures = [\n CounterfactualExplanations.distance,\n ECCCo.distance_from_energy,\n ECCCo.distance_from_targets,\n CounterfactualExplanations.validity,\n]\n\n\n3.1.1 Single CE\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n3.1.2 Full Benchmark\n\nbmks = []\nfor (dataname, dataset) in datasets\n for λ in Λ, temp in temps\n _generators = deepcopy(generators)\n _generators[:cce] = ECCCoGenerator(temp=temp, λ=[l2_λ,λ], opt=opt)\n _generators[:energy] = ECCCo.EnergyDrivenGenerator(λ=[l2_λ,λ], opt=opt)\n _generators[:target] = ECCCo.TargetDrivenGenerator(λ=[l2_λ,λ], opt=opt)\n bmk = benchmark(\n dataset; \n models=deepcopy(models), \n generators=_generators, \n measure=measures,\n suppress_training=false, dataname=dataname,\n n_individuals=5,\n initialization=:identity,\n )\n bmk.evaluation.λ .= λ\n bmk.evaluation.temperature .= temp\n push!(bmks, bmk)\n end\nend\nbmk = reduce(vcat, bmks)\n\n\nCSV.write(joinpath(output_path, \"synthetic_benchmark.csv\"), bmk())" }, { "objectID": "notebooks/references.html", diff --git a/notebooks/Manifest.toml b/notebooks/Manifest.toml index d5d8d17a..6dbe102c 100644 --- a/notebooks/Manifest.toml +++ b/notebooks/Manifest.toml @@ -496,7 +496,7 @@ git-tree-sha1 = "5837a837389fccf076445fce071c8ddaea35a566" uuid = "fa6b7ba4-c1ee-5f82-b5fc-ecf0adba8f74" version = "0.6.8" -[[deps.ECCCE]] +[[deps.ECCCo]] deps = ["CategoricalArrays", "ChainRules", "ConformalPrediction", "CounterfactualExplanations", "Distances", "Distributions", "Flux", "JointEnergyModels", "LinearAlgebra", "MLJBase", "MLJEnsembles", "MLJFlux", "MLJModelInterface", "MLUtils", "Parameters", "PkgTemplates", "Plots", "Random", "SliceMap", "Statistics", "StatsBase", "StatsPlots", "Term"] path = ".." uuid = "0232c203-4013-4b0d-ad96-43e3e11ac3bf" diff --git a/notebooks/Project.toml b/notebooks/Project.toml index 5e61dae4..9d63873a 100644 --- a/notebooks/Project.toml +++ b/notebooks/Project.toml @@ -1,6 +1,6 @@ [deps] AlgebraOfGraphics = "cbdf2221-f076-402e-a563-3d30da359d67" -ECCCE = "0232c203-4013-4b0d-ad96-43e3e11ac3bf" +ECCCo = "0232c203-4013-4b0d-ad96-43e3e11ac3bf" CSV = "336ed68f-0bac-5ca0-87d4-7b16caf5d00b" CairoMakie = "13f3f980-e62b-5c42-98c6-ff1f3baf88f0" CategoricalDistributions = "af321ab8-2d2e-40a6-b165-3d674595d28e" diff --git a/notebooks/intro.qmd b/notebooks/intro.qmd index 1c2ad272..b146559f 100644 --- a/notebooks/intro.qmd +++ b/notebooks/intro.qmd @@ -122,14 +122,14 @@ We can generate samples from $p_{\theta}(X|y)$ following @grathwohl2020your. In #| label: fig-energy #| output: true -M = ECCCE.ConformalModel(conf_model, mach.fitresult) +M = ECCCo.ConformalModel(conf_model, mach.fitresult) niter = 100 nsamples = 100 plts = [] for (i,target) ∈ enumerate(counterfactual_data.y_levels) - sampler = ECCCE.EnergySampler(M, counterfactual_data, target; niter=niter, nsamples=100) + sampler = ECCCo.EnergySampler(M, counterfactual_data, target; niter=niter, nsamples=100) Xgen = rand(sampler, nsamples) plt = Plots.plot(M, counterfactual_data; target=target, zoom=-3,cbar=false) Plots.scatter!(Xgen[1,:],Xgen[2,:],alpha=0.5,color=i,shape=:star,label="X|y=$target") @@ -294,11 +294,11 @@ Plots.plot(plts..., layout=(length(cvgs),length(cvgs)), size=(2img_height*length niter = 100 nsamples = 100 -M = ECCCE.ConformalModel(conf_model, mach.fitresult; likelihood=:classification_multi) +M = ECCCo.ConformalModel(conf_model, mach.fitresult; likelihood=:classification_multi) plts = [] for target ∈ counterfactual_data.y_levels - sampler = ECCCE.EnergySampler(M, counterfactual_data, target; niter=niter, nsamples=100) + sampler = ECCCo.EnergySampler(M, counterfactual_data, target; niter=niter, nsamples=100) Xgen = rand(sampler, nsamples) plt = Plots.plot(M, counterfactual_data; target=target, zoom=-0.5,cbar=false) Plots.scatter!(Xgen[1,:],Xgen[2,:],alpha=0.5,color=target,shape=:star,label="X|y=$target") @@ -354,10 +354,10 @@ datasets = Dict( # Untrained Models: models = Dict( - :cov75 => ECCCE.ConformalModel(conformal_model(clf; method=:simple_inductive, coverage=0.75)), - :cov80 => ECCCE.ConformalModel(conformal_model(clf; method=:simple_inductive, coverage=0.80)), - :cov90 => ECCCE.ConformalModel(conformal_model(clf; method=:simple_inductive, coverage=0.90)), - :cov99 => ECCCE.ConformalModel(conformal_model(clf; method=:simple_inductive, coverage=0.99)), + :cov75 => ECCCo.ConformalModel(conformal_model(clf; method=:simple_inductive, coverage=0.75)), + :cov80 => ECCCo.ConformalModel(conformal_model(clf; method=:simple_inductive, coverage=0.80)), + :cov90 => ECCCo.ConformalModel(conformal_model(clf; method=:simple_inductive, coverage=0.90)), + :cov99 => ECCCo.ConformalModel(conformal_model(clf; method=:simple_inductive, coverage=0.99)), ) ``` @@ -369,8 +369,8 @@ using CounterfactualExplanations.Evaluation: benchmark bmks = [] measures = [ CounterfactualExplanations.distance, - ECCCE.distance_from_energy, - ECCCE.distance_from_targets + ECCCo.distance_from_energy, + ECCCo.distance_from_targets ] for (dataname, dataset) in datasets bmk = benchmark( diff --git a/notebooks/mnist.qmd b/notebooks/mnist.qmd index d26f3ca6..5e7f7aa6 100644 --- a/notebooks/mnist.qmd +++ b/notebooks/mnist.qmd @@ -33,7 +33,7 @@ First, let's create a couple of image classifier architectures: epochs = 100 batch_size = minimum([Int(round(n_obs/10)), 128]) n_hidden = 32 -activation = Flux.relu +activation = Flux.swish # builder = MLJFlux.@builder Flux.Chain( # Dense(n_in, n_hidden, activation), # Dense(n_hidden, n_hidden, activation), @@ -43,7 +43,7 @@ activation = Flux.relu # # BatchNorm(n_hidden, activation), # Dense(n_hidden, n_out), # ) -builder = MLJFlux.Short(n_hidden=n_hidden, dropout=0.2, σ=activation) +builder = MLJFlux.Short(n_hidden=n_hidden, dropout=0.1, σ=activation) # builder = MLJFlux.MLP( # hidden=( # n_hidden, @@ -52,7 +52,7 @@ builder = MLJFlux.Short(n_hidden=n_hidden, dropout=0.2, σ=activation) # ), # σ=activation # ) -α = [1.0,1.0,1e-2] +α = [1.0,1.0,1e-1] # Simple MLP: mlp = NeuralNetworkClassifier( @@ -93,13 +93,13 @@ cov = .95 conf_model = conformal_model(jem; method=:adaptive_inductive, coverage=cov) mach = machine(conf_model, X, labels) fit!(mach) -M = ECCCE.ConformalModel(mach.model, mach.fitresult) +M = ECCCo.ConformalModel(mach.model, mach.fitresult) ``` ```{julia} if mach.model.model isa JointEnergyModels.JointEnergyClassifier jem = mach.model.model.jem - n_iter = 100 + n_iter = 500 _w = 1500 plts = [] neach = 10 @@ -151,12 +151,12 @@ ce_jsma = generate_counterfactual( initialization=:identity, ) -# ECCCE: +# ECCCo: λ=[0.0,1.0] temp=0.01 -# Generate counterfactual using ECCCE generator: -generator = ECCCEGenerator( +# Generate counterfactual using ECCCo generator: +generator = CCEGenerator( λ=λ, temp=temp, opt=Flux.Optimise.Adam(), @@ -168,8 +168,8 @@ ce_conformal = generate_counterfactual( converge_when=:generator_conditions, ) -# Generate counterfactual using ECCCE generator: -generator = ECCCEGenerator( +# Generate counterfactual using ECCCo generator: +generator = CCEGenerator( λ=λ, temp=temp, opt=CounterfactualExplanations.Generators.JSMADescent(η=1.0), @@ -191,7 +191,92 @@ p1 = Plots.plot( plts = [p1] ces = [ce_wachter, ce_conformal, ce_jsma, ce_conformal_jsma] -_names = ["Wachter", "ECCCE", "JSMA", "ECCCE-JSMA"] +_names = ["Wachter", "ECCCo", "JSMA", "ECCCo-JSMA"] +for x in zip(ces, _names) + ce, _name = (x[1],x[2]) + x = CounterfactualExplanations.counterfactual(ce) + _phat = target_probs(ce) + _title = "$_name (p̂=$(round(_phat[1]; digits=3)))" + plt = Plots.plot( + convert2image(MNIST, reshape(x,28,28)), + axis=nothing, + size=(img_height, img_height), + title=_title + ) + plts = [plts..., plt] +end +plt = Plots.plot(plts...; size=(img_height*length(plts),img_height), layout=(1,length(plts))) +display(plt) +savefig(plt, joinpath(www_path, "cce_mnist.png")) +``` + +```{julia} +# Random.seed!(1234) + +# Set up search: +factual_label = 8 +x = reshape(counterfactual_data.X[:,rand(findall(predict_label(M, counterfactual_data).==factual_label))],input_dim,1) +target = 3 +factual = predict_label(M, counterfactual_data, x)[1] +γ = 0.5 +T = 100 + +# Generate counterfactual using generic generator: +generator = GenericGenerator(opt=Flux.Optimise.Adam(),) +ce_wachter = generate_counterfactual( + x, target, counterfactual_data, M, generator; + decision_threshold=γ, max_iter=T, + initialization=:identity, +) + +generator = GreedyGenerator(η=1.0) +ce_jsma = generate_counterfactual( + x, target, counterfactual_data, M, generator; + decision_threshold=γ, max_iter=T, + initialization=:identity, +) + +# ECCCo: +λ=[0.0,1.0,1.0] +temp=0.01 + +# Generate counterfactual using ECCCo generator: +generator = ECCCoGenerator( + λ=λ, + temp=temp, + opt=Flux.Optimise.Adam(), +) +ce_conformal = generate_counterfactual( + x, target, counterfactual_data, M, generator; + decision_threshold=γ, max_iter=T, + initialization=:identity, + converge_when=:generator_conditions, +) + +# Generate counterfactual using ECCCo generator: +generator = ECCCoGenerator( + λ=λ, + temp=temp, + opt=CounterfactualExplanations.Generators.JSMADescent(η=1.0), +) +ce_conformal_jsma = generate_counterfactual( + x, target, counterfactual_data, M, generator; + decision_threshold=γ, max_iter=T, + initialization=:identity, + converge_when=:generator_conditions, +) + +# Plot: +p1 = Plots.plot( + convert2image(MNIST, reshape(x,28,28)), + axis=nothing, + size=(img_height, img_height), + title="Factual" +) +plts = [p1] + +ces = [ce_wachter, ce_conformal, ce_jsma, ce_conformal_jsma] +_names = ["Wachter", "ECCCo", "JSMA", "ECCCo-JSMA"] for x in zip(ces, _names) ce, _name = (x[1],x[2]) x = CounterfactualExplanations.counterfactual(ce) @@ -226,8 +311,8 @@ generators = Dict( # Measures: measures = [ CounterfactualExplanations.distance, - ECCCE.distance_from_energy, - ECCCE.distance_from_targets, + ECCCo.distance_from_energy, + ECCCo.distance_from_targets, CounterfactualExplanations.validity, ] ``` \ No newline at end of file diff --git a/notebooks/proposal.qmd b/notebooks/proposal.qmd index bdbd45b3..25110879 100644 --- a/notebooks/proposal.qmd +++ b/notebooks/proposal.qmd @@ -188,7 +188,7 @@ If the computed value is different from zero, we can reject the null-hypothesis ## Conformal Counterfactual Explanations -In @sec-fidelity, we have advocated for avoiding surrogate models in the context of Counterfactual Explanations. In this section, we introduce an alternative way to generate high-fidelity Counterfactual Explanations. In particular, we propose Conformal Counterfactual Explanations (ECCCE), that is Counterfactual Explanations that minimize the predictive uncertainty of conformal models. +In @sec-fidelity, we have advocated for avoiding surrogate models in the context of Counterfactual Explanations. In this section, we introduce an alternative way to generate high-fidelity Counterfactual Explanations. In particular, we propose Conformal Counterfactual Explanations (ECCCo), that is Counterfactual Explanations that minimize the predictive uncertainty of conformal models. ### Minimizing Predictive Uncertainty diff --git a/notebooks/setup.jl b/notebooks/setup.jl index 5997cae6..a377a588 100644 --- a/notebooks/setup.jl +++ b/notebooks/setup.jl @@ -6,8 +6,8 @@ setup_notebooks = quote using AlgebraOfGraphics using AlgebraOfGraphics: Violin, BoxPlot, BarPlot using CairoMakie - using ECCCE - using ECCCE: set_size_penalty, distance_from_energy, distance_from_targets + using ECCCo + using ECCCo: set_size_penalty, distance_from_energy, distance_from_targets using Chain: @chain using ConformalPrediction using CounterfactualExplanations diff --git a/notebooks/synthetic.qmd b/notebooks/synthetic.qmd index 0ac30edb..620d9cc9 100644 --- a/notebooks/synthetic.qmd +++ b/notebooks/synthetic.qmd @@ -60,16 +60,16 @@ for (dataname, data) in datasets conf_model = conformal_model(clf; method=:simple_inductive, coverage=cov) mach = machine(conf_model, X, y) fit!(mach) - M = ECCCE.ConformalModel(mach.model, mach.fitresult) + M = ECCCo.ConformalModel(mach.model, mach.fitresult) - # Set up ECCCE: + # Set up ECCCo: factual_label = predict_label(M, data, x)[1] target_label = data.y_levels[data.y_levels .!= factual_label][1] for λ in Λ, temp in temps - # ECCCE for given classifier, coverage, temperature and λ: - generator = ECCCEGenerator(temp=temp, λ=[l2_λ,λ], opt=opt) + # ECCCo for given classifier, coverage, temperature and λ: + generator = ECCCoGenerator(temp=temp, λ=[l2_λ,λ], opt=opt) @assert predict_label(M, data, x) != target_label ce = try generate_counterfactual( @@ -158,13 +158,13 @@ generators = Dict( ) # Untrained Models: -models = Dict(Symbol("cov$(Int(100*cov))") => ECCCE.ConformalModel(conformal_model(mlp; method=:simple_inductive, coverage=cov)) for cov in cvgs) +models = Dict(Symbol("cov$(Int(100*cov))") => ECCCo.ConformalModel(conformal_model(mlp; method=:simple_inductive, coverage=cov)) for cov in cvgs) # Measures: measures = [ CounterfactualExplanations.distance, - ECCCE.distance_from_energy, - ECCCE.distance_from_targets, + ECCCo.distance_from_energy, + ECCCo.distance_from_targets, CounterfactualExplanations.validity, ] ``` @@ -187,7 +187,7 @@ for (dataname, data) in datasets # Model training: M = train(M, data) - # Set up ECCCE: + # Set up ECCCo: factual_label = predict_label(M, data, x)[1] target_label = data.y_levels[data.y_levels .!= factual_label][1] @@ -195,13 +195,13 @@ for (dataname, data) in datasets # Generators: _generators = deepcopy(generators) - _generators[:cce] = ECCCEGenerator(temp=_temp, λ=[l2_λ,λ], opt=opt) - _generators[:energy] = ECCCE.EnergyDrivenGenerator(λ=[l2_λ,λ], opt=opt) - _generators[:target] = ECCCE.TargetDrivenGenerator(λ=[l2_λ,λ], opt=opt) + _generators[:cce] = ECCCoGenerator(temp=_temp, λ=[l2_λ,λ], opt=opt) + _generators[:energy] = ECCCo.EnergyDrivenGenerator(λ=[l2_λ,λ], opt=opt) + _generators[:target] = ECCCo.TargetDrivenGenerator(λ=[l2_λ,λ], opt=opt) for (gen_name, gen) in _generators - # ECCCE for given models, λ and generator: + # ECCCo for given models, λ and generator: @assert predict_label(M, data, x) != target_label ce = try generate_counterfactual( @@ -300,9 +300,9 @@ bmks = [] for (dataname, dataset) in datasets for λ in Λ, temp in temps _generators = deepcopy(generators) - _generators[:cce] = ECCCEGenerator(temp=temp, λ=[l2_λ,λ], opt=opt) - _generators[:energy] = ECCCE.EnergyDrivenGenerator(λ=[l2_λ,λ], opt=opt) - _generators[:target] = ECCCE.TargetDrivenGenerator(λ=[l2_λ,λ], opt=opt) + _generators[:cce] = ECCCoGenerator(temp=temp, λ=[l2_λ,λ], opt=opt) + _generators[:energy] = ECCCo.EnergyDrivenGenerator(λ=[l2_λ,λ], opt=opt) + _generators[:target] = ECCCo.TargetDrivenGenerator(λ=[l2_λ,λ], opt=opt) bmk = benchmark( dataset; models=deepcopy(models), diff --git a/paper/paper.pdf b/paper/paper.pdf index 6a82e2a3a87f7b983aca74527c0f3c31e0276166..2ba71c2968b35cca31816ccb45be28b071acf7fa 100644 GIT binary patch delta 80571 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 O(5$fJ<l>4Fu>T8K-(S4| delta 80631 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 diff --git a/paper/paper.tex b/paper/paper.tex index 13799de7..bd18cf2a 100644 --- a/paper/paper.tex +++ b/paper/paper.tex @@ -45,7 +45,7 @@ \newtheorem{definition}{Definition}[section] -\title{Plausibility isn't all you need: Conformal Counterfactual Explanations} +\title{ECCCos from the Black Box: Letting Models speak for Themselves} % The \author macro works with any number of authors. There are two commands @@ -266,7 +266,7 @@ The fact that conformal classifiers produce set-valued predictions introduces a where $\kappa \in \{0,1\}$ is a hyper-parameter and $C_{\theta,\mathbf{y}}(\mathbf{x}_i;\alpha)$ can be interpreted as the probability of label $\mathbf{y}$ being included in the prediction set. Formally, it is defined as $C_{\theta,\mathbf{y}}(\mathbf{x}_i;\alpha):=\sigma\left((s(\mathbf{x}_i,\mathbf{y})-\alpha) T^{-1}\right)$ for $\mathbf{y}\in\mathcal{Y}$ where $\sigma$ is the sigmoid function and $T$ is a hyper-parameter used for temperature scaling \citep{stutz2022learning}. -Penalizing the set size in this way is in principal enough to train efficient conformal classifiers \citep{stutz2022learning}. As we explained above, the set size is also closely linked to predictive uncertainty at the local level. This makes the smooth penalty defined in Equation~\ref{eq:setsize} useful in the context of meeting our objective of generating plausible counterfactuals. In particular, we adapt Equation~\ref{eq:general} to define the baseline objective for Conformal Counterfactual Explanations (ECCCE): +Penalizing the set size in this way is in principal enough to train efficient conformal classifiers \citep{stutz2022learning}. As we explained above, the set size is also closely linked to predictive uncertainty at the local level. This makes the smooth penalty defined in Equation~\ref{eq:setsize} useful in the context of meeting our objective of generating plausible counterfactuals. In particular, we adapt Equation~\ref{eq:general} to define the baseline objective for Conformal Counterfactual Explanations (ECCCo): \begin{equation}\label{eq:cce} \begin{aligned} @@ -276,7 +276,7 @@ Penalizing the set size in this way is in principal enough to train efficient co Since we can still retrieve unperturbed softmax outputs from our conformal classifier $M_{\theta}$, we are free to work with any loss function of our choice. For example, we could use standard cross-entropy for $\text{yloss}$. -In order to generate prediction sets $C_{\theta}(f(\mathbf{Z}^\prime);\alpha)$ for any Black Box Model we merely need to perform a single calibration pass through a holdout set $\mathcal{D}_{\text{cal}}$. Arguably, data is typically abundant and in most applications practitioners tend to hold out a test data set anyway. Our proposed approach for ECCCE therefore removes the restriction on the family of predictive models, at the small cost of reserving a subset of the available data for calibration. +In order to generate prediction sets $C_{\theta}(f(\mathbf{Z}^\prime);\alpha)$ for any Black Box Model we merely need to perform a single calibration pass through a holdout set $\mathcal{D}_{\text{cal}}$. Arguably, data is typically abundant and in most applications practitioners tend to hold out a test data set anyway. Our proposed approach for ECCCo therefore removes the restriction on the family of predictive models, at the small cost of reserving a subset of the available data for calibration. \section{Experiments} diff --git a/src/ECCCE.jl b/src/ECCCo.jl similarity index 71% rename from src/ECCCE.jl rename to src/ECCCo.jl index 8a031fff..82c901d7 100644 --- a/src/ECCCE.jl +++ b/src/ECCCo.jl @@ -1,4 +1,4 @@ -module ECCCE +module ECCCo using CounterfactualExplanations import MLJModelInterface as MMI @@ -9,6 +9,6 @@ include("losses.jl") include("generator.jl") include("sampling.jl") -export ECCCEGenerator, EnergySampler, set_size_penalty, distance_from_energy +export ECCCoGenerator, EnergySampler, set_size_penalty, distance_from_energy end \ No newline at end of file diff --git a/src/generator.jl b/src/generator.jl index ac598d48..2dc3e460 100644 --- a/src/generator.jl +++ b/src/generator.jl @@ -1,17 +1,17 @@ using CounterfactualExplanations.Objectives -"Constructor for `ECCCEGenerator`." -function ECCCEGenerator(; λ::Union{AbstractFloat,Vector{<:AbstractFloat}}=[0.1, 1.0], κ::Real=1.0, temp::Real=0.05, kwargs...) +"Constructor for `ECCCoGenerator`." +function ECCCoGenerator(; λ::Union{AbstractFloat,Vector{<:AbstractFloat}}=[0.1, 1.0], κ::Real=1.0, temp::Real=0.05, kwargs...) function _set_size_penalty(ce::AbstractCounterfactualExplanation) - return ECCCE.set_size_penalty(ce; κ=κ, temp=temp) + return ECCCo.set_size_penalty(ce; κ=κ, temp=temp) end _penalties = [Objectives.distance_l2, _set_size_penalty] λ = λ isa AbstractFloat ? [0.0, λ] : λ return Generator(; penalty=_penalties, λ=λ, kwargs...) end -"Constructor for `ECECCCEGenerator`: Energy Constrained Conformal Counterfactual Explanation Generator." -function ECECCCEGenerator(; +"Constructor for `ECECCCoGenerator`: Energy Constrained Conformal Counterfactual Explanation Generator." +function ECECCCoGenerator(; λ::Union{AbstractFloat,Vector{<:AbstractFloat}}=[0.1, 1.0, 1.0], κ::Real=1.0, temp::Real=0.5, @@ -21,23 +21,23 @@ function ECECCCEGenerator(; kwargs... ) function _set_size_penalty(ce::AbstractCounterfactualExplanation) - return ECCCE.set_size_penalty(ce; κ=κ, temp=temp) + return ECCCo.set_size_penalty(ce; κ=κ, temp=temp) end - _penalties = [Objectives.distance_l2, _set_size_penalty, ECCCE.distance_from_energy] + _penalties = [Objectives.distance_l2, _set_size_penalty, ECCCo.distance_from_energy] λ = λ isa AbstractFloat ? [0.0, λ, λ] : λ return Generator(; penalty=_penalties, λ=λ, opt=opt, kwargs...) end "Constructor for `EnergyDrivenGenerator`." function EnergyDrivenGenerator(; λ::Union{AbstractFloat,Vector{<:AbstractFloat}}=[0.1, 1.0], kwargs...) - _penalties = [Objectives.distance_l2, ECCCE.distance_from_energy] + _penalties = [Objectives.distance_l2, ECCCo.distance_from_energy] λ = λ isa AbstractFloat ? [0.0, λ] : λ return Generator(; penalty=_penalties, λ=λ, kwargs...) end "Constructor for `TargetDrivenGenerator`." function TargetDrivenGenerator(; λ::Union{AbstractFloat,Vector{<:AbstractFloat}}=[0.1, 1.0], kwargs...) - _penalties = [Objectives.distance_l2, ECCCE.distance_from_targets] + _penalties = [Objectives.distance_l2, ECCCo.distance_from_targets] λ = λ isa AbstractFloat ? [0.0, λ] : λ return Generator(; penalty=_penalties, λ=λ, kwargs...) end \ No newline at end of file diff --git a/src/penalties.jl b/src/penalties.jl index 37474c9e..81b953fe 100644 --- a/src/penalties.jl +++ b/src/penalties.jl @@ -42,7 +42,7 @@ function distance_from_energy( ignore_derivatives() do _dict = ce.params if !(:energy_sampler ∈ collect(keys(_dict))) - _dict[:energy_sampler] = ECCCE.EnergySampler(ce; kwargs...) + _dict[:energy_sampler] = ECCCo.EnergySampler(ce; kwargs...) end sampler = _dict[:energy_sampler] push!(conditional_samples, rand(sampler, n; from_buffer=from_buffer)) diff --git a/test/runtests.jl b/test/runtests.jl index 569772e4..2967ba33 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -1,6 +1,6 @@ -using ECCCE +using ECCCo using Test -@testset "ECCCE.jl" begin +@testset "ECCCo.jl" begin # Write your tests here. end diff --git a/www/cce_mnist.png b/www/cce_mnist.png index 3db6423c613ebc10174d84b0ae8f6f3cf8601ff0..55ff8d5650856abe43798dcd34a10da9de1c34f0 100644 GIT binary patch literal 23455 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 aP(-r|&8-45)e%6I%>w;{KWX-(Xa5VfWe~6c literal 22069 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 NmXH(A6ua~Ae*p}e%R~SG -- GitLab