メインコンテンツへスキップ
ブログ一覧に戻る
統計・データサイエンス

ベイズ統計学のビジネス活用:不確実性をチャンスに変える意思決定アプローチ

2024年7月10日
最終更新: 2026年10月8日
13分で読めます

この記事でわかること

ベイズ統計を業務の意思決定へ結び付ける手順を解説。事前分布と尤度から事後を求める考え方、将来予測と行動選択の違いを、在庫の仮想例とPythonで確認します。欠品・余剰費用や事前分布によって選択が変わる計算、A/Bテストの停止条件、需要・解約・プロジェクトへの応用、モデル点検と更新記録まで具体的に整理します。

「購入率の予測が14%なら、次は何個仕入れるべきか」。確率を推定するだけでは、この問いには答えられません。何人が購入しそうかに加えて、足りなかったときと余ったときの損失を決める必要があります。

ベイズ統計は、事前の情報と観測データから不確実性を更新する方法です。その結果を業務で使うには、予測、選択肢、費用、実行後の確認をつなぎます。以下の人数・金額・結果はすべて独自の仮想教材であり、実顧客の改善実績ではありません。

30秒で要点

  • 事前分布と尤度から事後分布を求めます。結論は、置いたモデルと事前の条件付きです。
  • 未知の購入率の分布と、次に購入する人数の予測は別です。
  • 同じ予測でも、欠品と余剰の費用が違えば選ぶ在庫数は変わります。
  • 少数データ、途中更新、複雑なモデルのどれも、判断の正しさを自動的に保証しません。

まず「何を知るか」と「何を決めるか」を分ける

「購入率を知る」は推定の問いです。「次の20人のうち何人が買うか」は予測の問いです。「何個を用意するか」は意思決定の問いです。三つを同じものとして扱うと、平均値を丸めただけで発注する、といった飛躍が生まれます。

表が収まらない場合は、横にスクロールできます

段階仮想の店舗での問い必要な情報
推定この条件での購入率pはどの程度か購入・非購入の数、観測の仕組み、事前分布
予測次の20機会で何人が購入を希望するかpの不確実性、将来の人数、条件が続くという仮定
決定0〜20個のどれを用意するか欠品・余剰の損失、容量、実行できる選択肢

ベイズによる意思決定では、候補ごとの結果と効用や損失を置き、その期待値を比べます。ただし、金額の期待値だけで安全性や資金制約を表せるとは限りません。Stanの意思決定分析も、結果の分布と効用の指定を別の要素として扱っています。

事前・尤度・事後の役割

購入率pを、まだ正確には分からない量とします。事前分布は今回のデータを見る前に置くpの分布です。過去の知識を使う場合も、対象や季節が今回と違わないか確認します。

尤度は、pの値を仮定したときに観測データがどれだけ生じやすいかを、pの関数として表したものです。尤度そのものが「pがその値である確率」になるわけではありません。事後分布は、事前と尤度を組み合わせ、全体が1になるよう正規化した分布です。大学のベイズ基礎教材では、この関係を「事後は事前×尤度に比例する」と説明しています。

離散的な仮説HとデータDについては、P(D)>0のとき、次の形になります。

P(H | D) = P(D | H) × P(H) / P(D)

連続するpでは、点の確率ではなく密度を使い、正規化には積分が入ります。分母を省いた「比例」の式で計算できる場合でも、事後を確率として読むときには正規化が必要です。

頻度論との違いを、優劣の表にしない

ベイズの95%信用区間は、モデル・事前・データを条件に、事後確率95%を含む範囲です。通常の頻度論の95%信頼区間は、同じ条件で標本抽出と区間作成を繰り返したときの被覆率で解釈します。両者はラベルだけを交換できません。

頻度論にも区間推定や逐次的な実験設計があり、「p値による二択しかできない」という区別は不適切です。また、ベイズで少数データから事後を計算できても、その判断が頑健とは限りません。データが乏しければ事前の違いが結果に強く残ります。どちらの方法でも、測定、比較対象、モデルが問いに合っている必要があります。

