CodeIQ MAGAZINECodeIQ MAGAZINE

Scala/Spark/Mahoutでレコメンドエンジンを作る─by Scala福岡2017

2017.09.15 Category:勉強会・イベント Tag: , , , ,

  • 18
  • このエントリーをはてなブックマークに追加

Scalaを福岡・九州で盛り上げるイベント「Scala福岡2017」がヌーラボ福岡本社で開催された。今回で2回目となった同イベントの最初に登壇したのが、福岡・天神を拠点とするスタートアップ企業、TechJINの森正和氏。そのセッションで語られた「Spark+Mahoutによるレコメンドエンジン開発」の概要を紹介する。 by 馬場美由紀 (CodeIQ中の人)

今はデジタルマーケティングが中心。レコメンドエンジンが売上を左右する

TechJINの創業は2016年10月。マーケティングプラットフォーム「b→dash」を開発するフロムスクラッチのグループ企業として、マーケティングテクノロジー領域の基礎研究・開発などの事業を展開している。

b→dashはMachine Learningを活用したマーケティングプラットフォームで、レコメンドエンジンもMachine Learningで実装している。

TechJINで大規模BI型マーケティングプロダクトの開発/性能向上を手掛けている森正和氏は、今回「Scala/Spark/Mahoutでレコメンドエンジンを作る」というテーマで、セッションを展開。

商品購入に至るまでの閲覧履歴、いわゆる行動履歴をScalaとSpark、Mahoutで解析して、マーケティングに活用する仕組み作りを説明した。

株式会社TechJIN 森正和氏

Sparkを利用する際のScalaのコード例としては、もの足りなさを感じるコード量だが、少ないコードでも、充分な並行分散のデータ処理を展開できるのが、Sparkの凄さだと言う。

森氏がScalaを触り始めたのは2009年ぐらいから。実は関数型で初めて触ったのがScalaだったが、なかなかうまく書けず、Haskellでまず関数型の基礎を覚え、Scalaの書き方を覚え始めた(その数年後、Elixirのおかげで関数型の拒否症も治り、Scalaも自信を持って書けるようになった)。

セッションはマーケティングの歴史の話から始まる。

高度経済成長期からバブル崩壊までは、テレビをはじめとするマス広告が中心で、「明るいナショナル」のような、キャッチコピーと商品をCMとして流すのがポピュラーだった。

その後、91年ぐらいにインターネットが登場し、Windows95が出たことで、ようやくインターネットによる広告が行われるようになった。

マスマーケティングの時代は商品を作れば売れたが、物が豊かになると消費者は選択消費をするようになる。そのため差別化商品の開発やセグメンテーションライフスタイル研究など、総合的マーケティングが必要となった。

さらに、インターネットやスマートフォンが登場し、消費者行動が激変していく。

この時代になると、デジタルマーケティングの影響力が大きくなっていく。

「続きはwebで」といったWebにつないでいくCMなど、インターネットを絡めたプロモーションが行われ、4マスメディアとWeb広告のクロスチャネル活用が進んだ。

さらに、スマホやインターネットを通じて取得できるデータを用いて、より精緻なターゲティングができるようになった。

YouTubeやFacebookなどのアプリの登場もあり、顧客のプロファイリングがより高度にできるようになったことで、データを活用したマーケティングが可能となった。

これまでの雰囲気や勘に頼る手法から、行動履歴を含めた「one to oneマーケティング」として、対象者を狙い撃ちして売り込むことが可能となった。

こうしたデータ中心での分析・展開の代表例がレコメンドエンジン、いわゆる「オススメ機能」である。顧客一人一人に合った商品をオススメすることで、売上、利益を引き上げる施策が実現できる。

さまざまなショッピングサイトで活用されているレコメンドエンジン

Webにおけるレコメンド機能は、ある商品ページを閲覧したとき、その商品に関連するものをオススメする機能である。Amazonはじめ、さまざまなショッピングサイトで活用されている。

