© LINE Data Labs
Pyparkを分析用途に使っている話
LINE株式会社 DataLabs
丸尾大貴
© LINE Data Labs
話すこと/話さないこと
話さないこと
🙅PySpark/Sparkの中身のはなし(正直全くわからない)
🙅高度な分析
話すこと
🙆PySparkが日常の統計分析業務をカバーできること
© LINE Data Labs
分析とその活用のプロセス
現状把握 仮説の立案 データ分析
施策の
策定・実行
効果測定
© LINE Data Labs
例題:架空のサブスクリプションサービスの分析
・2週間単位で契約するものとする
・プランは一つしかなくて定額制=ARPPUは不変とする
・以下のテーブルが登場
© LINE Data Labs
現状把握:KPIツリーの作成
Subscriber
# of New user
Conversion
rate
Subscriber× × Retention rate
Revenue
ARPPU×
© LINE Data Labs
現状把握:可視化の例
ある日のsubscriberの数を計算する簡単なクエリ
SQLで工夫できる?かもしれないが、
普通にやるならデイリーバッチ回したい
© LINE Data Labs
現状把握:可視化の例
© LINE Data Labs
仮説の立案:KPI向上のための仮説立案
hypo Zhypo Yhypo A ……
Subscriber
# of New user
Conversion
rate
# of Continue
user× ×
Revenue
ARPPU
Retention rate
© LINE Data Labs
データ分析:データマートの作成
user_no is_ret feature1 … feature200
200 1 200 … A
664 0 40 … C
© LINE Data Labs
データ分析:データマートの作成
© LINE Data Labs
データ分析:データマートの作成
・pysparkで同様の判定をすることもできる
ただし、lead/when/isnull/otherwiseの組み合わせで、結構しんどい
・しかも、joinと順番を入れ替えるとバグる(あたりまえだがハマる)
・SQLのほうが総合的には楽な場合もある(コードは短い?)
© LINE Data Labs
データ分析:データマートの作成
・さっきと同じ集計もできる
© LINE Data Labs
データ分析:データマートの作成
・for文で回せそうな処理がある場合はpysparkが便利
SQLベタ書きするとメンテ性がすこぶる悪化する場面を避けられる
© LINE Data Labs
データ分析:モデルの訓練
user_no is_ret feature1 … feature200
200 1 200 … A
664 0 40 … C
© LINE Data Labs
データ分析:モデルの訓練
・scikitともうほとんど変わらないレベルでお手軽にかける
ただ、特定の形式しか受け付けないなどでけっこうハマる
ハマったらまず前処理のAPIを見ることを推奨(ml.feature)
© LINE Data Labs
データ分析:モデルのcross validation
・cv用のモジュールも充実。CrossValidatorに3つ渡すだけ、シンプル。
© LINE Data Labs
データ分析:重要な特徴量の検証
・よくある重要度plotもお茶の子さいさい
sum(action)
© LINE Data Labs
効果測定:A/Bテストの集計
© LINE Data Labs
効果測定:比率の差の検定
・Pandasで受けてstatsmodelsにわたして検定もできる
© LINE Data Labs
Tips1:SQLで書けるのでレビューが楽
python派
R派
tableau派
・SQLが実質的にチームの共通言語となっている
🙅pandas
🙆dplyr
👩SQL
🙆pandas
🙅dplyr
👩SQL
🙅pandas
🙅dplyr
🙆SQL
© LINE Data Labs
Tips2:df.cache()を使ってgroupbyしまくろう
・分析用のテーブルを作ってからキャッシュする
・その後様々な切り口でorder_all.groupby()することができる
・探索的分析の速度・確度が上がる
© LINE Data Labs
Tips3:RDD/udfはやめよう
ド
ラ
イ
バ
ー
ド
ラ
イ
バ
ー
DataFrame API RDD/Python UDF
エグゼキューター
・UDFを書いちゃうとjavaとpythonインタプリタの間でデータのやり取り
が起きて性能劣化。改善の取り組みもあるが、改善されるまではオススメ
しない。(世の中のUDF書きまくりのspark本をそのままpythonにしては🙅)
© LINE Data Labs
Tips4:cross validation周辺が賢くなるぞ
・現状Cross Validatorが賢くない
パラメータとデータセットに対して直列にtrainしていく
(つまりパラメータの組み合わせ数×CVの分割数だけ直列に時間がかかる)
Model1-param1
Model3-param1
Model2-param1
Model4-param1
Model1-param2
Model3-param2
Model2-param2
Model4-param2
Train1
Train2
Train3
Train4
© LINE Data Labs
Tips4:cross validation周辺が賢くなるぞ
・2.2.0
・2.3.0では引数一つでパラメータに対してはパラレルに!(最高 🙏)
© LINE Data Labs
他のツールとのpros/cons
pyspark R+sparklyr Hive/Tez/presto
集計 最高 最高という人もいる 最高
© LINE Data Labs
他のツールとのpros/cons
pyspark R+sparklyr Hive/Tez/presto
集計 最高 最高という人もいる 最高
特徴量/
データ
マート
最高に自由度高い 最高という人もいる 大量に特徴量つくりたい
ときは不向き
© LINE Data Labs
他のツールとのpros/cons
pyspark R+sparklyr Hive/Tez/presto
集計 最高 最高という人もいる 最高
特徴量/
データ
マート
最高に自由度高い 最高という人もいる 大量に特徴量つくりたい
ときは不向き
分析用の
機械学習
最高にお手軽 sparklyR使ったことない
のでわからない
🙅バッドノウハウ
※決してSQLで協調フィルタなどを実装することを批判するものではあり
ません
© LINE Data Labs
おわりに
 PySpark -> なんでもできて最高
