リンクのローテーターと自動最適化するスプリットテスト
- ab-testing
- link-rotator
- analytics
このページの内容
機能一覧の上ではほとんど同じに見えるのに、まったく違う問いに答える機能が2つあります。ローテーターは、1本の短縮リンクのトラフィックを複数のリンク先に振り分けます。ABテストは、トラフィックをバリアントの間で分け、どちらが良かったかを教えてくれます。どちらも1本のリンクの背後に複数のアドレスを置きますが、測定なのは片方だけです。
この記事で扱うのは、2つが本当に違うのはどこか、それぞれで重みがどう振る舞うか、なぜ配分そのものより訪問者を1つのリンク先に留めることのほうが重要なのか、ヘルスチェックが検知できるものとできないもの、自動の重み調整がどう動き、なぜ早すぎる時点では動こうとしないのか、そしていつなら単純なほうの道具が正解なのか、です。
ローテーターは運用の道具、分割は測定
この区別は机上の話ではありません。どの振る舞いが黙って手に入り、どの振る舞いは自分で回り道を作らなければならないかが、ここで決まります。
| | リンク先のローテーター | ABスプリットテスト | | --- | --- | --- | | 目的 | リンク先が入れ替わっても1つのアドレスを動かし続ける | リンク先を比べて判断する | | 重み | 相対的、どんな値でもよい | 合計がちょうど100の整数 | | 選択肢の集合 | 常に入れ替わる、最大20件 | テストの期間中は固定 | | 選択肢ごとの制限 | クリック上限、期間の枠、国とデバイスの絞り込み | なし——バリアントはバリアント | | 障害時の扱い | 不健全なリンク先は自動で外れる | 該当なし | | 終わり方 | 終わらない。動き続ける | 勝者、あるいは正直な「まだです」 |
ローテーターが役に立つのは、アドレスのほうが動かず、リンク先のほうが動くときです。3つのオファーより長生きする印刷済みのコード、プロフィールのリンク、広告主が毎週クリエイティブを入れ替えるアフィリエイトの掲載枠などです。分割が役に立つのは、問いが1つあり、それに答えるだけのトラフィックがあるときです。同じアカウントで、別々のリンクに両方を使うのは普通のことです。1本のリンクに両方を載せている場合は、たいていどちらかが何もしていません。
重みは相対的で、対象になっている相手から計算し直される
ローテーターの重みはパーセントではなく取り分です。あるリンク先の取り分は、その重みを、そのとき対象になっているリンク先の重みの合計で割ったものです。だから3、2、1という重みは2分の1、3分の1、6分の1を意味し、4つ目を足したときに手で正規化し直す必要はありません。
対象かどうかの判定は重みより先に行われ、この順序こそが、この機能を飾りではなく運用の道具にしています。リンク先が候補の集合から外れるのは、無効にされたとき、合計または1日のクリック上限を使い切ったとき、期間の枠がまだ開いていないか閉じたとき、訪問者の国やデバイスがその絞り込みの外にあるとき、そしてヘルスチェックがそれを落としたときです。残りのリンク先が、自分たちの重みに応じてその分を吸収します。即座に、しかも誰かが午前3時に何かを編集することなく、です。すべてのリンク先が外れたときは、フォールバック先のアドレスが残りを受け止めます。フォールバック先がない場合、リンクはエラーページになるのではなく、主となるリンク先を配信し続けます。
ローテーターには、重みを使わない配分も2つあります。連続するクリックを連続するリンク先へ送るラウンドロビンと、均等に分ける一様配分です。ミラーの間で負荷を分散するならラウンドロビンです。連続したクリックが別々の場所に着くことを保証する唯一のモードだからです。
ABスプリットテストは逆の振る舞いをしますが、それには理由があります。その重みは整数で、合計がちょうど100でなければなりません。リダイレクターは訪問者を0から99までのバケットに割り当て、累積した重みをたどっていくからです。この範囲に隙間があれば、それは誰にも配信されないトラフィックになります。ローテーターの重み付き配分は10万人の合成訪問者で検証され、設定した取り分との差が1パーセントポイント以内に収まることを求められます。トラフィックを分割すると称する道具になら、これくらいの精度は期待してよいはずです。
1人の訪問者を1つのリンク先に留める
固定のないローテーションは、意味のない数字を生みます。訪問者がリンクを開いてオファーAを見て、1時間後に戻ってきてオファーBを見る。そのクリックの上に組み立てられたファネルのレポートは、どれも作り話です。少し間違っているのではなく、作り話です。分子と分母が、もう別々のページを指しているからです。
だからこそ訪問者ごとの固定期間は一級の設定であり、0日から30日まで選べます。仕組みは2層です。基本となる割り当ては、その日の訪問者の指紋から決定的に導かれるので、セッションもデータベースの行も、訪問者ごとに保存するものも何もなしに安定します。そのうえで、あなた自身のリダイレクトドメイン上のファーストパーティCookieが、選ばれたリンク先を期間の長さだけ先へ運びます。固定が、毎晩入れ替わる指紋のソルトより長生きするのは、このためです。
自分で発見するより、先に知っておく価値のある帰結が2つあります。Cookieを消した訪問者や別のデバイスで来た訪問者は、導出された割り当てに戻ります。これは1日のあいだは安定しますが、日をまたいで必ず安定するわけではありません。識別子を永続化しないために分析の層が受け入れているのと、同じ取引です。そしてもう1つ、重みを変えた後も、固定された訪問者は固定されたままです。そのリンク先がまだ対象であるかぎり、固定のほうが配分に勝つからです。
実装の細部が1つ、目に見える形で効いてきます。ローテーターは、ABスプリットテストとは別の断片を訪問者の指紋から取り出して、自分のバケットを導きます。同じ断片を共有すれば2つの割り当てが相関し、バリアントAに入った人は全員、リンク先の一覧の一部しか系統的に見られなくなります。
ヘルスチェックと、死んだページをローテーションから外すこと
リンク先は腐ります。パートナーがページを下ろし、証明書が切れ、オファーが取り下げられ、ドメインが失効して、自分自身を売りに出すパーキングページとして戻ってきます。そのあいだも短縮リンクは、自分の取り分のトラフィックを壁に向けて送り続け、週次のレポートが出るまで誰も気づきません。
定期実行されるチェックは、訪問者と同じようにそれぞれのリンク先をたどり、4つを記録します。ステータスコード、リダイレクトの連鎖のホップ数、応答時間、そしてTLS証明書の有効期限です。さらに、リンク先を追加した時点で取得した指紋——最終的なホストとページのタイトル——とページを突き合わせます。パーキングページから健全な200を返すようになったURLが捕まるのは、この仕組みのおかげです。同じ探査がリンクチェッカーを支えており、1つのリンク先の再チェックは15分に1回より頻繁には行われません。大きなワークスペースが、自分の監視をトラフィックの発生源に変えてしまわないためです。
その次に何が起きるかは、リンクごとの選択です。既定の動きは、声は大きいが受け身です。リンクの一覧でそのリンク先に印が付き、所有者にはまとめのメールが届き、Webhookが発火します。自動除外を有効にすると、回復するまでローテーションからも外され、黙って削除されるのではなく自動無効として記録されます。だから「ローテーターは問題ない」は、誰かが確かめた事実になります。再有効化を手作業にしているのは意図的です。一度ばたついたページはまたばたつきますし、トラフィックが戻る前に人が目で見るべきだからです。
正直に言っておくべき限界が2つあります。チェックは当社のインフラから実行されるので、ページが応答することは確かめられますが、特定の国の特定のデバイスの訪問者に対して正しく応答することまでは確かめられません。もう1つ、パーキングの検出は既知のパターンに当てはめる方式です。オファーが取り除かれただけで、まったく正当なページを返すリンク先は、依然として健全に見えます。ヘルスの印よりも、リンク先ごとのコンバージョンのデータのほうが重要なのは、このためです。
エッジネットワーク全体で守られる上限
クリック上限に意味があるのは、同じリンクが十数か国で同時に開かれても守られるときだけです。リージョンごとに独立したカウンターこそが、1000クリックに制限したはずのリンク先に1400クリックを配信させる原因です。14か所のデータセンターがそれぞれ100まで数え、それぞれが上限の内側にいると信じていた、というわけです。
これを避ける設計は、2つの速度で動きます。カウンターのスナップショットはリンクのキャッシュされた設定の中を一緒に運ばれるので、リダイレクターはホットパスで往復通信をせずに、リンク先がおおよそどのあたりにいるかを知っています。リンク先が上限まで数十クリックの距離に入ると、リダイレクターは応答する前に、共有ストアでの権威ある予約に切り替えます。だから最後の1枠をめぐる同時の2クリックは、1回のアトミックな加算で決着し、負けたほうは上限を超えるのではなく、別のリンク先へ進みます。
代償をはっきり述べておきます。境界から離れているあいだ、その数字は生きたカウントではなくスナップショットです。つまり上限は、厳密さが重要なところでは厳密で、重要でないところでは近似です。上限を持たないリンク先が、持ってもいない制限のために往復通信の代金を払わずに済むのは、このおかげです。
自動最適化は実際にどう動くのか
自動最適化する分割が、通常の分割に足しているものは1つだけです。目標の上でより良い成績を出しているバリアントが有利になるように重みを計算し直す、定期実行のジョブです。それ以外——バケットの割り当て、訪問者ごとの固定、レポート——はすべて同じで、リダイレクターはこのモードの存在を知ることさえありません。受け取るのは、たまたま自分のために計算された、ごく普通の重みだからです。
ジョブは1時間ごとに走り、3つの段階で動きます。まず、前回の実行以降の各バリアントのクリックの増分を集め、保存してあるサンプルに足します。次に、成功に1を、試行に2を足した平滑化した比率で、各バリアントに点数を付けます。こうすれば、クリックが3件しかないバリアントが満点を出すことも、ゼロによる除算が起きることもありません。そして、すべてのバリアントに5点の下限を確保したうえで、その点数に比例して100点の整数を配ります。
この下限は、アルゴリズムの中で最も重要な一行です。0まで削られたバリアントは、二度と新しい観測を積み上げられません。そして、それを見限るという判断が、たまたまその結論を生んだサンプルの強さのままで、恒久的なものになってしまいます。5点は、学習を続けるには十分で、無視できる程度には安いのです。
関門が開いた後の、バリアントが2つの実行例です。
| バリアント | クリック | 目標イベント | 素の比率 | 平滑化した点数 | 新しい重み | | --- | --- | --- | --- | --- | --- | | A | 620 | 31 | 5.00% | 5.14% | 54 | | B | 610 | 25 | 4.10% | 4.25% | 46 |
アルゴリズムが何をしなかったかに注目してください。コンバージョン率でおよそ5分の1の相対差が生んだのは、90/10ではなく54/46の分割です。重みの調整は勝者総取りの規則ではなく、点数に比例するからです。自動最適化は傾けるだけで、切り替えはしません。切り替えたいなら、勝者を手で固定してください。そうすればすべてのトラフィックが1つのリンク先に流れ、実験は終わります。その判断は、自動の判断と並んでリンクの履歴に記録されます。
なぜ最小サンプル数がすべてに先立つのか
最適化が何かに触れることを許される前に、2つの関門が配分を均等に保ちます。暦の時間で測るウォームアップ期間と、クリック数で測る最小の合計サンプル数——既定では1000です。どちらかの関門に届かないあいだ、重みは少しだけ調整されるのではなく、まったく調整されません。
理由は統計上の細かいこだわりではなく、リンクのトラフィックの形にあります。キャンペーンの最初の数時間は、最初に配信した経路と、リンクを走査する自動化されたトラフィックに支配されます。これはリンクのクリックの計測の記事で扱ったとおりです。その時間帯で計算した比率が説明しているのは、ページではなく配信の予定表です。さらに悪いことに、それを元に動く最適化は、たまたま静かな時間帯に出発したバリアントを飢えさせます。飢えたバリアントは証拠を積み上げる速度が落ち、初期の間違いが自分で自分を強化していきます。下限は被害を抑え、関門は被害そのものを防ぎます。
自動モードがやらないことが2つあります。1つは、これが逐次検定ではなく比例的な重みの調整だということです。有意水準を計算しませんし、勝者を宣言することもありません。勝者の宣言は人の行為のままで、ABスプリットテストの画面がバリアントの表の下に出す信頼度の注記の隣で行われます。もう1つ、重みの調整に使われるサンプルは、あなたが与えた目標の分しか意味を持ちません。すべてのクリックが成功として数えられるなら、すべてのバリアントは構造上まったく同じ点数になり、分割は事実上ずっと均等のままです。傾きが生まれるには、すべてのクリックが到達するわけではない目標が要ります。それをバリアントごとに記録するのがコンバージョン計測です。署名付きのクリック識別子がバリアントの名前を運ぶので、コンバージョンで説明しているレポートの中で、注文も売上もバリアント別に分解されます。
ローテーターが必要ないとき
| 場面 | より適した道具 | | --- | --- | | 今は1つのリンク先、来月は別のリンク先 | リンクのリンク先を編集する。短縮アドレスも履歴もそのまま | | 市場ごとに別のページ | 順序のあるターゲティングルール——決定的で読んで分かる | | 問いが1つ、ページの候補が2つ | 信頼度の注記が付いた素の分割 | | スマートフォンはアプリへ、デスクトップはサイトへ | リンクのディープリンクの項目 | | 同じページのミラーが複数 | ラウンドロビンモードのローテーター。まさにこのために作られた |
一般的な原則はこうです。ローテーターは、アドレスが変わらないままリンク先が変わるときにその複雑さに見合いますが、それ以外の場面では明快さを犠牲にします。重み付きの取り分は、ルールよりも筋道を追いにくいものです。夜11時に「この訪問者はなぜあのページに行ったのか」を調べたことのある人なら、どちらを読みたいか分かるはずです。設定の詳細はローテーターのドキュメントとリンクのドキュメントにあります。
長く持ちこたえる構成
- 問いに答えられる最も単純な道具から始め、リンク先の一覧が実際に入れ替わるときにだけローテーションを足します。
- 背後にファネルがあるものには、少なくとも1セッション分の固定期間を設定し、0にするのは負荷分散のときだけにします。
- 本当に制限があるリンク先には、それぞれ上限か期間の枠を与え、使い切りがエラーページにならないようフォールバック先を設定します。
- 自分が管理していないリンク先には自動除外を有効にし、短い停止のほうが黙った再配分よりましな場面では無効のままにします。
- 自動最適化する分割から何かを読み取るのは、ウォームアップ期間と最小サンプル数を満たしてからにし、勝者を固定する前に信頼度の注記を確認します。
- 結果はリンク先ごとに読みます。クリックのイベントにはどのリンク先が応答したかが記録されるので、クリック数も、ユニーク訪問者数も、売上も、その単位で分解できます。
すべての底にある型は同じです。ローテーション、上限、重みの調整は、誰も見ていないあいだもリンクに正しいことをさせ続けます。どのリンク先が稼いでいるのかを見ることの代わりにはなりません。きちんと見るための時間を、あなたに買ってくれるだけです。
よく聞かれる質問
ローテーターとABテストの違いは何ですか?
ABテストは測定です。バリアントの集合が固定され、期間が固定され、最後に判断があります。ローテーターは運用の道具です。リンク先は入れ替わり、クリック上限や期間の枠を持ち、特定の国やデバイス種別だけに配信され、壊れれば自動で外されます。仕組みもそれに応じて違います。分割の重みは合計がちょうど100でなければならず、ローテーターの重みは相対的で、外れたリンク先の分は残りが吸収します。問いがあるときは分割を、運用があるときはローテーターを使ってください。
ローテーターの重みは合計100にする必要がありますか?
いいえ。ローテーターの重みは相対的です。あるリンク先の取り分は、その重みを、そのとき対象になっているリンク先の重みの合計で割ったものです。3、2、1という重みは2分の1、3分の1、6分の1を意味し、真ん中が1日の上限を使い切れば、残りの2つが即座に3対1でトラフィックを分け合います。ABの分割は逆で、重みの合計がちょうど100にならないかぎり保存を拒みます。リダイレクターは0から99までのバケットを累積した重みと突き合わせるので、その範囲に隙間があるとトラフィックの行き先がなくなるからです。
同じ訪問者は、いつも同じリンク先に着きますか?
あなたが設定した固定期間のあいだは、そうなります。期間は0日から30日まで選べます。割り当ては訪問者ごとに保存されるのではなく、その日の指紋から導かれ、あなた自身のリダイレクトドメインに設定されるファーストパーティCookieが、それを先へ運びます。Cookieを消した人やデバイスを変えた人は、導出された割り当てに戻ります。指紋のソルトは毎晩入れ替わるので、これは1日のあいだは安定します。期間を0にすると訪問のたびにローテーションし、これは負荷分散には望ましく、ファネルがある場面では決して望ましくありません。
ヘルスチェックは、リンク先が壊れていることをどう判断しますか?
訪問者と同じようにリンク先をたどり、4つを見ます。ステータスコード、リダイレクトの連鎖の長さ、応答時間、そして証明書の有効期限です。さらに、リンク先を追加した時点で取得した指紋とページを突き合わせます。だから、健全そのものの200を返していても、いつのまにかパーキングページに変わっていたURLは捕まえられます。1つのリンク先の再チェックは15分に1回より頻繁には行われず、ローテーションからの自動除外は既定ではなく、明示的に有効にする設定です。
自動最適化するテストは、重みを変えるまでにどれだけのトラフィックが必要ですか?
2つの関門が開く必要があります。ウォームアップ期間は、設定した暦の長さのあいだ配分を均等に保ちます。最小サンプル数は、バリアント全体で十分なクリックが貯まるまで配分を均等に保ちます。既定では1000クリックです。どちらかの関門に届かないあいだ、最適化は少しだけ調整するのではなく、まったく調整しません。これは意図した設計です。重みの調整は、その土台となる最も小さいサンプルの分しか信頼できませんし、この種の初期データは、最初に配信した経路に支配されるからです。
ローテーターが適さないのは、どんなときですか?
正しいリンク先が1つあって、後でそれを変えたいだけのときです。短縮リンクのリンク先を編集すれば、アドレスを変えずに向き先が変わり、クリックの履歴もそのまま残ります。市場ごとに別のページが必要なときは、重み付きの取り分より、順序のあるターゲティングルールのほうが明快です。ある訪問者にとっての結果が決定的で、読んで分かるからです。そして、問いが1つでページの候補が2つなら、信頼度の注記が付いた素の分割のほうが、ローテーターより少ない仕掛けで答えを出します。