たとえば、サンダルのページを見ている人に、より売れているサンダルをオススメすることで、暗にどんな商品が人気かを認知させ、購買に結び付ける。

特に、サイトに2回、3回訪れているようなユーザーは、購入意思はあるが何を買うか迷っている可能性が高い。

人気の靴、同じカテゴリの靴を探してる人が何を買っているかなどをお勧めすることで、商品購入の歩留まりが高まる傾向がある。

同様に、購入ブランド内での違うカテゴリの物をお勧めするなど、Webサイトへの来訪からの購入への歩留まりだけでなく、初回購入からの2回目購入への転換率の向上への寄与をする商品レコメンドは、売上向上に大きく貢献するのである。

このような「商品属性相関」以外にも、オススメを機械学習で自動生成するパターンには、「顧客属性相関」や「売上ランキング」などもある。

レコメンドエンジンの実装方法

では実際にレコメンドエンジンをどう実装していくか。b→dashでは、汎用的なレコメンドに関してはAWSを中心に実装している。

WebアクセスログをJavaScriptで取得し、それをS3経由でEMRに送り、EMRの上でScalaからSparkを呼び出し、商品別の集計を行う。

その後、Mahoutという機械学習のエンジンで、商品間の閲覧相関を計算し、Auroraに出力し、Webサイトに閲覧相関データをリアルタイム転送する。

この一連の流れをハンドリングするのがAmazon EMRである。HadoopやSparkなどを使った、大量データを扱うミドルウェアの構築を簡単に実現するサービスだ。

AWSマネジメントコンソール上で、HadoopやSparkを選択するだけで構築が完了する。

なお、レコメンドエンジンに、HadoopではなくSparkを選んだ理由は、Sparkがオンメモリで高速に実行できる点を重視したのと、レコメンドデータのサイズが、比較的少なめだからである。

集計対象データ量をメモリ容量の範囲内に納まるように設計し、オートスケールの機能を切って利用している。

常にクラスタのメモリ容量をGrafanaで検知するようにしてメモリオーバーしないように運用しているが、万一メモリがあふれても処理の再実行の考慮がされており、復旧についても簡易に可能である。

開発側面でのSparkの凄さは、通常のScalaコードでファイルを読み書きするのとほぼ変わらないコードで、複数クラスタでの分散処理が実現されてしまうことだ。

機械学習エンジンMahoutを活用し、レコメンドを生成

Mahoutはレコメンド向けの機械学習エンジン。これも簡単に使える。最大の特徴は、レコメンドやクラスタリングの機械学習アルゴリズムをコマンドラインからパラメータ指定するだけで利用できることだ。

商品別の集計したデータをMahoutに食わせると、以下の様なデータが出てくる。

1行目は商品3と商品69の相関関係が95.7%であることを示している。どのくらいの閾値でレコメンドを出すかは悩むところだが、一般的には70%を下回るケースはない。

以上のレコメンド機能以外にも、b→dashはさまざまなマーケティング施策用の機能を提供している。

たとえば、ある商品を買ってくれた人に3日後にメールを出すという施策(シナリオメール)や、スマホからサイトアクセスしたLINEユーザーにはLINE配信でセール情報を送るなど、特定の条件に絞られたセグメントとのコミュニケーションをマルチデバイス・マルチチャネルで行う、いわゆる「CCCM:クロスチャネルキャンペーンマネジメント」が可能だ。

また、メール配信した顧客がどのような消費行動をしたか施策の分析や、そもそものどういう顧客がどういう価格帯で商品を買っているかなどをグラフで見るBIダッシュボードを備えている。

分析には、広告ログやアクセスログに加え、お客さまの保有する顧客データや受注履歴、在庫など様々なデータを連携して行うことが可能だ。

このような統合的なマーケティング分析・施策を実行できることが、b→dashの優位性となっている。

