code: def auc(truth, recommend):
      
      tp = correct = 0.
      for r in recommend:
          if r in truth:
              # keep track number of true positives placed before
              tp += 1.
          else:
              correct += tp
      # number of all possible tp-fp pairs
      pairs = tp * (recommend.size - tp)
  
      # if there is no TP (or no FP), it's meaningless for this metric (i.e., AUC=0.5)
      if pairs == 0:
          return 0.5
  
      return correct / pairs
docs: Area under the ROC curve (AUC).
  
      Args:
          truth (numpy 1d array): Set of truth samples.
          recommend (numpy 1d array): Ordered set of recommended samples.
  
      Returns:
          float: AUC.