diff --git a/dimod/embedding/transforms.py b/dimod/embedding/transforms.py
index b72dbda6..4acba9fe 100644
--- a/dimod/embedding/transforms.py
+++ b/dimod/embedding/transforms.py
@@ -23,7 +23,7 @@ import numpy as np
 from six import iteritems, itervalues
 
 from dimod.binary_quadratic_model import BinaryQuadraticModel
-from dimod.embedding.chain_breaks import majority_vote
+from dimod.embedding.chain_breaks import majority_vote, broken_chains
 from dimod.embedding.utils import chain_to_quadratic
 from dimod.response import Response
 from dimod.vartypes import Vartype
@@ -330,7 +330,8 @@ def embed_qubo(source_Q, embedding, target_adjacency, chain_strength=1.0):
     return target_Q
 
 
-def unembed_response(target_response, embedding, source_bqm, chain_break_method=None):
+def unembed_response(target_response, embedding, source_bqm,
+                     chain_break_method=None, chain_break_fraction=False):
     """Unembed the response.
 
     Construct a response for the source binary quadratic model (BQM) by unembedding the given
@@ -351,6 +352,10 @@ def unembed_response(target_response, embedding, source_bqm, chain_break_method=
             Method used to resolve chain breaks. Must be an iterator which accepts a sample and
             an embedding and yields unembedded samples.
 
+        chain_break_fraction (bool, optional, default=False):
+            If True, a 'chain_break_fraction' field is added to the unembedded response which report
+            what fraction of the chains were broken before unembedding.
+
     Returns:
         :obj:`.Response`:
             Response for the source binary quadratic model.
@@ -444,6 +449,9 @@ def unembed_response(target_response, embedding, source_bqm, chain_break_method=
     datatypes.extend((name, record[name].dtype, record[name].shape[1:]) for name in record.dtype.names
                      if name not in {'sample', 'energy'})
 
+    if chain_break_fraction:
+        datatypes.append(('chain_break_fraction', np.float64))
+
     data = np.rec.array(np.empty(num_samples, dtype=datatypes))
 
     data.sample = unembedded
@@ -452,4 +460,7 @@ def unembed_response(target_response, embedding, source_bqm, chain_break_method=
         if name not in {'sample', 'energy'}:
             data[name] = record[name][idxs]
 
+    if chain_break_fraction:
+        data['chain_break_fraction'] = broken_chains(record.sample, chain_idxs).mean(axis=1)[idxs]
+
     return Response(data, variables, target_response.info, target_response.vartype)

Feature Request: Throw warning when unembedding results in too many chain breaks
Proposed syntax:
```
resp = unembed_response(response, embedding, bqm, warning_threshold=.1)
```
In this case a `UserWarning` will be raised if more than 10% of the chains are broken.

diff --git a/tests/test_embedding_transforms.py b/tests/test_embedding_transforms.py
index f022020d..0a50fb25 100644
--- a/tests/test_embedding_transforms.py
+++ b/tests/test_embedding_transforms.py
@@ -202,6 +202,29 @@ class TestUnembedResponse(unittest.TestCase):
 
         np.testing.assert_array_equal(arr, unembedded.record)
 
+    def test_chain_break_statistics_discard(self):
+        sample0 = {0: -1, 1: -1, 2: +1}
+        sample1 = {0: +1, 1: -1, 2: +1}
+        samples = [sample0, sample1]
+
+        # now set up an embedding that works for one sample and not the other
+        embedding = {'a': {0, 1}, 'b': {2}}
+
+        bqm = dimod.BinaryQuadraticModel.from_ising({'a': 1}, {('a', 'b'): -1})
+
+        resp = dimod.Response.from_samples(samples, {'energy': [-1, 1]}, {}, dimod.SPIN)
+
+        resp = dimod.unembed_response(resp, embedding, bqm, chain_break_method=dimod.embedding.discard,
+                                      chain_break_fraction=True)
+
+        source_samples = list(resp)
+
+        # only the first sample should be returned
+        self.assertEqual(len(source_samples), 1)
+        self.assertEqual(source_samples, [{'a': -1, 'b': +1}])
+
+        self.assertEqual(resp.record.chain_break_fraction.sum(), 0)
+
 
 class TestEmbedBQM(unittest.TestCase):
     def test_embed_bqm_empty(self):

pip install -e .[all]
parse_log_pytest
requirements.txt
pytest
apt-get update apt-get install -y gcc
3.6
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs==22.2.0
certifi==2021.5.30
charset-normalizer==2.0.12
codecov==2.1.13
coverage==6.2
decorator==5.1.1
-e git+https://github.com/dwavesystems/dimod.git@67f88fd545767cf999bf86e86bf93489f3a503b9#egg=dimod
idna==3.10
importlib-metadata==4.8.3
iniconfig==1.1.1
jsonschema==2.6.0
mock==2.0.0
networkx==2.0
numpy==1.15.0
packaging==21.3
pandas==0.22.0
pbr==6.1.1
pluggy==1.0.0
py==1.11.0
pymongo==3.7.1
pyparsing==3.1.4
pytest==7.0.1
python-dateutil==2.9.0.post0
pytz==2025.2
requests==2.27.1
six==1.11.0
tomli==1.2.3
typing_extensions==4.1.1
urllib3==1.26.20
zipp==3.6.0

name: dimod
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=21.2.2=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - attrs==22.2.0
      - charset-normalizer==2.0.12
      - codecov==2.1.13
      - coverage==6.2
      - decorator==5.1.1
      - idna==3.10
      - importlib-metadata==4.8.3
      - iniconfig==1.1.1
      - jsonschema==2.6.0
      - mock==2.0.0
      - networkx==2.0
      - numpy==1.15.0
      - packaging==21.3
      - pandas==0.22.0
      - pbr==6.1.1
      - pluggy==1.0.0
      - py==1.11.0
      - pymongo==3.7.1
      - pyparsing==3.1.4
      - pytest==7.0.1
      - python-dateutil==2.9.0.post0
      - pytz==2025.2
      - requests==2.27.1
      - six==1.11.0
      - tomli==1.2.3
      - typing-extensions==4.1.1
      - urllib3==1.26.20
      - zipp==3.6.0
prefix: /opt/conda/envs/dimod

tests/test_embedding_transforms.py::TestUnembedResponse::test_chain_break_statistics_discard
tests/test_embedding_transforms.py::TestUnembedResponse::test_discard tests/test_embedding_transforms.py::TestUnembedResponse::test_discard_with_response tests/test_embedding_transforms.py::TestUnembedResponse::test_embedding_superset tests/test_embedding_transforms.py::TestUnembedResponse::test_energies_discard tests/test_embedding_transforms.py::TestUnembedResponse::test_energies_functional tests/test_embedding_transforms.py::TestUnembedResponse::test_majority_vote tests/test_embedding_transforms.py::TestUnembedResponse::test_majority_vote_with_response tests/test_embedding_transforms.py::TestUnembedResponse::test_unembed_response_with_discard_matrix_typical tests/test_embedding_transforms.py::TestEmbedBQM::test_embed_bqm_BINARY tests/test_embedding_transforms.py::TestEmbedBQM::test_embed_bqm_NAE3SAT_to_square tests/test_embedding_transforms.py::TestEmbedBQM::test_embed_bqm_empty tests/test_embedding_transforms.py::TestEmbedBQM::test_embed_bqm_identity tests/test_embedding_transforms.py::TestEmbedBQM::test_embed_bqm_only_offset tests/test_embedding_transforms.py::TestEmbedBQM::test_embed_bqm_subclass_propagation tests/test_embedding_transforms.py::TestEmbedBQM::test_embed_ising_bad_chain tests/test_embedding_transforms.py::TestEmbedBQM::test_embed_ising_components_empty tests/test_embedding_transforms.py::TestEmbedBQM::test_embed_ising_embedding_not_in_adj tests/test_embedding_transforms.py::TestEmbedBQM::test_embed_ising_h_embedding_mismatch tests/test_embedding_transforms.py::TestEmbedBQM::test_embed_ising_j_index_too_large tests/test_embedding_transforms.py::TestEmbedBQM::test_embed_ising_nonadj tests/test_embedding_transforms.py::TestEmbedBQM::test_embed_ising_typical tests/test_embedding_transforms.py::TestEmbedBQM::test_embed_qubo tests/test_embedding_transforms.py::TestEmbedBQM::test_embedding_with_extra_chains
dimod/embedding/transforms.py
dimod/embedding/transforms.py