DynamoDB + S3 + EMRでコホート分析(cohort analysis)をする(1)
コホート分析とは
定義に関してはWikipediaを見れば大体わかるかと。日本語のエントリーがないので、大雑把に説明すると、ユーザーをグループ(コホートと呼ばれる)に分割し、各コホート毎に指標(例えば、ユーザーごとの滞在時間)を集計して分析することをコホート分析(cohort analysis)と呼ぶ。
よくある質問として「セグメント分けとどう違うの?」っていうのがあって、セグメントは例えば性別とか年代とかのユーザーの属性によって分割するのに対して、コホートは登録日時、初回ログイン日時といった、ユーザーの行動を元にグループ分けするというのが違い、だと思う。
概要
やりたいこと
例として、ユーザーの登録日時(週ごと)によりコホートを分けて、それぞれのコホートごとにn週後のアクティブ率を調べる。
処理の流れ
以前やっていた勉強会で発表した時の資料に、おおまかな流れは書いてあるので、まずはそちらを参照。
大雑把に言って
- アプリからfluentd経由でDynamoDBにログを書き込む
- 定期的にDynamoDB → S3にデータを移す
- 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件の返信