Есть бинарные метки и score классификатора.
Каждый positive объект дублируется positive_copies раз, каждый negative объект дублируется negative_copies раз. Score у копий такой же, как у исходного объекта.
Нужно вернуть ROC-AUC на выборке после такого дублирования, не материализуя все копии.
Считайте ROC-AUC как долю positive-negative пар, где score positive выше score negative. Tie дает 0.5.
def roc_auc_after_duplication(
y_true: list[int],
scores: list[float],
positive_copies: int,
negative_copies: int,
) -> float:y_true = [1,0]scores = [0.9,0.1]positive_copies = 7negative_copies = 41y_true = [1,0,1,0]scores = [0.2,0.1,0.4,0.8]positive_copies = 7negative_copies = 40.5y_true = [1,0,1,0]scores = [0.5,0.5,0.2,0.1]positive_copies = 3negative_copies = 100.625