0
0

More than 1 year has passed since last update.

チャットボットにおけるユーザーの行動分析に使えるSQL Tips

Posted at

今回のテーマ

SQLを使用したチャットボット内のユーザーの行動分析

前提条件

  • 使用するデータウェアハウスはBigquery
  • チャットボットで記録されるデータは
    • session id:チャットボット起動時に記録される一意のID(String型)
    • createtime:データが作成された日時(datetime型)
    • scenario text:チャットボット内でどのボタンが押下されたか判別できるString型データ

今回分析したい内容

  • シナリオごとのユーザー数

シナリオごとのユーザー数

  • 方法1:シナリオ単位でグループ化をし、session idをdistinctでcountしてあげる
  • 方法2:STRING_AGGを使用してセッションごとにscenario textをまとめる方法

方法1については基礎的な部分なので割愛する。
方法2については以下のSQLで取得可能

with A as(
    select 
        session_id
        ,STRING_AGG(scenario_text) as scenario
    from xx /*チャットボット内の行動が記録されているテーブル*/
    group by 1
)
select 
    case
        when REGEXP_CONTAINS(scenario, "シナリオ1") IS TRUE THEN "シナリオ1"
        when REGEXP_CONTAINS(scenario, "シナリオ2") IS TRUE THEN "シナリオ2"
        when ...
    end as scenario
    ,count(distinct session_id)
from A
group by 1

Aテーブルは以下のようになる

session_id scenario
a シナリオ1,シナリオ2,...,シナリオn
b シナリオ1,シナリオ2,...,シナリオm
... ...

REGEXP_CONTAINSで含まれているシナリオを抽出しグループ化を行う。

方法2のメリットとしては、方法1とは違い複数のシナリオを経由したユーザーを把握することが可能である。

例えば、シナリオ1→シナリオ2→シナリオ4の行動を行ったユーザー数などを簡単に絞り込むことができる。
この場合、SQLは以下の通りになる。

with A as(
    select 
        session_id
        ,STRING_AGG(scenario_text) as scenario
    from xx /*チャットボット内の行動が記録されているテーブル*/
    group by 1
)
select 
    case
        when 
            REGEXP_CONTAINS(scenario, "シナリオ1") IS TRUE 
            AND REGEXP_CONTAINS(scenario, "シナリオ2") IS TRUE 
            AND REGEXP_CONTAINS(scenario, "シナリオ4") IS TRUE 
        THEN "シナリオ1→2→4"
    end as scenario
    ,count(distinct session_id)
from A
group by 1
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0