Scala/Spark/Mahoutでレコメンドエンジンを作る by Scala福岡2017 – ガジェット通信

Home » 03マーケティング » Scala/Spark/Mahoutでレコメンドエンジンを作る by Scala福岡2017 – ガジェット通信
03マーケティング, One to Oneマーケティング コメントはまだありません



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

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にアクセスしてほしい」と語った。




こんな記事もよく読まれています



コメントを残す