note_表紙

検索システムの改善 その2 課題特定から解決編

こんにちはrilmayerです。
この記事はアドベントカレンダー「Search&Discovery 全部俺」22日目の記事となります。(遅刻

今日は前回に引き続きSearch&Discoveryシステムの改善を実際の業務でどのように進めていくかということについてお話します。

前回は現状理解編として以下の内容を確認しました。
1. アプリケーションの検索導線を洗い出す
2. 可能な限りのオンライン評価指標作成/計算
3. 求めた指標をあらゆるディメンションで切り刻む
4. 現行の検索システムで変更できる要素を確認

今回は課題特定から解決編ということで以下の内容を確認していきます。

課題特定
5. 課題の特定+改善時の効果試算

施策立案&実行
6. 施策の立案→実行

5. 課題特定

「2. 可能な限りのオンライン評価指標作成/計算」、「3. 求めた指標をあらゆるディメンションで切り刻む」で得たデータを元に課題を分析していきます。
前回と同様noteを例に考えていきます。

各指標には基本的に「大きい方が良い」もしくは「小さい方が良い」と言ったディレクションを仮定していきます。
例えば、検索結果に表示されたノートは出来るだけタップされた方が良いと考えてみると、「CTRは基本的には高い方が良い」と考えられます。
例えば検索結果経由のノートでの滞在時間は長い方が良い(≒ユーザーの興味のあるノートがきちんと表示されている方が良い)と考えてみると、「滞在時間は長い方が良い」と考えられます。

まずはじめに各指標に関して上記のようにディレクション(仮定)を定めていき、現状を把握していきます。
現状の把握とは基本的には「比較」です。

何と比較するかというのは「ディメンション」や「時系列」、「ユーザーセグメント」、「一般的な感覚」などです。
例えばディメンションの1つである「キーワード」を用いて指標を出した結果、以下のような例になったとします。

画像1

CTRが大体0.5付近にも関わらず「料理」のキーワードだけがとても低いですね。また滞在時間も5秒と他と比べ低いです。
ということでどうも「料理」というキーワードの結果が悪そうということが分かります。

また、CTRやPrecision@10などを時系列でグラフにしてみて落ち込んでいるかどうかや、他の類似サービスと比べて値があまりにも低いかどうかなどで問題点を把握します。
ただし他の類似サービスとの比較はかなりの経験が必要ですし、類似とはいっても状況が変わればかなり数値が変わってくるので注意が必要です。

ということで、以下のように課題点をまとめます。

課題の例(値とか指標はテキトウ)
・「料理」関係のキーワードでCTRが著しく低い、調べてみるとどうもキーワードをうまく捉えられていないことが原因のよう
・検索結果0件の検索結果が多くCTR減少の一つの原因になっている
・ユーザーに頻繁に検索されるキーワード群についてユーザーの最初にタップされるランクが低い(他のキーワードに比べ)

次に、それぞれの課題でどの程度の改善見込みがあるかを確認します。
この辺はまあ検索に限らず一般的に必要です。

先ほどの例では、例えば以下のように見立てます。

課題と見立て(テキトウ)
・「料理」関係のキーワードは全体のキーワードで10%くらいの割合があるので、改善がうまくいけばかなりの効果がありそう
・検索結果0件キーワードは全体の検索結果の5%を占めるので、改善できればそこそこのインパクトがある
・ユーザーに頻繁に検索されているキーワードは全体の30%で改善できれば、Webサイトにかなりのインパクトあり

本当はお金換算できるとビジネス職の人たちと会話がしやすくて嬉しいですね。
単純計算で自分はあんまり好きではないのですが、例えばCTRが向上した場合はページビューあたりの〇〇円の利益があるなどがあるとします。現在100,000ページビューがあるとすると、CTRが10%改善した場合「100,000 * 0.1 * 〇〇円」の利益upという感じになります。(こういう計算はあまり自分は好きではないですが)

こうした効果見立てを行うことによって、優先度をつけたり実際に作業時間やコストを使ってそれに取り組むということがしやすくなります。

6. 課題の深掘り+施策の立案→実行

「4. 現行の検索システムで変更できる要素を確認」のステップで事前に検索システムで変更できる部分を洗い出しているので、そちらも織り込んだ上で先ほど洗い出した課題の解決策を考えていきます。

とは言っても検索システムの改善の仕方はある程度「型」のようなものが存在します。
はじめに型を確認しておくことで、「まずはこの辺を改善できそう!」というあたりをつけておくと良いかもしれません。

検索改善の型 ヒット編

検索結果の改善を行う場合は、以下の2つの観点から課題を深掘りするのがおすすめです。

1. ヒットの性能が悪い
 1-1. ユーザーニーズに適合しないアイテムが多くヒットする
 (検索結果にゴミが多い)
 1-2. ユーザーニーズに適合するアイテムがヒットしない
 (アイテム自体はあるのに検索結果に表示されない)
2. ランキングの性能が悪い(良いアイテムがランキング下方に表示される)

なぜ、上記の観点かというと、一般的に用いられるSolrやElasticsearchなどの検索エンジンで対処しやすい課題だからです。上記の内容は「5. 課題特定」で特定した検索結果を眺めながら考えると良い観点です。

例えば「料理関連キーワードで検索のオンライン指標が悪い」ということが分かったならば、と料理関連キーワードの検索結果一覧ページとその他の良いと思われる検索結果一覧ページじーっと見比べてみます。
その結果、料理に関するキーワードに関してはどうも関連性の低い検索結果が多く混ざってしまっているということが明らかになったとすると、どのように検索結果の中身を綺麗にしていくかということになります。

ということで、ヒットの改善でどのようなことができるかを見ていきます。

アナライザーの修正
ここでは文章やクエリをトークンへと変換する一連の処理を担う機能をアナライザーと呼びます。
例えば、上記で少し触れた「より厳密なアイテムのみを検索結果に表示したい(=適合率をあげたい)」といった場合、日本語をうまく形態素解析できるようなトークン化をすることによって、より厳密なヒットをコントロールすることができます。
一方、より「ゆるくアイテムをヒットさせたい(再現率をあげたい)」場合はbi-gramなどでトークン化することで対応することができます。
これらの操作はインデックス時のアイテムの解析とユーザーのクエリの解析時の両方で行うことによってより効果を得ることができます。

その他、例えばElasticsearchでは以下のようにクエリを制御することで、適合率をあげることができます。

シノニム辞書の修正
シノニムというのは「類語」のことで、意味が似ているのに別の表現形態をとるような言葉のことです。例えば、「地下アイドル」と「チカドル」はシノニムと考えることができます。
シノニムは「クエリ解析時」と「インデックス時」に参照することができ、シノニム辞書の用途として「正規化(何らかの言葉に統一)」か「展開(全てのシノニムを利用する)」があります。

こうしたシノニムを事前に用意しておくことによって、例えば検索時に「地下アイドル」と検索された時に同時に「チカドル」という言葉で検索することもできます。(クエリ解析時の展開)
インデックス時に「地下アイドル」も「チカドル」も両者とも「地下アイドル」という言葉でインデックスを作成することができます。(インデックス時の正規化)

検索改善の型 ソート編

検索結果を見て重要なヒットしているアイテムは悪くないのにランキングが悪い場合があります。そんな場合はソートの改善を行ってみ流のが有効です。
ソートの改善は主に以下の2つが取られます。

1. フィールド追加・重み調整・ソート変更
2. リランキング

1. フィールド追加・重み調整・ソート変更
2つ目の手段に比べると比較的コストが低く、基本的な検索エンジンをそのまま使える方法です。
例えば現状の並び順を、新着順に変更したり、(ECサイトなら)価格順に並び替えるなどができます。また類似度を使う場合はTF-IDFやBM25などの手法がよく用いられます。
フィールドの重み調整は以前紹介したこちらの記事で詳細は確認していただけますが、どのフィールドを重視するかという設定です。
またこれに付随して、新たなフィールドを設定することもできます。例えばアイテムのビュー数などのフィールドを追加することでそれを基準に並び替えることもできます。

2. リランキング
こちらは最初に検索条件によりフィルタリングしたアイテムに対して、ユーザーの情報や事前に計算しておいた情報などを用いて再ランキングする方法です。アイテムを並び替えるための機構が必要となりますが、こちらも良く用いられている手法です。
実際にどのようなことをするかについては、以下の記事が参考になります。

課題の深掘り+施策の立案→実行の例

ということで改善の型の紹介が長くなってしまいましたが、具体例で見てみましょう。ここでもまたnoteの例でやっていきます。

課題の深掘りをしていく中で、「料理関係の検索結果が悪く、原因としてヒットすべきノートが検索結果に表示されていない」ということが分かったとします。
ここで、上記の「改善の型」を参考にしつつ、シノニム辞書を作っていくことしたとすると、以下のような施策を考えることができます。

<施策の例>
1. 効果の悪い料理関係のキーワードをピックアップする
2. それらのキーワードについてシノニム(≒類義語)を収集する
3. 検索時にそれらシノニムでも検索するようにする(検索時のシノニム展開)

ここからは若干評価の話も含まれるのですが、こうした施策によってどのような効果が得られるかを考えて関係者と施策実行に向けて動いていきます。
施策評価については以下の記事も参考になるかもしれません。

こうして、施策を立案して実行し結果を確認・考察を行うことによって、改善してもしなくても次に繋がる一手を考えることができます。

重要なのはこの一連の実験によって何を得るのかをきちんと考え、終わった後にきちんと実験から学びを得て、次に何をするかを考えることだと思っています。

おわりに

今回は2回に分けて検索システムの改善をどのように行うかを紹介してみました。
状況等によって良い方法は変わってくるので、今回紹介した方法もうまく活用して検索システムをどんどん改善していきましょう。

参考図書

今日の検索改善の型の話は以下の書籍のChapter9で詳しく書いてあります。


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