購買率が上がっても採算が悪化する例を、150円クーポンの人工データで作りました。
A/Bテストで何を評価するか
今回は、クーポンを配布する施策群と、配布しない対照群に店舗を無作為に割り付けるA/Bテストを想定しました。購買率と顧客あたり粗利は、どちらも割付対象の全顧客を分母とし、顧客を等しく重み付けして集計します。
購買率の変化と値引き後の粗利差を組み合わせて読みます。粗利差で配布の採算を考え、購買率差からその内訳を追うためです。
人工データの生成条件
小売チェーンを想定し、乱数シード42でデータを生成しました。私は購買率だけで採否を決めると判断が変わるよう、施策群の購入額も低く設定しました。
- 顧客数は5,000人で、新規30%、既存一般50%、既存優良20%の確率で顧客層を生成しました。
- 店舗数は30店舗で、施策群15店、対照群15店に割り付けました。
- 施策は150円クーポンの配布で、施策群の購入者全員に適用しました。
- 日次データは別に生成した2025年10月1日〜12月29日の90日分で、曜日・天候・月末効果を含みます。
全体平均だけでは、誰に効いたかが分からない
クーポンがなくても購入する割合は、顧客層によって異なります。今回は新規・既存一般・既存優良を分け、各層の購買率を集計しました。
全体の購買率は対照群32.6%、施策群38.3%で、差は+5.7ポイントでした。
| 顧客層 | 購買率差 |
|---|---|
| 全体 | +5.7ポイント |
| 新規 | +12.0ポイント |
| 既存一般 | +2.9ポイント |
| 既存優良 | +4.4ポイント |
顧客の購入を独立と仮定した全体のカイ二乗検定ではp<0.001でした。対照群2,512人中820人、施策群2,488人中954人の購入有無を比較しました。店舗ごとの購買率を等しい重みで平均すると、小さな店舗の顧客の重みが相対的に大きくなり、評価対象が変わります。
日次売上では変動と店舗規模差を分ける
日次売上は、顧客5,000人の購買・粗利とは対応しない、独立した補足例です。週末が平日の1.3倍、雨の日が0.8倍、25日以降が1.15倍になる設定で、両群に共通して作用します。
施策による売上増加率は2%に設定しました。店舗ごと・日ごとの乗法ノイズの標準偏差は12%です。独立なノイズを等しい重みで平均する概算では、一群15店舗の平均に残るノイズの標準偏差は12%÷√15で約3%になります。

曜日・天候・月末効果は両群に共通するため、同日の群平均の比では相殺されます。売上の群間差には、店舗規模差と店舗ごと・日ごとのノイズも含まれます。
施策店の平均客数は対照店より約8%多くなっています。生成時の基準客数の店舗平均は施策群189.5人/日、対照群174.7人/日で、対照群を分母とした差は約8.4%です。無作為に割り付けても、15店舗ずつでは規模の偏りが残りました。
移動平均には店舗規模差が残ります 7日移動平均は日々の変動をならすために使います。隣り合う点には同じ日の売上が含まれるので、独立した観測として検定する用途には使いません。
有意差が出ても、利益が出ているとは限らない
粗利は、顧客あたりのクーポン控除後粗利を指します。
| 顧客層 | 購買率差 | クーポン控除後粗利差/顧客 |
|---|---|---|
| 新規 | +12.0ポイント | +46円 |
| 既存一般 | +2.9ポイント | −44円 |
| 既存優良 | +4.4ポイント | −101円 |
| 全体 | +5.7ポイント | −31円 |
粗利差は施策群から対照群を引いた値です。施策群の購入者は値引き前粗利から150円を一度だけ引き、非購入者は0円としています。配信費・運用費や税を含む純利益とは区別します。
全体値には各群の実際の顧客層構成を使いました。生成時の30%・50%・20%は層を抽出する確率で、両群の構成比にはずれがあります。
新規は対照群722人、施策群742人で、購買率は順に13.99%、26.01%、粗利は125.07円、170.96円でした。既存一般は対照群1,299人、施策群1,254人で、購買率は35.72%、38.60%、粗利は450.69円、406.41円です。
既存優良は対照群491人、施策群492人で、購買率は順に51.93%、56.30%、粗利は1,046.12円、945.06円でした。全体は対照群2,512人、施策群2,488人で、購買率は32.64%、38.34%、粗利は473.48円、442.71円です。差の計算には丸め前の平均値を使いました。
生成時の値引き前購入額の平均は、新規2,800円、既存一般4,200円、既存優良6,500円です。施策群ではそれぞれ50円、150円、300円低く設定し、粗利率は30%としました。この粗利差には、購買率だけでなく購入額の変化と150円のクーポン費用も含まれます。
各顧客層の購買率をp、購入者あたりの値引き前粗利をmとすると、顧客あたり粗利差はp_T×(m_T−150)−p_C×m_Cです。Tは施策群、Cは対照群を表します。
顧客単位のブートストラップによる95%区間は、新規が+13〜+77円でした。既存一般は−91〜+1円、既存優良は−227〜+22円で、独立な顧客を仮定した探索では、新規だけが区間全体で0を上回っています。各群・各顧客層の観測人数を保って顧客を復元抽出し、20,000回の平均粗利差の2.5・97.5パーセンタイルを区間の端点としました。

