TechReport

技術者情報

テクノロジー

2010年11月4日(木)公開

第32回

「GMOとくとくショップ」でのレコメンド利用について(前編)

MahoutとHadoopを使ったレコメンデーション

GMOインターネット株式会社 次世代システム研究室 室長 堀内敏明。2009年11月24日、新しいショッピングガイドサイト「GMOとくとくショップ」をオープンし、既存の大手インターネット会社のショッピングガイドサイトと異なった、最新テクノロジーを多数盛り込んでいるのが特徴。今回は、「GMOとくとくショップ」でのレコメンド利用について説明する。

記事INDEX

大規模データ解析の必要性

多くのサービスはリリース後、長い運営が始まり膨大な量のデータを扱い始めます。昨今では月間数千万~億PVのサイトも珍しくなく、Webサーバのログ、ECサイトの購買履歴、ブログ等のテキストデータといった大量のデータを扱うようになりました。そういったデータからユーザの行動をカテゴライズしたり、データ間の相関関係を求めてサービスに生かすことは、サービスの質的な向上を図るために必要な技術となってきました。

例えばECサイトで何か商品を見ていると、「あなたにお勧めの商品はこちら」といったように、自分が探している商品に関連する商品が推薦(レコメンデーション)されます。これによって、ユーザは自分で商品を探さなくても自分に合った商品を発見することが出来ます。また、ソーシャルゲームでの行動分析を行い、ゲームの改善を行いユーザビリティの向上といった施策を行うこともあります。

つまり、サービス提供者側がWebサーバのログ等からユーザの動向を分析することによって、より良いサービス・発見をユーザに提供することが出来ます。Webサーバのログは1次データとしてのPV・人気ページ・上位ページといった情報を把握して、サイトの改善に役立ちます。更にそれらの膨大なログから、ユーザの行動を統計的に解析した2次データを生成すると、よりユーザ側に立った質的向上を図ることが出来ます。

この2次データの解析において強力なのがMahoutです。Mahoutを使うと、大規模分散処理を行うHadoopと連携して膨大なデータを簡単に解析することが出来るようになります。

Mahoutとは?

MahoutはApache Projectで開発が行われている、オープンソースのデータ解析を行うためのライブラリです。2010/11/01現在、version 0.4までリリースされていて、カテゴリ分け・クラスタリング・進化的アルゴリズムといった多彩なアルゴリズムと、Hadoopと連携した計算処理を行うことが出来ます。

Hadoopは元々、大規模データを使った並列処理のプラットフォームで、Mahoutのような大量な計算処理を行う場合、MapReduceのスケーラビリティを利用するのは自然な流れです。(Mahoutには「象使い」という意味があるのも頷けます。)

Mahoutには数々のアルゴリズムの他にレコメンデーションの実装が含まれていて、とくとくショップでも、リリース当初からこのレコメンデーションの仕組みを利用しています。

図1 Mahout と Hadoopの関係イメージ
図1 Mahout と Hadoopの関係イメージ
レコメンデーションとは?

レコメンデーションは、ユーザの嗜好に沿って価値のある情報を提示することです。例えば、とくとくショップでは図.2のように、商品を紹介するページで「この商品を見た人はこんな商品も見ています」といった形で、レコメンデーションした情報を表示しています。

とくとくショップでは、商品が閲覧された時のログを解析して、特定の商品が閲覧されるとき、同じような嗜好の商品を表示することで、有用な情報をユーザに提示しています。

図2 とくとくショップの商品ページイメージ
図2 とくとくショップの商品ページイメージ

ここで、レコメンデーションする商品には次のような特性があります。

1.ユーザ全体に対して行う

  • 売れ筋や人気商品 :新着、人気ランキングといった商品

2.商品やユーザ個別に行う

  • 似たような商品 :カテゴリ、デザインなどの属性が似ている商品
  • 合わせて買う商品 :服と靴などを一緒にコーディネイトする

1のユーザ全体に対して行うレコメンデーションは、1次データであるWebログや商品データを集計することで、閲覧された商品やユーザの相関性を考慮することなく、容易に実現出来ます。ユーザ全体の嗜好性という意味において、ランキング等も立派なレコメンデーションです。GMOとくとくショップでは「人気キーワード」や「人気商品」をHadoopとHiveを使って集計して表示しています。(この内容については、GMOとくとくショップのHadoop集計 ? Hiveの利用方法 ? で説明してます。)

