はじめに

こんにちは、 Data Science Center(DSC)佐藤弓之介です。 ABEMA の広告配信を担当しています。

広告配信の運用では、 期間内に目標のインプレッション数 (広告表示回数) を達成するか否かが最大の評価軸となります。 達成できないと、 広告主のマーケティング予算配分が無駄になるためです。 達成だけでなく、 期間を通じて幅広く一定量を流すことも求められます。 配信が特定の時間帯に偏ると、 同じ予算を使っても狙ったユーザー層に届かない時間帯が出てきて、 広告主側から見ても予算配分の効率が悪くなるからです。

今回扱うのは、 配信単位 (広告キャンペーン)1 ごとに 3 つの指標が異なる状況。 3 つとは、 期間内に達成したい広告表示回数の目標、 配信期間、 単位時間あたりのリクエスト到来率です。 ABEMA の配信現場では、 規模・期間・性質の異なる多数のキャンペーンを同じシステムで並走させています。 この状況に PI 制御 (比例 + 積分のフィードバック制御) と対数比スケール不変誤差 (規模違いを吸収する誤差設計) で挑んだ話を紹介します。 ペーシング制御を通じて狙うのは、 規模や期間の異なる配信単位を、 1 セットのゲインで運用しながら、 期間内に目標を達成しつつ配信を時間方向に均等にならすことです。

同じように規模違いの追従制御を扱う方の参考になれば幸いです。

背景

ABEMA の広告配信システムについて

ABEMA のコンテンツ内に挿入する広告の配信やトラッキング、 分析などの機能を担うシステムです。

課題

ABEMA では番組特性・時間帯・話題性によってリクエスト量が大きく変動します。 例えば人気番組の放映時には視聴ユーザーが急増し、 同時刻に発生する広告枠 (= 配信判定の機会) も比例して増えるため、 広告配信システムへのリクエストもピーク時には平時の数十倍まで膨らみます。

これまでの配信判定は、 リクエストが来たら配信するかどうかを 0/1 で決める On/Off 制御に頼りがちでした。 しかし、 連続値で配信比率を表現できないため、 リクエストの波に対応しきれない場面があり、 細かい制御には不向きで限界を感じる場面が増えていました。

解決方針

本記事では、 連続値出力を持つ PI 制御と対数比スケール不変誤差を組み合わせます。 配信単位の規模・期間・リクエスト到来率の変動に対して頑健な構成を狙います。

これで目指すシステムの姿は、 規模・期間の異なる配信単位を 1 セットの PI ゲインで共通運用しながら、 期間内の目標達成と時間方向の均等配信を両立させる状態です。 配信単位ごとのゲインチューニングが不要になり、 運用コストは配信単位数に依存しなくなります。

関連する先行事例

広告配信にフィードバック制御を応用した事例は他企業にもあります。 Verizon Media の DSP は、 積分制御 + フィードフォワード補償による予算ペーシングを提案しました2。 LinkedIn は、 確率的スロットリングを採用した予算ペーシングを実装しています3。 また Yahoo では、 適応制御による smart pacing が運用されています4。 本記事の構成も、 これら先行事例と同じく「広告配信プラントをフィードバック制御で扱う」 思想に位置づきます。

さらに広く眺めると、 WSDM 2016 の Zhang らが RTB 入札制御を PID で扱う設計を提案して以降5、 多様なフィードバック制御の事例が並んでいます。

  • Roku は pickiness level という独自の制御変数を 5 分周期で調整6
  • Twitter/X はペーシングを独立サービスに切り出し PID で制御7
  • ShareChat は \(\lambda \in [-99, +99]\) を cron 周期で更新8
  • MicroAd は RTB 送信確率を制御変数とする PID を採用9
  • Ogury は Speed-Threshold で P/I/D 全成分の役割を明示10
  • DoorDash は非線形 Smart Fast Finish でオーバーデリバリーを抑制11
  • Snap Inc. は小予算特化で bucketized hysteresis を導入12
  • Adobe (Google 特許) は PID controller engine を bid price 調整に応用13

本記事の構成

