はじめに
弊社の一部SaaSプロダクトではユーザー登録におけるスパム登録数が徐々に増加し、reCAPTCHA v3導入前の3ヶ月間ではユーザー登録の約89%がスパム登録という状況になっていました。
これによりデータを使った分析の精度低下やDBの圧迫などの問題が発生していました。
そのため、対策としてまずは導入コストが低いハニーポットフィールド(ボット検知用のダミー入力欄)の設置を試してみましたが、効果が得られなかったためreCAPTCHA v3の導入に至りました。
これにより劇的な改善が見られたため導入前後での成果をこの記事にまとめます。
本記事ではreCAPTCHA v3の実装方法ではなく、導入前後でのスパム登録数の変化やスコアのしきい値をどのように設定したかといった、効果測定・運用面での学びを共有します。
実装方法については公式ドキュメントをご参照ください。
導入前後の新規ユーザー登録におけるスパム登録率の変化
reCAPTCHA v3の導入前後でスパム登録率がどのように変化したかを登録者数は伏せ、割合(%)で見ていきます。
月別スパム登録率の推移
導入前後3ヶ月のスパム登録率の変化を以下のグラフにしました。
横軸は導入月の何ヶ月前後かを表していて、縦軸はスパム登録率を表しています。

導入前の3ヶ月では、 85.1%, 90.5%, 90.1% と高止まりしておりスパム登録がユーザー登録の約89%という状況でしたが、 導入後はスパム登録率は 0% となりその後もスパム登録は確認されていません。
導入後の副次的な効果として、スパム登録を試みるリクエスト数そのものが減少していました。
そちらの推移もグラフで見ていきます。
スパム登録リクエスト数の推移
導入前の3ヶ月のスパム登録リクエスト数の平均を100%として各月のスパム登録リクエスト数を相対値でグラフに表しています。

導入前後3ヶ月の合計でスパム登録リクエスト数を相対的に比較すると、導入後は約90%の削減ができました。

スコアのしきい値の設定方法
reCAPTCHA v3では、ユーザーの行動を分析して人間らしさを数値化したスコアと、基準値となるしきい値をもとにスパム登録をブロックするかどうかを判断します。
- スコア:0.0~1.0で表し、より人間らしい行動ほどスコアが高くなります。
- しきい値:どのスコアまでを受け入れるかの基準になる数値です。
このしきい値をいくつに設定するかによって、 スパム登録をブロックできるか 、正規登録ユーザーを誤ってブロックしてしまうか が変わってくるため以下の順で段階的に設定しました。
1. 公式ドキュメントを参考に初期値を設定
まず公式ドキュメントのスコアしきい値ガイドを参考に初期のしきい値を0.5に設定しました。
設定したしきい値を下回るスコアのリクエストでも、この段階ではブロックせずにSlack通知のみを行いました。
2. Slack通知で初期しきい値を検証
初期値として高いしきい値を設定すると正規ユーザーを誤ってブロックするリスクがあったため、最初の1ヶ月間は通知ベースで以下を確認しました。
- Slack通知される(しきい値を下回る)ユーザー登録が実際にスパム登録かどうか
- DB内に登録されたユーザーにSlack通知されていないスパム登録があるかどうか
3. しきい値の設定
観測データをもとに以下の2点を確認し、しきい値を設定しました。
- スパムと確認されたリクエストが全てしきい値を下回っているか
- 正規ユーザー登録のスコアがしきい値を上回っているか
両方を満たすしきい値を設定しました。
その結果、正規ユーザーのブロックやスパムユーザーの登録はない状態で現在も維持できています。
まとめ
reCAPTCHA v3の導入によって、約89%だったスパム登録率を0%にまで抑えることができました。
さらに、スパム登録リクエスト数そのものも導入前と比較すると約90%削減という副次的な効果もありました。
今回のreCAPTCHA v3導入で効果測定としきい値の設定の観点で以下が重要だと感じました。
効果測定の観点
- リクエスト数の抑止効果の測定もできるように、スパム登録だけでなくリクエスト数も測定する。
- ボットの手法の変化に対応するために、導入後も継続的にモニタリングする。
しきい値の設定の観点
- 安全にしきい値の設定をするために、最初はスパム登録をブロックせずに通知のみで検証をする。
- 正規ユーザーのブロックやスパムユーザーの登録防止のために、しきい値は公式ドキュメントと検証したスコアを参考に設定する。
スパム登録にお悩みの方々の参考になれば幸いです。