Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Copyright 2016 CYBIRD Co., Ltd.
SparkやBigQueryなどを用いた
モバイルゲーム分析環境
株式会社サイバード
小松 裕一
ハッシュタグ : #devsumiD
セッションID : 18-D-L
自己紹介
名前:小松 裕一
所属:株式会社サイバード
ビジネス戦略統括本部
データ戦略統括部
仕事:分析環境の構築
データ処理全般
出身:宮城県
分析処理でよく使うもの:Hive、Spark、MySQL、BigQuery、
Embulk、Per...
会社紹介
女性向け恋愛ゲーム -イケメンシリーズ-
会社紹介
• イケメン達との恋愛ストーリー
を楽しめる恋愛ゲーム
• 7タイトル、7プラットフォーム、
156カ国で配信
• 累計会員数1,200万人
• 3DCGのリッチな試合シーンが
楽しめる本格派サッカークラブ
育成ゲーム
• 世界140カ国配信、累計
300万DL
• 香港ではAppStoreセールス
ランキングNo.1獲得
BFB2016
会社紹介
情報コンテンツ
会社紹介
チーム紹介
多様なメンバーで構成され、必要なスキルを補い合っています
チーム紹介
アナリスト
- マーケティング部門出身
- Webマーケティング知識
- Excel,SPSS,R
アナリスト
- ゲームプランナ出身
- 統計学,データ処理
- SQL,R...
Agenda
1. 分析環境の概要
1-1. 概要図
1-2. 用途
2. データ処理の詳細
2-1. BIツール(Cynapse)
2-2. アドホック分析(エンジニア利用)
2-3. アドホック分析(アナリスト利用)
3. まとめと今後の展望
Agenda
1. 分析環境の概要
1-1. 概要図
1-2. 用途
2. データ処理の詳細
2-1. BIツール(Cynapse)
2-2. アドホック分析(エンジニア利用)
2-3. アドホック分析(アナリスト利用)
3. まとめと今後の展望
分析環境はAWS及びGCPで構成されています
1. 分析環境の概要 1-1. 概要図
Amazon RDS
Amazon EMR
Amazon S3
DB
WEB/アプリ
データ転送用
データフロー
処理コマンド
分析環境各サービス
アドホック...
Agenda
1. 分析環境の概要
1-1. 概要図
1-2. 用途
2. データ処理の詳細
2-1. BIツール(Cynapse)
2-2. アドホック分析(エンジニア利用)
2-3. アドホック分析(アナリスト利用)
3. まとめと今後の展望
分析環境の用途は主に3つです
1. 分析環境の概要 1-2. 用途
1. BIツール(Cynapse)
=> 毎日、KPIなどの指標をモニタリング
(e.g. ログイン頻度別にDAUを切り分けることで、広告の成果を測る)
2. アドホック分析(...
CynapseではKPIを可視化し、施策に役立てています
1. 分析環境の概要 1-2. 用途
• 自社開発のモニタリングツール
• データを可視化し、複数のタイトルの状況
を複数の指標で確認
CynapseはEC2とRDSで構成されています
1. 分析環境の概要 1-2. 用途
Amazon RDS
Amazon EMR
Amazon S3
DB
WEB/アプリ
データ転送用
データフロー
処理コマンド
分析環境各サービス
アドホッ...
アドホック分析(エンジニア利用)では主に2つの用途で活
用しています
1. 分析環境の概要 1-2. 用途
• 過去ログの集計
S3に格納された過去ログを基に、ある特定時点のデータを集計
=>現在と過去の状態比較による効果測定、施策改善
• R...
アドホック分析(エンジニア利用)では要件に応じて最適な
処理手法を選択し、利用しています
1. 分析環境の概要 1-2. 用途
Amazon RDS
Amazon EMR
Amazon S3
DB
WEB/アプリ
データ転送用
データフロー
処...
アドホック分析(アナリスト利用)では様々な用途で活用し
ています
1. 分析環境の概要 1-2. 用途
• ユーザ行動分析
e.g. タイトルをまたいでプレイしているユーザの動向を分析
=> 改善施策や新規タイトルのアイデア
• テキストマイニ...
アドホック分析(アナリスト利用)ではBigQuery、GCS及
びEC2に構築したテキストマイニングサーバを利用しています
1. 分析環境の概要 1-2. 用途
Amazon RDS
Amazon EMR
Amazon S3
DB
WEB/アプ...
Agenda
1. 分析環境の概要
1-1. 概要図
1-2. 用途
2. データ処理の詳細
2-1. BIツール(Cynapse)
2-2. アドホック分析(エンジニア利用)
2-3. アドホック分析(アナリスト利用)
3. まとめと今後の展望
Cynapseに表示するデータはS3→EMR→RDSで処理し、
KPI毎に最適な形でまとめています
2. データ処理の詳細 2-1. BIツール(Cynapse)
状況に応じてSQL、スクリプト
で処理
Amazon S3 Amazon EMR...
各コンテンツのログデータは全タイトル共通のフォーマット、
また下記のタイミングでS3に収集しています
2. データ処理の詳細 2-1. BIツール(Cynapse)
基本的には
前日の更新データを毎日
分析要件によっては
1時間毎
⇒イベント効...
共通フォーマットを使用する利点は下記2つです
2. データ処理の詳細 2-1. BIツール(Cynapse)
・汎用的なバッチを作成することで新タイトルリリース時の対応がほぼ
必要なくなる
⇒リリース直後から分析が開始できる
[よくある問題]
...
ゲーム事業では主に5種類のログを利用しています
2. データ処理の詳細 2-1. BIツール(Cynapse)
ユーザプロフィール
ログイン
課金
アイテム
ガチャ
項目
共通ID
ユーザID
レベル
課金通貨の保持量
非課金通貨の保持量
国コ...
Cynapseに表示するログデータをEMR(Spark)で処理する
場合は下記フローとなります
2. データ処理の詳細 2-1. BIツール(Cynapse)
(1)EMR(Spark)を起動、及びJSONで定義した処理((2)以降)を実行
(...
EMRで処理されたデータはKPI毎にRDSに格納しています
2. データ処理の詳細 2-1. BIツール(Cynapse)
カラム
集計日 PRI
登録日 PRI
DAU
課金UU
売上
コンテンツコード PRI
プラットフォーム PRI
推奨...
集計データからは下記のような指標が得られます
2. データ処理の詳細 2-1. BIツール(Cynapse)
• レベル
• 累積課金
• ログイン頻度
• 継続日数
など
ユーザセグメント毎にDAU、課金率、ARPPUなどを取得
特定のセグメ...
Agenda
1. 分析環境の概要
1-1. 概要図
1-2. 用途
2. データ処理の詳細
2-1. BIツール(Cynapse)
2-2. アドホック分析(エンジニア利用)
2-3. アドホック分析(アナリスト利用)
3. まとめと今後の展望
アドホック分析(エンジニア利用)の用途
2. データ処理の詳細 2-2. アドホック分析(エンジニア利用)
• 過去ログの集計
S3に格納された過去ログを基に、ある特定時点のデータを集計
=>現在と過去の状態比較による効果測定、施策改善
• R...
S3に格納された過去ログは主にEMR(Spark)で集計します
2. データ処理の詳細 2-2. アドホック分析(エンジニア利用)
aws emr create-cluster --name "sparktest"¥
--release-lab...
実行サンプル(Scala)
2. データ処理の詳細 2-2. アドホック分析(エンジニア利用)
> spark-shell
// ケースクラス定義
case class Login(user_id: Int, regist_dt: String...
アドホック分析(エンジニア利用)の用途
2. データ処理の詳細 2-2. アドホック分析(エンジニア利用)
• 過去ログの集計
S3に格納された過去ログを基に、ある特定時点のデータを集計
=>現在と過去の状態比較による効果測定、施策改善
• R...
処理するRDBのデータはBigQueryに転送してクエリを実行
します
EmbulkでBigQueryにデータを転送する場合の詳細は下
記をご参照ください
2. データ処理の詳細 2-2. アドホック分析(エンジニア利用)
Qiita:「Emb...
Agenda
1. 分析環境の概要
1-1. 概要図
1-2. 用途
2. データ処理の詳細
2-1. BIツール(Cynapse)
2-2. アドホック分析(エンジニア利用)
2-3. アドホック分析(アナリスト利用)
3. まとめと今後の展望
アドホック分析(アナリスト利用)の用途
2. データ処理の詳細 2-3. アドホック分析(アナリスト利用)
• ユーザ行動分析
タイトルをまたいでプレイしているユーザの動向を分析
=> 改善施策や新規タイトルのアイデア
• テキストマイニング
...
使用するデータは下記の手順でBigQueryに格納しています
2. データ処理の詳細 2-3. アドホック分析(アナリスト利用)
• テーブルは日付単位で分ける
(コンテンツコード_YYYYMMDD)
(1)S3からGCSにデータコピー(goo...
実行サンプル(BigQuery)
2. データ処理の詳細 2-3. アドホック分析(アナリスト利用)
SELECT
a.user_id,
SUM(b.price)
FROM
TABLE_QUERY(login,'REGEXP_MATCH(tab...
アドホック分析(アナリスト利用)の用途
2. データ処理の詳細 2-3. アドホック分析(アナリスト利用)
• ユーザ行動分析
タイトルをまたいでプレイしているユーザの動向を分析
=> 改善施策や新規タイトルのアイデア
• テキストマイニング
...
EC2上に下記のような構成のテキストマイニング環境を構築
しています
2. データ処理の詳細 2-3. アドホック分析(アナリスト利用)
• RMeCab + Rstudio
=> EC2上に構築、アナリストがブラウザから直接利用
• 辞書(W...
単語の出現頻度をRMeCabで集計するサンプル
2. データ処理の詳細 2-3. アドホック分析(アナリスト利用)
(1)単語の出現頻度を計算する。
q2_words <- RMeCabFreq("q2.txt")
(2)結果表示を「名詞」、「...
連続する単語の出現頻度をRMeCabで集計するサンプル
(3単語を集計)
2. データ処理の詳細 2-3. アドホック分析(アナリスト利用)
(1)出現頻度を計算する。
q2_3gram <- Ngram("q2.txt", type=1, p...
Agenda
1. 分析環境の概要
1-1. 概要図
1-2. 用途
2. データ処理の詳細
2-1. BIツール(Cynapse)
2-2. アドホック分析(エンジニア利用)
2-3. アドホック分析(アナリスト利用)
3. まとめと今後の展望
分析環境の概要
- AWSとGCPで構築
3. まとめと今後の展望
Amazon RDS
Amazon EMR
Amazon S3
DB
WEB/アプリ
データ転送用
データフロー
処理コマンド
分析環境各サービス
アドホック分析
(エンジニア...
分析環境の概要
- 用途① BIツール(Cynapse)
3. まとめと今後の展望
Amazon RDS
Amazon EMR
Amazon S3
DB
WEB/アプリ
データ転送用
データフロー
処理コマンド
分析環境各サービス
アドホック分...
分析環境の概要
- 用途② アドホック分析(エンジニア利用)
3. まとめと今後の展望
Amazon RDS
Amazon EMR
Amazon S3
DB
WEB/アプリ
データ転送用
データフロー
処理コマンド
分析環境各サービス
アドホッ...
分析環境の概要
- 用途③ アドホック分析(アナリスト利用)
3. まとめと今後の展望
Amazon RDS
Amazon EMR
Amazon S3
DB
WEB/アプリ
データ転送用
データフロー
処理コマンド
分析環境各サービス
アドホッ...
BIツール(Cynapse)におけるデータ処理
- データは共通フォーマットを利用
3. まとめと今後の展望
Amazon RDS
Amazon EMR
Amazon S3
DB
WEB/アプリ
データ転送用
データフロー
処理コマンド
分析環...
BIツール(Cynapse)におけるデータ処理
- データはS3に蓄積、EMR(Spark)で処理し、結果をRDSに格納
3. まとめと今後の展望
Amazon RDS
Amazon EMR
Amazon S3
DB
WEB/アプリ
データ転送...
アドホック分析(エンジニア利用)におけるデータ処理
- S3の過去データはEMR(Spark)で処理
3. まとめと今後の展望
Amazon RDS
Amazon EMR
Amazon S3
DB
WEB/アプリ
データ転送用
データフロー
処...
アドホック分析(エンジニア利用)におけるデータ処理
- RDBの大量データはEmbulkでBigQueryに転送して処理
3. まとめと今後の展望
Amazon RDS
Amazon EMR
Amazon S3
DB
WEB/アプリ
データ転送...
アドホック分析(アナリスト利用)におけるデータ処理
- S3のデータをGCSに転送
3. まとめと今後の展望
Amazon RDS
Amazon EMR
Amazon S3
DB
WEB/アプリ
データ転送用
データフロー
処理コマンド
分析環...
アドホック分析(アナリスト利用)におけるデータ処理
- GCSのデータをBigQueryにロード
3. まとめと今後の展望
Amazon RDS
Amazon EMR
Amazon S3
DB
WEB/アプリ
データ転送用
データフロー
処理コ...
アドホック分析(アナリスト利用)におけるデータ処理
- ユーザ行動分析はBigQueryで実行
3. まとめと今後の展望
Amazon RDS
Amazon EMR
Amazon S3
DB
WEB/アプリ
データ転送用
データフロー
処理コマ...
アドホック分析(アナリスト利用)におけるデータ処理
- テキストマイニングサーバはEC2上に構築
3. まとめと今後の展望
Amazon RDS
Amazon EMR
Amazon S3
DB
WEB/アプリ
データ転送用
データフロー
処理コ...
今後は下記の実施を計画しています
3. まとめと今後の展望
• Spark進化への追随
• リアルタイム処理の導入
• 機械学習の積極的な活用
最後に
http://www.cybird.co.jp/recruit/
エントリーしてね!
エンジニア募集中!
ゲームを作りたい人
大量のアクセスを捌きたい人
などなど、複数の職種で
ご清聴ありがとうございました
Upcoming SlideShare
Loading in …5
×

SparkやBigQueryなどを用いた モバイルゲーム分析環境

3,607 views

Published on

デブサミ2016 18-D-Lの発表資料です

Published in: Engineering

SparkやBigQueryなどを用いた モバイルゲーム分析環境

  1. 1. Copyright 2016 CYBIRD Co., Ltd. SparkやBigQueryなどを用いた モバイルゲーム分析環境 株式会社サイバード 小松 裕一 ハッシュタグ : #devsumiD セッションID : 18-D-L
  2. 2. 自己紹介 名前:小松 裕一 所属:株式会社サイバード ビジネス戦略統括本部 データ戦略統括部 仕事:分析環境の構築 データ処理全般 出身:宮城県 分析処理でよく使うもの:Hive、Spark、MySQL、BigQuery、 Embulk、Perl、Scalaなど
  3. 3. 会社紹介
  4. 4. 女性向け恋愛ゲーム -イケメンシリーズ- 会社紹介 • イケメン達との恋愛ストーリー を楽しめる恋愛ゲーム • 7タイトル、7プラットフォーム、 156カ国で配信 • 累計会員数1,200万人
  5. 5. • 3DCGのリッチな試合シーンが 楽しめる本格派サッカークラブ 育成ゲーム • 世界140カ国配信、累計 300万DL • 香港ではAppStoreセールス ランキングNo.1獲得 BFB2016 会社紹介
  6. 6. 情報コンテンツ 会社紹介
  7. 7. チーム紹介
  8. 8. 多様なメンバーで構成され、必要なスキルを補い合っています チーム紹介 アナリスト - マーケティング部門出身 - Webマーケティング知識 - Excel,SPSS,R アナリスト - ゲームプランナ出身 - 統計学,データ処理 - SQL,R,Excel データ分析エンジニア兼BI開発エンジニア - バイオインフォマティクス業界出身 - 機械学習,統計学,フロントエンド開発 - Java,Python,JavaScript データ分析エンジニア - BtoBソリューション部門出身 - システム設計,Hadoop関連技術,DB管理 - Perl,PHP,Scala データ分析エンジニア - ゲーム開発専門学校出身 - Hadoop関連技術,DB管理,機械学習 - Python チームリーダ兼アナリスト - 経営企画出身(M&A,事業戦略策定,等) - 問題解決,ビジネス知識 - Excel,R,SPSS アナリスト - マーケティングリサーチ会社出身 - 統計学,アンケートリサーチ - Excel,SPSS ビジネス力 データサイエンス力 (統計学/機械学習,等) データエンジニアリング力 出所:データサイエンス協会「データサイエンティストに求められるスキルセット」より引用 スキルセット説明
  9. 9. Agenda 1. 分析環境の概要 1-1. 概要図 1-2. 用途 2. データ処理の詳細 2-1. BIツール(Cynapse) 2-2. アドホック分析(エンジニア利用) 2-3. アドホック分析(アナリスト利用) 3. まとめと今後の展望
  10. 10. Agenda 1. 分析環境の概要 1-1. 概要図 1-2. 用途 2. データ処理の詳細 2-1. BIツール(Cynapse) 2-2. アドホック分析(エンジニア利用) 2-3. アドホック分析(アナリスト利用) 3. まとめと今後の展望
  11. 11. 分析環境はAWS及びGCPで構成されています 1. 分析環境の概要 1-1. 概要図 Amazon RDS Amazon EMR Amazon S3 DB WEB/アプリ データ転送用 データフロー 処理コマンド 分析環境各サービス アドホック分析 (エンジニア利用) Amazon EC2 Google BigQueryGoogle Cloud Storage アドホック分析 (アナリスト利用) Amazon EC2 GCP
  12. 12. Agenda 1. 分析環境の概要 1-1. 概要図 1-2. 用途 2. データ処理の詳細 2-1. BIツール(Cynapse) 2-2. アドホック分析(エンジニア利用) 2-3. アドホック分析(アナリスト利用) 3. まとめと今後の展望
  13. 13. 分析環境の用途は主に3つです 1. 分析環境の概要 1-2. 用途 1. BIツール(Cynapse) => 毎日、KPIなどの指標をモニタリング (e.g. ログイン頻度別にDAUを切り分けることで、広告の成果を測る) 2. アドホック分析(エンジニア利用) => 大量データの集計 (e.g. レコード数の多いテーブルのJOIN) 3. アドホック分析(アナリスト利用) => ユーザごとの行動履歴から知見を得る (e.g. 特定のイベントや行動を経験したユーザの課金率は高い)
  14. 14. CynapseではKPIを可視化し、施策に役立てています 1. 分析環境の概要 1-2. 用途 • 自社開発のモニタリングツール • データを可視化し、複数のタイトルの状況 を複数の指標で確認
  15. 15. CynapseはEC2とRDSで構成されています 1. 分析環境の概要 1-2. 用途 Amazon RDS Amazon EMR Amazon S3 DB WEB/アプリ データ転送用 データフロー 処理コマンド 分析環境各サービス アドホック分析 (エンジニア利用) Amazon EC2 Google BigQueryGoogle Cloud Storage アドホック分析 (アナリスト利用) Amazon EC2 GCP
  16. 16. アドホック分析(エンジニア利用)では主に2つの用途で活 用しています 1. 分析環境の概要 1-2. 用途 • 過去ログの集計 S3に格納された過去ログを基に、ある特定時点のデータを集計 =>現在と過去の状態比較による効果測定、施策改善 • RDBでは処理が難しい大量データの集計 RDBに格納されたレコード数の多いテーブルのJOINなどを実行 =>分析対応の即時性向上
  17. 17. アドホック分析(エンジニア利用)では要件に応じて最適な 処理手法を選択し、利用しています 1. 分析環境の概要 1-2. 用途 Amazon RDS Amazon EMR Amazon S3 DB WEB/アプリ データ転送用 データフロー 処理コマンド 分析環境各サービス アドホック分析 (エンジニア利用) Amazon EC2 Google BigQueryGoogle Cloud Storage アドホック分析 (アナリスト利用) Amazon EC2 GCP
  18. 18. アドホック分析(アナリスト利用)では様々な用途で活用し ています 1. 分析環境の概要 1-2. 用途 • ユーザ行動分析 e.g. タイトルをまたいでプレイしているユーザの動向を分析 => 改善施策や新規タイトルのアイデア • テキストマイニング e.g. ユーザのアクション情報をもとにクラスタリングし、 クラスタごとの単語(N-gram)の頻度を比較 => 新規開発のアイデアや改修の優先順位付け 江戸風タイトル 欧州風タイトル 幕末風タイトル 20% 80% ※数値は仮のものです
  19. 19. アドホック分析(アナリスト利用)ではBigQuery、GCS及 びEC2に構築したテキストマイニングサーバを利用しています 1. 分析環境の概要 1-2. 用途 Amazon RDS Amazon EMR Amazon S3 DB WEB/アプリ データ転送用 データフロー 処理コマンド 分析環境各サービス アドホック分析 (エンジニア利用) Amazon EC2 Google BigQueryGoogle Cloud Storage アドホック分析 (アナリスト利用) Amazon EC2 GCP
  20. 20. Agenda 1. 分析環境の概要 1-1. 概要図 1-2. 用途 2. データ処理の詳細 2-1. BIツール(Cynapse) 2-2. アドホック分析(エンジニア利用) 2-3. アドホック分析(アナリスト利用) 3. まとめと今後の展望
  21. 21. Cynapseに表示するデータはS3→EMR→RDSで処理し、 KPI毎に最適な形でまとめています 2. データ処理の詳細 2-1. BIツール(Cynapse) 状況に応じてSQL、スクリプト で処理 Amazon S3 Amazon EMR Amazon RDS S3にログデータ を集約 Sparkでデータ を加工 RDSに処理 データを格納
  22. 22. 各コンテンツのログデータは全タイトル共通のフォーマット、 また下記のタイミングでS3に収集しています 2. データ処理の詳細 2-1. BIツール(Cynapse) 基本的には 前日の更新データを毎日 分析要件によっては 1時間毎 ⇒イベント効果は日単位、もしくは時間単位で十分に測定するこ とができる
  23. 23. 共通フォーマットを使用する利点は下記2つです 2. データ処理の詳細 2-1. BIツール(Cynapse) ・汎用的なバッチを作成することで新タイトルリリース時の対応がほぼ 必要なくなる ⇒リリース直後から分析が開始できる [よくある問題] 複雑なデータ構造のためKPIを取得する分析実装が間に合わず、施策投入 のタイミングを逃してしまう ・必要なデータの所在や形式を特定するのが容易になる ⇒アドホック分析や、業務引き継ぎ等で無駄な作業がなくなる [よくある問題] 分析要件に応じたデータを探すのが一苦労
  24. 24. ゲーム事業では主に5種類のログを利用しています 2. データ処理の詳細 2-1. BIツール(Cynapse) ユーザプロフィール ログイン 課金 アイテム ガチャ 項目 共通ID ユーザID レベル 課金通貨の保持量 非課金通貨の保持量 国コード チュートリアルの位置 登録日時 更新日時 タイトルID プラットフォーム OSバージョン 機種 推奨機種種別
  25. 25. Cynapseに表示するログデータをEMR(Spark)で処理する 場合は下記フローとなります 2. データ処理の詳細 2-1. BIツール(Cynapse) (1)EMR(Spark)を起動、及びJSONで定義した処理((2)以降)を実行 (2)Sparkクラスタに設定ファイル、実行ファイルをS3から展開 (3)前処理及び集計処理実行 (4)処理完了(S3に結果を出力) s3://XXXXXX/XXX/OUTPUT/retention/20160101/xxxxxxx aws emr create-cluster --name "spark-cynapse-fmt"¥ --release-label emr-4.2.0¥ --log-uri "s3://xxxxxxx/emr_logs/"¥ --enable-debugging¥ --applications Name=Hadoop Name=Hive Name=Spark¥ --ec2-attributes KeyName=xxxxxx¥ --instance-type m3.xlarge¥ --instance-count 3¥ --use-default-roles¥ --auto-terminate¥ --steps "file:///xxxx/xxxx/xxxx/daily_batch.json" [ { "Name": "Download Files", "Type": "Spark", "ActionOnFailure": "CONTINUE", "Args": [ "--deploy-mode", "cluster", "s3://xxxxx/xxxxx/download_files.py" ] }, ・ ・ ・ { "Name": "Sumup", "Type": "Spark", "ActionOnFailure": "CONTINUE", "Args": [ "--deploy-mode", "client", "file:///xxxxx/xxxxx/run.py" ] } ]
  26. 26. EMRで処理されたデータはKPI毎にRDSに格納しています 2. データ処理の詳細 2-1. BIツール(Cynapse) カラム 集計日 PRI 登録日 PRI DAU 課金UU 売上 コンテンツコード PRI プラットフォーム PRI 推奨端末 PRI 継続日数別KPI基本KPI レベル別KPI ログイン頻度別KPI 累積課金別KPI
  27. 27. 集計データからは下記のような指標が得られます 2. データ処理の詳細 2-1. BIツール(Cynapse) • レベル • 累積課金 • ログイン頻度 • 継続日数 など ユーザセグメント毎にDAU、課金率、ARPPUなどを取得 特定のセグメントの 課金率が上昇している
  28. 28. Agenda 1. 分析環境の概要 1-1. 概要図 1-2. 用途 2. データ処理の詳細 2-1. BIツール(Cynapse) 2-2. アドホック分析(エンジニア利用) 2-3. アドホック分析(アナリスト利用) 3. まとめと今後の展望
  29. 29. アドホック分析(エンジニア利用)の用途 2. データ処理の詳細 2-2. アドホック分析(エンジニア利用) • 過去ログの集計 S3に格納された過去ログを基に、ある特定時点のデータを集計 =>現在と過去の状態比較による効果測定、施策改善 • RDBでは処理が難しい大量データの集計 RDBに格納されたレコード数の多いテーブルのJOINなどを実行 =>分析対応の即時性向上
  30. 30. S3に格納された過去ログは主にEMR(Spark)で集計します 2. データ処理の詳細 2-2. アドホック分析(エンジニア利用) aws emr create-cluster --name "sparktest"¥ --release-label emr-4.2.0¥ --applications Name=Spark¥ --use-default-roles¥ --ec2-attributes KeyName=xxxxxxx¥ --instance-type m3.xlarge¥ --instance-count 1 (1)EMR(Sparkクラスタ)を起動 (2)SSHログイン (3)Scalaの場合はspark-shell、Pythonの場合はpysparkを起動 aws emr ssh --cluster-id j-XXXXXXXXXXX ¥ --key-pair-file ~/.ssh/XXXXXXXX.pem ¥ --region ap-northeast-1 spark-shell もしくは pyspark
  31. 31. 実行サンプル(Scala) 2. データ処理の詳細 2-2. アドホック分析(エンジニア利用) > spark-shell // ケースクラス定義 case class Login(user_id: Int, regist_dt: String, level: Int) case class Sales(user_id: Int, item_id: Int, price: Int, regist_dt: String) // データ取り込み(RDD) val loginRDD = sc.textFile("s3://xxxxxxxxx/xxx/xxx/login/201601/*") val salesRDD = sc.textFile("s3://xxxxxxxxx/xxx/xxx/sales/*") // データフレーム作成 val loginDF = loginRDD.map{ data => val tmpData = data.split("¥t") val user_id = tmpData(0).toInt val regist_dt = tmpData(1) val level = tmpData(4).toInt Login(user_id, regist_dt, level) }.toDF val salesDF = salesRDD.map{ data => val tmpData = data.split("¥t") val user_id = tmpData(0).toInt val item_id = tmpData(1).toInt val price = tmpData(2).toInt val regist_dt = tmpData(4) Sales(user_id, item_id, price , regist_dt) }.toDF // テーブル登録 loginDF.registerTempTable("login_table") salesDF.registerTempTable("sales_table") // クエリ発行 val resultQuery = sqlContext.sql(s""" SELECT login.user_id,SUM(sales.price) FROM login_table login JOIN sales_table sales ON (login.user_id = sales.user_id) WHERE login.regist_dt LIKE '2016-01-01%' AND login.level = 100 AND sales.regist_dt LIKE '2015-12%' GROUP BY login.user_id """) // 結果表示 resultQuery.show 読み込むデータのcaseクラスを定義 S3からデータを取り込みRDDを生成 RDDからDataFrameを生成 DataFrameを一時テーブルに登録 sqlメソッド(Spark SQL)でクエリを発行 結果を表示 2016/1/1にログインしたレベル100のユーザが2015/12に購入した金額の集計
  32. 32. アドホック分析(エンジニア利用)の用途 2. データ処理の詳細 2-2. アドホック分析(エンジニア利用) • 過去ログの集計 S3に格納された過去ログを基に、ある特定時点のデータを集計 =>現在と過去の状態比較による効果測定、施策改善 • RDBでは処理が難しい大量データの集計 RDBに格納されたレコード数の多いテーブルのJOINなどを実行 =>分析対応の即時性向上
  33. 33. 処理するRDBのデータはBigQueryに転送してクエリを実行 します EmbulkでBigQueryにデータを転送する場合の詳細は下 記をご参照ください 2. データ処理の詳細 2-2. アドホック分析(エンジニア利用) Qiita:「EmbulkとBigQueryが黄金コンビすぎる話」 http://qiita.com/yuichi_komatsu/items/3aae65c362b2a57f6fbf
  34. 34. Agenda 1. 分析環境の概要 1-1. 概要図 1-2. 用途 2. データ処理の詳細 2-1. BIツール(Cynapse) 2-2. アドホック分析(エンジニア利用) 2-3. アドホック分析(アナリスト利用) 3. まとめと今後の展望
  35. 35. アドホック分析(アナリスト利用)の用途 2. データ処理の詳細 2-3. アドホック分析(アナリスト利用) • ユーザ行動分析 タイトルをまたいでプレイしているユーザの動向を分析 => 改善施策や新規タイトルのアイデア • テキストマイニング ユーザのアクション情報をもとにクラスタリングし、 クラスタごとの単語(N-gram)の頻度を比較 => 新規開発のアイデアや改修の優先順位付け
  36. 36. 使用するデータは下記の手順でBigQueryに格納しています 2. データ処理の詳細 2-3. アドホック分析(アナリスト利用) • テーブルは日付単位で分ける (コンテンツコード_YYYYMMDD) (1)S3からGCSにデータコピー(google-cloud-sdkを利用) ※赤字部分はスクリプトで動的に変更 (2)GCSからBigQueryにデータをロード(google-cloud-sdkを利用) ※赤字部分はスクリプトで動的に変更 gsutil -m cp s3://xxxxxx/<コンテンツID>/<テーブル名>/<YYYYMM>/*<YYYYMMDD>* gs://xxxxxx/<コンテンツID>/< テーブル名>/<YYYYMM>/<YYYYMMDD>/ bq load --source_format=CSV --field_delimiter=‘¥t’ <データセット名>.<コンテンツID>_<YYYYMMDD> gs://xxxxxxx/<コ ンテンツID>/<テーブル名>/<YYYYMM>/<YYYYMMDD>/* /home/xxxx/batch/gcp/fmt/schema/<フォーマットバージョン >/<テーブル名>.json [ { "name": "user_id", "type": "INTEGER" }, ・ ・ ・ { "name": "regist_date", "type": "STRING" } ] [ポイント] JSONでスキーマ定義
  37. 37. 実行サンプル(BigQuery) 2. データ処理の詳細 2-3. アドホック分析(アナリスト利用) SELECT a.user_id, SUM(b.price) FROM TABLE_QUERY(login,'REGEXP_MATCH(table_id, r"^aaa_20160101")') a JOIN EACH TABLE_QUERY(sales,'REGEXP_MATCH(table_id, r"^aaa_201512")') b ON a.user_id = b.user_id GROUP EACH BY a.user_id; • 日付分割されたテーブルを正規表現で必要な単位に連結 ⇒BiqQueryは従量課金のため無駄なデータ走査を発生させない [ポイント] 2016/1/1にログインしたユーザが2015/12に購入した金額の集計
  38. 38. アドホック分析(アナリスト利用)の用途 2. データ処理の詳細 2-3. アドホック分析(アナリスト利用) • ユーザ行動分析 タイトルをまたいでプレイしているユーザの動向を分析 => 改善施策や新規タイトルのアイデア • テキストマイニング ユーザのアクション情報をもとにクラスタリングし、 クラスタごとの単語(N-gram)の頻度を比較 => 新規開発のアイデアや改修の優先順位付け
  39. 39. EC2上に下記のような構成のテキストマイニング環境を構築 しています 2. データ処理の詳細 2-3. アドホック分析(アナリスト利用) • RMeCab + Rstudio => EC2上に構築、アナリストがブラウザから直接利用 • 辞書(Wikipediaのタイトル + オリジナル単語で作成) => オリジナルに作成しているもの(ゲームの専門用語など)は定期的に更新
  40. 40. 単語の出現頻度をRMeCabで集計するサンプル 2. データ処理の詳細 2-3. アドホック分析(アナリスト利用) (1)単語の出現頻度を計算する。 q2_words <- RMeCabFreq("q2.txt") (2)結果表示を「名詞」、「動詞」、「形容詞」だけにする。 q2_words_results <- q2_words[(q2_words$Info1 == "名詞" | q2_words$Info1 == "動詞" | q2_words$Info1 == "形容詞"),] (3)件数が多いものから降順にソートする。 q2_words_sort <- q2_words_results[order(-q2_words_results$Freq),] (4)上位50件を表示 head(q2_words_sort,50)
  41. 41. 連続する単語の出現頻度をRMeCabで集計するサンプル (3単語を集計) 2. データ処理の詳細 2-3. アドホック分析(アナリスト利用) (1)出現頻度を計算する。 q2_3gram <- Ngram("q2.txt", type=1, pos=c("名詞","動詞","形容詞"), N=3) (2)件数が多いものから降順にソートする。 q2_3gram_sort <- q2_3gram[order(-q2_3gram$Freq),] (3)上位50件を表示 head(q2_3gram_sort,50) [アバター-保存-数] 1000 [キャラ-本編-配信] 900 [他-イケメン-シリーズ] 800 [ほしい-衣装-箱] 750 [早い-配信-する] 500 (e.g. 要望アンケート)
  42. 42. Agenda 1. 分析環境の概要 1-1. 概要図 1-2. 用途 2. データ処理の詳細 2-1. BIツール(Cynapse) 2-2. アドホック分析(エンジニア利用) 2-3. アドホック分析(アナリスト利用) 3. まとめと今後の展望
  43. 43. 分析環境の概要 - AWSとGCPで構築 3. まとめと今後の展望 Amazon RDS Amazon EMR Amazon S3 DB WEB/アプリ データ転送用 データフロー 処理コマンド 分析環境各サービス アドホック分析 (エンジニア利用) Amazon EC2 Google BigQueryGoogle Cloud Storage アドホック分析 (アナリスト利用) Amazon EC2 GCP
  44. 44. 分析環境の概要 - 用途① BIツール(Cynapse) 3. まとめと今後の展望 Amazon RDS Amazon EMR Amazon S3 DB WEB/アプリ データ転送用 データフロー 処理コマンド 分析環境各サービス アドホック分析 (エンジニア利用) Amazon EC2 Google BigQueryGoogle Cloud Storage アドホック分析 (アナリスト利用) Amazon EC2 GCP
  45. 45. 分析環境の概要 - 用途② アドホック分析(エンジニア利用) 3. まとめと今後の展望 Amazon RDS Amazon EMR Amazon S3 DB WEB/アプリ データ転送用 データフロー 処理コマンド 分析環境各サービス アドホック分析 (エンジニア利用) Amazon EC2 Google BigQueryGoogle Cloud Storage アドホック分析 (アナリスト利用) Amazon EC2 GCP
  46. 46. 分析環境の概要 - 用途③ アドホック分析(アナリスト利用) 3. まとめと今後の展望 Amazon RDS Amazon EMR Amazon S3 DB WEB/アプリ データ転送用 データフロー 処理コマンド 分析環境各サービス アドホック分析 (エンジニア利用) Amazon EC2 Google BigQueryGoogle Cloud Storage アドホック分析 (アナリスト利用) Amazon EC2 GCP
  47. 47. BIツール(Cynapse)におけるデータ処理 - データは共通フォーマットを利用 3. まとめと今後の展望 Amazon RDS Amazon EMR Amazon S3 DB WEB/アプリ データ転送用 データフロー 処理コマンド 分析環境各サービス アドホック分析 (エンジニア利用) Amazon EC2 Google BigQueryGoogle Cloud Storage アドホック分析 (アナリスト利用) Amazon EC2 GCP 共通フォーマット
  48. 48. BIツール(Cynapse)におけるデータ処理 - データはS3に蓄積、EMR(Spark)で処理し、結果をRDSに格納 3. まとめと今後の展望 Amazon RDS Amazon EMR Amazon S3 DB WEB/アプリ データ転送用 データフロー 処理コマンド 分析環境各サービス アドホック分析 (エンジニア利用) Amazon EC2 Google BigQueryGoogle Cloud Storage アドホック分析 (アナリスト利用) Amazon EC2 GCP 蓄積 処理 格納
  49. 49. アドホック分析(エンジニア利用)におけるデータ処理 - S3の過去データはEMR(Spark)で処理 3. まとめと今後の展望 Amazon RDS Amazon EMR Amazon S3 DB WEB/アプリ データ転送用 データフロー 処理コマンド 分析環境各サービス アドホック分析 (エンジニア利用) Amazon EC2 Google BigQueryGoogle Cloud Storage アドホック分析 (アナリスト利用) Amazon EC2 GCP 過去データ集計
  50. 50. アドホック分析(エンジニア利用)におけるデータ処理 - RDBの大量データはEmbulkでBigQueryに転送して処理 3. まとめと今後の展望 Amazon RDS Amazon EMR Amazon S3 DB WEB/アプリ データ転送用 データフロー 処理コマンド 分析環境各サービス アドホック分析 (エンジニア利用) Amazon EC2 Google BigQueryGoogle Cloud Storage アドホック分析 (アナリスト利用) Amazon EC2 GCP RDBの大量データ処理
  51. 51. アドホック分析(アナリスト利用)におけるデータ処理 - S3のデータをGCSに転送 3. まとめと今後の展望 Amazon RDS Amazon EMR Amazon S3 DB WEB/アプリ データ転送用 データフロー 処理コマンド 分析環境各サービス アドホック分析 (エンジニア利用) Amazon EC2 Google BigQueryGoogle Cloud Storage アドホック分析 (アナリスト利用) Amazon EC2 GCP データコピー gsutilコマンド
  52. 52. アドホック分析(アナリスト利用)におけるデータ処理 - GCSのデータをBigQueryにロード 3. まとめと今後の展望 Amazon RDS Amazon EMR Amazon S3 DB WEB/アプリ データ転送用 データフロー 処理コマンド 分析環境各サービス アドホック分析 (エンジニア利用) Amazon EC2 Google BigQueryGoogle Cloud Storage アドホック分析 (アナリスト利用) Amazon EC2 GCPデータロード bqコマンド テーブルは 日付単位で作成
  53. 53. アドホック分析(アナリスト利用)におけるデータ処理 - ユーザ行動分析はBigQueryで実行 3. まとめと今後の展望 Amazon RDS Amazon EMR Amazon S3 DB WEB/アプリ データ転送用 データフロー 処理コマンド 分析環境各サービス アドホック分析 (エンジニア利用) Amazon EC2 Google BigQueryGoogle Cloud Storage アドホック分析 (アナリスト利用) Amazon EC2 GCP ユーザ行動分析
  54. 54. アドホック分析(アナリスト利用)におけるデータ処理 - テキストマイニングサーバはEC2上に構築 3. まとめと今後の展望 Amazon RDS Amazon EMR Amazon S3 DB WEB/アプリ データ転送用 データフロー 処理コマンド 分析環境各サービス アドホック分析 (エンジニア利用) Amazon EC2 Google BigQueryGoogle Cloud Storage アドホック分析 (アナリスト利用) Amazon EC2 GCP テキストマイニング RMeCab+RStudio 辞書は Wikipediaのタイトル +オリジナル単語
  55. 55. 今後は下記の実施を計画しています 3. まとめと今後の展望 • Spark進化への追随 • リアルタイム処理の導入 • 機械学習の積極的な活用
  56. 56. 最後に
  57. 57. http://www.cybird.co.jp/recruit/ エントリーしてね! エンジニア募集中! ゲームを作りたい人 大量のアクセスを捌きたい人 などなど、複数の職種で
  58. 58. ご清聴ありがとうございました

×