2022の19日目の記事です。今年も昨年に引き続きアドベントカレンダーをやってます。こちらを見てみてください。データチームの古田(@crazysrot)です。今回はミツモアでテレビCMを実施した際に行なった効果検証をについて紹介します。背景ミツモアでは、2022年に入ってから断続的にテレビCMを実施しています。その際に「CM効果を認知やサイト来訪といった指標だけでなく、より事業の数字に近いKPIで見られるようにしたい!」という要望が上がりました。ミツモアでは、効果のtargetを依頼作成数として分析しました。依頼内容の回答や個人情報の入力が完了したタイミングのこと。各企業によっては各々に設定してあるKPIに従ってこれがPV/セッション/商品購入などの設定をします。Modeling)のようなとても複雑な分析が必要になると言われています。多数のチャネルがあり、かなりブランドを築けている会社においてはMMMのような手法を用いる方が良いかもしれませんが、今回はそこまで複雑にせずシンプルなモデルを作成することにしました。下記がそうした理由になります。PVが大きく上昇するような影響が出ると期待されていた過去にCMを継続的に実施していないチャネルがある程度限られており、別チャネルの設定を大きく変更しない分析環境から可視化まで全て、Colaboratory上で完結することにしました。データ分析基盤全体をGCP上に構築しており、Colaboratoryだとデータ連携がしやすい。BigQueryやGCSのデータ連携で認証が通しやすいColaboratoryのノートブックの先頭にパラメータを定義すれば、非エンジニアでも各自で実行する運用方法が可能になる後述しますが、今回のケースにColaboratoryを選択したことは失敗でした...効果検証分析アルゴリズムミツモアでは成長し続けているサービスなので、過去に時系列分析を積極的に行なっていませんでした。そのため、それに対する経験が乏しかったため、複数の時系列分析を簡易的に実施できるDartsを用いました。Pytorchなどを利用しています。これらのアルゴリズムを多数検証し、どの要素(季節要因など)を取り込む必要があるのかなどの確認も行いたい意図もありました。Engineering)都道府県とサービス別で依頼数をdailyで集約して特徴量としました。集約単位をdailyにした根拠は、サンプル数を増やしたいのと、分析結果の利用はdailyが最小単位になりそうだったためです。都道府県別で集約しているのは、基本的にCMの放映が都道府県別に行われている仮定を置いて分析をしたかったからです。サービス別で集約しているのは、CMで直接訴求するサービスがミツモアブランドではなく特定サービスであったため、直接訴求したサービスの効果検証も実施したかったためです。今回訴求したサービスがエアコン系のものが多かったため、普及率の低い北海道は除外して分析をした結果も確認してみる必要があったので、こちらの対応は必須でした。別チャネルの広告宣伝費用のデータの使用も検討しましたが、結局これは行いませんでした。今回は少ない工数で作成したかったことと、サンプル数不足に陥る可能性が高いなどの理由によりシンプルにモデルを作成する必要があったためです。実際に作成したコードのサンプル実際に分析に使用したコードを、サンプルデータを使用して説明してきます。以下の前提でコードのサンプルを提示していきます。放映したCMの効果を検証するここでは精度検証などの話は省略して、ライブラリの使用方法とCM効果検証の大まかな流れに焦点を当てます。Datsのインストールpipで入れます。dartsダミーデータの準備データは県別のdailyのCV数とします。値はなんでも良いので乱数で作成します。})DartsのTimeseriesオブジェクトの作成Dartsの学習を行うため、pandas.DataFrameからdarts.TimeSeriesに変換します。この際CMの対象県か否かでデータを分けます。CM対象県のデータは、CM放映前と放映後でデータを分けます。end_ts=end)モデル作成dartsには多くの時系列モデリングライブラリがラップされていますが、その中でもprophetを使用してモデルを作成します。した機械学習モデルを使用して、CM対象県のCM放映期間における、仮にCMを放映していなかった世界でのCV数を予測します。その値と、CMの影響が現れている実際のCV数を比較して、CMの効果とします。二つのCV数の差を比較して、CM効果とする。Notebookで、とても便利なサービスです。分析に必要な各種ライブラリがプリインストールされている、裏で常にアップデートが走っており常に最新に近い状態になっている、再実行するだけならばGoogleDrive上で非エンジニアでもクリックのみで簡単に実行できる、といったことが強みとしてあります。Colaboratoryであるが故にエラーが発生してしまうしかし、今回は「裏で常にアップデートが走っており常に最新に近い状態になっている」部分が逆にデメリットになってしまい、とても後悔してしまいました。ミツモアでは長期に渡りCMを実施しました。時に発生するエラーが発生することが多発していました。上述したように、今回アルゴリズムにはDartsを利用しました。libraryのため、さまざまな箇所でコンフリクションエラーが発生しやすかったのではないかと考えています。同様のライブラリを使用するときは今後は慎重に選択したいと思います。似たようなwrapperライブラリである、PyCaretなども同じようなエラーが出るケースがあるようです。してから実行したりしました。多かったように記憶しています。今回のColaboratory使用での経験を振り返ると、実装前に以下の観点をもっと慎重に考慮するべきだったと思っています。Functionsなど)を使用して、開発効率を上げていきたいと思っています。使用するライブラリの依存性の複雑さ今回使用したDartsは多数の時系列モデリングライブラリをwrapしたパッケージであるため、必然的に他のライブラリへの依存関係が複雑になります。このような場合、Colaboratoryだとプリインストールされているライブラリとのバージョンのコンフリクトが発生してしまい、version指定などで色々悩まされることになります。加速度的に難しくなっていきます。今回のCM効果検証のプログラムでは、ソースコードはほとんど.pyファイルに書き、それをGoogleDriveに置き、GoogleDriveをマウントしてノートブックの方からimportして使用していましたが、これもあまり良い方法ではありませんでした。理由は、GoogleDriveへのソースコードの配置の自動化が難しいこと、またGoogleDriveをフォルダごとコピーしてしまい少しだけ変更が加えられたソースコードが複数のディレクトリに分散し収集が付かなくなることなどがありました。プログラム利用期間のスケールプログラムの利用期間が長いと、その間にColaboratory側でライブラリのバージョンアップや、Dartsなどの新たにインストールしているライブラリでバージョンアップがあったりします。このバージョンアップがある度に、コンフリクトを解消する作業をしないといけないので、かなり保守に工数がかかるようになります。最後に今回は、テレビCM分析の取り組みを失敗談も含めて紹介いたしました。シンプルなモデル作成をしましたが、今後さらにサービスが成長してくると、より高度化した分析を実施する必要が出てくるため、今回とはまた違ったアプローチをとった分析にする必要があると思っています。データチームは、日本のGDP向上のため、よりビジネスに直結する正確な分析結果を素早く提供できるように今後も引き続き改善を続けていきます。2022の8日目の記事です。2022の1日目の記事です。2021の12/23分の記事です。2021の12/20分の記事です。2021の9日目の記事です。12Search引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。