🔮 STEP 40: What-If分析
「もし〜だったら?」という仮定のシミュレーションを行おう
📋 このステップで学ぶこと
- What-If分析の概念と3つの問いかけ
- Excelのゴールシーク機能(目標値探索)
- データテーブルの活用(2変数分析)
- シナリオマネージャーの使い方
- 価格設定最適化への応用
🔍 1. What-If分析とは
What-If分析の基本概念
What-If分析は、日本語で「もし〜だったら分析」と訳せます。ビジネスでは、「もしこの条件が変わったら、結果はどうなる?」という問いを分析することが非常に重要です。
① 順方向の問い(Forward)
「入力が変わったら、結果はどうなる?」
例:
・価格を10%上げたら、利益はいくらになる?
・広告費を100万円増やしたら、売上はどうなる?
・人員を5人増やしたら、生産量は?
→ これは感度分析・シナリオ分析(STEP 39で学習済み)
② 逆方向の問い(Backward)★今回のメイン
「目標を達成するには、入力をいくらにすべき?」
例:
・利益を500万円にするには、価格はいくら?
・売上目標1億円を達成するには、販売数量は?
・ROI 20%を達成するには、投資額はいくらまで?
→ これがゴールシーク(目標値探索)
③ 複数変数の組み合わせ
「2つの変数を同時に変えたら、結果はどうなる?」
例:
・価格と販売数量を同時に変化させたら、利益は?
・広告費とコンバージョン率を変えたら、売上は?
・金利と借入期間を変えたら、返済額は?
→ これがデータテーブル(2変数分析)
感度分析との違い
感度分析(STEP 39):
「価格を1,000円から1,100円に上げたら、利益はいくらになる?」
→ 入力 → 結果(順方向)
ゴールシーク(今回):
「利益を300万円にしたい。価格はいくらに設定すべき?」
→ 結果 → 入力(逆方向)
ポイント:ゴールシークは「目標から逆算」する点が異なる!
ExcelのWhat-Ifツール
Excelには、What-If分析のための3つの便利な機能が用意されています。
| 機能 | できること | 使いどころ |
|---|---|---|
| ゴールシーク | 目標値から逆算して 1つの入力値を自動計算 |
損益分岐点の計算 目標利益達成の条件 |
| データテーブル | 1〜2変数を変化させた 結果を一覧表示 |
最適な組み合わせ探索 マトリックス分析 |
| シナリオマネージャー | 複数のシナリオを保存 ワンクリックで切り替え |
楽観/標準/悲観の比較 プレゼン用資料作成 |
🎯 2. ゴールシーク(目標値探索)
ゴールシークとは
ゴールシーク(Goal Seek)は、「目標の結果を得るために、入力値をいくらにすべきか」を自動計算する機能です。
例:利益300万円を達成したい
現状:
価格:1,000円
販売数量:10,000個
原価:600円
固定費:200万円
利益:(1,000−600)×10,000−200万 = 200万円
質問:
「利益を300万円にするには、価格をいくらにすべき?」
ゴールシークの答え:
価格 = 1,100円
(1,100−600)×10,000−200万 = 300万円 ✅
Excelでのゴールシーク操作
① 変化させるセルは「値」が入ったセルのみ
数式が入ったセルは指定できない
② 数式入力セルは「数式」が入ったセルのみ
変化させるセルと関連している必要がある
③ 解が見つからない場合もある
目標が非現実的だと「解なし」になる
④ 結果はセルに直接反映される
元の値に戻したい場合は、Ctrl+Z(元に戻す)
Pythonでゴールシークを実装
Pythonでゴールシークを実装するには、scipy.optimizeライブラリを使います。方程式を解く機能を利用して、目標値に到達する入力値を探索します。
Step 1:準備と基本的な利益計算
Step 2:ゴールシークの実装
fsolveは「f(x) = 0となるxを探す」関数です。
今回の場合:
f(価格) = 利益 − 目標利益
この関数が0になる = 利益が目標利益に等しい
→ その時の価格が答え!
初期推定値は、探索の出発点です。
現在の価格(1,000円)を指定しておくと、
そこから探索を始めて効率的に解を見つけます。
Step 3:複数の目標利益でゴールシーク
利益100万円:価格900円(現状から−10%)
利益200万円:価格1,000円(現状維持)
利益300万円:価格1,100円(現状から+10%)
利益400万円:価格1,200円(現状から+20%)
利益500万円:価格1,300円(現状から+30%)
発見:利益を100万円増やすには、価格を100円上げればOK!
(このケースでは線形の関係)
損益分岐点の計算
ゴールシークの代表的な活用例が損益分岐点の計算です。「利益 = 0」となる価格を探します。
📊 3. データテーブル(2変数分析)
データテーブルとは
データテーブルは、1つまたは2つの変数を様々な値に変化させて、結果を一覧表示する機能です。最適な組み合わせを探すのに便利です。
① 1変数データテーブル
1つの変数だけを変化させる
例:価格を800〜1,200円まで変化させて、各価格での利益を一覧表示
② 2変数データテーブル
2つの変数を同時に変化させる
例:価格(行)と販売数量(列)を同時に変化させて、各組み合わせの利益をマトリックス表示
→ 最適な価格×数量の組み合わせが一目で分かる!
Excelでのデータテーブル作成
Pythonでデータテーブルを作成
Step 1:2変数の範囲を設定
Step 2:データテーブルを計算
Step 3:最適な組み合わせを見つける
このデータテーブルの場合:
価格が高く、数量も多い「右下」ほど利益が大きい
⚠️ でも現実は違う!
このデータテーブルは「価格と数量が独立」と仮定しています。
現実では、価格を上げると需要(販売数量)が減ります。
これを「価格弾力性」といいます。
→ 次のセクションで、価格弾力性を考慮した分析を学びます!
💰 4. 価格設定最適化への応用
価格弾力性を考慮した最適価格
現実の市場では、価格を上げると需要が減るという関係があります。この関係を「価格弾力性」といいます。
定義:
価格が1%変化したとき、需要が何%変化するか
例:価格弾力性 = −2 の場合
価格が10%上がると → 需要は20%減る
価格が10%下がると → 需要は20%増える
一般的な目安:
・必需品(水、米など):−0.5〜−1(非弾力的)
・一般消費財:−1〜−2
・贅沢品:−2〜−4(弾力的)
・代替品が多い商品:−3以下
Pythonで最適価格を求める
Step 1:需要関数の定義
価格弾力性=-2の意味:
・価格1,000円(基準)→ 需要10,000個
・価格1,100円(+10%)→ 需要8,264個(−17%)
・価格1,200円(+20%)→ 需要6,944個(−31%)
発見:価格を上げると需要は大きく減る!
では、利益を最大にする価格はいくら?
Step 2:最適価格を探索
Step 3:現状との比較
驚きの結果:
価格を20%上げて、販売数量が31%減っても、利益は8.3%増加!
なぜこうなるのか:
・価格を上げると、1個あたりの利益(貢献利益)が増える
・販売数量は減るが、単価アップの効果の方が大きい
・特に弾力性が低い(-2程度)場合にこの傾向がある
実務への示唆:
・「たくさん売る」より「適正価格で売る」方が利益は増えることがある
・価格弾力性の把握が最適価格設定の鍵
・値下げ競争に巻き込まれると利益が激減する可能性
📝 STEP 40 のまとめ
1. What-If分析の3つの問いかけ
- 順方向:入力を変えたら結果はどうなる?(感度分析)
- 逆方向:目標を達成するには入力をいくらに?(ゴールシーク)
- 複数変数:2つの変数を同時に変えたら?(データテーブル)
2. ゴールシーク(目標値探索)
- 目標から逆算して必要な入力値を求める
- 損益分岐点の計算に便利
- Pythonではscipy.optimizeのfsolveを使用
3. データテーブル(2変数分析)
- 2つの変数の組み合わせを一覧表示
- 最適な組み合わせを視覚的に発見
- マトリックス形式で分かりやすい
4. 価格最適化
- 価格弾力性を考慮した需要予測
- 利益最大化価格の決定
- 「たくさん売る」より「適正価格で売る」
ゴールシークを使うべき場面:
・目標利益を達成する価格を知りたい
・損益分岐点を計算したい
・ROI目標を達成する投資額を知りたい
データテーブルを使うべき場面:
・価格と販売数量の最適組み合わせを探したい
・複数のシナリオを一覧で比較したい
・条件付き書式で利益エリアを可視化したい
次のSTEP 41では、「意思決定ツリー」を学びます。複数の選択肢とその結果を構造化して、最適な意思決定を行う方法を習得しましょう!
STEP 41では、「意思決定ツリー」を学びます。「新製品を発売する/しない」「投資する/しない」といった複雑な意思決定を、ツリー構造で整理し、期待値を計算して最適な選択を行う方法を習得しましょう!
📝 練習問題
ゴールシークを使って、以下の目標を達成する価格を求めてください。
条件:
・販売数量:8,000個
・原価:750円
・固定費:150万円
・目標利益:200万円
必要な価格はいくらですか?
ゴールシークの考え方:
目標:200万円 = (価格 − 750)× 8,000 − 150万
計算手順:
200万 + 150万 = (価格 − 750)× 8,000
350万 = (価格 − 750)× 8,000
価格 − 750 = 350万 ÷ 8,000
価格 − 750 = 437.5
価格 = 750 + 437.5
価格 = 1,187.5円
検証:
変動費 = 750 × 8,000 = 6,000,000円
貢献利益 = 9,500,000 − 6,000,000 = 3,500,000円
利益 = 3,500,000 − 1,500,000 = 2,000,000円 ✅
実務での設定:
端数を考慮して 1,190円 に設定するのが現実的
損益分岐点価格を求めてください。
条件:
・販売数量:5,000個
・原価:400円
・固定費:100万円
利益がゼロになる価格はいくらですか?
損益分岐点の計算:
0 = (価格 − 原価)× 販売数量 − 固定費
0 = (価格 − 400)× 5,000 − 1,000,000
1,000,000 = (価格 − 400)× 5,000
価格 − 400 = 1,000,000 ÷ 5,000
価格 − 400 = 200
価格 = 400 + 200
価格 = 600円
解釈:
・600円より高く売れば黒字
・600円より安く売れば赤字
マークアップ = 600 − 400 = 200円
マークアップ率 = 200 ÷ 400 = 50%
→ 最低でも原価の50%をマークアップしないと赤字
データテーブルを作成し、最適な組み合わせを見つけてください。
条件:
・原価:600円
・固定費:200万円
価格の候補:900円、1,000円、1,100円
販売数量の候補:8,000個、10,000個、12,000個
9通りの組み合わせで利益を計算し、最大利益の組み合わせを特定してください。
データテーブルの作成:
900円 1,000円 1,100円
8,000個 400,000 1,200,000 2,000,000
10,000個 1,000,000 2,000,000 3,000,000
12,000個 1,600,000 2,800,000 4,000,000
計算例(価格1,100円 × 数量12,000個):
変動費 = 600 × 12,000 = 7,200,000円
貢献利益 = 13,200,000 − 7,200,000 = 6,000,000円
利益 = 6,000,000 − 2,000,000 = 4,000,000円
最適な組み合わせ:
価格:1,100円
販売数量:12,000個
※ ただし、これは「価格を上げても数量が減らない」という前提。
現実では価格弾力性を考慮する必要がある。
価格弾力性を考慮して最適価格を求めてください。
条件:
・現在の価格:1,000円
・現在の販売数量:10,000個
・原価:500円
・固定費:300万円
・価格弾力性:−1.5
利益を最大にする価格はいくらですか?
(ヒント:価格を900円、1,000円、1,100円、1,200円で比較)
需要関数:
需要 = 10,000 × (価格 / 1,000)^(-1.5)
各価格での計算:
需要 = 10,000 × (0.9)^(-1.5) = 10,000 × 1.17 = 11,700個
利益 = (900−500)×11,700 − 3,000,000 = 4,680,000 − 3,000,000 = 1,680,000円
■ 価格1,000円
需要 = 10,000 × (1.0)^(-1.5) = 10,000個
利益 = (1000−500)×10,000 − 3,000,000 = 5,000,000 − 3,000,000 = 2,000,000円
■ 価格1,100円
需要 = 10,000 × (1.1)^(-1.5) = 10,000 × 0.87 = 8,700個
利益 = (1100−500)×8,700 − 3,000,000 = 5,220,000 − 3,000,000 = 2,220,000円
■ 価格1,200円
需要 = 10,000 × (1.2)^(-1.5) = 10,000 × 0.76 = 7,600個
利益 = (1200−500)×7,600 − 3,000,000 = 5,320,000 − 3,000,000 = 2,320,000円
結果まとめ:
価格900円 → 利益168万円
価格1,000円 → 利益200万円
価格1,100円 → 利益222万円
価格1,200円 → 利益232万円 ← 最大!
発見:
価格を20%上げて需要が24%減っても、利益は16%増加!
→ 弾力性-1.5では、値上げが有利な戦略
❓ よくある質問
原因1:解が存在しない
例:「利益1億円を達成する価格」→ 非現実的な目標
対処:目標値を現実的な範囲に修正
原因2:変化させるセルが数式
ゴールシークは「値」が入ったセルしか変えられない
対処:値が入力されたセルを指定
原因3:セルが関連していない
結果セルと変化させるセルが数式で繋がっていない
対処:数式の構造を確認
原因4:反復計算の上限
対処:ファイル → オプション → 数式 → 反復計算の最大回数を増やす
① 過去データからの推定
・過去の価格変更と販売数量の変化を分析
・弾力性 =(数量変化率)÷(価格変化率)
② A/Bテスト
・一部の顧客に異なる価格を提示
・反応の違いから弾力性を推定
③ 業界の目安を使う
・必需品:−0.5〜−1
・一般消費財:−1〜−2
・贅沢品:−2〜−4
④ 顧客アンケート
・「この価格なら買いますか?」を複数価格で質問
・Van Westendorp法など
推奨:まずは−1.5〜−2あたりで仮定し、実績を見ながら調整
① 自動計算をオフにする
数式 → 計算方法の設定 → 手動
F9キーで必要な時だけ計算
② 範囲を小さくする
変数の刻み幅を大きくする
例:10円刻み → 50円刻み
③ 揮発性関数を避ける
NOW(), RAND(), OFFSET() などは毎回再計算される
④ 条件付き書式を減らす
データテーブル範囲には最小限に
⑤ Pythonを使う
大量計算が必要な場合はPythonの方が高速
ゴールシークを使うべき場合:
・変化させる変数が1つだけ
・シンプルな目標値探索
・すぐに結果が欲しい
ソルバーを使うべき場合:
・複数の変数を同時に最適化したい
・制約条件がある(「価格は○円以上」など)
・最大化/最小化問題を解きたい
・線形計画法や非線形最適化が必要
例:
「利益300万円を達成する価格は?」→ ゴールシーク
「予算1000万円以内で利益を最大化する価格と広告費の組み合わせは?」→ ソルバー
学習メモ
ビジネスデータ分析・意思決定 - Step 40