UCB Recommend

emblemmatic-ucb-recommend-logo-22

このプラグインはクリック率から配信するコンテンツの最適化を行います。

配信コンテンツの最適化にはABテストが有名ですが、Google Analyticsでも使用されている腕バンデット問題モデルを用いた方法などもあります。

Steven L. Scott、博士、経済アナリストGoogle アナリティクス ウェブテストの基盤を成す統計手法について説明します。Google アナリティクスでは、ウェ

このプラグインは多腕バンデット問題の解法のひとつであるUCBアルゴリズムを使用して、コンテンツの最適化を行います。

動作条件

必須条件

  • PHP5.4以上
  • WordPress3.9.14以上

PHPの方はPHP5.4以上でしか使用できない機能を使用しているため、絶対に必要な条件です。

WordPressの方は確認した最小のバージョンを示しているため、もっと低いバージョンでも動作する可能性はあります。

PHP5.4未満の環境ではプラグインを有効化しても何も起きません。

左メニューに「UCB Recommend」が出ない場合はPHP5.4以上かどうか確認して下さい。

確認環境

  • PHP5.6.24、WordPress4.6.1、Nginx+PHP-FPM、マルチサイト
  • PHP5.6.10、WordPress3.9.14、Apache
  • PHP5.6.10、WordPress4.6.1、Apache
  • PHP5.4.45、WordPress4.6.1、Apache
  • PHP7.0.10、WordPress4.6.1、Apache
  • PHP5.2.17、WordPress4.6.1、Apache(機能はしないがエラーが発生しないことを確認)
  • PHP5.3.29、WordPress4.6.1、Apache(機能はしないがエラーが発生しないことを確認)

仕様及び特徴

UCBアルゴリズムを使用したレコメンデーションプラグインです。

アルゴリズム

記事をおすすめする行動を多腕バンディット問題という機械学習のモデルに当てはめ、またそれの解法としてUCBアルゴリズムを採用しています。

モデル及びアルゴリズムの詳細は以下を参照して下さい。

こんにちは。技術部検索グループの原島です。 上の画像は、スマートフォン(ブラウザ版)で見たクックパッドの検索結果ページです。レシピだけでなく、ニュースも表示されていますね。献立や掲示板のスレッドなどが表示されることもあります。 クックパッドでは、検索結果ページに表示するコンテンツをクエリなどに応じて最適化しています。最...

UCBアルゴリズムはデータの少なさを評価に含めることで、テストの回数が少ない記事は積極的にテストを行う仕組みになっています。

テストの結果が良ければそのままおすすめされますが、悪ければおすすめに表示されなくなっていきます。

記事の候補が多い場合やPVが少ない場合は学習に時間がかかります。

デザインに関する特徴

表示させるHTML構造は管理画面から自由に変えられるように設計されています。

テストを行う条件に関する特徴

データベースの全てのテーブルの全てのカラムを使用して条件を設定することが可能です。

いくつかテンプレートを用意しており、自由度と設定のしやすさの両立を図っています。

表示条件に関する特徴

ユーザーエージェントで表示するかどうかの設定を行うことが可能です。

スマホかどうか、PCかどうかなど、あらかじめいくつか条件が用意されているので、それを選択することも可能です。

その他

デザイン、条件はまとめてウィジェットという単位で管理されます。

またウィジェットはいくつでも作成することが可能です。

ウィジェットは表示されるときに非同期で読み込まれます。

したがって実際に表示された回数がカウントされます。

開発者向けに多くのフィルタが用意されています。

「apply_filters」で検索して下さい。

第一引数に「ucbr_」をつけたものを「add_filter」することで処理に割り込むことが可能です。

導入手順

プラグインのダウンロードと有効化

公式ディレクトリに登録してあるため、プラグインの新着追加画面から検索できます。

「ucb」と検索するとヒットします。

ucb54

ucb55

開発版

Githubで管理しています。

Contribute to UCB-Recommend development by creating an account on GitHub.

ウィジェットの作成

管理画面左メニューから「UCB Recommend」→「ウィジェット」を選択します。

ucb49

ucb16

右の新規作成で新しくウィジェットを作成します。

ucb17

ショートコードをコピーします。

ショートコードの設置

ウィジェットを表示したい位置にショートコードを貼り付けます。

Simplicityの関連記事に表示する例

1. カスタマイズで関連記事の表示をOFFにします。

ucb12

2.  WordPressのウィジェット設定から「投稿関連記事下」にテキストウィジェットを置き、ショートコードを貼り付けます。

ucb13

設定画面

ダッシュボード

ucb17

ウィジェット全体の設定などを行います。

  •  ショートコード
    • このコードを貼り付けるとそこにウィジェットが表示されます。
  • 表示数
    • 表示する数を設定します。
  • コンテキストなしモード
    • 投稿に関連付けないモードにするかどうかの設定です。全ページでABテストを行う場合などにONにします。

今後のバージョンアップで統計情報を表示させる予定です。

デザイン

表示する内容のカスタマイズを行います。

