スポンサーリンク

【Python】A/Bテストのサンプルコード

記事内に広告が含まれています。
スポンサーリンク

A/Bテスト

A/Bテストは、2つのバージョン(AとB)を比較し、どちらがより効果的であるかを判断するための実験手法です。

例えば、Web広告のA/Bテストでは、異なる広告バナーやキャッチコピーなどを比較し、クリック率やコンバージョン率にどのような影響を与えるかを評価します。

ここからは、Web広告のA/Bテストを例に、手順やA/Bテストを行うためのPythonコードでの実装方法を記載します。

A/Bテストの手順
  1. 目標の設定: 例えば、クリック率やコンバージョン率を改善すること。
  2. 変数の選定: テストする広告のバージョンを選定します。
  3. サンプルの分割: ユーザーをランダムに2つのグループ(AとB)に分割します。
  4. データ収集: 各グループのクリック数やコンバージョン数を収集します。
  5. 統計的検定: 収集したデータを基に、2つのバージョンの効果の差が統計的に有意であるかを検定します。
スポンサーリンク

Pythonでの実装

以下は、PythonでWeb広告のA/Bテストを行うためのサンプルコードです。クリック率を比較する例を示します。ここでは、statsmodelsライブラリを使用します。

ライブラリのインストール
pip install statsmodelspip install japanize-matplotlib
サンプルコード
import numpy as np
import statsmodels.api as sm
import matplotlib.pyplot as plt
import japanize_matplotlib

# サンプルデータ
# グループA:クリック数と表示回数
clicks_a = 30
views_a = 1000

# グループB:クリック数と表示回数
clicks_b = 50
views_b = 1000

# クリック率の計算
rate_a = clicks_a / views_a
rate_b = clicks_b / views_b

print(f"グループAのクリック率: {rate_a}")
print(f"グループBのクリック率: {rate_b}")

# 比率の差の検定
count = np.array([clicks_a, clicks_b])
nobs = np.array([views_a, views_b])

# z検定を実行
z_stat, p_value = sm.stats.proportions_ztest(count, nobs)
print(f"Z検定統計量: {z_stat}")
print(f"p値: {p_value}")

# 結果の解釈
alpha = 0.05
if p_value < alpha:
    print("帰無仮説を棄却します。2つのクリック率は有意に異なります。")
else:
    print("帰無仮説を棄却できません。2つのクリック率に有意な差はありません。")

# 結果の可視化
labels = ['グループA', 'グループB']
click_rates = [rate_a, rate_b]

fig, ax = plt.subplots()
ax.bar(labels, click_rates, color=['blue', 'green'])
ax.set_ylabel('クリック率')
ax.set_title('A/Bテストのクリック率比較')

# グラフをファイルに保存
plt.savefig('ab_test_click_rates.png')

# グラフを表示
plt.show()
コードの説明
  1. データの設定: clicks_aviews_aはグループAのクリック数と表示回数、clicks_bviews_bはグループBのクリック数と表示回数です。
  2. クリック率の計算: 各グループのクリック率を計算します。
  3. 比率の差の検定: sm.stats.proportions_ztestを使ってz検定を実行します。
  4. 結果の解釈: p値が有意水準(ここでは0.05)より小さい場合、帰無仮説を棄却し、2つのクリック率が有意に異なると判断します。
  5. 結果の可視化: Matplotlibを使って、クリック率の比較を棒グラフで可視化します。
サンプルコードの実行結果

サンプルコードの実行結果は以下のとおりで、有意差があることがわかります。

グループAのクリック率: 0.03
グループBのクリック率: 0.05
Z検定統計量: -2.2821773229381925
p値: 0.022478873366125248
帰無仮説を棄却します。2つのクリック率は有意に異なります。

画像の出力結果は以下のとおりです。

おわりに

今回のサンプルコードは様々なA/Bテストで利用できますし、他の用途での有意差検定を行うコードしても利用できます。

タイトルとURLをコピーしました