ABテスト計算機
バリアントが本当に対照群に勝ったかが分かります。1000人中130件と1000人中100件のコンバージョンなら、zスコアは2.10274060562、両側p値は0.0354883261439です。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- 対照群の訪問者数
- 1,000
- 対照群のコンバージョン数
- 100
- バリアントの訪問者数
- 1,000
- バリアントのコンバージョン数
- 130
- 対照群の率
- 0.1
- バリアントの率
- 0.13
- 率の差
- 0.03
- プールされた率
- 0.115
ABテストは二つのコンバージョン率を比べ、観測された差が「両群は同じ成功確率を共有する」という考えを棄却できるほど大きいかを問います。対照群の訪問者とコンバージョン、バリアント群の訪問者とコンバージョンという四つの非負のカウントを入力します。本計算機は古典的な二比率z検定を実行します。各標本率を作り、率が等しいという帰無のもとで成功をプールし、差の標準誤差を組み立て、標準正規曲線からzスコアと両側p値を返します。
二比率z検定がAB実験について示すこと
コンバージョンは二値の結果です。訪問者が目標を達成したか、しなかったかです。対照のコンバージョン率は対照のコンバージョンを対照の訪問者で割った値です。
バリアントの率はバリアントのコンバージョンをバリアントの訪問者で割った値です。両群が一つの未知の成功確率を共有するという帰無仮説のもとでは、その共有確率のもっとも効率的な推定はプール率、すなわち両群の全コンバージョンを両群の全訪問者で割った値です。率の差の標準誤差は、教科書どおりの二比率の式に従います。
プール率かける(一引くプール率)かける標本サイズの逆数の和の平方根です。zスコアは観測された率の差(バリアント引く対照)をその標準誤差で割った値です。正のzはバリアントが対照よりよく転換したことを、負のzはより悪く転換したことを意味します。
両側p値は、標準正規のもとで観測されたもの以上に極端なzがどちらの向きでも出る確率です。小さなp値は率が等しいことへの証拠になり、大きなp値は標本サイズを踏まえれば差が普通であることを意味します。独立な二つの二項比率の古典的なプール検定であり、プロダクトマネージャ、学生、自動化スクリプトが同じ四カウントから同じ数値を受け取れるように書いてあります。
入力契約、応答の形、エラー時の振る舞い
教科書表記の n1、x1、n2、x2 といった別名も受け付けますが、一つの量につき名前は一つだけ送ってください。カウントはゼロ以上でなければなりません。コンバージョンは対応する訪問者合計を超えてはなりません。
人より多くの成功は観測できないからです。訪問者合計はどちらも厳密にゼロより大きくなければなりません。検証失敗は前払い残高を消費しません。
信頼区間、検出力、逐次検定が必要ならご自身のソフトと組み合わせてください。この能力は意図して、四カウントからの純粋な解析的二比率z検定です。
活用例
ランディングページと決済の実験
対照とバリアントの訪問者・コンバージョン数を、古典的な AB 有意差の読み取りのための zスコアと両側 p値に変えます。
ダッシュボードと編集部の事実確認
公開された実験カウントから「バリアントが勝った」という言い回しを、手計算の誤りや空のトラフィックセル由来の NaN なしで求めます。
よくある質問
ある群の訪問者がゼロだとどうなりますか?
コンバージョン率はコンバージョン割る訪問者なので、訪問者ゼロの群では率も z検定も未定義です。これらの失敗は課金されません。
p値は片側ですか、両側ですか?
両側です。 p値は 2(1 − Φ(|z|)) であり、率が等しいという仮定のもとで、観測された差以上の差がどちらの向きでも出る確率です。
正の z-score はバリアントの勝利を意味しますか?
正の z-score は、バリアントのコンバージョン率が対照より高かったことを意味します。その差が統計的に注目に値するかは p値が答えます。本計算機は自動の有意水準カットで勝者を宣言しません。
コンバージョン数が訪問者数を超えてもよいですか?
いいえ。人数より多くの成功は起こりえないため、コンバージョン数は0からその群の訪問者数までである必要があり、それ以外は計算前に受け付けません。
必要な訪問者数も計算できますか?
いいえ。手元の数値に古典的な検定を当てはめるだけで、必要なサンプルサイズは求めず、テスト中に何度も結果を確認することによる影響も補正しません。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/stat/ab-test \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"control_visitors":1000,"control_conversions":100,"variant_visitors":1000,"variant_conversions":130}'const res = await fetch("https://api.kit.forhosting.com/stat/ab-test", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"control_visitors": 1000,
"control_conversions": 100,
"variant_visitors": 1000,
"variant_conversions": 130
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/stat/ab-test",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"control_visitors": 1000,
"control_conversions": 100,
"variant_visitors": 1000,
"variant_conversions": 130
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/stat/ab-test", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"control_visitors":1000,"control_conversions":100,"variant_visitors":1000,"variant_conversions":130}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"control_visitors":1000,"control_conversions":100,"variant_visitors":1000,"variant_conversions":130}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/stat/ab-test", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"control_visitors": 1000,
"control_conversions": 100,
"variant_visitors": 1000,
"variant_conversions": 130
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "stat.ab_test",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
いずれかの群の訪問者がゼロだとコンバージョン率は未定義になり、ゼロ除算をせず invalid_input で失敗します。
二比率z検定がAB実験について示すこと
このエンドポイントは逐次的な常時妥当なp値を作らず、途中覗き込みの補正もせず、必要標本サイズも計算しません。
入力契約、応答の形、エラー時の振る舞い
必須の有限数四つを含む JSON 本体を POST してください。基準群には control_visitors と control_conversions、挑戦群には variant_visitors と variant_conversions です。各欄は JSON の数でも数値文字列でも構いません。非有限値、欠落欄、空文字列は欄名を付けた invalid_input で失敗します。訪問者ゼロの群ではコンバージョン率が未定義になり、採点器と API クライアントが空の群とその他の不正入力を見分けられるよう、エラー文はその旨を明示します。成功時は四カウントをエコーし、control_rate と variant_rate、符号付きの rate_diff(バリアント引く対照)、帰無で使う pooled_rate、差の standard_error、z_score、two_sided の p_value、短い公式文字列を返します。両群ですべての訪問者が転換したか、誰も転換しなかった場合、標準誤差はゼロで両率は等しく、計算機は 0/0 の NaN の代わりに z_score ゼロと p_value 一を返します。
ABテスト計算機が役に立つ場面
グロースチームとプロダクト分析の机は、空の実験セルから訪問者ゼロの行を貼ったときに黙って NaN を返さない、決定的な ABテスト計算機を必要とします。グロースマーケティングのノートは、ランディングページや決済の実験を要約してから CUPED、逐次検定、回帰調整のために本格的な統計パッケージへ渡す用途で二比率z検定を使います。「実装は純粋な parse のティア A なので、成功した呼び出しはどれも安く速く、エッジワーカーとブラウザで再現できます。教材プラットフォームと試験ジェネレータは、訪問者ゼロの群をエラーとして印し、壊れた採点器が正解扱いしかねない空の成功ペイロードにしないオラクルを必要とします。「ABテスト計算機」で順位を争うコンテンツサイトは明確な検索タイトルとキーワードを持つライブツールを得て、自動化スクリプトはモデルトークンも外向き通信もなく、公開された基本料金 $0.002 で同じ型を KIT API から呼び出します。
連携の活用例
宿題と統計の授業
生徒が四カウントを送り、教科書の方法と照合してプール二比率z検定を確かめられます。訪問者ゼロの群では invalid_input になります。
技術的な質問
訪問者とコンバージョンのカウントから ABテストを行うには?
control_visitors、control_conversions、variant_visitors、variant_conversions を送ってください。API は各コンバージョン率、プール率、標準誤差、z-score(バリアント引く対照)、両側 p値を返します。
ABテスト計算機の料金はいくらですか?
ブラウザのツールは無料です。API リクエストは成功した呼び出しごとに KIT の前払い残高を $0.002 で使います。不正な入力は課金されません。