💨

【日曜分析】“安い”に飛びつく前に──因果推論で読む「仕入れ先切替」の本当のリスク【初心者向け解説】

に公開

イントロダクション

この記事では、データ分析を活用したサプライチェーンの最適化をテーマに因果推論について解説していきます!
はじめて因果推論に触れる読者向けに、相関と因果の違い・do演算子の直感・「なぜ地域で調整するのか」を身近な具体例から説明し、そのあとで仕入れ先切替の例に置き換えて実務で使える形に落とし込みます。

例えば、仕入価格が安い新規業者を見つけたとき——
「値段が安いなら切り替えるべき? でも納期遅延が増えたら在庫・欠品コストが跳ねる…」
こういうトレードオフの意思決定で役に立つのが因果推論です。相関ではなく、**“新規に切り替えたら本当にどうなるか(do)”を見に行きます。
ということで、最初に
前提条件(評価する方策)を共有し、DAG(因果図)を軽く導入したうえで、具体データの例を使って順を追って解説します。最後に、結果を在庫・サービス・損益(NPV)**までつなげる実務フローも示していきます。


0. 超入門:身近な例で示す、相関と因果の違い

例A:広告と売上(季節の交絡)

  • 例えば、「広告費上がっている月は売上も上がっている」という観察上での相関が見えるとします。
  • でも実は「12月はホリデー需要がある」という季節要因(交絡因子)が両方を押し上げていただけかもしれません。
  • ここで重要な問いは、「広告を増やしたおかげで売上が増えたのか?」という因果を知りたいということです。
    • ※そもそも需要があった月に、広告を売っていて、売上が上がったのは本当に広告のおかげかどうかを知りたいということです。
      ここで因果推論のポイント
      「広告を増やす世界に書き換えたら(= do(\text{広告}=\text{増やす}))売上はどうなる?」と考えるのが因果推論。広告と売上両方に影響する“季節”のような要因を交絡と呼び、これを調整すると「広告そのものの効果」に近づけます。

例B:割引シールとレジ行列(自己選択の交絡)

  • 例えばお店で、割引品を選ぶ人は「まとめ買いしがち」かもしれません。
  • ということは、行列の長さは「割引のせい」ではなく、「まとめ買い傾向」の影響かもしれません。
  • 購買行動を調整しないと、割引の因果効果を誤解します。

理解手助けメモ

  • 相関:ただ共に動く。
  • 因果:片方を強制的に変えたら(do())もう片方がどう変わるかの影響。
  • 交絡:両者に同時に影響して“相関っぽく見せる”第三の要因。
  • 調整:交絡の違いを“同じ土俵”にそろえること。

0.5 軽いDAG入門:なぜ「地域」で調整するの?

**DAG(Directed Acyclic Graph)**は「どの変数がどれに影響するか」を矢印で描いた因果の関係図です
どれを調整すべきかを決めるのに使います。

今回の基本イメージ(方策A:地域構成は現状維持)は次の通りです。

  • ここで地域pa)は、仕入れ先の選ばれやすさpa \to X)と遅延の起きやすさpa \to Y)の両方に影響し得る交絡です。
  • 交絡の抜け道(backdoor) X \leftarrow pa \rightarrow Y を地域でそろえる(調整)ことでふさぎ、X \to Y の効果を公平に比較できます。

記号メモ:pa_i とは?

  • paparents(親変数) の略。DAGで原因側にある共変量/交絡集合を指します。
  • 本稿では pa_i「仕入れ先の地域」 として具体化。i は地域カテゴリのインデックス(例:都市A/B/C)。

1. 本題の方策を先に固定(何を評価する?)

本記事では方策A(地域構成は現状維持)を評価します。

  • 方策A:地域分布 p(pa_i) は現状のまま、新規仕入れ先を採用したときの遅延確率 p!\left(Y\mid \mathrm{do}(X=\text{新規})\right) を推定。
  • 扱わない方策B:仕入れ先切替によって地域構成そのものも変える(この場合、地域は媒介になり、設計が別物)。

