高级横幅旋转算法

时间:2009-08-03 18:36:35

标签: algorithm banner

我将很快开始制作横幅旋转脚本,我对如何开发它感到有些困惑。假设客户要求

  

“在未来10天内以10,000美元的价格获得10,000次展示。”

另一位客户要求

  

“100美元的1,000次展示。”

第三个要求

  

“5,000次点击或10,000次展示,价值5,000美元。”

我究竟如何确定在页面请求中显示哪个横幅?我如何衡量一个与另一个相比?显然,第一个请求非常重要,因为我希望在一个时间窗口内提供一定数量的展示。

第二个客户并不是那么重要,因为他们不关心时间窗口,他们只是想要一些面对面的时间。

最后一位客户希望对展示次数/点击次数设置一个或多个限制,使事情变得更加困难。

我已经非常有信心我需要从这些场景中抽象出一些重点来确定谁最受关注。我的问题是什么类型的算法可以处理这个问题,其次我怎么能按重量提供横幅而不总是为每个请求提供最重要的横幅呢?

4 个答案:

答案 0 :(得分:8)

困难来自时间限制而不是其他任何事情。我会将没有指定时间限制的任何人的优先级除以365(一年),然后将时间用作权重因子的一部分。所以:

Client 1 priority: 10000/10 = 1000 
Client 2 priority: 1000/365 ~ 3 
Client 3 priority: 10000/365 ~30

这应该会给你一个相当不错的优先级指标。现在,你不能混合和匹配展示次数和点击次数吗?它们要么是印象路线,要么是点击路线。看到您无法控制点击,但您可以控制展示次数(至少比点击次数更多),我会根据展示次数来衡量。

答案 1 :(得分:6)

使用随机数生成器选择要显示的广告,并为每个广告的优先级加权。为需要更多展示次数或截止日期的客户设置更高的加权系数。如果时间差不多,您可以增加加权系数。

一旦客户点击其请求的展示次数,请将权重降至0以防止其广告展示。

默认加权可能是1左右,允许客户支付额外费用以增加优先级(不告诉他们机制 - 将其记为“高级”展示位置等)。


修改:加权详情

您可以根据需要将其设置为简单或复杂,但基本版本将包含以下术语:

  • 如果广告已达到购买的展示次数/点击次数,则权重为0
  • 基本权重(可能是1.0)
  • 乘以impressions_remaining /所有客户剩余的总展示次数
  • 如果剩余的展示次数/点击次数很少,则
  • 添加一个小常量 - 确保他们获得完成帐户所需的最后几个
  • 截止日期客户:为(剩余展示次数/已购买的展示次数)/(剩余时间/总时间)添加字词

截止日期客户应限制在所有页面显示的90%或某些内容,以确保他们不会胜过其他人。最后一个术语为截止日期客户提供了“紧迫性” - 它会在截止日期到达时无限期,因此您应该在剩余时间段上设置一个条件以防止出现此问题。

答案 2 :(得分:4)

Microsoft Commerce Server包含NOD算法 (见http://msdn.microsoft.com/en-us/library/ms960081%28v=cs.70%29.aspxhttp://msdn.microsoft.com/en-us/library/ee825423%28v=cs.10%29.aspx

我在3个不同的广告服务器中使用了这个公式的衍生版本,结果证明这对我的条件很有用。

关于您的情况的基本公式使用名为NOD的变量,简称“需要交付”。在任何给定时间,横幅的“基本”NOD公式为:

  

NOD =(剩余事件/请求的总事件数)*(总运行时间/   剩余运行时间)

请注意,“活动”是一个通用术语,可能代表展示次数,点击次数,转化次数等,具体取决于您的系统。

该等式表明所有横幅都以1.0的初始值开始,因为(e / e)*(t / t)= 1.0

高于1的NOD值意味着您落后于您的日程安排,而0到1之间的NOD通常意味着您显示的标题“太快”。 0.9到1.2之间的值通常在可接受的范围内(这不是技术范围,而是商业经验)。

只要服务比率与持续时间比率匹配,值就会保持在1.0左右。

对于特定广告位,算法会检查广告位上所有可用横幅广告的NOD。假设您在插槽上有3个横幅,NOD值为0.6,1.35和1.05,最多可达3.0。然后,每个横幅的相对概率按[0.6 /(0.6 + 1.35 + 1.05)] = 20%的顺序变为20%,45%和35%

该算法使用加权概率分布,这意味着即使具有最小NOD值的横幅也有机会被显示。虽然基本公式使用这种方法,但业务决策通常总是迫使我实施比原始公式更有利于紧急NOD值的算法。所以,我拿了基础NOD并将它们与自己相乘。在同一个例子中,概率变为11%,55,5% 和33.5%的顺序。

根据您的情况,您可以考虑更改配方以满足您的需求。首先,您可以通过显示横幅来比较您将获得的收入,您应该将所有显示类型(展示,点击,操作等)转换为常见的有效每千次展示费用值。然后,您可以将此有效每千次展示费用作原始等式的乘数。

对于尚未发布的广告系列,计算有效每千次展示费用(有效每千次展示费用)可能会非常棘手,在这种情况下,您应该使用历史数据。

让我再解释一下这个部分:当你试图通过“展示”单个横幅来比较你可能获得的收入时,你不需要比较基于印象的预算。对于基于点击的预算,您应该使用历史点击率值来猜测“我的系统需要提供多少次展示才能获得X clics”。更高级的算法可能会利用“我的系统需要投放多少次展示才能获得X类别中的广告系列”。

然后你的最终等式变为:

  

NOD = eCPM *(剩余事件/请求的总事件数)*(总计   运行时/剩余运行时)

您始终可以考虑使用有效每千次展示费用来比较结果。就像我改变原始公式以支持更紧急的广告系列一样,您可能更喜欢“更多付费”的广告系列。

答案 3 :(得分:3)

我非常喜欢AlbertoPL的基于时间的方法,但他没有考虑点击次数。它很容易证明点击相关的病态案例:

  • 客户A为1次点击或10,000次展示提供1000美元
  • 客户B为5000次点击或10,000次展示提供1000美元。

任何合理的人都会给予1-click人更高的优先权。计算实际上非常简单:假设您的点击率是每次点击100次展示。

  • 客户A需要10,000次展示或1次点击,因此我们需要至少100次展示才能获得付款。每100次展示费用为1000美元,您可以确定您的客户愿意支付每次展示10美元。

  • 客户B需要10,000次展示或5000次点击。 5000次点击需要500,000次展示,之后我们会明显达到10,000次展示次数,因此我们假设客户真的愿意为10,000次展示支付1000美元,或者每次展示0.10美元。

我们通过最大化我们的$$$$$ /展示来最大化收入,因此客户A优先考虑。让我们使用OP中提供的数字:

客户1:

  • 在接下来的10天内以10,000美元的价格获得10,000次展示
  • =最少10,000次展示* $ 1 /展示/ 10天
  • = $ 1000 /天

客户2:

  • 1000美元的印象
  • =最少1,000次展示* $ .01 / impression / 365天
  • = $ 0.27 /天。

客户3:

  • 1,000次点击或10,000次展示5000美元
  • = min(100,000次点击可获得1,000次点击,10,000次展示)= 10,000次展示,价值$ 5000
  • =最少10,000次展示* $ 0.5 / impression / 365
  • = $ 13.7 /天。

客户根据每天支付的金额优先考虑。