Skip to content

Add reject-option-classification explainer - #565

Merged
yakew7 merged 1 commit into
yakew7:mainfrom
propcgamer20-png:docs/reject-option-classification
Sep 10, 2026
Merged

Add reject-option-classification explainer#565
yakew7 merged 1 commit into
yakew7:mainfrom
propcgamer20-png:docs/reject-option-classification

Conversation

@propcgamer20-png

Copy link
Copy Markdown
Collaborator

Closes #542.

What

New explainer explainers/reject-option-classification.md on Reject Option Classification (Kamiran, Karim & Zhang, Decision Theory for Discrimination-Aware Classification, IEEE ICDM 2012, pp. 924-929). ROC is a post-processing method: it leaves the model untouched and only reassigns labels for instances that fall inside a low-confidence band of half-width theta around the decision boundary, pushing them toward the disadvantaged group.

Notes for review

  • Name collision is called out explicitly at the top - "reject option classification" (post-processing fairness) vs. the existing reject-inference.md (missing-outcome correction in credit scoring). Different fields, different problems.
  • Contrast table against this repo's own S4 ThresholdOptimizer so a reader knows when ROC is and isn't the tool already available here.
  • Worked example on the COMPAS baseline logistic regression (same features/split as the S1 audit). A sweep_theta() helper walks the half-width: the fairness gap barely moves at +-0.05, roughly halves at +-0.10 (651 of 3,254 test predictions flipped), then at +-0.15 overcorrects to about -70 pp and drops accuracy to ~45%. The point being that theta has no principled default and the method can invert the disparity it was meant to close.
  • Detection code: reject_option_classify() and sweep_theta().
  • Limitations: needs group membership at prediction time; no default theta; can flip the sign of the gap; individual-fairness objection (two near-identical borderline applicants get different labels solely by group).

Generated files

Ran scripts/build_explainers.py and scripts/check_explainer_count.py --fix. Regenerated: assets/explainers-data.js, faircode/_explainers/{data.json,reject-option-classification.md}, explainers/reject-option-classification.html, assets/og{,-light}/reject-option-classification.png, one new sitemap.xml entry, and the appended section in llms-full.txt. The 60 -> 61 count bump touches README.md, CONTRIBUTORS.md, METRICS.md, ROADMAP.md.

check_em_dash.py, check_explainer_count.py, check_broken_links.py, check_generated_files_current.py and tests/test_build_explainers.py all pass.

Adds explainers/reject-option-classification.md covering Reject Option
Classification (Kamiran, Karim & Zhang, IEEE ICDM 2012), the
post-processing method that reassigns labels only inside a low-confidence
band around the decision boundary.

- Explicit name-collision note distinguishing it from reject-inference.md
  and a contrast table against this repo's ThresholdOptimizer (S4).
- Worked example on the COMPAS baseline logistic regression: sweeps the
  critical-region half-width theta and shows the fairness gap shrink at
  +-0.10 (651 of 3,254 predictions flipped, gap halved), then reverse to
  -70 pp and collapse accuracy at +-0.15.
- Detection code: reject_option_classify() plus a sweep_theta() helper.
- Limitations: theta has no principled default, needs group membership at
  prediction time, can invert the disparity, and the individual-fairness
  objection.

Regenerated assets/explainers-data.js, faircode/_explainers/, the HTML
page, OG images, sitemap.xml and llms-full.txt; check_explainer_count.py
--fix bumped the 60 -> 61 mentions in README/CONTRIBUTORS/METRICS/ROADMAP.
@vercel

vercel Bot commented Sep 10, 2026

Copy link
Copy Markdown
Contributor

@propcgamer20-png is attempting to deploy a commit to the yashkewlani2020-gmailcom's projects Team on Vercel.

A member of the Team first needs to authorize it.

@github-actions

Copy link
Copy Markdown

@yakew7 @Shreyash0712 - new PR touching a path you own, please review.

@yakew7
yakew7 merged commit 01a2110 into yakew7:main Sep 10, 2026
18 of 19 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Explainer: What Is Reject Option Classification?

2 participants