メルカリ商品検索のUI/UXと新たな挑戦
森山大朗 氏(以下、森山):みなさんこんばんは。メルカリで検索の責任者をやっています森山大朗です。今日は、光栄にもログミーTechの記事を見ていただいたことがきっかけでこの場を作っていただいたということなので、がんばって話そうかなと思います。
メルカリで検索やAIを活用しながらお客様の体験を改善するというテクノロジー系のプロダクトマネージャーというのが、僕の役割なんじゃないかなと思いますが、前職では求人検索アプリをゼロから立ち上げて、検索エンジニアとして検索精度の改善に熱中していました。
最近、メルカリで開発をがんばっているのはレコメンデーションですね。お客さまが「自分で検索しなくても勝手に検索して差し上げる」のがレコメンデーションだと思うので検索と似ているのですが、今は優秀なエンジニアを集めて、鋭意改善中です。
最近のメルカリについて簡単にご紹介します。GMV、総取引額は5,307億円で、まだまだ伸び続けています。
また「あと払い(メルペイスマート払い)」が始まって、メルペイを使っていただいている方はお取引実績に応じて買い物ができます。先にお金が貸し出されるという非常に便利なサービスでして、僕は毎日サラダとゆで卵を買うんですが、ほとんどメルペイで精算しています。
一方のUSは、Facebookから来たジョン・ラーゲリンがCEOなのですが、すごく事業を伸ばしていて、こちらも大きく伸びています。
あとは最近あの鹿島アントラーズがメルカリグループに入りまして、いつの間にか社長だった小泉がアントラーズの社長になるというまさかのサプライズが……。
(会場笑)
とはいえ、アントラーズのファンのみなさんやサポーターのみなさんにもたくさんメルカリを使っていただいているので、非常に良いシナジーになるんじゃないかと思っています。
そして、なんといってもメルカリには非常にオープンな企業文化があります。
たとえば昨日メルカリで開催していた「Bold Challenge」というイベントで、メルカリCTOの名村と、メルペイCTOの曾川が、非常にオープンに発言をしていたそうです。
「グローバルテックカンパニーを目指すって言ったことを後悔している」と。
(会場笑)
いま、英語で仕事をしている人も増えていたり、モノリシックなAPIをマイクロサービスに切り出している最中で、すごく大変なのです。
ただ、こういった話もオープンにできるカルチャーを僕は気に入っていて、これはOPENNESSと言っているんですけど……。あ、もしよかったら写真を撮ってもらってもいいですか? 僕、OPENNESSのポーズを取るので。
(会場笑)
実は、社内のSlackで「オープンネスくれ」と書くと、うちのNaoki(注:青柳直樹メルペイCEO)のOPENNESSのポーズした画像が出てきて、スタンプも作られたりしています。
CPOの伊豫健夫も、カンファレンスでOPENNESSのポーズやっています。
いい大人が遊んでばかりですみません、うちでこれ流行ってるんでやってみたくて(笑)。
(会場笑)
メルカリの検索チームが取り組んでいた3つのこと
さて、そろそろ本題に入りましょうか。
前回お話したメルカリの検索改善の話は、ニッチな話なのにバズって非常にうれしかったのですが、大事なポイントは3つでした。
1つ目はメルカリの検索チームがおもしろくなっていて、すごいエンジニアが集まってきているという話。2つ目はSold商品が検索結果にあって邪魔だと怒られるのですが、わざと出している理由があるという話。
そして3つ目は、いわゆる普通の検索改善のやり方、アカデミックな情報検索の改善のやり方をそのまま適用してもダメで、それはなぜなのかという話をしました。
今日は、その後日談をお話しようと思います。
検索チームはその後どうなったのか?、あとはSold商品の話とはまた別に、現在検索結果のUIを一部変えているケースがあるんですね。それはなぜなのかというお話をします。最後に、ここから新しいチャレンジが進行中なんですが、その話をいくつかしたいと思います。
メルカリ検索チームと検索改善の成果
現在、Google、ヤフー、楽天、リクルートからメルカリに検索エンジニアがジョインして来てくれています。
Google以外は僕が直接OSSの勉強会に行って口説いて採用するみたいな、多少アグレッシブなアプローチもしました。『Apache Solr入門』の共著者の半分がメルカリに参画して非常に楽しいです。
(会場笑)
グローバルなメンバーとしてはIITというインドの優秀な大学を卒業したエンジニアの方がいて、非常に良いチームになってきています。
では、その後、そのチームがどういう成果を出したのか?
これは2019年9月19日時点での結果なんですが、見事に検索結果が改善され、ビジネスインパクトが出ています。
とくに購買転換率が、ABテストの結果、旧検索基盤に比べて数パーセント数値が上昇しています。
検索結果からより商品を閲覧する確率が上がり見て、そこから買う人が増えている。ゼロマッチ(検索結果ゼロ)に遭遇する確率が減っていますし、なんなら出品行動もちょっと増えているという結果です。
「検索を改善すると購入だけじゃなくて出品も伸びる」というのが、メルカリらしいところなのですが、再度ご説明すると、メルカリの検索結果って「nintendo switch」という同じキーワードの検索でも、買いたいと思っている人の目線と売りたいと思ってる人の目線が混ざっちゃってしまっています。
売りたいと思っている人はSoldアイテムとかの値段を見て「今俺任天堂Switchいくらで売れるのかな?」というのを見ているのですが、一方で、買おうとしている人はSoldのものではなく、売っているものを見て「いくらで買えるんだろう」と考えています。この2つの意図が、まるで光と影の関係のように、1つの検索結果に同居していることに、ある時気が付いたんですね。
なので、検索改善のビジネスインパクトを計算するときは、総取引額は訪問者数×購入転換率×単価だとして、訪問者数と平均単価は検索精度改善ではあまりコントロールできないので固定で置いておくとして、購入転換率と出品転換率が統計的に有為に上がっていれば、このぐらいの収益インパクトは出たのではないかという試算をしています。
検索精度を改善するためのアプローチ
では、具体的な精度改善のアプローチとして何をしたかというと、わりとオーソドックスなことをやっています。
精度改善以前は、Soldのマスタのスレーブ構成のキャッシュをめっちゃ立てて、あまり検索させたくないというアプローチで急成長する莫大なリクエスト負荷に耐えていたのですが、それだとちっともスケールしないことがわかっていたので、Kubernetesの上にElastickSearchを載せました。分散システムの上で分散しているみたいなものなので、うまくいくかどうかはわからなかったのですが、結論、けっこう速いです。
その他には、形態素解析の改善です。実際にメルカリで出品があったらインデクシングする経路と、お客さんがキーワードを打ち込んで検索するという経路の2つがあります。検索キーワードはシンプルな単語で検索するけど、出品されている商品名は文章が長かったりするので、マッチングが上手くいかないケースが出てくるという、まさに形態素解析の問題ですよね。分かち書きの仕方が変わってしまうリスクを軽減するために、今回は辞書をKuromojiからunidicに変えています。
目的は「unidic」はけっこう細かく切る辞書なので、その切り方がインデクシング時と検索時でズレが基本的に起きにくい。それが目的です。辞書を使ってトークナイズして、実際にクエリを拡張します。
そのあとフレーズ化すべきものは、分割してからもう1回くっつけるということをクエリ側でやって検索します。そのためのクエリ拡張やシノニム展開みたいなところは、あらかじめクエリ解析をした上でやるのですが、
そして、最後にリランク(並べ替え)をします。リランクと言ってもそれほど大げさなことではなくて、過去のデータからキーワードとクリックされたカテゴリとの相関から、このカテゴリに属する商品を、このキーワード検索の場合はなるべく上に上げたほうがいいんじゃないか、と自動でブーストしているくらいですね。
関連性よりも大切なこと
ただ、メルカリの場合は、リランクは気を付けないと、逆にKPIが悪化します。理由は前回もお話したのですが、この2つの違いはわかりますか?
ちょっと難しいお題だったので、検索のエンジニアの方で答えられた方はいなかったのですが、ほとんど同じ検索結果で関連性もたっぷりあるのに、なぜ一方だけクリック数レートが1/10になっているのか。
理由は、「新着性を失っているから」です。右は関連スコアベースなので、表示された結果が比較的固定されてしまっているんですね。一方で、左はスコアの付け方で新着性を重視しているので、何回も検索するとどんどん検索結果が変わっていきます。出品が多いキーワードのエリアほど、情報の鮮度がビジネスに対してインパクトがあるという話でした。
しかもGoogle検索とは、UIも違います。Google、Yahoo等の一般的な情報検索は、1ページ目の上から10個のうち、だいたい3つから5つぐらいまでで興味があったものをクリックしてページに飛んで満足したら終わりですが、メルカリの場合はスマホのでファーストビューで3×4=12個が最初に目に飛び込んできて、しかも写真と値段しか書いていません。
それをバーッとスクロールして下まで読んで、また戻ってくる。どちらかというと「文字を読む」というよりは「絵を眺めている」という状態に近いですね。けっこう縦方向に長く眺めてくれているので、いわゆる一般的なランキング予想結果の評価指標であるNDCG(Normalized Discounted Cumulative Gain)のように、上のほうに関連性スコアが高いものを出せば出すほど、検索結果の品質が高いということを、そこまで重視する必要はありません。
メルカリでは、クリックするエリアが上から下まで均等に分散していて、31位ぐらいまでいっても1.337という結果になっていて、Googleとは大違いですね。Googleは10位に表示されたらクリック率がすごく低くなっちゃうので。
これが、メルカリの検索改善を考えるときの問題設定の特徴です。
メルカリの検索で重要な4つのポイント
まとめると、僕が非常に重要だと思っている要素は、まずは表示スピード。これを落とすと全てが一気に悪化するので、表示速度を落とさないことが一番大事です。その上で、アルゴリズムでは新着性を保つこと。その上で、キーワードから推定できる意図に対して必要十分な商品候補を検索indexから取り出して、最後に検索意図と関係ないものを抜いていく。こういう優先順位で考えてます。
余談ですが、最近だとGoogle検索結果のSnipetという表示エリアではニュースに反応できるように、新着性を重視するアップデートを行ったという発表話がありました。時代が僕に追い付いてきたのかなという感じがありますね(笑)。
次に、社内では「Head-Torso-Tail分析」と呼んでいるグラフをご紹介します。
このグラフ、実は対数で数字のスケールを縮めています。実際に検索数で超人気キーワードと超ロングテールの数字を並べて、実数でグラフを描くと、こんな綺麗にはならないんですよ。ただの巨大な細いL字型みたいになるので、メルカリではヘッド(超人気キーワード)がすごく検索されてる一方で、ロングテールキーワードが長い構造で、その中間がないんですね。
こうやってわかりやすくエリアを3分割して、メルカリの新しいアルゴリズムや検索基盤がどのキーワードのエリアで勝ったり負けたりしているのかを大雑把に分けて分析しています。
軽トラックの検索UIを考える
さて、2番目のトピックである「検索UIを一部カテゴリで変更したのは理由があります」について。この3つの検索結果を見比べてみてください。
「レディーストップス」「ニンテンドースイッチ 本体」「軽トラック 本体」。メルカリで軽トラックは地味にけっこう検索さてれいるんですよ。
(会場笑)
意外な感じがするんですけど。この並びをちょっと覚えておいてくださいね。
さて、それぞれ検討中に頭の中で何を思い浮かべました? レディーストップス、Nintendo Switch、軽トラ。どうでしょうか? みなさんは、欲しいものがちゃんと探せそうですか? 僕は個人的に、この中だったら軽トラの検索結果は、欲しいものを探すのが難しいと思っているんです。
結論から言うと、右のUIに検索結果を変えました。
自動車本体のカテゴリ絞り込みが入っているときだけは、それをシグナルにして縦3列を、縦1列になるよう挙動を変えました。何が起きたかというと、クリックするレートが下がりました。はい。下がると思ってました。でも、それでいいと思っています。なぜならば、「なんでクリックするか」という背景が違うからなんですよね。
CTRが高いとしても、良い結果だとは限らない
本当に軽トラを買おうとしたことがある人はこの中にいますか?
(会場笑)
いないですよね(笑)。さて、答えを言いますね。要するに「一体誰が、この軽トラの見た目がひたすら並んだ写真を眺めたいか」という話なんですよ。「デザインいいわ〜」とか「こっちの軽トラの顔がめっちゃクールだ」とかありますか? 軽トラはだいたい軽トラじゃないですか。
(会場笑)
軽トラをメルカリで買おうとしている人にとって大事なのは、どこのメーカーの軽トラなのか、スペックはどうなのか? という点です。年式とか走行距離、他にはどこに住んでいる人が持っているのか。遠方から運ぶよりも近くの方が、配送料も安いですしね。
通常の縦3列の検索結果は、写真を見てパッと多くの比較できる情報が認識できるような商品の場合には良いんですよ。ファッションアイテムは「こんなデザインなんだ。いくらなんだ〜」と、写真から伝わってくる情報が多いじゃないですか。Nintendo Switchも、スペックがバラバラということはないじゃないですか。でもトラックはそうじゃないんですね。見た目はほぼ同じなのに、スペックがバラバラで、そこが比較対象なんです。
つまり、この検索UIだと比較すべき情報がわからないからクリックしてるのであって、興味に合致するからクリックしているわけじゃない、という点に気がつく必要があります。
なので、単純にクリック率が高いから軽トラの検索結果はいいはずだと、データだけを見ていてもダメで、その指標が動いたらそれが何を意味しているのかは、クエリ(キーワード)ごとに見なければいけないということが、このケースの気付きです。
新しい検索技術への挑戦
そして、最後にご紹介するのは、僕らの新しい挑戦について。画像を使った類似度検索の技術的応用例です。
これはキーワード検索ではありませんが、メルカリは必ず出品に画像が付いているので、画像特徴量を抽出してk-近傍法検索ができるようにして、それをさまざまな形で応用してお客様の体験を改善できるようにしています。
最初にリリースされのは、出品時に写真を撮ったらそれが何なのかサジェストして当てるというものです。
バーコードが入っている場合は簡単なんですが、写真や本の場合はほぼバーコードが入っているので、それを読み取って自動で情報を補完して、あとは金額入れておしまいです。タップ2、3回で簡単に出品ができます。一番面倒くさい出品作業を楽にするのが狙いですね。
こうやって写真を撮ると、サジェストが出て、選んだら「はい終わり!」みたいな超シンプルでストレスがない体験を作っています。
一方で、インスタで写真を見ていて「商品名がわからないからどうやって探したらいいかわからない」という女性若年層のニーズに応えるために、実験的に出したのが「写真検索」機能です。
市場のダイナミズムを用いて売買を後押しする
あとは、物を売りたくなったり買いたくなったり、そういった気持ちを「集合知」の力で後押しするようなアプローチができないかということで、今後いくつかチャレンジしたいことがあります。
例えば夏に、あるクラスタの女性群が、浴衣を探したあとにカゴバッグを探していた、ということがデータからわかりました。浴衣とカゴバッグってコーディネート的に合うので、それをレコメンドするとか。
一方で、商品カテゴリーごとに、多くのお客さまがどれくらいの閲覧総時間を投入したかというヒートマップみたいなものを出して、それが急激に上がったら何かが起きている証拠なので、他のお客さまにそれを通知するということをリアルタイムでやりたくて。
なぜなら、テレビ見た後に、メルカリですぐ探すということをしているお客さまがたくさんいて、メルカリ検索には世の中のトレンドが出るんですよね。そういうデータを活用したアプローチに可能性を感じています。
ということで、以上になります。
メルカリはエンジニアが足りませんので、ぜひ仲間になっていただければと思います。UIもカスタマイズをどんどんしますし、検索技術はけっこう応用例が広いので楽しいです。
以上です。ありがとうございました。
(会場拍手)