BCS - 廣告預算控制系統

目錄

  • 一、技術一覽

  • 二、開發功能特色介紹

  • 三、技術詳細說明(流量預測、Pacing)



一、技術一覽


  • 語言:Python
  • 函式庫:Pandas, Scikit-learn, Google-cloud-bigquery, etc.
  • 資料庫:Mysql, Redis, BigQuery
  • 環境:AWS EC2 上 使用 Docker(透過 dockerfile 部署 Nginx, postgres, prefect).
  • 監控:Prefect.
  • CI/CD:Jenkins, Ansible.
  • 版控:Git.

設計規範:

  • 遵循 PEP 8 (Python Enhancement Proposal 8) 風格


二、開發功能特色介紹


  • 每日流量預測
  • 每分鐘 Pacing 計算
  • 即時在線監控每一隻 Python 程式的執行狀況
  • 有需求可即時在監控面板調整每支程式的執行時間,例如每5分/次。
  • 程式錯誤時發訊息 & Mail 通知


三、技術詳細說明(流量預測、Pacing)

BCS 從 0 開始構建,作為控制廣告預算走速的核心系統,需要確保高可用及高穩定,否則會影響廣告投遞的目標流量可能未達標或超額,無論哪一種都會導致公司虧損



1. 每日流量的預測:

從 BigQuery 取得資料後,接下來進行資料特徵工程,會針對每一個 廣告單元 的流量的24小時進行預測,同時需要分出週一到週日,因為平日與週末的流量以及顛峰時段的流量都會有所不同。

有些 廣告單元 因為資料不夠,無法進行預測,這邊則會選擇其它處理方式,例如以過往特定期間區間的平均,或者挪移到其它廣告單元來進行投遞(不預測這些廣告單元流量)。

預測的模型選擇隨機森林,預測方式初步參考「scikit-learn algorithm cheat-sheet」這張圖表,爾後微調,在流量大的廣告單元中,準確率可達85%以上解決先前廣告投遞選擇 ASAP 的問題(廣告會在一天開始時迅速把流量投放完畢)



2. 每分鐘 Pacing 的計算。

部分會與 Go工程師&負責處理投遞廣告RD 一同開發完成

Pacing 每分鐘執行/次(Pacing 論文的建議最佳值),每次執行 Pacing 時都會計算出 PTR(Pass Through Rate, 求通過率)。

PTR 會根據當前版位廣告曝光量來提高 或 降低,增高代表該則廣告的曝光率提高,反之亦然,舉例來說我已經計算出本日廣告曝光量需要滿足10,000,我需要投遞在指定期間的12小時內,則每小時投遞曝光量需要 833 個曝光量,假設第一個小時第1分鐘曝光量為0,則 PTR 在下一分鐘增加。

當 第30分鐘時,曝光量已達 833,則 PTR 降低,直到歸0意味著不再曝光,多餘的曝光量會在下一次重新計算。



3. 環境配置

透過 Dockerfiles 進行配置,nginx 設置反向代理到指定的 port 服務上。

Dockerfiles 處理 Run 指令,例如需要設定時區(TZ=Asia/Taipei)統一時區,同時部署對應環境。


当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器