gepuro.net
gepulog

データ分析エンジニアによる備忘録的ブログ

ABテスト#1 - (似ている|似てない)記事一覧の表示数を変える

ABテストを実装&実施してみる で試してみたABテストの結果です。

個別の記事を開いた時、下部に表示させていた"似ている記事"、"似ていない記事"の表示数を変えてみました。

  • パターンA: それぞれ5件
  • パターンB: それぞれ3件

結果は、

パターン pv数 session数 pv数/session数
A 333 230 1.45
B 297 226 1.31

ウィルコクソンの順位和検定を使いました。

Asymptotic Wilcoxon rank sum test
data:  df[df$ab == 0, ]$pv and df[df$ab == 1, ]$pv
W = 25835, p-value = 0.02378
alternative hypothesis: true mu is not equal to 0

パターンAとパターンBのpv数は、有意水準5%で中央値が等しいという帰無仮説を棄却する。

パターンAの勝ちですね。

ABテストを実装&実施してみる

このブログでABテストを実施するにあたって、悩んだ事をつらつらと書きます。

既にあるwebビーコンを活かしたい

webビーコンを作った にあるように、このブログには自作ビーコンが埋め込まれています。google analyticsでは拾いきれないログを取得する動機で作ったのですが、これを活かしきれていませんでした。

今回はABテストを実装する上で、このログを有効活用しようと思います。

悩んだ実装方法

  • アプリ側でwebビーコンが持つIDを使いたい
    • 新規ユーザの場合、htmlのレンダリングが先なので、IDを特定できない
  • webビーコンにABテストを仕込む
    • アプリとwebビーコンが密結合になってしまう
    • 独立したサービスとして動かしたい
  • ABテスト用のアプリを新たにつくる
    • dom操作で書き換えれば出来そうだが、重くなりそう

最終的な実装方法

  • アプリ側でアクセス元のipアドレスを取得
  • 偶数ならA、奇数ならBを出す

検証方法

webビーコンにABというカラムを追加して、偶数か奇数かを記録しておけば、後から確認が簡単になる。

ワンライナーで、こんな感じで現状を確認出来るようにした。

cat data/* |
jq -r '
select(.site=="blog.gepuro.net") |
select(.ab==1 or .ab==0) |
select(.ymd >= 20151221) |
[.sid, .ab] | @csv' |
header -a '"sid","ab"' |
csvsql --query "select sid,ab,count(1) as view from stdin group by sid, ab" |
csvsql --query "
select
ab,
1.0*sum(view)/count(1) as pps,
sum(view) as view_cnt,
count(1) as session_cnt
from stdin
group by ab"

慣れているという理由でhttp://datascienceatthecommandline.com/に紹介されているcsvsqlを利用したけど、最近の流行りはq - Text as Dataだと思うので、試したいな。

ABテストの内容は、後日報告します!