なぜ最初に方策を決めるの?
調整してよい変数(交絡)と、調整すると効果を削る変数(媒介)が変わるから。
本稿は
方策A
なので、地域は
前処置交絡
として調整します。


2. 因果推論での計算式(標準化/g-formula)

やることはかんたん2ステップです。
① 地域ごとの遅延率を用意 → ② 地域の比率で重み付き平均(=標準化)します。

式(新規仕入れ先に切り替えた場合の遅延確率)

p\bigl(Y \mid \mathrm{do}(X=\text{新規})\bigr) = \sum_{i} p\bigl(Y \mid X=\text{新規}, pa_i\bigr) \cdot p(pa_i)
  • ここで i地域インデックスです(i \in {\text{都市A}, \text{都市B}, \text{都市C}})。
  • 方策A(地域構成は現状維持)なので、重みは現状の地域比率 p(pa_i) を使います。
  • 同じ式で「既存」も計算し、同じ手順どうしで比較します。

イメージ
都市A/B/Cについて
p(Y\mid X=\text{新規}, pa_i)(=各地域の新規での遅延率)に、
p(pa_i)(=各地域の比率)を掛けて足し合わせます

この式を安全に使うための前提(やさしい説明)

  1. Backdoor充足
    「地域」などを調整すると、既存/新規の違いが“地域の違い”のせいではなくなる(交絡の通り道をふさげる)。

  2. Positivity(網羅性)
    どの地域でも既存/新規のデータがそこそこある(まったく無い組み合わせに外挿しない)。

  3. SUTVA(無干渉)
    ある発注の介入が他の発注の結果に波及しない(極端な容量制約などで干渉が強い場合は注意)。


3. 具体データと計算手順

ここからは、「データ → 計算 → 1つの数字」という順番で進めます。
やることは次の 3 ステップだけです。

ステップA:地域ごとの遅延率を読む(表の「(p(Y{=}1\mid X,pa_i))」)
ステップB:地域の比率を読む(表の「(p(pa_i))」)
ステップC:A×B を地域ごとに掛け算して合計(=標準化)

地域 (pa_i) 仕入れ先 (X) (p(Y{=}1\mid X,pa_i)) (p(pa_i))
都市A 既存 0.10 0.4
都市A 新規 0.30
都市B 既存 0.20 0.3
都市B 新規 0.40
都市C 既存 0.15 0.3
都市C 新規 0.35

既存(X=既存)の合計

0.10\times0.4 + 0.20\times0.3 + 0.15\times0.3 = 0.145 \quad (14.5%)

新規(X=新規)の合計

0.30\times0.4 + 0.40\times0.3 + 0.35\times0.3 = 0.345 \quad (34.5%)

差と比

  • 差(増加分): (0.345-0.145=0.200) → +20pp
  • 比(倍率): (\frac{0.345}{0.145}\approx 2.38)約2.38倍

なぜこの手順?
地域は「交絡」になりやすい(地域が X と Y の両方に効く)ので、地域をそろえて公平に平均し直しています。これが標準化(g-formula)です。
片方だけ「仮に20%」のように置くと、同じ土俵ではなくなるので比較できません。


4. 結果を意思決定に翻訳する(在庫・サービス・損益)※ゆるく数式

ここで得た「遅延率の違い」を、そのまま意思決定に使うのはもったいないです。
在庫・サービス水準・お金(コスト/NPV)に変換して、採用の損得を見ます。

4.1 在庫への影響(安全在庫の直感)

遅延が増えるほどリードタイムのばらつきが大きくなり、安全在庫が増えます。

  • 安全在庫(例):

    SS = z_{\alpha},\sigma_{DL}

    ここで (z_{\alpha}) は目標サービスレベルの係数、(\sigma_{DL}) は需要×リードタイムの標準偏差。
    遅延率 (p) が上がるほど (\sigma_{DL}) は大きくなりがち → 在庫費用アップ

