真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

點(diǎn)擊率模型AUC

一 背景 

      首先舉個(gè)例子:

創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的商洛網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

                         正樣本(90)                       負(fù)樣本(10)        

模型1預(yù)測(cè)        正(90)                                正(10)

模型2預(yù)測(cè)        正(70)負(fù)(20)                正(5)負(fù)(5)

結(jié)論:

       模型1準(zhǔn)確率90%;

       模型2 準(zhǔn)確率75%      

       考慮對(duì)正負(fù)樣本對(duì)預(yù)測(cè)能力,顯然模型2要比模型1好,但對(duì)于這種正負(fù)樣本分布不平衡對(duì)數(shù)據(jù),準(zhǔn)確率不能衡量分類器對(duì)好壞了,所以需要指標(biāo)auc解決傾斜樣本的評(píng)價(jià)問題。

二分類混淆矩陣

預(yù)測(cè)\實(shí)際       1            0

1                    TP          FP

0                    FN          TN

       TPR=TP/P=TP/TP+FN   直觀1中猜對(duì)多少

       FPR=FP/N=FP/FP+TN  直觀0中猜錯(cuò)多少

       Auc對(duì)橫縱坐標(biāo)分別為FPR和TPR,相對(duì)于y=x這條直線靠近左上角對(duì)分類器性能更好,所以模型2更優(yōu)。

                            TPR                            FPR

模型1                 90/90=1                   10/10=1

模型2                 70/90=0.78                5/10=0.5

模型1和2的auc點(diǎn)位分別如下圖所示,顯然模型1更優(yōu):

 點(diǎn)擊率模型AUC

 

二 研究現(xiàn)狀 

       AUC直觀概念,任意取一對(duì)正負(fù)樣本,正樣本score大于負(fù)樣本對(duì)概率。 

       計(jì)算方法:正樣本和負(fù)樣本pair對(duì),auc=預(yù)估正樣本score大于負(fù)樣本score的pair對(duì)數(shù)/總的pair對(duì)數(shù)。

       E.g. 分別計(jì)算模型1和2對(duì)auc?

四個(gè)樣本label為y1=+1, y2=+1, y3=-1, y4=-1

模型1的預(yù)測(cè)為 y1=0.9, y2=0.5, y3=0.2, y4=0.6

模型2的預(yù)測(cè)為 y1=0.1, y2=0.9, y3=0.8, y4=0.2

解: 

        模型1: 正樣本score大于負(fù)樣本的pair包括(y1, y3), (y1, y4), (y2, y3),auc為3/4=0.75

        模型2: 正樣本score大于負(fù)樣本的pair包括(y2, y3),(y2, y4),auc為2/4=0.5

 

計(jì)算參考paper:《 An introduction to ROC analysis 》(Tom Fawcett)

方法:

1按照score對(duì)樣本排序;

2依次對(duì)每個(gè)樣本,label分對(duì)TP增1,否則FP增1。計(jì)算每個(gè)小梯形的面積。

3累加所有樣本,計(jì)算auc

代碼:

點(diǎn)擊率模型AUC

= sorted(range(len(probs)),key=lambda i: probs[i], reverse== = = = = = = = probs[i_sorted[]] + 
                                        
     i  last_prob !=+= (TP+TP_pre) * (FP-FP_pre) / === labels[i_sorted[i]] == = TP + 
        = FP + += (TP+TP_pre) * (FP-FP_pre) / = auc_temp / (TP *=== line = line.strip().split(= (line[= (line[ len(sys.argv) != = read_file(sys.argv[= % __name__==

點(diǎn)擊率模型AUC

 

 

三 點(diǎn)擊率模型auc計(jì)算方法 

       如上圖,以兩個(gè)分桶為例,每個(gè)分桶計(jì)算的AUC為圖中的陰影部分。全局AUC部分需要補(bǔ)充P3部分的面積,等于前i-1個(gè)桶的sum(click)乘以每i個(gè)桶的noclick。

       整體的AUC就是曲線下的面積除以曲線的起點(diǎn)、終點(diǎn)錨定矩型的面積。

步驟

1按照pctr聚合 sum_show和sum_clk;

2樣本按照pctr排序;

3依次對(duì)每個(gè)樣本,計(jì)算noclk和clk圍成對(duì)小梯形對(duì)面積。

       代碼:

點(diǎn)擊率模型AUC

import sys

#init auc dict
params_auc_dict = {"last_ctr":1.1, "slot_show_sum":0, "slot_click_sum":0, \                     "auc_temp":0.0, "click_sum":0.0, "old_click_sum":0.0, "no_click":0.0, \                     "no_click_sum":0.0} 
#init q distribute
q_bucket = 1000params_Q_dict = {"count_list":[0]*(q_bucket+1)}for line in sys.stdin:
    lineL = line.strip().split('\t')    if len(lineL) < 3:        continue

    pctr = float(lineL[0])
    #print lineL[0]
    #pctr = float(lineL[0])/1e6
    show = int(float(lineL[1]))
    click = int(float(lineL[2]))
    slot_info = '-'
    
    ### calculate auc
    params_auc_dict["slot_show_sum"] += show
    params_auc_dict["slot_click_sum"] += click    if params_auc_dict["last_ctr"] != pctr:
        params_auc_dict["auc_temp"] += (params_auc_dict["click_sum"] + \
                                         params_auc_dict["old_click_sum"]) * params_auc_dict["no_click"] / 2.0
        params_auc_dict["old_click_sum"] = params_auc_dict["click_sum"]
        params_auc_dict["no_click"] = 0.0
        params_auc_dict["last_ctr"] = pctr
    params_auc_dict["no_click"] += show - click
    params_auc_dict["no_click_sum"] += show - click
    params_auc_dict["click_sum"] += click
       
    ### calculate Q distribution
    index = int(pctr / (1.0/q_bucket)) #interval [0, 0.001) left close, right open
    count_list = params_Q_dict["count_list"]
    count_list[index] += show

# last instance for auc
params_auc_dict["auc_temp"] += (params_auc_dict["click_sum"] + \
         params_auc_dict["old_click_sum"]) * params_auc_dict["no_click"] / 2.0if params_auc_dict["auc_temp"] > 0:
    auc = params_auc_dict["auc_temp"] / (params_auc_dict["click_sum"] * params_auc_dict["no_click_sum"])else:
    auc = 0print "AUC:%s\tshow_sum:%s\tclk_sum:%s" %( auc, params_auc_dict["slot_show_sum"], params_auc_dict["slot_click_sum"])

#print Q distribution resultfor item in params_Q_dict:
    count_list = params_Q_dict["count_list"]
    print "Max bucket num: %s" %(sum(count_list))    for i in range(q_bucket+1):        if i < (q_bucket - 1):
            print str((i+1)*(1.0/q_bucket)) + '\t' + str(count_list[i])        else:
            print '1.0\t' + str(count_list[i]+count_list[i+1])            break

網(wǎng)站名稱:點(diǎn)擊率模型AUC
鏈接URL:http://weahome.cn/article/gjpjsh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部