使っているテクノロジーも多種多様。ここまでご紹介した、レコメンドにおける、Scala、Spark、Mahout、Auroraの他、メールの一斉配信にはRDS MySQLを使い、分析のためのデータ統合にはAmazon Redshiftを使っている。

開発環境は、非常に開発者泣かせな環境とも言える。

最後に森氏は、「これからもMachine Learningの特徴を生かして、お客さまの売上を向上させるマーケティング機能を作る活動に注力していく。

また、データ分析や並行分散の強力な次世代ツールであるElixirの勉強会「fukuoka.ex」を偶数月に開催、Mahoutより新しいAI技術であるTensorFlow ServingやKerasなどに関する勉強会「福岡x人工知能…」は奇数月に開催しているので、興味のある人はぜひ、TechJIN HPにアクセスしてほしい」と語った。

「Scala福岡2017」レポート特集

  • 18
  • このエントリーをはてなブックマークに追加

■関連記事

はてな粕谷氏が語る、安全なPlay Frameworkのバージョンアップのコツとは─by Scala... なぜ、バージョンアップが必要なのか ご存知の方も多いと思うが、サーバ管理・監視ツール「Mackerel」を直訳すると、「サバ」という意味。それをもじって名付けた。現在、粕谷氏は同ツール開発チームディレクターとして、開発メンバーをマネジメントしている。 ▲株式会社はてな Mackerel開発チーム...
Direct Manipulationとプログラミング環境をScalaで書いてみる─by Scala... DMに関心を持った背景 福岡を拠点に高速分散処理技術を生かしたスマートデバイス×ビッグデータ領域に強みを持つスタートアップ、グルーブノーツのRockstarエンジニア、花田恒一氏は、Direct Mnipulationとプログラミング環境をScalaで実装した話を発表した。 Direct Man...
【鹿児島の熱量を感じろ!】モバイルの未来は地方こそ主役「MOBILE CONFERENCE 2017... エンジニア・デザイナーのためのカンファレンスが鹿児島で開催 ウェブやモバイルのエンジニア・デザイナーのためのカンファレンス「MOBILE CONFERENCE 2017」。鹿児島キャリアデザイン専門学校マルチホールを会場に開催された。 この日はあいにくの雨天にも関わらず、会場はウェブ・モバイ...
プロ棋士・羽生善治が語る、AI時代を生き抜くために「身につけるべきスキル」とは?... 最大約250人が同時に研修を受講できるトレーニングセンターを開設 2016年10月、日本ビジネスシステムズ(JBS)は最大約250人が同時に研修を受講できるJBSトレーニングセンターを開設。 それを記念して10月31日に、AIに関するセミナーを開催した。 ▲JBSトレーニングセンター 今回のセ...
DataRobotシバタアキラ氏が語る「誰もが簡単に、機械学習による予測分析ができる時代が来る」... DataRobotシバタアキラ氏「レンジでチンする機械学習」をテーマに登壇 登壇者のシバタアキラさんは、元々物理学の出身。ロンドン大学で高エネルギー物理学を学び博士号を取得。この頃よりPythonを使い始めたという。 2007年よりニューヨーク大学に移ってからは、データサイエンティストとして加速...
これからScalaを始める人に役立つヒント満載!『Scala大名の平成維新☆殿中でScala!』... LT1:「十人十色のScalaの始め方」 トップバッターはナイルの佐藤和輝さん。現在はApplivのマイクロサービス化&検索機能改善に携わっている。Applivは「アプリインストールを、もっと身近なものにする」をミッションに、2012年8月リリースされたユーザー参加型のスマートフォンアプリ発見サー...

今週のPickUPレポート

新着記事

週間ランキング

CodeIQとは

CodeIQ(コードアイキュー)とは、自分の実力を知りたいITエンジニア向けの、実務スキル評価サービスです。

CodeIQご利用にあたって
関連サイト
codeiq

リクルートグループサイトへ