phpとmysqlとマーケティングについてのメモ

忘れてしまってもいいいように

smartyでおこなうABテスト(a/b split testing)

PHPからsmartyを呼び出してABテストを行う場合のコード(テンプレート側です)。

基本的には下記のように記述します。

ABテストとは言っていますがこの場合は3パターンのABCテストです。 

{assign var=rad value=1|rand:3}

{if $rnd == 1}

<a href="http://www.hoge.jp/?dummy=1">メッセージ1</a>

{elseif $rnd == 2}

<a href="http://www.hoge.jp/?dummy=2">メッセージ2</a>

{else}

<a href="http://www.hoge.jp/?dummy=3">メッセージ3</a>

{/if}

 通常は上記のようなコードを書きますが、なぜかsmartyで(1|rand:3)が使えなかった場合の対応です。

 

PHPのコードの変更はできない前提なので、テンプレート側で乱数を生成して引き渡しています。

↓ 今回は10パターン同時テストです。

 

{php}$rnd=rand(0,99);$this->assign('rnd',$rnd);{/php}

 

{if 10 > $rnd } 

<a href="http://www.hoge.jp/?dummy=1">メッセージ1</a>

 

{elseif 20 > $rnd }

<a href="http://www.hoge.jp/?dummy=2">メッセージ2</a>

 

{elseif 30 > $rnd }

<a href="http://www.hoge.jp/?dummy=3">メッセージ3</a>

 

{elseif 40 > $rnd }

<a href="http://www.hoge.jp/?dummy=4">メッセージ4</a>

 

{elseif 50 > $rnd }

<a href="http://www.hoge.jp/?dummy=5">メッセージ5</a>

 

{elseif 60 > $rnd }

<a href="http://www.hoge.jp/?dummy=6">メッセージ6</a>

 

{elseif 70 > $rnd }

<a href="http://www.hoge.jp/?dummy=7">メッセージ7</a>

 

{elseif 80 > $rnd }

<a href="http://www.hoge.jp/?dummy=8">メッセージ8</a>

 

{elseif 90 > $rnd }

<a href="http://www.hoge.jp/?dummy=9">メッセージ9</a>

 

{else} 

<a href="http://www.hoge.jp/?dummy=10">メッセージ10</a>

 {/if} 

 

いったんPHP側で乱数を設定しておいてからsmarty側で条件分岐します。不細工ですがこれで対応出来ます。

結果についてはジャンプ先のURLにgoogleアナリティクス解析とcanonicalタグを入れた上で、アナリティクスで解析します。

 

今後の課題、または改良としては

新規ユーザーのみにA/Bテストを行なうなどの工夫や、それぞれの表示回数を本格的に均等にするなどがありますが、それらを行う場合はPHP側での工夫が必要ではないかと思います。