Slide 1

Slide 1 text

© 2023 Cookpad Inc. クックパッド 検索結果新着順の改善 クックパッド株式会社  レシピ事業部 重久直輝

Slide 2

Slide 2 text

● 重久直輝 ● クックパッド株式会社2022年新卒 ● レシピ事業部サーバーサイドエンジニア ● 料理好き ● 日本酒もっと好き ● 最近猫を飼い始めました © 2023 Cookpad Inc. 2 自己紹介 @naoki_shigehisa @naoki-shigehisa

Slide 3

Slide 3 text

● 新着順検索結果をユーザーの行動ログを利用して改善 ● RedshiftとDynamoDBを活用してシュッと実装 ● 特に改善できたクエリでは、レシピへの遷移率が 約 35% → 50% と大きく上昇 © 2023 Cookpad Inc. 3 3行まとめ

Slide 4

Slide 4 text

● プレミアムサービスに登録していないユー ザーが見れる唯一の検索結果 ○ クックパッドを使うユーザーのほとんどが 目にする ● 基本的には検索にヒットするレシピをシンプル に新しい順で見せていた © 2023 Cookpad Inc. 4 クックパッドの新着順とは Web app

Slide 5

Slide 5 text

● ユーザー投稿物のため、どうしても品質にはばら つきがある ○ なかなか良いレシピに出会えない... ● しかし確実に新着順に掲載されることがレシピ投 稿者の強いモチベーションになっており、下手に手 を入れることができていなかった © 2023 Cookpad Inc. 5 新着順の課題感

Slide 6

Slide 6 text

● クックパッドを使うほとんどのユーザーが見る 検索結果新着順の品質を向上 させること ● ただし、レシピ作者のモチベーションは失わないようにしたい © 2023 Cookpad Inc. 6 施策の目的

Slide 7

Slide 7 text

● 新着順の品質を向上させたい ➡ 新しいレシピの中で、ユーザーの反応が良いレシピを選定して表 示 ● レシピ作者のモチベは失わないようにしたい ➡ 選定したレシピと本来の新着レシピを混ぜて表示 © 2023 Cookpad Inc. 7 実現方法

Slide 8

Slide 8 text

● 1ヶ月以内に公開されたレシピを対象にユーザーのログから推定 ● 対象レシピの中から長時間閲覧したユーザーの数が多いレシピを選定 ○ 長時間閲覧されたレシピの大半は実際に作っていたか、作る候補には入って いたと仮定 © 2023 Cookpad Inc. 8 実現方法  新しい&良いレシピの選定

Slide 9

Slide 9 text

● 計算には対象クエリで検索したユー ザーのログだけを利用 ○ 例えば、「ねぎ」の検索結果におけ る良いレシピは「ねぎ」で検索した ユーザーの行動から判定 ○ 「ねぎ」で検索したユーザーの大半 は薬味としてねぎを使っているだ けのレシピは求めていない © 2023 Cookpad Inc. 9 実現方法  新しい&良いレシピの選定

Slide 10

Slide 10 text

● 選定したレシピを指定した位置に明示的に差し込み ○ 2つの意図を明示的に反映 ■ レシピをさがすユーザーに良いレシピに出会って欲しい ■ レシピ作者のモチベーションを維持したい © 2023 Cookpad Inc. 10 実現方法 選定したレシピと新着レシピを混ぜて表示

Slide 11

Slide 11 text

© 2023 Cookpad Inc. 11 実現方法 選定したレシピと新着レシピを混ぜて表示 Good ● 実現したい状態を確実に実現 できる ● ロールバックが容易 Bad ● 結果が不自然になりやすい 差し込み Good ● 結果が自然になりやすい ● 結果に関わるロジックが計算 式に集約される Bad ● 計算式の調整が難しい ブースト 初手の検証として差し込みを選択

Slide 12

Slide 12 text

● Redshift上で計算した差し込むレシピ のIDをDynamoDBで保持 ● DynamoDBに保持されたレシピのID を利用して検索結果のリランクを行っ た © 2023 Cookpad Inc. 12 設計 全体像

Slide 13

Slide 13 text

● 対象クエリで検索したユーザーの反応 を使って計算 ● クックパッドではRedshiftにユーザーの 行動ログを溜めていた ● SQLを書くだけで簡単に実現できた © 2023 Cookpad Inc. 13 設計 新しい&良いレシピの選定

Slide 14

Slide 14 text

● 検索クエリに対して差し込むレシピのIDを保 持 ○ 単純に検索クエリで引けば良いだけか つ、リクエスト量が多い ➡ 高速に情報を取り出せ、安価で  スケーラブルなDynamoDBを採用 ○ このIDを使って検索サーバーの検索結 果をリランク © 2023 Cookpad Inc. 14 設計 選定したレシピと新着レシピを混ぜて表示

Slide 15

Slide 15 text

● 検索サーバーでは各レシピの情報を保 持していたが、今回のリランクのために はレシピとクエリの組み合わせに対し てスコアを持ちたかったため、検索サー バーではなく外部のストレージで情報を 保持 © 2023 Cookpad Inc. 15 設計 選定したレシピと新着レシピを混ぜて表示

Slide 16

Slide 16 text

● 新着順に反応のよかったレシピが 差し込まれるようになった © 2023 Cookpad Inc. 16 結果 差し込みレシピ 差し込みレシピ 差し込みレシピ

Slide 17

Slide 17 text

● 施策が適用できたクエリにおいて、レシピへの遷移率が大きく上昇 ○ 効果の大きかったクエリでは、レシピへの遷移率が約 35% → 50% と15%程上 昇した ○ ※ 検索流量やそもそものレシピの流量が少ないクエリは効果が期待できな かったため、適用外としていた © 2023 Cookpad Inc. 17 結果

Slide 18

Slide 18 text

● ユーザーの行動ログを利用することで、ユーザーニーズに合ったレシピを表示する ことができた ● 明示的な差し込みを行うことで施策の評価が確実にできた ○ 効果が出なかった場合でも、いやここが甘かったから、、、のように迷走するこ とがない状態になっていた ● RedshiftやDynamoDBを適切に利用することで、簡単に素早く検証を行うことがで きた © 2023 Cookpad Inc. 18 振り返り