こんにちは、開発本部データサイエンティストの山口です。
製品やサービスのユーザー向けにコンテンツを制作している方は、一度は以下のように考えたことがあるのではないでしょうか。
「このコンテンツは本当に効果があったのだろうか?」と。
ここでは「コンテンツ」を「特定の認識・行動を、ユーザーに促す情報のまとまり(テキスト、音声、動画など)」を指すものとします。また、コンテンツの「効果」は「コンテンツの狙い通りにユーザーの行動が変化したこと」を意味するものとします。
多くの場合、コンテンツの視聴回数だけではユーザーの行動の変化までを知ることはできません。また、ユーザーの行動に変化があることがわかったとしても、それがコンテンツの効果なのか、別の要因によるものなのか、判別が難しい場合が多いでしょう。
この記事では、サイボウズが制作した製品の機能解説動画を例として、CausalImpactというパッケージを用いた効果分析の方法を紹介します。仕事上コンテンツ制作に関わりがあり、分析に興味のある方向けに、効果分析のおおまかな流れをお伝えできればと思います。
目次
- 目次
- サイボウズのケース: 製品の機能解説動画
- 1. 適切な分析方法を選択する
- 2. CausalImpactを利用する
- 3. 分析結果を次のアクションにつなげる
- 改めて「それで、そのコンテンツに効果はあったの?」という問いに答える
- 参考文献
サイボウズのケース: 製品の機能解説動画
サイボウズのテクニカルコミュニケーションチームでは、ユーザーの方に製品をより良く活用してもらうために、製品の機能解説動画を制作しています。
動画制作の詳細については、以下の2つの記事にまとめています。ご興味あれば、ぜひ御覧ください。
さて、上記の取り組みで動画を制作し、視聴回数の改善まで行うことができました。では、実際に本来の目的である「ユーザーの機能活用促進」は達成できているのでしょうか?それを確かめるために、今回はCausalImpactというRのパッケージを利用して分析を行いました。
(Rは統計解析向けのプログラミング言語です。詳細は記事末尾の参考文献に譲ります)
以降、分析方法の選択から実際にCausalImpactを使った分析までの流れを説明していきます。
- 適切な分析方法を選択する
- CausalImpactを利用する
- 分析結果を次のアクションにつなげる
なお、本分析はサイボウズの個人情報保護の規約に則り、個人を特定できないかたちで分析を行っています。
1. 適切な分析方法を選択する
この記事ではCausalImpactを利用した分析について紹介すると述べました。しかし、状況に応じて最適な分析方法は変わります。まずはどのようにして最適な分析方法を選ぶかについて、最も望ましい方法から順番に説明します。
1.1. 可能なら実験を行う
効果分析で最も有効な方法は、「実験」を行うことです。では、「実験」とは具体的にどういうものを指すのでしょうか。ここでは動画を例として、効果分析の基礎的な内容をかいつまんで説明します。
理想的な効果分析の方法は、以下のようなものです。
- 全く同じ集団に対して
- 完全に同じタイミングで
- 介入を行った場合と介入を行わなかった場合の両方のデータを取って比較する
ここでは、「介入」を「対象者に影響を与える何らかのアクション」だと定義します。たとえば動画の場合、「対象者に動画を配信すること」が介入に相当します。同じ相手に同じ条件で、介入を行った結果と介入を行わなかった結果の両方があれば、2つの結果の「差」が介入の効果であると言えそうです。
では、理想的な効果分析の方法を利用することはできるのでしょうか。残念ながら、この方法は絶対に実現が不可能です。全く同じ相手に完全に同じタイミングで「動画を配信する」ことと「動画を配信しないこと」の両方を実行することが不可能だからです。
この理想的な効果分析の方法の代替として、「実験」を行うという選択肢があります。ここでは「実験」を「分析ができるように予め計画した介入を行い、必要なデータを収集すること」だと定義します。たとえば動画の場合、「予め決めたグループに動画を配信(介入)し、介入したグループと介入しなかったグループの両方のデータを収集すること」が実験に当たります。
実験であれば、一定の条件を満たせば実現することが可能です。また、適切に条件を満たした上での実験は、理想的な効果分析とかなり近い結果を出すことができます。
では、この適切な条件とは具体的にどういうものを指すのでしょうか。詳細な説明は省きますが、理想的な実験を行うための条件の1つに「分析者が対象者をランダムに選んで介入できる」というものがあります。
たとえば動画の場合、「分析者が動画を配信するグループと配信しないグループをランダムに決めて、確実にそのとおりに動画を配信できる」というのが実験の理想的な条件になります。WEBページ改善などで用いられる、いわゆる「A/Bテスト」は実験の方法のうちの1つです。
このような実験ができる場合、条件を揃えて実験をすることが最も有力な効果分析の選択肢になります。しかし、ユーザーに提供するコンテンツを、こちら側の都合で見せたり見せなかったりするのは気軽にできることではありません。ユーザーに不平等感を与えてしまったり、そもそも技術的に出し分けが難しい場合も考えられます。
そういった実験を行うのが難しいときは、比較対象となるグループを利用して、「実験をしたかのように」分析を行う方法を検討します。
1.2. 比較対象が用意できる場合は、比較対象を利用した分析を行う
「実験をしたかのように」分析を行うとはどういうことでしょうか。それは「対象者をランダムに選んだかのように」分析を行うということです。なぜ「ランダム」にこだわるかというと、もし対象者の選択がランダムではなかった場合、分析が誤った結論を導く可能性があるからです。
たとえば動画の場合で、「動画の配信(介入)を受けるかどうかを本人の希望によって決める」という状況を考えます。 動画の視聴を希望するユーザーはもともと製品活用への意欲が高く、動画の視聴を希望しないユーザーは相対的に製品活用への意欲が低いかもしれません。この状況で動画を配信(介入)しても、製品活用の度合いが上がったのが介入の効果なのか、もともとのモチベーションによる違いなのかを判別することができません。もし介入の対象者をランダムに選択できれば、もともとの属性(ここでは製品活用への意欲)に左右されない分析結果を得ることができます。これが実験の利点です。
では、実験ができない場合には効果分析ができないのかというと、そうではありません。介入を受けるかどうかに影響する「もともとの属性」が予めわかっていれば、それを調整することで正しい分析結果を得ることができます。この記事では詳細を省きますが、これには回帰分析や傾向スコア分析などの手法があります。
しかし、この方法にも限界があります。分析対象者が全員介入を受けていた場合は、介入の効果を比較する対象がいないので分析ができません。たとえば動画の場合、すべてのユーザーに同時に動画を配信した場合には、比較対象となるグループがいないので、この方法では効果分析ができません。
比較対象を用意できない状況で効果分析をするための選択肢の1つが、CausalImpactです。
1.3. 比較対象が用意できない場合は、CausalImpactの利用を検討する
CausalImpactはGoogleが公開しているRのパッケージです。もともとはマーケティングのキャンペーンの効果を推定するためにつくられました。CausalImpactは仮想的に比較対象をつくりだすことで、介入の効果を推定します。
たとえば動画の場合、動画配信を行う前のデータを用いて「もしも動画配信をしなかったら」という仮想の世界をつくり、それと現実世界とを比べます。動画配信が全く効果のないものであれば(悲しいですが)、動画配信をしていない仮想の世界と動画配信をした現実世界はだいたい同じになるはずです。もし動画配信をしなかった仮想の世界と現実世界が全然違うものであれば、動画配信に効果があったと考えることができます。
同じ原理はマーケティング以外の分野でも応用できると紹介されています。機能解説動画はユーザーに一斉に配信する形式で、比較対象のデータを用意できなかったため、CausalImpactを利用しました。
2. CausalImpactを利用する
CausalImpactを使った具体的な分析方法について説明します。なお、データの具体的な値などは伏せています。
2.1. データを準備する
はじめに分析に必要なデータを準備します。今回は製品の各機能がどの程度利用されているかを記録したログデータを使用します。
以下にログデータのサンプルを一行分だけ示します。データは架空のものです。
日付 | ドメインID | ログインユーザー数 | 分析対象の機能 | 利用回数 |
---|---|---|---|---|
2021/11/4 | ドメインA | 300 | スケジュールの編集 | 200 |
ここでの「ドメイン」はお客さまごとの製品環境を指します。
2.2. 分析用のコードを実行する
分析対象となるログデータに対してCausalImpactを実行します。今回は「製品へのログインユーザー数」を共変量として、「動画で解説した機能の利用回数」が有意に増加しているかを推定します。介入の期間はユーザーに動画の案内を出したタイミング(2021/11/14〜2021/11/15)としました。
以下にCausalImpactのプロット用のRのサンプルコードを示します。
# 全ドメインのログデータ(logdata)を日付(date)単位でグループ化して、 # 製品のログインユーザー数の合計(login_user)と、分析対象の機能の利用回数(target_func_use)の合計値を計算する # 結果として残る列は[日付、全ドメインの機能の利用回数の合計値、全ドメインのログインユーザー数の合計値]の3列 logdata_grouped <- logdata %>% group_by(date) %>% summarise(login_user_sum = sum(login_user), target_func_sum = sum(target_func_use), .groups = "drop") # 対象となる期間と介入の期間を設定する # 今回は介入直後の変化に焦点を当てるため、介入後の期間(post.period)は短く設定した time.points <- seq.Date(as.Date("2021-11-01"), by = 1, length.out = 30) pre.period <- as.Date(c("2021-11-01", "2021-11-13")) post.period <- as.Date(c("2021-11-14", "2021-11-15")) # 製品のログインユーザー数を共変量(x1)、対象の機能の利用回数をyとする x1 <- logdata_grouped$login_user_sum y <- logdata_grouped$target_func_sum data <- zoo(cbind(y, x1), time.points) # CausalImpactを実行し、グラフを表示する impact <- CausalImpact(data, pre.period, post.period, model.args = list(nseasons = 7)) impact.plot <- plot(impact,c('original')) + theme(axis.text.y = element_blank()) # y軸の値を非表示 plot(impact.plot)
コードの実行結果を以下に示します。詳しいグラフの見方は次の項で説明します。なお、y軸の値は伏せています。
今回分析対象の「Garoon」は主にビジネスで利用される製品のため、土日に利用回数が落ちる傾向が表れています。
2.3 分析結果を解釈する
先ほどプロットしたグラフの3つの要素について説明します。
- 黒の実線が実際に観測された値です
- 黒の点線が「介入が行われなかった世界」ならこうなっていただろうという予測の値です
- 青い帯はその予測の黒の点線が「偶然」ぶれたとしても、よっぽどのことがない限りこの範囲に収まるだろう、という予測の幅になります(いわゆる95%信頼区間です)
今回のグラフでは、グラフの中間あたり(11/15時点)で黒の実線(実際の値)が青い帯(予測された値の幅)の範囲を越えています。これは介入によって11/15に統計的に有意な変化があったことを意味しています。すなわち、動画の配信によって本来の目的である「ユーザーの機能活用促進」が(少なくとも短期的には)達成されていると言えそうです。
3. 分析結果を次のアクションにつなげる
ここまでの手順で、CausalImpactを利用して分析結果を得ることができました。この結果をもとに、今後どのようなアクションが必要になるかを考えます。ここでは動画配信の介入を例として、介入や分析を改善するアクションについて考えてみます。
3.1. 効果をより長い期間持続させる
今回の分析で、動画配信は機能活用の促進に効果があることがわかりました。引き続き動画を制作することは有益だと考えられます。一方で、今回確認された範囲では、効果の持続期間はごく短期的なものでした。本来は長期的に機能を利用し続けてもらえるほうが望ましいです。そのためには、効果がより長い期間持続する介入と、それを推定できる分析が必要になります。たとえば、機能利用の習慣化を促すような動画を配信し、その効果を数週間の累積で評価するとよいかもしれません。
3.2. 効果を個別ドメインごとに推定する
今回の分析では全ドメインの機能利用回数の合計値を使って効果分析を行いました。しかし、合計値で計算するとユーザー規模が大きいドメインの影響が大きくなり、相対的に小規模なドメインの変化を見落とす可能性があります。そのような見落としを避けるためには、個別のドメインごとに効果を評価する必要があります。たとえば、各ドメインに対して個別にCausalImpactを実行し、有意差が出たドメインの割合を検定するとよいかもしれません。
3.3. 効果を推定するための共変量を増やす
今回は共変量として「ログインユーザー数」という1つの変数を使いました。しかし、一般には適切な共変量が複数あるほうが推定の精度が高くなります。共変量として追加できる変数にはいくつか条件があるため、それらを満たす変数を選定・追加することが必要になります。たとえば、用途が近しい他製品のログデータを共変量として追加するとよいかもしれません。
改めて「それで、そのコンテンツに効果はあったの?」という問いに答える
この記事ではCausalImpactを使った動画の効果分析について紹介しました。今回の事例については「動画配信にはユーザーの機能活用を促進する効果があった」と答えることができそうです。そしてその効果の大きさや持続性についても一定の客観性をもって評価できました。
本来は実験などができるように、コンテンツの提供面などの設計を考えることが重要です。ですが、そういった選択肢がない中でコンテンツの効果分析をする必要に迫られる場合もあります。そんなときに、今回紹介したCausalImpactが役に立つ可能性は十分にあると考えます。
この記事が読者の皆さまの効果分析およびコンテンツ制作の参考になれば幸いです。
参考文献
効果分析の考え方について
効果分析について興味のある方は、入門書として個人的に以下の2冊がおすすめです。
「原因と結果」の経済学―――データから真実を見抜く思考法 | 中室牧子, 津川友介 (amazon)
豊富な事例を用いて、効果分析(因果推論)の考え方について丁寧に説明しています。最初に読む本としておすすめです。効果検証入門〜正しい比較のための因果推論/計量経済学の基礎 | 安井 翔太, 株式会社ホクソエム (amazon)
因果推論の枠組みを説明しつつ、よりビジネスの実践的な内容に踏み込んでいる印象です。Rのコードも紹介されています。 CausalImpactに関する記述もあります(4章)。
CausalImpactについて
CausalImpactの公式のドキュメント等のリンクを記載します。それぞれ英語ですが、必要な部分だけピックアップして読んでも(視聴しても)参考になると思います。
Inferring the effect of an event using CausalImpact by Kay Brodersen (Youtube)
CausalImpactについて開発者自らが説明しているYoutubeの動画です。個人的には概要をつかむ上で一番理解しやすかったです。CausalImpact - google.github.io
CausalImpactの使い方について説明しているドキュメントです。具体的なコードの書き方に迷ったらここを参照すると良いかと思います。Inferring causal impact using Bayesian structural time-series models
CausalImpactの元になった論文です。理論的な背景などが知りたい場合に参考になると思います。
理論的背景について
CausalImpactの使い方や理論的背景について、以下のサイトも参考にさせていただきました。
{CausalImpact}を使う上での注意点を簡単にまとめてみた -渋谷駅前で働くデータサイエンティストのブログ
日本語で書かれており、CausalImpactの概要を理解するのに適した記事だと思います。[R] CausalImpact でできること, できないこと - ill-identified diary
こちらも日本語記事です。理論的背景により踏み込んで書かれている印象です。
理論的背景について(ベイズ)
CausalImpactの理論的背景にある階層ベイズについて、Aicia Solidさんの動画を参考にさせていただきました。
(直接的にCausalImpactについて言及されているわけではないです)
【ベイズ統計その①】条件付き確率と Bayes の定理【時間の流れを意識せよ!】
「ベイズってなに?」という方向けのわかりやすい動画だと思います。【ベイズ統計⑥】最終回!階層ベイズとMCMC【してやんよ】
階層ベイズの気持ちを理解するのに参考にさせていただきました。
Rについて
筆者は今回のCausalImpactを使った分析を機にRを学習したので、その際に参考にした書籍も紹介します。
R言語ではじめるプログラミングとデータ分析 | 馬場 真哉 (amazon)
Rのプログラミング的側面の学習にとても良い書籍だと感じました。改訂2版 RユーザのためのRStudio[実践]入門 | 松村 優哉, 湯谷 啓明, 紀ノ定 保礼, 前田 和寛 (amazon)
RStudioの利用が初めてだったので、作業の際に頻繁に参照していました。Rグラフィックスクックブック 第2版 ―ggplot2によるグラフ作成のレシピ集 | Winston Chang, 石井 弓美子, 河内 崇, 瀬戸山 雅人 (amazon)
Rでグラフを作る時に細かい設定方法などをパッと引けるので、レポート作成時に重宝しました。再現可能性のすゝめ (Wonderful R 3) | 高橋 康介 (amazon)
Rmarkdownでレポートを作成する際に有用な情報が多く、レポート作成の手間がだいぶ減らすことができました。