「NaviPlus レコメンド」の自動最適化機能にて使われている「強化学習」って何?

投稿者: | 2017年9月7日

ナビプラス 梅染(@dr4caena)です。

本日、「NaviPlusレコメンド」にて自動最適化機能をリリースしました。折角ですので私からは自動最適化機能にて使われる機械学習の一種である「強化学習」について簡易的に説明をさせていただければと考えております。
※ 自動最適化機能の説明などは以下のニュース等を参照くださいませ。

 

強化学習とは何ですか?

普通の機械学習の場合は、教師データ(入力と、その入力に対する正解出力の組)を与えて学習させることによって、未知の入力に対しての出力が正しくなる様に学習させます。

ところが、例えば広告Aと広告Bと、どちらを表示するとクリック率が良いのか、という問題に、学習のために与えるべき正解データはありません。どちらかの広告を実際に表示してみて、クリックされたかされなかったか、実際に試しながら実績データを集める必要があります。その一方で、可能であればクリック率が高い広告を表示することで、実際のビジネスに貢献することも求められます。

このような、「正解は不明であるが、実際に試して得られる報酬を最大化(あるいは損失を最小化)したい、ではどういう戦略をとれば報酬を最大化出来るだろうか」という戦略を学習するのが、「強化学習」と呼ばれるタイプの機械学習です。

 

強化学習はどんなことをしますか?

強化学習では「探索と活用 (Exploration and Exploitation)」のバランスが重要と言われます。

例として、広告A, B, Cの中からクリック率が高いものを表示したい、でもどの広告のクリック率が高いのか、最初は判らないとしましょう。

最初はどの広告が良いのか判らないのですから、どの広告も何回かは表示してみて、各広告のクリック率を調べてみる必要があります。しかし最後には、もっともクリック率の高い広告だけを表示したい、と考えるでしょう。

通常のA/Bテスト的な考え方の場合、テスト期間は3種類の各広告を1/3づつ表示してクリック率を測定、テスト期間が終われば最良の広告だけを表示する、という形をとることになると思います。しかしこの方法には、テスト期間の長さをどうやって決めるのか、という問題があります。

テスト期間が長すぎる場合、テスト期間はどの広告も均等に表示するので、最良の広告だけを出す場合より、損をするはずです。かといって、テスト期間が短すぎると、正確にクリック率が測定できません。本当は最良の広告はAであるのに、テスト期間の間だけ、たまたまBのクリック率が高かった場合、間違った決定をすることになります。テスト期間が終わったあとは、他の広告を一切試さないため、実はAの方が良かった、と気付く可能性がありません。

ではどうすれば良いのでしょうか?(状況にもよりますが)熟練したマーケティング担当者であれば次のような戦略を自然に採っているのではないでしょうか?

つまり、

  • 最初はどの広告も均等に表示して様子を見つつ、
  • 徐々にクリック率の高い広告の比率を高め、クリック率の低い広告は控えていく。
  • しかし、どれが最良の広告か決着がついたと思った後も、クリック率の低い広告も少しは表示することで、過去の決断が間違っていなかったか確認を続ける

という、探索と活用のバランスをとるはずです。

この「徐々にクリック率の高いものの比率を高めていく」などの部分を、数学的な理論に基づいてリアルタイムに自動化して、最良の選択肢を探索しつつ、過去の実績値を最大限に活用して利益を上げる、のが自動最適化機能にて使用されているアルゴリズムとなります。

 

以上となります。

今後も機能リリースやプレスリリースに合わせて、エンジニアブログらしい関連した概念やテクノロジー等の説明をさせていただければと考えております。引き続き、何卒よろしくお願いいたします!