OCDocker.OCScore.Utils.PDBbindSplit module

Affinity-aware train/validation/test splitting for PDBbind regression.

Default strategy affinity_quantile_stratified bins the continuous affinity target into quantiles and uses those bins for stratified splitting. This keeps weak/medium/strong binders represented across train/validation/test so RMSE selection is scientifically meaningful.

class OCDocker.OCScore.Utils.PDBbindSplit.PDBbindSplitConfig(strategy='affinity_quantile_stratified', target_column='experimental', receptor_column='receptor', n_affinity_bins=5, train_size=0.6, validation_size=0.2, test_size=0.2, random_seed=42, relaxed_split=False)[source]

Bases: object

Configuration for PDBbind regression splitting.

Parameters:
  • strategy (str, optional) – Split strategy. Defaults to "affinity_quantile_stratified".

  • target_column (str, optional) – Continuous regression target column, by default "experimental".

  • receptor_column (str | None, optional) – Optional receptor/target column for diagnostics, by default "receptor". If missing in the dataframe, receptor diagnostics are skipped.

  • n_affinity_bins (int, optional) – Requested number of affinity quantile bins, by default 5.

  • train_size (float, optional) – Training fraction, by default 0.6.

  • validation_size (float, optional) – Validation fraction, by default 0.2.

  • test_size (float, optional) – Test fraction, by default 0.2.

  • random_seed (int, optional) – Random seed for deterministic splits, by default 42.

  • relaxed_split (bool, optional) – If False, fail loudly when quantile binning/stratification is invalid. If True, reduce the number of bins until stratification is feasible and drop rows with NaN targets, by default False.

strategy: str = 'affinity_quantile_stratified'
target_column: str = 'experimental'
receptor_column: str | None = 'receptor'
n_affinity_bins: int = 5
train_size: float = 0.6
validation_size: float = 0.2
test_size: float = 0.2
random_seed: int = 42
relaxed_split: bool = False
class OCDocker.OCScore.Utils.PDBbindSplit.PDBbindSplitResult(train_idx, val_idx, test_idx, diagnostics=<factory>)[source]

Bases: object

Indices and diagnostics from a PDBbind regression split.

Parameters:
  • train_idx (np.ndarray) – Training row indices.

  • val_idx (np.ndarray) – Validation row indices.

  • test_idx (np.ndarray) – Test row indices.

  • diagnostics (dict[str, Any]) – JSON-compatible split diagnostics and constraint reporting.

train_idx: ndarray
val_idx: ndarray
test_idx: ndarray
diagnostics: dict[str, Any]
OCDocker.OCScore.Utils.PDBbindSplit.split_pdbbind_regression(df, config=None, *, target=None)[source]

Split PDBbind regression rows into train/validation/test.

Parameters:
  • df (pd.DataFrame) – PDBbind dataframe containing a continuous affinity target.

  • config (PDBbindSplitConfig | None, optional) – Split configuration. Defaults to PDBbindSplitConfig.

  • target (np.ndarray | None, optional) – Optional override target array aligned with df. When provided, it is used instead of df[config.target_column]. This exists to support upstream preprocessing while keeping a single splitting implementation.

Returns:

Indices for each split plus JSON-compatible diagnostics.

Return type:

PDBbindSplitResult