既存優良は、クーポンなしの購買確率を55%に設定した層です。
追加の実験で確かめたいこと
- 新規顧客に限定して配布した場合も、粗利差が正になるかを調べたいと考えています。
- 100円への減額も試したい条件です。値引き費用と購買率の改善幅がともに変わるため、粗利で比べます。
- 再来店後の粗利まで含めて、初回の値引きを回収できるかも追います。
ベイズ推定で購買率の不確実性を表す
施策群の購買率が対照群を上回る事後確率を求めるため、ベイズ推定を使いました。粗利差は観測された金額を再抽出するブートストラップで区間を求め、購入と金額で方法を分けています。
ベイズ推定の基本的な考え方
ベイズ推定では、事前分布を観測データで更新して事後分布を求めます。今回は両群の購買率を分布として表し、施策群が対照群を上回る確率を計算しました。
投資判断に使う確率と費用
購買率の事後分布から分かるのは、購入する割合の不確実性です。
| 知りたいこと | 頻度論による分析 | ベイズ推定 |
|---|---|---|
| 施策は効いたか | 効果の推定値・信頼区間・p値を報告 | 購買率差が正である事後確率を計算 |
| 効果はどのくらいか | 点推定と信頼区間 | 事後分布として確率的に表現 |
| 投資判断に使えるか | 効果の推定値と区間に、損失や実施費用を合わせて判断 | 利益の事後分布があれば、損失や実施費用も含めて判断できる |
| テスト途中で判断したい | 固定標本の検定を反復するなら多重性を調整。逐次検定も選択肢 | 事後分布を逐次更新できる。停止判断は別途設計 |
| データが少ない場合 | 推定できるが、標本数が少ないと区間が広くなりやすい | 事前情報を反映できるが、少数データでは事前分布の影響が強くなる |
今回の購買率と粗利差の推定結果
購買率の事後分布をセグメント別に見る
各群・各顧客層の中では、顧客が共通の確率で独立に購入するモデルを使いました。購入有無はベルヌーイ分布、購入人数は二項分布で表せます。生成時の購買確率も群と顧客層ごとに共通で、購入有無に店舗固有の効果は入れていません。主解析はこの独立モデルに合わせています。事前分布は購買率0〜1を等しく扱うBeta(1,1)としました。対象者n人のうちy人が購入したとき、事後分布はBeta(1+y,1+n−y)になります。

