freeeヘルプページの検索エンジンをAlgoliaに変更した話(改善編)
はじめに
本noteは「ヘルプページの検索エンジンをAlgoliaに変更した話(導入編)」の続きになります。よければ前編からご覧ください!
(「ちょっとは面白いじゃん」と思ってくださる方がいらっしゃれば、ぜひどちらにも「スキ」ボタンをポチって頂けると🙏)
&freeeサクセスアドベントカレンダー19日目の記事にもなってます!
freeeサクセスメンバーの苦労の歴史が詰まっているので、ぜひ他の記事もご覧くださいmm
初めての効果測定
リリースしてから1ヶ月後に、1回目の効果測定として、CTR,ClickPositonをリリース前後の数値を比較しました。(本当はabテストしたかったが、abテストのための実装工数がかなり大きかったので諦めた)
結果としては以下の通りで、精度は前CMS時代と比較しても向上しました。
CTR:53%→56%に向上!!🎉🎉🎉
ClickPositon:2.72→2.34に改善!!🎉🎉🎉
一方、今回の効果測定では「前後比較の数値の定義がズレてしまった」という反省点もありました。
というのも、AlgoliaはAnalytics機能が優れているので、CTRやClickPositonを管理画面から確認できる仕様でした。
一方でZendesk時代は、GAでページ遷移のログを取り、そのログをBigQueryに突っ込んで、自分でクエリを書いてCTRとClickPositonを出していました。
取得方法が違う中で、CTRとClickPositonの定義が、下記の点でズレていたことにリリース後に気づき、数値を合わせるのにかなり時間を要してしまいました。
BQ(自身でクエリを書く):検索結果の2ページ目に遷移する場合、URLが変化してログが複雑になるため、分析簡易化のために2ページ目以降のクリックはCTRに含めない(そのためClickPositonも必然的に1ページ目のPositonの数値に)ことにしていた
Algolia(管理画面上の数値):上記を考慮してCTRを出してくれる&ClickPositonも2ページ目以降を含めた数値としていた
検索精度の改善
本企画を立ち上げるにあたっては、CTR65%を目標としていました。
初回のリリースでは53%→56%と3%向上したものの、まだまだ目標には程遠かったので、下記3つの改善施策を行っていきました。
優先度のロジック変更
前編で「検索ワードが粗い問題(検索に引っかかる記事が多数存在する中で、マイナー/ニッチな記事が上位に存在していた)」があると紹介しました。1stリリースでは、ここまで対応しきれなかったので、改善フェーズで取り組むことにしました。
具体的に行ったのは「ヘルプページの"評価数"を優先度ロジックに組み込む」というものです。
多くのヘルプページには、記事の満足度を取得する機能があると思います。(Zendeskには標準機能として搭載されており、APIから各記事の評価数も取得できる)
今回は「評価数が多い=メジャーなヘルプ」と見做して、優先度のロジックに組み込みました。(本当は「月次のPV数」をロジックに組み込みたかったのですが、データ連携の課題が大きく「記事の評価数で代替すればいいや!」となりました)
優先度のロジック変更は、Algoliaの「Ranking&Sorting」という機能があり、そちらを利用しました。
そのため実装は「ZendeskAPIから評価数をAlgoliaに流し込む」→「管理画面上で優先度を付与する」とかなり単純なもので済みました。
Dynamic Re-Ranking機能の利用
AlgoliaにはDynamic Re-Rankingという超イケてる機能があります。(導入検討時は知らなかった)
ざっくりお伝えすると「検索後のクリック状況に応じてAIが学習し、検索順位を入れ替えてくれる」という機能です。
ここについて自分が行ったのは、機能を有効化するだけでしたが、なんと2週間程度でメキメキとCTRが向上していきました。
例として「年末調整」と検索した際に、AIがどう働いているかのスクショをもってきました。
スクショでは、元々4番目に来ていた「freee人事労務での年末調整の流れ」という記事が、AIの学習後は1番上に表示されるようになっているのが確認できるかと思います。
特に上位10記事のレコメンド順の最適化に関して、この機能は絶大な効果を発揮してくれました。
検索ロジックの変更は色んなところに影響を及ぼすため「あっちが良くなればこっちが悪くなる」というように、正解はないと思っています。
だからこそ、最後にユーザーのクリック状況を元に微調整してくれる機能は控えめに言っても「神」でした。(実際このトピックをアドベントカレンダーに選んだのも「この機能のwowを伝えたい!」という理由が大きかったりします。笑)
Synonymの追加
最後に取り組んだのは「Synonymを追加する」というものです。
synonymは日本語で「同義語・類義語」と略されるもので、検索時にキーワードが揺れた時に補完する効果があります(機能詳細はこちら)
freeeでは例えば、下記のようなSynonymが追加されています。
Algoliaでは、高頻度で検索されているワード毎にCTRを確認できるので「検索数が高く」「CTRが低い」ワードに絞り、関連する問合せを見ながらsynonymを追加することで、なるべく効率的にCTRを上げることを目指しました。
2度目の効果測定
はじめての効果測定の反省を活かし、上記の施策を行うにあたっては、AlgoliaのABテスト機能を活用しました。
1回目の効果測定と違って「CTRの定義が同一」「前後比較ではない」ため、施策実施→効果測定→判定までのサイクルは3倍程度早くなりました。
またABテスト中で、数値の差分だけでなく有意差まで表示してくれ、判断がとても楽で助かりました。
合計5回ほどABテストを行い、現在ではCTRを64%まで上げることができました(元々立てていた目標値まであと1%、、!)
一通り大きな改善は済んだのですが、これからもsynonymの追加など、定常的に精度を上げていくような取り組みは、細々と行っていこうと思っています。
施策全体を振り返って
今回振り返って思っていることは「検索精度は全然向上できる!」ということと同時に「結構大変だった、、」ということです。
他の業務と並行しながらですが、1年弱Algoliaに向き合ってようやく、納得のいく精度になってきました。
freeeはスモールビジネス向けのサービスなので、ユーザー数が多く問合せ数も多い事業構造のため、今回の取り組みはROIがなんとか見合いました。
ただ、例えばエンプラ向けのサービスのヘルプページでここまでやるべきか、と問われると、疑問符が残るなと思っています。
またやってみて「Zendeskの検索ロジックも、汎用的に対応するにあたってかなり作り込まれてるな」と実感させられました。ので、記事を読んで頂いた中恐縮ですが、この記事を参考にするかどうかは、それなりに慎重に考えて頂くのが良いかもです。
さいごに
今回は、ダラダラと書き殴っていたら二部作の長編になってしまいましたが、ここまでお付き合い頂きありがとうございましたmm
気になることなどあれば、ぜひお気軽にお声がけください🙏(twitterやっておらず、、レス遅いかもですが一応meety作ってます)
&プロダクトの性質上、こういったテックタッチ寄りの企画にはかなり力を入れており、専門の部署を設けております!
カスタマーサクセスの部署にいながらも、専任の開発チームを持って企画していく面白いポジションと思っておりまして、もし興味ございましたらお気軽にご連絡くださいませmm
アドベントカレンダーもあと6日、今後も面白い記事が控えていると思うので、よければぜひご覧くださいmm