4.2 お金への翻訳(とりあえずの式)

  • 1回の遅延が生む損(例:特急輸送、ライン停止、失注など)を 遅延コスト (C_{\text{delay}}) と置きます。

  • 「新規に切り替え」で遅延率が (\Delta p) 増えるなら、期待追加コスト/発注

    \Delta \text{Cost} \approx \Delta p \times C_{\text{delay}}
  • 一方、新規は仕入値が安いことが多い。発注あたりの値引きメリット(S_{\text{price}}) 円とします。

ブレークイーブン(損得トントン)条件

S_{\text{price}} ;\gtrsim; \Delta p \times C_{\text{delay}}

ミニ例
(\Delta p = 0.20)(+20pp増)(C_{\text{delay}} = 2{,}000)円/発注 なら
右辺は (0.20\times2{,}000=400) 円。
値引きが400円/発注以上なら「金銭的にはイーブン以上」の可能性。

4.3 さらにちゃんとやるなら(NPV)

  • 年間発注回数×年数で合計コスト/メリットを出し、割引率で現在価値に直して NPV 比較にするとカッチリ。
  • ただし、本稿の主眼は因果で公平な遅延率差を作ること。NPVは会社の基準に合わせてください。

5. 不確実性と健全性チェック(数字の“固さ”を見える化)

+20pp」は推定値です。ブレがどれくらいか(=不確実性)を合わせて示すと、意思決定に説得力が出ます。

5.1 どうやって“不確実性”を付ける?

  • まずはこれ:ロジスティック回帰で (p(Y{=}1\mid X,pa_i,\ldots))を学習 → 標準化で ATE(平均効果)を出す。
    ブートストラップで 95% CI(信頼区間)を付ける。
  • 一歩進めるAIPW/TMLE(2重頑健) を使うと、モデルずれに少し強くなる。

表示例:「差 +20pp ([+12, +28]) 」
=「たまたまではなく、そこそこ安定して +20pp 前後だね」という伝え方。

5.2 未測定交絡が心配なとき

  • E-value で「どれくらい強い未測定交絡があれば効果が消えるか」を示します。
    大きいほど「そう簡単には覆らない」ことを直感的に伝えられます。

5.3 もし幅が広い/怪しいときは?

  • データを増やす(サンプル拡充、期間延長)
  • 共変量を増やす(季節、輸送モード、SKU、発注量、港混雑、天候など)
  • 設計を変える(差分の差分、ステップドウェッジの小規模実験など)

まとめ

  1. (3) データから公平な遅延率差を作る(=標準化)
  2. (4) その差を在庫・お金に翻訳して「採用すべきか」を考える(ブレークイーブン式が便利)
  3. (5) 数字の固さ(CI・感度分析)を添えて、意思決定の納得感を上げる

つまり、「因果でフェアな差」→「ビジネスの言葉」→「どれだけ固いか」の順で落とし込むと、現場でも伝わりやすく、動きやすくなります。


最後に

本稿は因果推論で「仕入れ先切替」について見ていきましたが、いかがでしたか?
DAGで推定するときに、地域という切り口だとどのような手順で見ていくのか具体的に追っていきました。
これから、実務で判断する際に、このように遅延率を在庫・サービス・NPVといった指標にに翻訳することで意思決定に貢献できるかもしれません。CIと感度分析で“どれだけ固いか”も提示できるといいですね。
少し前に、因果推論の本を読んで見たものの使う機会がなかったので日曜分析と題して、AIを使いながら理解を深めてみました。まだまだ活用していくには、程遠い気もしますが面白く学べました。
もしこの記事が面白い・ためになると感じた方はぜひコメントや反応❤️をもらえると励みになります!ではまた!


付録:用語の超ざっくり解説

  • do演算子:世界を少し書き換えて(例:必ず新規を選ぶ)その後を観る操作。
  • 交絡(confounding)XY 両方に影響する“第三の要因”。
  • 標準化(g-formula):条件付きアウトカムを母集団分布で重み平均して介入効果を出す。
  • AIPW/TMLE:モデルずれに強い“二重の保険”がある推定法。
  • E-value:未測定交絡がどれくらい強ければ効果が消えるかの指標。

Discussion