atama plus techblog
💨

新機能向けのダッシュボード開発で学んだデータ可視化のプロセス

2024/12/20に公開

はじめに

こんにちは、atama plus でデータエンジニアをしている kumewata です。

最近リリースした AI ステップ解説という新機能のダッシュボードを作ることになり、試行錯誤しながら開発を進めました。その後社内向けのドキュメントとしてダッシュボード実装までの全体のプロセスを整理していたのですが、せっかくアドベントカレンダーのシーズンなので外部向けの記事として書いてみることにしました 🙋

https://prtimes.jp/main/html/rd/p/000000102.000037602.html

前提

AI ステップ解説では、atama+アプリの学習体験のうち解説部分のサポートをするために生成 AI でアプローチしました。

初期段階として、全面展開をせずに利用ユーザーの範囲を限定してリリースされました。そのためさらに広い範囲のユーザーに展開するか(はたまたクローズするのか)、次のアクションを決めるために生徒の利用状況や FB を定量的に知る必要がありました。

またチームメンバーで同じデータを共有し議論できる場として、ダッシュボードを作成しようと考えました。社内で Streamlit の BI 基盤が用意されていたため、これを利用することにしました。

進め方

ダッシュボード作成は次の 3 ステップで進めました。

  1. 事前準備:データの把握や分析軸の整理

  2. 探索的なデータ確認:1 で用意した内容をベースに寄り道をしながらデータ出しや可視化を行い、肌感を掴む

  3. ダッシュボード化:2 で見たデータの中から継続的に見たいものをピックアップし、Streamlit に実装

1. 事前準備

データを見始めるにあたり、まずは保有するデータを整理し、評価指標の候補をチームメンバーで洗い出しました。
データについて把握した後、ディメンショナル・モデリングの考え方に沿ってデータを見る軸を整理しました。

今回は機能利用時のセッションをファクト(事実)として、次のようなディメンション(文脈)を想定しました。

  • AI ステップ解説機能が持つ情報

    • 日付、解説に対する FB、メッセージ履歴(生徒と AI のやりとり回数など)
  • atama +が持つ情報

    • 生徒情報、学習履歴(問題に正答したかなど)、問題の内容


ファクトとディメンションの整理

※ ディメンショナル・モデリングについては、私もぺいさんの記事を参考に勉強中です。

2. 探索的なデータ確認

事前準備で整理した分析軸をベースに、データキャンバスで気になるところを寄り道しながら可視化を進めました。データキャンバスについては先日紹介記事を書いたので、読んでいただけると幸いです。今回はデータキャンバスのブロックを CTE として活用し、探索しながらデータを見ていきました。

https://zenn.dev/atamaplus/articles/f8a9d64b2464cc

進め方

最初は簡単なクエリから始めて、データの素性を見ていきます(join した時のレコードの増減や想定外の null 値が混入していないかなどもチェック)。特にフィーチャーフラグなどで適用ユーザーが限定される場合は、最初に対象ユーザーに絞り込む条件を用意しブロック化しておくと、join するだけでデータのスコープを絞れて分析が楽になります。

ブロックが増えていく中で、多くのブロックに依存されるものが後々ウェアハウスの候補になります。上流で作るブロックは汎用的に、下流にいくにつれてユースケースに沿ったブロック(出力がすぐ可視化できる)にしておくと、ダッシュボード作成時にクエリを流用しやすくなります。

このように進めて、可視化がある程度形になったタイミングでチームメンバーに共有し、気になる観点がないか FB をもらいました。

今回のケースでは、データキャンバスで可視化したデータを数日手動更新しながら確認したところ、継続して見たいデータが掴めてきたのでダッシュボード作成に着手しました。


作成したキャンバスの一部


チームメンバーへの可視化共有の様子

3. ダッシュボード化(+ α)

進め方

ダッシュボード化のステップでは、最初にウェアハウステーブルを作成しました(弊社では Dataform を利用しています)。データキャンバスで作成したブロックのうち、多くのブロックに依存されていて汎用的なものをピックアップしてテーブル化します。

その後、用意したテーブルを使いながらダッシュボードのクエリを作成しつつ、Streamlit 上で可視化しました。

ウェアハウステーブルを用意

最初はウェアハウスに加えてマートまで作ろうとしていましたが、テーブル化する対象を絞って少数のウェアハウステーブルのみ作ることにしました。理由としては、初期はクエリの頻繁な変更が予想されるため、再利用性を確保しつつ柔軟に対応できる構造を選択したかったからです。

データキャンバス作成時は探索フェーズだったのでクエリの可読性などは気にしていませんでしたが、このタイミングで不要なカラムの掃除や社内ガイドラインに沿ったクエリへの書き換えを行いました。

ダッシュボード(+ α)の実装

弊社では Streamlit を利用したアプリケーションを簡単にデプロイできる基盤があり、今回はそれを利用しています。詳しくはこちらの記事をご覧ください。また先日 Streamlit の Tips 記事も書いたので紹介させてください 🙋

https://zenn.dev/atamaplus/articles/6a98de75cce88a

はじめは全体の利用状況を見るためのダッシュボードだけ実装していましたが、チーム内で共有するうちにより個別の学習体験を確認したくなりました。そのため、元々利用していた N1 分析ツール(社内で開発された生徒の学習履歴を観察できるツール)の改修も進めました。最終的には下記 2 つのアウトプットが出来上がりました。

  1. AI ステップ解説ダッシュボード

単純な利用回数の推移から利用後の FB の割合など、だいたい 10 個ほどのグラフを載せています。このダッシュボードを見ながら深掘りしたいところがあれば個別の分析用のクエリを書いたり、チーム外のメンバーへの情報共有に活用しています。


ダッシュボードの一部

  1. N1 分析ツール with AI ステップ解説

今回は既存のツールを拡張する形で、 atama +アプリの体験上で新機能がどのように使われていたかを詳細に見に行けるようにしました。また利用時のメッセージ内容を確認できるページも追加しました。

※ AI ステップ解説で利用している Langchain の一機能である LangSmith を利用するとトレース確認を簡単にできます。しかし atama +の既存学習履歴との統合が難しいため、データ連携を優先して自前で実装しました。


N1 分析ツールに AI ステップ解説の項目追加


利用セッションごとのメッセージ履歴も見られるようにした

まとめ

以上、今回は新機能に対して 3 ステップに分けて可視化を進めました。先に確認したい指標の整理や探索のプロセスを入れたことで、見たいものをぶらさずにダッシュボード化まで進められました。

ダッシュボードを作成したことで、さらなるデータ深掘りのきっかけや意思決定のサポートにも活きてきています 🙌

私は普段データエンジニアとして分析基盤の構築・運用などプラットフォーム側の動きをすることが多いのですが、今回自分で利用側に回ったことで機能提供から分析・意思決定に至るまでの解像度を上げることができました。この経験を活かしつつ、今後より社内でのデータ利活用を促進していきたいです 🙋

atama plus techblog
atama plus techblog

Discussion