多腕バンディット問題

英語名 Multi-Armed Bandit
読み方 マルチアームド バンディット
難易度
所要時間 1〜2時間
目次

ひとことで言うと
#

複数の選択肢(スロットマシンの腕)から最もリターンが高いものを見つけながら、同時にリターンを最大化する手法。A/Bテストのように「まず全部試してから判断」ではなく、途中で良い選択肢に配分を寄せていく。

押さえておきたい用語
#

押さえておきたい用語
探索(Exploration)
まだ十分にデータがない選択肢を試すこと。情報を集めるために短期的なリターンを犠牲にする行動を指す。
活用(Exploitation)
現時点で最もリターンが高いと推定される選択肢を集中的に使うこと。短期リターンを最大化する行動である。
後悔(Regret)
最適な選択肢を常に選び続けた場合と比べた累積損失のこと。バンディットアルゴリズムの性能はこの後悔の小ささで評価する。
トンプソンサンプリング(Thompson Sampling)
各選択肢の報酬分布からサンプリングし、最大値を出した選択肢を選ぶ手法。ベイズ的アプローチで探索と活用のバランスを自然にとる。

多腕バンディット問題の全体像
#

バンディット:探索と活用を動的にバランスさせてリターンを最大化する
腕 ACVR: 2.1%腕 BCVR: 3.8%腕 CCVR: 1.5%腕 DCVR: 2.9%配分の変化(時間経過)初期中盤終盤A/Bテスト均等配分 → テスト終了後に判断統計的な厳密性が高いバンディット動的配分 → テスト中もリターン最大化機会損失を抑える厳密な因果推論→A/B、リアルタイム最適化→バンディット
バンディットアルゴリズムの適用フロー
1
選択肢の定義
テストしたい腕(バリアント)を用意する
2
初期探索
各腕をある程度均等に試す
3
動的配分
成績の良い腕に徐々に配分を寄せる
収束・採用
最適な腕に収束したら固定配信に切り替え

こんな悩みに効く
#

  • A/Bテスト中に明らかに劣っているパターンにトラフィックを流し続けるのがもったいない
  • 広告クリエイティブを多数テストしたいが、均等配分では機会損失が大きい
  • テスト期間中もリターンを最大化したい

基本の使い方
#

探索・活用の要件を整理する

バンディットが向いているか判断する。

  • 向いている場面: 選択肢が多い、リアルタイムで配分を変えたい、テスト中の機会損失を減らしたい
  • 向いていない場面: 因果効果を厳密に測りたい(→ A/Bテスト)、選択肢が2つだけでサンプルが十分ある
  • A/Bテストとバンディットは排他ではない。目的に応じて使い分ける
アルゴリズムを選ぶ

代表的なアルゴリズムから状況に合ったものを選ぶ。

  • Epsilon-Greedy: 確率ε(例: 10%)で探索、残りは最善を活用。最もシンプル
  • UCB(Upper Confidence Bound): 報酬の推定値+不確実性ボーナスが高い腕を選ぶ。探索が不足している腕を自動で試す
  • Thompson Sampling: 各腕のベイズ事後分布からサンプリングして選択。実務での性能が高く、最も推奨される
実装・運用して収束を確認する

アルゴリズムを実装して配分を開始し、最適な腕に収束するまで運用する。

  • 初期は十分な探索が行われているか確認する(特にEpsilon-Greedyはεの値に敏感)
  • 報酬の定義が適切か(クリック率だけでなくコンバージョンまで含めるか等)
  • 環境が変化する場合(非定常バンディット)は、過去データの重みを減衰させる仕組みが必要

具体例
#

例1:SNS広告のクリエイティブ最適化にバンディットを適用する

D2Cブランド(従業員15名)がSNS広告に月間 500万円 を投下。毎月10本のクリエイティブを制作し、従来は均等配分で1週間テストしてからトップ3に集中配信していた。

Thompson Samplingを導入し、クリック率を報酬として動的に配分を変更。10本を同時に投入し、2日目からは上位クリエイティブにインプレッションが集中するようになった。

指標A/Bテスト方式バンディット方式
テスト期間の平均CTR1.2%1.8%
月間CV数820件1,140件
CPA6,100円4,390円

テスト期間中の機会損失が減ったことで、月間CV数が 39% 増加。年間で約1,900万円の広告効率改善につながった。

例2:ECサイトのレコメンドアルゴリズムを動的に切り替える

月間訪問者80万人のインテリアEC。レコメンドアルゴリズムを3種類(協調フィルタリング、コンテンツベース、人気順)同時に走らせ、バンディットで配分を最適化した。

UCBアルゴリズムを採用。コンバージョン率を報酬に設定。

1週間後の配分は協調フィルタリング 62%、コンテンツベース 28%、人気順 10% に収束。協調フィルタリング経由のCVRが 4.2% と他の2倍だった。

従来のA/Bテストで1ヶ月かけて検証するよりも、テスト期間中のCV損失を約 430件 減らせた。また、時間帯別に見ると夜間は人気順のCVRが高い傾向があり、コンテキスト付きバンディットへの発展にもつながった。

例3:学習アプリが問題の出題順序を個人最適化する

ユーザー数25万人の英語学習アプリ。問題の難易度順序を3パターン(易→難、ランダム、苦手分野集中)で用意し、バンディットで各ユーザーに最適な順序を割り当てた。

報酬を「1セッションの学習完了率」に設定し、Thompson Samplingを適用。ユーザーごとにバンディットが走る仕組み。

全体の1セッション完了率が 68% → 79% に改善。特に初心者層では易→難パターンに、中級者層では苦手分野集中パターンに配分が偏り、ユーザーの習熟度に応じた自動最適化が機能していた。月間アクティブ率も +7pt 上昇。パーソナライゼーションとバンディットの組み合わせで、A/Bテストでは実現しにくい個別最適を実現した。

やりがちな失敗パターン
#

  1. 因果推論が必要な場面でバンディットを使う — バンディットは配分が偏るため、厳密な効果量の推定には向かない。「どちらが良いか」よりも「なぜ良いのか」を知りたい場面ではA/Bテストを使う
  2. 報酬の定義が不適切 — クリック率を報酬にすると「クリックされるが買われない」クリエイティブに寄ってしまう。最終的なビジネス成果に近い指標を報酬に設定する
  3. 探索フェーズを急ぎすぎる — 初期データが少ない段階で活用に偏ると、たまたま良かった腕に固着する。最低限の初期探索量を確保する
  4. 環境変化を無視する — 季節やトレンドで最適な腕が変わるのに、過去データを均等に扱い続けると古い情報に引きずられる。減衰率を入れるか定期的にリセットする

まとめ
#

多腕バンディットは「試しながら最適化する」手法で、テスト中の機会損失を最小化する。A/Bテストが「まず全部試してから判断」なのに対し、バンディットは「途中から良い方に寄せていく」。広告、レコメンド、UI最適化など選択肢が多い場面で特に威力を発揮するが、厳密な因果推論が必要なケースではA/Bテストと使い分ける判断が重要になる。