PdMこそ試してみたい因果探索
この記事はコインチェック株式会社(以下、コインチェック)のアドベントカレンダー19日目(シリーズ2)の記事です。
はじめに
はじめまして、コインチェック株式会社 販売所事業部でプロダクトマネージャー(PdM)をやっている神之田です。
本記事では、「PdMこそ試してみたい因果探索」と題して、PdM視点から因果探索を試してみた事例についてお話しさせていただきます。
参考とした文献は複数ありますが、本記事では主に「因果推論 基礎から機械学習・時系列解析・因果探索を用いた意思決定のアプローチ-Ohmsha」をもとに、コインチェックで取り組んだ事例の一部を紹介させていただきます。
因果探索とは?
まず、そもそも因果探索とは何か、について簡単に解説したいと思います。
みなさんは「因果推論」というワードは聞いたことがありますでしょうか?
昨今のDXやAI系ツールの発展もあり、データ分析を少し勉強してみた、という方はもしかしたらご存知かもしれません。
因果推論とは一言で言うと、「因果の効果を統計的に推定する」考え方・手法のことを指します。
そして、似たような言葉として「因果探索」というものもあります。因果推論と似た概念でありやや混同しがちですが、因果探索は「因果の方向や強さ自体を統計的に推定する」考え方・手法のことを指します。
まとめると因果推論と因果探索の違いとしては以下のような違いがあり、自身が置かれた状況や目的に応じてどちらかを使い分けることが使用法として望ましいものになります。
因果推論 : 因果の方向は既知として、データから因果効果を推定
因果探索 : 因果の方向と強さ自体をデータから推定
因果探索を使ってみた背景
では、なぜ因果探索を使うに至ったのか。
これは主に以下のような2つの解決したい課題感があったためになります。
【短期的な視点】施策・機能の実施優先順位づけの効率を高めるために、複数のビジネスKPIの因果関係と強さを把握したい
施策・機能の優先度スコアリングとして、RICE・ICEスコアや緊急度・重要度の2軸マトリクスなどの手法もありますが、よりビジネスKPIへのインパクトを定量的に試算しやすくするために因果探索の結果を用いたい、というのが理由です。
※優先度はユーザーインタビュー・プロトテストなどの定性的な側面も重視するため、あくまで定量的な意思決定についての効率化が主目的になります。
【中・長期的な視点】ロードマップ・予算策定の効率化のために、ある程度KPIの因果関係と強さを把握したい
1と近しい、時間軸のみ異なる課題感ですが、中長期のロードマップや予算策定を行う際に過大に時間をかけることなく効果・効率的に行うために、因果探索の結果を用いたいというのがもう一つの理由です。
PdMという職種は、プロダクトの定性面の改善に加え、その結果としてプロダクトの定量面の改善も担うことが非常に多い職種だと思います。より抽象化した目的としては、定量面の効果に関する判断を効率化し、定性面の改善の活動に時間をより多く割けるようにしたいという意図があります。
因果推論ではなく因果探索を使ってみた理由
また、PdMであれば、施策・機能リリースにおける効果検証については気を使うことも多いかと思います。
効果検証では主に因果関係は既知 (施策・機能リリースによりユーザー行動が変化する)であることが多く、知りたいのは因果ではなく「どのくらい効果があったか?」ということになり、これは因果推論の範疇になります。
一方で、上述した課題感に関しては、そもそもの施策・機能をリリースする前に、因果効果や因果の強さ自体を知ることが目標であるため、因果探索の領域になります。
KPIに適用してみる
ここから、実際にKPIに適用した事例を解説します。
上述の通り最終的な目的は「複数のビジネスKPIの因果関係と強さを把握したい」というものでしたが、実際に行った手順としては以下のようになります。
既知である単一のプロダクトのKPI指標において、因果探索が機能しているかを確認
上記を確認の上で、複数のプロダクト・事業部のKPI指標へと逐次的に探索範囲を広げる
拡張した結果をドメイン知識を有する担当者と都度議論し、妥当性をチェック
本記事では上記のうち1について「因果推論 基礎から機械学習・時系列解析・因果探索を用いた意思決定のアプローチ-Ohmsha」をもとに、最初に行った取り組みについてご紹介します。
1.使用する因果探索モデルの選定・使用準備
まずは使用する因果探索モデルの選定を行います。
因果探索モデルでは大きく分けて時系列を考慮するか否かに応じて静的モデル・動的モデルの2つの種類があります。また、静的・動的それぞれで複数のモデルが存在します。
今回はKPI数値の時間的な前後関係も知りたいため、動的モデルから選出し、その中でも関数因果モデルを使用します。
具体的には、動的関数因果を計測できるVAR-LiNGAMモデルを用いて因果関係・強さを可視化していきます。
#ライブラリの準備
!pip install lingam #因果探索で使用するライブラリ
!pip install networkx==2.8 #DAG生成のため3.0以下のversion必要
!pip install numpy==1.26.0
2. データ準備
次に使用するKPIデータの準備を行います。
コインチェックでは、Google Bigqueryにてビジネスデータの統合が進んでいるため、BigqueryからSQLを用いてデータ抽出を行います。
※欠損値処理などの前処理もここで行います。
ここでは以下のような、KPI関係については既知である販売所プロダクトにおけるダミーデータセットを使用します。
各項目の内容については下記の通りです。
date : 日付
DAU : dailyのアクティブユーザー数
DTU : dailyの取引ユーザー数
order_num : dailyの取引数
total_order_amount : dailyの取引暗号資産数量
profit : dailyの売り上げ
closing : 代表的な暗号資産であるBTCの終値
price_change_rate : 代表的な暗号資産であるBTCの前日比価格変動
3. モデル適用
次にVAR-LiNGAMモデルを適用していきます。
※本来であればモデルの統計的な前提条件と合致するかなど、さまざまな点をチェックした上で使用すべきですが、ここでは最初の試みとしてとりあえず適用してみます。
model = lingam.VARLiNGAM(lags=1, prune=True) #VAR-LiNGAM、時間ラグは1を指定。(t-1時点のデータまで考慮)
model.fit(target_df) #データを適用
#有向グラフ描写
make_dot(np.hstack(model.adjacency_matrices_),lower_limit=0.05,ignore_shape=True,labels=labels)
描画された因果グラフは下記のようになります。
グラフの矢印に添え字で記載されている数値が、その変数が1単位動いた場合の影響する変数の効果量を表しています。
少し項目が多く見づらいので、相関がある指標を除去すると以下のようになります。
4. 結果の解釈・チェック
ここからは結果の解釈になります。
最後に出力された因果グラフはプロダクトのKPIを日々見ている立場から見ても、かなり自然な点が多いと感じます。
例えば、前日時点の大きな価格変動が翌日のDAUに影響したりする、といった関係はとても自然なものかと思います (自身が保有する通貨の価格が大きく動いた場合、気になって翌日も見てしまう)
一方で、当日の価格がどこにも影響しないというのはかなり直感に反する結果になっています。(大きく価格が動いた場合、当日の取引量に影響するというのがより自然)
既知の因果関係においても直感に反する部分があり、このモデルはまだまだ改善余地がありそうです。
今回紹介したものは取り組みの中のほんの最初の一部であるため、実際にはここを出発点として様々な改善を重ねていきました。最終的に落ち着いたものを、日々の定量的な意思決定に使用しています。
おわりに
本記事ではPdMこそ使ってみたい因果探索というテーマで、実際のKPIに適用した取り組みについて簡単にではありますが一部を紹介させていただきました。
因果探索の分野自体まだまだ発展途上であり、また暗号資産のビジネスドメイン自体も日々驚くような大きな変化がありますが、PdMとしてユーザーの皆様にとってよりよい施策・機能をいち早く見極めて、効果的なものからリリースするというのは当面変わることはないか感じています。
今後も様々な改善や効率化を行い、ユーザーの皆様にとってより良いものを考える時間を多くとり、より使いやすいアプリ・サービスとなるよう尽力していきます。