45
DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 島田雅年 Scala関西Summit 2018

DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

  • Upload
    others

  • View
    6

  • Download
    1

Embed Size (px)

Citation preview

Page 1: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

DatabricksとSparkではじめる [データ分析/機械学習]

実践入門島田雅年

Scala関西Summit 2018

Page 2: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

自己紹介

• 島田雅年 @smdmts • データウェアハウスアーキテクト(Scala|Python|Golang|Java|DDD)

• 株式会社エブリー所属 • DELISH KITCHEN データ/分析系全般担当 - 主に分析基盤、配信面最適化などを担当

Page 3: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

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の紹介(かんたんに)

Page 4: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

アジェンダ(概要)

DELISH KITCHENでは、データ分析の基幹技術の一つとして SparkのホスティングサービスであるDatabricksを利用しています

本日はサンプルコードを交えて、Databricksの概要と データ分析/機械学習で利用しているSparkのコードについて 解説させて頂きます

Page 5: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

アジェンダ

• Databricksの概要                   - コンセプト/インフラ構成例/Notebook実行デモ • Databricks(Spark)のコード実装例                - 簡単なサンプルコード/機械学習(協調フィルタリング)                           - 付録:データ分析(マジックナンバー分析)

Page 6: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

Databricksの概要 - コンセプトイメージ - インフラ構成例 - Notebook実行デモ

Page 7: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

Databricksのコンセプトイメージ

Page 8: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

Databricksのコンセプトイメージ

・Sparkを実行基盤としたデータ分析プラットフォーム - Unified Analytics Platformを目指していて作られている

・(AWS/Azure)のユーザアカウントにVPC作成など所定のインストールで導入 - 利用者の(AWS/Azure)アカウントでクラスタが起動される

・他の機械学習基盤とのつなぎ込みが可能 - TensorFlow/XGBoost/scikit-learn等 ・データエンジニア/サイエンティストは  Notebookでスクリプトを書いて開発する - Scala/Python/R/Shell/SQLが利用可 - ETL処理もNotebookで実装可

Page 9: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

インフラ構成例(DELISH KITCHENの場合)

Databricks VPC

アプリケーション VPC

スケーラブルVPN or Internet

VPC ピアリング接続

S3

Elasti Cache

RDS Redshift

Databricks Cloud

(管理画面)起動設定 Notebook

Page 10: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

Databricksによる継続的デリバリ・Databricks CloudのNotebook上でデータ分析コードの開発を行う ・CLIによるデプロイやクラスタ作成等が出来てCI/CDでも利用可能 ・従来のspark-submitで、jarからmainクラスを起動する方式も利用可能

Pull

Push and Run

Pull

Push Deploy

or

Merge

本番環境

開発環境 (開発者のワークスペース)

本番環境

Page 11: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

Databricks管理画面(トップ)

・開発者(データエンジニア/データサイエンティスト)は  DatabricksCloudのURLを開き、管理画面に接続して開発を始める

Page 12: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

Databricks管理画面(クラスタ設定)

・Sparkクラスタのインスタンスタイプ設定画面  オートスケール/起動クラスタ(CPU/GPU)/Sparkバージョン等が指定可能

- スポット入札 - インスタンスタイプ - 台数/割合 - オートスケール設定 - オートターミネート設定

Page 13: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

Databricks管理画面(Notebook)

・開発者毎に割り当てられたWorkspace上の、Notebookで開発をすすめる  Scala/Python/R/SQLが選択可能(どれを選んでも相互呼び出しできる)

Page 14: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

・Notebook上に複数のコマンドを実装し、Step by Stepで処理を実行する - インタラクティブ(対話的)にコマンドが逐次実行される ・コマンド間のデータ連携は、ScalaのインスタンスやSparkSQLで行う ・SQL/DSLなどで途中断面のデータを確認しながら開発をすすめる

Notebookによる開発のすすめ方

TD Spark

Page 15: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

