🌟

A/Bテストよりちょっといい方法「バンディットアルゴリズム」

2022/02/09に公開

Webサイトを改善・最適化する手法としてA/Bテストはもっとも簡単で、ひろく使われています。

一方で、A/Bテストについて調べていると、バンディットアルゴリズムについてもよく目にすることがあります。
今回は、バンディットアルゴリズムとは何なのか、A/Bテストとどう違うのかを見ていきたいと思います。

A/Bテストに関する前回の記事はこちら。

https://zenn.dev/motch0214/articles/9c4d4ff167a0fe

A/Bテストは万能じゃない?

もしあなたがA/Bテストを行ったことがあるなら、1つのテストをどれくらいの期間実施しましたか?
また、そのときのサンプル数(ユーザ数)はどれくらいでしたか?

もしA/Bテストを行って下の結果が得られたら、あなたはどのような判断をくだしますか?

バリエーションA バリエーションB
サンプル数 1,280 1,600
コンバージョン数 64 128
コンバージョン率 5% 8%

A/Bテストとはより良いバリエーションを決めるためのものです。
では、この時点でバリエーションBの方が良いと決めますか?

このとき、あなたはあるジレンマを抱えることになります。

  • 本当にバリエーションBの方が良いのだろうか?たまたま確率的なゆらぎで差が生まれただけではないか?
  • 早く決めないといつまでも悪い方のバリエーションを表示してしまう。すると、トータルのコンバージョン数が減ってしまう。

これは、探索活用のジレンマと呼ばれています。

ただ闇雲にA/Bテストをすればいいわけではない、その難しさが感じられるかと思います。

バンディットアルゴリズム

この探索と活用のジレンマを解消するために考えられたのが「バンディットアルゴリズム」です。
理論的な背景にもとづいて、探索と活用の間で最適なバランスをとることができるようになります。

A/Bテストとの違いは?

探索と活用のジレンマの観点でいえば、A/Bテストは「探索」全振りです。
つまり、そもそも目的が違うのです。

  • A/Bテストの目的は、良いバリエーションを決めることです。

  • バンディットアルゴリズムの目的は、利益(コンバージョン数)を最大化することです。

あなたのWebサイトではどちらの方が適切か、考えてみてください。

次は、バンディットアルゴリズムの具体例を見ていきます。

\varepsilon-greedyアルゴリズム

もっとも簡単なバンディットアルゴリズムです。

まず、ある小さな確率 \varepsilon を決めます。
そして、表示するバリエーションを以下の手順で割りあてます。

  • 0 \leq n < 1 の一様乱数をひとつサンプリングする。
  • n < \varepsilon ならば、バリエーションの中からランダムに選んで割りあてる。(探索)
  • そうでなければ、現時点で最もコンバージョン率の大きいバリエーションを割りあてる。(活用)

つまり、確率的に探索するか活用するかを切り替えているのです。

また、A/Bテストは \varepsilon = 1\varepsilon-greedyアルゴリズムといえます。

\varepsilon-greedyアルゴリズムの欠点

\varepsilon-greedyアルゴリズムは非常に簡単なのですが、いくつか欠点があります。

  • 探索確率 \varepsilon をどのように設定すればよいかわからない。

  • 十分探索が済んでよいバリエーションがわかった後でも、一定確率で探索し続けてしまう。

このような欠点があるため、「利益(コンバージョン数)を最大化」という目的をはたすには不適切であり、実際に\varepsilon-greedyアルゴリズムが使われることはほとんどありません。

トンプソンサンプリング

上記の\varepsilon-greedyアルゴリズムの欠点を解決し、簡単ながら非常に強力なバンディットアルゴリズムとして、トンプソンサンプリングが知られています。

トンプソンサンプリングでは以下の手順で表示するバリエーションを割りあてます。

  • それぞれのバリエーション v_{i} に対して、乱数 n_{v_{i}} \sim \mathrm{Beta} ( c_{v_{i}} + 1, n_{v_{i}} - c_{v_{i}} + 1 ) をサンプリングする。
  • n_{v_{i}} が最大のバリエーション v_{i} を割りあてる。

ここで、 n_{v_{i}}, c_{v_{i}} はそれぞれバリエーション v_{i} の現時点での割当回数(サンプル数)とコンバージョン数で、 n \sim \mathrm{Beta}(\alpha,\beta)n がベータ分布に従う乱数であることを表します。

このように、トンプソンサンプリングは乱数をサンプリングするだけで実装できるのですが、パラメータのチューニングも不要で非常に高い性能を発揮することが知られています。

次回の記事では、これらのアルゴリズムを使ってシミュレーションを行い、実際に性能を比較してみたいと思います。

宣伝

ノーコードでバンディットアルゴリズムを使ったWebサイト(特にランディングページ)の最適化ができるツール「SAITEKI LP」を開発しています。

https://lp.saiteki.site

興味があればTwitterに連絡ください!

Discussion