この記事は、価格分析・需要予測・マーケティングミックスモデリング(MMM)に携わるデータサイエンティストや分析担当者 を対象としています。統計・回帰分析の基礎知識(線形回帰やGLMの概要)があることを前提としますが、価格弾力性の理論から丁寧に説明するので、初めて価格分析に取り組む方でも読み進められます。
「価格を10%上げたら需要はどれだけ下がるか?」という問いに線形回帰で答えようとしたが、高価格帯で需要がマイナスに予測されてしまった。あるいは弾力性の推定値に自信が持てず、結局は感覚で価格判断を下した──そんな経験のある方は少なくないはずです。
弾力性をGLMで推定すべきと知ってはいても、「なぜlogリンク関数が必要なのか」「OLSの何が問題なのか」が整理できていないと、実務での手法選択に踏み切れません。logリンク関数を使ったlog-logモデルには、この「理論的根拠の不透明さ」という障壁を取り除く性質が備わっており、弾力性の推定値を自信を持って意思決定に使えるようになります。この記事ではその理論的根拠をモデルの構造から整理し、PythonによるGLMの実装と検証を通じて解説します。
この記事を読むと、以下のことが理解できます。
- 価格弾力性とは何か、どう解釈するか
- 「なぜlogリンク関数でモデリングするのか」の理論的根拠
- PythonとStatsmodelsを使ったGLMによる弾力性推定の結果と解釈
- OLS(線形回帰)との違いと使い分け
第1章では概念を、第2章では理論を扱います。検証結果だけ確認したい方は第3章から読み始めても問題ありません。
第1章: 価格弾力性とは
1.1 定義
価格弾力性(Price Elasticity of Demand) とは、価格の変化に対して需要量がどの程度変化するかを示す指標です。
$$E = \frac{\Delta Q / Q}{\Delta P / P} = \frac{dQ}{dP} \cdot \frac{P}{Q}$$
- $Q$: 需要量
- $P$: 価格
- $E$: 価格弾力性
需要の法則により、価格が上がれば需要は下がるため、弾力性は通常負の値をとります。
1.2 弾力性の解釈
| 弾力性の絶対値 | 区分 | 意味 |
|---|---|---|
| $|E| > 1$ | 弾力的(Elastic) | 価格1%上昇 → 需要が1%超の減少 |
| $|E| = 1$ | 単位弾力的 | 価格1%上昇 → 需要も1%減少 |
| $|E| < 1$ | 非弾力的(Inelastic) | 価格1%上昇 → 需要1%未満の減少 |
事例: あるECサイトで商品価格を10%値上げしたとき、
- $E = -2.0$(弾力的)なら需要は20%減少 → 収益は悪化する可能性が高い
- $E = -0.5$(非弾力的)なら需要は5%減少 → 収益は増加する可能性が高い
この弾力性の大小が、値付け戦略の根拠になります。
実務では価格帯ごとに弾力性が変わることもありますが、log-logモデル(定弾力性モデル) では弾力性を定数として推定します。実際、この仮定がよく当てはまるケースは多く、価格分析の出発点として広く使われています。
第2章: logリンク関数でモデリングする理論的根拠
2.1 線形モデルの問題点
最もシンプルなモデルは、価格と需要量をそのまま線形回帰することです。
$$Q = \alpha + \beta P + \varepsilon$$
しかしこのモデルには2つの根本的な問題があります。
問題1: 需要量は非負なのに負の予測が出る
線形モデルは $Q < 0$ の予測を許してしまいます。需要量は物理的に0以上であり、これは現実と矛盾します。
問題2: 分散が価格水準に依存する(不均一分散)
高価格帯の商品は需要のばらつきも大きくなる傾向があります。こうなると線形回帰の前提(「どの価格帯でもばらつきは同じ」)が崩れ、推定結果に歪みが生じます。
不均一分散の対策として、ロバスト性を考慮したモデルもあります。ここでは説明を省きます。
2.2 logリンク関数が解決すること
logリンク関数というこの仕組みがあるからこそ、「需要が負になる」「不均一分散によって係数がバイアスする」という2つの障壁を同時に取り除け、弾力性の推定値を価格判断の根拠として自信を持って使えるようになります。
GLM(一般化線形モデル)の logリンク関数 を使うと、上記の問題を自然に解決できます。
$$\log(E[Q]) = \alpha + \beta \log(P) + \gamma \mathbf{X}$$
あるいは同値の表現として:
$$E[Q] = \exp\left(\alpha + \beta \log(P) + \gamma \mathbf{X}\right)$$
- 非負制約の保証: $\exp(\cdot)$ は常に正なので、予測需要量が負になりません
- 乗法的な効果の表現: マーケティングでは価格の効果は「%変化」として現れることが多く、乗法モデルの方が自然です
- 弾力性の直接読み取り: $\beta$ が直接、価格弾力性を表します(後述)
2.3 弾力性の導出
log-logモデルから弾力性を導出します。
$$\log(E[Q]) = \alpha + \beta \log(P)$$
両辺を $\log(P)$ で微分すると:
$$\frac{\partial \log(E[Q])}{\partial \log(P)} = \beta$$
$\beta$ そのものが価格弾力性です。 $\beta = -1.5$ なら「価格が1%上がると需要が1.5%下がる」と直接解釈できます。これが log-log モデルを使う最大のメリットです。
2.4 誤差分布の選択:PoissonかNegative Binomialか
需要量がカウントデータ(整数) の場合は Poisson分布 または Negative Binomial分布 が適切です。
| 分布 | 仮定 | 向いているケース |
|---|---|---|
| Poisson | 平均 = 分散 | ばらつきが小さい安定した需要 |
| Negative Binomial | 分散 > 平均(過分散) | ばらつきが大きい需要 |
| Gaussian(正規) | 連続値 | 売上金額など連続値の場合 |
実務では 過分散(overdispersion) が発生することが多いため、Negative Binomialも検討してください。
第3章: シミュレーションによる検証
3.1 シミュレーションデータの概要
この章で使用するシミュレーション・推定・可視化のコードは以下のGithubに挙げているコードを参照してください。コードの概要は、真の弾力性を $-1.5$ と設定してシミュレーションデータを生成し、GLMがその値を正しく回収できるかを確認します。
データ生成の仕様
- サンプル数: 500件
- 価格 $P$: 100〜500円の一様乱数
- 真の弾力性: $\beta_{\text{true}} = -1.5$(推定後に比較するグラウンドトゥルース)
- 需要量 $Q$: $\log(E[Q]) = \log(1000) + (-1.5)(\log P - \log 100)$ を期待値とする Poisson 分布で生成(価格100円のとき期待需要 = 1,000個のスケール)
生成されたデータの基本統計(n=500)は以下の通りです。
| 統計量 | 価格(円) | 需要量(個) |
|---|---|---|
| 平均 | 300.9 | 279.3 |
| 標準偏差 | 118.8 | 213.2 |
| 最小 | 100.2 | 72 |
| 最大 | 498.9 | 995 |
需要量は価格が低いほど多く(最大995個)、高価格帯では減少する(最小72個)という log-log モデルの形状が Poisson 乱数として正しく反映されています。
3.2 GLMの推定(Poisson + logリンク)
Statsmodels の smf.glm() を用いて、需要量を被説明変数、$\log(\text{価格})$ を説明変数とする Poisson GLM(logリンク)を当てはめます。$\log(\text{価格})$ の係数が第2章で導出した価格弾力性 $\beta$ に直接対応します。
推定の結果は以下の通りです。
| 項目 | 値 |
|---|---|
| 推定値 $\hat{\beta}$ | −1.4939 |
| 95%信頼区間 | [−1.5053, −1.4825] |
| 真の弾力性 | −1.5000 |
| 真値との誤差 | 0.4% |
真の弾力性 $-1.5$ は 95%信頼区間の内側にしっかり収まっています。第2章で解説した「$\beta$ がそのまま弾力性になる」という性質を、数値として確かめることができます。
3.3 OLSとの比較
同じデータに対して OLS(線形回帰)を当てはめ、弾力性推定の精度を比較します。OLS モデルの log_price 係数は需要量の絶対値変化として推定されるため、弾力性への換算には $\hat{\beta}_{\text{OLS}} / \bar{Q}$($\bar{Q}$ は需要量の標本平均)が必要です。
| モデル | 推定弾力性 | 95%信頼区間 | 真値との誤差 | 真値をCIが含むか |
|---|---|---|---|---|
| GLM(Poisson + log) | −1.4939 | [−1.505, −1.483] | 0.4% | YES |
| OLS | −1.6197 | [−1.667, −1.573] | 8.0% | NO |
GLM は OLS と比べて推定誤差が約 20分の1 に収まっています。また OLS の 95%信頼区間は真値 $-1.5$ を完全に外れており、推定がバイアスしていることが数値的に確認できました。
OLS がずれる理由は、Poisson データをそのまま線形回帰すると分散が価格水準に依存する不均一分散が生じ、係数推定に歪みが出るためです。GLM は Poisson 分布の構造(分散 = 平均)を正しくモデル化するためバイアスがありません。
3.4 結果の可視化
推定結果を原スケールと log-log スケールの2軸でプロットすると、以下が視覚的に確認できます。
- 原スケール(価格 vs 需要量): GLM の予測曲線(べき乗関数)は観測値の散布パターンによくフィットします。一方、OLS の直線近似は高需要域・低需要域での当てはまりが悪く、形状が根本的に異なります
- log-log スケール($\log$(価格) vs $\log$(需要量): 散布点が明瞭な直線上に並び、その傾きが弾力性 $\beta \approx -1.5$ に対応します
log-log スケールでプロットすると関係が直線になり、その傾きが弾力性 $\beta$ に対応していることが視覚的に確認できます。
3.5 過分散の確認とNegative Binomialへの切り替え
実データでは Poisson の仮定(平均 = 分散)が崩れることがよくあります。モデルの適合を確認する正式な指標は Pearson $\chi^2$ / 残差自由度 です(1 に近ければ Poisson が適合、大きければ過分散)。
なお、生データの分散/平均を計算するプールされた指標は、価格ごとに期待値が異なる回帰データには使えません。価格の違いによる変動が加算されるため、実際には過分散でなくても大きな値が出てしまいます。
今回のシミュレーションデータでの Pearson $\chi^2$/df は 0.99(≈ 1)となり、Poisson 分布が十分に適合していることが確認できました。念のため Negative Binomial で推定した場合も弾力性は −1.4930 と Poisson GLM の結果(−1.4939)とほぼ一致し、分布の選択が推定結果に影響しないことが検証されています。
実データで過分散が疑われる場合は、Pearson $\chi^2$/df を確認した上で Negative Binomial への切り替えを検討してください。
第4章: 実務での応用ポイント
4.1 複数変数への拡張
実務では価格以外のマーケティング変数も考慮します。シミュレーションデータにプロモーション(0/1)と月次ダミー(1〜12月)を加えたモデルを推定します。
$$\log(E[Q]) = \alpha + \beta \log(P) + \gamma \cdot \text{promotion} + \sum_{m=2}^{12} \delta_m \cdot \mathbf{1}[\text{month}=m]$$
このモデルの log_price 係数は「プロモーションと季節性の効果を取り除いた上での純粋な価格弾力性」を表します。推定の結果、調整済み価格弾力性は −1.4923 となり、単変数モデル(−1.4939)と実質的に同じ値が得られました。
今回のシミュレーションでは実社会を簡単なモデルで捉えてみることを優先し、価格とプロモーション・季節性は統計的に独立させています。実データで交絡が存在する場合には、共変量の追加によって弾力性の推定値が大きく変わることがあります。
4.2 実データ利用時の注意:価格の内生性
実データに本手法を適用する際に最も頻繁にはまる落とし穴が 価格の内生性(Endogeneity) です。
価格は「観察されない需要ショックに反応して設定される」ことがあります。たとえば、需要が高まりそうなタイミング(年末・イベント前)で値上げを行う場合、「高い価格 → 高い需要」という見かけ上の正の相関が生じ、弾力性の推定が上方にバイアスします。
この問題を扱う場合は以下の手法を検討してください。
- 差分の差分法(DiD): 価格変更をイベントとして捉え、処置群・対照群の差を比較
- 回帰不連続デザイン(RDD): 価格設定のルールに基づく閾値を利用
- 操作変数法(IV推定): 需要には影響せず価格にのみ影響する変数(例: 原材料費・競合の価格変動)を操作変数として使用。(個人的には堅い条件付けをしなければならずIV推定を実務に適用するのはお勧めしません)
4.3 弾力性を使った最適価格の試算
推定した弾力性から、定弾力性モデルを使って収益を価格の関数として表現できます。
$$\text{Revenue}(P) = P \times Q(P) = P \times Q_0 \left(\frac{P}{P_0}\right)^{\beta}$$
ここで $Q_0$ は基準価格 $P_0$ での需要量です。この関数の価格に対する単調性は弾力性 $\beta$ の大小で決まります。
今回推定した弾力性 $\hat{\beta} \approx -1.49$(弾力的)では、収益は価格について単調減少します。これは弾力的な需要($|E| > 1$)の一般的な性質であり、値下げが収益改善につながることを示しています。逆に非弾力的($|E| < 1$)な商品では値上げが収益を増加させます。
実データへの適用では、収益シミュレーションをコスト制約(限界費用)や在庫制約と組み合わせることで、現実的な最適価格の探索が可能です。
参考文献
- Greene, W. H. (2012). Econometric Analysis (7th ed.). Prentice Hall.
- McCullagh, P., & Nelder, J. A. (1989). Generalized Linear Models (2nd ed.). Chapman & Hall.
- Hanssens, D. M., Parsons, L. J., & Schultz, R. L. (2001). Market Response Models: Econometric and Time Series Analysis. Kluwer Academic Publishers.
- Statsmodels Documentation — GLM: https://www.statsmodels.org/stable/glm.html
- Varian, H. R. (1992). Microeconomic Analysis (3rd ed.). W. W. Norton & Company.
- Tellis, G. J. (1988). The price elasticity of selective demand: A meta-analysis of econometric models of sales. Journal of Marketing Research, 25(4), 331–341.
