DynamoDB + S3 + EMRでコホート分析(cohort analysis)をする(1)

コホート分析とは

定義に関してはWikipediaを見れば大体わかるかと。日本語のエントリーがないので、大雑把に説明すると、ユーザーをグループ(コホートと呼ばれる)に分割し、各コホート毎に指標(例えば、ユーザーごとの滞在時間)を集計して分析することをコホート分析(cohort analysis)と呼ぶ。

よくある質問として「セグメント分けとどう違うの?」っていうのがあって、セグメントは例えば性別とか年代とかのユーザーの属性によって分割するのに対して、コホートは登録日時、初回ログイン日時といった、ユーザーの行動を元にグループ分けするというのが違い、だと思う。

概要

やりたいこと

例として、ユーザーの登録日時(週ごと)によりコホートを分けて、それぞれのコホートごとにn週後のアクティブ率を調べる。

処理の流れ

以前やっていた勉強会で発表した時の資料に、おおまかな流れは書いてあるので、まずはそちらを参照。

大雑把に言って

  1. アプリからfluentd経由でDynamoDBにログを書き込む
  2. 定期的にDynamoDB → S3にデータを移す
  3. EMR上のHiveで集計し、S3上に結果書き込み

という感じ。

入力データの構造

ユーザー行動ログ(DynamoDB)

ユーザーがどんな行動を取ったかのログ。内容は、ごく一般的なもので、項目としては以下の様なもの。

  • タイムスタンプ
  • ユーザーID
  • ログの内容(何をしたか)
  • その他付加情報(ブラウザ、IPアドレスetc.)

キー、インデックスの情報等は省略。DynamoDBのテーブル設計に関するベストプラクティスに関してはAWSのこちらのドキュメントを参照。

ユーザーの登録情報(MySQL)

コホート分けに使う。項目としては以下の様なもの。

  • ユーザーID
  • 登録日時
  • その他ユーザー情報(名前、性別)

日時とコホートのマッピング(フラットファイル)

週次・月次(今回は週次のみ説明)でコホートに分けるので、日時とコホートのマッピングのファイルをExcelで作っておいた。内容は以下のようなもの。

例えば、2013-01-06は、2012-12-31週のコホート、あるいは2013-01-01月のコホートに属す、というもの

2013-01-01	2012-12-31	2013-01-01
2013-01-02	2012-12-31	2013-01-01
2013-01-03	2012-12-31	2013-01-01
2013-01-04	2012-12-31	2013-01-01
2013-01-05	2012-12-31	2013-01-01
2013-01-06	2013-01-07	2013-01-01
2013-01-07	2013-01-07	2013-01-01
2013-01-08	2013-01-07	2013-01-01
2013-01-09	2013-01-07	2013-01-01
2013-01-10	2013-01-07	2013-01-01

これを事前にS3に上げておく(詳細は次回)。

この後にやること

この後に実行することの概要だけ書いて、今回は終わりにする

  • MySQLのテーブルの内容はS3にエクスポート
  • DynamoDBの内容もS3にエクスポート
  • Hiveクエリーを実行

次回は、S3にデータをエクスポートする部分を説明する。Hiveから直接参照できるように、決まったレイアウトにしておく必要がある。

第2回の記事はこちら

“DynamoDB + S3 + EMRでコホート分析(cohort analysis)をする(1)” への1件の返信

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です