OCDocker.OCScore.Optimization.ModelCrossValidation module¶
K-fold cross-validation for exported OCScore PDBbind and DUDEz models.
Uses fixed hyperparameters from an exported best_model/ bundle and retrains a
fresh model on each fold. DUDEz defaults to receptor-grouped folds so validation
receptors are never seen during training, matching staged screening evaluation.
- class OCDocker.OCScore.Optimization.ModelCrossValidation.CrossValidationConfig(n_folds=5, epochs=100, random_seed=42, shuffle=True, strategy='auto', group_column='receptor', kind_column='kind', include_scoring_function_baselines=True, include_descriptor_aggregate_baselines=True, include_sf_consensus_baselines=True, report_entity_overlap=True, entity_columns=('name', 'ligand_name', 'smiles'), include_calibration_metrics=True, calibration_method='platt')[source]¶
Bases:
objectConfiguration for exported-model cross-validation.
- Parameters:
n_folds (int, optional) – Number of cross-validation folds, by default 5.
epochs (int, optional) – Training epochs per fold, by default 100.
random_seed (int, optional) – Seed for fold shuffling and weight initialization, by default 42.
shuffle (bool, optional) – Shuffle fold assignments, by default True.
strategy (str, optional) –
auto,receptor_grouped, orrow_kfold.autouses receptor-grouped folds for DUDEz whengroup_columnis present.group_column (str, optional) – Receptor/target column for grouped DUDEz CV, by default
"receptor".kind_column (str, optional) – DUDEz kind column for label derivation, by default
"kind".include_scoring_function_baselines (bool, optional) – For DUDEz screening exports, also evaluate every post-filter scoring-function column on each fold’s validation split, by default True.
include_descriptor_aggregate_baselines (bool, optional) – For DUDEz screening exports, also evaluate row-wise mean/median/max/min over model input features on each validation fold (
desc_*scorers), by default True.include_sf_consensus_baselines (bool, optional) – For DUDEz screening exports, also evaluate row-wise mean/median/max/min across scoring-function columns only (
sf_*scorers), by default True.report_entity_overlap (bool, optional) – When True, record train/validation duplicate entity keys in fold diagnostics and log a warning, by default True.
entity_columns (tuple of str, optional) – Columns checked for duplicate entities across train and validation splits.
include_calibration_metrics (bool, optional) – Compute calibration metrics on validation folds, by default True.
calibration_method (str, optional) – Calibration method name (e.g.
"platt"), by default"platt".
- n_folds: int = 5¶
- epochs: int = 100¶
- random_seed: int = 42¶
- shuffle: bool = True¶
- strategy: str = 'auto'¶
- group_column: str = 'receptor'¶
- kind_column: str = 'kind'¶
- include_scoring_function_baselines: bool = True¶
- include_descriptor_aggregate_baselines: bool = True¶
- include_sf_consensus_baselines: bool = True¶
- report_entity_overlap: bool = True¶
- entity_columns: tuple[str, ...] = ('name', 'ligand_name', 'smiles')¶
- include_calibration_metrics: bool = True¶
- calibration_method: str = 'platt'¶
- class OCDocker.OCScore.Optimization.ModelCrossValidation.CrossValidationFoldResult(fold_index, n_train, n_validation, train_indices, validation_indices, validation_metrics, scoring_function_metrics=<factory>, per_target_metrics=<factory>, diagnostics=<factory>)[source]¶
Bases:
objectMetrics and metadata for one cross-validation fold.
- Parameters:
fold_index (int) – Zero-based fold index.
n_train (int) – Number of training rows in this fold.
n_validation (int) – Number of validation rows in this fold.
train_indices (list of int) – Row indices used for training.
validation_indices (list of int) – Row indices used for validation.
validation_metrics (dict) – Primary model metrics on the validation split.
scoring_function_metrics (dict, optional) – Per-scoring-function metrics on validation, by default empty dict.
per_target_metrics (list of dict, optional) – Per-target breakdown when applicable, by default empty list.
diagnostics (dict, optional) – Fold-level integrity and overlap diagnostics, by default empty dict.
- fold_index: int¶
- n_train: int¶
- n_validation: int¶
- train_indices: list[int]¶
- validation_indices: list[int]¶
- validation_metrics: dict[str, float]¶
- scoring_function_metrics: dict[str, dict[str, float]]¶
- per_target_metrics: list[dict[str, Any]]¶
- diagnostics: dict[str, Any]¶
- class OCDocker.OCScore.Optimization.ModelCrossValidation.CrossValidationResult(export_dir, task, n_folds, effective_folds, strategy, epochs, random_seed, objective_metric, fold_results, aggregate_validation_metrics, model_config, scoring_function_columns=<factory>, aggregate_scoring_function_metrics=<factory>, scorer_comparison_summary=<factory>, diagnostics=<factory>)[source]¶
Bases:
objectAggregated cross-validation output for one exported model.
- Parameters:
export_dir (str) – Path to the exported model bundle directory.
task (str) – Task type (e.g. regression or screening).
n_folds (int) – Requested number of folds.
effective_folds (int) – Folds actually evaluated after grouping constraints.
strategy (str) – Split strategy used (
row_kfoldorreceptor_grouped).epochs (int) – Training epochs per fold.
random_seed (int) – Random seed used for splits and training.
objective_metric (str) – Primary metric optimized during training.
fold_results (list of CrossValidationFoldResult) – Per-fold metrics and diagnostics.
aggregate_validation_metrics (dict) – Mean/std (or similar) aggregates across folds for the primary model.
model_config (dict) – Serialized model configuration from the export bundle.
scoring_function_columns (list of str, optional) – Scoring-function columns evaluated as baselines, by default empty list.
aggregate_scoring_function_metrics (dict, optional) – Aggregated baseline metrics by scorer, by default empty dict.
scorer_comparison_summary (dict, optional) – Summary comparing OCScore vs baselines, by default empty dict.
diagnostics (dict, optional) – Run-level diagnostics, by default empty dict.
- export_dir: str¶
- task: str¶
- n_folds: int¶
- effective_folds: int¶
- strategy: str¶
- epochs: int¶
- random_seed: int¶
- objective_metric: str¶
- fold_results: list[CrossValidationFoldResult]¶
- aggregate_validation_metrics: dict[str, dict[str, float]]¶
- model_config: dict[str, Any]¶
- scoring_function_columns: list[str]¶
- aggregate_scoring_function_metrics: dict[str, dict[str, dict[str, float]]]¶
- scorer_comparison_summary: dict[str, Any]¶
- diagnostics: dict[str, Any]¶
- OCDocker.OCScore.Optimization.ModelCrossValidation.build_scorer_comparison_summary(result, *, comparison_metrics=None, reference_scorer='OCScore')[source]¶
Summarize OCScore vs scoring-function baselines across CV folds.
Computes mean ± std per scorer/metric, per-fold rankings (1 = best), and how often
reference_scorerachieves the top value on each fold.- Parameters:
result (CrossValidationResult) – Completed cross-validation output.
comparison_metrics (Sequence[str] | None, optional) – Metrics to summarize. Defaults to
DUDEZ_CV_COMPARISON_METRICSfor DUDEz screening andPDBBIND_CV_METRICSfor PDBbind regression.reference_scorer (str, optional) – Scorer used for win counting, by default
OCScore.
- Returns:
Summary tables:
mean_std,ocscore_wins,fold_rankings.- Return type:
dict[str, Any]
- OCDocker.OCScore.Optimization.ModelCrossValidation.diagnose_entity_overlap(dataframe, train_idx, val_idx, entity_columns)[source]¶
Report duplicate entity keys between train and validation splits.
- Parameters:
dataframe (DataFrame)
train_idx (ndarray)
val_idx (ndarray)
entity_columns (Sequence[str])
- Return type:
dict[str, Any]
- OCDocker.OCScore.Optimization.ModelCrossValidation.evaluate_scoring_function_baselines_on_fold(dataframe, validation_indices, labels, groups, scoring_columns, *, metric_names=('BEDROC', 'ROC-AUC', 'PR-AUC', 'EF1%', 'EF5%', 'NDCG@1%', 'NDCG@5%', 'Precision', 'Recall', 'F1', 'MCC', 'TP', 'FP', 'TN', 'FN'), bedroc_alpha=20.0)[source]¶
Evaluate individual scoring functions on one CV validation fold.
- Parameters:
dataframe (pd.DataFrame) – Full reduced DUDEz dataframe.
validation_indices (np.ndarray) – Row indices for the validation fold.
labels (np.ndarray) – Binary active/decoy labels aligned with
dataframerows.groups (np.ndarray | None) – Receptor groups for grouped screening metrics.
scoring_columns (Sequence[str]) – Scoring-function columns to evaluate.
metric_names (Sequence[str], optional) – Metrics retained in each returned scorer dictionary.
bedroc_alpha (float, optional) – BEDROC alpha used for scorer baseline BEDROC, by default 20.0.
- Returns:
Mapping from scorer name to validation metrics on this fold.
- Return type:
dict[str, dict[str, float]]
- OCDocker.OCScore.Optimization.ModelCrossValidation.identify_scoring_function_columns(selected_features)[source]¶
Return scoring-function descriptor columns from the selected feature list.
- Parameters:
selected_features (Sequence[str])
- Return type:
list[str]
- OCDocker.OCScore.Optimization.ModelCrossValidation.infer_higher_is_better(scores, labels)[source]¶
Infer whether larger raw scores favor actives on one validation fold.
- Parameters:
scores (ndarray)
labels (ndarray)
- Return type:
bool
- OCDocker.OCScore.Optimization.ModelCrossValidation.iter_receptor_group_kfold_indices(groups, n_folds, *, random_seed, shuffle)[source]¶
Return train/validation index pairs by holding out whole receptor groups.
- Parameters:
groups (ndarray)
n_folds (int)
random_seed (int)
shuffle (bool)
- Return type:
list[tuple[ndarray, ndarray]]
- OCDocker.OCScore.Optimization.ModelCrossValidation.iter_row_kfold_indices(n_samples, n_folds, *, random_seed, shuffle)[source]¶
Return train/validation index pairs using row-wise K-fold.
- Parameters:
n_samples (int)
n_folds (int)
random_seed (int)
shuffle (bool)
- Return type:
list[tuple[ndarray, ndarray]]
- OCDocker.OCScore.Optimization.ModelCrossValidation.run_cross_validation_from_export(export_dir, dataframe, *, config=None, device=None, output_dir=None, transferred_extractor=None)[source]¶
Run K-fold cross-validation using a fixed exported model configuration.
- Parameters:
export_dir (str | Path) – Exported
best_model/directory.dataframe (pd.DataFrame) – Reduced PDBbind or DUDEz dataframe aligned with the export features.
config (CrossValidationConfig | None, optional) – Cross-validation settings including
n_folds.device (torch.device | str | None, optional) – Training device, by default CPU.
output_dir (str | Path | None, optional) – Directory for
cross_validation_results.jsonand fold CSV. Defaults to<export_dir>/cross_validation.transferred_extractor (FeatureExtractor | None, optional) – Optional transferred extractor for DUDEz transfer exports.
- Returns:
Per-fold and aggregate validation metrics.
- Return type:
- OCDocker.OCScore.Optimization.ModelCrossValidation.save_cross_validation_result(result, output_dir)[source]¶
Write cross-validation JSON and per-fold CSV artifacts.
- Parameters:
result (CrossValidationResult) – Cross-validation output.
output_dir (str | Path) – Destination directory.
- Returns:
Written artifact paths.
- Return type:
dict[str, str]
- OCDocker.OCScore.Optimization.ModelCrossValidation.validate_fold_indices(train_idx, val_idx, *, fold_index)[source]¶
Assert train and validation row indices are disjoint.
- Parameters:
train_idx (ndarray)
val_idx (ndarray)
fold_index (int)
- Return type:
None
- OCDocker.OCScore.Optimization.ModelCrossValidation.validate_fold_split(train_idx, val_idx, *, fold_index, strategy, groups=None)[source]¶
Run fold integrity checks before training.
- Parameters:
train_idx (ndarray)
val_idx (ndarray)
fold_index (int)
strategy (str)
groups (ndarray | None)
- Return type:
None