CPD輪播廣告庫的簡單演算法

2021-09-07 01:47:20 字數 2136 閱讀 4964

在廣告的領域中,有一種廣告形式,採用的是cpd的售賣模式,為了對流量進行拆分,**方會對廣告位進行輪播拆分。比如乙個廣告位,被拆成了10輪播,那麼在廣告主來預訂廣告位的時候,這個時候就可以告訴廣告主,我這邊有10個cpd的輪播可以售賣。然後廣告主a買走了其中的乙個輪播,接下來另外乙個廣告主過來,只剩下9個輪播了。

在上面的例子中,乙個cpd的廣告位被拆分成了10個輪播,那麼這個時候廣告位的庫存數就是10,廣告位的cpd庫存,就是乙個廣告位可以售賣的輪播總數。

接下來我們來聊一聊,廣告主在預訂cpd廣告位的時候庫存的一種簡單演算法。

一、不考慮定向的cpd庫存演算法。

前面的博文中,我有提到廣告位的定向的概念,我們在討論cpd庫存演算法的時候,先不考慮定向的條件,來看看庫存是怎麼來計算的。

比如,**方,把乙個廣告位拆成了s輪播。這個時候有個廣告主a跑過來說,我需要購買你廣告位的一輪播,你這邊有多少剩餘的庫存可以賣給我?然後你一看,沒有任何預訂,於是你告訴廣告主a說,這邊可以有s個庫存賣給你,於是廣告主買走了其中的一輪播。

接下來另外乙個廣告主b跑過來說,我想要購買這個廣告位的一輪播,你這邊有多少剩餘庫存可以賣?於是你一看,之前已經被廣告主a買走了一輪播了,所以這個時候剩下了s-1輪播可以賣。

好了通過上面的例子我們可以知道,在不考慮定向的情況下,cpd的庫存計算非常簡單,即下面的公式

剩餘庫存 = cpd總輪播數-客戶已經預訂輪播數(公式1)

二、帶有定向的cpd庫存演算法

接下來我們需要考慮另外一種情況,帶有定向的cpd的庫存演算法。

關於帶有定向的cpd的庫存計算有很多種方法,在這裡,我給大家介紹一種簡單的計算方法。

剩餘庫存 = cpd總輪播數-預訂衝突的輪播數(公式2)

什麼是衝突的輪播數呢? 就是當前的預訂和之前已有的預訂有衝突的預訂輪播數。

舉乙個簡單的例子:

乙個廣告位 5月1號  有10輪播,已經有的預訂如下:

這個時候有個廣告主c過來說,我需要預訂5月1號上海地區,問還剩下多少庫存?

因為廣告主c需要預訂的也是上海地區,這和廣告主a的預訂上海有衝突,但是和廣告主b預訂北京沒有衝突,預訂的衝突輪播數為1

所以廣告主預訂上海地區看到的剩餘庫存數為9。

所以,有定向的庫存計算,最主要的就是要想辦法衝突的預定數。

要計算衝突的預定數,主要分為以下兩步。

1、過濾掉和當前預定不衝突的預定數

2、每個維度在最細的粒度計算衝突的輪播

再舉例說明多維度定向交叉的情況的例子,比如乙個廣告位支援地區定向和年齡定向。

地區定向的最小粒度為城市級別

年齡定向的最小粒度每20歲作為乙個級別,一共包含(0~20,20~40,40~60,60~80)這四個級別

這個廣告位一共被拆成了10個輪播,當前已經有的預定如下:

這時候廣告主e過來,定向條件是 地區:杭州,年齡:20~60歲,問廣告主e看到的剩餘庫存是多少呢?

下面簡單的來分析一下:

廣告主a的地區定向條件是上海,與杭州不衝突,所以廣告主a的預定和當前廣告主不衝突,可以過濾掉。

廣告主d的地區定向條件是全國,年齡是所有年齡的人,所以廣告主d的預定和當前廣告主的預定有衝突,衝突數為1輪播。

我們來重點看一下廣告主b、廣告主c與當前廣告主定向的衝突預定數的計算。

首先我們把b和c的定向條件拆到最細

再把當前客戶的定向條件(杭州,20~40歲)拆成最細的粒度

e1 與b 和 c1衝突, 衝突的預定數為 n1 = 3+2=5;

e2 與 c2 衝突,衝突的預定數 n2 = 2

然後,求得當前廣告主e的預定與b和c廣告主預定的衝突數 = max(n1,n2) = 5,再加上d的全國通投,總的預定衝突數 = 5 + 1 = 6

最後根據公式2求得  剩餘的輪播數 = 10 -6 =4

所以,最終當前廣告主e在 杭州,20-60歲這個定向條件下,看到的cpd的廣告位庫存為4。

以上的過程便完成了cpd輪播廣告庫存數的計算,當然以上的演算法簡單粗暴,但是在某些情況下計算出來的,並非最優解,後面有時間我會再給大家講一種更好的cpd輪播廣告庫存演算法。

關於CPD演算法的理解

最近看了 point set registration coherent point drift 來記錄一下對這個演算法的理解。cpd演算法使用的數學模型為高斯混合模型 gmm 關於高斯混合模型的理解可以參考下面這篇部落格 首先定義了一系列變數 其中點集x和點集y是兩個需要配準的點雲,t為變換矩陣。...

banner輪播的簡單實現

首先banner輪播讓我們避免了自己手寫輪播圖的需求是繁瑣的 因為banner已經寫好了 我們只要將我們想要輪播的存到集合中,在將集合放入banner中就好了。1.使用前先新增依賴 compile com.youth.banner banner 1.1.5 compile com.github.bu...

超簡單的文字輪播

這是一段耐人尋味的 當然了你想看就看,不想看就直接跳過。兩分鐘即可寫出文字輪播,因為這是封裝的乙個js檔案,主要是使用簡單。fn.extend var this this.eq 0 find ul first var lineh this.find li first height 獲取行高 line...