note_表紙

推薦システムの古典的手法

こんにちは!
IT企業でデータ活用プロダクトの開発に従事しているrilmayerです。
この記事はアドベントカレンダー「Search&Discovery 全部俺」6日目の記事となります。

寝るまでが今日です!汗

今日はSearch&Discoveryの2本柱の一つである推薦システムについて、その基本的な課題感やそれをどのように解決してきたかについて紹介しようと思います。

推薦システムは目的に沿ったアイテムをユーザーに届ける

推薦システムは特定の目的を達成するためにユーザーに対してアイテムを推薦するシステムです。
目的は例えば広告バナーのクリックの最大化、ECサイトでの商品購入数増加など、様々なものがあります。

推薦システムではそれらの目的を達成するために様々な方法が用いられています。

最もシンプルで良く使われる方法の一つが、人気なアイテムを推薦すると言う方法です。Most-Popular推薦などとも言われます。
この方法は何らかのアクション等に基づいてアイテムなどをランキングし、その上位N件をユーザーに対して推薦すると言う方法です。

ECサイトでは売り上げ数順に並び替えて最も人気なものを推薦したり、音楽配信サイトでは最も再生回数が多いものを推薦したりすることが、このMost-Popular推薦に当たります。

さて、ここでさらにより「良い」アイテム(ユーザー)を推薦する方法を考えていきます。古典的な推薦システムはユーザーやアイテムなどをインプットにしてそれを推薦していきます。アイテムやユーザーもそれぞれそのままでは利用することができないので、「何を目的として」いかに「アイテムやユーザーをコンピューターで利用できる形に変換」して「どのような方法で推薦するか」というのはが大きな取り組みの一つとなります。
何を目的とするかはビジネス的な課題でもあると同時に状況によって様々なパターンが存在します。

3つの素材 アイテム・ユーザー・アクション

古典的な推薦システムは主に「アイテム」、「ユーザー」、「アクション」の3つの情報を活用して推薦を行います。

素材①  アイテム情報

アイテムと言うのは商品や本、音楽、動画などを指します。
本の場合、著者やタイトルと言った「フィールド(ゾーン)」と言う情報を持っています。このような情報を素性と言います。
こうした素性は、うまく変換することでベクトルとして表現することができます。

例えば古典的な検索の課題で触れた単語ベクトルがその例です。
例えば本には値段や著者、出版社、そして本文などの情報があります。
それらをまとめて以下のような素性ベクトルを作ることができます。

画像1

ベクトル化、すなわち数値の配列として表現することができるとコンピューターで様々な計算ができるので大変便利です。

素材② ユーザー情報

ユーザー情報としては公開されているプロフィールを利用することができます。プロフィール情報は主に以下の2つの種類に分けることができます。

人口統計(デモグラフィック)情報
年齢、性別、職業や住んでいる地域などです。

興味・関心情報
自分の興味のあるカテゴリやトピック、キーワードなどを公開することができる場合があり、それらがユーザーの興味関心です。

例えばユーザーのデモグラフィック情報・興味関心はアイテム情報と同様に以下のような形でベクトル化できます。

画像2

素材③ アクション(行動ログ)

アクション情報はユーザーがアプリケーション上で行動した際の情報です。ユーザーとアイテムの相互作用となります。
例えば、ECサイトであればどのユーザーがどのアイテムを購入、クリックしたかなどです。イラスト投稿サイトであれば、どのユーザーがどのイラストをいいねしたとか、どのユーザーがどのイラストを投稿したとか言った情報になります。

推薦方法:ユーザーにとってそのアイテムはどのくらい良い?

ここからは素材として紹介した情報を活用してユーザーに対してより良いアイテムを推薦する方法(どのような方法で推薦するか)を説明していきます。

古典的な推薦では「類似している」ことを目指して、とあるユーザーに対して類似したアイテムを推薦する方法が模索されてきています。
古典的な方法としては大きく分けると以下の3つに分けられます。

・ユーザーとアイテムの「類似度」を測って似ているアイテムを推薦する(素性ベクトルベース)
・とあるユーザーに似ているユーザーが過去に良いとしたアイテムを推薦する(強調フィルタリング)
・上記2つを組み合わせる方法

推薦方法① 素性ベクトルベース(内容ベース)

先ほど見てきたアイテム素性とアクションを活用する方法を考えてみます。
基本的には「ユーザー」と「アイテム」の類似度をいかにうまく測ることができるかと言うことが課題となります。

例えばECサイトなどで良く使われていた方法ですが、ユーザーがかつて閲覧したアイテムを元に、新たなアイテムを推薦するといった方法があります。まずユーザーが過去に閲覧したアイテムを収集し「何らかの方法(例えば平均をとる)」でそれらの素性をまとめます。そうして、それらのまとめた素性と近しいアイテムを推薦すると言う方法です。

画像3

こうして平均本と他の本を比べてどのくらい似ているかを元に推薦を行います。例えば上記の例だと1500円に近いほど良いですし、著者Aの本が良さそうですし、「私」や「焼肉」と言う単語が文章に入っていると良いと言うことになります。

アイテムに対して類似したアイテムを推薦する場合や、ユーザーに対して類似したユーザーを推薦する際にもこのような手法が用いられています。

また、ユーザーの興味関心としてカテゴリやキーワードのようなものが含まれる場合は、アイテムにそれらの情報がどのように含まれているかと言った計算をすることによって推薦を行うこともできます。

推薦方法② 協調フィルタリング

協調フィルタリングの基本的な考えはとあるユーザーと似ているユーザーを取得してそのユーザーの振る舞い(例えば高評価するアイテム)を活用して推薦すると言う方法です。
他のユーザーと協調してアイテムのフィルタリングを行うことから、協調フィルタリングと呼ばれている方法です。

まずはこの方法について理解するために、具体的な課題を考えてみます。ここではAmazonやNetflixなどユーザーがアイテムに対してレイティングするような例を考えてみます。
各ユーザーがアイテムにレイティングをすると以下のようなデータを得ることができます。

画像4

ここで、似ているユーザーを探す方法を考えてみます。
上記の図は行列として考えることができ、各ユーザーのアイテム評価ベクトルを得ることができます。
そこからユーザー間の類似度を取得してとあるユーザーに対して類似するユーザーのリストを得ることができます。

先ほどみたように取得したユーザー群のアイテムベクトルの平均を取ると、ベースとなるユーザーが今までに評価していないアイテムに関してもどのような評価をしそうかということが分かります。

画像5

例えばこの類似ユーザーを取得するベースのユーザーが本D, Eを評価していない場合でも、おそらく4点と評価しそうと言うことでこの情報を用いて推薦することができます。

今回紹介した方法は協調フィルタリングの中でも最も基本的な方法です。
本来は様々な手法によって類似ユーザーを求めたり、欠損している評価データなどを埋めることができたりします。

おわりに

今日は推薦システムの古典的な手法についてその概要を説明しました。
数式をあまり使わないふわっとした説明になっているためサクッと読めるといいなと思っています。

次回は評価などについてお話しようかと思います。

参考図書

こちらに書いてあります。



この記事が気に入ったらサポートをしてみませんか?