© LINE Data Labs
おわりに
 PySpark -> なんでもできて最高
PySparkで大規模データをゴリゴリ分析して
事業に貢献したいあなたはLINEへ!!

PySpark を分析用途に使っている話

  • 1.
    © LINE DataLabs Pyparkを分析用途に使っている話 LINE株式会社 DataLabs 丸尾大貴
  • 2.
    © LINE DataLabs 話すこと/話さないこと 話さないこと 🙅PySpark/Sparkの中身のはなし(正直全くわからない) 🙅高度な分析 話すこと 🙆PySparkが日常の統計分析業務をカバーできること
  • 3.
    © LINE DataLabs 分析とその活用のプロセス 現状把握 仮説の立案 データ分析 施策の 策定・実行 効果測定
  • 4.
    © LINE DataLabs 例題:架空のサブスクリプションサービスの分析 ・2週間単位で契約するものとする ・プランは一つしかなくて定額制=ARPPUは不変とする ・以下のテーブルが登場
  • 5.
    © LINE DataLabs 現状把握:KPIツリーの作成 Subscriber # of New user Conversion rate Subscriber× × Retention rate Revenue ARPPU×
  • 6.
    © LINE DataLabs 現状把握:可視化の例 ある日のsubscriberの数を計算する簡単なクエリ SQLで工夫できる?かもしれないが、 普通にやるならデイリーバッチ回したい
  • 7.
    © LINE DataLabs 現状把握:可視化の例
  • 8.
    © LINE DataLabs 仮説の立案:KPI向上のための仮説立案 hypo Zhypo Yhypo A …… Subscriber # of New user Conversion rate # of Continue user× × Revenue ARPPU Retention rate
  • 9.
    © LINE DataLabs データ分析:データマートの作成 user_no is_ret feature1 … feature200 200 1 200 … A 664 0 40 … C
  • 10.
    © LINE DataLabs データ分析:データマートの作成
  • 11.
    © LINE DataLabs データ分析:データマートの作成 ・pysparkで同様の判定をすることもできる ただし、lead/when/isnull/otherwiseの組み合わせで、結構しんどい ・しかも、joinと順番を入れ替えるとバグる(あたりまえだがハマる) ・SQLのほうが総合的には楽な場合もある(コードは短い?)
  • 12.
    © LINE DataLabs データ分析:データマートの作成 ・さっきと同じ集計もできる
  • 13.
    © LINE DataLabs データ分析:データマートの作成 ・for文で回せそうな処理がある場合はpysparkが便利 SQLベタ書きするとメンテ性がすこぶる悪化する場面を避けられる
  • 14.
    © LINE DataLabs データ分析:モデルの訓練 user_no is_ret feature1 … feature200 200 1 200 … A 664 0 40 … C
  • 15.
    © LINE DataLabs データ分析:モデルの訓練 ・scikitともうほとんど変わらないレベルでお手軽にかける ただ、特定の形式しか受け付けないなどでけっこうハマる ハマったらまず前処理のAPIを見ることを推奨(ml.feature)
  • 16.
    © LINE DataLabs データ分析:モデルのcross validation ・cv用のモジュールも充実。CrossValidatorに3つ渡すだけ、シンプル。
  • 17.
    © LINE DataLabs データ分析:重要な特徴量の検証 ・よくある重要度plotもお茶の子さいさい sum(action)
  • 18.
    © LINE DataLabs 効果測定:A/Bテストの集計
  • 19.
    © LINE DataLabs 効果測定:比率の差の検定 ・Pandasで受けてstatsmodelsにわたして検定もできる
  • 20.
    © LINE DataLabs Tips1:SQLで書けるのでレビューが楽 python派 R派 tableau派 ・SQLが実質的にチームの共通言語となっている 🙅pandas 🙆dplyr 👩SQL 🙆pandas 🙅dplyr 👩SQL 🙅pandas 🙅dplyr 🙆SQL
  • 21.
    © LINE DataLabs Tips2:df.cache()を使ってgroupbyしまくろう ・分析用のテーブルを作ってからキャッシュする ・その後様々な切り口でorder_all.groupby()することができる ・探索的分析の速度・確度が上がる
  • 22.
    © LINE DataLabs Tips3:RDD/udfはやめよう ド ラ イ バ ー ド ラ イ バ ー DataFrame API RDD/Python UDF エグゼキューター ・UDFを書いちゃうとjavaとpythonインタプリタの間でデータのやり取り が起きて性能劣化。改善の取り組みもあるが、改善されるまではオススメ しない。(世の中のUDF書きまくりのspark本をそのままpythonにしては🙅)
  • 23.
    © LINE DataLabs Tips4:cross validation周辺が賢くなるぞ ・現状Cross Validatorが賢くない パラメータとデータセットに対して直列にtrainしていく (つまりパラメータの組み合わせ数×CVの分割数だけ直列に時間がかかる) Model1-param1 Model3-param1 Model2-param1 Model4-param1 Model1-param2 Model3-param2 Model2-param2 Model4-param2 Train1 Train2 Train3 Train4
  • 24.
    © LINE DataLabs Tips4:cross validation周辺が賢くなるぞ ・2.2.0 ・2.3.0では引数一つでパラメータに対してはパラレルに!(最高 🙏)
  • 25.
    © LINE DataLabs 他のツールとのpros/cons pyspark R+sparklyr Hive/Tez/presto 集計 最高 最高という人もいる 最高
  • 26.
    © LINE DataLabs 他のツールとのpros/cons pyspark R+sparklyr Hive/Tez/presto 集計 最高 最高という人もいる 最高 特徴量/ データ マート 最高に自由度高い 最高という人もいる 大量に特徴量つくりたい ときは不向き
  • 27.
    © LINE DataLabs 他のツールとのpros/cons pyspark R+sparklyr Hive/Tez/presto 集計 最高 最高という人もいる 最高 特徴量/ データ マート 最高に自由度高い 最高という人もいる 大量に特徴量つくりたい ときは不向き 分析用の 機械学習 最高にお手軽 sparklyR使ったことない のでわからない 🙅バッドノウハウ ※決してSQLで協調フィルタなどを実装することを批判するものではあり ません
  • 28.
    © LINE DataLabs おわりに  PySpark -> なんでもできて最高
  • 29.
    © LINE DataLabs おわりに  PySpark -> なんでもできて最高 PySparkで大規模データをゴリゴリ分析して 事業に貢献したいあなたはLINEへ!!