こんにちは。サイエンス統括本部でデータ分析による社内サービスの課題解決支援をしている関口です。
ヤフーではたくさんのABテスト(※1)が常に行われており、サービス改善に活かされています。しかしながら実際には、さまざまな理由からABテストができないことがよくあります。本記事では、そのような場合にどのようにして施策の効果を評価・推定するかについて、具体的なケースからアイデアを紹介していきます。
なお今回はYahoo!ショッピングを題材にしたケースばかりですが、アイデア自体は汎用的なものとなっています。
- ※1: ABテストはウェブサービス上のUI改善、機械学習モデル改善、機能追加etc.といったさまざまな施策が、KPIにどれくらいのインパクトを与えるかを定量的に評価できる強力な方法です[1]。これはユーザーやリクエストなどの単位でバケットを分割し、あるバケットAには施策を発動せず、あるバケットBには施策を発動するという制御を行い、バケットAとバケットBのKPIの差を直接観察するという実験ベースの手法となっています。
ケース1:自然にABテストになっている部分をうまく見つける
背景:状況的に勝手にABテストできない
Yahoo!ショッピングにはヤフーが発行する割引クーポンと、各出店ストアが自由に発行できるクーポンが存在します。例えば、Yahoo!プレミアム会員や過去そのストアで注文した経験がある/ない、といったユーザー属性でターゲティングしたクーポンも発行できます。
しかしながら、一般に、クーポンがどれくらいの売上増加につながったかを厳密に評価することは難しいです。例えばクーポン利用注文数を集計するといったことは可能ですが、真に興味があるのは「クーポンがなかったら注文しなかったはずだが、クーポンがあったからこそ注文したユーザー」による増加分であり、ここを評価するにはABテストが必要です。
現状そのテストを勝手にヤフーが行うことはできず、各ストアと丁寧にコミュニケーションして了承を得た上で行う必要があると考えられます。なぜなら例えばストアがメルマガや商品説明ページでクーポンの訴求を行っている場合、それら全てをABテストのバケットと連動させないと、ストアクーポンを発行しないバケットに割り当てられたユーザーから「クーポンがあるとメールを見て商品を見に来たのに、実際にはクーポンがないじゃないか」というクレームにつながってしまうからです。
アイデア:ランダムなバケットとみなせるものを見つける
このような背景から、ストアが発行するクーポンの効果をABテストで測るのはかなりハードルが高いです。そこで、今回は特定のターゲティングがされているクーポンに着目し、さまざまなストアで多様に発行されているクーポンの平均的な効果を評価してみることにします。
こちらのページは、今月が誕生月のユーザーだけが使えるようにターゲティングしている各ストアのクーポンのまとめページです。誕生月はユーザー自身が決めることができず、ランダムに決まると考える=ABテストにおけるランダムに振り分けたバケット番号と同じようなものであるとみなしても大きな問題はないと考えられます。(※2)
したがって、例えば2月のYahoo!ショッピングのデータを用いて、
「2月が誕生月のユーザーの注文数」が「2月以外の各月が誕生月のユーザーの注文数」よりもどれくらい多いか
をシンプルに集計するだけで、ストア発行の誕生月クーポンがどれくらいユーザーの注文数向上に寄与しているかを評価できます。これを実際に集計することで、ストア発行クーポンの平均的な効果を初めて明らかにすることができました。(※3)
- ※2: なおこの誕生月はあくまでも「ヤフーに登録されている誕生月」なので、ユーザーが正しく登録しているという前提が必要です。実際は、ユーザーは必ずしも誕生月を正しく登録しておらず、データ上は特にデフォルト設定である1月生まれが多くなっているため、分析上1月生まれのユーザーは除外しています。また、Relative age effect[2]といういわゆる「スポーツ選手には4月生まれが多い」といった効果の影響で、誕生月により職業や収入その他ユーザーの性質にバイアスが生じる可能性はありますが、Yahoo!ショッピングの購買行動には大きく影響がないと考えても良いでしょう。実際、ヤフー内の行動や属性を特徴量としてユーザーの誕生月を予測させる多クラス分類の機械学習モデルを作ってみると、精度が当てずっぽうの場合と変わらず、少なくともヤフー内のデータにはバイアスがないことが示唆されます。
- ※3: 理論上は誕生月を使った方法によりストア別にクーポンの効果を計算できますが、1カ月の注文数を12分割する都合上、ストア単位で見るとサンプルサイズが小さくなってしまうため、ここではあくまでも全体の平均的な効果としています。
ケース2:施策影響がないと考えられる部分から全体の推定を行う
背景:一部のユーザーに絞ったテストができない
Yahoo!ショッピングの5のつく日キャンペーンのような、ユーザーをターゲティングせずに全体に影響する施策はABテストを行うことができず、効果測定が難しいです。
例えば「5のつく日キャンペーンがなければ3日や4日に注文していたが、キャンペーンを待って5日に注文した」というユーザーもいらっしゃるでしょう。したがって、キャンペーンの効果は「5のつく日の注文数が増える効果」と、「5のつく日以外の注文数が減る効果」の2つがあると考えられます。このため、5のつく日の注文数が5のつく日以外の日に比べてどれくらい多いかを見ても施策効果を評価できません。真に評価したいのは、5のつく日とそれ以外の日の注文数の合計がどれくらい増えたかです。
アイデア:施策の影響を受けなそうな対象を見つける
仮にキャンペーンの影響を受けないユーザーがいるのであれば、キャンペーンがあってもなくてもそれらのユーザーの注文数はECや商品の需要やサービスの(キャンペーンを除いた)実力だけで決まると考えられます。そこで、以下の表のような整理をしてみます。
まずはキャンペーンの影響がない日のデータを使って、fからgを予測するモデルを作ります。これは、キャンペーンがない場合の「キャンペーンの影響を受けないユーザーの注文数」と「全体の注文数」の関係を表したものです。次にキャンペーンの影響がある日のデータのfからgを予測すると、これは「キャンペーンの影響がある日に、もしキャンペーンの影響がなかったとしたら全体でどれくらいの注文数だったか」を反実仮想的に計算したものです。あとは実際の全体の注文数からgの予測値を引き算すると、求めたいキャンペーンの効果hが得られます。
Yahoo!ショッピングは、ログインしていないユーザーがゲスト注文もできます。しかし5のつく日をはじめとする各種キャンペーンは、ログインをしていないと参加できません。このため、
「キャンペーンの影響を受けないユーザー」として、ログインしていないユーザー
を考えてみます。(※4)
また、キャンペーンの影響がない日として、例えば5のつく日から4日以上離れている「1日、9日、10日、19日、20日、21日、29日、30日、31日」は影響がない、と仮定してみるのが良いでしょう。(※5)
この方法で得られる結果を模式的に表現すると以下のようになります。実際の注文数と、キャンペーンがなかったとした場合の注文数の差(赤矢印)のうちプラスになる部分が「5のつく日の注文数が増える効果」で、マイナスになる部分が「5のつく日以外の注文数が減る効果」であることがわかります。この場合、プラス部分の合計の方がマイナス部分の合計よりも大きくなっているため、施策にはきちんと意味があったと言えます。
- ※4: 厳密には、5のつく日にはヤフーのトップページなどからYahoo!ショッピングへの誘導が強化されるため、ログインしていないユーザーに対してもキャンペーンの影響が完全にないわけではありません。また、Yahoo!ショッピングには他のキャンペーンも多数存在するため、このシンプルな議論には限界があります。
- ※5: 例えば5日に注文したユーザーが何日前から商品をカートに入れていたか、といったことを分析するとこの仮定の妥当性が評価できるでしょう。
ケース3:交絡の調整
背景:同じく、一部のユーザーに絞ったテストができない
ヤフーのコマースサービスを1カ月以内に複数利用するなどの条件を達成すると、翌月のYahoo!ショッピング注文時のPayPayポイントが2%増えるというキャンペーンが過去にありました。このキャンペーンも全ユーザーに対しての施策であるため、ABテストができないものです。
この2%ボーナスにより翌月のYahoo!ショッピングの注文回数がどれくらい増えるかを評価するには、シンプルに条件達成者と未達成者の平均注文回数を比較すれば良いのでしょうか? 例えば達成者の翌月平均注文回数が10回、未達成者の翌月平均注文回数が5回だった場合、施策による注文回数増加効果は5回分ということになるのでしょうか?(※6)
答えは、No です。「コマースサービスを複数利用する」という条件を達成するユーザーの中には、そもそも施策がなかったとしてもYahoo!ショッピングをもともと利用しやすいユーザーが大いに含まれていると考えられます。このため、単純に達成者と未達成者の注文回数の差を計算すると「2%PayPayポイントによる効果」と「もともとのYahoo!ショッピングの利用度合いの差」がどちらも含まれたものになります。今回見たいのは前者だけであるため、後者の効果をなんとかして取り除く必要があります。
アイデア:原因要素が同じユーザー群を見つける
ここで、以下の図で表される「DAG」というものを考えます。これは各要素の因果関係を表現したグラフィカルモデルとなっており、「原因→結果」という表現の仕方をします[3]。
今回明らかにしたいのは当月条件達成(による2%ボーナス)が、翌月のYahoo!ショッピングの注文数をどれくらい向上させるかということでした(図の3)。ところで、実際にデータを見るとわかるのですが、当月に注文が1回もないユーザーは翌月も注文がない可能性が高いですし、当月にたくさん注文したユーザーは翌月もたくさん注文をする確率が高くなっています。未来が過去に影響することはないので、「当月の注文数」が原因で「翌月の注文数」が結果であると考えて良さそうです(図の2)。ここで、先述していた「もともとのYahoo!ショッピングの利用度合いの差」は「当月の注文数」で表現できると考えると、当月の注文数は条件達成するかどうか(図の1)及び翌月の注文数(図の2)どちらの原因にもなっていると考えられます。これが「交絡」と呼ばれる事象であり、共通の原因が裏に潜んでいるため単純に達成者と未達成者の注文回数の差をとっても正しい効果が出てこないのです。
交絡を取り除くには、原因となる要素が共通なユーザー同士を集めてきて比較をすれば良いです。つまり、
当月の注文回数が1回のユーザーのうち条件を達成しているユーザーと達成していないユーザーの翌月の注文回数を比較
すれば条件達成による+2%ボーナスの効果がわかります。同様に当月の回数が2回のユーザー、3回のユーザー…と見ていきます。すると以下の図のような結果が得られます(これも模式的な図です)。つまり、ここの条件未達成者と達成者の差が施策による注文回数増加効果であり、当月の注文回数に連動して変わるわけです。
今回は交絡の要因を1つだけ考える例でしたが、そもそも交絡している要因は1つとは限りませんし、交絡因子がいくつあるのかは誰にもわかりません。施策効果の厳密な推定は不可能であり、時間をかけてあれこれと交絡因子を調整したとしても精度が上がっているのかどうかすら不明です。個人的には今回のように、わかりやすく影響が大きそうな交絡だけを調整し、「何も考えない単純な差よりはかなりマシだろう」くらいに割り切ってしまうのが良いと考えています。
- ※6: 今回はユーザーが条件達成をしようとして当月に注文回数が増える効果は議論の対象外とし、2%ボーナスによる翌月の注文数増加効果だけを考えます。
ケース4:問題を読み替える
背景:因果関係の分離が難しい
Yahoo!ショッピングにはユーザーが商品のレビューを投稿できる仕組みがあり、このレビューを促進するためにさまざまな施策が行われています。これは、商品レビューが増えるほどユーザーが商品についての理解が進み、疑問が解消され、注文してくれやすくなることを期待してのものです。
しかしながら商品レビューが増えることでどれくらい注文数が上がるか、を定量的に示すのは非常に困難です。注文数が多いほど当然レビューが書かれる機会が増えることになるため、「注文数→レビュー数」という効果が明確にあると考えられます。したがって、レビュー数と注文数の相関を見ても意味がありません。逆の「レビュー数→注文数」という効果を見るには、例えばある商品について、レビューが1件もない時の注文数、レビューが1件の時の注文数、2件の時の注文数…を持ってきて比較するといったことが考えられます。しかしながら商品の需要は刻々と変化するため、レビューが増えるほど注文数が増えるという結果が出たとしても、それは単に時間がたつにつれ商品が人気になってきたというだけかもしれません。
では同じ商品について、レビューが1件のものとレビューが1件もないものを比較してみるのはどうでしょう? Yahoo!ショッピングはモール型ECサイトであるため、同一商品を複数のストアが出品していることが多々あり、この手法にちょうど良さそうに思えます。しかしストアが異なると価格や送料、付与されるポイントなどが異なります。例えばストアAでレビュー1件、ストアBでレビュー0件のとき、この2つの商品の注文数の差がレビューによる差なのか、ストアの差によるものなのかが区別できないため、やはりこの手法を使って効果を評価するのは難しいでしょう。
アイデア:観察可能な別の要素を見つける
そこで考え方を変えて、
「商品レビューが増えるほど注文が増えるかどうか」という問題を「商品レビューページをユーザーが閲覧すると注文確率が上がるかどうか」という問題に捉え直す
ことにします。そもそも商品レビューが存在しなければ商品レビューが見られることはないですし、よりレビューが多いほど商品レビューページが見られやすいと考えるのは自然であると考えられます。(※7)
したがって、「レビュー数→商品レビューページの閲覧→注文数」という効果を考えた上で、後半の「商品レビューページの閲覧→注文数」の効果を検証しましょう。レビューページを見ている人は、レビュー情報を気にするくらいなので全くの冷やかしということはなく、既に少なからず注文する気があると考えられます。したがって、単純にレビューページを見た人と見ていない人の平均注文数を比較するなどでは駄目で、交絡の調整が必要になります。また、ケース3では月の注文数の合計を考えましたが、今回は訪問セッション(※8)単位での注文の有無を考えましょう。具体的には、以下のようなDAGを考えます。
ユーザーの過去の注文や行動の履歴、デモグラやYahoo!プレミアム会員かどうかといったユーザー属性、当日の行動履歴といった要素は、当日レビューページを閲覧するかどうか、及び注文をするかどうかを左右します。ユーザー属性や行動履歴は実際には多くの要素から構成されており、ケース3で行ったような層別集計は難しいです。今回は、これらの交絡要因のサマリとして商品レビューページの閲覧確率を計算(実際には確率を予測する機械学習モデルを作る)し、商品レビューページの閲覧確率が同じくらいのユーザーの中で、実際にレビューページを見たユーザーと見ていないユーザーで比較を行うことにします。これは「傾向スコア」と呼ばれる手法で、非常に便利です(※9)。手法の詳細は文献[4]を参考にしてください。
この手法により、商品レビューページが見られると注文確率が上がる、ということが示せました。これにより、商品レビューを増やし、商品レビューページの閲覧を増やし、注文数を増やす、という施策に効果が見込めることがわかります。ただし例えば商品レビューが0件から1件になるのと、10件が11件になるのと、100件が101件になるのでは効果が違う可能性がありますが、この方法ではそういったことは明らかにできず、今後の課題と言えます。
- ※7: レビューが1件もなければレビューページが見られないのは自明ですが、レビューが多いほど商品レビューページが見られやすくなるかは別途検証が必要です。
- ※8: ここではセッションという言葉は、「ユーザーがウェブサイトを訪問して、離脱するまでの一連の行動のかたまり」という意味で使っています。ケース3の「1カ月間PayPayポイントが2%増える」というのは1カ月にわたって影響があるため、月の注文数の合計で考えましたが、レビューを見る/見ないというのは月全体の注文数を変えるほどの影響を持たず、実際にレビューを見たセッションの中での注文確率を変える程度の影響しかないと考えたわけです。
- ※9: 傾向スコアは非常に便利な方法ですが、利用には注意が必要です。あくまでも傾向スコアはレビューページを閲覧するかどうかと、注文するかどうかの共通の原因となっている要素の要約であるため、例えば「レビューページの閲覧有無を強く説明できるが、注文するかどうかには関係がない要素」を入れて閲覧予測の精度を上げても意味がありませんし、むしろ効果の推定精度を悪化させます。詳しくは文献[5]などを参照すると良いでしょう。
結び
本記事ではABテストができない場合に役立てられる効果検証のアイデアを紹介しました。今回紹介した手法を実際に適用した結果、例えばケース1の場合、ストアクーポンの伸びしろを示すことができ、ストアを巻き込んだ大規模なテストを行う意思決定につながりました。技術的には「因果推論」と呼ばれる分野ですが、実験をしない因果推論手法は基本的に強い仮定を必要とするため精度には限界があり、過信は禁物です。とはいえ施策の効果が高精度にわからないとしても、大きいのか小さいのかといったことが大ざっぱにさえわかれば意思決定を行う上では十分有用であるといったことも多いでしょう。
参考文献
[1] R. Kohavi, D. Tang, Y. Xu著, 大杉直也訳 (2021). A/Bテスト実践ガイド 真のデータドリブンへ至る信用できる実験とは. ドワンゴ.
[2] J. F. Bell, E. D. Sykes, C.Vidal (2009). Birthdate Effects: A Review of the Literature from 1990-on. UK: University of Cambridge.
[3] J. Pearl, M. Glymour, N. P. Jewell著, 落海浩訳(2019). 入門 統計的因果推論. 朝倉書店.
[4] 安井翔太 (2019). 効果検証入門 ~正しい比較のための因果推論/計量経済学の基礎. 技術評論社.
[5] K. Shiba, T. Kawahara (2021). Using Propensity Scores for Causal Inference: Pitfalls and Tips. Journal of epidemiology, 31(8), 457-463.
こちらの記事のご感想を聞かせください。
- 学びがある
- わかりやすい
- 新しい視点
ご感想ありがとうございました
- 関口 優希
- サイエンス統括本部 分析室室長 / 第12代黒帯(データ分析領域)
- 社内のさまざまなサービスをデータ分析の力で支援しています。データサイエンティストとデータアナリストのどちらを名乗るべきかよく迷います。