予算ペーシング
朝9時までに使い切られた日予算は、広告主の役に立ちません——夜の観客はキャンペーンを一度も見ず、朝のインプレッションは慌てて買われたものです。ペーシングの仕事は消化を1日に沿わせることであり、その設計原理は機械学習屋のものではなく制御工学者のものです。観測によって自己調整する、単純なフィードバックループ。
ゲート
ペーシングは配信時、選択の手前で確率的なゲートとして働きます。リクエストごとに各キャンペーンはある確率でスロットルされ、スロットルされたキャンペーンはそのインプレッションを見送ります。確率は消化率に対する PI コントローラー——サーモスタットのアルゴリズム:今日の誤差への比例と、その累積履歴への比例で補正する——から来ます。
error = smoothed(actualSpend / expectedSpend) − 1
throttle = clamp(Kp·error + Ki·integral, 0, 0.99)
使い過ぎはスロットルを押し上げ、使い足りなければ下がります。コントローラーは意図的に非対称です——超過側の誤差は乗数(基準2倍)で増幅されます。使い過ぎは取り返しがつかず、使い足りない分はあとで追い上げられるからです。
本番の挙動が宿っているのはその先の細部で、それぞれに存在理由があります。
- 自己調整。 超過乗数は、直近の消化率のローリング窓から自分自身を調整します(1.5倍〜5倍)。慢性的な使い過ぎはコントローラーを強気にし、うまく歩けた日は緩め、学ばれた値は日をまたいで持ち越されます。ゲインは固定、適用は自己調整。
- 振動の減衰。 消化率がシーソーを始めたら、収まるまで平滑化が強まります——うろつくコントローラーは、遅れるコントローラーより始末が悪いのです。
- アンチワインドアップ。 積分項はクランプされ減衰します。午前中いっぱいの使い足りなさが、午後のスロットルなし消化を「貯金」することはできません。
- 猶予期間。 新しい1日(あるいは始まったばかりのキャンペーン)には、穏やかなスロットルの短い窓が与えられます——最低時間と最低リクエスト数の両方です。トラフィックの少ないサイトでは10リクエスト来るのに1時間かかることもあるからです。リクエスト数の条件がなかった頃、小さなサイトは何の証拠もなしにスロットルされていました。
- 日またぎの学習。 今日予算を早々に使い切ったキャンペーンは、明日を強化された乗数のヒント付きで始めます。
期待消化は、時計ではなくトラフィックに従う
expectedSpend が繊細な側の半分です。線形ペーシング(1日の X% の時点で予算の X%)は朝のピークを絞りすぎ、深夜には達成不可能な目標を課します。Promovolve は代わりにサイトごとのトラフィック形状を学びます。24個の時間別ボリュームを、平日と週末で別々に、広告リクエストそのものの到着時刻から。
学習は意図的に保守的です。生まれたてのサイトは初日に高速な日中推定器で形状をブートストラップします。それ以降は——恒久的に——形状は UTC 真夜中のロールオーバーでのみ変わり、今日観測された分布が保存済み形状に 20/80 でブレンドされます。再起動は永続化された形状(両方の曜日タイプ)を復元して同じ体制に戻ります。スナップショットは毎時、ロールオーバー時、シャットダウン時に書かれます。似た日が10日あれば形状は収束し、異常な1日ではほとんど凹みません。
形状は学習専用です。形状を設定する API もダッシュボード項目も、意図的に存在しません。手書きの形状は測定ではなく直感を符号化したものであり、間違った形状は無い方がましだからです——フラットな形状は品よく劣化してちょうど線形ペーシングになりますが、間違った形状は本物のピークを絞ります。パブリッシャーは学ばれた形状を見ることはできます(サイトの観測ページにチャートがあり、サイト統計にエクスポートされます)が、編集はできません。
形状はペーシングに二度仕えます。その累積曲線は PI コントローラーが追う期待消化率になり、時間ごとの相対ボリュームはインプレッションレート目標をスケールします。時間の境界をまたいで補間されるので、レートは段差ではなくスロープで変わります。
ここに無いもの
インプレッション単位の入札調整はありません。勝率予測モデルもありません。ボラティリティでスケジュールされたゲイン表もありません(設計はされましたが、本番が必要としたのは自己調整コントローラーだけだったので、削除されました)。ペーシングは紙ナプキンの上で推論できるフィードバックループです——だからこそ、プラットフォームが配信するすべてのインプレッションの門番を任せられるのです。