ucb18

  • ロード中テンプレート
    • ウィジェットは非同期で読み込みます。その読み込み中の際に表示するテンプレートを設定します。
    • 使用可能な変数
      • $loading_image 下で設定する読み込み中画像に置き換わります。
  • リストテンプレート
    • ウィジェット全体のテンプレートです。
    • 使用可能な変数
      • $list 下のアイテムテンプレートによって作成されたリストに置き換わります。
        $url URL
        その他 その他$postで使用可能なもの

        $post->post_title、$post->post_excerptなど

        コンテキストなしモードでは使用できません。
  • アイテムテンプレート
    • それぞれの投稿のテンプレートです。
    • 使用可能な変数
      • $url URL

        投稿タイプがデザインパーツの場合、$url{1}、$url{2}と指定することで設定した1番目、2番目のURLに置き換わります。

        $bandit スコア
        $n 表示回数
        $c クリック回数
        $thumbnail サムネイル

        $thumbnail{medium}、$thumbnail{large}と指定することで画像サイズを指定することが可能です。

        参考:add_image_size

        その他 その他$postで使用可能なもの

        $post->post_title、$post->post_excerptなど

  • Not found テンプレート
    • 投稿が見つからなかった場合のテンプレートです。
    • 使用可能な変数
      • リストテンプレートと同様
  • スタイルテンプレート
    • このウィジェットに適用されるスタイルのテンプレートです。
    • 使用可能な変数
      • 使用可能な変数はありません。
  • サムネイルがない場合の代替画像
    • サムネイルがない場合に使用される画像を設定します。
  • ロード中画像
    • ロード中テンプレートで使用する画像を設定します。

それぞれの下にある「保存」、「初期化」はそれぞれにしか作用しません。

全体を保存するには右上の「全て保存」を押して下さい。

デザインのプレビューは右上の「デザイン確認」を押します。

今後のバージョンアップでいくつかのプリセットを用意する予定です。

プレビュー

設定したデザイン、検索条件でプレビューを行います。

ucb6

プレビューを行いたい投稿を選択し、「プレビュー取得」を押します。

「投稿再取得」ボタンで投稿をランダムに取得し直します。

コンテキストなしモードでは「プレビュー取得」のみになります。

 表示条件

ウィジェットを表示する条件を設定します。

ucb7

デバイス

ユーザーエージェントを使用して条件を設定します。

あらかじめいくつか用意されているので、そこから選択することも可能です。

カスタムはPHPのpreg_matchを使用して判定を行います。

複数条件がある場合は改行して指定します。

なにも指定がない場合は全ての端末で表示されます。

今後のバージョンアップで投稿IDなどの条件を指定できるようにする予定です。

検索条件

ウィジェットに表示する投稿の条件を設定します。

ucb8

デフォルトは

  • 投稿のステータスが「公開」
  • 投稿タイプが表示元の投稿と同じもの

が指定されます。

同じカテゴリーのみにする場合は、条件グループ追加から「カテゴリーID」テンプレートを追加します。

条件の「値」が指定されていない場合は、ウィジェット表示元の投稿と同じものが使用されます。

下の「検索条件テスト」で取得される投稿及び現在のスコアを確認できます。

結合条件

検索条件で使用するテーブルの結合条件を設定します。

ucb9

以下のテーブルに関してはあらかじめ結合を行っているため、設定は不要です。

  • postmeta
  • terms
  • term_taxonomy
  • term_relationships

ヘルプ

ヘルプを表示します。

ucb10

今後のバージョンアップで追加していきます。

デザインパーツ

デザインの比較テストを行う投稿タイプを作成することができます。

この投稿タイプを使用することで、かなり自由度の高いテストを行うことが可能です。

ucb50

ABテストを行う

アイテムAとアイテムBを紹介する以下のようなウィジェットがあった場合に、アイテムAとアイテムBを入れ替えたものとどちらがクリック率が高いかのテスト行ってみます。

ucb34

デザインパーツを作成

新規にデザインパーツを作成します。

ucb51

タイトル、本文、タグ、リダイレクトURLを設定します。

ucb23

ucb24

{$url{1}}、{$url{2}}はそれぞれ設定したリダイレクトURLの1番目、2番目に置き換わります。

ウィジェットの作成

新しくウィジェットを作成します。

ucb25

表示数を、コンテキストなしモードをONにします。

デザインでリストテンプレートアイテムテンプレートNot Found テンプレートを編集します。

ucb26

検索条件でデザインパーツの条件グループをテンプレーから追加します。

ucb52

条件にタグ名を設定します。

ucb28

ucb29

正しく検索条件が設定されたかどうかチェックします。

ucb30

先程作成した2件のデザインパーツのみが表示されれば問題ありません。

プレビューで確認

プレビューに移動し、プレビュー取得で確認します。

ucb31

ホバーなどでリンクが「javascript:void(0)」になっていることを確認します。

ucb32

このようになっている場合は、作成したデザインパーツの「{$url{1}}」などが正しく入力されているか確認して下さい。

「{$url{ 1} }」などスペースなどが入っていると正しく動作しません。

ショートコードの設置

ucb33

ダッシュボードに行きショートコードをコピーします。

管理メニューの外観からウィジェットに行き、設置したい箇所にショートコードを貼り付けます。

ucb53

ucb37

動作確認(リダイレクト)

デフォルトでは管理者はカウントされない設定なので、シークレットウィンドウを利用したり、一度ログアウトしてログインしていない状態でアクセスします。

ucb35

アイテムAをクリックするとデザインパーツのリダイレクトURLで設定した「https://www.google.co.jp/」に、アイテムBをクリックすると「http://www.yahoo.co.jp/」に飛ぶことを確認します。

動作確認(表示数とクリック数)

検索条件の検索条件テストで表示数とクリック数を確認できます。

ucb38

今後のバージョンアップ予定

  • クリック数などの統計情報をダッシュボードに表示
  • デザインのプリセット追加
  • 表示条件の追加
  • キャッシュによる高速化
スポンサーリンク

シェアする

フォローする