Notebook実行デモ

Page 16: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

Databricks(Spark)のコード実装例 - 簡単なサンプルコード - 機械学習 (協調フィルタリング) - 付録:データ分析 (マジックナンバー分析)

Page 17: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

https://github.com/smdmts/dbc-scala_ks_2018

サンプルコードはOSSとして公開しています こちらをご参照ください

Page 18: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

簡単なサンプルコード

Page 19: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

データ定義1

VIEW作成1

SQL実行1

データ定義2

VIEW作成2

Page 20: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

SQL実行

Scalaコード

Page 21: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

結果確認

Pythonコード

Page 22: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

機械学習 - 協調フィルタリング

Page 23: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

協調フィルタリングとは誰かが見たレシピを基に、対象者におすすめするレシピを算出する古典的機械学習 似たようなレシピを見たユーザ同士で、お互いに未視聴のレシピを交換する (ドメイン知識が無くても以下のように算出可能)

🍎 🍇 🍊

1:👨

2:👩

3:👧 🍇

👨 🍇

👧 が視聴済みのレシピ

🍊

👨/👩 に提案する未視聴のレシピ

👧

👩

🍇 🍊🍎

Page 24: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

データ定義(通常はDBやS3など)

Page 25: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

View作成

Indexer作成計算量削減のためInt化する定義

機械学習 計算式定義

Page 26: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

計算用 パイプライン作成

View作成

データ可視化

Page 27: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

Indexer結果定義

Int -> user_idの紐付け用VIEW

Indexer結果定義レシピ名 -> user_idの 紐付け用VIEW

Page 28: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

user_id -> index済みuser_id

レシピ名 -> index済みレシピ名

Indexer結果確認

Indexer結果確認

Page 29: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

データ可視化

モデル計算

レコメンド算出

View作成

Page 30: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

結果取得VIEW

Page 31: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

結果確認

Page 32: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

協調フィルタリング結果

🍇

👨 🍇

👧 が視聴済みのレシピ🍎 🍇 🍊

🍊

👨/👩 に提案する未視聴のレシピ

1:👨

2:👩

3:👧

👧

👩

オレンジの方が反応が強い

🍇 🍊🍎

0.970.55

0.56

Page 33: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

質疑・応答

Page 34: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

付録

Page 35: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

データ分析 - マジックナンバー分析

Page 36: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

マジックナンバー分析とは例えば、このサムネイル部分をクリックした事のあるユーザの継続率は、どのくらいだろうか? 「お気に入りした/動画視聴した/検索した」等、別のアクションと比べ継続率は高いだろうか? 継続率が高いのはどんなユーザだろうか?環境や属性は?

マジックナンバー分析とは、様々な要素を組み合わせた条件(集団)の中から 継続率の高いユーザアクションの傾向を発見していく分析手法のこと。 良いアクションを見つけたら、その導線を強化していけば良い。 「対象アクション・ユーザ属性・継続日数」を組み合わせ、各集団の継続率を導き比較する。

1. 各集団のアクション毎の継続率を算出する 2. 継続率同士を比較し分析する

処理フロー

Page 37: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

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:👧

例:サムネイルを見た人

Page 38: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

データ定義(通常はDBやS3など)

Page 39: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

View作成

データ可視化

Page 40: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

継続率計算

Page 41: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

継続率計算

結果可視化

Page 42: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

結果可視化

Page 43: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

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.各集団のアクション毎の継続率算出結果

Page 44: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

2. 継続率同士を比較し分析する

•サムネイルを見た集団(3日): 66% •お気に入りをした集団(3日): 80%

算出した結果が上記のようになった場合 お気に入りへの導線を強化すれば良いと分かる

Page 45: DatabricksとSparkではじめる [データ分析/機械学習] 実践入門 · 2016/12 アプリリリース ダウンロード:1200万 レシピ数:1万8000件以上 月間動画再生数:6億1000万回以上

ご清聴ありがとうございました