Cookpad Product Kitchen #4 ユーザー体験を支える検索・マッチング技術 検索の規模感
年間12億セッション
毎日30万通り
つくれぽの検索
のせる人 と さがす人 をつなぐ
レシピの50%は、既存のレシピをアレンジしたもの
ユーザーによって多様なアレンジがされる
プレミアムサービス
検索機能アップ
献立を楽に決める/レシピを増やす
ランキング
コミュニティのために新着順を重視
「見つかりそう」な印象が大事
関連検索を利用し先回りして検索
リランクする
関連検索
過去の検索行動から、次に何を検索するか、を出している
左側に表示している
人気順
クエリとレシピの関連性も大事
前日のクリック情報を元にリランクする
関連のあるキーワードを出すことで、新たな発見を促す
検索基盤
Solr + Rails
詳しくはテックブログを読んでね
Solr のフィールド数が 100 以上
DWH から SQL で定義されている
辞書
Rails Gem (Rails + GDBM)
GDBM: 枯れた KVS らしい
世にある検索フレーズの全てを知るテーブル
分かち書きの意義
鰹 vs 鰹節 問題
「鰹」で検索すると、鰹節のレシピばかり出てくる
ログの分析
全てのデータとログが一元化された DWH
Redshift
関連検索、オートコンプリート、辞書のデータ……全てのデータを格納している
これからやりたいこと
セッション分析の精緻化
遠いコンバージョンに対して、どう最適化するか?
マッチングの最適化
UI/UX の改善も含む
より多くのレシピ作者に再び投稿してもらうためには?
リピート率を増やしたい
コンテキストに合わせた検索
使っている人の属性/シーンの多様さに対応したい
株式会社メルカリ Director of Search 森山 大朗さん クックパッドは書類選考で落ちた
前は indeed をゼロから立ち上げてた
最近はメルカリで recommendation チームを発足した
recommendation とは、お客様からのクエリがなくても勝手に検索してくれる機能
メルカリの指標
GMV: 5,307億円 (年間流通額)
売上高: 516億円 (10%)
検索を改善すると購入だけでなく出品も増える?
メルカリの検索結果
買いたいと思ってる人の目線/売りたいと思ってる人の目線 が混ざっている
具体的な制度改善のアプローチ
オンプレに Solr 立ててる構成では耐えられなかった
Elasticsearch を Kubernetes で構成している
辞書を kuromoji から unidic に変更している
細かく切る辞書
ただし、メルカリの場合はリランクは気をつけないと KPI が悪化する
関連性を高めると検索結果が荒れてしまう
新着性が重要だから
新しい検索基盤が、どのエリアで古い基盤に勝っているのか/負けているのかを分析した
Tross-なんとか-かんとか分析
検索 UI を一部カテゴリで変更しているのはなぜか?
CTR 高ければ良いというわけではない
「軽トラ + 本体」で検索したとき
画面にたくさん並べるのではなく、縦長で表示するようにした
写真を見てパッと判断できるようなカテゴリなら、たくさん並べる UI で良い
画像を使った類似度検索の技術的応用
出品を楽にする
バーコードとかあれば一発
本とか
A/B テストいろいろやってる
検索する前に、売りたくなる/買いたくなるようにアプローチできないか?
検索履歴からカテゴリごとにユーザーの行動ログを分析する
e.g. 夏は「着物 + カゴバック」の検索が増える
株式会社エウレカ Search & Discovery Expert 小島 広樹さん Pairs におけるデータ活用
検索アルゴリズム
投稿監視
画像認識
不正ユーザー監視
検索アルゴリズムによるコミュニティ形成
検索機能について
ユーザー検索
条件検索
コミュニティ内検索
ピックアップ機能
プライベートモード
位置情報検索
居住地による検索は前からできた
現在地からの距離で検索できるようになった
機械学習
内製したり
東京大学の研究室と共同研究してる
データロボット
Amazon Rekognition
検索システム
Go / MySQL / Elasticsearch
表示させないユーザーの扱い
ユーザーによっては、他のユーザーをたくさんブロッキングしている
まず、 Elasticsearch のクエリでフィルタリング
その後、検索結果をさらに MySQL のデータでフィルタリング
検索におけるレコメンド
検索の課題感
絞り込みすぎると相手が見つからない
相手とかけ離れすぎているとマッチングしづらい
条件によっては新しいユーザーが表示されづらい
検索結果に装ってレコメンドを出している
検索クエリから関連検索してる
検索結果に意外性を出す
検索するたびに新しい結果が出る
必ずしも「検索条件 = ユーザーが本当に見つけたいお相手」ではない
検索条件から少し外れても、より良い出会いを提供したい
印象的なツイート
パネルディスカッション
効果測定・KPI
特に、ユーザー間のマッチングのなかで、どちらかを立てればどちらかが立たない、という状況のなかでどのような指標を重視するのか?
クックパッドでは、明示的なフィードバックを重視している
メルカリは A/B テスト大好きカンパニー
A/B テスト自体をサイエンスしている
A/A テストをめちゃくちゃやる
何回やっても勝ったり負けたりぶれてる指標があれば、信用できない
e.g. AOV 平均購入単価
外れ値をどこで切るかで、ぶれたりする
指標をどう捉えれば安定するのか、を試しながら出していく
検索のなかでパーソナライズはやってる?
クックパッドはやってない
メルカリはやってない
やろうかな〜という感じ
同じ言葉でも違う商品を出す場合がある
e.g. MAC
コンピューター/化粧品
エウレカでは、具体的には言えないが、やってる
形態素解析の辞書はどうしているか?
クックパッド: MeCab
ipadic + user dictionary
ユーザー辞書にとても頼っている
スクリーニングはあるが、自動的にユーザー辞書に登録されていくことはない
気づいたら手で直している
メルカリ: kuromoji -> kagome + unidec
クドウ先生 (工藤拓さん?) の本で推奨されていた 短い単位で区切って辞書を運用している
検索の再現率を高める
辞書の更新
手運用でがんばる -> だるすぎてやらなくなる
自動化しようとしている
エウレカ: 言語圏で辞書は変えてる
ランキングはどうやって決定しているか/ランキングの位置によるバイアスはあるのか?
クックパッド: 新着順/人気順
人気順だと、上位1〜3に集中する
メルカリ: 新着性を重視しているが、新着順だけではない
クエリから同義語に拡張して投げている
ロングテールでは関連性がある程度高い
多く検索されているクエリでは新着性を高く重視する
スコアにこだわりすぎると KPI が落ちる
位置によるバイアスがあまりない
エウレカ: 上の方が見られる率が高い
マルチプラットフォーム (PC/mobile)のサービスだと、どう運用しているか?
クックパッド:
新着順では、あまり区別していない
人気順では、プラットフォームごとであまり変えていない
ただ、ユーザーは同じような人たちがいるだろうなという想定で考えている
メルカリ: ほぼ mobile
エウレカ: 基本的には全部一緒