前提知識の整理 + 4 章構成で進めます。 プラント定式化 → 誤差設計 → 制御則 → 離散化、 の順に積み上げる流れです。

  • 制御工学と PID 制御の基礎: フィードバック制御の定義と PID の 3 要素 (P/I/D) を整理。 プラント・誤差・PI 制御といった用語を、 第 1 章へ進む前に押さえる
  • 第 1 章 プラント: 配信ペーシングを制御対象として定式化。 普通の誤差 \(e = G – N\) にはスケール従属性が残る課題を提示
  • 第 2 章 対数比スケール不変誤差: 線形参照軌道 \(r(t) = G \cdot t/T\) に対する対数比の追従誤差で、 値域・感度から \(G\) と \(T\) を消す
  • 第 3 章 制御則の現実解 (PI + Anti-Windup): D 項廃止の数式的根拠と、 積分項クランプ法による windup 抑制を提示
  • 第 4 章 二値判定の確率化: 連続値 \(u(t)\) を sigmoid と Bernoulli ドローで 0/1 配信判定に橋渡し

制御工学と PID 制御の基礎

古典制御に馴染みがない読者向けに、 第 1 章以降に出てくるプラント・誤差・PI 制御といった用語を先に押さえます。

フィードバック制御とは何か

身近な例で言えば、 シャワーの温度調整がフィードバック制御です。 熱すぎたら冷水側のレバーを動かし、 ぬるすぎたら温水側を動かす。 観測した結果に応じて入力を自動で調整する仕組みが、 制御工学でのフィードバック制御です。

工学的には、 制御対象 (プラント) の出力を測定し、 目標値との誤差から制御信号を生成して系を駆動する閉ループ構造を指します14。 古典的な事例としては Watt の蒸気機関の調速機や Minorsky の船舶自動操舵 (1922) が有名で15、 自動制御の歴史は Bennett の総説16に整理されています。

広告配信もリクエスト到来 (入力) と imp 数 (出力) の関係を持つプラントなので、 同じ枠組みで扱えます。

PID 制御の 3 つの要素

フィードバック制御を実装する代表形が PID 制御です。 誤差 \(e(t) = \) (目標値) − (観測値) に対して、 3 つの異なる方法で反応する制御則を合成します。

\[
u(t) = K_p\,e(t) + K_i \int_0^{t} e(\tau)\,d\tau + K_d\,\frac{de(t)}{dt}
\]

各項はシャワーの温度調整に例えると役割が分かります。

  • P 項 (比例): 現在の誤差にゲイン \(K_p\) を掛けて反応する。 「今ぬるいから温水側をひねる」 という即応の制御
  • I 項 (積分): 過去の誤差を累積して反応する。 「ずっとぬるいままなら、 温水側をさらに開け続ける」 という、 定常的なオフセットを潰す補正
  • D 項 (微分): 誤差の変化率に反応する。 「急に冷えだしたら冷えきる前に温水を強める」 という、 先読みの予測

3 項のうち、 工業現場では P 項と I 項だけを使う PI 制御が最も広く採用されています17。 D 項は雑音を増幅する弊害が大きく、 観測値が階段関数になるような系では迷わず切るのが定石です。

本記事と PID 制御の関係

本記事の制御対象 (広告配信プラント) は、 リクエスト到来が離散的に発生する系です。 誤差 \(e(t)\) が階段状の雑音を含むため、 D 項を切った PI 構成を採用します (詳しくは 3 章で)。 また操作量 \(u(t)\) は配信判定確率 \([0, 1]\) に閉じ込める必要があり、 PI 制御の出力を sigmoid \(\sigma\) で押し込む離散化の工夫を入れます。 3 章から 4 章にかけて扱います。

出発点となる式: 誤差と制御則

本記事で組み立てる誤差と制御則は次の 2 本立てです。

ペーシング (一様配信) を駆動するために、 線形参照軌道 \(r(t) = G \cdot t/T\) に対する追従誤差を対数比でとります。

\[
e(t) = -\log\frac{N(t)}{r(t)}
\]

ここで \(r(t) = G \cdot t/T\) を代入すれば \(e(t) = -\log\bigl( T \cdot N(t) / (G \cdot t) \bigr)\) とも書けます。 これは「同じ進捗ペース \(N(t) = r(t)\) で \(e = 0\)、 遅れていれば \(e > 0\)、 進みすぎなら \(e < 0\)」 となる双方向の追従誤差です。

制御則は、 実数を \([0, 1]\) へ押し込む sigmoid \(\sigma\) に通す前の PI 制御式を出発点にします。