五つの段階で、在庫判断を組み立てる

1.対象、期間、選択肢を定める

同じ条件の商品提示を受けた100人について、同じ長さの観測窓で15人が購入したとします。一人を一度だけ数え、繰り返し訪問を別の独立した人として加えません。観測時の在庫は十分で、買えなかった人を「需要なし」に混ぜていないと仮定します。

次は同じ条件の20人に提示し、一人の購入希望は最大1個とします。選択肢は在庫qを0〜20個用意することです。需要を見てから発注するモデルではなく、提示前に一度だけ決めます。

2.事前分布と、強さの意味を明示する

教材としてpにBeta(2,18)を置きます。Beta分布は0から1の間の率を表す分布で、平均は2 / (2 + 18) = 10%です。この二つの数値は編集上の仮定であり、実際に過去20人を観測したという記録ではありません。

Beta(20,180)も平均10%ですが、pを10%付近へより強く集中させます。「平均が同じだから同じ事前」ではありません。実務では出典のある過去データや専門家の範囲予想から設定し、別の事前でも判断が変わらないか確認します。今回の100人を使って事前を作り、その100人を独立な新情報として再度掛け合わせる二重使用は避けます。

3.観測の仕組みを尤度にする

pを条件に、各人の購入を独立なベルヌーイ試行として扱います。100人の購入人数は二項分布となり、15人購入・85人非購入を観測します。この単純化は、同じ世帯の影響、広告経路の大きな違い、季節変動などを無視しています。

実データでそれらが重要なら、属性を含む回帰、集団ごとの階層モデル、時間変化を扱うモデルなどを検討します。表の行数が多いという理由で、独立性を確認したことにはしません。

4.事後を求め、将来の人数を予測する

Beta事前と二項尤度の組み合わせでは、成功数と失敗数をそれぞれ加えます。Stanの共役更新の説明に対応する、解析的に求められる例です。

Beta(2 + 15, 18 + 85) = Beta(17, 103)

事後平均は17 / 120 ≈ 14.17%です。ただし、次の20人の購入人数が常に20×14.17%になるわけではありません。未知のpについて事後分布を平均し、さらに各人が買うかどうかのばらつきを含めます。この事後予測は、今回の条件ではベータ二項分布になります。

次の購入人数Yの期待値は20 × 17 / 120 = 17 / 6 ≈ 2.83人。実際のYは0〜20の整数です。pの信用区間と、Yの予測分布を取り違えないようにします。

5.損失を決めて、全候補を比較する

欠品1個の損失を1,000円、余剰1個の損失を500円と仮定します。この金額は、機会損失や廃棄等を単純化した教材用の値です。売上・仕入額を重複して数えないよう、実務では費用の定義を整理します。

需要Yと在庫qから生じる損失は、次の式です。

損失 = 1,000 × max(Y - q, 0) + 500 × max(q - Y, 0)

Y=0〜20のそれぞれの損失を予測確率で重み付けし、q=0〜20の全21候補を比較すると、期待損失が最小になるのは3個です。欠品と余剰の金額を逆にすると、最小は2個になります。

表が収まらない場合は、横にスクロールできます

仮想の費用条件選ぶ在庫その期待損失
欠品1,000円・余剰500円3個約950.90円
欠品500円・余剰1,000円2個約844.22円

二行の期待損失は、損失の定義が異なります。「二行目の施策の方が優れている」という比較には使いません。また、期待損失が最小の選択でも、その一回の実損失が最小になるとは限りません。

仮想のベータ二項予測で、在庫0から20個の期待損失を比較する二つの曲線。欠品1000円、余剰500円では3個で約950.90円、逆の費用では2個で約844.22円が最小。下段は同じ曲線の在庫0から5個の拡大。
図1:上段は全21候補、下段は同じ計算の0〜5個を拡大。予測分布は共通で、損失の仮定だけが異なる。実店舗の需要予測精度や収益効果を示す図ではない。

