Python で統計学入門―AB テストの統計的仮説検定を Python で行う― | SiTest (サイテスト) ブログ

メニューボタン閉じるボタン

Python で統計学入門―AB テストの統計的仮説検定を Python で行う―

AB テストでそれぞれのパターンにおいて、コンバージョン率などに差が出た場合、
その差がたまたまにすぎないのか、どちらかのパターンよりがあるのかどうかを統計的に確かめる必要があります。これを統計的仮説検定といいます。

以前の記事では、統計的仮説検定について、詳細な説明がされています。
今回は、実用性を重視し、Python を使って簡単にそれを求めてみます

カイ二乗検定を Python で行う

さて、ABテストの結果に、偶然ではない差があるかどうかを確かめるためには、統計的仮説検定のうち、カイ二乗検定を使うのが一般的です。

何か難しそうですが、Python の Scipy モジュールを使えば、簡単にそれをもとめる事ができます。

Scipy がインストールされていない場合は、下記のようにインストールしてください。

pip install numpy
pip install scipy

さて、AB テストの結果、下記のようになったとします

実際のコード

この結果に対しカイ二乗検定を行うコードは、下記のようになります。

# coding: UTF-8
import numpy as np
from scipy import stats

#コンバージョンがあったクリック/なかったクリックを2次元表で表します。
data = np.array([[400, 9600],[340, 9660]])
g, p, dof, expctd=stats.chi2_contingency(data)
print("χ2乗値は %(g)s"%locals())
print( "確率は %(p)s" %locals() )
#2つのパターンの差が偶然に起こり得る可能性が5%以下かどうかを判定
if p < 0.05:
    print("有意な差があります")
else:
    print("有意な差がありません")

実行結果は以下のようになります

χ2乗値は 4.88479133339
確率は 0.0270943093864
有意な差があります

すでに集計済みのデータであるので scipy.stats にあるものの内、chi2_contingency メソッドを用います。与えるデータは、それぞれのパターンの結果を2次元配列(numpy)にしたものです。

さて、4種類の数値が chi2_contingency メソッドの戻り値が得られますが、最も重要なものが p値=確率 です。1が100%として、結果の差が偶然である確率を示します。

この場合、この結果が偶然である確率が、約0.027、すなわち、2.7%であるので、「この結果は偶然ではない=有意である」ということがわかります。

では、何%以下を有意と認めるのが正しいのでしょうか?厳密なテストの場合、1%以下で無いといけない。という判断もできますが、ABテストの場合、数千、数万のサンプルが得られる場合なら、5%以下、サンプル数がすくなければ10%以下で、「意味のある違い」とみなす場合が多いです。

Python を使えば、専門的知識が必要な計算もかなり簡単にできるようになりますので、ぜひお試しください!

今すぐお気軽に
ご相談ください。

0120-315-465

(平日 10:00~19:00)

今すぐお気軽に
ご相談ください。

0120-315-465

(平日 10:00~19:00)

グラッドキューブは
「ISMS認証」を取得しています。

認証範囲:
インターネットマーケティング支援事業、インターネットASPサービスの提供、コンテンツメディア事業

「ISMS認証」とは、財団法人・日本情報処理開発協会が定めた企業の情報情報セキュリティマネジメントシステムの評価制度です。

いますぐ無料で
お試しください。

SiTest の革新的な機能を
お試しいただけます。
利用規約

お名前【必須】
メールアドレス【必須】
電話番号【必須】