Submit Search
Upload
AI入門「第2回:Scala/Spark/Mahoutでレコメンドエンジンを作る」
•
6 likes
•
5,069 views
fukuoka.ex
Follow
AWS EMRをベースに、Scala→Sparkによるデータ集計と、Mahoutの機械学習を組み合わせて、レコメンドエンジンを構成し、マーケティングシステムとして活用します
Read less
Read more
Data & Analytics
Report
Share
Report
Share
1 of 38
Recommended
BigTech企業の原動力
BigTech企業の原動力
Hiroshi Takahashi
自動運転車とMaaS
自動運転車とMaaS
Hiroshi Takahashi
MAごころを、君に #0 Air ( ≒ No Plan )
MAごころを、君に #0 Air ( ≒ No Plan )
Webpla LLC.
Scala製機械学習サーバ「Apache PredictionIO」
Scala製機械学習サーバ「Apache PredictionIO」
takezoe
Feature Store in DRIVE CHART
Feature Store in DRIVE CHART
emakryo
20160301 5日でできるクラウドで始めるデータ利活用 新日鉄住金ソリューションズ株式会社
20160301 5日でできるクラウドで始めるデータ利活用 新日鉄住金ソリューションズ株式会社
オラクルエンジニア通信
ソーシャルスマートの7つの秘訣 - シリコンバレーの最新スキル (in Japanese)
ソーシャルスマートの7つの秘訣 - シリコンバレーの最新スキル (in Japanese)
Toshihiko Yamakami
これからはじめる Power Platform
これからはじめる Power Platform
Rie Okuda
Recommended
BigTech企業の原動力
BigTech企業の原動力
Hiroshi Takahashi
自動運転車とMaaS
自動運転車とMaaS
Hiroshi Takahashi
MAごころを、君に #0 Air ( ≒ No Plan )
MAごころを、君に #0 Air ( ≒ No Plan )
Webpla LLC.
Scala製機械学習サーバ「Apache PredictionIO」
Scala製機械学習サーバ「Apache PredictionIO」
takezoe
Feature Store in DRIVE CHART
Feature Store in DRIVE CHART
emakryo
20160301 5日でできるクラウドで始めるデータ利活用 新日鉄住金ソリューションズ株式会社
20160301 5日でできるクラウドで始めるデータ利活用 新日鉄住金ソリューションズ株式会社
オラクルエンジニア通信
ソーシャルスマートの7つの秘訣 - シリコンバレーの最新スキル (in Japanese)
ソーシャルスマートの7つの秘訣 - シリコンバレーの最新スキル (in Japanese)
Toshihiko Yamakami
これからはじめる Power Platform
これからはじめる Power Platform
Rie Okuda
企業越境ビジネスリエンジニアリングの3次元モデルによる成功事例
企業越境ビジネスリエンジニアリングの3次元モデルによる成功事例
Toshihiko Yamakami
xOps: エンジニアがスタートアップの成長の原動力となる日
xOps: エンジニアがスタートアップの成長の原動力となる日
Takaaki Umada
Web会議 in 青森
Web会議 in 青森
Makoto Shimizu
SocialAnalyticsとCQ5がスゴイ
SocialAnalyticsとCQ5がスゴイ
Makoto Shimizu
SORACOM Conference Discovery 2017 | B4. IoT、クラウド、CIOは技術にどう向き合うか
SORACOM Conference Discovery 2017 | B4. IoT、クラウド、CIOは技術にどう向き合うか
SORACOM,INC
[Modern Cloud Day Tokyo 2019] 【ビジネスをさらに加速させる!!】Oracle Cloud を活用したデータドリブン ユースケ...
[Modern Cloud Day Tokyo 2019] 【ビジネスをさらに加速させる!!】Oracle Cloud を活用したデータドリブン ユースケ...
オラクルエンジニア通信
BANKING API AND API ECOSYSTEM
BANKING API AND API ECOSYSTEM
API Meetup
【Open cloud innovation festa 2016 資料】 SoftLayerで始めるデジタルマーケティング
【Open cloud innovation festa 2016 資料】 SoftLayerで始めるデジタルマーケティング
Kohei Nishikawa
Alp x BizReach SaaS事業を営む2社がお互い気になることをゆるゆる聞いてみる会
Alp x BizReach SaaS事業を営む2社がお互い気になることをゆるゆる聞いてみる会
scalaconfjp
大阪市南港ATC イメディオ IoT・ M2Mセミナ2016資料(web公開用) 3つの手探り〜技術・マネタイズ・セキュリティ・・・
大阪市南港ATC イメディオ IoT・ M2Mセミナ2016資料(web公開用) 3つの手探り〜技術・マネタイズ・セキュリティ・・・
Yukio Kubo
これからの開発環境の話をしよう - 開発現場力を高める環境づくり #ost2013
これからの開発環境の話をしよう - 開発現場力を高める環境づくり #ost2013
智治 長沢
20160621 KDL_monacaソリューションセミナー
20160621 KDL_monacaソリューションセミナー
kdl_yamanaka
データマイニングCROSS 第2部-機械学習・大規模分散処理
データマイニングCROSS 第2部-機械学習・大規模分散処理
Koichi Hamada
次世代Analytics製品のSAP Analytics Cloud(SAC)ってなんなの?どうなの?
次世代Analytics製品のSAP Analytics Cloud(SAC)ってなんなの?どうなの?
Accenture Japan
Banking APIとAPIエコシステム
Banking APIとAPIエコシステム
API Meetup
日本市場における最新のDrupalビジネス動向 20160901v4
日本市場における最新のDrupalビジネス動向 20160901v4
Hidekazu Ikeda
API Meetup #5 LT
API Meetup #5 LT
Junichi Okamura
アプリケーション概観 29 feb2016 のコピー
アプリケーション概観 29 feb2016 のコピー
Yoshimitsu Homma
マイクロモノづくり実践道場チラシV1.0
マイクロモノづくり実践道場チラシV1.0
shigeu utsunomiya
第73回 Machine Learning 15minutes ! IBM AI Foundation Modelsへの取り組み
第73回 Machine Learning 15minutes ! IBM AI Foundation Modelsへの取り組み
Tsuyoshi Hirayama
AI入門「第4回:ディープラーニングの中身を覗いて、育ちを観察する」
AI入門「第4回:ディープラーニングの中身を覗いて、育ちを観察する」
fukuoka.ex
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
fukuoka.ex
More Related Content
Similar to AI入門「第2回:Scala/Spark/Mahoutでレコメンドエンジンを作る」
企業越境ビジネスリエンジニアリングの3次元モデルによる成功事例
企業越境ビジネスリエンジニアリングの3次元モデルによる成功事例
Toshihiko Yamakami
xOps: エンジニアがスタートアップの成長の原動力となる日
xOps: エンジニアがスタートアップの成長の原動力となる日
Takaaki Umada
Web会議 in 青森
Web会議 in 青森
Makoto Shimizu
SocialAnalyticsとCQ5がスゴイ
SocialAnalyticsとCQ5がスゴイ
Makoto Shimizu
SORACOM Conference Discovery 2017 | B4. IoT、クラウド、CIOは技術にどう向き合うか
SORACOM Conference Discovery 2017 | B4. IoT、クラウド、CIOは技術にどう向き合うか
SORACOM,INC
[Modern Cloud Day Tokyo 2019] 【ビジネスをさらに加速させる!!】Oracle Cloud を活用したデータドリブン ユースケ...
[Modern Cloud Day Tokyo 2019] 【ビジネスをさらに加速させる!!】Oracle Cloud を活用したデータドリブン ユースケ...
オラクルエンジニア通信
BANKING API AND API ECOSYSTEM
BANKING API AND API ECOSYSTEM
API Meetup
【Open cloud innovation festa 2016 資料】 SoftLayerで始めるデジタルマーケティング
【Open cloud innovation festa 2016 資料】 SoftLayerで始めるデジタルマーケティング
Kohei Nishikawa
Alp x BizReach SaaS事業を営む2社がお互い気になることをゆるゆる聞いてみる会
Alp x BizReach SaaS事業を営む2社がお互い気になることをゆるゆる聞いてみる会
scalaconfjp
大阪市南港ATC イメディオ IoT・ M2Mセミナ2016資料(web公開用) 3つの手探り〜技術・マネタイズ・セキュリティ・・・
大阪市南港ATC イメディオ IoT・ M2Mセミナ2016資料(web公開用) 3つの手探り〜技術・マネタイズ・セキュリティ・・・
Yukio Kubo
これからの開発環境の話をしよう - 開発現場力を高める環境づくり #ost2013
これからの開発環境の話をしよう - 開発現場力を高める環境づくり #ost2013
智治 長沢
20160621 KDL_monacaソリューションセミナー
20160621 KDL_monacaソリューションセミナー
kdl_yamanaka
データマイニングCROSS 第2部-機械学習・大規模分散処理
データマイニングCROSS 第2部-機械学習・大規模分散処理
Koichi Hamada
次世代Analytics製品のSAP Analytics Cloud(SAC)ってなんなの?どうなの?
次世代Analytics製品のSAP Analytics Cloud(SAC)ってなんなの?どうなの?
Accenture Japan
Banking APIとAPIエコシステム
Banking APIとAPIエコシステム
API Meetup
日本市場における最新のDrupalビジネス動向 20160901v4
日本市場における最新のDrupalビジネス動向 20160901v4
Hidekazu Ikeda
API Meetup #5 LT
API Meetup #5 LT
Junichi Okamura
アプリケーション概観 29 feb2016 のコピー
アプリケーション概観 29 feb2016 のコピー
Yoshimitsu Homma
マイクロモノづくり実践道場チラシV1.0
マイクロモノづくり実践道場チラシV1.0
shigeu utsunomiya
第73回 Machine Learning 15minutes ! IBM AI Foundation Modelsへの取り組み
第73回 Machine Learning 15minutes ! IBM AI Foundation Modelsへの取り組み
Tsuyoshi Hirayama
Similar to AI入門「第2回:Scala/Spark/Mahoutでレコメンドエンジンを作る」
(20)
企業越境ビジネスリエンジニアリングの3次元モデルによる成功事例
企業越境ビジネスリエンジニアリングの3次元モデルによる成功事例
xOps: エンジニアがスタートアップの成長の原動力となる日
xOps: エンジニアがスタートアップの成長の原動力となる日
Web会議 in 青森
Web会議 in 青森
SocialAnalyticsとCQ5がスゴイ
SocialAnalyticsとCQ5がスゴイ
SORACOM Conference Discovery 2017 | B4. IoT、クラウド、CIOは技術にどう向き合うか
SORACOM Conference Discovery 2017 | B4. IoT、クラウド、CIOは技術にどう向き合うか
[Modern Cloud Day Tokyo 2019] 【ビジネスをさらに加速させる!!】Oracle Cloud を活用したデータドリブン ユースケ...
[Modern Cloud Day Tokyo 2019] 【ビジネスをさらに加速させる!!】Oracle Cloud を活用したデータドリブン ユースケ...
BANKING API AND API ECOSYSTEM
BANKING API AND API ECOSYSTEM
【Open cloud innovation festa 2016 資料】 SoftLayerで始めるデジタルマーケティング
【Open cloud innovation festa 2016 資料】 SoftLayerで始めるデジタルマーケティング
Alp x BizReach SaaS事業を営む2社がお互い気になることをゆるゆる聞いてみる会
Alp x BizReach SaaS事業を営む2社がお互い気になることをゆるゆる聞いてみる会
大阪市南港ATC イメディオ IoT・ M2Mセミナ2016資料(web公開用) 3つの手探り〜技術・マネタイズ・セキュリティ・・・
大阪市南港ATC イメディオ IoT・ M2Mセミナ2016資料(web公開用) 3つの手探り〜技術・マネタイズ・セキュリティ・・・
これからの開発環境の話をしよう - 開発現場力を高める環境づくり #ost2013
これからの開発環境の話をしよう - 開発現場力を高める環境づくり #ost2013
20160621 KDL_monacaソリューションセミナー
20160621 KDL_monacaソリューションセミナー
データマイニングCROSS 第2部-機械学習・大規模分散処理
データマイニングCROSS 第2部-機械学習・大規模分散処理
次世代Analytics製品のSAP Analytics Cloud(SAC)ってなんなの?どうなの?
次世代Analytics製品のSAP Analytics Cloud(SAC)ってなんなの?どうなの?
Banking APIとAPIエコシステム
Banking APIとAPIエコシステム
日本市場における最新のDrupalビジネス動向 20160901v4
日本市場における最新のDrupalビジネス動向 20160901v4
API Meetup #5 LT
API Meetup #5 LT
アプリケーション概観 29 feb2016 のコピー
アプリケーション概観 29 feb2016 のコピー
マイクロモノづくり実践道場チラシV1.0
マイクロモノづくり実践道場チラシV1.0
第73回 Machine Learning 15minutes ! IBM AI Foundation Modelsへの取り組み
第73回 Machine Learning 15minutes ! IBM AI Foundation Modelsへの取り組み
More from fukuoka.ex
AI入門「第4回:ディープラーニングの中身を覗いて、育ちを観察する」
AI入門「第4回:ディープラーニングの中身を覗いて、育ちを観察する」
fukuoka.ex
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
fukuoka.ex
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
fukuoka.ex
Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」
Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」
fukuoka.ex
Elixir入門「第5回:Visualixirで見るマルチプロセス」
Elixir入門「第5回:Visualixirで見るマルチプロセス」
fukuoka.ex
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」
fukuoka.ex
Elixir入門「第6回:Elixirはtry…catchを書かない~障害対応のパラダイムシフト~」
Elixir入門「第6回:Elixirはtry…catchを書かない~障害対応のパラダイムシフト~」
fukuoka.ex
AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【旧版】※新版あります
AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【旧版】※新版あります
fukuoka.ex
重力プログラミング入門「第1回:地球の重力下で人工衛星を公転軌道に乗せる」
重力プログラミング入門「第1回:地球の重力下で人工衛星を公転軌道に乗せる」
fukuoka.ex
AI入門「第1回:AIの歴史とTensorFlow」
AI入門「第1回:AIの歴史とTensorFlow」
fukuoka.ex
やや関数型を意識した風Elixir/Phoenixご紹介
やや関数型を意識した風Elixir/Phoenixご紹介
fukuoka.ex
Elixir入門「第2回:PC間で通信するアプリをサクっと書いてみる」
Elixir入門「第2回:PC間で通信するアプリをサクっと書いてみる」
fukuoka.ex
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」【旧版】※新版あります
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」【旧版】※新版あります
fukuoka.ex
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
fukuoka.ex
More from fukuoka.ex
(14)
AI入門「第4回:ディープラーニングの中身を覗いて、育ちを観察する」
AI入門「第4回:ディープラーニングの中身を覗いて、育ちを観察する」
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
【LT版】Elixir入門「第7回:Python/KerasをElixirから繋いでアレコレする」
Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」
Elixir入門「第3回:Phoenix 1.3で高速webアプリ & REST APIアプリをサクッと書いてみる」
Elixir入門「第5回:Visualixirで見るマルチプロセス」
Elixir入門「第5回:Visualixirで見るマルチプロセス」
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」
Elixir入門「第6回:Elixirはtry…catchを書かない~障害対応のパラダイムシフト~」
Elixir入門「第6回:Elixirはtry…catchを書かない~障害対応のパラダイムシフト~」
AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【旧版】※新版あります
AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【旧版】※新版あります
重力プログラミング入門「第1回:地球の重力下で人工衛星を公転軌道に乗せる」
重力プログラミング入門「第1回:地球の重力下で人工衛星を公転軌道に乗せる」
AI入門「第1回:AIの歴史とTensorFlow」
AI入門「第1回:AIの歴史とTensorFlow」
やや関数型を意識した風Elixir/Phoenixご紹介
やや関数型を意識した風Elixir/Phoenixご紹介
Elixir入門「第2回:PC間で通信するアプリをサクっと書いてみる」
Elixir入門「第2回:PC間で通信するアプリをサクっと書いてみる」
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」【旧版】※新版あります
Elixir入門「第1回:パターンマッチ&パイプでJSONパースアプリをサクっと書いてみる」【旧版】※新版あります
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
Elixir入門「第3回:Phoenix 1.2で高速Webアプリ & REST APIをサクッと書いてみる」【旧版】※新版あります
AI入門「第2回:Scala/Spark/Mahoutでレコメンドエンジンを作る」
1.
AI入門 第2回 「Scala/Spark/Mahout でレコメンドエンジンを作る」 2017/06/12 ver0.5作成 2017/07/24
ver1.0作成
2.
本セッションの趣旨 商品購入に至るまでの閲覧履歴、つまり、 ユーザ行動ログ (≒Webアクセスログ) を 「Scala/Spark/Mahoutで 解析すると、マーケティングで使える」 という内容です 統計モデルや数式、学習アルゴリズムとかは一切出てき ません
& その領域でのご質問にお応えする領域があまり ありませんが、 「ビジネス領域での適用」については面白いと思います
3.
2 マーケティングの歴史 をほんの少しだけ
4.
マーケティング黎明期は「マス広告」中心 1950 1960 1970 1980 1990 2000 年代 高度経済成長期 (あこがれ消費) 安定成長期 (ふんいき消費) バブル崩壊 (選択消費) 明るいナショナル 3時のおやつは文明堂 オーモーレツ (丸善石油) 違いがわかる男 ネスカフェ 24時間戦えますか? 5時から男のグロンサン いつかはクラウン (TOYOTA)
5.
消費者の情報源はTV等、マスメディア4種 1950 1960 1970 1980 1990 2000 年代 高度経済成長期 (あこがれ消費) 安定成長期 (ふんいき消費) バブル崩壊 (選択消費) 明るいナショナル 3時のおやつは文明堂 オーモーレツ (丸善石油) 違いがわかる男 ネスカフェ 24時間戦えますか? 5時から男のグロンサン いつかはクラウン (TOYOTA) マスマーケティング 広告宣伝部→総合広告代理店 4マスメディア(TV、ラジオ、新聞、雑誌) 統合的マーケティング 差別商品開発、販売促進、セグメンテーション ライフスタイル研究、消費者ニーズへの対応
6.
インターネットとスマホで消費者行動が激変 2000 2014 2017 年代 バブル崩壊 IT社会 (選択消費) スマホ社会 勉強しまっせ よーく考えよー お金は大事だよ カードの切り方が人生だ 白戸家 ビッグデータ元年
7.
マーケティングのメディアも変革期を迎えた 2000 2014 2017 年代 バブル崩壊 IT社会 (選択消費) スマホ社会 勉強しまっせ よーく考えよー お金は大事だよ カードの切り方が人生だ 白戸家 ビッグデータ元年 デジタルマーケティング 4マスメディア +WEB広告(モバイル、SEM、SNS) 統合データマーケティング 4マスメディア +WEB広告(モバイル、SEM、SNS) +ビジネスデータ・WEBトラッキング
8.
あらゆるデータが捕捉可能になったので...
9.
「雰囲気」「カン」で行っていた顧客把握から ? ? ?
10.
「データ中心」での分析・展開が可能となった データ
11.
10 データ中心の代表 「レコメンドエンジン」 =「おすすめ機能」
12.
例1.ファッションサイトの購入ページ
13.
商品に関連した「おすすめ」が表示される 関連性が高いミュールや サンダルが「おすすめ」として 表示される このミュールに…
14.
例2.Amazon「この商品を買った人は~」 高確率で「トネガワ」にも 関心が高いであろうことから、 売上アップに繋がりやすい 「ハンチョウ」に興味あって 見に来る人は…
15.
「おすすめ」を ”機械学習” で自動生成 •
商品属性相関 (こんなもの買った人は、 こんなもの買ってま す) • 顧客属性相関 (あなたに似た人は こんなもの買ってま す) • 売上ランキング などなど レコメンド情報 (機械学習で生成) エンドユーザー
16.
15 レコメンドエンジン を実装してみる
17.
多数の商品閲覧履歴からレコメンド生成 Webアクセス ログ(タグ) SFTP ■Webアクセスログ取込 ■レコメンドデータ生成 レコメンド 表示 レコメンド データ 配信 サーバ ファイル システム ビッグデータ解析 駆動エンジン 商品閲覧 相関計算商品別集計
18.
17 EMR?
19.
Elastic(伸縮自在な) MapReduceの略
20.
ポチれば作れるスケーラブルなデータ基盤
21.
マネジメントコンソールでEMR+Spark選択
22.
21 Spark vs Hadoop
23.
Spark: 少量データをインメモリで高速処理 集計対象データ量が多く 無いためオーバースペック (速度よりも)データ量重視 で分散処理する
データ量が多い(億越え) 処理頻度が低い(1日1回) 処理速度が普通 比較的少な目のデータを 高い頻度でバンバン回す データ量が比較的少ない 処理頻度が高い 処理速度が高速 インメモリで高速処理可能 集計対象データ量もメモリ 容量の範囲内に収まる 業務要件 選定/非選定理由 Hadoop Spark
24.
Spark: 少量データをインメモリで高速処理
25.
通常ScalaコードとSparkコードの差 val file =
scala.io.Source.fromFile( "/tmp/log.txt" ) val lines = file.getLines val error = lines.filter( _.contains( "ERROR" ) ).size 通常のScalaコードを書くのと、ほぼ変わら ないコードで、複数クラスタでの分散処理 が実現されてしまうのが、Sparkの凄さ 通常のScalaコード val lines = sc.textFile( "/tmp/log.txt" ) val error = lines.filter( _.contains( "ERROR" ) ).count Spark呼出を利用したScalaコード(裏では、複数のクラスタに分散されている) Spark 2.x系 (初回リリースは2016/7/26) だとメソッド セットが変わる (RDD※/DataFrameもDatasetに変更) ※Resilient Distributed Dataset: 不変で並列実行可能な分割コレクション
26.
25 Mahout?
27.
Mahout: レコメンド向き機械学習エンジン
28.
Mahout: 最大の特徴は… レコメンドやクラスタリングの機械学習 アルゴリズムをコマンドラインから パラメータ指定するだけで利用できる ノンプログラミングで、大規模データの 分析が気軽にハンドリングできる (使ってないけど)Sparkとネイティブ 接続もできて、更に高速化できるらしい
29.
28 ①商品別で 商品閲覧を 集計する
30.
ScalaからSpark呼出で商品別集計 Webアクセス ログ(タグ) SFTP ■Webアクセスログ取込 ■レコメンドデータ生成 レコメンド 表示 レコメンド データ 配信 サーバ ファイル システム ビッグデータ解析 駆動エンジン 商品閲覧 相関計算商品別集計
31.
ScalaからSpark呼出で商品別集計 2017-06-01T00:00:27Z activities.xxxxxxxxxx {"ts":1496275227402,"account":"xxxxxxxxxx","vt":"wKPoI.lNwXiTH","cid":"","ctype":"1","act_type":"bdr_detail","act_params":[{"product_id":"HNHYA-367693- 04"}]} 2017-06-01T00:00:57Z activities.xxxxxxxxxx {"ts":1496275257338,"account":"xxxxxxxxxx","vt":"16fHvG.lMYDCZ7","cid":"","ctype":"1","act_type":"bdr_detail","act_params":[{"product_id":"HNKYA-364957- 04"}]} 2017-06-01T00:01:48Z
activities.xxxxxxxxxx {"ts":1496275308434,"account":"xxxxxxxxxx","vt":"3%2BsMkQ.lN4P72N","cid":"","ctype":"1","act_type":"bdr_detail","act_params":[{"product_id":"HNRYB- 360844-04"}]} 2017-06-01T00:02:52Z activities.xxxxxxxxxx {"ts":1496275372269,"account":"xxxxxxxxxx","vt":"6TxF1.lLWEepM","cid":"","ctype":"1","act_type":"bdr_detail","act_params":[{"product_id":"HNHJB-357844- 03"}]} 2017-06-01T00:03:45Z activities.xxxxxxxxxx {"ts":1496275425990,"account":"xxxxxxxxxx","vt":"Y9hcv.lFgztJ0","cid":"","ctype":"1","act_type":"bdr_detail","act_params":[{"product_id":"FKMYA-368333- 03"}]} 2017-06-01T00:05:14Z activities.xxxxxxxxxx {"ts":1496275514546,"account":"xxxxxxxxxx","vt":"1jrjda.lNhpu8E","cid":"","ctype":"1","act_type":"bdr_detail","act_params":[{"product_id":"OSHGF-363474- 02"}]} 2017-06-01T00:05:24Z activities.xxxxxxxxxx {"ts":1496275524952,"account":"xxxxxxxxxx","vt":"3%2525252525252525252520il- g.lzgfvlh","cid":"","ctype":"1","act_type":"bdr_detail","act_params":[{"product_id":"CTRJA-362952-05"}]} 2017-06-01T00:06:43Z activities.xxxxxxxxxx {"ts":1496275603657,"account":"xxxxxxxxxx","vt":"2LXKDi.lBqDjmb","cid":"","ctype":"1","act_type":"bdr_detail","act_params":[{"product_id":"CTJJK-265962- 03"}]} 2017-06-01T00:07:36Z activities.xxxxxxxxxx {"ts":1496275656723,"account":"xxxxxxxxxx","vt":"6TxF1.lLWEepM","cid":"","ctype":"1","act_type":"bdr_detail","act_params":[{"product_id":"HNHJB-357841- 03"}]} 2017-06-01T00:08:10Z activities.xxxxxxxxxx {"ts":1496275690808,"account":"xxxxxxxxxx","vt":"28Y4OC.lwdLlM4","cid":"","ctype":"1","act_type":"bdr_detail","act_params":[{"product_id":"FUJJK-368890- 03"}]} … 商品IDとユーザIDの入ったユーザ行動 (Webアクセス)ログを商品別に集計する ※集計後のデータは、公開控えさせてください
32.
ScalaからSpark呼出で商品別集計 // Sparkの初期化 val conf
= new SparkConf().setAppName( "mario-opt-mapred/ActivitiesItemCorrCalculation" ) conf.set( "spark.hadoop.validateOutputSpecs", "false" ) val sc = new SparkContext( conf ) val hadoopConf = sc.hadoopConfiguration hadoopConf.set( "fs.s3a.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem" ) hadoopConf.set( "fs.s3a.awsAccessKeyId", configs.getOrElse( "AWS_ACCESS_KEY_ID", "" ) ) hadoopConf.set( "fs.s3a.awsSecretAccessKey", configs.getOrElse( "AWS_SECRET_ACCESS_KEY", "" ) ) … // 入力ファイルからRDDを作り集計 val inputAct = sc.textFile( actFile ) q.sourceAggregateType match { case SOURCE_AGGREGATE_TYPE_COUNT => val rddAct = inputAct.filter( x => x.nonEmpty && x.contains( schemaName ) ).map { x => val json = gson.fromJson[ AggregateBehavior ]( x, classOf[ AggregateBehavior ] ) val id = if ( json.params.get( q.sourceAttribute ) != null && json.params.get( q.sourceAttribute ).length > 128 ) json.params.get( q.sourceAttribute ).substring( 0, 128 ) else json.params.get( q.sourceAttribute ) ( id, ( json.vt.hashCode, json.count ) ) }.filter( x => x._1 != null && x._1.nonempty ) val rddActAndItem = rddAct.join( rddItem ) val csv = rddActAndItem.map( x => { Array( x._2._1._1, x._2._2, x._2._1._2 ).mkString( "," ) } ) csv.repartition( 1 ).saveAsTextFile( outputFile ) Sparkを呼び出すバッチをScalaで作成
33.
32 ②商品閲覧の 相関を 計算する
34.
Mahoutで商品閲覧の相関を計算 Webアクセス ログ(タグ) SFTP ■Webアクセスログ取込 ■レコメンドデータ生成 レコメンド 表示 レコメンド データ 配信 サーバ ファイル システム ビッグデータ解析 駆動エンジン 商品閲覧 相関計算商品別集計
35.
Mahoutで商品閲覧の相関を計算 3 69 0.9577542080518994 3
482 0.9091600912310319 3 601 0.8981679030325392 3 909 0.9038946377087511 3 1161 0.9474190693417451 3 1532 0.9026751528181597 3 2533 0.9007963954721725 3 2561 0.8957260345613678 3 2568 0.8964474529800505 3 2575 0.8990213228483238 … 前述の「商品別閲覧集計」で作った結果 の相関をMahoutで算出すると、以下の ような、商品間の相関係数が取得でき、 相関係数が高いものをレコメンドする
36.
Mahoutで商品閲覧の相関を計算 org.apache.mahout.cf.taste.hadoop.similarity.item.ItemSimilarityJob 引数: -i s3://xxxxxxxxxxxxxxx/xxxxxxxxxx/xxxxxx/xxxxxx/xxxxxxxx/201706060332/ds/out/Ratings -o s3://xxxxxxxxxxxxxxx/xxxxxxxxxx/xxxxxx/xxxxxx/xxxxxxxx/201706060332/recommendations -s
SIMILARITY_LOGLIKELIHOOD --tempDir xxxxxxxxxxxxxxx --booleanData true MahoutをEMRから起動して、算出結果 はS3を経由して、Auroraに書き出される
37.
36 ③レコメンド データの配信
38.
配信したレコメンドデータで「おすすめ」表示 Webアクセス ログ(タグ) SFTP ■Webアクセスログ取込 ■レコメンドデータ生成 レコメンド 表示 レコメンド データ 配信 サーバ ファイル システム ビッグデータ解析 駆動エンジン 商品閲覧 相関計算商品別集計