\[
u(t) = K_p\,e(t) + K_i \int_0^{t} e(\tau)\,d\tau
\]

この出発点から設計判断を 1 つずつ積み重ねていく形で本文に入ります。


1. プラント — 配信ペーシングを制御対象として定式化する

制御工学では、 制御したい対象 (今回の場合は広告配信システム) を プラント と呼びます。 広告配信のレート制御もリクエスト到来 (入力) と imp 数 (出力) の関係を持つプラントとして扱えれば、 古典制御の道具がそのまま適用できます。

プラントとして見る広告配信

広告ドメインの言葉を制御工学の語彙に対応させます。

  • 観測量 \(N(t)\) は累積 imp 数(これまでに広告が表示された回数の累積)
  • 操作量 \(u(t) \in [0, 1]\) は配信判定確率(リクエスト到来時にその広告を配信するかの確率)
  • 外乱 \(\lambda(t)\) はリクエスト到来率 (制御の外側から流れ込む変動要因。 ここでは広告枠への単位時間あたりのアクセス頻度)
  • 目標 \(G\) は目標 imp 数(期間 \(T\) 内に達成すべき配信回数)
  • 配信単位 (広告キャンペーン) \(i\) ごとに \(G_i, T_i, \lambda_i(t)\) が異なる(簡潔のため、 以降は文中で添字 \(i\) を省略する)

動的モデル

広告配信プラントは連続時間の積分器です。

\[
\frac{dN(t)}{dt} = \lambda(t)\,u(t)
\]

ここで \(\lambda(t)\) は時変なので、 厳密には線形時変系 (LTV) です。 本記事では制御帯域に対し \(\lambda(t)\) の変化が十分にゆっくりだと見なします。 そこで各時刻 \(t\) で \(\lambda\) を凍結した近似 (frozen-time approximation) を採用します。 プラントを「単位時間あたり \(\lambda\) 倍されて積分される」 時不変な構造として扱う近似です。

この動的モデルには 3 つの特徴があります。

  • 「単位時間あたり \(\lambda\) 倍されて累積する」 積分器の構造
  • \(\lambda(t)\) は時変かつ配信単位ごとに広い範囲で変動
  • 時変・規模依存性は本記事の議論で繰り返し効く要素

コントローラの設計判断

古典 PID 標準形のコントローラを置きます。

\[
u(t) = K_p\,e(t) + K_i \int_0^{t} e(\tau)\,d\tau + K_d\,\frac{de(t)}{dt}
\]

設計判断は 3 つあります。

  • \(K_d = 0\) を恒久固定(根拠は制御則の節で後述)
  • プラントゲイン \(\lambda\) がそのまま閉ループ応答に影響するため、 規模違いを誤差設計で吸収する必要がある
  • 規模違いを吸収する誤差設計を次節で導入

図1: 連続時間フィードバック構成のブロック図

目指す進捗率

PI 制御で目指したいのは、 進捗率 \(N(t)/G\) を時間に対して線形に伸ばすことです。 これにより、 期間内に目標を達成しながら、 リクエストの波に対して配信を滑らかに分散できます。 PI 制御で配信確率を連続値 (例: 0.5) として出せれば、 配信比率を細かく操作して線形軌跡に追従できます (二値判定では中間水準を表現できない問題は 4 章で詳しく扱います)。

図2: PI 制御で目指す進捗率 (上) と配信確率 (下) — on/off は時間軸で連動して進捗率を凍結させるが、 PI 制御は連続値で線形軌跡を維持する

素朴な誤差では規模依存性が残る

誤差を \(e = G – N\) と置くと、 操作量と伝達関数に規模依存性が現れます。

  • \(u_P = K_p(G – N)\) で操作量の振幅が \(G\) に比例する
  • \(G = 10^3\) と \(G = 10^6\) では振幅 1000 倍違い、 同じ \(K_p\) で前者は不感、 後者は飽和
  • ゲイン余裕・応答帯域が \(\lambda \cdot G\) に依存し、 配信単位ごとにゲイン再調律が必要

これは PID 制御で実装系の規模が変わるたびに再調律が避けられない、 典型的なスケール従属性の数式的姿です。 次節で対数比誤差を導入してこれを解消します。


2. 対数比スケール不変誤差で配信単位共通のゲインが成立する

