Skip to content

Bias Direction PCA Detector API

The BiasDirectionPCADetector extracts a bias direction from group prototypes using PCA and measures the projection gap across groups to detect systematic embedding bias.

Class Reference

BiasDirectionPCADetector

BiasDirectionPCADetector(
    n_components: int = 1,
    min_group_size: int = 10,
    gap_threshold: float = 0.5,
    config: BiasDirectionPCAConfig | None = None,
)

Bases: DetectorBase

Compute bias direction from group prototypes via PCA.

Source code in shortcut_detect/geometric/bias_direction_pca/src/detector.py
def __init__(
    self,
    n_components: int = 1,
    min_group_size: int = 10,
    gap_threshold: float = 0.5,
    config: BiasDirectionPCAConfig | None = None,
) -> None:
    super().__init__(method="bias_direction_pca")
    cfg = config or BiasDirectionPCAConfig(
        n_components=int(n_components),
        min_group_size=int(min_group_size),
        gap_threshold=float(gap_threshold),
    )
    self.config = cfg

    self.n_components = cfg.n_components
    self.min_group_size = cfg.min_group_size
    self.gap_threshold = cfg.gap_threshold

    self.bias_direction_: np.ndarray | None = None
    self.explained_variance_: float = float("nan")
    self.group_projections_: dict[str, dict[str, float]] = {}
    self.projection_gap_: float = float("nan")
    self.report_: BiasDirectionPCAReport | None = None

Quick Reference

Constructor

BiasDirectionPCADetector()

Methods

fit()

def fit(
    embeddings: np.ndarray,
    group_labels: np.ndarray,
) -> BiasDirectionPCADetector

Fit the bias direction PCA detector on embeddings and group labels.

Parameters:

Parameter Type Description
embeddings ndarray Shape (n_samples, n_features), 2D embedding array
group_labels ndarray Shape (n_samples,), group membership labels

Returns: self

Attributes (after fit)

Attribute Type Description
report_ BiasDirectionPCAReport Report with projection gap, explained variance, and per-group projections

Usage Examples

Basic Usage

from shortcut_detect.geometric import BiasDirectionPCADetector

detector = BiasDirectionPCADetector()
detector.fit(embeddings, group_labels)
print(detector.report_)

Via Unified ShortcutDetector

from shortcut_detect import ShortcutDetector

detector = ShortcutDetector(methods=["bias_direction_pca"])
detector.fit(embeddings, labels, group_labels=group_labels)
print(detector.summary())

See Also