Skip to content
Back to skills

Postprocessing

ASecurity

"Use Fairlearn ThresholdOptimizer and threshold-optimizer plots to

  • 247 stars
  • 0 votes
  • 0 copies
  • 4 views
  • Added September 8, 2026
businesspythonbashapi

Works with

  • api

Security analysis

A100/100

Pro scans all 4 files and shows the line behind each finding

Scanned September 8, 2026

npx -y skills add VectorSpaceLab/AREX-Skill --skill postprocessing --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Postprocessing?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Postprocessing
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/vectorspacelab-postprocessing/badge)](https://www.skillsdirectory.com/skills/vectorspacelab-postprocessing)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: postprocessing
description: "Use Fairlearn ThresholdOptimizer and threshold-optimizer plots to
  adjust trained predictors under group fairness constraints."
disable-model-invocation: true
metadata:
  disco-role: operating
license: MIT
---

# Fairlearn postprocessing

Use this sub-skill when the task asks to adjust a trained predictor's scores or predictions with group-specific thresholds: `ThresholdOptimizer`, `plot_threshold_optimizer`, `prefit`, `predict_method`, `tol`, demographic parity, equalized odds, false/true positive/negative rate parity, or threshold interpolation dictionaries.

## Quick workflow

1. Choose or fit a base estimator that exposes a useful score method: `predict_proba`, `decision_function`, or `predict`.
2. Create `ThresholdOptimizer(estimator=..., constraints=..., objective=..., predict_method=...)`.
3. Set `prefit=True` only when the estimator is already fitted and will not be cloned by cross-validation.
4. Fit the threshold optimizer with `sensitive_features=...`.
5. Predict with the same sensitive-feature grouping and, when deterministic output matters, pass `random_state` to `predict`.
6. Route to `../assessment/` to compare subgroup metrics before and after postprocessing.

## Read these references

- [`references/threshold-optimizer-workflows.md`](references/threshold-optimizer-workflows.md) for constructor options, constraints/objectives, `prefit`, score-method choice, plotting, and evaluation patterns.
- [`references/troubleshooting.md`](references/troubleshooting.md) for missing base estimators, invalid constraint/objective combinations, plotting errors, `prefit` warnings, and data-layout failures.
- [`scripts/smoke_threshold_optimizer.py`](scripts/smoke_threshold_optimizer.py) for a tiny CPU-only synthetic smoke check with optional plotting.

## Core APIs to recognize

- `ThresholdOptimizer(*, estimator=None, constraints="demographic_parity", objective="accuracy_score", grid_size=1000, flip=False, prefit=False, predict_method="auto", tol=None)`
- `ThresholdOptimizer.fit(X, y, *, sensitive_features, **kwargs)`
- `ThresholdOptimizer.predict(X, *, sensitive_features, random_state=None)`
- `plot_threshold_optimizer(threshold_optimizer, ax=None, show_plot=True)`

## Boundary rules

- This sub-skill owns post-fit threshold/interpolation mitigation. Use `../reductions/` for fairness-constrained retraining and `../preprocessing/` for feature transformation.
- Use `../assessment/` for grouped metrics and model-comparison plots. `plot_threshold_optimizer` visualizes the postprocessor internals, not a full fairness report.
- Use `../installation/` or root troubleshooting when matplotlib is missing.
- Use `../adversarial/` for neural adversarial fairness; it is not a threshold optimizer.

## Operating rules

- `y` must be binary for `ThresholdOptimizer` in this source.
- `sensitive_features` are required for both `fit` and `predict`.
- Prefer `predict_proba` or `decision_function` over hard-label `predict` when meaningful scores are available.
- `equalized_odds` does not support `tol` relaxation in the inspected source.
- `prefit=True` is unsafe with estimator cloning workflows such as `cross_val_score` or `GridSearchCV`; use `prefit=False` there.
- Postprocessing can change output randomness. Use `random_state` in `predict` for reproducible reports.

## Fast validation

Run:

```bash
python sub-skills/postprocessing/scripts/smoke_threshold_optimizer.py
```

Run plot coverage in a matplotlib-capable environment:

```bash
python sub-skills/postprocessing/scripts/smoke_threshold_optimizer.py --plot --output-dir /tmp/fairlearn-threshold-plots
```

Files in this skill

  • SKILL.md3.6 KB
  • references/threshold-optimizer-workflows.md4.4 KB
  • references/troubleshooting.md2.4 KB
  • scripts/smoke_threshold_optimizer.py3.2 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.