対数比に置き換えると不変性が現れる

まずは普通の追従誤差を書き下します。

\[
e_{\mathrm{naive}}(t) = G – N(t)
\]

この誤差には 2 つの問題があります。

  • 値域が \(G\) に比例し、 規模違いの配信単位で振幅が大きく揃わない
  • 操作量 \(u_P = K_p(G – N)\) も \(G\) に比例し、 同じ \(K_p\) で \(G=10^3\) と \(G=10^6\) では振幅が 1000 倍違う
  • 結果として配信単位ごとにゲインを再調整する運用負荷

そこで線形参照軌道 \(r(t) = G \cdot t/T\) を導入し、 その追従誤差を対数比でとります。

\[
e(t) = -\log \frac{N(t)}{r(t)} = -\log \frac{T \cdot N(t)}{G \cdot t}
\]

参照軌道 \(r(t) = G \cdot t/T\) として、 進捗率を \(p(t) = N(t)/r(t)\) と再定義します。 こうすると \(p = 1\) で期待通りのペース、 \(p < 1\) で遅れ、 \(p > 1\) で進みすぎ、 を表します。

なぜ正規化に対数を取るのか

ここで素朴な疑問が出てきます。 「もっと単純に \(e = t/T – N/G\) (時間進捗と達成率の線形差分) でも、 規模 \(G\) の正規化は実現できる」 という指摘です。 たしかに線形差分でも値域は \(G\) に依存せず、 正規化の主目的は達成できます。 本記事があえて対数比を選ぶ理由は次の 3 つです。

  • 飽和の非対称な扱い: \(N \to 0\) で \(e \to +\infty\)、 \(N \to r\) 超過で \(e\) が負方向に大きくなる性質。 端まで連続的に強い制御信号が出るため、 後述する sigmoid と組み合わせると「最大限取り戻す」 「最大限抑える」 を滑らかにつなげられる
  • 比を扱う系の自然な定式化: pH 制御や化学反応器の対数空間制御と同じ系統。 進捗率という比そのものへ線形応答する設計
  • 感度の動的調整: \(\partial e/\partial N = -1/N\) が \(N\) に逆比例する性質。 序盤 (進捗小) では強く取り戻し、 終盤 (進捗大) では穏やかに調整する自然な振る舞いが得られる

対数は唯一解ではなく、 正規化に加えて上記の 3 点を取りたいときの設計選択です。

不変性の証明

ここで誤差の不変性を 3 つに分けて確かめます。 いずれも「規模 \(G\) や期間 \(T\) が変わっても制御挙動が変わらない」性質を保証します。

  1. 値域の不変性

同じ進捗率 \(p(t) = N(t)/r(t)\) に対して、 誤差は単純な形になります。

\[
e = -\log p
\]

右辺に \(G\)、 \(T\)、 \(t\) のいずれも陽に現れません。 たとえば \(p = 0.5\) のとき、 規模 \(G\) や期間 \(T\) がどれだけ違っても、 \(e = \log 2 \approx 0.69\) で同じ値を返します。

  1. 感度の不変性

\(e = -\log(N/r) = -\log N + \log r\) を \(N\) で偏微分します。 参照軌道 \(r(t)\) は \(N\) に依存しないので、 偏微分は \(\log N\) の項だけが残ります。

\[
\frac{\partial e}{\partial N} = -\frac{1}{N}
\]

右辺に \(G\) と \(T\) のいずれも現れません。 つまり同じ \(N\) の摂動に対する誤差の応答は、 規模や期間の大小に依存しません。

このように、 値域・感度の 2 段階で規模 \(G\) と期間 \(T\) の両方への独立性が成り立つため、 1 セットのゲインで配信単位横断の共通制御が成立します。

古典制御の正規化と同型である

この設計は古典的な制御工学では「正規化(normalization)」と呼ばれる作法に対応します。 Åström-Hägglund が正規化を扱う章17で整理されており、 pH 制御や化学反応器の対数空間制御と数学的に同型です。

図3: 規模違い配信単位の誤差軌跡比較(左は普通の誤差、 右は対数比誤差)

左図では規模に応じて値域が大きく広がり、 同じゲインで扱えない様子が読み取れます。 一方の右図では対数比に直すことで軌跡が重なり、 配信単位共通のゲインで制御できる構図になっています。

実装の要点

