1

请原谅我蹩脚的英语。这是代码。

def scoreClickAUC(num_clicks, num_impressions, predicted_ctr):  
    """ 
    Calculates the area under the ROC curve (AUC) for click rates 

    Parameters 
    ---------- 
    num_clicks : a list containing the number of clicks 

    num_impressions : a list containing the number of impressions 

    predicted_ctr : a list containing the predicted click-through rates 

    Returns 
    ------- 
    auc : the area under the ROC curve (AUC) for click rates 
    """  
    i_sorted = sorted(range(len(predicted_ctr)),key=lambda i: predicted_ctr[i],  
                      reverse=True)  
    auc_temp = 0.0  
    click_sum = 0.0  
    old_click_sum = 0.0  
    no_click = 0.0  
    no_click_sum = 0.0  

    # treat all instances with the same predicted_ctr as coming from the  
    # same bucket  
    last_ctr = predicted_ctr[i_sorted[0]] + 1.0  

    for i in range(len(predicted_ctr)):  
        if last_ctr != predicted_ctr[i_sorted[i]]:  
            auc_temp += (click_sum+old_click_sum) * no_click / 2.0  
            old_click_sum = click_sum  
            no_click = 0.0  
            last_ctr = predicted_ctr[i_sorted[i]]  
        no_click += num_impressions[i_sorted[i]] - num_clicks[i_sorted[i]]  
        no_click_sum += num_impressions[i_sorted[i]] - num_clicks[i_sorted[i]]  
        click_sum += num_clicks[i_sorted[i]]  
    auc_temp += (click_sum+old_click_sum) * no_click / 2.0  
    auc = auc_temp / (click_sum * no_click_sum)  
    return auc

我对段落“(click_sum+old_click_sum) * no_click / 2.0”的含义感到困惑。请帮帮我。</p>

4

1 回答 1

0

当多个点具有完全相同的预测分数时,曲线下的面积是线性插值的。

您看到的等式是切片的面积,如下所示:

   /
  /|
 / |
/  |
|  |
|  |
+--+

这可以计算为平均高度 * 宽度 = (height_left+height_right)+width/2

于 2016-11-06T07:56:01.833 回答