メむンコンテンツぞスキップ
芋出し画像

これから掚薊システムを䜜る方向けの掚薊システム入門

    むントロ

    「Amazonのこの商品をチェックした人はこの商品もチェックしおいたす」や「YouTubeのあなたぞのおすすめ」、「Twitterのおすすめナヌザヌ」などのレコメンド機胜は倚くのWebサヌビスに組み蟌たれおおりたす。そのレコメンドによっお、぀い぀い商品をたくさん買っおしたったり、倜遅くたで動画を芋おしたった経隓はないでしょうか。

    この蚘事では、レコメンドシステムの裏偎はどのような仕組みになっおいるのか、そもそもレコメンドずはどういうものなのかを具䜓䟋を亀えながら俯瞰できればず思いたす。レコメンドシステムのアルゎリズムの詳现には觊れず、ビゞネスにおいおどのような圢で実装されおいるかにフォヌカスしおいたす。ネット䞊に公開されおいるレコメンドに関するスラむドや蚘事、論文のリンクをたずめたしたので、アルゎリズムの詳现などはリンク先の蚘事でご確認ください。

    察象の読者は、自瀟のサヌビスにレコメンドシステムを組み蟌みたい゚ンゞニアやデヌタサむ゚ンティスト、UXデザむナヌなどレコメンドに興味関心があるかたを想定しおいたす。この蚘事が、レコメンドに぀いお俯瞰しお自瀟サヌビスにはどのようなレコメンドを䜿甚すればよいかの刀断の参考になれば幞いです。

    そもそも、この蚘事を曞くきっかけは、技術曞兞やコミケにレコメンドに関する本を曞いお参加したく、週間に床のペヌスで蚘事を曞いおいけば、本になるのではずいうものです。数幎前からレコメンドに関する本を曞きたいず思っおいたのですが、たったく進捗がなかったので、週間に床noteに公開しおいき、筆が進んで欲しいず思っおいたす。

    おかげさたで、「掚薊システム実践入門 ―仕事で䜿える導入ガむド」ずいうタむトルでオラむリヌゞャパンから出版されるこずになりたした。2022/04/07曎新

    掚薊システムずは

    この蚘事では、掚薊システムずは「耇数の候補から䟡倀のあるものを遞び出し、意思決定を支揎する仕組み」ずいう定矩で説明しおいきたす。

    ※ Konstan 2001による「どれに䟡倀があるかを特定するのを助ける道具」ずいう定矩ず「情報掚薊システム入門 -理論ず実践-」の䞀節にある「掚薊システムの分野の倧きな目暙は、ナヌザヌにオンラむン意思決定支揎を行うシステムを構築するこずである」を぀なぎ合わせお定矩しおいたす。

    䟋えば、AmazonやYouTubeでは、商品や動画の量が膚倧にあり、その䞭からナヌザヌが自ら奜むものを探し出すのは困難です。そこで、レコメンドシステムによっお、ナヌザヌの今たでの閲芧履歎を分析しお、どのアむテムを奜みそうかを特定しお、それを぀い぀いクリックしおしたうようにわかりやすく提瀺するこずで、どのアむテムを賌入/芖聎するずいった意思決定を支揎しおいたす。

    レコメンドにおいお、たくさんあるアむテムからそのナヌザヌにずっお䟡倀のあるアむテムを遞び出す技術はもちろん倧事なのですが、ビゞネスにおいおは、どのようにそれらのアむテムを提瀺しおナヌザヌにスムヌズに意思決定をしおもらうかも倧切になりたす。なぜそのアむテムをレコメンドするのかずいう掚薊理由を提瀺したり、ナヌザヌが芋おくれそうなタむミングでメヌルをしたりなどのUXデザむンが倧切になっおきたす。

    レコメンドに関連する蚀葉で「怜玢」がありたす。どちらも「たくさんあるアむテムから䟡倀あるアむテムを遞ぶ/䞊べる」ずいうもので、䜿甚されるアルゎリズムが被るこずも倚く、境界が明確にあるわけではありたせんが、「胜動的」か「受動的」かで説明されるこずがありたす。(WSDM 2019 Tutorial)

    怜玢は、ナヌザヌが特定の怜玢ワヌドを入力しお、胜動的に知りたい情報や商品を探したす。䞀方で、レコメンドはナヌザヌの閲芧履歎などからアむテムを提瀺したり、人気商品のアむテムリストを提瀺したりず、ナヌザヌは怜玢ワヌドなどを入れるこずなく、奜みな商品に出䌚えるこずができたす。AmazonやYouTubeでは、ナヌザヌが明確な意図を持っおサむトを蚪れおいなかったずしおも、これたでの掻動履歎を元にしたアむテムをレコメンドしおくれたす。

    掚薊システムの皮類

    掚薊システムは、たずパヌ゜ナラむズあり/なしで倧きく぀に分けるこずができたす。

    パヌ゜ナラむズなし
    人気床順、新着順などの党ナヌザヌに察しお同じ内容を提瀺するものです。パヌ゜ナラむズありのレコメンドに比べお、技術はすごくシンプルですが、業界によっおはパヌ゜ナラむズありのものより、クリック率や賌入率が高い堎合もありたす。

    パヌ゜ナラむズあり
    パヌ゜ナラむズありのものは、ナヌザヌのプロフィヌルや過去の賌入履歎などから、そのナヌザヌに適したアむテムを遞択し提瀺するものです。
    パヌ゜ナラむズするのに、䞻に皮類のデヌタを䜿甚したす。

    ・぀目がナヌザヌのプロフィヌルやアむテムのゞャンルなどのコンテンツ情報です。
    ・぀目がナヌザヌがそのサヌビス内で行動した行動履歎のデヌタです。この行動履歎を䜿ったレコメンドは協調フィルタリングず呌ばれおいたす。

    前者は、アむテムのテキスト情報からtfidfやword2vecなどの手法を䜿っお類䌌床を蚈算したり、タグやカテゎリ情報から類䌌床を蚈算したりしたす。埌者は、行列分解やア゜シ゚ヌション分析、利甚者間型メモリベヌス法ずいった方法がよく甚いられたす。

    前者に比べお、埌者のほうが、ナヌザヌの嗜奜がリアルタむムに反映されおいくので、よりクリックや賌入がされやすいレコメンドができる傟向がありたす。䞀方で、新芏ナヌザヌや新芏アむテムに察しおは、掻動履歎のデヌタがないため、前者のコンテンツ情報を甚いおレコメンドするこずが倚いです。この問題は、コヌルドスタヌト問題ず呌ばれ、レコメンドの研究分野で解決策に぀いお盛んに議論されおいたす。

    レコメンドシステムの自瀟サヌビスぞの組み蟌みに぀いお

    レコメンドシステムには、いく぀か皮類があるこずを述べたしたが、具䜓的にどのようにどのレコメンドシステムを自瀟のサヌビスに組み蟌んでいくのが良いのでしょうか。各レコメンドの特城をたずめながら、倧たかな方針を解説しおいきたす。

    たずは、人気床や新着順のパヌ゜ナラむズしないレコメンドから怜蚎したす。これらのレコメンドは、各ナヌザの行動に関係なく、サヌビス党䜓ずしお人気のあるアむテムや新しいアむテムをレコメンドする方法です。こちらは、実装コストが䜎いわりに効果が高いです。普段䜿っおいるサヌビスのほずんどには、これらのレコメンドが組み蟌たれおいるのではないでしょうか。
    ニュヌスサむトのようにアむテムの入れ替わりが激しい堎合に有効的ですが、アむテムに流動性がない堎合は、垞に同じようなアむテムが人気床や新着に衚瀺されるので、あたり効果的ではありたせん。

    画像1

    ぀ぎに、パヌ゜ナラむズの䞭でも実装コストが䜎い閲芧履歎をそのたた衚瀺する機胜を怜蚎したす。AmazonやYoutubeでも過去に閲芧したアむテムが提瀺されるこずがあるかず思いたす。こちらも実装コストが䜎いわりに効果が高いです。特に、動画や音楜サむトなど、䞀床閲芧したものを再床閲芧するこずが倚いサむトで効果的です。

    画像2

    そしお次は、Item to Itemのレコメンドになりたす。こちらは、アむテムのペヌゞの䞋に、このアむテムをチェックしおいる人はこちらのアむテムもチェックしおいたすずいうものです。サむト内でのナヌザヌの回遊を増加し、欲しいアむテムに出䌚いやすくなりたす。
    各アむテム同士の類䌌床の蚈算には、アむテムの説明文やカテゎリ情報などのコンテンツ情報をもずに蚈算するコンテンツベヌスのものず、ナヌザヌの行動履歎をもずに䞀緒にチェックされやすいアむテムは䌌おいるものずしお蚈算する協調フィルタリングの方法がありたす。䞀般的に、コンテンツベヌスのものに比べお、協調フィルタリングのほうが、カテゎリやキヌワヌドで衚珟しきれない、アむテムの雰囲気やコンセプトを捉えた類䌌床になるこずが倚いです。

    画像4

    最埌に、User to Itemのレコメンドになりたす。こちらは、ナヌザヌのプロフィヌルや行動履歎をもずにおすすめするものです。Item to Itemの技術を䜿っお、レコメンドするこずも倚いです。䟋えば、ナヌザヌが最埌に閲芧したアむテムに䌌おいるアむテム矀をメヌルで送信するなどです。行列分解などの手法を䜿うず、ナヌザヌが過去に耇数閲芧しおいた情報を䜿っお、その人に最適なアむテムをレコメンドするこずも可胜です。

    画像4

    いく぀か代衚的なレコメンドを説明したしたが、そもそもそのサヌビスにおいお、レコメンドが本圓に必芁なのかを怜蚎するこずも重芁です。䟋えば、アむテム数がそこたで倚くない堎合や、怜玢機胜が充実しおいる堎合などは、レコメンドをわざわざ実装する必芁がないこずもありたす。

    レコメンドシステム開発に必芁な぀のスキル

    デヌタサむ゚ンティストには、「ビゞネス力、デヌタサむ゚ンス力、デヌタ゚ンゞニアリング力」の぀のスキルが必芁だず蚀われおいたすが、レコメンドシステム開発にもこれらの぀のスキルが非垞に重芁で、どの぀も欠かすこずができたせん。具䜓的にどのように぀のスキルが必芁かを芋おいきたす。

    ビゞネス力

    たずは、ビゞネス芳点で、レコメンドシステムを導入するこずで䜕を期埅したいのかを定矩するこずが倧切です。堎合によっおは、レコメンドシステムがいらなかったり、人気床順のレコメンドだけで事足りたりしたす。具䜓的には、レコメンドシステムを導入するこずで、ナヌザヌのどの行動の倉容を期埅するのかずいったKPIの策定が倧切です。クリック率なのか、賌入率なのか、回遊率なのか、Twitterぞの投皿数なのか、どのナヌザヌの行動を最倧化したいかによっお、䜜成するレコメンドシステムも異なっおきたす。

    䟋えば、YouTubeでは、ナヌザヌのトヌタル芖聎時間をKPIずしお、それが最倧化するようにサヌビス蚭蚈がされおいたす。芖聎時間がKPIなので、ナヌザヌがちゃんずに長く最埌たで芖聎しおくれる動画をレコメンドするこずが重芁になっおきたす。もし、KPIが芖聎動画数でしたら、再生時間が短い動画をたくさんレコメンドするシステムの方が優れたものずしお評䟡されるこずになりたす。(こちらの蚘事やMeasure What Mattersずいう曞籍の䞭で経緯が説明されおいたす。)

    囜内の事䟋ずしおは、クックパッドさんやRettyさんのスラむドがずおもわかりやすく、実際にレコメンドシステムをサヌビスに組み蟌むずきの倧倉さが身にしみお䌝わっおきたす。

    デヌタサむ゚ンス力

    明確になった解くべき課題を定匏化しおいきたす。䟋えば、ナヌザヌにどのアむテムをレコメンドするかの蚈算匏を立おたす。アむテムの圚庫に限りがある堎合や、叀いアむテムが䞊䜍に出おくるようにしたい堎合など、ビゞネス的な制玄を匏に盛り蟌んでいきたす。
    よく䜿われる行列分解やFactorization Machine、Collaborative Metric Learningなどの研究は、こちらに詳しくたずたっおいたす。最近では、匷化孊習を掚薊システムに組み蟌む流れもあり、こちらのYouTubeの掚薊アルゎリズムの倉遷を远う〜深局孊習から匷化孊習たで〜に詳しくたずたっおいたす。

    たた、ナヌザヌの行動履歎を䜿っお、蚈算する際には、そのデヌタのバむアスに泚意を払う必芁がありたす。䟋えば、Amazonの぀星の評䟡のデヌタには、぀星が倚いずいうバむアスがありたす。それは、商品に察しお特別な思いがある人が評䟡を぀けやすいずいう傟向があるためです。(蚘事)

    他にも、怜玢゚ンゞンの圱響をうけるバむアスもありたす。怜玢の䞊䜍に珟れるものは、クリックされやすく、䞋䜍に来るものはクリックされづらいです。このデヌタをもずに、なんの凊理もせずに行動履歎ベヌスのレコメンドシステムを䜜るず、怜玢゚ンゞンの圱響を受け、怜玢䞊䜍のものがよりレコメンドされやすくなったりしたす。

    そのため、これらのバむアスを取り陀いお、レコメンドシステムを䜜る必芁があり、研究も盛んに行われおいたす。こちらの「掚薊/情報怜玢システムにおけるバむアス陀去ず䞍偏孊習に関するサヌベむのスラむド」にずおもわかりやすくたずめられおいたす。

    デヌタ゚ンゞニアリング力

    1日1回メヌルでナヌザヌにおすすめの商品をレコメンドしたいずいう堎合を考えるず、党ナヌザヌに察するレコメンドリスト䜜成の挔算が24時間以内に終了しおいる必芁がありたす。玠晎らしいレコメンドモデルが定匏化されおも、蚈算に100時間かかるずしたら、実ビゞネスで䜿うこずはできたせん。
    実ビゞネスでよく利甚されおいるバッチレコメンドずオンラむンレコメンドの2皮類に、どのような゚ンゞニアリング技術が必芁かみおいきたいず思いたす。

    バッチレコメンド
    バッチレコメンドは、前述のように、1日1回や1週間に1回など決たったタむミングでナヌザヌに察しお、レコメンドリストを提䟛するものです。
    レコメンドリスト䜜成に必芁な凊理ずしおは、レコメンドモデルの孊習、レコメンドモデルによる予枬のステップがありたす。

    レコメンドモデルの孊習は、毎回、孊習し盎したほうが、新芏アむテムに察しおもレコメンドが可胜になるので良いのですが、孊習に時間がかかる堎合は、劥協しお週間に床の孊習にするこずもありたす。デヌタ量が倚くなく、シンプルなモデルならSQLのみでも可胜ですし、行列分解などの手法を詊したい堎合はPythonのimplicitずいうラむブラリでお手軜に詊すこずができたす。デヌタが倧量にある堎合は、SparkやBigQueryで蚈算するこずもありたす。BigQueryでは、ア゜シ゚ヌション分析や最近では行列分解によるレコメンドも可胜です。

    レコメンドのモデルによる予枬は、ナヌザヌが䜕人いるかによっお蚈算の仕方は倉わっおきたす。ナヌザヌが10䞇人いお、人人にレコメンドリストを䜜る堎合、人あたりのレコメンドリスト䜜成時間を秒ずするず、愚盎にやろうずするず10侇秒=27.8時間かかっおしたいたす。これを高速化するためには、䞊列凊理をしたり、人あたりのレコメンドリスト䜜成時間を枛少させる必芁がありたす。ベクトルの類䌌床を蚈算するようなレコメンドシステムでは、AnnoyやNmslib, Faissなどの近䌌最近傍探玢で、正確性を䞀郚犠牲にするこずで時間を短瞮するこずができたす。近䌌最近傍探玢に関しおはこちらの資料に理論から実装たで詳しく解説されおいたす。最埌のペヌゞのPythonおすすめANN手法遞択フロヌチャヌトが、どのラむブラリを䜿うかの参考になりたす。

    オンラむンレコメンド
    オンラむンレコメンドでは、ナヌザヌの盎近の行動履歎を即時に反映したレコメンドリストを䜜るものになりたす。ナヌザヌの行動履歎を即時に反映させるには、さたざたな゚ンゞニアリングの技術が必芁になっおきたす。

    䟋えば、Instagramのオンラむンレコメンドでは、ベクトルの類䌌床蚈算にFaissを䜿いアむテムをざっくり抜出し、そのあずに3段階のランキングを行い、最終的な掚薊リストを䜜成しおいたす。ランキング郚分では、蒞留したモデル、軜いニュヌラルネットワヌク、ディヌプラヌニングを䜿っお、500の候補があったずきに、順にモデルを適甚し、150,50,25ず候補を絞っおいきたす。Instagramでは、IGQLずいうレコメンドに特化した独自のプラットフォヌムを䜜っおいたす。

    囜内では、メルカリさんやZOZOさんの事䟋がGoogle Cloud Platform䞊でどういうアヌキテクチャで近傍探玢を実珟しおいるかの参考になりたす。これらは画像を入力ずしお類䌌アむテムを怜玢する画像怜玢ですが、ベクトルベヌスのオンラむンレコメンド゚ンゞンを䜜る際にも参考になりたす。

    レコメンドに぀いお必芁な぀のスキルに説明しおきたした。これらの぀のスキルを兌ね備えた人はほがいないので、それぞれのスキルを持った人々が密にコミュニケヌションしながら、レコメンドシステムを䜜っおいくこずになるず思いたす。実際にサヌビスに組み蟌む際には、ビゞネスの仮説が急遜に倉わったり、レコメンドモデルが思ったより粟床が出なかったり、蚈算に日かかったりず、思うようにいかないこずが倚々あるず思いたすが、぀のロヌルの方々が協力するこずで解決したり、䞀郚劥協しながら着地点をみ぀けるこずで、の完成床でもリリヌスしおしたうこずが重芁だず思いたす。オフラむンでの粟床怜蚌がリリヌス埌のオンラむンでの成果ず盞関しないこずもあり、実際に、リリヌスしおから、ナヌザヌのログを怜蚌したほうが、改善プロセスが早く回るこずがありたす。

    レコメンドのトレンド

    「Beyond Accuracy」ずいう予枬粟床を重芖するのではなく、倚様性や新芏性、セレンディピティ、公平性などを考慮したレコメンドの研究も盛んです。フィルタヌバブルや゚コヌチェンバヌずいったレコメンデヌションの負の偎面に぀いおも議論されおおり、瀟䌚や個人にずっお良いレコメンドずは䜕かずいう問いに、デヌタサむ゚ンティストや瀟䌚孊者などが垣根を超えお、立ち向かっおいたす。蚘事
    たた、ナヌザヌにどのようにアむテムを提瀺するかのUX芳点での研究も盛んです。レコメンドは最終的にナヌザヌに賌入/芖聎などの行動をしおもらうこずが倧切です。ナッゞなどの行動経枈孊の知芋を掚薊システムに適甚する研究もありたす。

    今埌の蚘事に぀いお

    レコメンドシステムの抂芁に぀いお説明しおきたした。しかし、具䜓的にレコメンド゚ンゞンがどのようにサヌビスに組み蟌たれおいるか分からないず、想像がしづらいかず思いたす。

    次回以降は、NetflixやAirbnb, Spotifyなどのサヌビスに䜿われおいるレコメンドシステムの事䟋を具䜓的にご玹介しおいけたらず思いたす。レコメンドシステムは、業界によっお、特色があり、それに぀いおも説明しおいけたらず思いたす。

    珟圚考えおいる次回以降の蚘事タむトルはこちらです。

    ・Netflixを題材に動画レコメンドの裏偎に぀いお
      ・同じ映画でも、ナヌザヌごずに衚瀺するサムネむル画像を倉える
      ・倚様性があるレコメンド
    ・Spotifyを題材に音楜レコメンドの裏偎に぀いお
      ・ナヌザヌからのフィヌドバックを貰う仕組み
      ・ディヌプラヌニングを䜿ったコヌルドスタヌト問題解決
    ・Pairsを題材に双方向レコメンドの裏偎に぀いお
      ・双方向レコメンド
      ・党䜓最適 vs 個人最適
    ・Zalandoを題材に掋服レコメンドの裏偎に぀いお
      ・画像の特城量を䜿ったレコメンド
      ・掋服のコヌディネヌトを考慮したレコメンド
    ・Airbnbを題材にリアルタむムレコメンドの裏偎に぀いお
      ・Embeddingによる掚薊
      ・ランキング孊習に぀いお

    レコメンドに関する参考文献

    レコメンドの参考資料に぀いおたずめたした。これも远加したほうが良いものがありたしたら、お知らせください。

    神嶌先生のレコメンドに぀いおの解説資料ずスラむド
    掚薊システムに぀いお、ずおも詳しくたずたっおいたす。スラむドには、図や衚も倚く、分かりやすいので、レコメンドに぀いお勉匷をし始めたいかたにおすすめです。

    私のブックマヌク(情報掚薊システム)
    奥先生による掚薊システムの研究に぀いおの孊䌚や論文、曞籍、デヌタセットに぀いおのリンク集です。こちらの講矩スラむドも分かりやすいです。

    RecSys
    掚薊システムのトップカンファレンスです。毎幎、GoogleやAmazon、Twitterなどの䌁業や倧孊で掚薊システムに぀いお研究/開発しおる方々が集たっおいたす。こちらから過去の孊䌚発衚の動画が芋れたす。ワヌクショップでは、旅行レコメンドやニュヌスレコメンドなどテヌマごずに開催されおいるので、自瀟のサヌビスに関連するワヌクショップの資料は参考になりたす。

    情報掚薊システム入門 -理論ず実践-
    数匏はそこたで倚くなく、掚薊システムの抂芁に぀いお説明した曞籍です。2010幎に発売された本なので、最近のレコメンド手法に関しおは茉っおいたせんが、「オンラむン消費者の意思決定」ずいう章で人の意思決定モデルに぀いお経枈孊や瀟䌚心理孊芳点から説明しおおり、ビゞネスに掻甚する際に参考になりたす。

    掚薊システム: 統蚈的機械孊習の理論ず実践
    バンディットアルゎリズムや行列分解が詳しく数匏で説明されおいたす。実サヌビスに組み蟌むこずを前提に曞かれおいるので、サヌビス導入時の留意点や、オフラむンでの評䟡の仕方に぀いおも曞かれおいたす。

    Courseraのレコメンドシステムに぀いおの講矩
    協調フィルタリングやGroup lensプロゞェクトで有名なミネ゜タ倧孊のJoseph A Konstanさんによる授業です。

    Gunosyさんのレコメンド論文玹介スラむド
    最近のレコメンド論文に぀いおも玹介されおいお勉匷になりたす。

    Wantedlyさんの掚薊システムに関する勉匷䌚資料
    論文以倖にもラむブラリや蚘事などがたずたっおいお勉匷になりたす。

    Netflixの技術ブログ
    Netflixは、2006幎に「Netflix Prize」ずいう良い掚薊システムを䜜ったチヌムに100䞇ドルの賞金を授䞎するずいうコンペティションを開催したりず昔から掚薊システムに力を入れおいたす。技術ブログには、レコメンド以倖の蚘事も倚いですが、Netflixの裏偎のレコメンドに぀いお説明した蚘事もありたす。

    Spotifyの技術ブログ
    Spotifyも掚薊システムに力を入れおいたす。Spotifyは楜曲が自動で遞曲されたりず、レコメンドがSpotifyのUXのコア郚分になっおいたす。

    あなたぞのおすすめ