実装するときの落とし穴が 2 つあります。

1 つ目は \(\log(0)\) で数値が発散する問題。 配信開始直後は \(N = 0\) で、 そのまま計算すると \(-\log(0/r) = +\infty\) となり、 後段の PI 制御を破壊します。 これを避けるため、 比 \(N/r\) に下限 \(\varepsilon\) (たとえば \(10^{-9}\)) を入れてクランプします。

2 つ目は 進みすぎたときの符号反転 です。 \(N \ge r(t)\) になると \(\log(N/r) \ge 0\) になり、 誤差は負(\(e \le 0\))になります。 これは「想定ペースを超えたら配信を抑制する」方向の信号で、 PI 制御の出力を 0 寄りに引き下げるはたらきがあります。 飽和方向の符号を確保しておかないと、 上振れに対するブレーキがかかりません。


3. 制御則の現実解 — PI + Anti-Windup(D 項は廃止)

先に本記事で採用する最終的な制御則を置き、 各設計判断(D 項廃止、 Anti-Windup の必要性)の根拠を後段で詰めます。

採用する誤差は対数比スケール不変誤差 \(e(t) = -\log(N(t)/r(t))\) です(\(r(t) = G \cdot t/T\) は線形参照軌道)。 この誤差から操作量 \(u(t)\) を生成する PI 制御則は次の形になります。

\[
u(t) = \sigma\bigl( K_p\,e(t) + I(t) \bigr)
\]

ここで \(I(t)\) は積分項クランプ式 Anti-Windup を備えた積分器で、 離散時間での更新式は次の形になります。

\[
I[k+1] = \mathrm{clip}_{[I_{\min}, I_{\max}]}\bigl( I[k] + K_i\,e[k]\,\Delta t \bigr)
\]

D 項(\(K_d \cdot de/dt\))は雑音を増幅する害があるため恒久的に切ります(\(K_d = 0\))。

この 3 つの設計判断 (PI 採用・D 項廃止・Anti-Windup) の根拠を以降で 1 つずつ追います。

D 項を切ると雑音増幅が消える

採用する制御則を改めて並べます。

\[
u(t) = \sigma\bigl( K_p\,e(t) + K_i \int_{\mathrm{clamped}} e(\tau)\,d\tau \bigr)
\]

D 項は誤差の微分 \(K_d \cdot de/dt\) を出力に加える項で、 誤差変化の急峻さに対してブレーキをかけて応答を整える役割を持ちます (D ゲインを大きくすると出力変化が抑えられます)。 温度制御のような時間方向に滑らかな誤差を扱うプロセスでは、 オーバーシュート抑制に有効です。 一方、 広告配信での誤差 \(e\) は、 リクエスト到来のたびに \(N\) が 1 だけ進む階段関数になります。 階段の微分は急峻なスパイクで、 D 項がこの雑音を増幅して \(u(t)\) に乗せてしまうため、 本記事では D 項を切ります。

D 項を入れたまま運用すると、 実際には次の症状が現れます。

  • \(u(t)\) がリクエスト到来のたびに激しく上下し、 配信判定が「配信→不配信」 を細かく切り替える
  • I 項がこの振動を積算してしまい、 出力の平均水準まで乱れる
  • 上流のリクエスト負荷が安定せず、 配信先サーバーに余計な負担がかかる

数式的にも確認できます。 D 項の周波数応答は、 周波数 \(\omega\) が高いほどゲインが線形に膨らみます。 P 項は周波数によらず一定、 I 項は高周波で減衰するのに対し、 D 項だけが高周波で増幅するという非対称構造です。

図4: D 項オン/オフの制御出力スペクトル比較

D 項オン時は高周波帯のパワーが立ち上がり、 オフでは低周波の追従成分のみが残ります。

広告配信で D 項を切る判断は、 業界の先行事例と整合します。 Karlsson (2020) の総説では Verizon Media DSP の制御系として「積分制御 + フィードフォワード補償」 が採用されており、 D 項は含まれていません2。 制御工学の実務でも、 ノイズの乗ったプロセス変数では微分が交互に大きく振れて制御出力に chatter を生むことが指摘されており18、 D 項廃止は雑音環境下での標準的な対処です。

飽和帯で I 項が発散する問題と積分項クランプ

