Metrics
Calculate metrics.
- sacroml.metrics.auc_p_val(auc: float, n_pos: int, n_neg: int) tuple[float, float] [source]
Compute the p-value for a given AUC.
- Parameters:
- aucfloat
Observed AUC value
- n_posint
Number of positive examples
- n_negint
Number of negative examples
- Returns:
- auc_pfloat
p-value of observing an AUC > auc by chance
- auc_stdfloat
standard deviation of the NULL AUC diustribution (mean = 0.5)
- sacroml.metrics.get_metrics(y_pred_proba: ndarray, y_test: ndarray, permute_rows: bool = True) dict [source]
Calculate metrics, including attacker advantage for MIA binary.
Implemented as Definition 4 on https://arxiv.org/pdf/1709.01604.pdf which is also implemented in tensorFlow-privacy https://github.com/tensorflow/privacy.
- Parameters:
- y_testnp.ndarray
Test data labels.
- y_pred_probanp.ndarray of shape [x,2] and type float
Predicted probabilities.
- permute_rowsbool, default True
Whether to permute arrays, see: https://github.com/AI-SDC/SACRO-ML/issues/106
- Returns:
- metricsdict
dictionary of metric values
Notes
Includes the following metrics:
True positive rate or recall (TPR).
False positive rate (FPR), proportion of negative examples incorrectly classified as positives.
False alarm rate (FAR), proportion of objects classified as positives that are incorrect, also known as false discovery rate.
True neagative rate (TNR).
Positive predictive value or precision (PPV).
Negative predictive value (NPV).
False neagative rate (FNR).
Accuracy (ACC).
F1 Score - harmonic mean of precision and recall.
Advantage.
- sacroml.metrics.min_max_disc(y_true: ndarray, pred_probs: ndarray, x_prop: float = 0.1, log_p: bool = True) tuple[float, float, float, float] [source]
Return non-average-case methods for MIA attacks.
Considers actual frequency of membership amongst samples with highest- and lowest- assessed probability of membership. If an MIA method confidently asserts that 5% of samples are members and 5% of samples are not, but cannot tell for the remaining 90% of samples, then these metrics will flag this behaviour, but AUC/advantage may not. Since the difference may be noisy, a p-value against a null of independence of true membership and assessed membership probability (that is, membership probabilities are essentially random) is also used as a metric (using a usual Gaussian approximation to binomial). If the p-value is low and the frequency difference is high (>0.5) then the MIA attack is successful for some samples.
- Parameters:
- ynp.ndarray
true labels
- ypnp.ndarray
probabilities of labels, or monotonic transformation of probabilities
- xpropfloat
proportion of samples with highest- and lowest- probability of membership to be considered
- logpbool
convert p-values to log(p).
- Returns:
- maxdfloat
frequency of y=1 amongst proportion xprop of individuals with highest assessed membership probability
- mindfloat
frequency of y=1 amongst proportion xprop of individuals with lowest assessed membership probability
- mmdfloat
difference between maxd and mind
- pvalfloat
p-value or log-p value corresponding to mmd against null hypothesis that random variables corresponding to y and yp are independent.
Examples
>>> y = np.random.choice(2, 100) >>> yp = np.random.rand(100) >>> maxd, mind, mmd, pval = min_max_desc(y, yp, xprop=0.2, logp=True)