2.については、商品やユーザの個別の嗜好性といった、より一歩踏み込んだものです。レコメンデーションの多くは、こちらの意味を指している物がほとんどです。図.2のレコメンデーションされた商品では、表示されている服に似たような商品に加えて、合わせて履く靴についても表示しています。このようにユーザが探している情報に関連する物の他にも、一緒に使うような物についてもレコメンデーションすることで、ユーザは新しい発見を得ることが出来ます。実際にGMOとくとくショップでは、レコメンデーションされる商品が表示された時のCTR(Click Through Rate)は、同一カテゴリの商品を表示させた時よりも5倍程高いデータが得られています。

商品やユーザ個別に行うレコメンデーションは、過去のログなどのデータ使って、協調フィルタリングと呼ばれる方法によって実現されています。

協調フィルタリング

協調フィルタリング(Collaborative Filtering, CF)はMahoutのorg.apache.mahout.cfパッケージ内に収録されています。協調フィルタリングは何か?というと、ユーザの行動履歴をベースにユーザ間またはアイテム間の類似度を計算して、アイテムをレコメンデーションする仕組みの総称です。Mahoutには協調フィルタリングによるレコメンドとして、大きく次のような物があります。

  • アイテムベース :商品間の類似性を元に、関連する商品をレコメンドする。
  • ユーザベース  :ユーザ間の類似性を元に、他のユーザがチェックした商品をレコメンドする。
  • その他     :Slope-One(ユーザの評価値を利用)など

アイテムベースのレコメンドはユーザの行動履歴から商品間の関連性を求めるため、行動履歴がないユーザの場合であってもレコメンデーションを行えるという利点があり、「この商品を買った人は、こんな商品を買っています」といったような所で利用されます。アイテム間の関連性を元にしているため、レコメンドされる商品が人気の高い商品に偏りやすいといった問題点もあります。

ユーザベースのレコメンドは、ユーザ個々の行動履歴からターゲティングを行える利点があります。例えば、「あなたに似たようなユーザはこちらを買っています」といったようなレコメンデーションが行われます。ただし、履歴の無いユーザに対してはレコメンデーションが出来ないという問題点があります。

これらはどの手法を用いても、Webサーバのログや購買履歴といったユーザの行動履歴を使って膨大なユーザ間・商品間の関連性を計算します。一般的には、ユーザの履歴・増減といった影響から、ユーザーベースよりアイテムベースの方が計算量、スケーラビリティといった点において利点があります。GMOとくとくショップでは閲覧履歴の無いユーザに対してもレコメンデーションを行えるように、アイテムベースでのレコメンドを利用しています。

Mahoutのレコメンドの流れ

Mahoutでは次のような流れでレコメンデーションを行います。

    1. データモデルの生成 :FileDataModel、MySQLJDBCDataModelなど
    2. ユーザ間・商品間類似度の定義 :TanimotoCoefficientSimilarity
    LogLikelihoodSimilarity、
    NearestNUserNeighborhoodなど
    3. レコメンデーションの実行 :GenericUserBasedRecommender、
    GenericItemBasedRecommender、
    SlopeOneRecommender、SVDRecommenderなど
    4. レコメンデーションの評価 :AverageAbsoluteDifferenceRecommenderEvaluator、
    RecommenderEvaluator

図3 GMOとくとくショップのレコメンデーションイメージ
図3 GMOとくとくショップのレコメンデーションイメージ

データモデルの生成では、評価対象となるユーザID、商品ID、評価値といったデータをファイルやデータベースから読込みます。次にデータモデルを使ってユーザ間・商品間の関連性をスコアとして生成します。最後に生成されたスコア定義を使って、レコメンデーションを実行します。2,3では様々なアルゴリズムを利用することが出来て、データの内容やサイトの特性によってレコメンデーションの評価を行うことが出来ます。

ここで、GMOとくとくショップでのレコメンデーションのシステム部分は図3のようになっています。

ユーザはGMOとくとくショップにアクセスすると、Webサーバにログ残します。そのログをバッチ処理でHadoopに送信して、ログの解析を行いMahoutのデータモデルに渡し易いようにデータを整形します。次にHadoopクラスタ上で商品間のスコア値を生成します。最後に生成したスコア値は、Mahoutのレコメンデーションを組込んだJettyで動作するAPに与えられます。

レコメンデーションAPはWebAPI化されていて、APサーバから叩けるようになっています。ユーザがGMOとくとくショップの商品を閲覧するとき、APサーバはレコメンデーションAPのWebAPIを通じて、レコメンデーション情報を取得してユーザに表示しています。

次回後編では、Mahoutを利用したレコメンデーション方法について具体的に説明します。



2010.11.04

堀内 敏明

GMOインターネット株式会社

2002年7月に、現・GMOメディア株式会社に入社後、2003年3月に同社取締役システム本部長に就任。2008年3月よりGMOインターネット株式会社 次世代システム研究室 室長としてインターネット最新テクノロジーの研究や開発に従事。2015年3月に同社常務取締役に就任。

執筆者一覧