\(u\) は確率値で \([0, 1]\) に飽和します。 飽和帯では次の問題が発生します。

  • I 項の発散として \(I(t) = I_0 + K_i \int e\,d\tau \to \infty\)(\(e\) が定符号で積み続ける)
  • 誤差反転後も \(I\) が抜けきるまで \(u\) が戻らず、 オーバーシュートと長い振動

この「飽和帯で I 項が暴走する現象」 を windup (ワインドアップ) と呼び、 対処の総称を Anti-Windup と呼びます。 本稿では Anti-Windup の中でも実装が単純な 積分項クランプ法 を採用し、 次の方針で解消します。

  • \(I\) 項を \([I_{\min}, I_{\max}]\) の固定区間に閉じ込める

\[
I[k+1] = \mathrm{clip}_{[I_{\min}, I_{\max}]}\bigl( I[k] + K_i\,e[k]\,\Delta t \bigr)
\]

  • クランプ後の有界性は \(|I[k]| \le \max(|I_{\min}|, I_{\max})\)
  • back-calculation と異なり追加ゲイン \(K_t\) の調律が不要19

PIController の構造を簡単にまとめます。

  • フィールドは比例ゲイン \(K_p\) と積分ゲイン \(K_i\)、 積分器状態 \(I\) 及び積分項クランプ範囲 \([I_{\min}, I_{\max}]\)、 そして出力クランプ範囲 \([0, 1]\)
  • 更新は \(I[k+1] = \mathrm{clip}(I[k] + K_i e \Delta t, I_{\min}, I_{\max})\) の計算
  • 出力は \(u = \sigma(K_p e + I[k+1])\) を返す処理
  • D 項は廃止(\(K_d = 0\) 固定)

図5: Anti-Windup あり/なしの I 項軌跡比較

Anti-Windup なしだと飽和解除後も \(I\) が高止まりして \(u\) が下がりきらず、 クランプを入れた側は \(u\) が速やかに戻ります。


4. 1/0 の二値判定を確率引きで確率化する

ペーシング機構は元々、 リクエストが来たときに配信するか否かを 1/0 の二値で判定する仕組みでした。 一方、 ここまで設計してきた制御則は実数値を吐き、 sigmoid \(\sigma\) で \([0, 1]\) の連続値に押し込めています。 あとはこの連続値をどうやって 1/0 の判定につなげるかを考えていきます。

閾値判定では中間値の配信単位が止まる

素朴な方法は「\(u > 0.5\) なら配信」 のような閾値判定です。 しかし、 これだと \(u = 0.3\) のような中間値の配信単位は閾値を超えないため「ずっと配信しない」 状態に張り付き、 目標未達のまま期間を終えます。 \(u\) を中間値のままで意味を持たせるには、 \(u\) の値そのものを「配信される確率」 として実体化します。

制御量を確率として実体化し、 確率引きで 0/1 に落とす

PI 制御則が吐く \(u(t)\) は、 sigmoid \(\sigma\) によって \([0, 1]\) の連続値に押し込められています。 この \(u(t)\) を「配信される確率」 として実体化すれば、 0/1 の二値判定と連続値の制御則を地続きにつなげます。 具体的な操作はシンプルです。 リクエスト到来ごとに、 確率 \(u\) で 1、 それ以外で 0 を引きます (1 なら配信、 0 なら不配信)。

\[
E\Bigl[\textstyle\sum_{k=1}^{N_{\mathrm{req}}} X_k\Bigr] = u \cdot N_{\mathrm{req}}
\]

結果として、 リクエスト数 \(N_{\mathrm{req}}\) が積み上がるほど実配信比率は \(u\) へ収束していきます(大数の法則)。 つまり「制御量 \(u\) を確率にする」 操作によって、 連続値 \(u(t)\) がリクエスト系列上の配信比率としてそのまま意味を持つようになりました。 副産物として、 配信判定が確率に基づくため、 リクエストがどの順番で到着しても制御の動きは変わりません。

改善後の姿

これらの設計を組み合わせると、 ABEMA の広告配信ペーシングは次のような状態になります。 規模・期間の異なる配信単位を、 1 セットの PI ゲインで共通制御。 リクエストの波 (番組特性・時間帯・話題性で変動) に対しては、 I 項の累積誤差補償が進捗率の線形軌跡を支えます。 配信単位ごとのチューニングは不要となり、 運用コストは配信単位数に依存しません。