標準ライブラリだけで再計算する

次はPython 3.12.10で確認した、外部データや追加ライブラリを必要としない教材です。Pythonの組み合わせ数・積の関数と有理数を使い、ベータ二項分布の確率式を計算します。巨大な人数への効率的な実装ではありません。

from fractions import Fraction
from math import comb, prod

def rising(x, k):
    return prod(range(x, x + k))

n, a, b = 20, 17, 103
probabilities = [
    Fraction(comb(n, y) * rising(a, y) * rising(b, n - y),
             rising(a + b, n))
    for y in range(n + 1)
]
assert sum(probabilities) == 1
expected_people = sum(y * p for y, p in enumerate(probabilities))
print(f"Expected buyers: {float(expected_people):.4f}")

for shortage, excess in ((1000, 500), (500, 1000)):
    expected_losses = [
        sum(p * (shortage * max(y - q, 0) + excess * max(q - y, 0))
            for y, p in enumerate(probabilities))
        for q in range(n + 1)
    ]
    best = min(range(n + 1), key=expected_losses.__getitem__)
    print(f"Shortage {shortage}, excess {excess}: "
          f"q={best}, loss={float(expected_losses[best]):.2f}")

出力は期待人数2.8333、最初の費用条件でq=3, loss=950.90、次の条件でq=2, loss=844.22です。人数を増やす場合には計算方法も検討し、率のモデルを売上金額や一人が複数購入する数量へそのまま流用しません。

事前とモデルを変えたら、判断も動くか

同じ15/100という観測を使い、欠品1,000円・余剰500円で事前だけを変えた仮想計算です。三つの事前を同時に混ぜた結果ではありません。

表が収まらない場合は、横にスクロールできます

事前事後pの事後平均選ぶ在庫
Beta(2,18)Beta(17,103)約14.17%3個
Beta(1,1)Beta(16,86)約15.69%4個
Beta(20,180)Beta(35,265)約11.67%3個

Beta(1,1)はp上で一様ですが、あらゆる尺度で中立という意味ではありません。平均や区間の違いを見るだけでなく、実際に採用する行動が変わるかを点検します。判断が敏感なら、事前の根拠を調べる、追加データを待つ、在庫の上限を付けるなどの選択肢があります。

次に、モデルから模擬データを作り、観測した日別人数や集団差など、判断に重要な特徴を再現できるか確認します。事前・事後予測チェックはそのための方法です。今回のような合計15/100だけでは、曜日差や反復顧客の依存を調べられません。必要な時間・対象の記録も残します。点検した特徴が合っていても、モデル全体が正しいと証明したことにはなりません。

四つの業務で、確率と行動の間を埋める

A/Bテスト:勝率だけで採用しない

案ごとの購入率を推定し、差が実務上必要な水準を超える事後確率や、採用を間違えた場合の期待損失を判断材料にできます。ただし「BがAより高い確率」と「利益が費用を上回る確率」は同じではありません。単価、解約、運用負担など、採用に必要な条件を定めます。三案以上なら、候補間の関係と選択規則も含めて考えます。

更新のたびに事後を計算することと、その時点で止めてよいことは分けます。Dengらの原著プレプリントが扱う任意停止の議論には、モデル・事前・停止規則の条件があります。都合のよい過去の時点や一部のデータを後から選ぶ行為を認めるものではなく、事後確率の閾値がそのまま頻度論の誤検出率5%を保証するわけでもありません。

開始前に最大期間、最小限観測したい曜日・購入周期、安全上の中止条件、採用・見送り・保留の規則を決めます。実験の指標解釈に関する研究も、途中監視や効果の異質性を別の問題として扱っています。短期で止めれば、長期の継続や季節差まで確認できるわけではありません。

需要・在庫:観測された販売数と需要を分ける

