4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Redashでコホート分析のはまりどころ

Last updated at Posted at 2022-01-15

はじめに

Redashでコホート分析ができるですが、いくつかハマったのでメモを残しておきます。

コホートとは?

詳細は他のサイトで調べて頂きたいですが、例えば、ある月に100人が予約して、その翌月にその100人のうち何人が予約したか?その翌々月は?というの表した図です。継続率の分析やリピートするタイミングの分析などに使うことが多いと思います。

こんな感じの図です
Screen Shot 2022-01-15 at 13.52.08.png

サンプルデータ

  • 以下のようなシンプルなテーブルを例とします

  • Ordersテーブル:予約データ

  • orders.user_id:予約者

  • orders.created_at:予約作成日

SQL

  • クエリはこんな感じです。mysql5系で試したので、MySQL8.0とかでしたら、with句を使ったほうが見やすいかと思います。
-- ユーザーごとの予約の初回の月
CREATE TEMPORARY TABLE tmp_first_date_by_user AS (
 SELECT
  DATE_FORMAT(MIN(orders.created_at), '%Y%m') AS first_date,
  user_id
 FROM orders
 WHERE orders.created_at IS NOT NULL
 GROUP BY user_id
);

-- 初回の月ごとの予約の件数
CREATE TEMPORARY TABLE tmp_user_count_by_first_date AS (
 SELECT
  first_date,
  COUNT(user_id) AS total
 FROM tmp_first_date_by_user
 GROUP BY first_date
);

-- それぞれのorderの月ごとの件数を求める(同月の予約は1とする)
CREATE TEMPORARY TABLE tmp_user_count_by_date AS (
 SELECT
  DATE_FORMAT(orders.created_at, '%Y%m') AS cohort_date,
  tmp_first_date_by_user.first_date AS first_date,
  COUNT(DISTINCT orders.user_id) AS user_count
 FROM orders
 INNER JOIN tmp_first_date_by_user ON tmp_first_date_by_user.user_id = orders.user_id
 WHERE orders.created_at IS NOT NULL
 GROUP BY 1, 2 
);


SELECT
 date_format(CONCAT(tmp_user_count_by_first_date.first_date, '01'),'%Y-%m-%d') AS date,
 PERIOD_DIFF(tmp_user_count_by_date.cohort_date, tmp_user_count_by_first_date.first_date) AS month_number,
 CAST(SUM(tmp_user_count_by_date.user_count) AS SIGNED) AS value,
 tmp_user_count_by_first_date.total AS total
FROM tmp_user_count_by_first_date
LEFT OUTER JOIN tmp_user_count_by_date ON tmp_user_count_by_date.first_date = tmp_user_count_by_first_date.first_date
GROUP BY 1, 2, 4
ORDER BY 1, 2, 4

Redashの設定

  • RedashのVisualizationの設定1

Screen Shot 2022-01-15 at 13.44.46.png

  • RedashのVisualizationの設定2

Screen Shot 2022-01-15 at 13.44.52.png

はまりポイント

  • なにかがおかしいと、RedashでCohortにVisualization Typeを選べない(何が原因かわからないのでハマる)
  • データが多すぎるとブラウザが固まるっぽいので、最初はWHERE句で数行だけにして、設定がうまくいってから、データ量を調整して増やしていく
  • Redash では、月、週、日の単位でコホート分析するだけの機能なので、年や四半期などはできない
    • Redash設定画面の Time Interval
  • 結果は、次の4つのカラムをかならず出力する。
    • 日付:必ずYYYY-MM-DDの形式にする
      • SQLの date
      • Redash設定画面の Date(Bucket)
    • 期間:最初の日付からの経過時間
      • SQLの month_number
      • Redash設定画面の Stage
    • その期間のデータ:その経過時間のデータ
      • SQLの value
      • Redash設定画面の Stage Value
    • 最初の日付のデータ:初回のデータ
      • SQLの total
      • Redash設定画面の Bucket Population Size
  • 日付は、必ずYYYY-MM-DDの形式にする。月のコホートでもYYYY-MMだとブラウザが固まる。YYYYMMDDでもだめ。
  • 結果として表示するカラム名は、全部小文字にする。大文字と小文字が混じっているとブラウザが固まる

参考

4
1
1

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
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?