15
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

「夏真っ盛り!Spark + Python + Data Science祭り」行ってきた。

Posted at

例によって途中参加だったので1つ目の発表は途中から&macbook忘れてiPhoneでメモ取ったので日本語不自由な感じになっています。

Ibis: すごいpandas 大規模データ分析もらっくらく

Cloudera社 有賀康顕氏 ( @chezou )

Jupyter notebookでデモ

教師データを作ってからscikit-learnが出てくる

PySparkと比べて

  • 設定が簡単
  • 速い
    • 参考値としては基盤にしているCloudera ImpalaがPySparkよりも7倍速い

spark-sklearn

pip install ibis-framework
でインストールできる

Impala使いたければClouderaのdirectorを使うと良いとのこと。

Amebaにおけるレコメンデーションシステムの紹介

サイバーエージェント社 内藤遥氏

レコメンデーションシステム概要

Amebaで使っているレコメンデーションシステムは以下の3種

  • A.J.A. recommend
  • phoenix ⇦今日はこれ
    強調フィルタリング
    Sparkを利用
  • バトルrecommend

レコメンデーションシステムの利用

  • 関連ハッシュタグ
  • グルっぽ
  • 読書の時間

概要

  1. アクティビティログをhadoopへ
  2. 推薦結果をhbaseへ
    • キーにソルトとしてハッシュの頭1文字(分散のため
  3. 推薦結果のimp/clkなどをフィードバック
    • バンデットアルゴリズムでCTRを元にリランキング

Item to Item collaborative filtering

ユーザーベースの協調フィルタリング

距離の近いユーザの評価を元にする

アイテムベース

アイテム間の距離を元にユーザの評価を元にする
アイテムの評価が少なくても精度が出せる

コサイン類似度

共起数(重複ユーザ数)を要素の平方根を積算した値で割る

ケースごとの工夫

シンプルにする

ブロードキャスト変数を使って各ワーカーに割り振る。
こうすると複雑なjoinが不要になる

推薦結果を鮮度の新しいものだけにしたい

事前にアイテムセット(フィルター)を作っておいて結果をフィルターする

Sparkを活用したレコメンドエンジンのパフォーマンスチューニング&自動化

DMM.comラボ社 加嵜長門氏

作ったあとの運用の話

Spark活用システムの概要

2015年2月からSpark活用。

エンジニア3人で13件から168件
自動化してたから対応できた

リソースは1.5倍くらい
230CPUs / 580GB から 360CPUs / 900GB

時間は3hから4hへ

導入自動化

サービスが多いので新サービスでの利用開始を容易にしている

サービス追加したい時

  1. レシピを書く
  2. レシピに従ってテストを流す jenkins
    • テスト環境で動作確認
  3. ステージングで性能
  4. 本番にリリース

サービスによってユーザ数とアイテム数の比率が大きく違うのでチューニングも個別に必要

スケール感はユーザ数100万人とか商品数400万点とか

全サービス横断のアイテムマトリクスを用意している
→サービス間のレコメンデーションも可能になる

ランキング

アルゴリズムは2種使い分けている

  • ユーザーTOアイテム
  • アイテムTOアイテム
  1. Hiveでデータ整形
  2. Sparkではレコメンド計算だけ
    • シンプルさを維持するため
  3. SqoopでDBに出力

レシピはhive,spark,sqoopのパラメタ設定をJSONで定義している

精度チューニングは実際に投入してA/Bテストする(学術的な評価式もあるが、試さないとわからなところもある)
パフォーマンスはわかりやすく問題になるので事前にチューニング

  1. ボトルネックを探して
  2. データの偏りを解消する

20:80の法則によりデータの分割に失敗する時がある(分割しても偏っているケースが多い)
うまく分割できれば3時間→3分に短縮とか


(以下編集中)

LT枠

spark初心者がレコメンドでハマった

15分ごとにsubmitするとディスク枯渇
jarがコピーされる
クラスタを作り直しながらsubmitする

BigQueryからのロード時にパーティション数が少ない
executorが使い切れない
リパーティション大事

レコメンドされない
ユーザ多すぎて直積とれない
ユーザ集合にまとめて処理した

Sparkを使ったレコメンドエンジンのパフォーマンスチューニング

dag visualizationみよう

分散してなかったら分散させる
大量データでシャッフルさせるとダメ

複数回使うrddはキャッシュする

cpuボトルネックの時はシリアライズしない選択肢

KryoSerializer2倍速くなった

15
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?