Upload
others
View
6
Download
1
Embed Size (px)
Citation preview
自己紹介
• 島田雅年 @smdmts • データウェアハウスアーキテクト(Scala|Python|Golang|Java|DDD)
• 株式会社エブリー所属 • DELISH KITCHEN データ/分析系全般担当 - 主に分析基盤、配信面最適化などを担当
2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上 App Store BEST OF 2017 Google Play ベスト オブ 2017 2017年 国内アプリダウンロード第3位 (1位LINE、2位Yahoo!JAPAN ※非ゲーム AppAnnie調べ)
・毎日新着レシピ動画が配信される ・料理レシピ動画(調理/献立/手順) ・広告主タイアップ動画
[PR] DELISH KITCHENの紹介(かんたんに)
アジェンダ(概要)
DELISH KITCHENでは、データ分析の基幹技術の一つとして SparkのホスティングサービスであるDatabricksを利用しています
本日はサンプルコードを交えて、Databricksの概要と データ分析/機械学習で利用しているSparkのコードについて 解説させて頂きます
アジェンダ
• Databricksの概要 - コンセプト/インフラ構成例/Notebook実行デモ • Databricks(Spark)のコード実装例 - 簡単なサンプルコード/機械学習(協調フィルタリング) - 付録:データ分析(マジックナンバー分析)
Databricksの概要 - コンセプトイメージ - インフラ構成例 - Notebook実行デモ
Databricksのコンセプトイメージ
Databricksのコンセプトイメージ
・Sparkを実行基盤としたデータ分析プラットフォーム - Unified Analytics Platformを目指していて作られている
・(AWS/Azure)のユーザアカウントにVPC作成など所定のインストールで導入 - 利用者の(AWS/Azure)アカウントでクラスタが起動される
・他の機械学習基盤とのつなぎ込みが可能 - TensorFlow/XGBoost/scikit-learn等 ・データエンジニア/サイエンティストは Notebookでスクリプトを書いて開発する - Scala/Python/R/Shell/SQLが利用可 - ETL処理もNotebookで実装可
インフラ構成例(DELISH KITCHENの場合)
Databricks VPC
アプリケーション VPC
スケーラブルVPN or Internet
VPC ピアリング接続
S3
Elasti Cache
RDS Redshift
Databricks Cloud
(管理画面)起動設定 Notebook
Databricksによる継続的デリバリ・Databricks CloudのNotebook上でデータ分析コードの開発を行う ・CLIによるデプロイやクラスタ作成等が出来てCI/CDでも利用可能 ・従来のspark-submitで、jarからmainクラスを起動する方式も利用可能
Pull
Push and Run
Pull
Push Deploy
or
Merge
本番環境
開発環境 (開発者のワークスペース)
本番環境
Databricks管理画面(トップ)
・開発者(データエンジニア/データサイエンティスト)は DatabricksCloudのURLを開き、管理画面に接続して開発を始める
Databricks管理画面(クラスタ設定)
・Sparkクラスタのインスタンスタイプ設定画面 オートスケール/起動クラスタ(CPU/GPU)/Sparkバージョン等が指定可能
- スポット入札 - インスタンスタイプ - 台数/割合 - オートスケール設定 - オートターミネート設定
Databricks管理画面(Notebook)
・開発者毎に割り当てられたWorkspace上の、Notebookで開発をすすめる Scala/Python/R/SQLが選択可能(どれを選んでも相互呼び出しできる)
・Notebook上に複数のコマンドを実装し、Step by Stepで処理を実行する - インタラクティブ(対話的)にコマンドが逐次実行される ・コマンド間のデータ連携は、ScalaのインスタンスやSparkSQLで行う ・SQL/DSLなどで途中断面のデータを確認しながら開発をすすめる
Notebookによる開発のすすめ方
TD Spark
Notebook実行デモ
Databricks(Spark)のコード実装例 - 簡単なサンプルコード - 機械学習 (協調フィルタリング) - 付録:データ分析 (マジックナンバー分析)
https://github.com/smdmts/dbc-scala_ks_2018
サンプルコードはOSSとして公開しています こちらをご参照ください
簡単なサンプルコード
データ定義1
VIEW作成1
SQL実行1
データ定義2
VIEW作成2
SQL実行
Scalaコード
結果確認
Pythonコード
機械学習 - 協調フィルタリング
協調フィルタリングとは誰かが見たレシピを基に、対象者におすすめするレシピを算出する古典的機械学習 似たようなレシピを見たユーザ同士で、お互いに未視聴のレシピを交換する (ドメイン知識が無くても以下のように算出可能)
🍎 🍇 🍊
1:👨
2:👩
3:👧 🍇
👨 🍇
👧 が視聴済みのレシピ
🍊
👨/👩 に提案する未視聴のレシピ
👧
👩
🍇 🍊🍎
データ定義(通常はDBやS3など)
View作成
Indexer作成計算量削減のためInt化する定義
機械学習 計算式定義
計算用 パイプライン作成
View作成
データ可視化
Indexer結果定義
Int -> user_idの紐付け用VIEW
Indexer結果定義レシピ名 -> user_idの 紐付け用VIEW
user_id -> index済みuser_id
レシピ名 -> index済みレシピ名
Indexer結果確認
Indexer結果確認
データ可視化
モデル計算
レコメンド算出
View作成
結果取得VIEW
結果確認
協調フィルタリング結果
🍇
👨 🍇
👧 が視聴済みのレシピ🍎 🍇 🍊
🍊
👨/👩 に提案する未視聴のレシピ
1:👨
2:👩
3:👧
👧
👩
オレンジの方が反応が強い
🍇 🍊🍎
0.970.55
0.56
質疑・応答
付録
データ分析 - マジックナンバー分析
マジックナンバー分析とは例えば、このサムネイル部分をクリックした事のあるユーザの継続率は、どのくらいだろうか? 「お気に入りした/動画視聴した/検索した」等、別のアクションと比べ継続率は高いだろうか? 継続率が高いのはどんなユーザだろうか?環境や属性は?
マジックナンバー分析とは、様々な要素を組み合わせた条件(集団)の中から 継続率の高いユーザアクションの傾向を発見していく分析手法のこと。 良いアクションを見つけたら、その導線を強化していけば良い。 「対象アクション・ユーザ属性・継続日数」を組み合わせ、各集団の継続率を導き比較する。
1. 各集団のアクション毎の継続率を算出する 2. 継続率同士を比較し分析する
処理フロー
1.各集団のアクション毎の継続率を算出する
11/10 11/11 11/12
11/10(初日)
11/11(2日目)
11/12(3日目)
👨 👩 👧
👧
👨 👧
100 %
33.3 %
66.6 %
3/3
1/3
2/3
算出方法
1:👨
2:👩
3:👧
例:サムネイルを見た人
データ定義(通常はDBやS3など)
View作成
データ可視化
継続率計算
継続率計算
結果可視化
結果可視化
11/10 11/11 11/12
11/10(初日)
11/11(2日目)
11/12(3日目)
👨 👩 👧
👧
👨 👧
100 %
33.3 %
66.6 %
3/3
1/3
2/3
机上計算の結果と一致
1:👨
2:👩
3:👧
1.各集団のアクション毎の継続率算出結果
2. 継続率同士を比較し分析する
•サムネイルを見た集団(3日): 66% •お気に入りをした集団(3日): 80%
算出した結果が上記のようになった場合 お気に入りへの導線を強化すれば良いと分かる
ご清聴ありがとうございました