《计算广告》中有提到价格挤压因子,具体形式是在ecpm的ctr上加了一个指数因子:
\[ctr^k * bid\]并提到:
当k趋近于无穷时,相当于只根据点击率来排序;为0时,相当于只根据出价来排序。
也就是k越大,ctr的影响越大,出价对ecpm的影响越小,从而对出价具有挤压作用。
关于挤压因子的作用,书中论述如下:
价格挤压因子的作用主要是能够根据市场情况更主动地影响竞价体系向着需要的方向发展。比如说,如果发现市场上存在大量的出价较高但品质不高的广告主,则可以通过调高κ来强调质量和用户反馈的影响;如果发现市场的竞价激烈程度不够,则可以通过降低κ来鼓励竞争,如果存在短期的财务压力,这样就可以短期使得整体营收有所上升;如果为了鼓励广告主提高广告质量和相关性,则可以通过提高κ来降低出价的影响。 刘鹏; 王超. 计算广告:互联网商业变现的市场与技术 (Kindle位置1850). 人民邮电出版社. Kindle 版本.
我的疑问是k越大,ctr项越小,为啥在ecpm的作用会越大?这个看起来很反直觉,不过,仔细想一下也就明白了。虽然在ecpm里面权重变小了,但是竞价是在多个广告之间进行的,指数运算会拉大底数之间的距离,导致本来大一点的ctr经过指数运算之后会比之前大很多,从而在竞价中ctr的作用更大。 举个例子吧,给的两个广告,一个ctr=0.5,bid=3,一个ctr=0.6,bid=1。那么我们将价格挤压因子慢慢调大,看下效果:
红色曲线是ctr=0.5在不同挤压因子下的值,绿色为ctr=0.6在不同挤压因子下的值。蓝色为0.6和0.5在不同挤压因子下的比值。可以看到,挤压因子越大,ctr=0.6和ctr=0.5的比值越来越大,也就是ctr=0.6对应的ecpm比ctr=0.5对应的ecpm大的越多,这样本来排在ctr=0.5后面的,现在就可以排在前面了。
结合这个图就可以理解价格挤压因子的作用了。
代码如下:
import math
from matplotlib import pyplot as plt
import numpy as np
f = lambda x: math.pow(0.5,x)
f1 = lambda x: math.pow(0.6,x)
x = np.linspace(0, 10, 100)
y_3 = [f(x_i) for x_i in x]
y_4 = [f1(x_i) for x_i in x]
y_5 = [f1(x_i)/f(x_i) for x_i in x]
plt.plot(x, y_3, 'r')
plt.plot(x, y_4, 'g')
plt.plot(x, y_5, 'b')
plt.show()