まとめ

本記事では、 広告配信ペーシングを古典制御の追従問題として再定式化しました。 線形参照軌道 \(r(t) = G \cdot t/T\) に対する対数比のかたちで誤差をとります。 これで値域と感度から規模 \(G\) と期間 \(T\) が消えます。 さらに PI + 積分項クランプ Anti-Windup で windup を抑え、 確率引きで連続値 \(u(t)\) を 0/1 判定に橋渡しする設計です。 これにより、 規模・期間の違いに対して頑健に、 配信単位共通のゲインで制御できます。

本制御則は AbemaTV BD 本部にて Go で実装し、 自身の手で広告配信サーバーに組み込みました。 配信ペーシング機構として、 本番の広告配信パイプラインで稼働しています。 データサイエンティストの所属ながら、 制御の設計から Go 実装、 配信サーバーへの組み込みまで自分の手で進められたのは、 個人的に嬉しい経験でした。

参考文献


  1. 配信単位 = ある広告キャンペーンを指します。 期間 \(T\) 内に目標 imp 数 \(G\) を達成するように配信される単位で、 imp 数はリクエスト到来時に配信判定で 1 がドローされた回数の累積(すなわち広告が配信された回数)です。 
  2. Karlsson, N. Feedback Control in Programmatic Advertising: The Frontier of Optimization in Real-Time Bidding. IEEE Control Systems Magazine, Vol.40 No.5 (2020), pp.40-77. DOI: 10.1109/MCS.2020.3005013. Verizon Media DSP における広告配信プラントを非線形・時変・確率的なシステムとして扱い、 積分制御 + フィードフォワード補償で予算ペーシングを行う設計の総説。 
  3. Agarwal, D. ほか Budget Pacing for Targeted Online Advertisements at LinkedIn. KDD 2014, pp.1613-1619. DOI: 10.1145/2623330.2623366. LinkedIn における Pass Through Rate (PTR) と確率的スロットリングの実装。 高速消費キャンペーンを抑制し低速消費を解放するフィードバック構造を採用。 
  4. Xu, J. ほか Smart Pacing for Effective Online Ad Campaign Optimization. KDD 2015. DOI: 10.1145/2783258.2788615. arXiv: 1506.05851. Yahoo における smart pacing の実装。 オフライン・オンライン両方のデータから配信ペースを学習し、 階層化された配信統計を用いて高反応率のグループに高いペーシング率を割り当てる構成。 
  5. Zhang ほか Feedback Control of Real-Time Display Advertising WSDM 2016 arXiv:1603.01055。 RTB の入札制御を \(e(t_k) = x_r – x(t_k)\) という線形差分誤差に対する PID 制御で扱う設計。 アドテック PID 制御の出発点となる論文の 1 つ。 URL: https://arxiv.org/abs/1603.01055。 
  6. Roku Tech Blog PID Controller for Ad Spend Pacing. https://www.weareroku.com/blogs/tech-blog/pid-controller-blog-post 「pickiness level」 を制御変数化し、 5 分周期で PID を回すペーシング設計。 長期スパンの予算誤差を 0.5% 以内に収めると報告。 
  7. Twitter (現 X) Engineering How We Built Twitter’s Highly Reliable Ads Pacing Service (2021)。 ペーシングを独立サービスとして切り出し、 PID controller でリアルタイム制御する設計。 URL: https://blog.x.com/engineering/en_us/topics/infrastructure/2021/how-we-built-twitter-s-highly-reliable-ads-pacing-service。 
  8. Mittal, S. How Advertising Budgets are Consumed to Deliver Maximum ROI for Advertisers. ShareChat Tech Byte (2021-08-16). https://medium.com/sharechat-techbyte/how-advertising-budgets-are-consumed-to-deliver-maximum-roi-for-advertisers-ae812d42bfc7 PID コントローラで \(\lambda \in [-99, +99]\) を数秒周期 (cron) で更新し、 delivery percentile を調整する設計。 
  9. 郭 (京都研究所 Tech Lab) QPS 制御の仕組みの改善. MicroAd Developers Blog (2023-10-20). https://developers.microad.co.jp/entry/2023/10/20/180000 DSP パートナーごとに個別の QPS 上限を、 RTB 送信確率を制御変数として数十秒周期で PID 制御する設計。 
  10. Ayissi/W Introduction to Speed-Threshold Ogury Engineering (2024-02-26). https://medium.com/ogury-engineering/introduction-to-speed-threshold-a-custom-solution-for-ad-delivery-leveraging-principles-of-control-6eab79108c50 Ad Campaign Delay を誤差信号、 Speed-Threshold を制御変数として P/I/D 全成分を分単位で適用。 数十億リクエスト/日の規模を扱う。 
  11. Garg/Xiao/Yang/Rahurkar (DoorDash) Smart Fast Finish arXiv:2509.07929 (2025)。 遅延アトリビューションによる過支出への対処。 動的な開始時刻設定と段階的 throttle で抑制する設計。 オーバーデリバリー率を 7% から 4.7% に削減 (-2.4 pt) と報告。 URL: https://arxiv.org/abs/2509.07929。 
  12. Feedback Control for Small Budget Campaigns in Advertising. ACM WWW Companion 2026. DOI: 10.1145/3774905.3794688. arXiv: 2509.25429 (v2, 2026-03-09)。 https://arxiv.org/pdf/2509.25429 Karlsson らの先行研究を出発点に、 bucketized hysteresis と比例フィードバックを組み合わせた小予算ペーシング制御を提案。 経験的な試行錯誤調律に対する原理的な代替を志向した、 D 項を含まない構成。 
  13. Chu ほか (Adobe) PID controller for online campaign pacing。 US Patent 10,878,448 B1 (公開 2020-12-29)。 PID controller で spend percentage と ideal pace rate の差分を制御。 bid price や conversion threshold を調整する設計。 URL: https://patents.google.com/patent/US10878448B1/en。 
  14. Åström, K. J. & Murray, R. M. Feedback Systems: An Introduction for Scientists and Engineers. Princeton University Press (2nd ed., 2020). https://fbswiki.org/wiki/index.php/Feedback_Systems:_An_Introduction_for_Scientists_and_Engineers フィードバック制御の標準教科書。 物理・生物・情報・経済システムを横断する形で、 状態空間・伝達関数・PID 制御を扱う。 出版社の許諾下で全文 PDF が公開されている。 
  15. Minorsky, N. Directional Stability of Automatically Steered Bodies. Journal of the American Society of Naval Engineers, Vol. 34, No. 2 (1922), pp. 280-309. DOI: 10.1111/j.1559-3584.1922.tb04958.x. https://doi.org/10.1111/j.1559-3584.1922.tb04958.x PID 制御の最も初期の形式化として知られる論文。 米海軍戦艦 USS New Mexico の自動操舵装置の研究を通じて、 比例・積分・微分の 3 要素を初めて系統的に組み合わせた。 
  16. Bennett, S. A Brief History of Automatic Control. IEEE Control Systems Magazine, Vol. 16, No. 3 (1996), pp. 17-25. DOI: 10.1109/37.506394. https://doi.org/10.1109/37.506394 自動制御の歴史 (1900 年以前から 1955 年まで) を 4 期に分けて整理した総説。 
  17. Åström & Hägglund PID Controllers: Theory, Design, and Tuning (2nd ed. ISA 1995)。 正規化・微分項と雑音・ZOH 離散化とサンプリング定理の各章を参照。 
  18. Control Guru Measurement Noise Degrades Derivative Action (2015). https://controlguru.com/measurement-noise-degrades-derivative-action/ ノイズ環境下では微分作用が制御出力 chatter を生む弊害を解説した実務向け資料。 
  19. Åström & Hägglund Advanced PID Control (ISA 2006) の Anti-Windup を扱う章。 clamping (積分値を上下限で閉じ込める手法) と back-calculation (追加ゲイン \(K_t\) で飽和差分を逆伝播) の比較。 clamping は \(K_t\) の調律を要さず実装も単純なため、 本稿で採用。 
  20. RealPars PID Tuning Explained. https://www.realpars.com/blog/pid-tuning PI 制御が業界で最も一般的に採用されている理由と、 D 項が多用されない背景を解説。 
  21. Wevolver PID Explained: Theory, Tuning, and Implementation of PID Controllers. https://www.wevolver.com/article/pid-explained-theory-tuning-and-implementation-of-pid-controllers ノイズが強い場合には \(K_d = 0\) として PI 制御に切り替えることがあると説明。