両群の事後分布から200,000組の購買率を独立に抽出して比較しました。施策群が対照群を上回る割合は、新規でほぼ100%、既存一般で約93%、既存優良で約91%でした。
既存優良では、購買率差が0以下の領域に約9%の事後確率が残ります。購入が増える方向に事後分布が寄っていても、表の粗利差は負だからです。
粗利差をブートストラップで評価する
全顧客の粗利差は、各群の顧客を重複ありで再抽出するブートストラップで評価しました。抽出人数は対照群2,512人、施策群2,488人に固定し、平均差を20,000回計算しています。表のパーセンタイル区間は、再計算した差の中央95%を残した範囲です。
| クーポン控除後粗利差のブートストラップ | 結果 |
|---|---|
| ブートストラップ中央値 | 約−31円/顧客 |
| 95%パーセンタイル区間 | 約−70〜+9円/顧客 |
| 再標本化した差が正になった割合 | 約6% |
約6%は、20,000回の再標本化で平均粗利差が正になった回数を、全反復回数で割った割合です。利益改善の事後確率としては使いません。
区間は0をまたぎますが、このシミュレーションでは粗利差の点推定が負であることを基準に、全顧客配布を見送る判断です。
補助解析として、各群15店舗ずつを復元抽出した粗利差の95%区間は約−67〜+2円でした。顧客単位の区間とともに、損失側から小幅な改善までを含んでいます。
モデルを広げる場合の条件
- 今回のベイズ計算では、顧客層ごとの購買率を推定しました。
- 次に追加するなら購入額を含む粗利モデルです。粗利改善額の基準を超える事後確率で判断したいからです。
- 今回は層ごとに独立に更新しました。顧客層を細分化するなら、層間で情報を共有する階層モデルを検討します。
- 途中で採否を決める設計なら、期待損失に基づく停止基準と最大期間を先に置きます。
この集計をBIとLLMで扱うなら
この分析をBIやLLMで扱う際の集計単位は顧客です。購入明細だけを分母にすると非購入者が落ち、今回評価した粗利とは別の指標になるためです。
集計と推定を区別する
BIの画面には購買率、粗利、対象顧客数を併記する設計にします。顧客層別の集計と日次売上は、分母も時間の単位も違うため、別の表示として扱います。
| 問い | BIツール | 統計モデル |
|---|---|---|
| 購買率差と不確実性はどの程度か | 単純集計だけでは区間を評価できない | 推定値・信頼区間・p値、または事後分布を計算 |
| 曜日・天候の影響を除いた施策効果は | 回帰などの分析機能・外部連携を使用 | 回帰モデルで外部要因を調整 |
| 次回施策の増分利益が正になる確率は何%か | 確率モデルの推定結果を表示 | 配布人数・期間・費用を定め、将来の購買・購入額を含む事後予測分布から算出 |
| 新規への限定配布の採算 | 顧客層別の粗利と実施費用を表示 | 顧客層別の粗利推定と実施費用を組み合わせる |
区間推定は分析コードから取り込み、集計値と組み合わせる設計を考えています。購入者あたりの金額と、非購入者を含む顧客あたりの金額は、画面上でも分母が分かる名前にします。
非購入者と値引きの処理をそろえる
LLMに今回の計算を依頼するなら、入力には顧客ごとの購入・粗利と店舗の割付情報を含めます。計算を照合する箇所は、非購入者を分母に含めたか、施策群の購入者だけに値引きを一度適用したか、割付どおりに集計したかです。
購入者全員への値引きを計算に入れます 今回の設定では、追加で購入した顧客だけに値引く計算にするとクーポン費用を過小評価します。
次の実験で変える設計
配布対象を先に新規へ絞る
同じデータで配布対象を選ぶと収益性の評価にも選択の偏りが入るため、新規限定で別の実験を組みます。
施策前の情報を割付に使う
施策で変わった購入行動を割付や調整に使うと、測りたい効果まで取り除くためです。店舗をまたぐ顧客移動やクーポン共有は、同じ店舗内の相関とは別に扱います。
利用明細から粗利を計算する
実店舗で粗利を計算するなら、クーポン利用率、複数回の購入、返品を反映します。今回の購入者全員に150円を適用する設定から、実際の利用明細に基づく控除へ変える設計です。採算には配信費や運用費も加えます。
採用基準を金額で決める
採用基準は、最低限欲しい粗利改善額と許容できる下振れ額です。改善額が小さければ、正の効果でも実施費用を回収できないためです。
終了後の購買も追う
値引き中の購入は、その後の買い控えに置き換わる可能性があります。観測期間は商品の通常の購買間隔に合わせて決めます。
| 分析の視点 | 購買率から読むこと | 粗利・店舗・時間を加えて読むこと |
|---|---|---|
| 効果の見方 | 全体平均の差 | セグメント別・店舗別の効果分解 |
| 外部要因 | 施策前の店舗規模差を区別できない | 施策前の売上や店舗規模を調整に使う |
| 評価指標 | 購買率・売上 | クーポン控除後粗利と実施費用、再来店後の粗利 |
| 計算結果の読み方 | 購買率の群間差に対するカイ二乗検定でp<0.001 | 粗利差の顧客単位ブートストラップで正の差が出た割合は約6% |
| 時間軸 | テスト期間のみ | 施策期間と終了後の再来店・買い控え |
まとめ
- 配布対象は実験前に新規顧客へ限定します。
- 店舗規模と施策前売上を割付に使います。
- 主要指標は、非購入者を含むクーポン控除後粗利です。
- 施策終了後も再来店と値引きなしの購買を追う設計にします。
- 停止基準と店舗単位の区間推定方法は、結果を見る前に決めます。