先の在庫例は、将来の購入希望人数を予測できると仮定しました。実際には、欠品した日の販売数は潜在的な需要の上限を教えてくれません。「売れなかった」を「欲しい人がいなかった」と扱わないため、在庫切れ、提示回数、販売期間を確認します。

発注単位、納期、返品や廃棄の制約を加えると、0〜20の自由な選択肢ではなくなります。モデルの複雑さを増やす前に、その制約を使った候補の損失表を作ると、何の予測が必要かが明確になります。

顧客解約:予測対象と介入効果を分ける

「翌月までに解約する確率が高い人」を推定できても、その人へクーポンを送れば解約が減るとは限りません。何もしなくても残る人への割引、対応コスト、受け手の負担もあります。

観測窓、解約の定義、予測時点で利用できる情報を固定し、後から分かった解約後の情報を入力しないようにします。対応施策の効果は適切な比較設計で別に調べます。これはベイズに限らず、予測を業務へ移すときの確認です。

プロジェクト・リスク:平均の良さと許容範囲を分ける

完了期間や費用超過について、専門家の範囲予想と途中の進捗を使って予測を更新することは考えられます。ただし、専門家の意見が同じ資料を元にしているなら、独立な証拠が何件もあるかのようには扱いません。

期待費用が小さくても、まれな損失が事業の許容範囲を超えるかもしれません。続行・縮小・中止という選択肢、費用上限、再判断の日を先に決めます。モデルに入れていない障害まで網羅した「全リスク評価」とは呼ばず、未知の条件を別欄に残します。

計算手段は、モデルの必要性から選ぶ

この教材のように解析的に計算できる場合は、最初からMCMCを導入する必要はありません。まず入力と式が追える小さな計算で、意思決定に必要な出力を確認します。属性差や階層構造が必要になったら、それに合うモデルと実装を検討します。

例えばStanでMCMCを使う場合、有限個の標本についてR-hat、実効標本サイズ、モンテカルロ標準誤差などの診断が必要です。Stanの事後解析マニュアルは、標本間の相関と収束の問題を区別しています。抽出回数を増やしただけで、独立した業務データを増やしたことにはなりません。本記事ではStanモデルの実行やその性能比較は行っていません。

導入費用には、計算時間だけでなく、データ定義の維持、実装の検証、更新担当者の引き継ぎも含めます。複雑なモデルの方が説明や保守を難しくするなら、追加の精度や判断価値が費用に見合うかを評価します。

最小の検証:一つの判断票で、更新前後を比べる

最初は一つの商品や施策について、次の票を埋めます。専門家に聞く場合も、結論だけでなく「どの範囲を、なぜ想定したか」を残すと、後で違いを検討できます。

表が収まらない場合は、横にスクロールできます

欄記録すること
問いと担当対象、期間、観測単位、決める選択肢、最終判断者
データ成功・失敗の定義、重複・欠測・欠品、予測時点で使える情報
事前根拠、分布と強さ、今回のデータを二重使用していないか
モデル尤度、独立性、将来も同条件とする範囲、外れる条件
損失と制約誤判断ごとの費用、容量、安全上の中止条件
確認別の事前で選択が動くか、予測と観測のどこが合わないか
運用採用・保留の理由、次の更新日、追加データ、戻す条件

同じ固定パラメータのモデルなら、前回の事後を次回の事前として使い、新しいデータだけを追加できます。過去データも再投入するなら元の事前から計算し直します。季節や商品条件が変わったときは、機械的な累積だけで対応したとせず、モデルと対象期間を見直します。

確認の中心は、何を決めたいか、どの事前情報を使うか、結果をどう点検し更新するかの三つです。計算結果と人が採用を決めた理由を同じ票に残すことで、次回は仮定のどこを変えるべきかを追えます。

分布更新の基礎はベイズ統計学の詳細解説、介入の比較は因果推論入門、人数と停止条件はサンプルサイズとA/Bテストの罠へ進めます。問いの整理から始める場合は統計の判断ガイドを使ってください。

よくある質問(FAQ)