コラムCOLUMNS

価格を決める数理モデル、需要曲線の推定からダイナミックプライシングまで

公開日:2026年10月6日

こんにちは、Anagraftの伊藤です。

今回は、商品やサービスの価格をいくらにするかという意思決定を、数理モデルの立場から整理しました。過去の販売データから価格と販売数量の関係(需要曲線)を推定するところから始めて、1つの商品の価格の決め方、同じ売場で互いに客を取り合う商品をまとめて決める方法、販促と値引きの設計、季節商品の値下げと在庫処分、ホテルや座席のように売れる数に上限がある事業の予約の管理、時間と残りの在庫に応じて価格を動かすダイナミックプライシング、価格を試しながら学ぶ方法、競合の価格への対応、法令と顧客の受け止め、そして現場への導入と最新の動向までを扱います。ここに挙げた用語は、それぞれの章で最初に出るときに平易な言葉で説明していますので、ここで分からなくても差し支えありません。

この題材を選んだ理由は、価格が粗利と販売数量を同時に、しかも直接に動かす変数でありながら、その決め方が前年の価格・競合の価格・原価に一定の割合を乗せる慣習に委ねられていることが多いためです。原材料や物流の費用が上がる局面では、どの商品の価格をどれだけ改定するか、どの商品は据え置くかという判断が毎月のように求められます。値上げをしすぎれば客数と数量を失い、慎重すぎれば粗利を取りこぼし、値引きを重ねれば通常の価格そのものが信頼されなくなります。品目が増えると、ある商品の価格を変えたときに同じ売場の別の商品の売れ行きがどう変わるかまで、人が頭の中で比べることはできません。どこまでを計算に任せ、どこから先を人が判断するかを見極める道具として、数理モデルの手法を紹介します。

各章では、架空の食品スーパーの飲料売場を共通の題材にして、実際にコードを動かした結果を載せています。緑茶・炭酸飲料・水の12品目について、ナショナルブランドとプライベートブランド、小容量と大容量があり、2年分(104週)の週ごとの売価・販促・販売数量の記録があるという設定です。データは乱数で生成したもので、実在の企業や店舗の記録ではありません。その代わり、データを作った側は「本当の需要の式」を知っているので、推定した式で決めた価格が本当はどれだけの粗利を生むかを答え合わせできます。現実の企業には本当の式は見えませんので、推定の誤差が価格の判断をどれだけ狂わせるかを、この答え合わせで示すことにしました。値下げ・予約の管理・ダイナミックプライシングの章では、季節商品・ホテル・興行の座席といった、それぞれの章のための架空の設定も用意しています。

想定している読者は、商品部やマーチャンダイザー、EC、営業企画、宿泊や興行の販売など、価格や販促を任された実務者の方、価格の決め方を仕組みとして整えたいDX推進担当の方、そして粗利や売上、客数を経営指標として見る立場の方です。経済学やオペレーションズ・リサーチの専門家でなくても読めるように、専門用語には平易な補足を添え、数式は最小限にして言葉で言い換えています。Pythonのコードも載せていますが、コードを読まなくても結果の読み方は分かるように書きました。

本コラムでは、各手法について「何を決める手法か」「どういう前提で使えるか」「使ってはいけないのはどういうときか」「結果を経営指標にどう翻訳するか」を書くようにしました。価格の理論の多くは教科書に載っていますが、実務で難しいのは、手元のデータで価格の効き目を本当に測れているのか、季節や販促の影響を取り違えていないか、品目どうしの影響をどこまで考えるか、改定の幅や価格の並びといった現場の決まりをどこまで守るか、顧客にどう受け止められるかを見極めるところだと考えているためです。各章には、その判断を誤ったときに経営上どういう損失になるかを示す段落を置いています。

本コラムの記述は2026年10月時点で確認したものです。法令・ガイドライン・公的統計は改正や更新がありますので、実務で使う際は所管官庁のページで最新の内容をご確認ください。本コラムは法律上の助言ではありません。本コラムに出てくる売価・原価・粗利の金額は、すべて架空の設定による例題の数値です。ライブラリの関数名や引数も版によって変わります。計算時間は本コラムの実行環境で測った値であり、計算機が変われば変わります。

目的別の入口の目安を挙げておきます。価格を経営指標としてどう見るかを整理したい場合は、第1章と第13章が入口になります。自社の価格の問題がどの種類に当たるかを見極めたい場合は、第2章の分類をご覧ください。手元の販売データから価格の効き目を測りたい場合は第3章、1つの商品の価格を決めたい場合は第4章、売場の複数の商品をまとめて決めたい場合は第5章が中心になります。販促や特売の組み方を見直したい場合は第6章、季節商品や消費期限の近い商品の値下げを決めたい場合は第7章をご覧ください。

ホテル・航空・座席のように売れる数に上限がある事業の予約の管理は第8章、時期や残りの在庫に応じて価格を動かす仕組みは第9章、データが少ない商品の価格を試しながら決めたい場合は第10章、競合の価格への対応は第11章が入口です。価格の表示や値引きの法令上の注意、顧客の受け止め方は第12章、公開された事例と研究の動向は第14章で扱っています。

$authorName
著者伊藤 瑛志

Anagraft(アナグラフト)合同会社 代表 AXプロジェクト顧問・支援
データサイエンティスト since 2013 BCG/ALBERT(現アクセンチュア)出身

目次

序章 価格は、推定した需要の上で決める変数である

粗利を増やす手立てというと、販売数量を伸ばす施策や、仕入れと物流の費用を下げる取り組みが思い浮かぶことが多いように思います。いずれも担当部署がはっきりしていて、進み具合も測りやすいためです。これに対して価格は、1円動かしただけで、その商品が売れる1個ごとの粗利と、売れる個数の両方を同時に動かします。しかも、ある商品の価格を変えると、同じ売場で客を取り合う別の商品の売れ行きまで変わります。どの商品を・いつ・いくらで売るかを決める仕事、すなわち価格最適化が、本コラムの主題です。

価格を決める手法は、扱う事業の形によって大きく異なります。スーパーの通常の売価のように、同じ商品を長い期間売り続けるものもあれば、季節商品のように売り切る期限があるもの、ホテルの客室や興行の座席のように売れる数に上限があり、売れ残れば価値がなくなるものもあります。本コラムでは、こうした違いを第2章で分類し、それぞれに合った手法を第3章から第11章で扱います。ただし、どの手法にも共通する前提が一つあります。価格の効き目、すなわち価格を変えたときに数量がどれだけ変わるかを、何らかの形で見積もらなければ、価格は決められないということです。

価格の判断は、需要の推定と最適化の2段で成り立つ

価格を数理モデルで決める作業は、2つの段に分かれます。1段目は、過去の販売データや価格の実験から、価格と数量の関係を推定する段です。2段目は、推定した関係と原価、守るべき決まり(改定の幅、品目どうしの価格の並び、法令)をもとに、粗利などの目的が最も良くなる価格を計算する段です。教科書の多くは2段目の計算を中心に説明しますが、実務で結果を左右するのは1段目であることが多いと考えています。推定が狂っていれば、2段目の計算がどれほど正確でも、出てくる価格は狂った推定に対して正しいだけだからです。

本コラムでは、この2段を分けて書き、2段目の結果がどれだけ1段目に依存するかを、実際の数字で示すことを方針にしました。そのために、答えが分かっている架空のデータを用意しました。

答えの分かっている架空のデータで、推定と最適化を確かめる

共通の題材は、架空の食品スーパーの飲料売場です。緑茶6品目(2つのナショナルブランドとプライベートブランド、それぞれ500mlと2L)、炭酸飲料4品目、水2品目の計12品目について、2年分(104週)の週ごとの売価・販促の有無・販売数量の記録があります。このデータは乱数で生成したもので、実在の企業や店舗の記録ではありません。データを作った側は、価格と数量の本当の関係(本コラムでは「真のモデル」と呼びます)を知っています。現実の企業に見えるのは販売の記録だけで、真のモデルは見えません。そこで本コラムでは、記録から推定した関係(「推定モデル」と呼びます)で価格を決め、その価格を真のモデルで評価して答え合わせをします。

参考までに、第5章で説明する基準の計算の結果を先に示します。推定モデルのもとで、12品目の通常の売価を、現在の売価から上下15%以内、10円刻みの候補の中から選び直しました。プライベートブランドは同じ容量のナショナルブランドより20円以上安くする、同じブランドでは大容量のほうが1mlあたりで安くする、という売場の決まりも守らせています。結果は、4品目を値上げ、4品目を値下げ、4品目を据え置くというものでした。推定モデルは、この価格で週あたりの粗利が1.96%増えると見込みました。同じ価格を真のモデルで評価すると、実際に増える粗利は1.40%でした。真のモデルを知っていれば到達できた上限は1.83%です。推定モデルが選んだ価格と、真のモデルのもとでの最適な価格は、12品目のうち6品目で違っていました。

この差は、推定の誤差がそのまま価格の判断に入り込むことを示しています。しかもこのデータは、2年分の記録があり、販促の値引き率もばらつき、季節の影響の形も単純という、推定にとって恵まれた条件で作っています。現実のデータでは、価格がほとんど動いていない商品や、販促と季節の山が重なって価格の効き目を切り分けにくい商品が多く、推定の誤差はもっと大きくなりえます。恵まれた条件でも、販促・季節・他の品目の価格のどれかを推定の式から落とすと、同じ最適化で選んだ価格は真のモデルで粗利を減らしました。また、値上げを選んだ4品目はすべて過去2年に一度も付けたことのない売価で、+1.40%にはその外側への当てはめが含まれています。第3章では、季節の影響を入れずに推定すると価格の効き目をどれだけ取り違えるかを、第4章では、推定の誤差がどれだけの粗利の損失につながるかを、それぞれ実測で示します。

見込みと実績の差を、価格の判断に戻す

本コラムを通じてお伝えしたいことが一つあります。価格の最適化で大事なのは、一度きりの最適な価格ではなく、価格を変えた結果を測り、その結果で需要の推定を直し、次の価格の判断に戻す循環を回し続けることだということです。上の例のように、推定モデルの見込みと実際の結果には差が出ます。その差を測る仕組みがなければ、見込みどおりの粗利が出なかった理由が、推定の誤りなのか、季節や競合の変化なのか、価格の判断そのものの誤りなのかを区別できません。値上げの効果を測る期間、比べる相手、見る指標を、価格を変える前に決めておくことが、次の判断の質を決めると考えています。

この循環は、次の4つの段階で成り立ちます。

  1. 販売の記録:週ごとの売価・販促の有無・販売数量を残します。
  2. 需要の推定:記録から価格と数量の関係を推定します(1段目)。
  3. 価格の最適化:推定した関係に原価と売場の決まりを入力として加え、粗利などの目的が最も良くなる価格を計算します(2段目)。
  4. 価格の改定:計算した価格に売価を改めます。改定後の結果を測って販売の記録に加え、需要の推定をやり直します。

経営判断に関わる方にとって、この点は導入の目標の置き方に直結します。価格の最適化の仕組みを入れれば最適な価格が出るという期待で始めると、推定の誤差や売場の決まりの抜けによって、現場が受け入れられない価格が出て使われなくなることが多いように思います。まず現在の価格の決め方と、価格を変えたときの記録の残り方を確かめ、少数の品目で価格を動かして効き目を測り、結果を見ながら対象を広げていくという順序であれば、投資の効果を数字で確かめながら進められます。導入の順序は第13章で扱います。

Anagraftでは、データ活用の構想づくりから、価格や販促のような業務課題の定式化、需要の推定と最適化の設計と実装、結果の読み解きと意思決定への接続、社内への定着まで一貫したご支援を行っています。会社概要・ご支援内容の詳細は、以下の資料からご覧いただけます。

Anagraft 会社概要資料(ダウンロードページへ)

全体の地図

本コラムの本編は第1章から第14章までの14の章で、その後に終章を置いています。第1章と第2章で、価格を経営の問題として位置づけ、問題を記述する言葉をそろえます。第3章から第5章では、序章で述べた2段の順に解き方を扱います。販売の記録から価格の効き目を推定する工程、1つの商品の価格を決める工程、同じ売場で客を取り合う複数の商品の価格をまとめて決める工程の順です。

第6章から第9章は、時間の中で価格を動かす場面を扱います。期間を区切って値引きする販促、売り切る期限のある商品の値下げ、売れる数に上限のある客室や座席の予約の管理、時間と残りの在庫に応じて価格を変えるダイナミックプライシングです。第10章では、データが少ないときに価格を試しながら学ぶ方法を、第11章では競合の価格への対応を扱います。第12章で法令と顧客の受け止め方を、第13章で現場への導入と運用を、第14章で公開された事例と研究の動向をまとめ、終章で全体を振り返ります。

章題主に扱う手法と題材
第1章価格はなぜ経営の問題なのか利益の感応度、物価と価格転嫁、価格を決める層、損失の型
第2章価格の問題を記述する問題の分類、決めることと制約と目的、共通データの紹介、素朴な値付けとの比較
第3章需要曲線と価格弾力性を推定する回帰による推定、季節と販促の取り違え、推定の不確かさ、データが無いとき
第4章1品目の価格を最適化する粗利の最大化、粗利率と弾力性の関係(ラーナーの公式)、需要曲線の形、利益曲線の平らさ、推定誤差の損失
第5章品目をまたいで価格を最適化する交差価格弾力性とカニバリゼーション、価格の並びの制約、整数計画、基準の計算の読み方
第6章販促と値引きを設計する販促の効果の分解、正味の粗利、販促カレンダーの最適化
第7章値下げと在庫処分季節商品の値下げ、動的計画法、見切りと食品ロス
第8章レベニューマネジメントで容量を売り分ける予約クラス、保護枠、オーバーブッキング
第9章ダイナミックプライシング時間と残り在庫に応じた価格、改定回数の制約、顧客の待ち
第10章価格を試して学ぶ価格実験の設計、多腕バンディット、探索の費用
第11章競合と価格競合追随の規則、価格競争、競合価格データ
第12章法規制・公平性・顧客の受け止め景品表示法と価格表示、独占禁止法、総額表示、公平感
第13章現場に入れる価格改定の業務、ガードレール、システムと棚札、効果測定、導入の順序、失敗の型
第14章事例と最新動向公開一次情報のある事例、研究の動向、生成AIとの分担

読者の立場ごとに、問いから章を引けるように対応表も置きました。一つの問いに複数の章が関わる場合は、入口になる章を先に書いています。

問い入口になる章あわせて読む章
価格の良し悪しを経営の数字でどう測るか第1章第2章、第13章
自社の価格の問題はどの種類に当たるか第2章第4章、第8章、第9章
手元の販売データで価格の効き目を測れるか第3章第10章
原価が上がった分をどれだけ価格に乗せるか第4章第1章、第12章
値上げした商品の客が同じ売場の別の商品に流れる第5章第3章
特売で数量は増えるが粗利が増えた実感がない第6章第3章、第5章
季節商品や消費期限の近い商品をいつ・どれだけ値下げするか第7章第9章
客室や座席の予約をどの料金で何室まで受けるか第8章第9章
時期や残りの数で価格を変えたい第9章第8章、第12章
新商品や記録の少ない商品の価格を決めたい第10章第3章
競合の値下げにどう応じるか第11章第12章
二重価格の表示や値引きの表示で気をつけること第12章第13章
価格の仕組みを入れても現場で使われない第13章第14章

本コラムでは、粗利などの金額を比べる単位が章によって異なります。共通データの章は週あたりの値で比べますが、販促・値下げ・予約・興行の章では、比べる対象に合わせて期間の合計や1泊あたりの値を使っています。各章の単位は次の表のとおりです。金額はすべて架空の設定による例題の値です。

章主に比べる金額単位
第1章〜第5章粗利12品目(またはカテゴリ)の週あたりの期待値。年平均の季節で、販促のない平常週
第6章粗利の増分販促1回は販促の週と翌週の2週間の合計、販促カレンダーは季節を含む14週の合計
第7章粗利季節商品の販売期間10週の1シーズン合計(売れ残りの処分の収入を含む)
第8章収入・粗利架空のビジネスホテルの1泊あたり
第9章売上架空の興行の公演1回あたり(原価は引かない)
第10章粗利の取りこぼし(リグレット)52週の合計
第11章粗利架空の2社の1店あたり、週あたり(52週の合計を併記する箇所あり)

各章の末尾には、その章の主題を深めるための参考書籍を挙げ、巻末に一覧としてまとめました。本文で引いた論文や公式ドキュメント、官公庁の資料は、巻末の参考情報に章ごとに載せています。

第1章 価格はなぜ経営の問題なのか

価格は、売上と粗利を決める要素のうち、最も少ない手間で動かせるものです。新しい店舗を出す、仕入先を替える、販売数量を伸ばすといった施策には時間と投資がかかりますが、売価は棚札とPOSのマスタを書き換えれば翌日から変わります。その一方で、売価を変えると販売数量が反応し、同じカテゴリの他の品目の売れ方も変わり、顧客の受け止めも変わります。動かすのは簡単でも、動かした結果を読むのは簡単ではありません。この章では、記事全体の出発点として、価格がなぜ経営の問題なのかを、共通データで実際に計算した数字と公的統計で確かめます。あわせて、価格を決める仕事をいくつかの層に分けてこの記事の範囲を示し、価格の判断を誤ったときに経営上どのような損失が出るかを型として整理し、記事全体で使う経営指標の定義を固定します。

この章で使う数字は、第2章で詳しく紹介する共通のサンプルデータから計算しています。サンプルデータは、架空の食品スーパーの「飲料」カテゴリ12品目(緑茶6・炭酸4・水2)の104週の販売履歴で、実在の企業や店舗の記録ではありません。序章で述べたとおり、データを作った側は、売価を変えると数量がどう動くかという本当の式(真のモデル)を知っています。現実の企業に見えるのは販売の記録だけで、記録から推定した式(推定モデル)しか使えません。この章の計算は、断りのない限り真のモデルを使い、年平均の季節で販促のない平常週の、週あたりの期待値で示します。売価・原価・粗利の円の値は、すべて架空の設定から計算したものです。

利益の感応度を共通データで計算する

最初に、価格・販売数量・原価をそれぞれ1%だけ改善したら、粗利が何%動くかを計算します。ある要素を少し動かしたときに利益がどれだけ動くかを、ここでは利益の感応度と呼びます。共通データの12品目を現在の売価で売ったときの真のモデルの期待値は、週あたり数量13,585.0本、売上1,952,870円、原価1,115,734円、粗利837,136円で、粗利率(粗利÷売上)は42.87%です。この状態から、3つの要素を1つずつ、ほかを動かさずに1%だけ改善した結果が次の表です。

動かす要素(ほかは固定)粗利(週あたり、架空)粗利の変化率
基準(現在の売価・真のモデル)837,136円0%
売価を全品目1%上げる(数量はそのまま)856,665円+2.33%
販売数量を全品目1%増やす(売価・原価はそのまま)845,507円+1.00%
原価を全品目1%下げる(売価・数量はそのまま)848,293円+1.33%

表の「粗利の変化率」の列のとおり、同じ1%でも、売価の1%が粗利を最も大きく動かします。理由は算数で説明できます。売価を1%上げると、数量が変わらなければ増えた売上はそのまま粗利に加わるので、粗利の増加額は売上の1%、つまり19,529円です。粗利は売上の42.87%しかないので、粗利から見るとその増加は1%÷0.4287で約2.33%になります。数量の1%は売上も原価も同じ割合で増やすので、粗利もちょうど1%増えます。原価の1%は原価総額1,115,734円の1%が粗利に加わるので、粗利から見ると1,115,734÷837,136×1%で約1.33%です。粗利率が低い事業ほど、売価の1%の効き目は大きくなります。

粗利から人件費・家賃・物流費などの固定費を引いた利益で見ると、この倍率はさらに大きくなります。売価の1%が生む増加額は売上の1%で変わらないのに、割る相手の利益が小さくなるからです。次の表は、数量が変わらないと仮定して、利益が売上の何%かによって、売価1%の値上げが利益を何%動かすかを算術で並べたものです。共通データには固定費の設定が無いので、42.9%の行以外は特定の企業や業種の値ではなく、比率の仮定だけで計算した値です。

利益が売上に占める割合(仮定)売価1%の値上げによる利益の変化率(数量は不変と仮定)
42.9%(共通データの粗利率)+2.3%
20.0%+5.0%
10.0%+10.0%
5.0%+20.0%
3.0%+33.3%

利益が売上の5%しかない事業では、売価を1%上げて数量が変わらなければ、利益は2割増えます。逆に、売価を1%下げて数量が変わらなければ、利益は2割減ります。価格が経営の問題になる第一の理由はここにあります。売価は、利益に対して増幅されて効く変数です。ただし、この表はすべて「数量が変わらない」という仮定の上に立っています。次の節で、この仮定を外します。

計算に使ったコードを載せます。共通データの読み込みは1行で、真のモデルの期待数量を返す関数 true_expected_qty と粗利を計算する関数 weekly_profit は共通データのファイルに入っています。この章のスクリプトから、上の表に当たる部分を抜き出して単独で動くように整えたものです。

import numpy as np
from price_data import *

p0 = SKUS.current.values.astype(float)   # 現在の売価(架空)
c0 = SKUS.cost.values.astype(float)      # 原価(架空)
q0 = true_expected_qty(p0)               # 真のモデルの期待数量(年平均の季節・平常週)
G0 = weekly_profit(p0, q0)               # 粗利=Σ(売価−原価)×数量

def pct(g):
    return 100 * (g - G0) / G0

print("売価+1%%(数量そのまま) %+.2f%%" % pct(weekly_profit(p0 * 1.01, q0)))
print("数量+1%%(売価そのまま) %+.2f%%" % pct(weekly_profit(p0, q0 * 1.01)))
print("原価-1%%(売価・数量そのまま) %+.2f%%" % pct(np.sum((p0 - c0 * 0.99) * q0)))
for r in [-0.01, 0.01]:                  # 真のモデルで数量が反応する場合
    p = p0 * (1 + r)
    print("売価%+.0f%%(数量が反応) %+.2f%%" % (100 * r, pct(weekly_profit(p, true_expected_qty(p)))))
# 出力:
# 売価+1%(数量そのまま) +2.33%
# 数量+1%(売価そのまま) +1.00%
# 原価-1%(売価・数量そのまま) +1.33%
# 売価-1%(数量が反応) -0.02%
# 売価+1%(数量が反応) -0.01%

数量が反応すると、1%の値上げはほとんど粗利を動かさない

実際には、売価を上げれば数量は減り、下げれば増えます。共通データの真のモデルで、12品目すべての売価を同じ率で1%上げると、数量は2.38%減り、売上は1.32%減り、粗利は0.01%減りました。1%下げた場合は、数量が2.47%増え、売上が1.36%増え、粗利は0.02%減りました。12品目の自己弾力性は-2.3から-3.6で、販売数量で重みを付けた平均は-3.01です。この平均に比べて数量の減り方(2.38%)が小さいのは、全品目を同時に上げると、ある品目から離れた客の一部が同じカテゴリの他の品目に移り、その分が打ち消し合うからです。品目間の移動を除いて自己弾力性だけで計算すると、全品目1%の値上げでの数量の減少は2.95%になります。「数量が変わらなければ+2.33%」だった値上げは、数量の反応を入れると、粗利をほとんど動かしません。

1%の改善が粗利を何%動かすかを示す横棒グラフ。売価+1%(数量は不変と仮定)が+2.33%、原価-1%が+1.33%、数量+1%が+1.00%、売価+1%を真のモデルで数量が反応する形で計算すると-0.01%。基準は現在の売価・真のモデルの週あたり粗利837,136円

この差を読むために、値上げで粗利が変わらない数量の減り方を計算しておきます。粗利率を \( m \)、売価の上げ幅を \( \Delta \)(1%なら0.01)とすると、粗利を保てる数量の減少率の上限は次のとおりです。

\( \text{数量の減少率の上限} = \dfrac{\Delta}{m + \Delta} \)

言葉で言い換えると、「値上げ幅を、粗利率と値上げ幅の和で割った値」までなら数量が減っても粗利は減らない、ということです。この値を、ここでは損益分岐の数量減と呼びます。共通データの粗利率42.87%では、1%の値上げに対する損益分岐の数量減は 0.01÷(0.4287+0.01)で2.28%です。真のモデルで全品目を1%上げたときの数量の減少は2.38%で、損益分岐の2.28%をわずかに上回ったので、粗利がわずかに減りました。粗利率が低い商品ほど、損益分岐の数量減は大きくなります。粗利率20%なら1%の値上げに対して4.8%まで、粗利率10%なら9.1%まで数量が減っても粗利は保てます。前の節で、粗利率が低いほど売価の1%の効き目が大きいと書いたことの裏返しで、粗利率が低い事業ほど、値上げで客数や数量が多少減っても粗利は守られやすく、値下げで数量を増やして取り返すのは難しくなります。

品目ごとに同じ計算をしたのが次の表です。「損益分岐の数量減」の列は1%の値上げに対する値で、「真の自己弾力性」の列は真のモデルの値(その品目の売価が1%上がると、その品目の数量が何%変わるか)です。最後の列は、その品目だけ売価を1%上げたとき、12品目合計の粗利が真のモデルで何%動くかです。

品目現在の売価原価粗利率損益分岐の数量減(1%の値上げ)真の自己弾力性その品目だけ+1%のときの12品目合計の粗利の変化
T1 緑茶A 500ml138円72円47.8%2.05%-2.4+0.018%
T2 緑茶B 500ml118円68円42.4%2.31%-3.4-0.036%
T3 緑茶PB 500ml88円48円45.5%2.15%-3.1+0.021%
T4 緑茶A 2L258円150円41.9%2.33%-2.9+0.017%
T5 緑茶B 2L238円142円40.3%2.42%-2.9+0.037%
T6 緑茶PB 2L178円102円42.7%2.29%-3.2+0.007%
C1 炭酸C 500ml148円82円44.6%2.19%-2.8-0.027%
C2 炭酸D 500ml128円76円40.6%2.40%-3.3-0.033%
C3 炭酸C 1.5L238円140円41.2%2.37%-2.3+0.040%
C4 炭酸D 1.5L218円134円38.5%2.53%-3.0+0.012%
W1 水E 2L108円62円42.6%2.29%-2.9-0.013%
W2 水PB 2L78円46円41.0%2.38%-3.6-0.048%

表の最後の列を見ると、1%の値上げで12品目合計の粗利が増える品目(T1・T3・T4・T5・T6・C3・C4)と、減る品目(T2・C1・C2・W1・W2)があります。一律に動かすと打ち消し合うので、前の節のように全品目の1%の値上げでは粗利がほとんど動かなかったわけです。どの品目を上げ、どの品目を下げるべきかが品目ごとに違う、ということが、価格の問題を「全体として何%上げるか」ではなく「品目ごとにいくらにするか」の問題にしています。

表の読み方で1つ注意があります。T1は、真の自己弾力性が-2.4で、損益分岐の数量減の2.05%を上回る2.4%の数量が減るのに、12品目合計の粗利は増えています。T1の数量が減った分の一部が、同じカテゴリの他の品目(T2やT3など)に移って売れるからです。品目ごとの損益分岐と自己弾力性を比べるだけでは、この移動が見えません。他の品目の価格が数量に与える影響(交差価格弾力性)とその扱いは第5章、弾力性そのものの推定は第3章で扱います。

同じ理由で、この表の最後の列は、第4章の「1品目の最適」と向きが違って見えることがあります。最後の列は12品目合計の粗利で見た値で、その品目自身の粗利だけを見ると、1%の値上げで粗利が増えるのは C3 だけで、T3(自身の粗利-0.904%)や T6(同-0.865%)を含む残りの11品目は減ります。他の品目を現在の売価に固定し、その品目自身の粗利だけを最大にする第4章の計算で、T3・T6 の最適が現在の売価より低く出るのはこのためです。どちらも真のモデルでの計算で、違うのは「12品目合計の粗利」と「その品目自身の粗利」のどちらを見ているかです。この違いは第4章でもう一度確かめます。

一律ではなく品目ごとに動かすと、粗利の改善の余地が見える

全品目の売価を同じ率で動かす範囲を、上下15%まで1%刻みで広げたのが次の図です。左は数量と売上、右は粗利の、現在の売価に対する変化率で、左右は同じ縦軸です。

全品目の売価を同じ率でマイナス15%からプラス15%まで動かしたときの、数量・売上・粗利の現在の売価に対する変化率。左図では数量が+48.69%から-28.57%、売上が+24.65%から-16.93%まで大きく動く。右図の粗利は同じ縦軸でほぼ平らで、現在の売価(0%)が最大、-15%で-5.02%、+15%で-2.34%
全品目の売価の変化率数量の変化率売上の変化率粗利の変化率
-15%+48.69%+24.65%-5.02%
-10%+29.24%+15.29%-1.98%
-5%+13.27%+7.14%-0.46%
0%(現在の売価)0%0%0%
+5%-11.12%-6.31%-0.30%
+10%-20.54%-11.92%-1.13%
+15%-28.57%-16.93%-2.34%

この表から読めることが3つあります。1つ目は、一律の率で動かす限り、現在の売価が真のモデルの粗利を最大にしていることです。1%刻みで調べた31通りの中で、粗利が最大になったのは0%(現在の売価)でした。この記事の架空のデータは、現在の売価がカテゴリ全体として大きく外れていない状態に作ってあります。2つ目は、粗利が動かない範囲でも、数量と売上は大きく動くことです。売価を一律5%下げると、数量は13.27%、売上は7.14%増えますが、粗利は0.46%減ります。売上や数量だけを目標にすると、粗利を減らしながら目標を達成できてしまいます。3つ目は、粗利の曲線が現在の売価の近くで平らなことです。±5%の範囲では粗利の変化は0.5%未満に収まります。現在の売価の近くでは少々ずれても粗利の損は小さく、遠くへ動かすほど損が急に大きくなるという性質で、第4章で「利益曲線の平らさ」として詳しく扱います。

では、価格の改善の余地は無いのかというと、そうではありません。同じ真のモデルで、品目ごとに上下15%の範囲で売価を連続的に動かして粗利を最大にすると(価格の並びの制約や10円刻みの制約は付けない参考の計算)、粗利は855,777円で、現在の売価に対して+2.23%になりました。このときの売価は、T3・T5・C3を15%上げ、W2を15%下げ、T2を10.7%下げるといった具合に、品目ごとに上げ下げが分かれます。第5章で扱う記事全体の基準の計算は、これに10円刻みの候補と売場の価格の並びの制約を加えたもので、真のモデルを知っていれば到達できる上限は+1.83%、販売履歴から推定した推定モデルで選んだ価格を真のモデルで評価すると+1.40%でした。

経営の言葉に直すと、この架空のカテゴリでの価格の改善の余地は、粗利の数%の規模で、しかもその大部分は「全体を上げるか下げるか」ではなく「どの品目を上げ、どの品目を下げるか」から来ています。記事全体の基準の記録では、推定モデルで選んだ売価を真のモデルで評価した粗利は週あたり848,895円で、現在の売価の837,136円との差は週11,759円(丸め前は11,759.15円)で、丸め前の値で年換算(52週)すると611,476円です。1カテゴリの数字としては小さく見えますが、同じ考え方を売場の多くのカテゴリに広げたときの合計と、推定と最適化の仕組みを作って回す費用を比べるのが、投資の判断の出発点になります。逆に、推定を誤って品目ごとの上げ下げを取り違えると、同じ規模の粗利を失う方向にも動きます。

物価と価格転嫁の統計を読む

価格の判断が経営の問題として重くなっている背景に、物価と原価の上昇があります。ここでは、記事の基準時点(2026年10月)に開いて確かめた最新の公的統計の数字だけを示します。

総務省統計局の消費者物価指数(2025年基準)の2026年8月分(2026年9月18日公表)では、全国の総合指数が102.2で前年同月比1.9%の上昇、生鮮食品を除く総合指数が102.0で1.7%の上昇、生鮮食品及びエネルギーを除く総合指数が102.5で1.9%の上昇でした。同じ公表資料の「前年同月比に寄与した主な内訳」には、食料のうち中分類の飲料が6.0%の上昇、その中の品目として緑茶が31.5%の上昇と載っています。この記事の共通データは架空の飲料売場ですが、現実の飲料の価格も、統計の上で大きく動いている分野だということです。

日本銀行の企業物価指数の2026年8月速報(2026年9月11日公表)では、国内企業物価指数は前月比0.2%の下落、前年比7.6%の上昇でした。輸入物価指数は円ベースで前年比24.8%の上昇です。企業物価指数は企業どうしで取引される財の価格、消費者物価指数は消費者が買う財とサービスの価格を測る指数で、対象も基準年も違うので、2つの上昇率の差をそのまま「転嫁されていない割合」と読むことはできません。それでも、2026年8月の時点で、企業が仕入れる側の価格が前年比で大きく上がっていたことは、この2つの公表資料から確かめられます。

原価の上昇をどれだけ販売価格に反映できているかについては、中小企業庁が「価格交渉促進月間」(毎年3月と9月)のあとに行っているフォローアップ調査があります。開いて確かめた最新の結果は、2026年3月の月間についての調査(2026年6月26日公表)です。この調査は、中小企業に発注者との価格交渉と価格転嫁の状況を尋ねたもので、調査票の配布先は30万社、回答企業数は69,625社、回答から抽出される発注企業は延べ91,233社です。配布先の抽出ではBtoC取引が中心の業種を除いているので、企業間の取引についての調査で、小売店が消費者に売る価格についての調査ではありません。

項目(中小企業庁 2026年3月 価格交渉促進月間フォローアップ調査)2025年9月の調査2026年3月の調査
価格転嫁率(コスト全体)53.5%54.2%
価格転嫁率(官公需取引に限る)52.1%48.4%
価格交渉が行われた割合(価格交渉不要の回答を除く)89.4%90.7%
コストの全額を転嫁できた割合(価格転嫁不要の回答を除く)27.3%27.2%
全く転嫁できなかった、またはマイナスとなった割合(同上)16.8%16.0%

ここでいう価格転嫁率は、調査資料の注記によれば「実際のコスト上昇分のうち、価格転嫁が実現した割合」についての回答の平均値です。表の「価格転嫁率(コスト全体)」の列のとおり、2026年3月の調査では54.2%で、コストの上昇分のおよそ半分を価格に反映できた、という水準です。資料は、全額を転嫁できた企業がある一方で、全く転嫁できなかった企業が残る二極化の状態が続いていると述べています。

この記事の主題との関係で言えば、原価が上がったときに何割を価格に反映させるかは、交渉力だけでなく、価格と数量の関係にも左右されます。数量が価格にどれだけ反応するかによって、粗利を最大にする転嫁の割合そのものが変わるからです。需要の形によって、原価の上昇の何割を売価に乗せるのが粗利を最大にするかがどう違うかは、第4章で共通データを使って計算します。

価格を決める仕事の層と、この記事の範囲

「価格を決める」と一口に言っても、決める頻度も、決める人も、使う手法も違う仕事が重なっています。この記事では、価格を決める仕事を次の5つの層に分けて考えます。上の層ほど決める頻度が低く影響が長く続き、下の層ほど頻度が高く、1回の決定の影響は短くなります。

層決めること決める頻度の例主な経営指標この記事で扱う章
1 価格戦略・価格帯の設計どの価格帯で戦うか、品揃えの中で価格の段をどう並べるか(PB(小売の自社企画のプライベートブランド)と NB(メーカーのナショナルブランド)の差、容量ごとの単価の並び)年に1回、出店や品揃えの見直しのとき粗利率、客数、価格の並びの一貫性第2章(問題の分類)、第5章(価格の並びの制約)、第11章(競合)
2 通常売価の改定品目ごとの通常の売価をいくらにするか原価の改定や競合の変化に合わせて、数か月から1年ごと粗利、販売数量、売上第3章(需要の推定)、第4章(1品目)、第5章(品目横断)
3 販促・値引きどの品目を、いつ、何%引きで販促するか週ごと、チラシの単位販促の正味の粗利、値引きの原資第6章
4 値下げ・処分売り切る期限のある商品を、いつ、どれだけ値下げするかシーズンの後半、消費期限の前在庫の消化率、売れ残り、廃棄第7章
5 容量のある事業の動的な価格客室・座席など容量が決まった商品を、残りの日数と残りの数に応じていくらで売るか日ごと、時間ごと稼働率、販売可能な容量1単位あたりの収入第8章(レベニューマネジメント)、第9章(ダイナミックプライシング)

この5つの層をまたいで共通に使う道具として、価格を試して学ぶ方法(第10章)、法規制と顧客の受け止め(第12章)、仕組みを現場に入れる方法(第13章)、事例と最新の動向(第14章)を置きました。この記事が扱わないものもはっきりさせておきます。新しい事業の値付けで、支払意思額を調査で直接測る方法の詳細、BtoB の個別見積の価格交渉、金融商品や公共料金のように規制で価格が決まるものは、この記事の中心ではありません。発注量そのものの決め方は、弊社コラム『在庫と発注量を決める数理モデル、安全在庫の計算から多段階在庫の最適化まで』で扱っています。

価格を決める仕事の5つの層を表す概念図の図

層を分ける理由は、上の層の決定が下の層の前提になるからです。通常売価(第2層)を決めると、販促の値引き率(第3層)はその売価からの割引として決まります。通常売価が高すぎれば販促の頻度を増やして数量を補う圧力がかかり、低すぎれば販促で値引きできる幅が残りません。容量のある事業(第5層)でも、料金の上限と下限という価格帯(第1層)の範囲の中で日々の価格を動かします。下の層だけを最適化しても、上の層の決定が誤っていれば取り返せない損失が残ります。逆に、どの層でも、価格と数量の関係を推定する作業(第3章)は共通の土台になります。

価格の判断を誤ったときの損失の型

価格の判断を誤ったときの損失は、大きく3つの型に分かれます。共通データの真のモデルで、それぞれの大きさを確かめます。

1つ目は、安すぎることによる粗利の取りこぼしです。全品目の売価を一律に10%下げると、真のモデルで数量は29.24%、売上は15.29%増えますが、粗利は1.98%減ります。週あたり837,136円の粗利が820,540円になるので、週16,596円の取りこぼしです。この型の損失は、売上と数量の数字が良く見えるので気づかれにくいのが特徴です。売上や販売数量を評価の指標にしている組織ほど、安すぎる方向の誤りを自分では見つけにくくなります。

2つ目は、高すぎることによる客数と数量の減少です。全品目の売価を一律に10%上げると、数量は20.54%、売上は11.92%減り、粗利は1.13%減ります(週あたり827,651円、週9,485円の減少)。この共通データの真のモデルでは、価格を上げて減った数量は同じカテゴリの他の品目に移るか、売れなくなるかのどちらかで、顧客がほかの売場や他の店に移ること、その後も戻ってこないことは式に入っていません。現実には、カテゴリ全体を値上げすると、客数そのものが減り、他のカテゴリの売上まで失うおそれがあります。このデータで計算した1.13%は、そうした離反を含まない、控えめな見積もりとして読む必要があります。

3つ目は、値引きの常態化です。共通データの販売履歴(2年・12品目・1,248行)では、販促の行は108行(8.7%)で、販促週の平均の値引き率は21.1%でした。通常売価との差に販売数量を掛けた値引きの額は2年で12,652,200円で、同じ2年の粗利87,738,652円の14.4%に当たります。販促週の数量は全数量の21.4%を占めますが、販促週の粗利は全粗利の10.8%にとどまり、販促週の粗利率は23.6%で、平常週の42.0%を大きく下回ります。値引きは、それ自体が粗利を削る原資の支出です。販促がどれだけ数量を上乗せし、翌週にどれだけ反動が出て、他の品目からどれだけ売上を移しているかを差し引いた正味の効果は、第6章で分解して計算します。

値引きの常態化には、もう1つの懸念があります。値引きが繰り返されると、顧客が値引き後の価格を基準として覚え、通常売価で買わなくなるのではないか、という懸念です。この記事の共通データの真のモデルには、この効果は入っていません。販促の翌週の落ち込み(買いだめの反動)は入っていますが、値引きを繰り返すほど通常売価での数量が減っていく仕組みは入れていないので、この章の数字ではこの損失の大きさは測れません。価格戦略の教科書でも論点として扱われていて、たとえば上田隆穂『利益を最大化する価格決定戦略』(明日香出版社)の目次には「価格の判断基準としての内的参照価格」「内的参照価格を低くしない価格プロモーション?」という節が置かれています。この記事では損失の型として名前を挙げておき、大きさの見積もりは示さずに、販促の設計の中で扱います(第6章)。

損失の型共通データの真のモデルで測った大きさ(週あたり、架空)見落としやすい理由主に扱う章
安すぎ(粗利の取りこぼし)一律10%値下げで数量+29.24%・売上+15.29%・粗利-1.98%(16,596円減)売上と数量は増えるので、良い結果に見える第3章、第4章、第5章
高すぎ(客数と数量の減少・離反)一律10%値上げで数量-20.54%・売上-11.92%・粗利-1.13%(9,485円減)。他の売場や他店への離反は含まない粗利率は上がるので、良い結果に見える第4章、第11章、第12章
値引きの常態化(基準となる価格の毀損)販売履歴2年で値引きの額12,652,200円=粗利の14.4%。基準となる価格への影響はデータに無く測れない販促週の数量の伸びだけが報告されやすい第6章、第12章

表の「見落としやすい理由」の列が、この節で最も伝えたいことです。安すぎる誤りは売上と数量の指標で、高すぎる誤りは粗利率の指標で、それぞれ良く見えてしまいます。値引きの常態化は、販促週の数量の伸びで良く見えてしまいます。1つの指標だけで価格を評価すると、どの型の誤りも見逃しやすくなります。価格の判断は、粗利の額を主な指標にし、数量・売上・粗利率・客数を並べて見る必要があると考えています。

記事全体で使う経営指標の定義

章によって同じ名前の指標が別の意味で使われると、数字の比較ができなくなります。この記事では、次の定義を全章で固定しました。

用語この記事での定義注意
粗利品目ごとの(売価から原価を引いた額)×数量の合計。単位は円。特に断らない限り、年平均の季節で販促のない平常週の、週あたりの期待値固定費(人件費・家賃など)は引かない
粗利率粗利÷売上粗利率が上がっても粗利の額が減ることがある
粗利の改善同じモデル(真のモデル、または推定モデル)で評価した「現在の売価のときの粗利」に対する増減率どちらのモデルで評価したかを必ず書く
現在の売価共通データの第104週時点の通常売価第53週に5品目を10円値上げした後の売価
価格弾力性価格が1%変わると数量が何%変わるか。自己弾力性は負の値。交差弾力性は、他の品目の価格が1%上がるとこの品目の数量が何%変わるか(代替品なら正)推定の方法は第3章、交差の扱いは第5章
真のモデル共通データを作った側が知っている本当の需要の式現実の企業には見えない。この記事では答え合わせに使う
推定モデル販売履歴から推定した需要の式現実の企業が使えるのはこちらだけ
値引きの額販促週の(通常売価から実売価を引いた額)×数量の合計販促の費用の一部。チラシなどの費用は含まない

「最適」という語にも注意が要ります。この記事で「最適な売価」と書くときは、どのモデルで粗利を最大にした売価かを必ず書きます。推定モデルで最適な売価は、推定が正しければ粗利を最大にしますが、推定が誤っていればそうではありません。この章の前半で示したとおり、推定モデルの最適な売価を真のモデルで評価した粗利の改善(+1.40%)は、推定モデル自身が見込んだ改善(+1.96%)より小さく、真のモデルの最適(+1.83%)にも届きません。この差を見込みと実績の差として測り続けることが、価格の仕組みを運用するうえでの基本になります。

容量のある事業(第8章・第9章)では、これに稼働率(販売できる容量のうち実際に売れた割合)や、販売可能な容量1単位あたりの収入といった指標が加わります。季節品の値下げ(第7章)では、在庫の消化率や売れ残り、廃棄が加わります。これらの指標の正確な定義は、文献で確かめたうえで各章で示します。

経営の判断に翻訳する

この章の結果を、経営の判断に使える形に整理します。1つ目は、価格の1%は、数量が変わらなければ粗利の1%よりずっと大きく効くが、数量の反応を入れると話が変わる、ということです。共通データでは、数量が変わらなければ+2.33%だった1%の値上げが、真のモデルでは-0.01%でした。値上げや値下げの効果を「売価×数量」の掛け算だけで見積もると、数量の反応の分だけ必ず見込みを誤ります。価格の判断には、価格と数量の関係の推定が欠かせません。

2つ目は、価格の改善の余地は、全体を上げるか下げるかよりも、品目ごとの上げ下げの組合せにある、ということです。一律の率では現在の売価が最大で、品目ごとに動かすと真のモデルで+2.23%(制約なしの参考値)、売場の制約の中で推定モデルが選んだ売価を真のモデルで評価すると+1.40%でした。原価が上がったときに「全品目を一律に何%」と決める運用は、計算が簡単な一方で、品目ごとの改善の余地を使わずに残します。

3つ目は、評価の指標を1つに絞らない、ということです。安すぎる誤りは売上と数量で、高すぎる誤りは粗利率で、値引きの常態化は販促週の数量で、それぞれ良く見えます。価格を決める担当者の評価を売上だけ、あるいは粗利率だけで行っていると、その指標で良く見える方向の誤りが組織的に繰り返されます。粗利の額を主な指標にし、数量・売上・粗利率・客数を必ず並べて報告する形にしておくことが、価格の判断を誤らないための最初の仕組みだと考えています。

この章の要点は3つです。第一に、売価は利益に対して増幅されて効く変数で、共通データでは数量が変わらなければ1%の値上げが粗利を2.33%動かしますが、数量の反応を入れるとほとんど動かず、効き目は品目ごとに逆向きにもなります。第二に、物価と原価の上昇は公的統計で確かめられ(2026年8月の消費者物価指数は前年同月比1.9%、国内企業物価指数は前年比7.6%)、中小企業の価格転嫁率は2026年3月の調査で54.2%でした。第三に、価格を決める仕事は5つの層に分かれ、判断の誤りは安すぎ・高すぎ・値引きの常態化の3つの型で損失を生み、どれも1つの指標だけでは見えません。次の第2章では、この記事で扱う価格の問題を分類し、決めること・制約・目的を整理したうえで、共通データを詳しく紹介し、素朴な値付けの規則と基準の結果を比べます。

この章を深めたい方への参考書籍

『価格の掟 ザ・プライシングマンと呼ばれた男の告白』(ハーマン・サイモン著、上田隆穂監訳、渡部典子訳、中央経済社):原題は Confessions of the Pricing Man で、価格の考え方を経営の側から書いた本です。目次には「価格は重要な利益ドライバーである」「価格差異化という高度なアート」「経済危機への対応と価格戦争」「プライシングはCEOが取り組むべき仕事である」といった章が並びます。この章で共通データを使って確かめた「売価は利益に対して増幅されて効く」「価格の改善の余地は品目ごとの差の付け方にある」という論点を、数理モデルではなく経営の言葉で読み直すのに向いています。

『利益を最大化する価格決定戦略』(上田隆穂、明日香出版社):価格戦略を専門とする研究者が、価格の心理、参照価格、価格戦略の分類、ダイナミック・プライシング、サブスクリプション、流通の価格体系、コンジョイント分析やPSM法による価格の決め方までを1冊で扱った本です。この章で損失の型として挙げた「値引きの常態化」に関わる内的参照価格の節もあり、この記事が数理モデルで扱う範囲の外側にある、顧客の受け止めや流通の取引の論点を補うのに役立ちます。

第2章 価格の問題を記述する

第1章では、価格が粗利を大きく動かす経営の変数であること、そして価格を決める判断には、価格帯の設計から通常売価の改定、販促、値下げ、容量のある事業の動的な価格まで、いくつかの層があることを見ました。この章では、手法に入る前の準備として、価格の問題を「何を決めるのか」「何を良しとするのか」「何を守らなければならないのか」の3つに分けて書き出す方法を整理します。そのうえで、この記事の第3章以降で共通して使うサンプルデータ(架空の食品スーパーの飲料12品目・104週)を紹介し、現場でよく使われる形の素朴な値付けの規則をいくつか自分で作って、その粗利を答え合わせ用のモデルで計算し、記事全体の基準としている最適化の結果と並べます。

先に結論の一部を書いておくと、この章で作った9通りの素朴な規則は、共通データの上では1つも現在の売価の粗利を上回りませんでした。一方、需要を推定して品目ごとに価格を選び直した基準の結果は、粗利を1.40%押し上げています。差を生んでいるのは計算の巧拙ではなく、問題の書き方です。素朴な規則は「全品目に同じ物差しを当てる」形をしていて、品目ごとに異なる需要の反応を書き込む場所がありません。ただし、需要を推定しさえすれば素朴な規則に勝てる、というわけではありません。第3章で確かめるとおり、販促・季節・同じカテゴリの他品目の価格のどれかを推定の式から外すと、同じ最適化をしても真のモデルでの粗利の改善は-3.27%から-1.13%で、この章の素朴な規則9通りの範囲(-6.39%から-0.14%)の中に入ります。なお、この-3.27%は、後で見る「粗利率を35%にそろえる」規則の-3.27%と小数第2位までたまたま同じ値になった別の計算で、週あたりの粗利の差は約27,404円と約27,387円です。基準の+1.40%は、これらの要因を式に入れて推定した場合に限った結果です。どこに何を書けば問題として成り立つのかを、順に見ていきます。

価格の問題は「どの品目を・いつ・いくらに」を決める問題である

数理モデルで価格を決めるときは、最初に問題を3つの部品に分けて書き出します。1つ目は、モデルが答えとして返す値、つまり決定変数です。価格の問題では、決定変数は「どの品目の」「いつの」「いくらの」価格かという3つの軸で表せます。2つ目は目的で、決定変数の値を1つ決めたときに、それがどれだけ良いかを1つの数で評価する式です。粗利を最大にする、売上を最大にする、在庫を期末までに売り切る、といったものがこれに当たります。3つ目は制約で、どんなに目的の値が良くても選んではいけない価格の組を除く条件です。現在の売価から大きく動かしすぎない、PB(小売が自社で企画するプライベートブランド)を NB(メーカーのナショナルブランド)より安くする、といったものがここに入ります。

この3つの部品のうち、価格の問題で最も見落とされやすいのは、決定変数の軸を何本にするかという選択です。「どの品目の」の軸を1本にすれば1品目の問題になり、品目どうしの影響(ある品目を値下げすると隣の品目が売れなくなる、といった関係)は扱えません。「いつの」の軸を1つの時点に固定すれば、通常売価を1回改定する問題になります。週ごとに変えてよいことにすれば販促の計画になり、売れ行きを見ながら日ごと時間ごとに変えてよいことにすればダイナミックプライシングの問題になります。「いくらに」の軸も、1円単位で連続的に選べることにするか、10円刻みの候補から選ぶかで、使える解き方が変わります。

決定変数のほかに、もう1つ書いておくべきものがあります。決定変数を決めたときに、数量がどう変わるかを表す需要のモデルです。目的が粗利なら、粗利は「(売価から原価を引いた額)×数量」の合計なので、価格を決めれば数量が決まる関係を何らかの式で持っていないと、目的の値が計算できません。この関係を販売の記録から推定するのが第3章で、推定した関係を使って価格を選ぶのが第4章と第5章です。価格の問題は、需要のモデルという「予測の部品」と、価格を選ぶ「最適化の部品」の2つを組み合わせた問題になっていて、どちらか一方だけでは答えが出ません。

この3つの部品と需要のモデルを書き出す作業は、手間に見えて、実務では最も効果の大きい作業だと考えています。たとえば「粗利を最大にしたい」と言いながら、実際の評価では売上の前年比を見ている、というように、目的が書き出されていないと、モデルの答えと現場の評価がかみ合いません。「PB は NB より安くする」という規則が誰の頭の中にも当たり前にあっても、モデルに書かなければモデルはその規則を知りません。書き出しておけば、あとから「この制約を外すと粗利がいくら増えるか」を計算できるようになり、規則そのものの見直しにも使えます。制約1つあたりの費用の計算は第5章で扱います。

価格の問題を7つの型に分ける

決定変数の軸の取り方と、容量や在庫の制約の有無によって、価格の問題はいくつかの型に分かれます。この記事では、実務でよく出会う問題を次の7つの型に分けました。分け方はこの記事での整理で、どの型にも当てはまらない問題や、2つの型にまたがる問題もあります。

問題の型決めること主な目的特徴的な制約・前提この記事で扱う章
通常売価の設定(1品目)1つの品目の通常売価を、次の改定までの期間について1つ粗利改定幅の上限、端数の規則、粗利率の下限第4章
品目横断の価格設定カテゴリの中の複数品目の通常売価の組カテゴリ全体の粗利価格の並び(PB と NB の差、容量あたりの単価)、品目どうしの代替第5章
販促・値引きの設計どの品目を、どの週に、何%引きで売るか販促の正味の粗利(反動や他品目からの移動を引いたもの)同時に販促できる品目数、値引きの原資、同じ品目の連続禁止第6章
値下げ・在庫処分売り切る期限までに、いつ、どれだけ値下げするか期末までの粗利と在庫の消化在庫は追加できない、値下げは原則として一方向、期末の残りの処分価値第7章
レベニューマネジメント固定の容量(客室・座席)を、どの料金の予約にいくつ割り当てるか容量から得られる収入容量が固定で、売れ残った容量の価値はゼロ、予約は時間をかけて到着する第8章
ダイナミックプライシング残り時間と残り在庫に応じて、価格をどう変えていくか販売期間全体の収入販売期間と在庫が決まっている、価格の改定回数や上下幅の上限第9章
個別見積案件ごとに提示する価格受注した案件の粗利の合計提示した価格で受注するかどうかは相手が決める、案件ごとに条件が違う本記事では詳しく扱わない

表の上から4行は、食品スーパーやドラッグストア、EC のように、多くの品目を継続的に売る事業でよく出会う型です。通常売価の設定と品目横断の価格設定は、年に数回から月に1回程度の頻度で通常売価を見直す問題で、決定変数の「いつの」の軸はほぼ1点です。販促の設計になると、週ごとの軸が加わります。値下げ・在庫処分は、季節品や流行品のように販売期間の終わりがはっきり決まっている商品で起きる問題で、在庫を追加できないことが前提になります。

下から3行のうち、レベニューマネジメントとダイナミックプライシングは、ホテルの客室、航空機や興行の座席のように、容量が固定で、ある日のある便の座席は翌日に持ち越せない事業で中心になる型です。レベニューマネジメントは、価格の表(料金のクラス)はあらかじめ決まっていて、それぞれの料金にいくつまで売るかという割当を決める問題として表されることが多く、ダイナミックプライシングは、価格そのものを残り時間と残り在庫に応じて動かす問題として表されます。両者の違いと関係は第8章と第9章で扱います。

最後の個別見積は、法人向けの取引のように、案件ごとに価格を提示し、相手がそれを受けるかどうかを決める型です。高く出せば受注したときの粗利は大きくなりますが、受注できる見込みは下がるので、「受注できる見込み×受注したときの粗利」を案件ごとに比べる構造になります。この型は、受注できる見込みを過去の案件から推定する部分に多くの工夫が要り、この記事の共通データとは性質が違うので、詳しくは扱いません。ただし、目的と制約を書き出し、需要(この場合は受注の見込み)のモデルと価格の選択を組み合わせる、という問題の骨格は他の型と同じです。

どの型でも、第3章で扱う需要の推定と、第10章で扱う価格の実験、第11章で扱う競合の価格、第12章で扱う法令と顧客の受け止めは共通の土台になります。表の型を選ぶことは、言い換えると、決定変数の軸と制約を選ぶことです。自社の価格の問題がどの型に近いかを最初に決めておくと、使うべき手法と、集めるべきデータの範囲が絞れます。

価格の問題を記述する3つの部品と需要のモデルの関係を表す概念図の図

目的を1つに決める:粗利・売上・数量・在庫の消化

価格の問題の目的として、実務でよく挙がるのは粗利・売上・販売数量・在庫の消化の4つです。この4つは、価格を動かしたときに同じ方向に動くとは限りません。値下げをすれば、多くの場合、数量は増えます。売上は「価格×数量」なので、数量の増え方が価格の下がり方を上回れば増え、下回れば減ります。粗利は「(価格から原価を引いた額)×数量」なので、1個あたりの粗利が価格の下げ幅と同じ額だけ減る分、売上よりも値下げに厳しくなります。原価が売価の6割の品目を10%値下げすると、1個あたりの粗利は売価の4割から3割に、つまり4分の1減ります。粗利を保つには数量が3分の1以上増える必要がある、という計算になります。

この記事では、特に断らない限り、目的を粗利に置きます。粗利の定義は、記事全体で次のとおりに固定しています。

語この記事での定義
粗利(売価から原価を引いた額)×数量を品目について合計したもの。円。特に断らない限り、年平均の季節・平常週(販促なし)の週あたり期待値
粗利の改善同じモデル(真のモデル、または推定モデル)で評価した「現在の売価のときの粗利」に対する増減率
価格弾力性価格が1%変わると数量が何%変わるか。自己弾力性は負の値。交差弾力性は、他の品目の価格が1%上がるとこの品目の数量が何%変わるか(代替品なら正)
現在の売価共通データの品目マスタの current 列(第104週時点の通常売価)
真のモデル共通データを作るときに使った需要の式。現実には誰にも見えないが、この記事では答え合わせに使う
推定モデル販売の記録から推定した需要の式。現実の企業が手にできるのはこちらだけ

目的を粗利に置くのは、価格の判断の良し悪しを最も直接に表すのが粗利だからです。売上を目的にすると、原価割れの価格でも数量さえ増えれば良い答えになってしまい、極端な場合は、売れば売るほど損をする価格が「最適」になります。数量を目的にすれば、価格を下げられるだけ下げることが答えになります。売上や数量は、粗利を目的にして選んだ価格がどんな姿になっているかを確かめるための、2番目の物差しとして見るのが良いと考えています。

ただし、粗利だけを見ればよいわけではありません。数量が大きく減る価格は、来店の頻度や買い回りを通じて、ほかのカテゴリの売上にも影響しうるからです。この記事の共通データの真のモデルには、ほかのカテゴリへの影響は入っていません。したがって、この記事のモデルが返す「粗利が最大の価格」は、飲料カテゴリの中で閉じた最適です。実務では、目的を粗利に置いたうえで、数量や客数の減り方に上限を付ける(制約として書く)か、粗利と数量の減少を重みで足し合わせた目的にするか、のどちらかで扱うことが多いと考えています。どちらを選ぶかは、数量の減少を経営としてどう値付けするかの判断で、モデルの側では決まりません。

在庫の消化を目的に加えるのは、在庫が固定されていて、売れ残りに処分の費用や価値の損失が生じる場合です。値下げ・在庫処分(第7章)やダイナミックプライシング(第9章)では、期末に残った在庫の扱いが目的の一部になります。この章で扱う飲料の通常売価のように、発注で在庫を補充できる商品では、在庫の消化を目的に入れる必要は小さく、発注量は弊社コラム『在庫と発注量を決める数理モデル、安全在庫の計算から多段階在庫の最適化まで』の範囲になります。

制約を書き出す:価格の並び・端数・改定幅・法令・取引条件

次に、制約を書き出します。価格の問題の制約は、大きく5つの種類に分けられます。次の表は、それぞれの制約が何を表し、この記事の基準の最適化(baseline.py)でどう扱っているかを並べたものです。

制約の種類中身の例なぜ置くかこの記事の基準での扱い
価格の並びPB は同じ容量の NB より安い。同じブランドなら大容量のほうが容量あたりで安い顧客が店の価格の体系を納得できるようにする。逆転していると、どちらかの品目の売れ方が不自然になる(b)PB は同じ容量の NB の最安値より20円以上安く、(c)同じブランドは大容量の1mlあたり単価が小容量より安く
端数末尾を8円にそろえる、10円刻みにする店の価格の見え方をそろえる。値札や棚札の運用を単純にする候補を現在の売価から10円刻み・上下4段(9通り)に限り、末尾8円のまま
改定幅1回の改定で上下何%まで、何円まで顧客の受け止めを急に変えない。推定モデルの外側(実績のない価格)に出すぎない(a)現在の売価から上下15%以内
法令表示の方法、比較対照価格の示し方、不当に安い価格での販売、取引先の販売価格への関与など法令に反する価格は、粗利がどれだけ大きくても選べないモデルの外で確認する(第12章)
取引条件仕入先との取り決め、販促の協賛の条件、契約で決まった価格契約で決まっているものは、モデルが動かせない共通データでは置いていない

価格の並びと端数、改定幅の3つは、モデルの中に式として書ける制約です。価格の並びは「PB の価格が NB の価格より20円以上低い」のように、価格どうしの大小の関係として書けます。端数は、価格の候補をはじめから「末尾8円の値だけ」に限っておけば、制約として書かなくても守られます。改定幅は、価格の候補の範囲を絞るか、「現在の売価との差の絶対値が15%以内」という条件で書けます。基準の最適化は、候補を10円刻みの9通りに絞ったうえで、(a)(b)(c)の3つの条件を満たす組だけを数えています。

改定幅の制約には、顧客の受け止めのほかに、もう1つの意味があります。需要のモデルは過去に実際に付けた価格の範囲で推定されるので、その範囲から遠く離れた価格での数量の予測は、外挿(データの外側への当てはめ)になり、当たる保証がありません。共通データの例で言えば、緑茶A 500ml(T1)の実売価は、過去104週で98円から138円の範囲にしかありません(第1週から第52週の通常売価128円、第53週以降の通常売価138円、販促週の値引き価格)。基準の推定モデルは T1 の売価に158円を選びましたが、158円で売った記録はないので、その価格での数量の予測は、推定モデルの式の形をそのまま延ばしたものにすぎません。改定幅の上限は、推定が大きく外れた価格へ一度に飛ぶことを防ぐ安全装置の役割も持ちます。ただし、上限の内側なら実績の範囲内、という意味ではありません。値上げの側では、現在の売価がすでに過去の最高売価なので、上下15%の内側でも現在より上はすべて実績の外側です。基準の結果で値上げを選んだ4品目、T1(158円)・T4(288円)・T5(248円)・C3(268円)は、いずれも過去104週の最高売価(138円・258円・238円・238円)を超えています。このうち候補の上端に当たったのは T1・T4・C3 の3品目で、上端に当たっていない T5 も実績の外側にあります。つまり、基準の+1.40%(真のモデルで評価)は、値上げした4品目すべてで、この外側への当てはめを含んでいます。

法令と取引条件は、モデルの中に式として書くよりも、モデルの外で確かめる性質のものです。法令は、価格そのものよりも、表示の仕方や比較対照価格の示し方、原価を下回る販売の条件、取引先の販売価格への関与といった形で関わってくるので、価格の数字だけを見るモデルでは判定できません。景品表示法・独占禁止法・消費税の総額表示の扱いは第12章で、消費者庁・公正取引委員会・国税庁のページで条件を確かめながら整理します。本記事は法律の助言ではありません。個別の判断は専門家に確認してください。

制約を書き出すときに大事なのは、「必ず守る制約」と「できれば守りたい目安」を分けることです。必ず守る制約を増やしすぎると、選べる価格の組がなくなるか、極端に少なくなり、モデルの答えが現在の売価からほとんど動かなくなります。逆に、目安にすぎないものを制約から外すと、モデルは平気でそれを破る答えを返します。基準の最適化の結果を見ると、12品目のうち6品目が「上下15%・10円刻み」で取れる端の価格(上端が T1・T4・C3、下端が T2・W1・W2)に当たっていました。ただし、端に当たっていることと、その制約が答えを縛っていることは別です。第5章で上下15%の制約だけを外して解き直すと、推定モデルの最適が動いたのは T4(288円から298円)だけで、端に当たっていた他の5品目は、制約を外しても同じ売価を選びました。端に当たっているかどうかは見かけで、制約が答えを縛っているかどうかは、外して解き直して初めて分かります。この読み方は第5章で詳しく扱います。

この記事の共通サンプルデータ(架空)

ここから、第3章以降で共通して使うサンプルデータを紹介します。このデータは、実在の企業・店舗の販売記録ではありません。乱数のシード(乱数の出発点となる値)を固定して、プログラムで生成した架空のサンプルです。品名・原価・売価・販売数量・需要の反応の強さは、すべてこの記事のために設定した値で、特定の企業の商品や価格を表すものではありません。データを作るプログラム(本文のコードでは price_data として読み込んでいます)は乱数の種を固定しているので、実行するたびに同じ数字が出ます。プログラムそのものは本コラムには載せていませんが、需要の式の形と品目ごとの設定値は、この章の表と説明に示しました。

設定は、架空の食品スーパーのチェーン(店舗数は定めず、チェーン合計の週次)の「飲料」カテゴリの12品目、104週(2年分)の販売履歴です。第1週は4月の第1週としています。12品目は、緑茶6品目(ブランドA・ブランドBと、自社企画のプライベートブランド(PB)の、それぞれ500mlと2L)、炭酸飲料4品目(ブランドC・ブランドDの500mlと1.5L)、水2品目(ブランドEと PB の2L)です。PB に対して、メーカーのブランドで全国に流通する商品を NB(ナショナルブランド)と呼んでいます。品目マスタは次のとおりです。

品目品名(架空)ブランド原価(円)現在の売価(円)現在の粗利率1Lあたりの単価(円)真の自己弾力性
T1緑茶A 500mlNB(A)7213847.8%276.0-2.4
T2緑茶B 500mlNB(B)6811842.4%236.0-3.4
T3緑茶PB 500mlPB488845.5%176.0-3.1
T4緑茶A 2LNB(A)15025841.9%129.0-2.9
T5緑茶B 2LNB(B)14223840.3%119.0-2.9
T6緑茶PB 2LPB10217842.7%89.0-3.2
C1炭酸C 500mlNB(C)8214844.6%296.0-2.8
C2炭酸D 500mlNB(D)7612840.6%256.0-3.3
C3炭酸C 1.5LNB(C)14023841.2%158.7-2.3
C4炭酸D 1.5LNB(D)13421838.5%145.3-3.0
W1水E 2LNB(E)6210842.6%54.0-2.9
W2水PB 2LPB467841.0%39.0-3.6

表の「現在の売価」の列は第104週時点の通常売価で、この記事で「現在の売価」と書くときは、すべてこの列を指します。売価はすべて末尾8円にそろえてあります。「現在の粗利率」の列は(現在の売価から原価を引いた額)÷現在の売価で、38.5%(C4)から47.8%(T1)まで散らばっています。「1Lあたりの単価」の列を見ると、同じブランドでは大容量のほうが容量あたりで安く、同じ容量では PB が NB より安い並びになっています。この現在の売価が、前の節の制約(a)(b)(c)をすべて満たしていることは、基準のプログラムの判定関数 feasible で確かめました(緑茶・炭酸・水のいずれも満たす)。

最後の「真の自己弾力性」の列は、データを作るときに設定した値です。価格が1%上がると数量が何%減るかを表していて、T1 の-2.4は、T1 の価格を1%上げると、T1 の数量が約2.4%減ることを意味します。数字の絶対値が大きいほど、価格に敏感な品目です。12品目の中では W2(水PB 2L)の-3.6が最も敏感で、C3(炭酸C 1.5L)の-2.3が最も鈍感です。この列は、現実の企業には見えない値です。現実には、販売の記録から推定するしかありません。この記事では、データを作った側としてこの値を知っているので、推定がどれだけ当たっているかを答え合わせできます。

共通データの販売数量は、次の式で作っています。

\( \log(\text{数量}) = \log(\text{基準の数量}) + e \times \log(\text{価格} / \text{基準の価格}) + (\text{同じカテゴリの他品目の価格の効果}) + (\text{季節}) + (\text{販促の上乗せ}) + (\text{販促翌週の落ち込み}) + (\text{誤差}) \)

言葉で言い換えると、「数量の対数は、基準の数量の対数に、自分の価格の変化(の対数)に自己弾力性 \( e \) を掛けたもの、同じカテゴリの他の品目の価格の変化の効果、季節の山と谷、販促週のチラシや陳列による上乗せ、販促の翌週の買いだめの反動、毎週の偶然の揺れを足したもの」です。対数で書いているのは、価格の変化率と数量の変化率の関係として表すためで、その意味は第3章で説明します。設定した値は次の表のとおりです。

要素設定(架空)主に扱う章
自己弾力性品目ごとに-2.3から-3.6(品目マスタの表)第3章・第4章
交差弾力性(同じカテゴリの中だけ)同じ容量の他ブランド0.25、同じブランドの他容量0.15、それ以外の同カテゴリ0.05。カテゴリをまたぐ影響はなし第5章
季節対数で振幅0.25。第18週前後(7月末から8月)が山第3章・第6章
販促週の上乗せ対数で+0.25(価格の効果とは別の、チラシ・陳列の効果)第3章・第6章
販促翌週の落ち込み対数で-0.10(買いだめの反動)第6章
誤差対数で標準偏差0.08の正規分布第3章

この式を、この記事では真のモデルと呼びます。データを作った側だけが知っている本当の需要の式で、現実の企業にはこれが見えません。現実の企業が手にできるのは、販売の記録から最小二乗法などで推定した式だけで、この記事ではそれを推定モデルと呼んで区別します。基準の結果では、推定モデルの自己弾力性は真の値に近く出ていますが(たとえば T1 は真の値-2.4に対して推定-2.308、C2 は真の値-3.3に対して推定-2.943)、ぴったりではありません。

この書き分けが大事なのは、「最適」という言葉が、どちらのモデルの上での最適かで意味が変わるからです。推定モデルで選んだ価格は、推定モデルの上では最適ですが、真のモデルで評価すると、推定の誤差の分だけ見込みより悪くなります。基準の結果では、推定モデルが見込んだ粗利の改善は+1.96%でしたが、同じ価格を真のモデルで評価すると+1.40%でした。真のモデルで最適な価格(データを作った側だけが知る上限)なら+1.83%です。この記事では、「最適」と書くときは必ずどちらのモデルでの最適かを書き、粗利の改善は同じモデルどうしで比べます。現実には真のモデルは分からないので、真のモデルでの評価は「この記事の中だけでできる答え合わせ」です。

この章の後半で素朴な規則を評価するときは、真のモデルを使います。規則の良し悪しを、推定の誤差と混ぜずに比べるためです。評価の条件は、記事全体の粗利の定義どおり、年平均の季節・平常週(販促なし)の週あたり期待値です。真のモデルの式で季節を0、販促と翌週の落ち込みを0、誤差を0にして計算した数量で、粗利を出しています。

販売履歴を眺める

販売履歴は、104週×12品目=1,248行の表です。列は、週(week)、品目(sku)、通常売価(regular_price)、実売価(price)、販促週かどうか(promo)、販促の翌週かどうか(post_promo)、販売数量(qty)、原価(cost)の8つです。共通データを読み込んで中身を確かめるコードと、その出力は次のとおりです。

import sys, io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8")
from price_data import *

df = history()                      # 104週×12品目の販売履歴(架空)
print(df.shape)
print(df[df.sku == "T1"].head(3).to_string(index=False))

# 品目ごとの販促週数と平均数量
g = df.groupby("sku")
print(g.agg(販促週数=("promo", "sum"), 平均数量=("qty", "mean")).round(1).T.to_string())

# 現在の売価・真のモデル(年平均の季節・平常週)の週あたり期待値
p = SKUS.current.values
q = true_expected_qty(p)
print("数量 %.1f / 粗利 %.0f円" % (q.sum(), weekly_profit(p, q)))

# 出力:
# (1248, 8)
#  week sku  regular_price  price  promo  post_promo  qty  cost
#     1  T1          128.0  128.0      0           0 1690    72
#     2  T1          128.0  128.0      0           0 2144    72
#     3  T1          128.0  128.0      0           0 2381    72
# sku       C1      C2     C3     C4      T1      T2      T3      T4     T5     T6      W1      W2
# 販促週数     4.0     7.0   15.0   10.0     9.0     8.0     9.0    15.0    6.0   11.0     6.0     8.0
# 平均数量  1569.6  1485.2  675.7  588.5  2470.9  2164.1  1704.5  1057.0  788.6  977.2  1066.5  1642.3
# 数量 13585.0 / 粗利 837136円

出力の最後の行が、現在の売価のときの真のモデルでの週あたり期待値で、数量13,585.0本、粗利837,136円です。これが、この記事全体で「現在の売価の粗利」として比べる相手になります。品目別に見ると、粗利が最も大きいのは T1(緑茶A 500ml)の133,022円で、カテゴリ別では緑茶が503,586円(60.2%)、炭酸が252,752円(30.2%)、水が80,798円(9.7%)でした。粗利の6割を緑茶の6品目が稼いでいる構成です。2年間の販売履歴の合計は、数量1,683,775本、売上226,454,090円、粗利87,738,652円です(販促週の値引き価格での販売を含む実績の合計で、上の週あたり期待値とは条件が違います)。

販促は、1,248行のうち108行(8.7%)で組まれています。品目ごとの販促週数は、上の出力の「販促週数」の行のとおり4週(C1)から15週(C3・T4)までばらついています。値引き率は10%から30%の5段階から選んだうえで末尾8円に丸めているので、実際の実売価の通常売価に対する値引き率は7.8%から38.5%に散らばり、平均は21.1%でした。販促は夏に多く組まれていて、季節の山の時期の販促の割合は12.7%、それ以外の時期は5.9%です。チェーン全体の週の合計数量は、最も少ない第97週の10,330本から、最も多い第78週の29,044本まで、3倍近い開きがあります。

1品目の動きとして、T1(緑茶A 500ml)の104週を、値上げの前後と週の種類に分けて集計したのが次の表です。平常週は、販促週でも販促の翌週でもない週を指します。季節の山の時期は、上で販促の割合を数えたときと同じ区切りで、第8週から第28週と、第60週から第80週を指します。

期間と週の種類週数実売価(円)平均の販売数量(本/週)
第1週から第52週の平常週461282,396.2
うち季節の山の時期191282,849.1
うちそれ以外の時期271282,077.5
第1週から第52週の販促週(第9・43・51週)398・1085,012.0
第1週から第52週の販促の翌週31281,810.3
第53週から第104週の平常週401381,947.2
うち季節の山の時期131382,377.0
うちそれ以外の時期271381,740.2
第53週から第104週の販促週(第61・63・67・78・85・96週)698・1086,056.5
第53週から第104週の販促の翌週61382,008.7

表の「実売価(円)」の列のとおり、T1 の通常売価は第1週から第52週まで128円、第53週から138円で、販促週(第9・43・51・61・63・67・78・85・96週の9回)には98円(6回)か108円(第43・67・96週の3回)まで下がっています。販促週には数量が大きく跳ねていて、最大は第61週の7,868本でした。2年を通すと、販促週の平均は5,708.3本で、販促も翌週の反動もない平常週の平均2,187.3本の2.6倍です(2年を通した平均は、表の2つの期間を週数で重みづけした値です)。販促の翌週の平均は、2年を通すと1,942.6本で平常週より低めですが、第53週から第104週だけを見ると2,008.7本で、同じ期間の平常週の1,947.2本を上回っています。この期間の販促6回のうち4回(第61・63・67・78週)は季節の山の時期にあり、その翌週も山の時期に入っています。同じ時期どうしで比べると、山の時期は販促の翌週2,180.5本に対して平常週2,377.0本、それ以外の時期は販促の翌週1,665.0本に対して平常週1,740.2本で、どちらも販促の翌週のほうが少なくなっています。販促の翌週は山の時期に入る週の割合が高い(6週のうち4週。平常週は40週のうち13週)ために、期間全体の平均では平常週を上回って見えています。平常週の平均数量は、値上げ前の第1週から第52週が2,396.2本、値上げ後の第53週から第104週が1,947.2本でした。平常週を季節の山の時期とそれ以外に分けると、どちらの期間も山の時期のほうが多く売れています。

この表から「値上げで数量が約19%減った」「販促で数量が2.6倍になった」と読みたくなりますが、この読み方には注意が要ります。販促週の数量の跳ね方には、値引きによる価格の効果、チラシや陳列による上乗せ、夏の需要の山が重なっています。販促が夏に多いことはすでに見たとおりで、夏の販促週の数量の多さを価格の効果だと思い込むと、価格への敏感さを大きく見積もりすぎます。値上げ前後の平常週の比較にも、2年目のほうが販促の回数が多く、販促の翌週の反動が平常週の外に出ている、といった違いが混ざっています。これらを分けて価格の効果だけを取り出すのが第3章の回帰分析で、季節を入れずに推定すると弾力性を取り違えることを、第3章でこのデータを使って確かめます。

素朴な値付けの規則を作る

需要のモデルを使わずに価格を決める方法として、現場でよく使われる形の規則を、この章で9通り作りました。いずれも、この章で比較のために作った架空の規則で、特定の企業のやり方を写したものではありません。

規則決め方考え方
粗利率を35%・40%・45%・50%にそろえる(4通り)売価=原価÷(1から目標の粗利率を引いた値)を計算し、最も近い末尾8円に丸める全品目で売価に占める粗利の割合をそろえる
原価+一律68円原価に同じ額を足して末尾8円に丸める。68円は現在の売価と原価の差の12品目平均(67.83円)1個あたりの粗利の額をそろえる
一律に10円値上げ全品目の現在の売価に10円を足す原価の上昇を全品目に同じ額で転嫁する
一律に10円値下げ(競合に合わせる)全品目の現在の売価から10円を引く架空の競合店が全品目で10円安いと仮定し、それに合わせる
同容量の NB を最高値にそろえる同じカテゴリ・同じ容量の NB を、その中の最高値にそろえる(PB はそのまま)価格帯を1つにまとめて、売場の見え方を単純にする
末尾8円を末尾0円に全品目に2円を足す端数を切りのよい数にそろえる

規則ごとの売価は次のとおりになりました。比べやすいように、現在の売価と、記事全体の基準の結果(推定モデルの最適)も並べます。

規則T1T2T3T4T5T6C1C2C3C4W1W2
現在の売価1381188825823817814812823821810878
粗利率35%108108782282181581281182182089868
粗利率40%1181187824823816813812823822810878
粗利率45%1281288826825818814813825824810888
粗利率50%1481389829828820816814827826812888
原価+一律68円138138118218208168148148208198128118
一律に10円値上げ1481289826824818815813824822811888
一律に10円値下げ128108782482281681381182282089868
同容量の NB を最高値に1381388825825817814814823823810878
末尾0円に1401209026024018015013024022011080
推定モデルの最適(基準)158108882882481781381282682189868

表の値はすべて円です。粗利率をそろえる規則は、原価の高い品目ほど売価の上げ幅が大きくなる形をしていて、粗利率40%では、現在の粗利率が高い T1(47.8%)は138円から118円に下がり、現在の粗利率が低い C4(38.5%)は218円から228円に上がります。原価+一律68円の規則では、原価の安い品目の売価が大きく上がり、W2(水PB 2L)は78円から118円、T3(緑茶PB 500ml)は88円から118円になります。この規則では、PB の T3 と NB の T1 の差が20円になり、PB をはっきり安く見せるという並びの意図が薄れます。最後の行の基準の売価は、品目によって上げたり(T1・T4・T5・C3)下げたり(T2・C1・W1・W2)据え置いたりしていて、9通りの規則のどれとも形が違います。

真のモデルで答え合わせをする

9通りの規則の売価を、真のモデルで評価しました。評価に使ったコードの要所は次のとおりです。規則のうち4通りだけを載せていますが、単独で実行すると、記載の出力が得られます。

import sys, io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8")
import numpy as np
from price_data import *

cost = SKUS.cost.values.astype(float)
cur = SKUS.current.values.astype(float)

def round8(x):
    # 最も近い「末尾8円」に丸める
    return np.round((np.asarray(x) + 2) / 10.0) * 10 - 2

def gross_profit(p):
    # 真のモデル(年平均の季節・平常週)で週あたりの粗利を出す
    return weekly_profit(p, true_expected_qty(p))

rules = {
    "現在の売価のまま": cur,
    "粗利率を40%にそろえる": round8(cost / (1 - 0.40)),
    "粗利率を45%にそろえる": round8(cost / (1 - 0.45)),
    "一律に10円値上げ": cur + 10,
    "一律に10円値下げ": cur - 10,
}
g0 = gross_profit(cur)
for name, p in rules.items():
    g = gross_profit(p)
    print("%s 粗利 %.0f円(%+.2f%%)" % (name, g, 100 * (g / g0 - 1)))

# 出力:
# 現在の売価のまま 粗利 837136円(+0.00%)
# 粗利率を40%にそろえる 粗利 826549円(-1.26%)
# 粗利率を45%にそろえる 粗利 829310円(-0.93%)
# 一律に10円値上げ 粗利 827782円(-1.12%)
# 一律に10円値下げ 粗利 833893円(-0.39%)

9通りすべてと基準の2つの売価をまとめたのが次の表です。数量・売上・粗利は、真のモデルで評価した年平均の季節・平常週の週あたり期待値で、増減はいずれも現在の売価(同じく真のモデル)に対する増減率です。「基準の制約」の列は、前の節の制約(a)上下15%以内(b)PB の価格差(c)容量あたりの単価の並びを、すべて満たすかどうかを示します。

規則数量(本)売上(円)粗利(円)粗利の改善売上の増減数量の増減基準の制約
現在の売価のまま13,5851,952,870837,1360.00%0.00%0.00%満たす
粗利率を35%にそろえる18,4942,296,332809,749-3.27%+17.59%+36.13%満たさない(上下15%を超える品目が1)
粗利率を40%にそろえる15,2212,052,055826,549-1.26%+5.08%+12.04%満たす
粗利率を45%にそろえる12,4491,843,754829,310-0.93%-5.59%-8.37%満たす
粗利率を50%にそろえる9,8881,621,839817,563-2.34%-16.95%-27.21%満たさない(同8)
原価+一律68円11,6251,896,774783,679-6.39%-2.87%-14.43%満たさない(同6)
一律に10円値上げ11,2641,780,913827,782-1.12%-8.81%-17.08%満たす
一律に10円値下げ(競合に合わせる)16,8852,170,755833,893-0.39%+11.16%+24.29%満たす
同容量の NB を最高値にそろえる12,3761,844,142828,100-1.08%-5.57%-8.90%満たさない(同2)
末尾8円を末尾0円に13,0581,915,365835,988-0.14%-1.92%-3.88%満たす
推定モデルの最適(基準)14,7821,998,939848,895+1.40%+2.36%+8.81%満たす
真の最適(答え合わせの上限)15,1652,023,509852,462+1.83%+3.62%+11.63%満たす

表の「粗利の改善」の列を見ると、9通りの規則はすべてマイナスでした。最も悪いのは原価+一律68円の-6.39%で、最も損が小さいのは末尾0円にそろえる-0.14%、次が一律に10円値下げの-0.39%です。基準の推定モデルの最適は+1.40%、真の最適は+1.83%です。基準の推定モデルの最適との差は、粗利の改善で見て、最も近い末尾0円の規則でも1.5ポイント、最も遠い原価+一律68円の規則では7.8ポイントあります。粗利率をそろえる規則については、目標の粗利率を25%から60%まで1%刻みで動かしても、最も良い44%で-0.08%(粗利836,439円)にとどまり、現在の売価を上回る目標の粗利率はありませんでした。

表の「売上の増減」と「数量の増減」の列は、粗利とは違う動きをしています。一律に10円値下げすると、数量は+24.29%、売上は+11.16%と大きく増えますが、粗利は-0.39%です。粗利率を35%にそろえる規則も、数量+36.13%・売上+17.59%に対して粗利は-3.27%でした。目的を売上や数量に置いて規則を評価していたら、この2つは「良い規則」に見えたはずです。目的の節で、目的を1つに決めて書き出すことを強調したのはこのためです。反対に、一律に10円値上げすると、数量は-17.08%、売上は-8.81%と大きく減り、粗利も-1.12%減ります。原価の上昇を受けた値上げを全品目に一律で行うと、粗利を守るつもりが、この例では数量・売上・粗利のすべてを減らしています(ここでは原価は変えていないので、原価が上がった場合の転嫁の比率は第4章で扱います)。

基準の推定モデルの最適は、数量+8.81%・売上+2.36%・粗利+1.40%で、3つとも増えています。価格を上げた品目では数量が減り、下げた品目では数量が増えて、合計では数量も増えています。粗利を目的にして品目ごとに価格を選ぶと、必ずしも数量を犠牲にするわけではない、ということです。

一律の規則が外れる理由

9通りの規則がすべて現在の売価を下回った理由は、規則が品目ごとの需要の反応の違いを見ていないことにあります。一律に10円値上げした場合と値下げした場合について、品目別の粗利が真のモデルでどう変わったかを並べると、それがはっきりします。品目別の粗利は、全品目を同時に動かしたときの値で、同じカテゴリの他品目の価格が動いた影響も含んでいます。

品目真の自己弾力性一律に10円値上げしたときの粗利の増減(全品目を同時に動かした値)一律に10円値下げしたときの粗利の増減(全品目を同時に動かした値)基準の推定モデルの最適での売価の変更
T1 緑茶A 500ml-2.4+3.1%-4.6%+20円
T2 緑茶B 500ml-3.4-3.8%+1.8%-10円
T3 緑茶PB 500ml-3.1-5.9%+3.3%0円
T4 緑茶A 2L-2.9+2.2%-2.9%+30円
T5 緑茶B 2L-2.9+2.4%-3.2%+10円
T6 緑茶PB 2L-3.2-0.8%-0.3%0円
C1 炭酸C 500ml-2.8-1.5%+0.2%-10円
C2 炭酸D 500ml-3.3-4.6%+2.9%0円
C3 炭酸C 1.5L-2.3+2.8%-3.5%+30円
C4 炭酸D 1.5L-3.0+0.3%-1.2%0円
W1 水E 2L-2.9-2.9%+0.2%-10円
W2 水PB 2L-3.6-13.1%+10.0%-10円

表の「一律に10円値上げしたときの粗利の増減(全品目を同時に動かした値)」の列で、粗利が増えたのは T1・T4・T5・C3・C4 の5品目で、減ったのは残りの7品目です。「一律に10円値下げしたときの粗利の増減(全品目を同時に動かした値)」の列では、ほぼ逆の品目が増えています。同じ10円の値上げでも、T1 は粗利が+3.1%増え、W2 は-13.1%減ります。全品目に同じ方向の変更を当てる規則は、得をする品目と損をする品目を必ず両方抱え込み、合計では両者が打ち消し合って、この例ではマイナスに傾きました。

最後の列と見比べると、基準の推定モデルの最適が値上げした4品目(T1・T4・T5・C3)は、一律の値上げで粗利が増えた品目に含まれていて、値下げした4品目(T2・C1・W1・W2)は、一律の値下げで粗利が増えた品目に含まれています。推定モデルの最適は、販売の記録から推定した反応の強さをもとに、値上げで得をする品目だけを上げ、値下げで得をする品目だけを下げた結果になっているということです。2列目の真の自己弾力性を見ると、値上げで得をした品目は-2.3から-3.0と比較的鈍感な品目、値下げで得をした6品目のうち3品目(T2・C2・W2)は-3.3から-3.6と敏感な品目で、価格への敏感さが判断を分けていることが読み取れます。ただし、敏感さだけで決まるわけではなく、現在の売価と原価の関係(今の粗利率)や、同じカテゴリの他品目との代替の関係も効きます。T6(-3.2)は、全品目を一律に10円動かしたこの比較では、値上げでも値下げでも粗利が減りました。ただし、これは他の品目も同時に動かしたときの1点の比較で、T6 の現在の売価が最適に近いことまでは示していません。他品目を現在の売価に固定して T6 自身の粗利だけを最大にする計算(第4章)では T6 の最適は148.4円、基準と同じ制約の下でカテゴリ全体の粗利を真のモデルで最大にする計算では188円で、どの条件で見るかによって向きまで変わります。弾力性と最適な粗利率の関係は第4章、品目どうしの代替の効き方は第5章で扱います。

粗利率をそろえる規則が外れる理由も同じです。最適な粗利率は品目ごとに違うので、全品目に同じ粗利率を当てると、ある品目では高すぎ、別の品目では低すぎる価格になります。目標の粗利率を1%刻みで動かして最も良い44%を選んでも-0.08%にとどまったのは、どの1つの粗利率を選んでも、12品目すべてに合う値がないからです。粗利率の目標は、カテゴリ全体の成績を測る物差しとしては役に立ちますが、品目ごとの価格を決める規則としては、需要の反応の違いを消してしまいます。

もう1つ、素朴な規則には制約を破るものがありました。原価+一律68円の規則は6品目で現在の売価から上下15%を超え、粗利率を50%にそろえる規則は8品目で超えています。規則は「正しい計算をしている」ように見えても、改定幅の上限や価格の並びという、別の物差しで決めた条件とは無関係に価格を出すので、出した後で人が1つずつ直すことになります。最適化では、条件を制約として書いておけば、条件を満たす価格の中から選ぶので、この手直しが要りません。

なお、一律に10円値下げする規則に「競合に合わせる」と名前を付けましたが、共通データの真のモデルには競合店の価格が入っていません。したがって、この行の評価は「全品目を10円値下げしたときの自店の需要の変化」だけを見たもので、競合店に合わせなかった場合に客を奪われる効果は入っていません。競合の価格への反応を入れた比較は、第11章で架空の2社のモデルを作って行います。

経営の判断に翻訳する

この章の結果を、経営の判断に使える形に整理します。1つ目は、素朴な規則の損失の大きさです。年換算(52週)にすると、真のモデルで評価した粗利の差は、現在の売価に対して、原価+一律68円が-2,779,760円、粗利率35%が-1,424,112円、粗利率50%が-1,017,774円、粗利率40%が-550,531円、一律に10円値上げが-486,414円、一律に10円値下げが-168,649円でした。基準の推定モデルの最適は+611,476円、真の最適は+796,982円です。年換算の値は、週あたりの粗利の差を丸める前の値に52を掛けたもので、表に載せた週の粗利どうしの差に52を掛けると数十円ずれることがあります(真の最適なら週15,326円×52=796,952円で、30円の差)。粗利率40%の規則と基準の差は、年に116万円余りになります。共通データは12品目の小さなカテゴリですが、品目数が数百から数千になる実際の売場では、同じ型の損失が品目の数だけ積み上がります。

2つ目は、売上と数量で価格の判断を評価する危うさです。一律に10円値下げすると、売上は+11.16%、数量は+24.29%と、報告の数字としてはきわめて良く見えますが、粗利は減っています。値下げの効果を売上の前年比や販売数量で報告していると、この損失は表に出てきません。価格の判断の報告は、粗利を主、売上と数量を従にする形にしておくのが良いと考えています。逆に、粗利を目的にした基準の最適は、数量も+8.81%増やしていました。粗利を目的にすることが、そのまま数量や客数を犠牲にすることを意味するわけではない、という点も、現場への説明では大事になります。

3つ目は、規則を作る人とモデルを作る人の役割分担です。この章の素朴な規則は、どれも1つの数字(目標の粗利率、上乗せ額、値上げ幅)で全品目を決める形をしていました。品目ごとに反応が違うという事実を規則に入れようとすると、規則は品目の数だけ細かくなり、結局は品目ごとの判断になります。それを人の経験で行うか、販売の記録から推定した需要のモデルで行うかが、この記事の主題です。どちらの場合も、目的・制約・決定変数を書き出しておけば、判断の根拠を後から確かめられます。素朴な規則が悪いのではなく、規則が何を目的にし、何を見ていないかが書かれていないことが問題だと考えています。

4つ目は、基準の結果そのものの読み方です。基準の推定モデルの最適は、推定モデルの上では+1.96%を見込んでいましたが、真のモデルで評価すると+1.40%でした。現実の企業には真のモデルが見えないので、実務で見込みとして示せるのは推定モデルの数字だけです。見込みと実績の差は、推定の誤差から必ず生まれます。価格を改定するときは、見込みの数字を約束の数字として扱わず、改定後に実績を測って推定をやり直す流れを最初から組み込んでおく必要があります。推定の誤差が価格の判断をどれだけ動かすかは第3章と第4章、効果の測り方は第10章と第13章で扱います。

この章の要点は3つです。第一に、価格の問題は、決定変数(どの品目を・いつ・いくらに)、目的、制約の3つの部品と、価格から数量を予測する需要のモデルに分けて書き出せて、決定変数の軸と制約の取り方で7つの型に分けられます。第二に、この記事の共通データは、乱数で生成した架空の食品スーパーの飲料12品目・104週の販売履歴で、データを作った側だけが知る真のモデルと、記録から推定した推定モデルを書き分けて使います。第三に、全品目に同じ物差しを当てる素朴な規則は、真のモデルで評価すると9通りすべてが現在の売価の粗利を下回り、品目ごとの反応の違いを推定して価格を選んだ基準の結果(+1.40%)との差は、品目ごとの需要の反応を見ているかどうかから生まれていました。ただし、この差が出るのは、販促・季節・他品目の価格を入れた十分な式で推定した場合に限られます。式が不十分なら推定しても素朴な規則と同じ範囲の成績にとどまること、基準で値上げした4品目はすべて過去に付けたことのない売価であることも、あわせて押さえておく必要があります。次の第3章では、その反応の強さ、つまり価格弾力性を、販売履歴から推定する方法を扱います。

この章を深めたい方への参考書籍

『限界利益分析による価格決定戦略』(窪田千貫、同友館):副題に「コスト吸収、差別化で優位に立つ、値上げ・値下げ戦術」とあるとおり、書名のとおり限界利益の分析を軸に価格の上げ下げを扱う本です。この章では、原価に一律の粗利率や上乗せ額を乗せる規則が、真のモデルで評価すると粗利を下げることを見ました。原価から価格を組み立てる側の考え方を、限界利益という会計の物差しで整理し直すのに役立ちます。

『価格戦略論』(ヘルマン・サイモン、ロバート・J.ドーラン著、吉川尚宏監訳、エコノミクス・コンサルティング研究会訳、ダイヤモンド社):原題は Power Pricing で、価格の決め方を戦略の問題として扱った500ページ近い翻訳書です。この章では、価格の問題を数理モデルの部品に分けて書き出しましたが、その手前にある「どの顧客に、どんな価格の体系で売るか」という経営の問いを広く見渡すための1冊として挙げます。

第3章 需要曲線と価格弾力性を推定する

第2章では、価格の問題を「どの品目を・いつ・いくらに」決めるかという形で書き下し、そこで用意したサンプルデータ(架空の食品スーパーの飲料12品目・104週)と、記事全体の基準の結果を紹介しました。基準の結果では、通常売価を見直すと粗利が増える見込みが示されましたが、その見込みはすべて「価格を変えると数量がどれだけ変わるか」という需要の推定に乗っています。この章では、その土台にあたる需要曲線と価格弾力性を、販売履歴からどう推定するかを扱います。回帰の式の組み方で推定がどれだけ変わるか、推定にどれだけの不確かさがあるか、価格が需要を見て決まっているときに何が起きるか、データが無い新商品ではどうするかを、実行した結果で順に確かめ、最後に推定を誤ると価格の判断と粗利がどう狂うかを示します。

需要曲線と価格弾力性とは何か

需要曲線は、ある商品の価格と、その価格で売れる数量の関係を表す曲線です。ほかの条件(季節・販促・競合の価格など)を一定にしたとき、価格を上げれば数量は減り、下げれば増えるのが普通なので、横に価格、縦に数量をとると右下がりの線になります。価格を決める作業は、この曲線のどこに立つかを選ぶことです。曲線が分かれば、それぞれの価格での数量が分かり、数量に「売価から原価を引いた額」を掛ければ粗利が計算できます。逆に言うと、曲線が分からないまま価格を変えるのは、結果の数量を予想せずに賭けをするのに近いことになります。

曲線の傾きを、単位に左右されない形で表したものが価格弾力性です。この記事では「価格が1%変わると数量が何%変わるか」と定義しています。自分の価格に対する弾力性(自己弾力性)は普通は負の値で、たとえば -2.4 なら、価格を1%上げると数量が約2.4%減ることを表します。円や本数ではなく変化率どうしの比なので、100円の飲料と2,000円の家電を同じ尺度で比べられます。他の品目の価格が動いたときの弾力性(交差弾力性)もありますが、その詳しい扱いは第5章に送り、この章では主に自己弾力性を見ます。

弾力性の大きさは、値上げで売上が増えるか減るかの分かれ目にもなります。価格を1%上げて数量が1%より大きく減るなら、つまり弾力性が -1 より小さい(絶対値が1より大きい)なら、売上(価格×数量)は減ります。ただし、価格を決めるときに見るべきは売上ではなく粗利です。原価がある以上、売上が少し減っても、数量が減ったぶん原価も減るので、粗利は増えることがあります。弾力性から粗利が最大になる価格を出す公式は第4章で扱います。この章で押さえておきたいのは、どの公式を使うにしても、入力は推定した弾力性であり、推定が狂えば答えも狂うという点です。

log-log 回帰では係数がそのまま弾力性になる

販売履歴から弾力性を推定する方法の1つが、数量と価格の両方を対数にとってから回帰する、いわゆる log-log 回帰です。第2章の基準の推定もこの形をしていて、1品目について式を書くと次のようになります。

\( \log q_t = a + \varepsilon \log (p_t / p_0) + b \cdot \text{販促}_t + c \cdot \text{販促翌週}_t + (\text{季節の項}) + (\text{同カテゴリの他品目の価格の項}) + e_t \)

言葉で言い換えると、「t 週目の販売数量の対数は、基準となる水準 a に、価格の基準からの変化率(対数)に係数 \( \varepsilon \) を掛けたもの、販促週かどうか、販促の翌週かどうか、季節、同じカテゴリの他の品目の価格を足し、最後に説明できない誤差 \( e_t \) を足したもの」です。価格の対数の係数 \( \varepsilon \) は、価格の対数が少し動いたときに数量の対数がどれだけ動くかを表します。対数の小さな変化は変化率にほぼ等しいので、この係数がそのまま「価格が1%動いたときの数量の%変化」、つまり弾力性になります。弾力性がどの価格でも一定の需要曲線が、対数をとると直線になり、数量の対数を価格の対数で回帰すれば傾きから弾力性が直接読めることは、たとえばニューヨーク大学スターン校の統計の講義資料(Notes on elasticity)でも説明されています(この資料は弾力性を正の値で表す流儀なので、符号の向きがこの記事と逆です)。回帰の結果から係数を読めば、それが弾力性の推定値です。

この形を使う理由は2つあります。1つは、係数の意味が単位によらず読みやすいことです。数量をそのまま、価格をそのまま回帰すると、係数は「価格が1円上がると何本減るか」になり、品目ごとに桁が違うので比べにくくなります。もう1つは、販促や季節の効果を「数量を何%押し上げるか」という掛け算の形で表せることです。対数の世界で足し算になっている項は、元の数量では掛け算になります。たとえば販促の係数が0.25なら、販促週の数量は、ほかの条件が同じ平常週の \( e^{0.25} \) 倍、約1.28倍になります。

ただし、この形は「弾力性が価格の水準によらず一定」という仮定を置いています。これを定弾力性の需要と呼びます。第2章の共通データは、真のモデル(データを作った側だけが知っている本当の需要の式)がこの形で作られているので、仮定は正しいことが分かっています。現実のデータでは、価格を大きく動かしたときに弾力性が変わることがあり、その場合は観測された価格の範囲の外へ推定を延ばすほど誤差が大きくなります。需要曲線の形の違いが最適な価格にどう効くかは、第4章で線形・定弾力性・ロジットの3つを比べて扱います。

共通データで回帰する:価格だけの式と基準の式

まず、緑茶A 500ml(品目ID は T1)について、2つの式で弾力性を推定しました。1つは数量の対数を価格の対数だけで回帰する式、もう1つは基準と同じ式(価格に加えて、同じカテゴリの他の5品目の価格・販促・販促翌週・季節を入れたもの)です。季節は、1年52週を1周期とする cos と sin の1組で表しています。夏に山がある波を、山の高さと時期の2つの数で表す方法です。推定の方法は、式の予測と実際の値の差の2乗の合計が最も小さくなるように係数を決める最小二乗法(OLS)です。次のコードは単独で実行でき、回帰には statsmodels(版0.14.6)の OLS を使っています。

import sys, io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8")
import numpy as np
import statsmodels.api as sm
from price_data import *

df = history()
wide = lambda col: df.pivot(index="week", columns="sku", values=col)[SKU_IDS]
lr = np.log(wide("price") / SKUS.price)          # 価格の基準からの変化率(log)
w = lr.index.values
s = "T1"
others = [o for o in SKU_IDS if o != s if SKUS.loc[o, "category"] == SKUS.loc[s, "category"]]
y = np.log(wide("qty")[s].values)

# 式1:価格だけ
X1 = sm.add_constant(lr[s].values)
r1 = sm.OLS(y, X1).fit()
# 式2:基準と同じ(他品目の価格・販促・販促翌週・季節の cos と sin を加える)
X2 = sm.add_constant(np.column_stack(
    [lr[s].values] + [lr[o].values for o in others] +
    [wide("promo")[s].values, wide("post_promo")[s].values,
     np.cos(2 * np.pi * w / 52), np.sin(2 * np.pi * w / 52)]))
r2 = sm.OLS(y, X2).fit()
for name, r in (("価格だけ", r1), ("基準と同じ式", r2)):
    lo, hi = r.conf_int(0.05)[1]
    print("%s:弾力性 %.3f(標準誤差 %.3f、95%%信頼区間 %.3f〜%.3f)" % (name, r.params[1], r.bse[1], lo, hi))
# 出力:
# 価格だけ:弾力性 -3.357(標準誤差 0.221、95%信頼区間 -3.795〜-2.919)
# 基準と同じ式:弾力性 -2.308(標準誤差 0.212、95%信頼区間 -2.728〜-1.887)

T1 の真の自己弾力性は -2.4 です。基準と同じ式の推定は -2.308 で、95%信頼区間(-2.728〜-1.887)に真の値が入っています。これに対して、価格だけの式の推定は -3.357 で、真の値より1近く大きく(絶対値で約4割大きく)出ました。しかも信頼区間は -3.795〜-2.919 で、真の値 -2.4 を含んでいません。標準誤差は、同じ仕組みで別のデータが取れたとしたら推定値がどれくらいばらつくかの目安で、95%信頼区間は、同じ方法でデータを取り直して区間を作ることを何度も繰り返すと、そのうち約95%の区間が真の値を含むように作られた幅です(後の「推定の不確かさ」の節で、データを200回作り直して確かめます)。ただし、それは式が正しく組めているときの話で、式に入れるべき変数が抜けていると、狭い区間がまるごと的を外すことがあります。標準誤差が小さいことは、推定が正しいことの保証にはなりません。

基準と同じ式で推定した T1 の係数のうち、主なものを表にまとめました。数字は、この章の計算を実行したときの出力の記録(以下、実行記録)からとっています。

係数推定標準誤差95%信頼区間真のモデルの値
自己弾力性(T1 の価格)-2.3080.212-2.728〜-1.887-2.4
販促の上乗せ(log)0.3170.0630.191〜0.4430.25
販促翌週の落ち込み(log)-0.0900.028-0.146〜-0.033-0.10
交差弾力性(T3 緑茶PB 500ml の価格)0.3420.1140.115〜0.5700.25
交差弾力性(T5 緑茶B 2L の価格)-0.1620.126-0.413〜0.0890.05
決定係数0.953(観測数104週、定数を含む係数の数11)

表の「推定」の列を見ると、販促の上乗せは0.317で、数量に直すと販促週は同じ条件の平常週の約1.37倍(\( e^{0.317} \) から1を引いて+37.3%)です。真のモデルの値0.25(約1.28倍)とは差がありますが、信頼区間の中に真の値が入っています。販促翌週の落ち込み(-0.090)も同様です。一方、交差弾力性は1つずつ見ると標準誤差が大きく、T5 の価格の係数は真の値0.05に対して -0.162 と、符号まで逆に出ています。同じカテゴリの他品目の価格は、それぞれの販促でしか大きく動かないので、1品目あたり104週では交差の効果を細かく測る材料が足りないということです。交差弾力性の扱いは第5章で詳しく見ます。決定係数0.953は、数量の対数の週ごとの変動の約95%をこの式で説明できているという意味ですが、決定係数が高いことも、弾力性の推定が正しいことの保証にはなりません。この点は次の節で確かめます。

緑茶A 500ml(T1)の104週の実売価と販売数量の散布図。横軸は実売価(円)、縦軸は週の販売数量。平常週は128円と138円の2か所に縦に並び、夏の週は濃い青、夏以外はグレー。販促週は98円と108円の三角で、数量が大きい。価格だけで推定した曲線(弾力性 -3.36、灰色の破線)は販促週の点に引っ張られて急な傾きになり、基準の式で推定した平常週の曲線(弾力性 -2.31、ネイビーの実線)は緩やかになっている

図は T1 の104週の実売価と数量を散布図にしたものです。平常週の点は通常売価の128円(1年目)と138円(2年目)の2か所に縦に並び、販促週の三角は98円と108円にあります。価格だけの式は、この散布図に1本の曲線を当てはめるので、98円の販促週の大きな数量を「価格が安いから売れた」とすべて価格のせいにします。ところが共通データの販促週には、価格の効果とは別に、チラシ・陳列による上乗せが入っています。基準の式は、この上乗せを販促の係数で別に受け止めるので、価格の効果だけを取り出した曲線は緩やかになります。図のネイビーの実線は、基準の式による平常週・季節の平均の需要曲線で、販促週の三角がこの線より上にあるのは、上乗せの分が線に含まれていないためです。

季節と販促を入れないと、弾力性を取り違える

回帰の式に何を入れるかで推定がどれだけ変わるかを、12品目すべてで確かめました。説明変数の組を次の5通りにして、それぞれ品目ごとに最小二乗法で推定しています。S1 は価格だけ、S2 は価格と季節、S3 は価格と販促・販促翌週、S4 は価格と販促・販促翌週と季節、S5 は S4 に同じカテゴリの他品目の価格を加えたもので、S5 が基準の推定と同じ式です(実行記録で、S5 の推定と基準の推定の差が最大でも 2.22e-14、つまり計算の丸め誤差の範囲で一致することを確かめています)。

説明変数の組推定の平均(12品目)真の値との差の平均平均絶対誤差T1(真 -2.4)C2(真 -3.3)C3(真 -2.3)
S1 価格だけ-4.053-1.0701.070-3.357-4.638-3.256
S2 価格+季節-3.850-0.8660.866-3.274-4.459-3.149
S3 価格+販促-3.089-0.1060.242-2.538-4.094-1.996
S4 価格+販促+季節-3.018-0.0340.175-2.202-2.970-2.257
S5 基準(S4+他品目の価格)-3.010-0.0260.189-2.308-2.943-2.229

12品目の真の自己弾力性の平均は -2.983 です。表の「真の値との差の平均」の列を見ると、価格だけの S1 は平均で -1.070、つまり12品目すべてで弾力性を大きく(価格に敏感すぎると)見積もっています。「平均絶対誤差」(品目ごとの差の絶対値の平均)も1.070で、差の平均と同じ値なので、12品目すべてが同じ向きにずれていることが分かります。季節を加えた S2 で平均絶対誤差は0.866に縮みますが、まだ大きく外れています。販促を加えた S3 で0.242、販促と季節の両方を加えた S4 で0.175まで縮みました。基準の S5 は0.189で、S4 とほぼ同じです。

この結果は、このデータで弾力性を取り違えた主な原因が2つあり、その寄与の大きさが違うことを示しています。大きいほうは販促の上乗せです。共通データの価格が大きく動くのは販促の週だけで、販促週にはチラシ・陳列による上乗せ(真のモデルで log で+0.25)が必ず同時に入ります。販促の変数が無い式は、この上乗せを価格の効果と区別できないので、「安くするとこれだけ売れる」を過大に見積もります。もう1つは季節です。共通データでは販促が夏に多く組まれていて、実行記録では全品目の販促週の割合が夏12.7%・それ以外5.9%です。夏は需要そのものが多い(T1 の平均数量は夏3,071本・それ以外2,064本)ので、季節の変数が無い式は、「夏に売れた」ことの一部を「夏に安かったから売れた」と読んでしまいます。

季節の影響は、12品目の平均で見ると販促より小さいのですが、品目によっては大きく出ます。表の C2(炭酸D 500ml)は、販促を入れて季節を入れない S3 で -4.094、季節も入れた S4 で -2.970 と、季節の有無だけで1以上動きました。一方で C3(炭酸C 1.5L)は、S3 で -1.996 と、真の値 -2.3 より0に近い側にずれていて、季節を入れると -2.257 になりました。季節を落としたときにずれる向きは品目によって違い、どの品目で大きくずれるかは、その品目の販促が年間のどの時期に組まれていたかに左右されます。実務のデータでは、真の値が分からないので、どの品目がずれているかを答え合わせで確かめることはできません。だからこそ、販促・季節のように価格と一緒に動く要因は、効きそうなものを最初から式に入れておくのが原則になります。

前の表の5通りの推定を、12品目すべてについて並べたのが次の表です。数字は同じ実行記録からとっています。

品目真の値S1 価格だけS2 価格+季節S3 価格+販促S4 価格+販促+季節S5 基準
T1 緑茶A 500ml-2.4-3.357-3.274-2.538-2.202-2.308
T2 緑茶B 500ml-3.4-4.465-4.111-3.224-3.551-3.655
T3 緑茶PB 500ml-3.1-3.870-3.997-3.246-3.429-3.341
T4 緑茶A 2L-2.9-4.149-3.837-2.945-3.008-3.032
T5 緑茶B 2L-2.9-4.190-3.983-2.756-3.137-3.220
T6 緑茶PB 2L-3.2-4.313-4.220-3.825-3.252-3.037
C1 炭酸C 500ml-2.8-3.456-3.171-2.789-2.596-2.560
C2 炭酸D 500ml-3.3-4.638-4.459-4.094-2.970-2.943
C3 炭酸C 1.5L-2.3-3.256-3.149-1.996-2.257-2.229
C4 炭酸D 1.5L-3.0-4.238-4.013-2.818-3.239-3.228
W1 水E 2L-2.9-3.887-3.490-3.060-2.829-2.847
W2 水PB 2L-3.6-4.821-4.490-3.781-3.740-3.716

S1 価格だけ・S2 価格+季節の2列は、12品目すべてで「真の値」の列より小さい(より大きな負の値の)推定になっていて、取り違えが一方向にそろっていることが分かります。S3〜S5 の3列は、S1・S2 より真の値に近くなっていますが、そのうち S3 は C2・T6 などでまだ大きく外れています。この表から読み取りたいのは、「価格と数量の散布図に線を引く」という素朴な推定が、どの品目でも同じ向きに間違えるということです。向きがそろった誤りは、品目をまたいで平均しても打ち消し合いません。カテゴリ全体の価格を見直すときに、この誤りがそのまま全品目の判断に入ります。

値上げの前後を比べるだけでは足りない

回帰を使わずに弾力性を見積もる方法として、値上げの前と後の数量を比べるやり方もよく考えられます。共通データでは、第53週に5品目(T1・T4・C1・C3・W1)の通常売価を10円上げています。第53週は2年目の4月第1週で、1年目の同じ時期から1年ずつを比べれば季節はそろうように見えます。そこで、販促週と販促翌週を除いた平常週だけで、1年目と2年目の平均数量を比べて弾力性を出しました。計算は、log-log 回帰の係数と同じ尺度にそろえるため、数量の比の対数を価格の比の対数で割る「対数の比」で行っています。T1 なら、数量の比の対数 ln(1,947.2÷2,396.2)=-0.2075 を、価格の比の対数 ln(138÷128)=0.0752 で割って -2.76 です。変化率どうしをそのまま割る「%の比」で計算すると、T1 は -18.74%÷7.81%=-2.40 と別の値になります。10円程度の値上げでも、変化率が大きい品目ほど2つの計算方法の差が開くので、表には両方を載せました。

品目通常売価(架空)平常週の平均数量 1年目(週数)同 2年目(週数)単純比較の弾力性(対数の比)同(%の比)真の季節を割り戻した弾力性(対数の比、答え合わせ)真の値
T1 緑茶A 500ml128円→138円2,396.2(46週)1,947.2(40週)-2.76-2.40-2.34-2.4
T4 緑茶A 2L248円→258円863.0(38週)802.1(37週)-1.85-1.75-2.81-2.9
C1 炭酸C 500ml138円→148円1,592.4(46週)1,335.3(50週)-2.52-2.23-2.59-2.8
C3 炭酸C 1.5L228円→238円569.1(32週)563.5(42週)-0.23-0.22-2.20-2.3
W1 水E 2L98円→108円1,076.2(50週)803.1(43週)-3.01-2.49-2.68-2.9

表の「単純比較の弾力性(対数の比)」の列は -0.23 から -3.01、「同(%の比)」の列は -0.22 から -2.49 で、どちらの計算方法でも大きくばらつきました。特に C3 は -0.23 で、ほとんど値上げの影響が無かったように見えます。この数字をそのまま信じると、「C3 はもっと値上げしても売れる」という判断になりますが、真の値は -2.3 です。原因は、比べた週の季節の偏りにあります。販促週を除くと、残る平常週の時期の構成は年によって変わります。実行記録で比べた週の季節の効果(log)を平均すると、C3 は1年目が -0.065、2年目が +0.020 でした。2年目に比べた週のほうが夏寄りで、季節だけで需要が約9%(\( e^{0.085} \) から1を引いた値)高かったことになり、値上げによる減少をその分だけ打ち消して見えなくしていました。

表の右から2列目は、データを作った側だけが知っている真の季節を数量から割り戻してから、同じ比較(対数の比)をし直した値です。C3 は -2.20、T4 は -2.81 になり、真の値に近づきました。ただし、全品目で近づいたわけではありません。W1 は割り戻す前の -3.01 のほうが真の値 -2.9 に近く、割り戻すと -2.68 になって、むしろ離れました。残っている差は、週ごとの誤差と、同じ週に値上げした他の品目の価格の影響(T1 にとっての T4 など、同じブランドの別容量)を含みます。現実の企業では真の季節は分からないので、この答え合わせはできません。季節を割り戻す代わりに季節を回帰の変数として入れ、販促週も捨てずに販促の変数で受け止めるのが、前の節の基準の式です。前後の比較は、説明や検算には分かりやすい方法ですが、比べる期間の条件が本当にそろっているかを確かめないまま弾力性の数字として使うのは危険です。

付け加えると、前後の比較が「たまたま」うまくいくこともあります。表の C1 の単純比較(対数の比)は -2.52 で、真の値 -2.8 にそこそこ近い値です。T1 の%の比 -2.40 は真の値 -2.4 と一致していますが、対数の比では -2.76 で、同じデータでも計算方法を変えただけで当たり外れが入れ替わります。ただし、どの品目がうまくいき、どの品目が外れたかは、真の値を知らなければ判定できません。5品目のうち1品目でも C3 のような大外れがあれば、その品目の価格の判断を誤ります。

推定の不確かさ:標準誤差・信頼区間と、データの週数

推定値には必ず不確かさがあります。前に述べたとおり、回帰の結果として出てくる標準誤差は推定値のばらつきの目安で、95%信頼区間は、おおよそ推定値から標準誤差の2倍ずつ左右に広げた範囲です。基準の式による T1 の推定は -2.308、標準誤差0.212、95%信頼区間は -2.728〜-1.887 でした。この幅をどう読むかが、価格の判断では大事になります。弾力性が -2.7 なのか -1.9 なのかで、粗利が最大になる価格は変わるからです(その計算は第4章で扱います)。

では、データの週数が少ないと何が起きるでしょうか。直近の13週・26週・52週・104週だけを使って、基準と同じ式で T1 を推定しました。さらに、共通データの作り方はそのままで乱数シードだけを1〜200に変えてデータを200回作り直し、同じ推定を200回くり返して、推定値の散らばりを実測しました。現実には1つの企業に1組の履歴しかありませんが、この記事では真のモデルが分かっているので、「同じ仕組みから別の履歴が出ていたら推定はどうだったか」を何度でも試せます。

使った週数共通データでの推定同 95%信頼区間200回の推定の平均200回の標準偏差200回の5%点〜95%点信頼区間が真の値を含んだ割合係数が一意に決まらなかった回
直近13週+0.355+0.292〜+0.417+0.2430.795-1.372〜+0.5988.0%200回中200回
直近26週-4.258-6.659〜-1.858-0.6161.503-3.226〜+0.57133.5%200回中166回
直近52週-3.249-4.655〜-1.844-2.0411.170-3.514〜+0.45981.0%200回中28回
104週(全期間)-2.308-2.728〜-1.887-2.3990.209-2.761〜-2.08393.5%200回中0回

表の「200回の推定の平均」の列は、104週では -2.399 で真の値 -2.4 とほぼ一致し、「信頼区間が真の値を含んだ割合」も93.5%と、95%の区間に期待される割合に近い値でした。104週あれば、この式は平均的には正しい値を出し、信頼区間もおおむね額面どおりに働くということです。ただし、200回の5%点〜95%点は -2.761〜-2.083 で、1組の履歴から出る推定は、9割がたこの幅のどこかに落ちます。

52週になると、200回の標準偏差は0.209から1.170へ5倍以上に広がり、5%点〜95%点は -3.514〜+0.459 です。200回のうち33回は推定が -1 より大きく、値上げすると売上が増える側の値(数量の減り方が価格の上げ幅より小さい)が出ました。真の値 -2.4 では、値上げすれば売上は減ります。直近52週は第53週の値上げより後だけなので、通常売価は138円の1種類しかなく、価格が動くのは販促の週だけです。そして販促の週の数量の増え方は、販促の変数がまとめて受け止めてしまいます。弾力性を測る材料として残るのは、販促ごとの値引きの深さの違い(10〜30%の5段階)だけになります。104週の推定がよく当たったのは、週数が倍あったことに加えて、第53週の通常売価の改定という、販促と関係のない価格の動きが含まれていたことも効いた可能性があります(週数と改定の有無を分けて比べる実験はしていないので、どちらがどれだけ効いたかは切り分けていません)。

13週と26週はさらに深刻です。「係数が一意に決まらなかった回」の列は、回帰の式の説明変数の行列の階数(独立に動く列の数)が係数の数より小さかった回数で、13週では200回すべてでした。共通データそのもので直近13週を見ると、T1 の販促は1週だけ、通常売価は1種類なので、価格が動いた1週は販促の変数がそのまま説明してしまい、価格の効果を他と区別する材料がありません。注意したいのは、この状態でも statsmodels はエラーも警告も出さずに推定値 +0.355、標準誤差0.024という数字を返したことです(実行記録に警告は残っていません)。正の弾力性(値上げすると売れる)に、極めて狭い信頼区間が付いて出てくるわけです。統計ソフトは、推定に足る材料があるかどうかを判断してはくれません。弾力性を推定する前に、その期間に価格がどれだけの種類・幅で動いたか、販促と関係なく動いた週が何週あるかを数えておくことが、最初の確認になります。

T1 の自己弾力性の推定を、使うデータの週数(直近13週・26週・52週・104週)ごとに箱ひげ図で並べた図。データ生成を200回やり直した結果で、箱は25〜75%点、ひげは5〜95%点。真の値 -2.4 を橙の破線で示す。13週と26週の箱は0の近くか正の側にあり、52週は箱が真の値をまたぐがひげは +0.5 付近まで伸び、104週は真の値のまわりに狭くまとまっている

図は200回の推定を週数ごとに箱ひげ図にしたものです。104週の箱は真の値のまわりに小さくまとまっていますが、52週の箱は上下に長く、ひげは正の側にまで伸びています。13週と26週の箱は0の近くか正の側にあり、真の値の破線から離れています。経営の言葉にすると、新しい売価の効果を判断するために「半年分のデータで弾力性を測る」という計画は、このデータの条件(価格が動くのは販促だけ)では、値上げすべきか値下げすべきかの向きすら決められない結果になりえます。データの量を増やすか、販促と関係なく価格を動かした週を意図的に作るか(第10章の価格実験)のどちらかが必要です。

内生性:価格が需要を見て決まると、推定が偏る(この設定では0の側へ)

共通データの価格は、販促の計画と年1回の通常売価の改定だけで動いていて、その週の需要の揺れを見て決まってはいません。現実の価格はそうとは限りません。来週は近くで催しがあって売れそうだと分かっていれば値引きを控え、売れ行きが悪いと分かれば値下げをする、という判断は自然です。このように、分析者のデータには入っていない需要の揺れを見て価格が決まっていると、価格と誤差の項が相関し、最小二乗法の推定は偏ります。説明変数が誤差と相関している状態を、計量経済学では内生性と呼びます。前の節までの「季節や販促を入れ忘れる」問題も、入れ忘れた変数が誤差に入って価格と相関するという意味で、同じ仕組みの一種です。

この仕組みを確かめるために、共通データとは別の架空の設定を作りました。1品目・104週で、店には「来週は売れそうだ」という情報が見えていて、分析者のデータには無いものとします。店はその情報に応じて価格を上げ下げし、価格にはこのほかに、仕入れ原価の変動による動き(需要とは関係ない)が加わります。パラメータは次の表のとおりです。

項目(すべて架空)値意味
真の自己弾力性-2.5答え合わせに使う値
基準の売価・週販数量150円・1,000本需要の式の基準点
週数104週共通データと同じ
店に見えて分析者に見えない需要の揺れlog の標準偏差0.15催し・天候の見通しなど
需要の揺れへの価格の反応0.30需要の揺れが log で1大きいと、価格の log を0.30上げる
原価の変動による価格の動きlog の標準偏差0.05需要とは無関係に価格を動かす
誰にも見えない誤差log の標準偏差0.08共通データの誤差と同じ大きさ

この設定で104週のデータを500回作り(乱数シード1〜500)、価格の log だけで数量の log を回帰する最小二乗法(OLS)で推定すると、500回の平均は -1.023、5%点〜95%点は -1.362〜-0.694 でした。真の値は -2.5 なので、推定は0の側に大きく引っ張られ、実際より半分以下しか価格に敏感でないと出ています。売れそうな週に価格が高くなるので、データの上では「高い週にもよく売れている」ように見えるためです。偏りの大きさは設定から計算でき、大量のデータを集めたときに OLS が近づく値は -1.008 です(真の値 -2.5 に偏り +1.492 が足される)。500回の平均 -1.023 はこの計算値とほぼ一致しました。この偏りはデータの週数を増やしても消えません。増やすほど -1.008 という誤った値に確実に近づくだけです。

対処の1つが操作変数法です。需要の揺れとは無関係に価格を動かす変数(操作変数)を見つけ、価格の動きのうち、その変数で説明できる部分だけを使って弾力性を推定します。この設定では仕入れ原価の変動が操作変数になります。原価が上がれば価格が上がりますが、原価の変動そのものは来週の売れ行きとは関係ないからです。手順としては、まず価格の log を原価の変動で回帰し(1段目)、その予測値で数量の log を回帰します(2段目)。この2段階の推定を2段階最小二乗法(2SLS)と呼びます。statsmodels では statsmodels.sandbox.regression.gmm.IV2SLS で実行でき、実行記録では、手で2段階に分けて計算した係数(-3.395)と一致することを確かめました。

推定の方法(500回)平均中央値標準偏差5%点〜95%点
最小二乗法(OLS)-1.023-1.0190.203-1.362〜-0.694
2段階最小二乗法(2SLS、原価の変動を操作変数に)-2.551-2.5170.345-3.151〜-2.019
2SLS、原価の変動が小さい場合(標準偏差0.01)-3.531-2.56517.591-12.303〜-0.784

表の2行目のとおり、2SLS の500回の平均は -2.551 で、真の値 -2.5 に近づきました。代わりに標準偏差は0.345と、OLS の0.203より大きくなっています。価格の動きのうち原価で説明できる部分だけを使うので、使える材料が減り、1回ごとの推定のぶれが大きくなるためです。乱数シード0の1回の例では、OLS が -1.049、2SLS が -3.395 で、2SLS も1回だけ見ると真の値から0.9ほど離れていました。操作変数法は「平均的には正しい値に近づくが、1回ごとのぶれは大きい」方法です。

表の3行目は、原価の変動が小さい場合です。原価による価格の動きの標準偏差を0.05から0.01に下げると、1段目(価格を原価の変動で回帰する式)の F値(操作変数が価格をどれだけ強く動かしているかを表す検定の値で、大きいほど強い)の中央値は4.8まで下がり、2SLS の推定は標準偏差17.591と、実用にならないほど散らばりました。操作変数が価格をほとんど動かさない状態を弱い操作変数と呼びます。操作変数法を使うときは、1段目で操作変数が価格を十分に動かしているかを必ず確かめる必要があります。

1段目の強さの目安としてよく引かれるのが、「操作変数が1つの内生変数に対して、1段目の F値が10未満なら弱いとみなす」という経験則です。Stock と Yogo のワーキングペーパー(Testing for Weak Instruments in Linear IV Regression、NBER、2002年)は、この経験則を Staiger と Stock の1997年の論文(Econometrica 第65巻第3号)が提案したものとして紹介し、2段階最小二乗法の偏りの大きさにもとづく動機づけだったと説明しています。この章の例では、原価の変動が大きい場合の1段目の F値は乱数シード0の1回で97.4、小さい場合は500回の中央値で4.8で、後者はこの目安を下回っています。

実務で操作変数を見つけるのは簡単ではありません。条件は「価格を動かす」と「需要には価格を通してしか効かない」の2つで、後者はデータから検証できず、業務の知識で説明するしかありません。仕入れ原価・為替・物流費のような費用の側の変動は候補になりますが、原価の上昇が報道されて消費者の買い方まで変わるような場合は、需要にも直接効いてしまいます。もう1つの対処は、価格を需要と無関係に動かすこと、つまり価格実験です。店舗や期間をくじで割り付けて価格を変えれば、価格は需要の揺れと関係なく決まるので、内生性の問題はそもそも起きません。価格実験の設計は第10章で、操作変数法や実験による効果検証の作法は弊社コラム『施策の効果を正しく測る、因果推論と効果検証の進め方』で扱っています。

販売履歴が無い新商品の場合

ここまでの方法は、価格が動いた販売履歴があることを前提にしています。発売前の新商品や、これまで一度も価格を変えたことのない商品には、回帰に使える材料がありません。この場合の方法は、大きく分けて2つあります。1つは、実際に価格を変えて売ってみる価格テストです。店舗や期間を分けて異なる価格を付け、売れ行きの差から弾力性を測ります。価格を需要と無関係に割り付けられるので、前の節の内生性の問題が起きないのが利点で、設計の考え方は第10章で扱います。もう1つは、購入者になりうる人に価格について尋ねる調査です。

調査による方法として知られているものの1つが、ファン・ヴェステンドルプ(van Westendorp)が1976年の第29回 ESOMAR 大会で発表した価格感度測定法(Price Sensitivity Meter、略して PSM)です。ESOMAR の業界誌が再掲した原論文によると、回答者に価格を並べた目盛りを見せ、その商品を「安いと感じ始める価格」「高いと感じ始める価格」「高すぎて自分では買おうと思わない価格」「安すぎて品質が良いはずがないと感じる価格」の4つを尋ねます。原論文は、後の2つの質問はガボールとグレンジャーらの先行研究でも使われてきたもので、前の2つの質問は先行文献に見当たらないと述べています。また、具体的に説明したり見せたりできれば新商品にも適用できる一方、その場合は「分からない」という回答が増えるとも書いています。

集計では、価格ごとに4つの質問の回答を累積した曲線を描き、その交点を読みます。PSM を実装した R のパッケージ pricesensitivitymeter(版1.3.3 の説明書)は、交点を次のように定義しています。

交点の名前どの曲線の交点か言い換え
最適価格点「安すぎる」と「高すぎる」安すぎると答える人の割合と、高すぎると答える人の割合が等しくなる価格
無差別価格点「安い」と「高い」安いと答える人の割合と、高いと答える人の割合が等しくなる価格
許容価格帯の下限「安すぎる」と「安くない」安すぎると答える人の割合と、安いとは感じない人の割合が等しくなる価格
許容価格帯の上限「高すぎる」と「高くない」高すぎると答える人の割合と、高いとは感じない人の割合が等しくなる価格

表の「言い換え」の列は、交点の定義を言葉にしたものです。許容価格帯は、下限と上限の間の価格の幅を指します。PSM で分かるのは、回答者が価格をどう受け止めるかという意見の分布で、その価格で実際に何個売れるかという需要曲線そのものではありません。原論文も、購入意向の質問を標準の手順には含めていないと書いています。弾力性のように「価格を1%変えると数量が何%変わるか」を知りたいのであれば、調査で候補の価格帯を絞り、その範囲の中で価格テストを行って実際の数量で確かめる、という2段構えが有効だと考えています。

もう1つの現実的な手がかりは、似た既存商品の推定です。この章の共通データでは、飲料12品目の自己弾力性は -2.3〜-3.6 の範囲にありました(真のモデルの値)。新商品の弾力性を、同じカテゴリ・同じ容量帯の既存品の推定から仮に置き、発売後に販売履歴がたまるにつれて推定し直す、という進め方です。ただし、この仮置きは新商品が既存品と同じように買われるという前提に立っていて、その前提が正しいかどうかは発売後のデータでしか確かめられません。価格を試しながら学ぶ方法(バンディット)は第10章で扱います。

推定を誤ると、価格の判断と粗利がどう狂うか

ここまでの推定の違いが、実際の価格の判断にどう響くかを確かめました。説明変数の組 S1〜S5 のそれぞれで推定したモデルを使い、基準と同じ最適化(通常売価を現在の売価から10円刻みの9通りの候補から選び、上下15%以内・PB と NB の価格差・容量あたり単価の3つの制約の下で、推定モデルの期待粗利が最大になる組をカテゴリごとに全通り数え上げる)を行いました。選ばれた売価を、データを作った側だけが知る真のモデルで評価し、現在の売価のときの粗利(真のモデルで週あたり837,136円)に対する増減を出しています。粗利は、この記事の定義どおり、年平均の季節・販促の無い平常週の、週あたりの期待値です。

推定に使った式値上げ値下げ据え置き推定モデルが見込んだ粗利の改善真のモデルで評価した粗利の改善週あたり粗利の増減(真のモデル)
S1 価格だけ0品目12品目0品目+18.84%-3.27%-27,404円
S2 価格+季節0品目12品目0品目+16.04%-3.27%-27,404円
S3 価格+販促1品目11品目0品目+6.54%-1.13%-9,454円
S4 価格+販促+季節1品目11品目0品目+5.11%-1.45%-12,132円
S5 基準(S4+他品目の価格)4品目4品目4品目+1.96%+1.40%+11,759円

表の「推定モデルが見込んだ粗利の改善」と「真のモデルで評価した粗利の改善」の2列を見比べてください。価格だけで推定した S1 のモデルは、12品目すべての値下げを選び、粗利が18.84%増えると見込みました。ところが、その売価を真のモデルで評価すると、粗利は3.27%減ります。週あたり27,404円の減少で、52週続けば27,404円×52=約142万円の粗利を失う計算です(架空のデータでの値)。S1 のモデルは弾力性を12品目すべてで大きく見積もっていたので、「値下げすれば数量が大きく増えて元が取れる」と判断しましたが、実際の数量はそれほど増えません。季節を加えた S2 も、選んだ売価は S1 とまったく同じでした。

見込みと実際がこれだけ食い違うことが、推定の誤りの一番の怖さです。推定モデルの上では、どの式で推定しても「粗利が増える」という結論が出ています。最適化は、与えられたモデルの上で最も良い答えを返す道具なので、モデルが楽観していれば、その楽観をそのまま最大限に使った答えを返します。最適化の結果の「見込んだ改善」の数字は、モデルが正しいときにしか意味を持ちません。

注目したいのは S4 です。S4 は自己弾力性の推定だけを見れば基準の S5 と同じくらい正確で(12品目の平均絶対誤差 S4 が0.175、S5 が0.189)、それでも11品目の値下げを選び、真のモデルでは粗利を1.45%減らしました。S4 の式には同じカテゴリの他品目の価格が入っていないので、ある品目を値下げしたときに、同じカテゴリの他の品目の数量が減ることを計算に入れません。値下げで増えた数量の一部は、実際には隣の品目から移ってきただけなのに、S4 のモデルはそれをすべて純増と見なします。これが S4 が値下げに傾いた主な理由だと考えられます。ただし、S4 と S5 では自己弾力性の推定値も品目ごとに少しずつ違うので、この比較は他品目の項だけの効果を切り分けたものではありません。この品目間の影響(交差価格弾力性・カニバリゼーション)をどう測り、最適化にどう入れるかは第5章で扱います。この章の範囲で言えるのは、自己弾力性が正しく推定できていても、式に入れていない影響があれば価格の判断は狂う、ということです。

基準の S5 だけが粗利を増やし、真のモデルでの改善は+1.40%でした。推定モデルの見込み+1.96%との差0.56ポイントは、推定の誤差が残っている分です。データを作った側だけが知る真の最適(真のモデルで最も粗利が大きくなる売価の組)の改善は+1.83%なので、S5 は上限の約4分の3を取れています。

品目現在の売価S1・S2 が選んだ売価S3S4S5(基準)真の最適(参考)
T1 緑茶A 500ml138円118円118円128円158円148円
T2 緑茶B 500ml118円108円108円108円108円108円
T3 緑茶PB 500ml88円78円78円78円88円88円
T4 緑茶A 2L258円228円228円228円288円268円
T5 緑茶B 2L238円208円228円208円248円268円
T6 緑茶PB 2L178円158円158円158円178円188円
C1 炭酸C 500ml148円128円128円138円138円138円
C2 炭酸D 500ml128円118円118円118円128円118円
C3 炭酸C 1.5L238円208円268円248円268円268円
C4 炭酸D 1.5L218円188円208円198円218円238円
W1 水E 2L108円98円98円98円98円98円
W2 水PB 2L78円68円68円68円68円68円

品目ごとに選ばれた売価を並べると(売価はすべて架空)、T1 の判断が式によって正反対になっていることが分かります。S1〜S3 は138円から118円への値下げ、S4 は128円への値下げ、S5 は158円への値上げを選び、真の最適は148円への値上げです。T4 も同じで、S1〜S4 は228円への値下げ、S5 は288円への値上げ、真の最適は268円への値上げでした。一方、T2・W1・W2 は、どの式でも真の最適と同じ値下げが選ばれています。これらの品目では、推定の式を変えても判断が変わりませんでした。推定の誤りの影響は全品目に均等に出るのではなく、一部の品目の判断を逆向きにする形で出ます。全品目の平均の誤差が小さいことを確かめても、個々の品目の判断が正しいとは限らないということです。

経営の言葉に置き換えると、需要の推定の誤りが生む損失には2つの型があります。1つは、弾力性を大きく見積もりすぎて値下げに走り、数量は増えても粗利を削る型です。この章の S1 がこれに当たり、数量が増えて売場は活気づいて見えるので、損失に気づきにくい点が厄介です。もう1つは、弾力性を小さく見積もりすぎて値上げに走り、客数と数量を失う型です。内生性の節の OLS(真の -2.5 を -1.0 前後と推定)は、この向きの誤りを生みます。どちらの型でも、最適化の「見込んだ改善」はプラスの数字で出てくるので、見込みの数字だけを見て承認すると誤りを止められません。価格の改定案を承認する側は、改善の見込みと一緒に、どの式で推定したか、その期間に価格がどう動いていたか、推定の信頼区間がどれだけの幅か、を確認する必要があると考えています。

この章で実行した結果を、弾力性を推定する前後に確かめることの順にまとめ直します。1つ目は、価格がどう動いたかを数えることです。その期間に価格が何種類あったか、販促と関係なく動いた週が何週あったかを数えます。直近13週の推定のように、価格の効果を区別する材料が無いまま回帰しても、ソフトは数字を返します。2つ目は、価格と一緒に動く要因を式に入れることです。販促のチラシ・陳列、季節、同じカテゴリの他品目の価格は、この章の共通データで外すと推定や判断が大きく狂った要因でした。3つ目は、価格がどう決まっていたかを確かめることです。担当者が需要の見通しを見て価格を動かしていたなら、推定は偏ります(内生性の節の設定では0の側へ。価格の決め方が逆なら逆向きにもなりえます)。4つ目は、推定値だけでなく信頼区間の幅を見ることです。5つ目は、推定モデルの上で最適化した結果の「見込んだ改善」を、推定の誤差を踏まえて割り引いて読むことです。

確かめることこの章で起きたこと(共通データ・架空の設定)経営指標への影響
価格が何種類・何週動いたか直近13週では200回すべてで係数が一意に決まらず、共通データ(乱数シード0)の推定では正の弾力性が狭い区間付きで出た値上げ・値下げの向きを誤り、粗利を失う
販促・季節を式に入れたか価格だけの式は12品目すべてで弾力性を大きく見積もり、平均で1.070ずれた全品目の値下げを選び、真のモデルで粗利が3.27%減
他品目の価格を式に入れたか自己弾力性は正確でも、11品目の値下げを選んだ真のモデルで粗利が1.45%減
価格が需要を見て決まっていないかOLS の推定が真の -2.5 に対して平均 -1.023値上げに走り、数量と客数を失う向きの誤り
信頼区間の幅52週の推定は5%点〜95%点が -3.514〜+0.459判断の向きが決められないことを見落とす

表の「経営指標への影響」の列のうち、粗利の増減は、共通データで基準と同じ最適化を行い、真のモデルで評価した値です。内生性と信頼区間の行は、この章では粗利まで計算していないので、誤りの向きだけを書いています。

需要の推定から価格の判断までの確認の流れを表す概念図の図

この章の要点は3つです。第一に、log-log 回帰の価格の係数はそのまま価格弾力性として読めますが、販促・季節・他品目の価格のように価格と一緒に動く要因を式に入れないと、推定は一方向にずれます。共通データでは、価格だけの式が12品目すべてで弾力性を大きく見積もり、その推定で最適化した売価は、推定モデルの上では粗利+18.84%と見込まれながら、真のモデルでは粗利を3.27%減らしました。第二に、推定には不確かさがあり、価格が販促以外で動かない短い期間のデータでは、値上げすべきか値下げすべきかの向きすら決まりません。第三に、価格が需要を見て決まっていると、データを増やしても消えない偏りが生じ、対処には操作変数法か、価格を需要と無関係に動かす実験が必要です。次の第4章では、推定した弾力性を使って1品目の価格を最適化し、粗利率と弾力性を結ぶ公式(ラーナーの公式)と、推定の誤差が粗利に与える損失を扱います。

この章を深めたい方への参考書籍

『計量経済学の第一歩 実証分析のススメ』(田中隆一、有斐閣ストゥディア):操作変数法・パネル・データ分析・マッチング法・回帰不連続デザインまでを章立てで扱う入門書です。この章の内生性と操作変数法の節で触れた考え方を、操作変数法の章から基礎に立ち返って確かめるのに向いています。

『実証分析のための計量経済学 正しい手法と結果の読み方』(山本勲、中央経済社):副題のとおり、手法の選び方と結果の読み方を扱う本で、同時決定や内生性による偏りと、操作変数を使った対処を1つの章で扱っています。この章で見た「標準誤差が小さくても推定が正しいとは限らない」という問題を、実証分析の作法として整理し直すのに役立ちます。

第4章 1品目の価格を最適化する

第3章では、第2章で用意したサンプルデータ(架空の食品スーパーの飲料12品目・104週)から、価格が1%変わると数量が何%変わるかを表す価格弾力性を推定しました。推定した弾力性は、それだけでは価格を決めてくれません。弾力性と原価から「いくらにすれば粗利が最も大きくなるか」を計算して、はじめて値付けの判断に使える形になります。この章では、話を1品目に絞り、粗利を最大にする売価の考え方、弾力性と最適な粗利率の関係を表す公式、需要曲線の形の仮定で答えがどれだけ変わるか、最適の近くで売価が少しずれたときの粗利の損、弾力性の推定を誤ったときの損、原価が上がったときに何割を売価に転嫁すれば粗利が最大になるかを、共通データで実行して確かめます。品目どうしが互いの数量を奪い合う効果を含めた最適化は第5章で扱います。

粗利を最大にする売価という考え方

1品目の粗利は、1本あたりの粗利(売価から原価を引いた額)に販売数量を掛けたものです。売価を上げると1本あたりの粗利は増えますが、販売数量は減ります。売価を下げると逆のことが起きます。粗利を最大にする売価は、この2つの動きがちょうど釣り合う点にあります。言い換えると、そこから売価を少し上げても、1本あたりの粗利が増える分と、売れなくなった本数で失う分が相殺されて、粗利がそれ以上増えない点です。

売価を上げたときに粗利がどう動くかを分解した概念図の図

この釣り合いを計算するには、売価を変えたときに販売数量がどう動くかを表す式、つまり需要曲線が要ります。第2章で説明したとおり、共通データは乱数で作った架空のデータなので、データを作った側は本当の需要の式(真のモデル)を知っています。現実の企業には真のモデルは見えず、販売履歴から推定した式(推定モデル)を使うしかありません。この章では、真のモデルを「現実には分からないが、答え合わせには使えるもの」として使い、推定モデルで出した売価を真のモデルで評価することで、推定の誤りがどれだけの粗利の損につながるかを測ります。この章で「最適」と書くときは、どちらのモデルでの最適かを必ず添えます。

この章の計算には、もう1つ前提があります。1品目の売価だけを動かし、他の11品目の売価は現在の売価(第104週時点の通常売価)に固定したうえで、その1品目の粗利だけを最大にする、という前提です。共通データの真のモデルでは、同じカテゴリの品目どうしに交差弾力性があり、ある品目を値下げすると、同じカテゴリの他の品目の数量が減ります。この章の計算はその減少を数えていません。その影響の大きさは、この章の後半で1つの例で示し、まとめて扱うのは第5章です。粗利は、特に断らない限り「年平均の季節・平常週(販促なし)の週あたりの期待値」で、第2章の定義と同じです。

定弾力性の需要での最適な粗利率とラーナーの公式

粗利が最大になる点では、売価を少し動かしても粗利が変わりません。この条件を式にすると、売価を \( p \)、原価を \( c \)、その売価での自己弾力性を \( \varepsilon \)(負の値)として、次の関係が成り立ちます。

\( \dfrac{p – c}{p} = -\dfrac{1}{\varepsilon} \)

左辺は、売価に占める1本あたりの粗利の割合です。第1章と同じく、この割合を粗利率と呼びます(品目ごとには、売価から原価を引いた額を売価で割った値です)。公正取引委員会 競争政策研究センターの『競争政策で使う経済分析ハンドブック』(CPRCハンドブックシリーズ No.1)は、価格と限界費用(もう1単位増やしたときに追加でかかる費用。この章では1本あたりの仕入原価)の差を価格で割った比率をプライス・コスト・マージンと呼び、利潤を最大にする条件から、この比率が需要の価格弾力性の逆数に等しくなることを示して、これをラーナーの公式と呼んでいます。名前の由来の経済学者 A. P. ラーナーには、1934年に Review of Economic Studies 誌(第1巻第3号)に載った、独占の概念と独占力の測定を題にした論文があります。なお、同じハンドブックは弾力性を正の値で定義しているので、式の符号はこの記事(弾力性を負の値で書く)と逆に見えますが、中身は同じです。上の式は、粗利を最大にしている売り手の粗利率は、弾力性の絶対値の逆数に等しい、と言っています。言葉で言い換えると、「お客さまの反応が鈍い(弾力性の絶対値が小さい)品目ほど高い粗利率が粗利を最大にし、反応が鋭い品目ほど低い粗利率が粗利を最大にする」ということです。弾力性が -2 なら最適な粗利率は50%、-3 なら約33%、-4 なら25%です。

この式の導き方を言葉でたどっておきます。売価を1円上げると、売れている本数の分だけ粗利が増えます。同時に、売れる本数が減り、減った1本ごとに、売価から原価を引いた額の粗利を失います。前者と後者が等しくなる点が最適で、この釣り合いの式を弾力性の定義(数量の変化率÷価格の変化率)で書き直すと上の式になります。導出には微分を使いますが、使っている事実は「最適の点では、少し動かしても粗利が増えない」ということだけです。同じハンドブックが指摘しているとおり、固定費(売る量によらずかかる費用)は1単位増やしても変わらないので、限界費用に影響せず、最適な量の決定にも影響しません。店舗の家賃や本部の人件費を1本あたりに割り振った「原価」を式の \( c \) に入れると、最適な売価を高く見誤ります。式に入れるのは、1本多く売ったときに追加でかかる費用(仕入原価や、数量に比例する物流費など)だけです。

この関係は、需要曲線がなめらかで、最適が改定幅などの制約の端ではなく内側にあるときに、需要曲線の形によらず最適の点で成り立つ条件です(制約の端に当たった最適や、10円刻みの候補から選ぶ場合は、等号が成り立つとは限りません)。ただし、一般には弾力性そのものが売価によって変わるので、この式から売価を直接解くことはできません。売価によらず弾力性が一定の需要、つまり定弾力性の需要(数量の対数が価格の対数の一次式で表される需要で、第3章の log-log 回帰が当てはめている形)では、弾力性がどこでも同じなので、式を売価について解くことができ、次の形になります。

\( p^{*} = c \times \dfrac{\varepsilon}{1 + \varepsilon} \)

言葉で言うと、「最適な売価は、原価に弾力性だけで決まる倍率を掛けたもの」です。弾力性が -2.4 なら倍率は 2.4÷1.4=約1.71倍、-3 なら1.5倍です。この式には大事な条件が付いています。弾力性が -1 以上の(絶対値が1以下の)品目では、売価を上げても数量の減り方が小さく、売価を上げるほど粗利が増え続けるので、有限の最適な売価が存在しません。式に当てはめると倍率が負になるか、分母が0になって、意味のない答えが出ます。推定した弾力性の絶対値が1以下になったときは、公式をそのまま使ってはいけないということです。この問題は、後の推定誤差の節で実際に起きます。

共通データの真のモデルは、他の品目の売価を固定すれば、各品目について定弾力性の需要になっています。そこで、T1(緑茶A 500ml、原価72円・現在の売価138円・真の自己弾力性 -2.4、いずれも架空)について、公式で出した売価と、粗利を数値計算で直接最大にした売価を照合しました。次のコードは、そのまま実行できる形です。

import numpy as np
from scipy.optimize import minimize_scalar
from price_data import *

sku = "T1"
i = SKU_IDS.index(sku)
c = SKUS.loc[sku, "cost"]              # 原価 72円(架空)
e = SKUS.loc[sku, "elasticity"]        # 真の自己弾力性 -2.4(架空)
cur = SKUS.current.values.astype(float)

def profit(p):
    """T1 だけ売価 p にしたときの T1 の週あたり粗利(真のモデル・平常週)。"""
    prices = cur.copy()
    prices[i] = p
    return (p - c) * true_expected_qty(prices)[i]

p_formula = c * e / (1 + e)            # 定弾力性の需要での最適な売価
r = minimize_scalar(lambda p: -profit(p), bounds=(c + 1, 3 * c), method="bounded")
print("公式の最適 %.2f円 / 数値計算の最適 %.2f円" % (p_formula, r.x))
print("最適の粗利率 %.3f / 1/|弾力性| %.3f" % ((p_formula - c) / p_formula, 1 / abs(e)))
for p in [118, 128, 138, 148, 158]:
    print("売価 %d円: 粗利 %.0f円(最適比 %+.2f%%)" % (p, profit(p), 100 * (profit(p) / profit(p_formula) - 1)))
# 出力:
# 公式の最適 123.43円 / 数値計算の最適 123.43円
# 最適の粗利率 0.417 / 1/|弾力性| 0.417
# 売価 118円: 粗利 134999円(最適比 -0.36%)
# 売価 128円: 粗利 135199円(最適比 -0.21%)
# 売価 138円: 粗利 133022円(最適比 -1.82%)
# 売価 148円: 粗利 129502円(最適比 -4.42%)
# 売価 158円: 粗利 125260円(最適比 -7.55%)

公式と数値計算は、小数第2位まで同じ123.43円を返しました(12品目すべてで、両者の差は小数第6位まで0でした)。このときの粗利率は0.417で、弾力性 -2.4 の絶対値の逆数 1÷2.4=0.417 と一致しています。現在の売価138円での粗利は週133,022円で、真のモデルで最適な123.4円での週135,487円より1.82%少なくなっています。つまり、T1 だけを見れば、現在の売価は真のモデルでの最適より約15円高く、値下げしたほうが T1 の粗利は増える、という結果です。

同じ計算を12品目すべてに行ったのが次の表です。「1品目の最適」は真のモデル・定弾力性の公式で出した売価、「末尾8円の最適」は、共通データの売価の付け方(10円刻みで末尾8円)に合わせた候補の中で粗利が最大のものです。「現在の損失率」は、現在の売価のときの粗利が、1品目の最適のときの粗利より何%少ないかを表します。

品目原価真の弾力性現在の売価現在の粗利率1品目の最適最適の粗利率末尾8円の最適現在の損失率
T1 緑茶A 500ml72-2.41380.478123.40.4171281.82%
T2 緑茶B 500ml68-3.41180.42496.30.2949811.47%
T3 緑茶PB 500ml48-3.1880.45570.90.3236810.60%
T4 緑茶A 2L150-2.92580.419228.90.3452283.26%
T5 緑茶B 2L142-2.92380.403216.70.3452182.08%
T6 緑茶PB 2L102-3.21780.427148.40.3131488.47%
C1 炭酸C 500ml82-2.81480.446127.60.3571284.45%
C2 炭酸D 500ml76-3.31280.406109.00.3031087.27%
C3 炭酸C 1.5L140-2.32380.412247.70.4352480.25%
C4 炭酸D 1.5L134-3.02180.385201.00.3331981.73%
W1 水E 2L62-2.91080.42694.60.345983.91%
W2 水PB 2L46-3.6780.41063.70.2786812.80%

表の「現在の粗利率」の列は0.385から0.478の範囲にそろっていますが、「最適の粗利率」の列は弾力性に応じて0.278から0.435まで開いています。12品目のうち11品目で、現在の売価は1品目の最適より高く、現在の売価のほうが1品目の最適より低いのは、弾力性の絶対値が最も小さい C3(-2.3)だけでした。「現在の損失率」の列が大きいのは、弾力性の絶対値が大きい T2(-3.4)・T3(-3.1)・W2(-3.6)で、いずれも10%を超えています。粗利率をそろえる値付けは、反応の鋭い品目ほど粗利を取りこぼす、ということがこの表から読めます。

1品目だけの最適は、カテゴリ全体の最適ではない

前の表をそのまま信じると、「11品目を値下げすれば粗利が増える」という結論になりそうです。ところが、記事全体で基準としている結果(推定モデルでカテゴリ全体の通常売価を最適化したもの)は、T1 を138円から158円へ値上げしています。この食い違いは、前の表が他の品目への影響を数えていないことから来ています。

どれだけの差になるかを、T1 だけを138円から128円に下げた場合で測りました(他の11品目は現在の売価のまま、真のモデルで評価)。T1 自身の粗利は週2,177円増えます。一方で、T1 に客を奪われる同じ緑茶の品目の粗利が、T2 で1,712円、T3 で1,141円、T4 で984円、T5 で256円、T6 で231円減り、他品目の合計で週4,324円減ります。全体では週2,147円の減少です。1品目の計算では「値下げで粗利が増える」と見えたものが、カテゴリ全体では粗利を減らしていたことになります。

同じ理由で、品目の評価が章によって逆向きに見えることがあります。第1章の品目別の表は「その品目だけ売価を1%上げたとき、12品目合計の粗利がどう動くか」を見ていて、T3 と T6 は12品目合計の粗利が増える側(+0.021%と+0.007%)でした。一方、この章の表は「他の11品目を現在の売価に固定し、その品目自身の粗利だけを最大にする」計算で、T3 の1品目の最適は70.9円、T6 は148.4円と、どちらも現在の売価より低く出ています。同じ1%の値上げを真のモデルで分けて測ると、T3 自身の粗利は0.904%、T6 自身の粗利は0.865%減りますが、客が移る先の他の11品目の粗利がそれぞれ週730円と591円増えるので、合計では増えます。どちらの表も真のモデルでの計算で、違うのは「どの粗利を見ているか」です。カテゴリ全体の真の最適(基準と同じ制約の下で、12品目合計の粗利が真のモデルで最大になる売価の組)では、T3 は現在の88円のまま、T6 は188円への値上げでした。品目の評価を引用するときは、1品目の粗利で見た話か、カテゴリ全体の粗利で見た話かを必ず添える必要があります。

この章の計算は、1品目の価格を決める考え方と、その感度を見るためのものです。実際の売価の判断には、同じカテゴリの品目への影響を入れた最適化が必要で、それが第5章の主題です。ただし、この章で見る性質(需要の形の仮定・利益曲線の平らさ・推定誤差の損失・原価の転嫁)は、品目をまたいだ最適化でも同じように働きます。1品目で仕組みを確かめておくと、第5章の結果を読むときの手がかりになります。

需要曲線の形の仮定で、最適な売価はどれだけ変わるか

ラーナーの公式から売価を直接解けたのは、需要が定弾力性の形をしていると仮定したからです。現実の需要がどんな形をしているかは分かりません。そこで、同じ T1 について、現在の売価138円のときの数量(真のモデルで週2,015.5本)と弾力性(-2.4)がまったく同じになるように、3つの形の需要曲線を作り、それぞれで粗利が最大になる売価を求めました。現在の売価の近くでは、3つの曲線は同じ点を同じ傾きで通るので、販売履歴の中心付近だけを見ていても区別がつきにくい、という状況を作ったことになります。

1つ目は線形の需要で、売価が1円上がるごとに数量が一定の本数ずつ減る直線です。2つ目は定弾力性の需要で、この記事の真のモデルの形です。3つ目はロジット型の需要で、この章では「潜在的なお客さまの人数×買う人の割合」とし、買う人の割合が売価に対してS字の曲線で下がっていく形として置きました。ロジット型には、現在の売価で潜在的なお客さまのうち何割が買っているかという、もう1つの仮定が要ります。基準はその割合を0.5とし、0.2と0.8でも確かめました。前述のハンドブックは、直線の需要曲線では傾きは一定でも弾力性は一定ではなく、直線上を左上(売価の高い側)へ行くほど弾力性が大きくなること、弾力性が一定の需要曲線は原点に向かって凸の曲線になることを説明しています。この性質の違いが、最適な売価の違いになって現れます。

T1 の需要曲線を3つの形で描いた図と、それぞれの利益曲線。左の図は横軸に売価、縦軸に週あたり期待数量をとり、線形をグレー、定弾力性をネイビー、ロジットを薄い青で描く。3本は現在の売価138円の点で交わり、同じ傾きで通る。右の図は同じ3つの形での週あたり粗利を描き、点で最適の売価を示す。定弾力性の最適は約123円、線形とロジットの最適は約134円で、定弾力性の利益曲線は高い売価の側でなだらかに下がる
需要曲線の形現在の売価138円での数量現在の売価での弾力性その形での最適の売価最適での数量その売価を真のモデルで評価した粗利真の最適との差
線形2,015.5本-2.400133.8円2,164.5本134,160円-0.98%
定弾力性(真のモデルの形)2,015.5本-2.400123.4円2,634.5本135,487円0.00%
ロジット(買う人の割合0.5)2,015.5本-2.400133.9円2,158.9本134,124円-1.01%

表の「現在の売価138円での数量」と「現在の売価での弾力性」の列は3つの形で同じですが、「その形での最適の売価」の列は、線形が133.8円、ロジットが133.9円、定弾力性が123.4円で、約10円の開きがあります。線形とロジットは、売価を下げると弾力性の絶対値が小さくなっていく形なので、値下げで数量が伸びにくく、最適は現在の売価から4円ほど下がったところで止まります。定弾力性は、どこまで下げても弾力性が -2.4 のままなので、値下げで数量が伸び続け、最適はさらに下にあります。ロジットの「買う人の割合」を0.2にすると最適は131.3円、0.8にすると136.4円で、仮定の置き方1つで5円ほど動きました。

この記事の真のモデルは定弾力性なので、「真のモデルで評価した粗利」の列では定弾力性が最も高くなるのは当然です。注目したいのは損失の大きさで、T1 では形を取り違えても粗利の損は1%前後でした。ところが、同じ比較を12品目すべてで行うと、損の大きさは品目によって大きく違いました。

品目原価現在の売価真の弾力性線形での最適ロジットでの最適定弾力性での最適線形を使った損失率ロジットを使った損失率
T172138-2.4133.8133.9123.40.98%1.01%
T268118-3.4110.4111.196.35.82%6.35%
T34888-3.182.282.770.95.57%6.02%
T4150258-2.9248.5249.0228.91.62%1.70%
T5142238-2.9231.0231.3216.71.02%1.05%
T6102178-3.2167.8168.7148.44.29%4.62%
C182148-2.8141.4141.8127.62.30%2.41%
C276128-3.3121.4121.9109.03.59%3.85%
C3140238-2.3240.7240.8247.70.13%0.12%
C4134218-3.0212.3212.5201.00.82%0.85%
W162108-2.9103.6103.994.61.97%2.06%
W24678-3.672.873.463.76.41%7.07%

表の「線形を使った損失率」と「ロジットを使った損失率」は、真のモデル(定弾力性)が正しいときに、線形やロジットを仮定して出した売価を使うと、真の最適に比べて粗利が何%減るかを表しています。損失が大きいのは W2(6.41%と7.07%)・T2・T3・T6 で、どれも現在の売価が定弾力性での最適から大きく離れている品目です。反対に C3 は、現在の売価238円が定弾力性での最適247.7円に近いので、3つの形の答えが近く、損失は0.13%と0.12%でした。現在の売価から遠くへ動かす判断ほど、需要曲線の形の仮定が結論を左右する、ということです。

実務では、需要曲線の形は販売履歴が覆っている売価の範囲でしか確かめられません。共通データの T1 は、2年間の実売価が98円から138円の範囲にありました。通常売価は第52週まで128円、第53週から138円の2通りしかなく、128円より低い売価は9回の販促の週だけで、チラシや陳列の効果と重なっています。真のモデルでの最適の123.4円は、通常売価としては一度も付けたことのない売価です。高い側も同じで、記事全体の基準が T1 に選んだ158円は、過去104週の最高売価138円を超えています。基準で値上げを選んだ4品目、T1(158円)・T4(288円)・T5(248円)・C3(268円)は、いずれも過去の最高売価(138円・258円・238円・238円)を超える売価です。候補の上端に当たったのは T1・T4・C3 の3品目ですが、上端に当たっていない T5 も過去の最高売価を超えていて、基準の+1.40%(真のモデルで評価)は、値上げした4品目すべてで、推定モデルをこの外側へ延ばした予測の上に乗っています。共通データでは真のモデルも推定モデルも同じ定弾力性の形なので、外側へ延ばしても形の取り違えは起きませんが、現実のデータでは、この外側での数量の予測こそが最も確かめられていない部分です。このため、通常売価を現在から大きく動かす提案を出すときには、形の仮定を変えて答えがどれだけ動くかを並べて示し、動きが大きければ、一度に大きく動かさず、段階的に動かして結果を確かめる進め方が有効だと考えています。価格を試して学ぶ方法は第10章で扱います。

利益曲線の平らさ:最適の近くでは、少々ずれても粗利の損は小さい

次の図は、T1 の売価だけを動かしたときの需要曲線(左)と、T1 の週あたり粗利(右、利益曲線)を、真のモデルで描いたものです。縦の線は、真のモデルでの最適(123.4円)、基準の推定で得た弾力性 -2.308 を公式に入れて出した推定モデルでの最適(127.1円)、現在の売価(138円)を示しています。

T1 の需要曲線と利益曲線。左は横軸に売価85円から200円、縦軸に週あたり期待数量をとったネイビーの右下がりの曲線。右は同じ横軸で T1 の週あたり粗利を千円単位で描いた山形の曲線で、頂上は約123円。縦線で真の最適123.4円(実線)、推定モデルの最適127.1円(破線)、現在の売価138円(点線)を示す。頂上付近は平らで、低い売価の側は急に下がり、高い売価の側はなだらかに下がる

右の利益曲線は、頂上の付近が平らで、頂上から離れるほど急に下がる山の形をしています。この形が、価格の判断にとって2つの意味を持ちます。1つ目は、最適の近くであれば、売価が少しずれても粗利はほとんど減らないことです。2つ目は、山の左右が対称ではなく、売価が低すぎる側(左)は急に、高すぎる側(右)はなだらかに下がることです。どれだけ平らかを、最適からのずれの割合ごとに測ったのが次の表です。数字は、真のモデルでの最適の粗利に対して、その売価の粗利が何%少ないかを表します。

品目真の弾力性真の最適-20%-10%-5%-2%+2%+5%+10%+20%
T1 緑茶A 500ml-2.4123.4円11.16%2.13%0.47%0.07%0.06%0.38%1.35%4.45%
C3 炭酸C 1.5L-2.3247.7円9.78%1.89%0.42%0.06%0.06%0.34%1.21%4.01%
W2 水PB 2L-3.663.7円37.48%6.48%1.37%0.20%0.18%1.01%3.50%10.78%

T1 では、最適から上下2%(約2.5円)ずれても損は0.07%以下、上下5%(約6円)でも0.47%以下です。上下10%になると、下にずれた場合2.13%、上にずれた場合1.35%と、損がはっきり出てきます。上下20%では、下にずれた場合11.16%、上にずれた場合4.45%で、同じ幅でも下にずれるほうが2倍以上の損になります。下にずれると、1本あたりの粗利が薄くなるうえに、売れる本数が増えても粗利の薄さを取り戻せないからです。弾力性の絶対値が大きい W2(-3.6)では山がとがっていて、上下5%で1.37%と1.01%、下に20%ずれると37.48%の損になります。お客さまの反応が鋭い品目ほど、売価を最適の近くに置く精度が粗利に効く、ということです。

この平らさは、売価の端数のルールが粗利に与える影響が小さいことも意味します。前の12品目の表の「末尾8円の最適」は、10円刻みで末尾8円という制約の中で選んだ売価ですが、その粗利は連続的に選べる最適と比べて、T1 で0.212%、T4・T5・T6・C1・C3 では0.01%未満しか減りませんでした。最も大きかったのは W2 の1.753%で、最適63.7円に対して候補の68円が約6.8%上にずれていたためです。単価の低い品目ほど、10円の刻みが売価に対して粗くなり、端数の制約が粗利に効きやすくなります。

経営の目線で読むと、利益曲線の平らさは「1円単位の精密な最適化よりも、最適から大きく外れている品目を見つけて直すほうが効く」ことを示しています。T1 の現在の売価138円は最適から約12%上で、損は1.82%でした。一方、W2 の現在の売価78円は最適63.7円から約22%上で、損は12.80%に達しています。どの品目から手を付けるかは、最適との差の大きさと、弾力性の大きさ(山のとがり方)の両方で決まります。ただし、ここでの「最適」は1品目の計算の範囲でのもので、前の節で見たとおり、他の品目への影響を入れると答えは変わります。

弾力性の推定誤差が粗利に与える損失

ここまでは真のモデルの弾力性を使ってきましたが、現実に使えるのは推定した弾力性です。推定した弾力性を公式に入れて出した売価(推定モデルでの最適)を、真のモデルで評価すれば、推定の誤りがどれだけの粗利の損になるかが分かります。まず、記事全体で基準としている推定(品目ごとの最小二乗法・104週。第3章で詳しく扱ったもの)の弾力性で計算した結果が次の表です。他の品目の売価は現在の売価に固定し、その品目の粗利だけを見ています。

品目真の弾力性推定した弾力性真の最適推定モデルでの最適真のモデルで評価した損失率週あたりの損失額
T1-2.4-2.308123.4円127.1円0.136%184.2円
T2-3.4-3.65596.3円93.6円0.354%367.6円
T3-3.1-3.34170.9円68.5円0.394%270.0円
T4-2.9-3.032228.9円223.8円0.148%133.7円
T5-2.9-3.220216.7円206.0円0.777%540.2円
T6-3.2-3.037148.4円152.1円0.206%138.7円
C1-2.8-2.560127.6円134.6円0.664%607.1円
C2-3.3-2.943109.0円115.1円1.007%748.8円
C3-2.3-2.229247.7円253.9円0.089%47.8円
C4-3.0-3.228201.0円194.1円0.382%165.8円
W1-2.9-2.84794.6円95.6円0.026%10.3円
W2-3.6-3.71663.7円62.9円0.068%33.4円

表の「真のモデルで評価した損失率」の列は、最も大きい C2 でも1.007%、最も小さい W1 で0.026%でした。基準の推定は真の値に近く、利益曲線の頂上が平らなので、推定モデルでの最適が真の最適から数円ずれても、損は小さく収まっています。C2 は推定した弾力性が -2.943 と、真の -3.3 より絶対値で0.357小さく、お客さまの反応を実際より鈍く見積もったため、売価を6円ほど高く出していました。

ただし、これは1つの販売履歴(乱数の種0)での結果にすぎません。第3章によれば、T1 の弾力性の推定値 -2.308 の95%信頼区間は -2.728 から -1.887 です。この区間の両端の値を公式に入れると、-2.728 なら売価113.7円で損失率1.27%、-1.887 なら売価153.2円で損失率5.99%になります。区間の中のどの値も、データからは「ありうる」と言える値ですが、どちらの端を信じるかで、売価は40円近く、粗利の損は5倍近く違います。

推定の誤差が損失をどれだけ生むかを、1回の結果ではなく分布で見るために、同じ真のモデルから乱数の種だけを変えて104週の販売履歴を200通り作り直し、それぞれで基準と同じ回帰を行って弾力性を推定し、公式で出した売価を真のモデルで評価しました。200通りのうち1通り(種118)は回帰の計算の途中で、推定のばらつきを出すための行列の計算(逆行列)が求まらず、推定できなかったので除き(説明変数の列どうしが独立に動いていないと、この計算は解けません)、199通りで集計しています。この記事の実行環境(一般的なノートPC)での実測で、全体の計算は16.2秒でした。

T1 の推定した自己弾力性と、真のモデルで評価した粗利の損失率の散布図。横軸は推定した弾力性で、-3.6から-1.5、縦軸は損失率。199通りの販売履歴での推定値をネイビーの点で、想定した弾力性と損失率の関係を線で描く。真の弾力性-2.4に破線を引く。点は-2.9から-1.8の範囲に散らばり、線は-2.4で0になる谷の形で、右側(弾力性の絶対値を小さく見積もった側)で急に立ち上がる
品目真の弾力性推定の平均推定の標準偏差真の最適出した売価の範囲(5%点〜95%点)損失率の中央値損失率の平均損失率の95%点損失率の最大公式が使えなかった回数
T1-2.4-2.4010.209123.4円112.9〜138.5円0.336%0.676%2.219%8.353%0
T2-3.4-3.3920.37196.3円91.3〜103.0円0.200%0.602%2.265%12.586%1
T3-3.1-3.0090.59770.9円65.7〜79.2円0.275%1.051%4.271%22.391%6
T4-2.9-2.8890.271228.9円214.2〜252.0円0.249%0.675%2.874%6.035%0
T5-2.9-2.9090.538216.7円195.1〜274.6円0.767%2.860%14.732%75.577%0
T6-3.2-3.1970.350148.4円138.5〜163.9円0.252%0.832%3.735%14.140%0
C1-2.8-2.7950.173127.6円121.8〜136.3円0.132%0.313%1.124%4.449%0
C2-3.3-3.2700.283109.0円104.2〜118.1円0.267%0.583%2.465%10.058%0
C3-2.3-2.3030.262247.7円220.3〜294.8円0.513%1.176%4.542%11.607%0
C4-3.0-3.0220.295201.0円186.9〜219.8円0.273%0.727%2.749%7.248%0
W1-2.9-2.8960.13894.6円91.3〜99.0円0.085%0.175%0.701%1.490%0
W2-3.6-3.6480.23363.7円61.0〜66.4円0.110%0.289%1.159%3.247%0

表から読めることが4つあります。1つ目は、「推定の平均」の列が12品目とも真の弾力性の近くにあることです。この架空データの生成の式と同じ要因を入れたこのシミュレーションでは、回帰は平均的には真の値に近い値を当てています(現実のデータでは、第3章で見た入れ忘れの要因や内生性があると、平均でもずれます)。それでも、1回ごとの推定は「推定の標準偏差」の列の幅でばらつき、そのばらつきが売価を「出した売価の範囲」の列の幅で動かします。T1 では、真の最適123.4円に対して、出した売価の5%点が112.9円、95%点が138.5円でした。

2つ目は、損失の分布が偏っていることです。「損失率の中央値」の列は12品目とも1%未満ですが、「損失率の95%点」と「損失率の最大」の列は大きく、T5 では95%点で14.732%、最大で75.577%に達しています。T5 は推定の標準偏差が0.538と大きい品目で、ばらつきが大きいと、まれに大きく外れた推定が出て、そのときの損が非常に大きくなります。平均の損失率(12品目の単純平均で0.830%)は、こうしたまれな大外れに引き上げられています。損失率の平均を週あたりの損失額に直して12品目を足すと、週7,303円でした。これは、記事全体の基準の「現在の売価での週あたり粗利」837,136円の約0.87%に当たる大きさです。ただし、この合計は、1品目ずつ他の11品目を現在の売価に固定して、その品目自身の粗利の損を出し、それを単純に足した値で、12品目を同時に動かしたときの損ではありません。

3つ目は、損失が非対称なことです。同じ幅だけ弾力性を取り違えても、絶対値を小さく見積もった側の損のほうが大きくなります。T1 で弾力性を0.5だけ取り違えた場合を比べると、絶対値を大きく見積もった -2.9 では売価109.9円で損失率2.63%、絶対値を小さく見積もった -1.9 では売価152.0円で損失率5.62%でした。C3(-2.3)でも、-2.8 で2.90%、-1.8 で6.52%と同じ傾向です。公式の倍率 \( \varepsilon / (1 + \varepsilon) \) は、弾力性が -1 に近づくほど急に大きくなるので、お客さまの反応を鈍く見積もる誤りは、売価を大きく上げすぎる方向に効きます。

4つ目は、「公式が使えなかった回数」の列です。T3 では199通りのうち6回、T2 では1回、推定した弾力性が -1 以上になりました。前に述べたとおり、弾力性の絶対値が1以下なら有限の最適な売価は存在せず、公式は意味のない答えを返します。真の弾力性が -3.1 の品目でも、データのばらつきしだいでは、推定が「値上げするほど粗利が増える」と言い出すことがある、ということです。最適化の仕組みに推定値をそのまま流し込むと、こうした推定は極端な値上げの提案になって出てきます。第2章で整理した改定幅の制約(基準では現在の売価から上下15%以内)は、こうした推定の暴れから粗利を守る役割も果たしています。

この節の結果を経営の目線で言い直すと、推定の誤差による損は「平均すると小さいが、ときどき大きい」性質のものです。だからこそ、推定値と一緒に不確かさ(標準誤差や信頼区間)を見て、不確かさの大きい品目では、改定幅を小さくする、段階的に動かして結果を確かめる、といった扱いを分けることが有効だと考えています。推定の不確かさを減らす方法(データの集め方・実験)は第3章と第10章で扱います。

原価が上がったとき、何割を売価に転嫁するのが粗利最大か

仕入原価が上がったとき、売価をいくら上げればよいかは、多くの企業が繰り返し直面する判断です。第1章では、中小企業の価格転嫁の実態を統計で見ました。ここでは、原価の上昇額のうち売価に上乗せした額の割合を「転嫁率」と呼び、粗利を最大にする転嫁率が需要曲線の形でどう変わるかを、T1 で計算しました。T1 の原価を72円から82円へ10円上げ(架空)、それぞれの形の需要で、原価が上がる前の最適な売価と、上がった後の最適な売価を比べています。需要曲線は、前の節と同じく、現在の売価138円で数量と弾力性がそろうように作ったものです。この節の前半の転嫁率は、出発点を各形の原価72円での最適な売価に置いた値で、「最適な売価が原価の上昇につれてどれだけ動くか」という需要の形そのものの性質を表します。現在の売価138円から何円上げるかは、出発点が違うので別の数字になり、節の後半で示します。

需要曲線の形原価72円での最適(出発点)原価82円での最適出発点からの上げ幅粗利最大の転嫁率(出発点は各形の最適)
線形133.8円138.8円+5.0円50%
定弾力性(真のモデルの形)123.4円140.6円+17.1円171%
ロジット(買う人の割合0.5)133.9円138.8円+4.9円49%

表の「粗利最大の転嫁率」の列のとおり、同じ品目・同じ現在の売価・同じ弾力性でも、線形の需要なら原価上昇の半分(50%)、定弾力性の需要なら原価上昇の1.71倍(171%)を売価に乗せるのが粗利最大で、転嫁率としては3倍以上違います。ただし、これは各形が自分の最適としている売価(線形133.8円、定弾力性123.4円)から測った値で、出発点そのものが約10円ずれています。定弾力性の結果は、ラーナーの公式から直接出てきます。最適な売価は「原価×弾力性だけで決まる倍率」なので、原価が10円上がれば、売価は10円×倍率(-2.4 なら 2.4÷1.4=約1.71)だけ上がります。原価の上昇額より大きく売価を上げるのが最適、という結果は直感に反するかもしれませんが、定弾力性の需要では最適な粗利率(41.7%)が原価によらず一定なので、原価が上がれば粗利の額もそれに比例して上乗せするのが最適になる、ということです。線形の需要では、最適な売価が「数量が0になる売価」と原価のちょうど中間になるので、原価の上昇のちょうど半分が売価に乗ります。ロジット(買う人の割合0.5)は、この例では線形とほぼ同じ49%でした。なお、表の「出発点からの上げ幅」の列は丸める前の売価から計算した値で、定弾力性の行は表示の140.6円と123.4円から引くと17.2円になりますが、丸める前の差は17.1円です。

では、需要の形を取り違えて転嫁率を決めるとどうなるかを、原価が82円に上がった後の粗利で比べました。この表の出発点も、それぞれの形での原価72円のときの最適な売価です。つまり「原価が上がる前は、その形で見て最適な売価を付けていた」という前提の比較です。表の「最適比」は、その形の需要で原価82円のときに最適な売価を付けた場合の粗利に対して、その行の売価での粗利が何%違うかを表します。0.00%がその形での最適で、マイナスが大きいほど粗利を取りこぼしています。この節の以降の表の「最適比」も同じ意味です。

転嫁率真のモデル(定弾力性)での売価真のモデルでの粗利真のモデルでの最適比線形の需要での売価線形の需要での最適比
0%(据え置き)123.4円109,142円-3.36%133.8円-0.78%
50%128.4円111,196円-1.54%138.8円0.00%
100%(上昇額をそのまま)133.4円112,382円-0.49%143.8円-0.78%
171%140.6円112,934円0.00%150.9円-4.58%

真のモデル(定弾力性)が正しいとき、据え置き(転嫁率0%)は最適より3.36%、50%の転嫁は1.54%、上昇額をそのまま乗せる100%の転嫁でも0.49%、粗利が少なくなります。逆に、線形の需要が正しいときに171%を転嫁すると4.58%の損になります。どちらの形を信じるかで、正しい答えも、誤ったときの損の向きも入れ替わります。この前提の下では、上昇額をそのまま乗せる100%の転嫁は、この2つの形のどちらが正しくても損が1%未満(定弾力性で0.49%、線形で0.78%)にとどまりました。ただし、この「100%なら無難」は、原価が上がる前の売価がすでにその形での最適にあった場合に限った話です。

実務の出発点は、どの形の最適でもない現在の売価です。T1 の現在の売価は138円で、定弾力性の最適123.4円より約15円高く、線形の最適133.8円より約4円高い位置にあります。そこで、現在の売価138円を出発点にして、同じ計算をやり直しました(真のモデルの定弾力性と、同じ点にそろえた線形・ロジットで評価。原価82円)。

需要曲線の形原価82円での最適現在の売価138円からの差138円のまま据え置いた場合の、その形の最適との粗利の差
線形138.8円+0.8円-0.02%
定弾力性(真のモデルの形)140.6円+2.6円-0.06%
ロジット(買う人の割合0.5)138.8円+0.8円-0.02%
現在の売価138円からの転嫁率売価定弾力性(真のモデル)での最適比線形での最適比ロジットでの最適比
0%(据え置き)138.0円-0.06%-0.02%-0.02%
50%143.0円-0.05%-0.56%-0.54%
100%(上昇額をそのまま)148.0円-0.42%-2.66%-2.45%
171%155.1円-1.44%-8.30%-7.20%

1つ目の表の「現在の売価138円からの差」の列のとおり、原価が82円になった後の最適な売価は、3つの形とも現在の138円から0.8〜2.6円上にあり、形による差は2円足らずでした。前半の表で転嫁率が50%と171%に分かれたのは、出発点(各形の原価72円での最適)が約10円離れていたためで、現在の売価から見れば、どの形でも「ほぼ据え置き」が粗利最大に近い答えです。2つ目の表では、現在の売価から上昇額をそのまま乗せた100%の転嫁(148円)は、定弾力性なら0.42%の損ですが、線形なら2.66%、ロジットなら2.45%の損になり、前半の「100%なら無難」は成り立ちません。この例で現在の売価から見て最も無難なのは据え置きから50%程度の転嫁で、損はどの形でも0.6%未満でした。T1 は原価が上がる前から最適より高めの売価を付けていた品目なので、原価の上昇で、最適な売価のほうが現在の売価に追いついてきた、ということです。現在の売価が最適より低い品目では、逆に転嫁を厚くする方向に答えが動きます。なお、138円を超える売価は過去104週に一度も付けていないので、この節の売価はいずれも推定や需要の形を外側へ延ばした予測に乗っています。

この比較から言えるのは、粗利を最大にする転嫁の量は「需要の形」と「出発点(現在の売価が最適からどれだけずれているか)」の両方で決まる、ということです。転嫁率という1つの数字だけで議論すると、出発点の違いが形の違いのように見えてしまいます。原価が上がったときに確かめるべきは、転嫁率そのものよりも、「原価が上がった後の最適な売価が、現在の売価から見てどこにあるか」です。この結果はこの例題の数字での結果で、弾力性や原価の上昇幅、現在の売価の位置が変われば損の大きさも変わります。

もう1つ見ておきたいのは、どの転嫁率を選んでも、原価の上昇そのものによる粗利の減少は避けられないことです。現在の売価138円・原価72円のときの T1 の粗利は週133,022円でした。原価が82円に上がると、138円のまま据え置いた場合は週112,867円、真のモデルでの最適な140.6円に上げた場合でも週112,934円で、どちらも約15%(15.2%と15.1%)減っています。140.6円に上げると、販売数量は2,015.5本から1,928.1本に4.3%減ります。最適な転嫁は損を最小にする手段で、原価の上昇を帳消しにする手段ではありません。経営の報告では、「原価上昇による粗利の減少」と「転嫁の判断の巧拙による差」を分けて示すと、判断の評価が正しくできます。現在の売価138円を起点にすると、前者は138円のまま原価だけが上がった分で週20,155円、後者は据え置きと最適な転嫁の差で週66円で、減少のほとんどすべてが原価の上昇そのものによるものでした。なお、前半の表のように原価72円での最適123.4円を起点にすると、据え置きと最適な転嫁の差は週3,792円(前半の表の転嫁率0%と171%の粗利の差)になり、起点によって転嫁の判断の重みが大きく変わります。

経営の判断に翻訳する

この章の結果を、経営の判断に使える形に整理します。1つ目は、粗利率をそろえる値付けの損です。ラーナーの公式が示すとおり、粗利を最大にする粗利率は品目の弾力性で決まり、反応の鋭い品目ほど低く、鈍い品目ほど高くなります。共通データでは、現在の粗利率が0.385から0.478の狭い範囲にそろっている一方で、1品目の計算での最適な粗利率は0.278から0.435まで開いていました。「どの品目も粗利率40%前後」という運用は分かりやすい反面、弾力性の違いを無視した分だけ粗利を取りこぼします。ただし、その取りこぼしをどう取り戻すかは、品目どうしの影響を入れた第5章の計算で決める必要があります。この章の1品目の計算だけで11品目を値下げすると、T1 の例で見たとおり、かえってカテゴリ全体の粗利を減らすことがあります。

2つ目は、精度をかける場所の選び方です。利益曲線の頂上は平らなので、最適から数%以内のずれは粗利にほとんど影響しません。T1 では上下5%のずれで0.5%未満の損でした。一方、最適から20%以上離れた売価や、弾力性の絶対値が大きい品目では、損が急に大きくなります。価格の見直しの工数は、すべての品目を1円単位で詰めることより、最適から大きく外れている品目と、反応の鋭い品目を見つけることに使うほうが効くと考えています。

3つ目は、推定の不確かさを判断に組み込むことです。この章のシミュレーションでは、推定の誤差による損は中央値で見れば1%未満でしたが、まれに10%を超える損が出ました。しかも、お客さまの反応を鈍く見積もる誤りは、売価を上げすぎる方向に大きく効きます。推定値だけを最適化に流し込むのではなく、信頼区間の両端で売価と粗利がどう変わるかを並べ、ぶれが大きい品目では改定幅を小さくするか、段階的に動かして結果を確かめる運用が有効です。この点は、推定の不確かさを測る第3章、価格を試して学ぶ第10章、現場の運用を扱う第13章につながります。

4つ目は、原価の上昇への対応です。各形の最適な売価を出発点にすると、粗利を最大にする転嫁率は需要の形しだいで50%にも171%にもなりました。ところが、現在の売価138円を出発点にすると、原価82円での最適な売価は3つの形とも138円の0.8〜2.6円上にあり、形による差は2円足らずでした。上昇額をそのまま乗せる100%の転嫁は、出発点が最適にある場合は損を1%未満に抑えましたが、現在の売価から乗せると線形・ロジットの形では2%台の損になりました。つまり、「原価が上がった分だけ上げる」が無難かどうかは、現在の売価が最適からどれだけずれているかで決まります。原価が上がる局面では、転嫁率の慣習から入るのではなく、需要の形を変えた複数の想定で「原価が上がった後の最適な売価が現在の売価からどこにあるか」と粗利を並べ、そのうえで判断することが、粗利の取りこぼしと数量の落ち込みの両方を避ける手堅い方法だと考えています。

判断を誤ったときの損失の型も整理しておきます。売価が最適より高すぎる場合は、その品目の販売数量が減り(この章のモデルが測っているのは品目の販売数量で、来店客数は測っていません)、粗利の損は利益曲線のなだらかな側で起きるので、少しずつ効いてきます。最適より低すぎる場合は、数量は増えても1本あたりの粗利が薄くなり、利益曲線の急な側で損が大きくなります。共通データの T1 では、最適から同じ20%ずれても、低すぎる側の損(11.16%)は高すぎる側(4.45%)の2倍以上でした。値下げで数量を伸ばしても、それが粗利の増加になっているかどうかは、必ず粗利の額で確かめる必要があります。

この章の要点は3つです。第一に、1品目の粗利を最大にする売価は、ラーナーの公式(粗利率=弾力性の絶対値の逆数)で弾力性と結びついており、定弾力性の需要では「原価×弾力性で決まる倍率」として直接計算できます。第二に、その答えは需要曲線の形の仮定と弾力性の推定誤差で動き、その動きの影響は、利益曲線の平らさのおかげで最適の近くでは小さく、遠くでは大きくなります。推定の誤差による損は平均では小さくても、ときどき大きく、反応を鈍く見積もる誤りほど高くつきます。第三に、原価が上がったときに粗利を最大にする転嫁の量は、需要の形と出発点の両方で変わります。各形の最適な売価から測った転嫁率は50%から171%まで開きましたが、現在の売価から見た最適な上げ幅の差は2円足らずで、どの転嫁が無難かは現在の売価が最適からどれだけずれているかで決まります。次の第5章では、この章で固定していた他の品目の売価も同時に動かし、交差価格弾力性を入れてカテゴリ全体で最適化します。

この章を深めたい方への参考書籍

『ミクロ経済学の力』(神取道宏、日本評論社):消費者行動と企業行動の理論から市場均衡、独占までを扱うミクロ経済学の教科書で、第1章に価格弾力性の節、第5章に独占企業の行動の節があります。この章で使った「売り手が価格を選ぶときの粗利の最大化」と「弾力性と最適な価格の関係」を、経済学の考え方から基礎づけて読むのに向いています。

『ミクロ経済学 第3版』(伊藤元重、日本評論社):需要と供給、需要曲線と消費者行動、費用の構造と供給行動から始まり、第9章で独占の理論を扱う教科書です。この章の前提になっている「需要曲線」「限界費用」「売り手が価格を選ぶ独占の考え方」を、章を追って順に確かめるのに向いています。

第5章 品目をまたいで価格を最適化する

第4章では、1品目だけを取り出して、粗利が最大になる売価を求めました。そこでは他の品目の売価を動かさないものとして扱いましたが、実際の売場では、同じ棚に並ぶ品目どうしが客を取り合っています。緑茶Bを10円下げれば緑茶Bはよく売れますが、その一部は、もともと緑茶Aやプライベートブランド(PB、小売が自ら企画する商品)の緑茶を買っていた客です。この章では、第2章で用意したサンプルデータ(架空の食品スーパーの飲料12品目・104週)を使って、品目どうしの影響を数字で確かめ、1品目ずつ決めた売価とカテゴリ全体で決めた売価を真のモデルで比べます。そのうえで、記事全体の基準としている最適化のスクリプト(baseline.py)の構造を要所だけ抜き出して読み、価格の並びの制約が粗利をいくら縛っているか、品目が増えて全通りを数えられなくなったときに整数計画でどう書くか、計算量がどう増えるかを、実行した結果で示します。この章で粗利と書く金額は、記事全体の定義どおり、年平均の季節・販促の無い平常週の、カテゴリ(または12品目合計)の週あたりの期待値です。

交差価格弾力性とカニバリゼーション

ある品目の売価が変わったとき、別の品目の販売数量がどれだけ動くかを表すのが交差価格弾力性です。この記事では、「他の品目の価格が1%上がると、この品目の数量が何%変わるか」と定義しています。互いに代わりになる品目(代替品)なら、相手が値上げするとこちらが売れるので正の値になります。第3章で扱った自己弾力性が「自分の価格が1%上がると自分の数量が何%変わるか」だったのに対して、交差価格弾力性は品目の組ごとに1つずつあるので、12品目なら自分以外との組で 12×11=132個の値があります。

交差価格弾力性が正の品目どうしで、一方を値下げして売れた数量の一部は、もう一方から移ってきた数量です。自社の品目どうしで販売を奪い合うことをカニバリゼーション(共食い)と呼びます。カテゴリを預かる立場から見ると、値下げした品目の数量の伸びをそのまま成果と数えると、隣の品目から移ってきた分を二重に数えることになります。値下げした品目の担当者にとっては増えた数量でも、カテゴリ全体では、粗利の高い品目から低い品目へ客が移っただけということがありえます。

共通データの真のモデルでは、交差価格弾力性を同じカテゴリの中だけに置き、同じ容量の他ブランドとの間は0.25、同じブランドの他の容量との間は0.15、それ以外の組は0.05としました(第2章の設定です)。緑茶・炭酸・水のカテゴリをまたぐ組は0です。緑茶6品目について、真の値と、基準の推定(品目ごとの回帰。式は第3章で説明しました)で得た値を並べたのが次の表です。行が影響を受ける品目、列が価格を動かす品目で、たとえば1行目の T2 の列は「T2(緑茶B 500ml)が1%値上げすると T1(緑茶A 500ml)の数量が何%増えるか」を表します。

影響を受ける品目T1の価格T2の価格T3の価格T4の価格T5の価格T6の価格
T1 緑茶A 500ml(真/推定)自分自身0.25/0.0700.25/0.3420.15/0.1330.05/-0.1620.05/0.140
T2 緑茶B 500ml(真/推定)0.25/0.247自分自身0.25/0.4660.05/0.1740.15/0.3250.05/-0.000
T3 緑茶PB 500ml(真/推定)0.25/0.3160.25/0.234自分自身0.05/0.1060.05/0.0020.15/0.211
T4 緑茶A 2L(真/推定)0.15/0.0710.05/0.0450.05/-0.018自分自身0.25/0.3240.25/0.024
T5 緑茶B 2L(真/推定)0.05/0.0160.15/0.2220.05/0.0520.25/0.312自分自身0.25/0.172
T6 緑茶PB 2L(真/推定)0.05/-0.0010.05/0.0720.15/0.1400.25/0.4380.25/0.259自分自身

表の推定の値は、真の値の周りに大きくばらついています。同じカテゴリの中の交差価格弾力性は全部で44個あり、推定の誤差は平均すると-0.010でほぼ偏りがありませんが、誤差の絶対値の平均は0.078、最も大きく外れた組では-0.226と+0.216でした。真の値はすべて正なのに、推定の値が負になった組が44個中9個あります。T1 の行の T5 の列(真0.05/推定-0.162)がその例で、推定をそのまま読むと「T5 を値上げすると T1 が売れなくなる」という、補完品のような関係に見えてしまいます。第3章で見たとおり、自己弾力性は104週のデータで真の値にかなり近く推定できていました(たとえば T1 は真-2.4に対して推定-2.308)。交差価格弾力性はそれより1桁小さい値を、同じ104週のデータから同時に推定するので、相対的な誤差がずっと大きくなります。

ただし、まとまりで見ると推定は真の値をよく捉えています。第3章の基準の推定の記録では、真の値が0.25の組の推定の平均は0.258、0.15の組は0.143、0.05の組は0.018でした。1つずつの値は信用しすぎず、「同じ容量の他ブランドとの間は強い」「容量が違えば弱い」という構造として読むのが、この程度のデータ量での使い方だと考えています。交差価格弾力性の数が品目数の2乗で増えることを考えると、品目が多い売場では、すべての組を自由に推定するより、この共通データの真のモデルのように「同じ容量の他ブランドとの間は同じ値」といった構造を置いて、推定する値の数を減らすほうが安定します。

値上げで離れた数量のうち、どれだけが隣の品目に移るか

交差価格弾力性の値そのものより、経営の判断に直接つながるのは「ある品目を値上げしたとき、離れた客のうち何割が同じカテゴリの他の品目に移るか」です。真のモデルで、現在の売価から1品目だけを1%値上げしたときに、その品目が失う数量と、同じカテゴリの他の品目が得る数量を計算しました。この記事では、後者を前者で割った値を「移り先の割合」と呼ぶことにします。あわせて、同じカテゴリの全品目を一斉に1%値上げしたときにその品目の数量が何%変わるか(自己弾力性に、その行の交差価格弾力性を足した値)も載せています。

品目自己弾力性(真)1%値上げで失う数量同カテゴリ他品目が得る数量移り先の割合カテゴリ一斉に1%上げたときの弾力性
T1 緑茶A 500ml-2.448.410.421.5%-1.65
T2 緑茶B 500ml-3.462.510.717.2%-2.65
T3 緑茶PB 500ml-3.147.511.624.5%-2.35
T4 緑茶A 2L-2.923.58.536.2%-2.15
T5 緑茶B 2L-2.920.68.641.7%-2.15
T6 緑茶PB 2L-3.226.08.030.9%-2.45
C1 炭酸C 500ml-2.837.14.411.8%-2.35
C2 炭酸D 500ml-3.343.84.39.9%-2.85
C3 炭酸C 1.5L-2.312.63.931.0%-1.85
C4 炭酸D 1.5L-3.015.24.026.4%-2.55
W1 水E 2L-2.924.13.313.8%-2.65
W2 水PB 2L-3.648.02.14.3%-3.35

「移り先の割合」の列は、品目によって4.3%から41.7%まで開いています。緑茶の2L(T4・T5・T6)は3割から4割と高く、T5 を値上げして離れた数量の41.7%は、緑茶の他の品目が受け止めます。一方、水の W2 は4.3%で、W2 を値上げして離れた客のほとんどはカテゴリの外へ出ていきます。この差は交差価格弾力性の値だけで決まるのではなく、相手の品目の販売数量の大きさにもよります。W2 の値上げで数量が増えるのは W1 だけで、W1 の数量は W2 より少ないので、移ってくる数量も小さくなります。緑茶は同じカテゴリに5品目の受け皿があり、しかも 500ml の T1・T2・T3 は数量が大きいので、2L を値上げしたときに受け止める量が多くなります。

右端の列は、カテゴリ全体の価格を一斉に動かしたときの、その品目の弾力性です。T1 は自分だけを動かすと-2.4ですが、緑茶の6品目を一斉に動かすと-1.65まで小さくなります(絶対値が小さいほど、値上げで数量が落ちにくい)。自分だけ値上げしたときに失う客の一部は、同じカテゴリの他の品目の値上げで戻ってくるからです。第4章で見たとおり、弾力性の絶対値が小さいほど、粗利を最大にする売価は高くなります。この列は、品目を1つずつ見て決めた売価が、カテゴリ全体で見ると安すぎる方向にずれやすいことを示しています。この点を次の節で確かめます。

1品目の最適とカテゴリの最適はずれる

T2(緑茶B 500ml)の売価だけを2円刻みで78円から168円まで動かし、他の11品目は現在の売価のままにして、T2 自身の粗利と、緑茶6品目の粗利の合計を真のモデルで計算しました。次の図の縦軸は、どちらも現在の売価(118円)のときからの変化です。

T2(緑茶B 500ml)の通常売価だけを78円から168円まで動かしたときの週あたり粗利の変化。グレーの線がT2自身の粗利、ネイビーの線が緑茶6品目の粗利の合計で、どちらも現在の売価118円のときを0としている。T2自身の粗利は96円で最大、緑茶カテゴリの粗利は106円で最大になり、両者の最適がずれている

T2 自身の粗利が最も大きくなるのは96円で、現在より週あたり11,895円増えます。一方、緑茶カテゴリの粗利の合計が最も大きくなるのは106円で、増え方は週あたり1,648円にとどまります。T2 自身の粗利だけを見て値下げすると、T1 や T3 から移ってきた客の分まで「T2 の成果」と数えることになり、最適とする売価が10円低くなります。

この差を、実際に10円の値下げ(118円→108円)で分解すると次のようになります。真のモデルで、T2 の数量は週あたり645.7増え、T2 自身の粗利は7,448円増えます。同じとき、緑茶の他の5品目の数量は合わせて94.2減り、その粗利は5,812円減ります。カテゴリの合計では1,636円の増加です。他の品目の減った数量は T2 の伸びた数量の14.6%に当たり、モデルの上では、これを隣の品目から移ってきた分と読むことができます(客一人ひとりの購買を追った数字ではありません)。粗利で見ると T2 の増えた7,448円の約8割が、他の品目の減少で打ち消されています。数量で14.6%しか奪っていないのに粗利で8割近くが消えるのは、奪われた T1(現在の売価138円・原価72円)の1本あたりの粗利が、値下げ後の T2(108円・原価68円)より大きいからです。

反対の向きの例もあります。T1 だけを10円値下げすると、真のモデルで T1 自身の粗利は2,177円増えますが、他の品目の粗利が4,324円減り、カテゴリでは2,147円の減少になります。T1 だけを20円値上げすると、T1 自身の粗利は7,762円減るのに、他の品目に移った客が粗利を7,949円生むので、カテゴリでは187円の増加です。品目の担当者が自分の品目の粗利だけで評価されていれば、T1 の値上げは「粗利を7,762円減らす施策」に見え、カテゴリの担当者には「わずかに粗利を増やす施策」に見えます。同じ施策の評価が、評価する範囲で逆になるということです。

第4章では、他の品目を現在の売価に固定して1品目ずつ粗利が最大の売価を求めると、C3 以外の11品目で、現在の売価がその品目の最適より高い(1品目ずつなら値下げが最適)という結果でした。T1 もその1つで、前の段落で見たとおり、138円から128円への値下げは T1 自身の粗利を増やします。ところが記事全体の基準(カテゴリ全体の最適化)は、T1 を138円から158円へ値上げしています。この食い違いの理由が、ここまで見てきたカニバリゼーションです。1品目の最適は、T1 の値下げで増える数量のすべてを T1 の成果として数え、その一部が T2 や T3 から移ってきた客であることを数えていません。前の節の移り先の割合の表で言えば、T1 の自己弾力性は-2.4ですが、緑茶の6品目が一斉に動くときの弾力性は-1.65で、カテゴリで見た T1 の需要は、1品目で見たときより値上げに強いということです。第4章で見たとおり、弾力性の絶対値が小さいほど粗利を最大にする売価は高くなるので、カテゴリで考えると T1 の最適は値上げの側に移ります。1品目の最適とカテゴリの最適は、解く問題が違うので、答えが逆向きになっても矛盾ではありません。

推定モデルでも同じ計算をしました。T2 の10円の値下げは、推定モデルではカテゴリの粗利を5,736円増やすと見込まれ、真のモデルの1,636円より大きく出ます。推定モデルでは、T2 の値下げで他の品目から奪う割合が9.2%と、真の14.6%より小さく見積もられているためです。章の初めの「交差価格弾力性とカニバリゼーション」の節の表(真の値と推定の値を並べた表)で、T2 の列の推定(T1 の行が0.070)が真の0.25より小さかったことがここに効いています。交差価格弾力性の推定の誤差は、値下げの効果を楽観する方向にも悲観する方向にも働きます。

1品目ずつ決めるか、カテゴリでまとめて決めるか

1品目の例で見たずれが、12品目の売価を決めるときにどれだけの差になるかを確かめました。比べたのは次の6通りの決め方です。どれも、売価の候補は基準と同じく現在の売価から10円刻みで上下4段(9通り)、そのうち現在の売価の上下15%以内のものに限りました。決めるときに使うのは、現実の企業と同じ立場の「推定モデル」です。決めた売価を、推定モデルと真のモデルの両方で評価しています。

  • A:1品目ずつ、他の11品目を現在の売価に固定して、その品目自身の粗利が最大の売価を選ぶ(品目の担当者が自分の品目の粗利だけで評価されている状態)
  • B:1品目ずつ、他の11品目を現在の売価に固定して、その品目が属するカテゴリの粗利の合計が最大の売価を選ぶ
  • C:カテゴリごとに全品目の売価を同時に選ぶ。制約は上下15%だけ
  • D:カテゴリごとに全品目の売価を同時に選ぶ。制約は上下15%・PB の20円差(PB を、同じ容量のナショナルブランド(NB、メーカーの商品)の最安値より20円以上安くする)・容量単価の順序のすべて(記事全体の基準)
  • E:D と同じ制約で同時に選ぶが、推定モデルの交差価格弾力性をすべて0に置き換える
  • F:D と同じ制約で同時に選ぶが、回帰の段階から他の品目の価格を入れずに推定し直したモデルを使う
決め方推定モデルが見込んだ粗利の改善真のモデルの粗利(週)真のモデルで評価した粗利の改善真のモデルの数量(週)基準の制約で破るもの
現在の売価比較の基準837,136円比較の基準13,585.0なし
A 1品目ずつ・自分の粗利だけ-1.02%825,975円-1.33%17,285.8なし
B 1品目ずつ・カテゴリの粗利+2.39%849,760円+1.51%14,695.8T3 の PB の20円差
C 全体で同時・上下15%だけ+2.40%850,911円+1.65%14,651.0T3 の PB の20円差
D 全体で同時・制約すべて(基準)+1.96%848,895円+1.40%14,782.0なし
E D と同じで交差を0に置き換え-1.02%825,975円-1.33%17,285.8なし
F D と同じで交差を入れずに推定-1.06%825,004円-1.45%17,308.2なし

最も大きな差は、何を目的にして決めたかで生まれています。A のように各品目が自分の粗利だけを見て売価を選ぶと、C3 を除く11品目が値下げになり(T1 は138円→128円、T4 は258円→228円など)、真のモデルで数量は13,585.0から17,285.8へ約27%増え、売上は1,952,870円から2,223,550円へ約14%増えます。それなのに粗利は837,136円から825,975円へ1.33%減ります。各品目が隣の品目から客を奪い合う値下げを、それぞれ「自分の粗利が増える施策」として選んだ結果です。数量と売上だけを見ていれば成功に見える価格改定が、粗利では現状より悪いという例です。

同じ1品目ずつの決め方でも、B のように評価の範囲をカテゴリの粗利の合計に広げると、真のモデルで+1.51%になり、基準の D(+1.40%)を上回ります。全品目を同時に選ぶ C は+1.65%で、B との差は週あたり1,151円です。この例題では、1品目ずつ決めるか同時に決めるかの差より、自分の品目の粗利で決めるかカテゴリの粗利で決めるかの差のほうがはるかに大きい、ということになります。ただし B と C は、PB の T3 を98円にしていて、同じ容量の NB の最安値(T2 の108円)との差が10円しかありません。PB は NB より20円以上安く、という基準の制約を破っています。制約を守ったうえで同時に選んだのが D です。C と D は決め方が同じで制約だけが違うので、C より粗利が小さいのは、この PB の制約の分です(C と D の真のモデルの粗利の差2,016円は、後の節で PB の20円差だけを外したときの増分と同じです)。B と D の差には、制約に加えて、1品目ずつ決めるか同時に決めるかという決め方の違いも入っているので、そのすべてを制約の分とは言えません。制約1つあたりの費用は後の節で測ります。

E と F は、交差価格弾力性を無視した場合です。E は、基準と同じ推定モデルから交差の項だけを0に置き換えて同時に最適化したもので、選ばれた売価は A とまったく同じになりました。交差の項が無ければ、各品目の粗利は自分の売価だけで決まるので、制約が無ければ、カテゴリで同時に選んでも「各品目が自分の粗利を最大にする」のと同じ答えになります。ただし E には PB の20円差と容量単価の順序という、品目どうしを結ぶ制約が入っているので、交差の項が0でも一般には A と同じ答えになるとは限りません。この例では、A が選んだ売価がたまたまこの2つの制約を破っていなかった(表の右端の列が「なし」)ため、E も同じ売価になりました。F は、回帰の段階から他の品目の価格を入れずに推定し直したモデルです。自己弾力性の推定値は基準とあまり変わらず(T1 は基準の推定-2.308に対して-2.202、T2 は-3.655に対して-3.551)、答えも E とほぼ同じで、真のモデルで-1.45%でした(第3章で、交差を入れずに推定したモデルで最適化した結果も、真のモデルで-1.45%でした)。つまり、この例題で粗利を落とす原因は、自己弾力性の推定の誤りではなく、最適化の段階で品目どうしの影響を数えていないことにあります。

念のため、真のモデルで決めた場合(データを作った側だけが計算できる参考)も計算しました。A の決め方は真のモデルで決めても-1.18%、B は+2.02%、C は+2.04%、D は+1.83%で、順序は推定モデルで決めた場合と同じでした。推定の誤差があってもなくても、自分の品目の粗利だけで売価を決めることが、カテゴリの粗利を損なう最大の原因になっています。

基準のモデルの構造を読む

ここからは、記事全体の基準の結果を出しているスクリプト baseline.py の構造を、要所を抜き出して読みます。基準のスクリプトは、推定・最適化・評価の3段でできています。1段目で販売履歴から品目ごとの需要の式(推定モデル)を作り、2段目で推定モデルの粗利が最大になる売価の組を探し、3段目で選んだ売価を真のモデルでも評価して、推定が楽観していた分を示します。基準の数字は、基準のスクリプトを1回実行した記録(以下、基準の記録)から引用します。この記事で「基準」と呼んでいるのは、このスクリプトの計算1つだけです。第2章ではその結果を、第3章では1段目の推定の式を紹介し、この章ではスクリプトの構造を読みます。章によって触れる段は違いますが、指しているものは同じです。

3段のつながりを、入力から順に並べると次のとおりです。

  1. 推定:販売履歴(104週×12品目)から、品目ごとの回帰で推定モデルを作る
  2. 最適化:推定モデルを使い、カテゴリごとに売価の組を全通り数え上げる。候補にするのは、価格の並びの制約(上下15%・PB の20円差・容量単価の順序)を満たす組だけ
  3. 評価:最適化で選んだ売価を真のモデルでも評価し、答え合わせをする

次のコードは、baseline.py の推定の関数 estimate のうち、1品目分の回帰の式を組み立てる部分と、推定モデルで数量を計算する関数 est_expected_qty を抜き出したものです(単独では動きません)。ここでの回帰は、販売数量の動きを、価格・販促・季節といった要因の重みつきの足し算で説明する式を、過去104週のデータに最もよく合うように当てはめる計算です。「最もよく合う」は、式の予測と実績の差を2乗して足した値が最小になること(最小二乗法)を指し、コードの np.linalg.lstsq がその当てはめを行う NumPy(Python の数値計算のライブラリ)の関数です。3行目の内包表記(条件に合う要素を集めたリストを1行で作る Python の書き方)は、元のコードで1つにまとめて書いている2つの条件を、同じ意味のまま2つの if に分けて書き直しています。

# baseline.py の estimate から抜き出し:品目 s の回帰
cat = SKUS.loc[s, "category"]
others = [o for o in SKU_IDS if o != s if SKUS.loc[o, "category"] == cat]
X = np.column_stack([np.ones(len(w)), lr[s].values] + [lr[o].values for o in others] +
                    [wide_promo[s].values, wide_post[s].values,
                     np.cos(2 * np.pi * w / 52.0), np.sin(2 * np.pi * w / 52.0)])
y = np.log(wide_q[s].values)
beta, *_ = np.linalg.lstsq(X, y, rcond=None)

# baseline.py の est_expected_qty:推定モデルの期待数量(年平均の季節・平常週)
def est_expected_qty(model, prices):
    lr = np.log(np.asarray(prices, float) / SKUS.price.values)
    return np.exp(model["const"] + model["own"] * lr + model["cross"] @ lr)

回帰の説明変数(X の列)は、定数、自分の価格(第1週の通常売価に対する実売価の比の log)、同じカテゴリの他の品目の価格(同じく log の比)、販促週、販促の翌週、季節の cos と sin です。目的変数(y)は販売数量の log です。両辺が log なので、自分の価格の係数がそのまま自己弾力性、他の品目の価格の係数がそのまま交差価格弾力性になります(第3章で説明した log-log 回帰の性質です)。他の品目として入れるのは同じカテゴリの品目だけなので、推定する係数は、緑茶の品目で11個、炭酸で9個、水で7個です。データは104週なので、緑茶の1品目あたり104個の観測から11個の係数を推定していることになります。第1節で見た交差価格弾力性のばらつきは、この「観測の数に対して係数が多い」ことと、価格が動いた週が限られていることから来ています。

est_expected_qty は、売価の組を受け取って推定モデルでの数量を返す関数です。季節の項と販促の項を入れていないので、季節を年平均にした販促の無い週(平常週)の期待数量になります。この記事で「粗利」と書くときの定義(年平均の季節・平常週の週あたり期待値)と一致させるためです。最後の model["cross"] @ lr が交差の効果で、行列 cross の行が影響を受ける品目、列が価格を動かす品目です。カテゴリをまたぐ組には係数を推定していないので、この行列のカテゴリをまたぐ部分は0のままです。この「カテゴリをまたぐ交差が0」という性質が、次の最適化の部分を軽くしています。

2段目の最適化は、売価の組が制約を満たすかを判定する関数 feasible と、全通りを数え上げる関数 optimize でできています。まず feasible を、baseline.py からそのまま抜き出します(単独では動きません。_ATTR は品目ごとの現在の売価・ブランド・容量を入れた辞書、MAX_CHANGE は0.15、PB_GAP は20です)。

def feasible(skus, prices):
    d = dict(zip(skus, prices))
    for s, p in d.items():                       # (a) 現在の売価から上下15%以内
        cur = _ATTR[s]["cur"]
        if abs(p - cur) > MAX_CHANGE * cur + 1e-9:
            return False
    for s, p in d.items():                       # (b) PB は同じ容量の NB の最安値より20円以上安く
        r = _ATTR[s]
        if r["brand"] == "PB":
            nb = [d[o] for o in d if _ATTR[o]["ml"] == r["ml"] if _ATTR[o]["brand"] != "PB"]
            if nb:
                if p > min(nb) - PB_GAP:
                    return False
    for a in d:                                  # (c) 同じブランドは大容量の1mlあたり単価が安い
        for b in d:
            ra, rb = _ATTR[a], _ATTR[b]
            if ra["brand"] == rb["brand"]:
                if ra["ml"] < rb["ml"]:
                    if d[b] / rb["ml"] >= d[a] / ra["ml"]:
                        return False
    return True

制約は3つで、どれも「売価の組を見て、満たすか満たさないかを判定する」形で書かれています(行末のコメントはこの章で付けたものです)。(a) は、価格改定の幅を現在の売価の上下15%以内に抑える条件です。一度に大きく動かすと顧客の受け止めが読めないことと、過去のデータに無い価格では推定モデルの当てにならないことの両方に対する歯止めです。(b) は、PB を、同じ容量の NB の最も安いものより20円以上安くする条件で、PB を「安さで選ばれる商品」として位置づける品揃えの方針を表しています。(c) は、同じブランドなら大容量のほうが1mlあたりで安い、という容量単価の順序です。大容量のほうが1mlあたりで割高になる並びは不自然なので、この記事の架空の設定では制約として入れています。(b) の20円という差の大きさは、この記事の架空の設定です。

次に、optimize です。同じく baseline.py からそのまま抜き出しました(単独では動きません)。

def optimize(qty_fn):
    """カテゴリごとに全通りを数え上げ、期待粗利が最大の売価の組を返す。"""
    best = SKUS.current.values.astype(float).copy()
    n_eval = 0
    for cat in CATEGORIES:
        skus = [s for s in SKU_IDS if SKUS.loc[s, "category"] == cat]
        idx = [SKU_IDS.index(s) for s in skus]
        grids = [price_grid(s) for s in skus]
        best_val, best_p = -1e18, None
        for combo in itertools.product(*grids):
            n_eval += 1
            if not feasible(skus, combo):
                continue
            p = best.copy()
            p[idx] = combo
            q = qty_fn(p)
            val = float(np.sum((p[idx] - SKUS.cost.values[idx]) * q[idx]))
            if val > best_val:
                best_val, best_p = val, combo
        best[idx] = best_p
    return best, n_eval

この関数の要点は2つあります。1つ目は、カテゴリごとに分けて数え上げていることです。推定モデルにも制約にもカテゴリをまたぐ項が無いので、緑茶の売価をどう選んでも炭酸と水の粗利は変わりません。したがって、カテゴリごとに粗利が最大の組を選び、それを並べたものが、12品目全体で粗利が最大の組になります。各品目の候補は9通りなので、分けて数えると 9の6乗(緑茶)+9の4乗(炭酸)+9の2乗(水)=531,441+6,561+81=538,083通りで、基準の記録の「調べた組 538,083 通り」と一致します。分けずに12品目をまとめて数えると 9の12乗=282,429,536,481通りで、約52万倍になります。カテゴリをまたぐ交差価格弾力性を本当に0と見なしてよいかは、分けて解けるかどうかを決める前提なので、売場の実態(たとえば緑茶と水のあいだで客が移るか)で確かめる必要があります。

2つ目は、候補を全部数えて最も良いものを選んでいるので、推定モデルの上では厳密に最適だということです。近似も探索の打ち切りもありません。この記事の実行環境(一般的なノートPC)での実測で、基準の記録では推定と最適化を合わせて1.0秒、この章のスクリプトで最適化だけを測り直した実行では1.04秒でした(同じPCで他の章の計算が並行して動いているので、時間は揺れます)。数え上げの中で feasible が判定を返すので、制約を満たす組だけが粗利の計算に進みます。この章で数えると、緑茶は531,441通りのうち上下15%を満たすのが11,025通り、3つの制約すべてを満たすのが9,520通り、炭酸は6,561通りのうち735通り(上下15%を満たすものはすべて他の制約も満たす)、水は81通りのうち上下15%を満たすのが9通り、すべてを満たすのが8通りでした。

基準の結果を読む

基準の記録によると、推定モデルの最適は、値上げ4品目(T1 138円→158円・T4 258円→288円・T5 238円→248円・C3 238円→268円)、値下げ4品目(T2 118円→108円・C1 148円→138円・W1 108円→98円・W2 78円→68円)、据え置き4品目(T3・T6・C2・C4)です。週あたりの粗利は、真のモデルで評価して現在の売価の837,136円から848,895円へ+1.40%、推定モデルが見込んだ改善は+1.96%、真の最適(データを作った側だけが知る上限)は852,462円で+1.83%でした。年換算(52週)では、真のモデルで粗利が611,476円増えます。次の図は、品目ごとに、上下15%・10円刻みで取れる候補(灰色の帯と白い点)と、推定モデルの最適(基準)、真のモデルの最適の位置を、現在の売価からの変化率で示したものです。

12品目それぞれについて、現在の売価から上下15%以内・10円刻みで取れる売価の候補を灰色の帯と白い点で、推定モデルの最適(基準)をネイビーの丸で、真のモデルの最適をグレーのひし形で、現在の売価からの変化率として示した図。T1・T4・C3は帯の上端、T2・W1・W2は帯の下端にネイビーの丸がある

図のネイビーの丸のうち、T1・T4・C3 は帯の上端、T2・W1・W2 は帯の下端にあります。12品目中6品目が「上下15%・10円刻み」で取れる端に当たっているので、一見すると、上下15%の制約がなければもっと大きく動かしたかったように見えます。そこで、上下15%の制約だけを外して(候補は10円刻みで上下40円のまま)推定モデルで解き直したところ、答えが変わったのは T4 だけで、288円から298円に上がりました。他の5品目は、制約を外しても同じ売価が選ばれています。端に当たっていることと、制約が実際に答えを縛っていることは別だということです。端に当たっている品目が多いときは、その制約を外して解き直し、答えが動くかどうかで確かめるのが確実です。

基準の結果をカテゴリ別・品目別に分けると、品目どうしの影響がはっきり見えます。真のモデルで評価した週あたりの粗利は、緑茶が503,586円から507,129円へ+3,542円(+0.70%)、炭酸が252,752円から256,634円へ+3,882円(+1.54%)、水が80,798円から85,133円へ+4,335円(+5.37%)でした。品目別では、値上げした T1 の粗利は133,022円から124,812円へ8,210円減り、T4 も4,084円減っています。一方、値下げした T2 は12,073円増え、据え置いた PB の T3 は1,191円、T6 は2,524円増えています。T1 と T4(緑茶A)を値上げして離れた客の一部が、T2 や PB に移り、そこで粗利を生んでいるということです。T1 だけを見れば「粗利を8,210円減らした値上げ」ですが、カテゴリでは粗利を増やす組合せの一部になっています。

この結果は、品目ごとの粗利の目標を持つ組織では、そのままでは受け入れられにくい形をしています。緑茶Aの担当者から見れば、自分の品目の数量が T1 で28.0%、T4 で25.4%減り(基準の記録の品目別の数量)、粗利も減る提案です。カテゴリの最適化を実際の価格改定に通すには、評価の単位を品目からカテゴリに移すか、少なくとも提案の中で「この品目の減少は、隣の品目の増加とセットである」ことを示す必要があります。

価格の並びの制約と、制約1つあたりの費用

制約は、経営や売場の方針を最適化に伝える手段です。ただし、制約を1つ入れるたびに、選べる売価の組は狭まり、粗利の最大値は下がるか、変わらないかのどちらかです。その差を「制約1つあたりの費用」として測っておくと、方針を続けるかどうかを、金額で判断できます。基準の3つの制約を1つずつ外し、推定モデルで解き直した結果が次の表です。売価の候補は基準と同じく10円刻みで上下40円の9通りです。「推定モデルが見込む増分」は推定モデルの最適の推定粗利の基準との差、「真のモデルで評価した増分」はその売価を真のモデルで評価した粗利の基準(848,895円)との差、「真のモデルの最適どうしの差」は、真のモデルで決めた場合の最適の粗利の、制約ありの真の最適(852,462円)との差です。どれも週あたりです。

外した制約推定モデルが見込む増分真のモデルで評価した増分真のモデルの最適どうしの差推定モデルの答えの変化
(a) 上下15%+468円-332円+953円T4 が288円→298円
(b) PB の20円差+3,662円+2,016円+1,718円T1 が158円→148円、T3 が88円→98円
(c) 容量単価の順序0円0円0円変化なし
(a)(b)(c) すべて+21,785円+6,538円+7,324円T1 148円、T2 98円、T3 128円、T4 298円、T5 268円、T6 168円

(c) 容量単価の順序は、外しても答えが変わらず、費用は0円でした。この例題では、500ml と 2L(または 1.5L)の容量の差が大きく、上下15%の範囲で売価をどう動かしても1mlあたりの単価の順序が逆転しないからです。費用が0の制約は無駄というわけではなく、将来、原価や容量の構成が変わったときに不自然な価格の並びが出るのを防ぐ歯止めとして残す価値があります。ただし、いま答えを縛っていないことは知っておく必要があります。

(b) PB の20円差は、この例題で最も高くつく制約です。外すと PB の T3 が88円から98円に上がり、NB の T1 が158円から148円に下がります。真のモデルで評価して週あたり2,016円、年換算(52週)で約10万5千円の粗利を、この方針のために手放していることになります。推定モデルは3,662円と見込んでいるので、推定モデルの数字だけで判断すると、方針の費用を大きめに見積もります。PB を NB より明確に安く見せることが、客数や来店の理由として粗利以上の価値を持つかどうかは、この週あたり約2千円と比べて経営が決めることです。

(a) 上下15%は、外すと推定モデルの上では468円増えると見込まれますが、真のモデルで評価すると332円減ります。外したことで選ばれた T4 の298円は、過去104週の T4 の実売価(168円〜258円)を40円上回る価格で、推定モデルが一度も観測していない範囲です。推定モデルはその範囲でも同じ弾力性が続くと仮定して答えを出しますが、その仮定の誤差が、制約を外して得られるはずの改善を打ち消しています。上下15%の制約は、方針であると同時に、推定モデルを当てにできる範囲の中に答えを留める安全装置として働いています。

3つの制約をすべて外すと、推定モデルは基準より週あたり21,785円多い粗利を見込みますが、真のモデルで評価すると基準より6,538円多いだけにとどまり、見込みの3割しか実現しません。現在の売価に対する粗利の改善率に直すと、推定モデルの見込みは+4.57%(基準は+1.96%)、真のモデルで評価した値は+2.19%(基準は+1.40%)です。PB の T3 は128円と、過去の実売価の上限88円を40円も上回ります。制約を外すほど、推定モデルの見込みと実際の差が広がるということです。真のモデルの最適どうしの差(+7,324円)を見ると、制約を外すことで取れる上限そのものは推定モデルで決めた場合とあまり変わらないので、差を生んでいるのは推定の誤差です。

もう1つ、10円刻み・末尾8円という端数の制約の費用も測りました。売価を連続した値にして、上下15%・PB の20円差・容量単価の順序はそのまま、SciPy の minimize(SLSQP 法、乱数で選んだ20通りの初期値)で解いた結果です。SLSQP は、初期値の近くで条件を満たす最良の点を探す方法で、見つかった点が連続の売価全体の中の最適であることまでは保証しません。そこで、初期値の乱数を5通り、初期値の本数を20本と100本に変えて解き直しました。見つかった最良の値は、真のモデルでは10通りすべて、推定モデルでは解が得られた9通りすべてで同じでした(推定モデルの乱数の1通りでは、20本の初期値がすべて収束せず解が得られませんでした。同じ乱数で100本にすると同じ値になりました)。以下の数字は、この「見つかった最良の連続の売価」での値です。推定モデルでは、見つかった連続の売価にすると推定粗利が10円刻みの基準より週あたり1,163円増えますが、その売価を真のモデルで評価すると、基準の売価より593円少なくなりました。真のモデルで探した場合は、見つかった連続の売価で853,691円となり、10円刻みの真の最適より1,229円多くなります。連続の売価の本当の最適はこれと同じか、それより大きいので、端数の制約の費用は、真のモデルの上では週あたり少なくとも約1,200円(粗利の約0.14%)ありますが、推定の誤差がある状態では、細かく刻んでもその分は取れないということです。推定の誤差の大きさを考えると、10円刻みの候補で十分だと考えています。

制約真のモデルでの費用(週)推定モデルで決めた場合に実際に取れる分(週)読み方
(a) 上下15%953円-332円(外すと損)推定モデルを当てにできる範囲に答えを留める安全装置
(b) PB の20円差1,718円2,016円品揃えの方針の値段。経営が価値と比べて決める
(c) 容量単価の順序0円0円いまは答えを縛っていない歯止め
10円刻み・末尾8円1,229円以上-593円(細かくすると損)推定の誤差の範囲では細かく刻む意味が薄い

表の「真のモデルでの費用」の列は、真のモデルで決めた場合の最適どうしの差(10円刻みの行は、連続の売価で見つかった最良の値との差なので下限)、「推定モデルで決めた場合に実際に取れる分」の列は、推定モデルで決めた売価を真のモデルで評価した差です。2つの列の符号が違う制約は、推定の誤差が大きいところで答えを守っている制約です。

全通りを数えられない規模では整数計画で書く

カテゴリの品目が増えると、全通りを数える方法は使えなくなります。各品目に9通りの候補があれば、品目が1つ増えるたびに組の数は9倍になり、カテゴリの品目数が12なら約2,824億通り、24なら約8×10の22乗通りになります(候補を上下15%以内に絞った場合の数は、後の節で計算します)。組の数が品目数の指数で増えるこの現象を組合せ爆発と呼びます。品目数の多い売場で同じ問題を解くには、売価の選択を整数計画(変数の一部が整数の値しか取らない最適化問題)として書き、ソルバー(最適化問題を受け取って解を返す専用のソフトウェア)に解かせます。

書き方の基本は、品目 i が候補 k の売価を取るかどうかを、0か1の変数 \( x_{ik} \) で表すことです。各品目について候補の変数の和を1にすれば、「候補から1つだけ選ぶ」が表せます。売価は \( \sum_k p_{ik} x_{ik} \) という変数の1次式になるので、PB の20円差や容量単価の順序は、売価どうしの1次の不等式としてそのまま書けます。自分の売価だけで決まる粗利も、候補ごとに計算しておいた値に \( x_{ik} \) を掛けて足すだけです。

難しいのは交差の効果です。品目 i の数量は、自分の売価だけでなく他の品目の売価でも変わるので、品目 i の粗利は「i の選んだ候補」と「j の選んだ候補」の組で決まります。この章では、推定モデルの交差の項を1次式で近似しました。

\( q_i \approx A_i(p_i) \times \left(1 + \sum_{j} \varepsilon_{ij} \log(p_j / p_j^{0})\right) \)

言葉で言い換えると、「品目 i の数量は、自分の売価だけで決まる部分 \( A_i \) に、他の品目の価格の変化率に交差価格弾力性 \( \varepsilon_{ij} \) を掛けて足したものを1に加えた倍率を掛けたもの」です。推定モデルの本来の式では、この倍率は交差の項の指数関数ですが、交差の項が小さいときは「1+交差の項」でよく近似できます。基準の売価で計算すると、交差の項は-0.0333から+0.0914の範囲で、指数関数と1次近似の差は最大でも0.393%でした。こうすると、粗利は「i の候補の変数」と「j の候補の変数」の積の和になります。0か1の変数どうしの積は、補助の変数 \( y \) を置き、「i が候補 k を選んだら、j の候補について足した y が1になる」という等式で結べば、1次式だけで正確に表せます。

小さな例で確かめます。品目 i と品目 j に候補が2つずつ(i は候補1・2、j は候補1・2)あるとし、i と j の候補の組合せ4通りそれぞれに補助の変数 y を1つずつ置きます。等式は「i の候補ごとに、その行の y の和が x と等しい」「j の候補ごとに、その列の y の和が x と等しい」の2種類です。i が候補2、j が候補1を選んだとき(\( x_{i2} = 1 \)、\( x_{j1} = 1 \)、残りの x は0)、等式を満たす y の値は次の表の1通りしかありません。

補助の変数i の候補j の候補値そうなる理由
y(1, 1)110i は候補1を選んでいないので、i の候補1の行の y の和は0
y(1, 2)120同じく、i の候補1の行の y の和は0
y(2, 1)211i の候補2の行の和が1、j の候補1の列の和が1になる組はこれだけ
y(2, 2)220j は候補2を選んでいないので、j の候補2の列の y の和は0

つまり y は、実際に選ばれた組合せのところだけが1になり、「i の候補2と j の候補1の組で決まる粗利」に y を掛けておけば、その組の粗利だけが目的に入ります。積 \( x_{i2} \times x_{j1} \) を直接書かずに、足し算の等式だけで同じことを表している、というのがこの書き方の要点です。次のコードは、この方法を PuLP(Python で整数計画を書き、ソルバーに渡して解かせるためのライブラリ)で書いたものです。

import sys, io, itertools
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8")
_keep = sys.stdout                       # baseline の import が stdout を包み直すので参照を残す
import numpy as np, pulp
from price_data import *
from baseline import estimate
m = estimate(history())
p0, cost = SKUS.price.values, SKUS.cost.values
for cat in CATEGORIES:
    S = [SKU_IDS.index(s) for s in SKU_IDS if SKUS.loc[s, "category"] == cat]
    C = {i: [p for p in price_grid(SKU_IDS[i]) if abs(p / SKUS.current.iloc[i] - 1) <= 0.15] for i in S}
    lr = {i: [np.log(p / p0[i]) for p in C[i]] for i in S}
    A = {i: [(p - cost[i]) * np.exp(m["const"][i] + m["own"][i] * r) for p, r in zip(C[i], lr[i])] for i in S}
    prob = pulp.LpProblem("price", pulp.LpMaximize)
    x = {(i, k): pulp.LpVariable(f"x{i}_{k}", cat="Binary") for i in S for k in range(len(C[i]))}
    obj = [A[i][k] * x[i, k] for (i, k) in x]                      # 自分の売価で決まる粗利
    for i in S:
        prob += pulp.lpSum(x[i, k] for k in range(len(C[i]))) == 1   # 候補から1つ選ぶ
    for i, j in itertools.combinations(S, 2):                       # 交差の効果(1次近似)
        y = {(k, l): pulp.LpVariable(f"y{i}_{j}_{k}_{l}", 0, 1) for k in range(len(C[i])) for l in range(len(C[j]))}
        for k in range(len(C[i])):
            prob += pulp.lpSum(y[k, l] for l in range(len(C[j]))) == x[i, k]
        for l in range(len(C[j])):
            prob += pulp.lpSum(y[k, l] for k in range(len(C[i]))) == x[j, l]
        obj += [(A[i][k] * m["cross"][i, j] * lr[j][l] + A[j][l] * m["cross"][j, i] * lr[i][k]) * y[k, l]
                for (k, l) in y]
    prob += pulp.lpSum(obj)
    price = {i: pulp.lpSum(C[i][k] * x[i, k] for k in range(len(C[i]))) for i in S}
    for i, j in itertools.permutations(S, 2):
        a, b = SKUS.iloc[i], SKUS.iloc[j]
        if (a.brand == "PB") & (b.brand != "PB") & (a.ml == b.ml):    # (b) PB は20円以上安く
            prob += price[i] <= price[j] - 20
        if (a.brand == b.brand) & (a.ml < b.ml):                     # (c) 大容量の1ml単価が安い
            prob += price[j] * a.ml <= price[i] * b.ml - 1
    prob.solve(pulp.PULP_CBC_CMD(msg=0, timeLimit=60))
    print(cat, pulp.LpStatus[prob.status],
          {SKU_IDS[i]: C[i][k] for (i, k) in x if x[i, k].value() > 0.5})
# 出力:
# 緑茶 Optimal {'T1': 148, 'T2': 108, 'T3': 88, 'T4': 288, 'T5': 238, 'T6': 178}
# 炭酸 Optimal {'C1': 138, 'C2': 128, 'C3': 268, 'C4': 218}
# 水 Optimal {'W1': 98, 'W2': 68}

コードの A は、上の式の \( A_i \)(自分の売価だけで決まる数量)そのものではなく、それに1本あたりの粗利(売価から原価を引いた額)を掛けた値です。つまり候補ごとの「自分の売価だけで決まる粗利」で、目的の式にはこの値をそのまま係数として入れています。上下15%の制約は、候補の段階で外れる売価を除いておく形で入れています(C の行)。容量単価の順序は、両辺に容量を掛けて割り算を消し、売価が整数であることを使って「1円以上安い」と書いています。ソルバーは PuLP に付属する CBC です。緑茶のカテゴリで、0か1の変数(x)が30個、補助の変数(y)が367個の問題になり、状態は Optimal(近似した問題の中では最適であることが証明された)、計算時間は0.07秒でした(この記事の実行環境での実測。以下同じ)。

答えを基準の数え上げと照合すると、12品目中10品目は一致しましたが、T1 が158円ではなく148円、T5 が248円ではなく238円になり、一致しませんでした。1次近似で書いた粗利と本来の推定モデルの粗利のわずかな差で、順位が入れ替わったためです。近似なしの推定モデルで評価すると、整数計画の答えの推定粗利は849,747円で、基準の849,826円より79円少なく、真のモデルで評価すると848,045円で、基準の848,895円より850円少なくなりました。推定モデルの上での差は粗利の0.01%に満たない一方で、真のモデルでは差が10倍以上に開いています。近似の誤差そのものは小さくても、ほぼ同点の候補の中から別のものを選ぶと、選んだ売価に対する推定の誤差の当たり方が変わるということです。

近似の精度を上げるために、近似の基準点を取り直す方法を試しました。上の式は「全品目が第1週の通常売価のとき」を基準にした近似ですが、1回解いた答えの売価を基準にして近似し直し(指数関数を、その点で値と傾きが一致する直線、つまり接線で置き換える)、もう一度解きます。答えが変わらなくなるまで繰り返すと、1回目の解き直しで T5 が248円になり、2回目で T1 が158円になって基準の数え上げと12品目すべて一致し、3回目は2回目と同じ答えだったので終了しました。解き直しにかかった時間は合計0.47秒です。ただし、この方法で最適が得られる保証はありません。この例では全通りを数えた答えがあるので一致を確かめられましたが、数えられない規模では確かめる手段がありません。近似した整数計画の答えは「推定モデルの上で最適に非常に近い答え」として扱い、近似の基準点を取り直して答えが動かないことを確かめる、というのが実務での使い方だと考えています。

交差の効果をまったく入れずに、自分の売価で決まる粗利だけで整数計画を解くと、答えは「1品目ずつ決めるか、カテゴリでまとめて決めるか」の節の E(交差を0に置き換えた場合)と同じになり、真のモデルで評価した粗利は825,975円(現在の売価より1.33%少ない)でした。交差の効果を近似してでも入れることの価値は、この差、週あたり約2万2千円(848,045円と825,975円の差)に表れています。

計算量の増え方

整数計画がどこまで大きな問題を扱えるかを、品目数を増やした架空のカテゴリで確かめました。共通データとは別の設定で、1つのカテゴリに n 品目を置き、原価・現在の売価・基準の数量・自己弾力性を乱数で作り(自己弾力性は-3.6〜-2.3)、全品目の組に交差の効果を置きました(各品目について、他の品目との交差価格弾力性の合計を0.75にそろえる)。候補は現在の売価の上下15%以内の10円刻みで、上の1次近似の整数計画で解いています。数え上げの時間は、この章で基準の数え上げを測り直した速さ(538,083通りを1.04秒、1秒あたり約52万通り)で組の数を割った見積りで、実際に数えたものではありません。

1つのカテゴリの品目数候補の組の数数え上げの見積り整数計画の0か1の変数補助の変数整数計画の状態と計算時間(実測)
6品目約1.1万通り0.02秒30367Optimal・0.08秒
12品目約1.7億通り330秒621,744Optimal・0.12秒
24品目約1.48京通り約910年1206,868Optimal・0.73秒
36品目約1.05×10の26乗通り約6.45兆年20019,394Optimal・4.43秒
1つのカテゴリの品目数を6・12・24・36と増やしたときの計算時間を対数目盛で示した図。グレーの線が全通りの数え上げの見積りで、品目数とともに直線的に(指数的に)増え、24品目で1年を超える。ネイビーの線が整数計画の実測で、36品目でも数秒にとどまる

表の6品目の行の変数の数(30と367)は、「全通りを数えられない規模では整数計画で書く」の節の緑茶6品目の問題と同じですが、これは偶然の一致です。変数の数は品目ごとの候補の数だけで決まり、この架空のカテゴリの6品目は、上下15%以内の候補の数が3・3・5・5・7・7通りと、緑茶6品目と同じ組合せになりました(0か1の変数はその合計の30、補助の変数は品目の組ごとの候補の数の積の合計の367)。売価・原価・弾力性は違う問題なので、計算時間は緑茶の0.07秒に対して0.08秒と、同じにはなっていません。

表の「数え上げの見積り」の列は、品目数が6から12に増えるだけで0.02秒から330秒になり、24品目で約910年、36品目では約6.45兆年になります。対数目盛の図ではほぼ直線で、これが指数的な増え方です。一方、「整数計画の状態と計算時間」の列は、36品目でも4.43秒で Optimal になりました。変数の数は、補助の変数が品目の組の数に比例するので品目数のおよそ2乗で増え、計算時間もそれにつれて伸びています。ただし、この実験の範囲(この章の架空の設定・1次近似・CBC で4つの規模を1回ずつ測った結果)では、全通りの数え上げのような指数的な伸びは見えていない、というところまでです。整数計画がどんな問題でも規模に対して穏やかにしか重くならない、ということを示すものではありません。

この結果を読むときの注意が2つあります。1つは、整数計画の答えは1次近似の問題の最適であって、本来の推定モデルの最適であることは、この規模では確かめられていないことです。前の節で見たとおり、基準の規模でも1次近似の答えは基準と2品目で違いました。もう1つは、計算時間は問題の作り方に強く依存することです。ここでは全品目の組に交差の効果を置いたので補助の変数が多くなっていますが、実際の売場で交差の効果が同じ容量・同じブランドの間に限られるなら、補助の変数はずっと少なくなります。逆に、候補の数を増やすと補助の変数は候補の数の2乗で増えます。共通データの緑茶6品目で、上下15%の制約を外して候補を上下4段・6段・8段(9・13・17通り)に広げると、補助の変数は1,215・2,535・4,335個、計算時間は0.09・0.15・0.25秒でした。このとき T4 の答えは298円・318円・338円と、候補を広げるたびにその上端まで上がっていきます。推定モデルは観測した範囲の外でも同じ弾力性が続くと仮定しているので、候補の範囲を広げれば広げただけ、答えは観測していない価格へ出ていきます。計算が速くなったからといって候補の範囲を広げると、計算量ではなく推定の当てにならなさが問題になるということです。

経営の判断に翻訳する

この章の結果を、経営の判断に使える形に整理します。1つ目は、価格の評価の単位を品目ではなくカテゴリに置くことです。各品目が自分の粗利だけで売価を決めると、この例題では数量が約27%、売上が約14%増えるのに、カテゴリの粗利は1.33%減りました。年換算すると、週あたり11,161円(837,136円と825,975円の差)の52週分で、約58万円の粗利を失います。しかもこの価格改定は、数量と売上だけを見ている限り成功に見えます。品目別の売上や数量の目標で価格の担当者を評価している組織では、この型の損失が起きていても数字の上では見えにくいので、少なくとも値下げの効果をカテゴリの粗利で測る仕組みを先に作る必要があります。

2つ目は、制約を「方針の値段」として見ることです。この例題では、PB を NB より20円以上安くする方針は週あたり約2千円(年約10万円)の粗利と引き換えでした。容量単価の順序の制約は、いまは費用0円です。上下15%の改定幅の制約は、外すと推定モデルの上では得に見えるのに、真のモデルでは損になりました。制約を外して解き直し、粗利の差を測るのは数秒の計算でできるので、価格の方針を決める会議には、方針ごとの値段を並べた表を持ち込むことが有効だと考えています。方針を続けるか変えるかは、その値段と、方針が守っている価値(PB の位置づけ、顧客の受け止め、推定の誤差からの保護)を比べて経営が決めることです。

3つ目は、カテゴリ全体の最適化が品目の担当者にとって不利に見える提案を含むことです。基準の結果では、緑茶Aの T1 と T4 の粗利が合わせて約1万2千円減り、その分以上を T2 と PB が取り返す形でカテゴリの粗利が増えていました。品目ごとの粗利の減少を説明なしに提示すると、提案は通りにくく、通っても現場で元に戻されがちです。提案には、どの品目の減少がどの品目の増加とセットになっているかを、カテゴリ別・品目別の表で添えるのが筋だと考えています。

4つ目は、推定の当てにならない範囲に答えを出させないことです。制約を外すほど、推定モデルの見込みと真のモデルでの実際の差は広がり、すべての制約を外すと見込みの3割しか実現しませんでした。過去に付けたことのない価格を最適化の答えに含める場合は、その品目について第10章で扱う価格の実験で確かめてから広げるのが安全です。

この章の要点は3つです。第一に、品目どうしの交差価格弾力性とカニバリゼーションを無視して、品目ごとに自分の粗利を最大にすると、数量と売上は伸びてもカテゴリの粗利は減ります。この例題では、最適化の段階で交差の効果を入れるかどうかが、粗利の増減の向きを決めていました。第二に、基準のスクリプトは、品目ごとの回帰で推定モデルを作り、カテゴリをまたぐ交差が0であることを使ってカテゴリごとに全通りを数え上げ、推定モデルの上で厳密な最適を出しています。制約を1つずつ外して解き直すと、PB の20円差が最も高くつき、上下15%の制約は推定の誤差から答えを守る役割を果たしていました。第三に、品目が増えて数え上げられない規模では、売価の候補ごとの0か1の変数で整数計画として書き、交差の効果を1次近似すれば、36品目でも数秒で解けます。ただし近似の答えは基準と2品目で食い違い、近似の基準点を取り直して初めて一致しました。次の第6章では、通常売価から一時的な販促と値引きに話を移し、販促の効果の分解と、販促カレンダーの最適化を扱います。

この章を深めたい方への参考書籍

『しっかり学ぶ数理最適化 モデルからアルゴリズムまで』(梅谷俊治、講談社):線形計画・非線形計画・整数計画と組合せ最適化を、定式化からアルゴリズムまで扱う教科書です。整数計画の章には、論理的な制約条件や非凸な非線形関数の近似といった定式化の節があり、この章で行った「候補ごとの0か1の変数で選ぶ」「非線形の粗利を1次式で扱えるように書き換える」ことの考え方を、一般的な形で学び直すのに向いています。分枝限定法など、CBC のようなソルバーが内部で行っている解き方の章もあります。

『Pythonではじめる数理最適化(第2版) ケーススタディでモデリングのスキルを身につけよう』(岩永二郎・石原響太・西村直樹・田中一樹、オーム社):前半のチュートリアルと後半のケーススタディで構成され、学校のクラス編成や割引クーポンキャンペーンの最適化などの実務的な題材を Python で定式化して解く本です。この章のように、業務の方針を制約として書き、結果を業務の言葉で読み直す作業を、別の題材で練習するのに役立ちます。

第6章 販促と値引きを設計する

第5章では、同じカテゴリの品目どうしが互いの売れ行きを奪い合う関係を入れたうえで、12品目の通常売価をまとめて最適化しました。そこで決めたのは、何週も続けて付けておく「いつもの値段」です。一方、食品スーパーの売場では、通常売価とは別に、特定の週だけ値段を下げてチラシに載せ、売場の目立つ場所に並べる販促(特売)が繰り返し組まれます。この章では、第2章で用意したサンプルデータ(架空の食品スーパーの飲料12品目・104週)を使い、1回の販促が粗利をどう動かすかを4つの効果に分けて測り、見た目の売上の伸びと正味の粗利がどれだけ違うかを確かめます。そのうえで、13週の間に「どの品目を・何週目に・何%引きで」販促するかを整数計画で決める販促カレンダーの最適化を解き、最後に、頻繁な特売に頼るやり方と毎日低価格のやり方の違いを、文献で確かめた範囲で整理します。

この章では、粗利の数え方を次のようにしています。記事全体で「粗利」は「年平均の季節・平常週の週あたり期待値」と定めていますが、販促の効果は販促の週だけでなく翌週にも及ぶので、1回の販促の評価は「販促の週と翌週の2週間の合計」で行います。季節は年平均(季節の効果0)です。販促カレンダーの節では、夏の13週に翌1週を足した14週の合計を、季節の効果を入れて計算します。どちらの場合も、販促をしなかった場合の粗利との差で効果を表し、「粗利の改善」はその差を販促なしの粗利で割った増減率です。

1回の販促の効果は4つに分かれる

販促の週に販促した品目の販売数量が増えるのは、目で見て分かる効果です。しかし、その増えた数量の中身は1種類ではありません。共通データの真のモデル(データを作った側だけが知っている本当の需要の式)は、販促の効果を次の4つの部品の組み合わせとして作ってあります。1つ目は価格の効果で、売価が下がったぶん、自己弾力性に応じて数量が増える効果です。2つ目はチラシや売場の陳列による上乗せで、価格とは別に、販促の週であるというだけで数量を押し上げる効果です。真のモデルではこれが log で +0.25、倍率にすると約1.284倍に設定されています。3つ目は販促の翌週の落ち込みで、買いだめをした客が翌週に買わなくなる反動です。真のモデルでは log で -0.10、倍率で約0.905倍です。4つ目は、同じカテゴリの他の品目からの移動です。ある品目が安くなると、同じカテゴリの他の品目を買うはずだった客の一部がそちらへ移り、他の品目の数量が減ります。第5章で扱った交差価格弾力性が、販促の週にはこの形で現れます。

販促の翌週の落ち込みは、マーケティングの研究ではポストプロモーション・ディップ(販促後の落ち込み)と呼ばれています。ファン・ヘールデとレーフランクとウィッティンクの論文(Journal of Marketing Research、2000年、第37巻第3号)は、家計単位の購買記録の分析から、客は販促に反応して買う時期を早めたり買う量を増やしたりするので、店舗の売上には販促の翌週以降に落ち込みが出るはずだと予想されるのに、店舗単位のデータではその落ち込みがめったに見つからない、という問題から出発しています。著者らは前後の週への影響を表す3種類のモデルを、ツナ缶とトイレットペーパーの2つのカテゴリの店舗単位のデータに当てはめ、落ち込みの大きさを、販促の週の売上の増加の4%から25%と推定しました。落ち込みは「無い」のではなく「見えにくい」ものだ、というのがこの論文の結論の向きです。この章でも、あとで共通データの販売履歴を使って、落ち込みが見えにくくなる理由の1つを確かめます。

4つの効果がどう組み合わさるかを、1つの例で数えます。緑茶A 500ml(T1)の現在の通常売価は138円(架空。以下この章の売価・原価・粗利はすべて架空の設定値です)で、原価は72円です。これを「20%引き」で1週間販促します。共通データの販売履歴と同じ規則で、値引き後の価格を10円単位に丸めて末尾を8円にそろえると、販促価格は108円になり、実際の値引き率は21.7%です。この販促を、年平均の季節のもとで真のモデルに通した結果が次の表です。

項目数量(本)説明
平常週の T1 の数量2,015.5販促しない週の期待数量
販促週の T1 の数量4,660.7平常週の約2.31倍
見た目の伸び+2,645.2販促週の数量から平常週の数量を引いた値
うち価格の効果+1,614.2138円→108円の値下げだけで増える分
うちチラシ・陳列の上乗せ+1,030.9値下げした数量にさらに約1.284倍が掛かる分
翌週の反動-191.8翌週の T1 の数量の減少
他品目からの移動-248.1販促週の、緑茶の他の5品目の数量の減少の合計

表の「見た目の伸び」の2,645.2本のうち、約6割(1,614.2本)は価格を下げたことによる増加で、約4割(1,030.9本)がチラシと陳列による上乗せです。ここで注意したいのは、真のモデルでは上乗せは値引きの深さによらず一定の倍率で掛かる、と設定していることです。値引きを深くすると価格の効果は増えますが、上乗せの倍率は変わりません。この性質は、あとで「どの値引き率が得か」を考えるときに効いてきます。一方、翌週の反動で191.8本、他品目からの移動で248.1本が失われます。販促した品目だけを見ると2,645.2本の増加ですが、カテゴリと2週間を合わせて見ると、増えた数量はそれより440本ほど少なくなります。

他品目からの移動の大きさについては、研究で示されている値と比べておく必要があります。ファン・ヘールデとグプタとウィッティンクの論文(Journal of Marketing Research、2003年、第40巻第4号)は、家計単位のデータを使った従来の研究で、販促の弾力性の平均約74%がブランドの切り替え(他ブランドからの移動)に帰属すると報告されてきたことを取り上げ、これは「販促で100個増えたら他ブランドが74個減る」という意味ではないと指摘しました。著者らは数量の単位で測る分解の式を導き、既存の研究結果に当てはめると、販促による数量の増加のうち同じカテゴリの他ブランドの損失に当たるのは約33%だったと報告しています。この章の例では、他品目からの移動は見た目の伸びの約9.4%(248.1÷2,645.2)で、論文の約33%より小さくなっています。共通データの交差弾力性(同じ容量の他ブランドで0.25など)は架空の設定であり、現実のカテゴリではこの移動がもっと大きい可能性があります。移動が大きいほど、次の節で見る正味の粗利は小さくなります。

1回の販促による数量の変化を4つの効果に分ける概念図の図

見た目の伸びと、販促の正味の粗利

数量の次は粗利です。販促の評価で最も起きやすい誤りは、販促した品目の販促週の売上や数量の伸びだけを見て、その販促を成功と判断することだと考えています。売上の伸びは粗利の伸びではなく、販促した品目の粗利の伸びはカテゴリ全体の粗利の伸びではなく、販促の週の伸びは2週間の伸びではありません。この3つのずれをすべて差し引いたものを、この章では販促の正味の粗利と呼びます。式で書くと次のとおりです。

\( \text{正味の粗利} = (\text{販促品の粗利の増減}) – (\text{翌週の反動で減る粗利}) – (\text{他品目で減る粗利}) \)

言葉で言い換えると、「販促した品目が販促の週に稼いだ粗利の増減から、翌週に売れなくなった分の粗利と、同じカテゴリの他の品目が売れなくなった分の粗利を引いたもの」です。式の後ろの2つの項は、減った粗利の大きさ(正の値)として書いています。次のコードと出力では、この2つを負の値(翌週の反動 -12,659円など)として持ち、3つを足して正味の粗利を出しているので、計算の結果は同じです。販促品の粗利の増減はさらに2つに分かれます。1つは増えた数量に販促価格での1本あたり粗利を掛けた「増えた数量の粗利」、もう1つは「もともと売れたはずの数量まで値引きして売ったことによる損」です。後者は見落とされやすい項目で、平常週でも売れた2,015.5本にも30円の値引きが適用されるため、その分の粗利が失われます。

前の節の T1 の20%引きについて、この計算を行うコードが次のものです。共通データの真のモデルの関数 true_expected_qty を、販促しない週・販促の週・販促の翌週の3回呼び、差を取っているだけです。

import sys, io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8")
import numpy as np
from price_data import *

cur, cost = SKUS.current.values.astype(float), SKUS.cost.values.astype(float)
i = SKU_IDS.index("T1")
pp = np.round(cur[i] * (1 - 0.20) / 10) * 10 - 2       # 20%引きを10円単位に丸めて末尾8円
e = np.zeros(12); e[i] = 1                              # 販促する品目の印
pr = cur.copy(); pr[i] = pp
base = true_expected_qty(cur)                           # 販促しない週
promo = true_expected_qty(pr, promo=e)                  # 販促の週
after = true_expected_qty(cur, post_promo=e)            # 販促の翌週
m = cur - cost                                          # 通常売価での1本あたり粗利
item = (pp - cost[i]) * promo[i] - m[i] * base[i]       # 販促品の粗利の増減
dip = m[i] * (after[i] - base[i])                       # 翌週の反動
others = np.arange(12) != i
cann = np.sum(m[others] * (promo[others] - base[others]))   # 他品目の粗利の減少
print("販促価格 %d円 / 販促品の粗利 %+.0f円" % (pp, item))
print("翌週の反動 %+.0f円 / 他品目 %+.0f円" % (dip, cann))
print("正味の粗利 %+.0f円 / 値引きの原資 %.0f円" % (item + dip + cann, (cur[i] - pp) * promo[i]))
# 出力:
# 販促価格 108円 / 販促品の粗利 +34761円
# 翌週の反動 -12659円 / 他品目 -13848円
# 正味の粗利 +8254円 / 値引きの原資 139820円

出力の内訳を図にしたのが次のグラフです。左から、増えた数量の粗利(+95,226円)、もともと売れた分の値引きによる損(-60,465円)、翌週の反動(-12,659円)、他品目からの移動(-13,848円)を積み上げ、右端が正味の粗利です。

T1(緑茶A 500ml)を20%引きで1週販促したときの粗利の分解を示す滝グラフ。増えた数量の粗利がプラス95,226円、もともと売れた分の値引きがマイナス60,465円、翌週の反動がマイナス12,659円、他品目からの移動がマイナス13,848円で、正味の粗利はプラス8,254円

販促品だけを見た粗利の増減は +34,761円ですが、正味の粗利は +8,254円で、その約24%しか残りません。売上で見るとさらに印象がずれます。販促週の T1 の数量は平常週の約2.31倍なので、販促週の T1 の売上だけを見れば大成功に見えます。ところが、粗利で2週間・カテゴリ全体を見ると、この販促が生んだのは12品目合計の粗利の1%にも満たない額です。正味の粗利 +8,254円は2週間の合計なので、比べる相手も同じ2週間にそろえます。現在の売価での12品目合計の週あたり粗利は837,136円(記事全体の基準の数字。第2章で結果を紹介し、第5章でスクリプトの構造を説明した計算です)で、販促なしの2週間の合計は1,674,272円です。+8,254円はその約0.49%に当たります。

コードの最後に出している値引きの原資は、この章では \( (\text{通常売価} – \text{販促価格}) \times \text{販促週の販売数量} \) と定義します。販促価格で売った本数すべてについて、通常売価との差額を合計したもので、販促のために手放した金額の大きさを表します。T1 の20%引きでは139,820円で、正味の粗利8,254円の約17倍です。この章の計算には、取引先からの協賛金のような値引きの補填を入れていません。値引きの一部を取引先が負担する取り決めがある場合は、その額を正味の粗利に足して評価します。

同じ計算を、12品目それぞれについて、値引き率の5段階(10%・15%・20%・25%・30%)で行いました。値引き後の価格を10円単位に丸めるため、品目によっては隣り合う段階が同じ販促価格になります(T1 は10%引きと15%引きがどちらも118円)。重複を除くと、販促価格の候補は12品目で49通りです。主な結果を品目ごとに抜き出したのが次の表で、「正味の粗利(真のモデル)」と「正味の粗利(推定モデル)」の列は、どちらも2週間の合計です。

品目販促価格(実際の値引き率)販促週の数量の伸び(本)正味の粗利(真のモデル)正味の粗利(推定モデル)値引きの原資
T1 緑茶A 500ml118円(14.5%)+1,752.8+18,736円+30,082円75,366円
T1 緑茶A 500ml108円(21.7%)+2,645.2+8,254円+18,704円139,820円
T1 緑茶A 500ml98円(29.0%)+3,869.2-11,829円-2,426円235,386円
T2 緑茶B 500ml108円(8.5%)+1,351.0+21,106円+11,943円31,888円
T2 緑茶B 500ml98円(16.9%)+2,599.3+20,414円+15,915円88,743円
T2 緑茶B 500ml78円(33.9%)+7,803.8-30,480円-24,362円385,664円
C3 炭酸C 1.5L208円(12.6%)+412.3+2,808円+3,308円28,847円
C3 炭酸C 1.5L168円(29.4%)+1,022.2-24,145円-19,833円110,007円
W2 水PB 2L68円(12.8%)+1,470.7+13,693円+15,502円28,027円
W2 水PB 2L48円(38.5%)+8,488.6-31,401円-29,274円294,618円

表から読み取れることは3つあります。1つ目は、値引きを深くするほど「販促週の数量の伸び」の列は大きくなるのに、「正味の粗利(真のモデル)」の列はある所から下がり、マイナスに転じることです。W2 の38.5%引きは、販促週の数量が8,488.6本も増えるのに、正味の粗利は -31,401円です。数量の伸びで販促を評価すると、最も損な販促を最も成功した販促と取り違えます。2つ目は、真のモデルで正味の粗利が最大になるのは、12品目すべてで5段階のうち最も浅い「10%引き」の段階だったことです。前の節で述べたとおり、真のモデルではチラシと陳列の上乗せが値引きの深さによらず一定なので、浅い値引きで上乗せを取り、もともと売れる分の値引きの損を小さく抑えるのが得になります。ただし、これは共通データの真のモデルの設定から出た結論です。上乗せが値引きの深さとともに大きくなる売場では、最適な深さは別の所に来るので、この結論はそのまま使えません。値引きの深さと上乗せの関係は、自社の販売履歴で、値引きの段階ごとに上乗せを推定して確かめる必要があります。3つ目は、49通りのうち正味の粗利(真のモデル)がプラスになるのは28通りで、残りの21通りは販促するほど粗利が減ることです。C3 は208円(12.6%引き)の1通りだけがプラスで、その額も2,808円にとどまります。弾力性が小さい品目(C3 の真の自己弾力性は -2.3)は、値下げしても数量があまり増えないので、販促に向きません。

販売履歴の「見た目の伸び」には何が混ざっているか

ここまでは真のモデルを使ったので、4つの効果をきれいに分けられました。現実の企業には真のモデルが見えないので、手元にあるのは販売履歴だけです。そこで、販売履歴から素朴に販促の効果を測ると何が起きるかを確かめます。最も素朴な測り方は、品目ごとに「販促週の平均数量÷平常週(販促週でも販促の翌週でもない週)の平均数量」を出すことです。共通データの104週の販売履歴でこれを計算すると、12品目の平均で3.073倍でした。品目別では C3 の2.383倍から W2 の4.242倍まで開いています。真のモデルでチラシと陳列の上乗せだけを取り出すと1.284倍なので、見た目の倍率はその2倍以上です。

見た目の倍率に何が混ざっているかを、真のモデルの部品で分けたのが次の表です。販売履歴の販促週は108行、販促の翌週は106行、平常週は1,034行あります。

部品販促週の平均の倍率説明
値下げによる価格の効果2.164倍(中央値1.880倍)販売履歴の販促の実際の値引き率は平均21.1%(7.8%〜38.5%)。真の自己弾力性で換算
チラシ・陳列の上乗せ1.284倍真のモデルの設定値(log で +0.25)
季節1.075倍(平常週は1.003倍)販促が夏に多く組まれているため、販促週は平常週より季節の山に寄っている
見た目の倍率(販売履歴)3.073倍販促週の平均数量÷平常週の平均数量を品目ごとに出し、12品目で平均

表の「販促週の平均の倍率」の列の上から3つを掛け合わせると約3.0倍で、見た目の倍率の大半はこの3つで説明できます(平均の掛け算なので厳密な分解ではありません)。見た目の倍率のうち、チラシと陳列だけの効果は一部で、最も大きいのは値下げそのものの効果です。さらに季節の山が約7%(1.075÷1.003)上乗せされています。この見た目の倍率を「販促の効果」として次の販促計画に使うと、夏に組んだ販促の実績で、季節の山まで販促の手柄と数えてしまいます。第3章で、季節を入れずに推定すると夏の販促と需要の山が重なって弾力性を取り違えることを確かめましたが、同じ重なりは販促の効果の測り方にも入り込みます。

翌週の反動は、さらに見えにくくなっています。販売履歴で「販促の翌週の平均数量÷平常週の平均数量」を品目ごとに出すと、12品目の平均で0.969倍でした。真のモデルの反動は0.905倍なので、履歴の上では反動の3分の1ほどしか見えていません。12品目のうち5品目では、翌週の倍率が1を超えていて、反動どころか翌週も売れているように見えます。原因は季節です。販促の翌週も夏に多いので、季節の倍率の平均は翌週で1.080倍と、平常週の1.003倍より高くなっています。販売履歴の数量を真のモデルの季節の倍率で割り戻してから同じ計算をすると、翌週の倍率は12品目の平均で0.893倍になり、1を超える品目は0になりました。前に紹介したファン・ヘールデらの論文が出発点にした「店舗単位のデータでは販促後の落ち込みがめったに見つからない」という現象の理由は1つではなく、論文はさまざまな要因が重なって落ち込みが複雑な形になることを前提にモデルを組んでいます。この章の共通データで確かめられたのは、そのうち「季節の山と販促の時期が重なると落ち込みが隠れる」という1つの仕組みだけです。

実務への示唆ははっきりしています。販促の効果を測るときは、少なくとも価格の効果・季節・販促の翌週を同時に入れた回帰で推定し、見た目の倍率をそのまま使わないことです。基準の推定(第3章で式を説明した、品目ごとの最小二乗法)は、まさにこの形で、自分の価格・同じカテゴリの他品目の価格・販促の印・販促の翌週の印・季節の cos と sin を同時に入れています。その推定結果では、チラシと陳列の上乗せ(log)の12品目の平均は0.257(真の値0.25)、翌週の反動の平均は -0.109(真の値 -0.10)で、平均ではほぼ真の値を取り戻しています。ただし品目ごとに見ると、上乗せの推定は0.159(T2)から0.406(C2)まで開いています。1品目あたりの販促週は4〜15週しかなく、その少ない週から上乗せを推定しているためです。

推定モデルで販促を評価すると何がずれるか

品目ごとの上乗せの推定のばらつきは、販促の判断にどれだけ響くでしょうか。「見た目の伸びと、販促の正味の粗利」の節の、品目と販促価格ごとの表で、「正味の粗利(真のモデル)」と「正味の粗利(推定モデル)」の列を並べたのはこれを見るためです。推定モデルは、基準の推定(第2章で用意した販売履歴104週から品目ごとに推定したもの)を使い、同じ49通りの販促価格について、推定モデルの中で正味の粗利を計算しました。

49通りのうち、正味の粗利のプラス・マイナスが真のモデルと推定モデルで食い違ったのは4通りでした。T3 の68円(22.7%引き)は真のモデルでは +2,003円なのに推定モデルでは -4,743円、T4 の208円(19.4%引き)は真 +4,223円に対して推定 -5,201円、C1 の108円(27.0%引き)は真 +2,729円に対して推定 -3,091円、W1 の78円(27.8%引き)は真 -1,329円に対して推定 +2,639円です。どれも、正味の粗利がプラスマイナス数千円の、損得の境目にある販促です。品目ごとに最も得な値引きの段階は、12品目中11品目で真のモデルと推定モデルが一致し、食い違ったのは T2 だけでした(真のモデルでは10%引きの108円、推定モデルでは15%引きの98円が最大)。T2 は上乗せの推定が0.159と、12品目で最も真の値0.25から低く外れた品目です。

金額の大きさも見ておきます。T1 の20%引きでは、正味の粗利の推定は +18,704円で、真の +8,254円の2倍以上を見込んでいます。T1 の上乗せの推定は0.317で、真の0.25より大きく出ています。ほかの推定が同じなら、上乗せが大きく出た品目では販促を過大評価し、小さく出た品目では過小評価します。どの品目がどちらに外れているかは、現実には分かりません。販促の計画を推定モデルで作るときは、損得の境目にある販促(正味の粗利が小さい販促)の判断は推定の誤差で簡単にひっくり返る、と考えておくのが安全です。推定の不確かさそのもの(標準誤差・信頼区間)の扱いは第3章で、販促の効果を実験で確かめる方法は第10章で扱います。

販促カレンダーを整数計画で書く

1回の販促の損得が測れるようになったら、次は複数の販促の組み合わせです。売場では、数か月先までの週ごとに、どの品目をどの値引き率で販促するかを決めた販促カレンダー(販促の計画表)を作ります。品目と週と値引き率の組み合わせは非常に多く、しかもチラシに載せられる品目数、同じ品目を続けて販促しないこと、値引きに使える金額の上限など、いくつもの条件がかかります。この組み合わせの中から正味の粗利の合計が最も大きい計画を選ぶのが、販促カレンダーの最適化です。

この問題は研究でも扱われています。コーエン、レオン、パンチャムガム、ペラキス、スミスの論文(著者名の原綴りは Cohen、Leung、Panchamgam、Perakis、Smith。Operations Research、2017年、第65巻第2号)は、オラクル・リテール(Oracle Retail)との共同研究として、食品小売の1品目について有限の期間の各期の価格を選び、小売の利益を最大にする問題を定式化しました。論文の要旨によれば、販促後の落ち込みを含む需要の関数を使うと目的関数は非線形になり、問題は一般に NP 困難(規模が大きくなると厳密に解くのが急に難しくなる問題の種類)ですが、著者らはこれを線形の整数計画で近似する方法を提案し、その近似の解の利益が最適な利益からどれだけ離れうるかの保証を示しています。食品小売の販売データでの検討では、この方法の販促計画で利益が3%増える可能性があり、一部の業務上の制約を緩めれば5%増える可能性がある、と報告しています。この章の定式化も、同じく「非線形の問題を、販促1回ごとの効果の和で近似した整数計画として解き、選んだ計画を元のモデルで評価し直す」という考え方を取りました。ただし論文の定式化そのものではなく、共通データに合わせてこの章で組んだ簡単なものです。

架空の設定は次の表のとおりです。計画期間は、共通データの暦で年の第14週から第26週までの13週です(第1週を4月の第1週としているので、おおむね7月から9月に当たり、季節の山の第18週前後を含みます)。通常売価は現在の売価のまま動かさず、販促だけを決めます。

項目この章の設定(架空)モデルでの書き方
決めること品目 i を、計画の t 週目に、値引き率の段階 k で販促するか0か1の変数。品目ごとに販促価格が重複しない段階だけ残し、12品目×13週で637個
目的13週の販促の正味の粗利の合計を最大にする販促1回ごとの正味の粗利(その販促だけを行った場合。季節を入れ、翌週の反動を含む)を係数にした和
チラシの枠1週に販促できるのは3品目まで週ごとに変数の和を3以下にする
カテゴリの重なり同じカテゴリから同じ週に販促するのは1品目まで週×カテゴリごとに変数の和を1以下にする
連続の禁止同じ品目を2週続けて販促しない(1週に選べる段階も1つ)品目ごとに、t 週目と t+1 週目の変数の和を1以下にする
回数の上限同じ品目の販促は13週で3回まで品目ごとに変数の和を3以下にする
値引きの原資13週の値引きの原資の合計に上限を置く(置かない場合も解く)販促1回ごとの値引きの原資を係数にした和を上限以下にする

表の「目的」の行が、この定式化の近似の部分です。真のモデルでは、同じ週に2品目を販促すると互いの数量に影響し合い、ある品目の販促の翌週の反動と別の品目の販促が同じ週に重なることもあるので、計画全体の粗利は販促1回ごとの効果の単純な和にはなりません。「同じカテゴリから同じ週に1品目まで」という制約は、売場の運用の取り決めであると同時に、同じカテゴリの品目どうしが同じ週に食い合う効果を計画から締め出して、この近似を良くする働きもしています。近似がどれだけ正確だったかは、あとで確かめます。

次のコードは、この章のスクリプトから、整数計画を組んで解く部分を抜き出したものです(単独では動きません。制約の有無を引数で切り替える部分と、解の取り出しは省いています)。gain と budget は、品目・週・段階の組ごとに前もって計算しておいた正味の粗利と値引きの原資の辞書です。ソルバーは PuLP(版3.3.2)から呼ぶ CBC です。

# 抜き出し:gain[i, t, k] は正味の粗利、budget[i, t, k] は値引きの原資(どちらも円)
prob = pulp.LpProblem("promo_calendar", pulp.LpMaximize)
x = {key: pulp.LpVariable("x_%d_%d_%d" % key, cat="Binary") for key in gain}
prob += pulp.lpSum(gain[k] * x[k] for k in x)                       # 正味の粗利の合計
for t in range(T):
    prob += pulp.lpSum(x[i, t, k] for (i, tt, k) in x if tt == t) <= max_week   # チラシの枠
    for c in CATEGORIES:                                             # 同カテゴリは1品目まで
        prob += pulp.lpSum(x[i, t, k] for (i, tt, k) in x if tt == t if CAT[i] == c) <= 1
for i in range(N):
    prob += pulp.lpSum(x[i, t, k] for (ii, t, k) in x if ii == i) <= max_sku     # 回数の上限
    for t in range(T):                                               # 1週1段階・連続の禁止
        prob += pulp.lpSum(x[i, t, k] for k in range(len(OPTS[i]))) \
            + pulp.lpSum(x[i, t + 1, k] for k in range(len(OPTS[i])) if t + 1 < T) <= 1
if cap is not None:
    prob += pulp.lpSum(budget[k] * x[k] for k in x) <= cap          # 値引きの原資の上限
prob.solve(pulp.PULP_CBC_CMD(msg=0, timeLimit=60))

要点は2つあります。1つ目は、正味の粗利がマイナスの販促も変数として残していることです。マイナスの係数の変数は、ソルバーが自然に0にするので、前もって除く必要はありません。むしろ残しておくと、制約を変えたときに何が選ばれ何が選ばれないかを、同じモデルのまま確かめられます。2つ目は、連続の禁止を「t 週目の変数の和と t+1 週目の変数の和を足して1以下」という1本の式で書いていることです。この1本で「1週に選べる段階は1つ」と「2週続けない」の両方が表せます。翌週の反動の重なりも、この制約で同じ品目の中では起きなくなります。

係数 gain を何で計算するかで、2通りの計画を作りました。1つは真のモデルで計算した係数で、現実には作れない「答え合わせ用」の計画です。もう1つは、基準の推定と同じ回帰を販売履歴にかけた推定モデル(季節の cos と sin の係数も使います)で計算した係数で、現実の企業が作れるのはこちらです。どちらの計画も、最後は真のモデルで、12品目・14週(13週と、13週目の販促の反動が出る翌1週)をまとめて計算し直して評価しました。比べる相手として、販促をしない場合と、「各カテゴリから毎週1品目を順番に選び、同じ値引き率で販促する」という輪番の規則も用意しました。輪番の規則は、毎週3品目を、緑茶6品目・炭酸4品目・水2品目のそれぞれの中で順番に回すもので、値引き率は10%・20%・30%の3通りを試しました。

販促カレンダーの結果を読む

販促をしない場合の14週の粗利は、真のモデルで14,490,332円(売上33,803,033円)です。これは、年平均の週あたり粗利837,136円を14倍した11,719,902円より大きい額です。価格は同じ現在の売価で販促もしていないので、差はすべて、計画期間が夏の季節の山を含むことによるものです(同じ条件の14週合計が14,490,332円になることを照合しました)。これを基準に、各計画の効果を真のモデルで評価した結果が次の表です。「粗利の改善」は販促なしに対する増減率、「推定モデルの見込み」は計画を作ったモデルの中での正味の粗利の合計(販促1回ごとの係数の和)です。整数計画はどちらも CBC が最適解(Optimal)を返し、この記事の実行環境(一般的なノートPC)での実測で、計算時間は真のモデルの係数で0.09秒、推定モデルの係数で0.10秒でした。1回の実測値で、ほかの計算と並行して動かしているため、実行ごとに揺れます。

計画販促回数粗利の増分(真のモデル)粗利の改善売上の増減数量の増減値引きの原資推定モデルの見込み
輪番の規則・10%引き39+582,655円+4.02%+10.14%+16.35%1,559,402円なし
輪番の規則・20%引き39+252,413円+1.74%+19.50%+37.80%4,432,947円なし
輪番の規則・30%引き39-990,282円-6.83%+33.61%+75.79%10,097,877円なし
整数計画・真のモデルの係数(答え合わせ用)31+504,444円+3.48%+8.65%+12.96%1,333,704円(真の係数の和)498,216円
整数計画・推定モデルの係数31+476,095円+3.29%+9.39%+14.37%1,544,857円564,105円

表から読めることを順に挙げます。まず、輪番の規則の3行を比べると、値引きを深くするほど「売上の増減」と「数量の増減」の列は大きくなり、30%引きでは売上 +33.61%・数量 +75.79% と、売場の数字としては最も派手な結果になります。ところが「粗利の改善」の列は -6.83% で、販促をしない場合より990,282円も粗利が減っています。値引きの原資は10,097,877円で、10%引きの約6.5倍です。売上と数量だけを販促の評価指標にしていると、この計画が最も成功した計画に見えます。この章の前半で1回の販促について見たことが、13週の計画でもそのまま起きています。

次に、推定モデルの係数で作った計画は、真のモデルで +476,095円(+3.29%)でした。推定モデルの中では +564,105円を見込んでいたので、見込みの約84%しか実現していません。基準の結果で、通常売価の最適化について「推定モデルが見込んだ改善 +1.96% に対し、真のモデルで実際に得られるのは +1.40%」という楽観が出ていましたが、販促の計画でも同じ向きの楽観が出ています。推定モデルの中で最も良く見える計画を選ぶと、推定が楽観的に外れた販促ほど選ばれやすくなるので、選んだ計画の見込みは真の値より高めに出やすくなります。一方、真のモデルの係数で作った答え合わせ用の計画は +504,444円(+3.48%)で、推定モデルの係数による計画はその約94%を取れています。13週の計画に31回の販促を置く中で、品目・週・段階の3つとも一致した販促は20回でした。推定の誤差は、計画の中身を3分の1ほど入れ替えましたが、粗利の差は28,349円にとどまっています。

近似の確かさも確認しておきます。答え合わせ用の計画について、販促1回ごとの真の係数の和は498,216円、同じ計画を真のモデルでまとめて計算し直した増分は504,444円で、差は6,228円(まとめて計算した増分の約1.2%)でした。同じカテゴリから同じ週に1品目までとしたので、販促どうしの食い合いがほとんど起きず、「販促1回ごとの効果の和」という近似がこの例題ではよく当たっています。

最も注意が要るのは、輪番の規則の10%引きが +582,655円(+4.02%)で、整数計画のどちらの計画よりも粗利が大きかったことです。最適化したはずの計画が、単純な規則に負けています。理由は制約の違いです。輪番の規則の10%引きが整数計画の制約を満たしているかを1つずつ調べると、「1週に3品目まで」「同じカテゴリから同じ週に1品目まで」「同じ品目を2週続けない」の3つは満たしていましたが、「同じ品目の販促は13週で3回まで」という回数の上限は満たしていませんでした。水の2品目は1週おきに販促されるので W1 が7回・W2 が6回、炭酸は C1 が4回になり、販促回数の合計は39回です。正味の粗利がプラスの販促を、上限を超えて多く打てる分、粗利が大きくなっています。実際、真のモデルの係数のまま回数の上限だけを外して解き直すと、販促39回で +785,876円になり、輪番の規則の10%引きを203,221円上回りました。推定モデルの係数で回数の上限を外した場合も、真のモデルで +699,962円と、輪番の規則を117,307円上回ります(次の節の表)。最適化の結果を規則と比べるときは、両者に同じ制約がかかっているかを先に確かめる必要があります。制約が違えば、比べているのは手法の良し悪しではなく、制約の有無です。

推定モデルの係数で作った13週の販促カレンダー。縦に12品目、横に1週目から13週目を並べ、販促する週のセルに値引き率の段階を書いている。ほとんどが10%引きで、T2だけが15%引きを3回。T3は販促なし、T4は13週目の1回だけで、炭酸と水の各品目は3回ずつ販促している

推定モデルの係数で作った計画をカレンダーにしたのが上の図です。数字は値引き率の段階で、実際の値引き率は10円単位の丸めによって品目ごとに変わります。31回の販促のうち28回は最も浅い10%引きの段階で、残る3回は T2 の15%引き(98円)です。「推定モデルで販促を評価すると何がずれるか」の節で見たとおり、推定モデルでは T2 だけが15%引きを最も得と見ていたので、その判断がそのまま計画に出ています。炭酸と水の6品目はすべて上限の3回まで販促され、C1・C2・W1・W2 は1週おきに並んでいます。一方、緑茶PB 500ml(T3)は1回も選ばれず、緑茶A 2L(T4)は13週目の1回だけです。緑茶のカテゴリは毎週1品目までなので、6品目で13週の枠を取り合い、正味の粗利の小さい品目が後回しになっています。

制約と値引きの原資には値段がある

第5章で、価格の並びの制約1つごとに「外すと粗利がいくら増えるか」を測りました。販促カレンダーの制約にも同じ見方ができます。推定モデルの係数で、制約を1つずつ外して計画を作り直し、真のモデルで評価した結果が次の表です。

条件販促回数推定モデルの見込み粗利の増分(真のモデル)基準の制約からの増分(真のモデル)値引きの原資(真のモデル)
基準の制約31564,105円476,095円なし1,544,857円
チラシの枠(1週3品目)を外す31564,105円476,095円0円1,544,857円
同じカテゴリ1品目までの制約を外す36590,405円531,435円+55,340円1,741,283円
品目ごとの回数の上限(3回)を外す39954,086円699,962円+223,867円1,809,066円

チラシの枠を外しても、計画はまったく変わりませんでした。カテゴリは3つで、各カテゴリから1週1品目までという制約がある限り、1週に販促できるのは最大3品目になるので、チラシの枠の「3品目まで」は自動的に満たされます。このような制約は、ほかの制約に含まれてしまっていて答えに影響しない冗長な制約です。冗長だからモデルから外してよい、ということではありません。カテゴリの取り決めを変えたときには、チラシの枠が効き始めます。ただ、「どの制約が今の答えを縛っているか」を知るには、このように1つずつ外して解き直すのが確実です。

最も高くついているのは回数の上限で、外すと真のモデルで223,867円の増分があります。13週の計画全体の粗利の改善が476,095円なので、その約半分に当たります。同じ品目の販促回数に上限を置く理由は、会社や取引ごとに異なります。ただし共通データの真のモデルには、販促の頻度が高いと通常売価での売れ行きが落ちる、といった仕組みは入っていません。回数の上限を外すと粗利が増えるという結果は、その仕組みが無いモデルの中での話です。経営判断としては、「この上限は13週で約22万円(架空の例題での値)の粗利を手放して守っている」ことを数字で示したうえで、それでも守る理由があるかを判断する、という使い方になります。

次に、値引きの原資の上限を変えて解き直しました。推定モデルの係数で計画を作り、その計画を真のモデルで評価しています。

値引きの原資の上限(13週)販促回数値引きの原資(推定モデルの見込み)粗利の増分(推定モデルの見込み)粗利の増分(真のモデル)
0円00円0円0円
100,000円395,939円101,418円59,535円
200,000円7193,098円169,482円104,292円
300,000円10299,989円230,360円145,393円
400,000円13399,989円281,097円190,687円
600,000円16598,876円360,320円289,613円
800,000円19799,933円437,466円341,101円
上限なし311,559,492円564,105円476,095円

この表の「値引きの原資」の列は、計画を作った推定モデルが見込んだ額です。上限なしの行の1,559,492円は、前の2つの表で「値引きの原資(真のモデル)」として示した1,544,857円と同じ計画のもので、違いは評価に使ったモデルだけです。原資の上限は計画を作る時点の制約なので、推定モデルの見込みの額で掛けています。

値引きの原資の上限を変えたときの粗利の増分の折れ線グラフ。横軸は計画で使う値引きの原資(推定モデルの見込み、万円)、縦軸は粗利の増分(万円)。グレーの破線が推定モデルの見込み、ネイビーの実線が真のモデルで得られる増分。どちらも原資を増やすと増分が増えるが、傾きはしだいに緩くなり、実線は常に破線の下にある

表の「粗利の増分(推定モデルの見込み)」の列を見ると、原資の上限を100,000円ずつ増やしたときの見込みの増え方は、最初の100,000円で101,418円、次の100,000円で68,064円、その次で60,878円、400,000円までの区間で50,737円と、しだいに小さくなります。値引きの原資を1円増やしたときに増える粗利(原資の限界的な価値)が、原資を増やすほど下がっているということです。原資が少ないときは、限られた原資の中で正味の粗利の合計が最大になる組み合わせとして、原資の割に効果の大きい販促が選ばれ、原資が増えるにつれて、原資の割に効果の小さい販促まで計画に入ってくるためです。上限なしの計画では、800,000円から1,559,492円までの約76万円の原資で、見込みの増分は126,639円しか増えていません。

「粗利の増分(真のモデル)」の列は、すべての行で推定モデルの見込みを下回っています。原資100,000円の計画では見込み101,418円に対して真のモデルで59,535円と、見込みの約59%しか実現していません。上限なしの計画では見込みの約84%が実現していたので、この表の範囲では、原資の少ない計画ほど見込みに対する実現の割合がおおむね低くなっています(600,000円の約80%と800,000円の約78%のように、隣り合う行で逆になるところもあります)。真のモデルの列の増え方は、見込みの列ほどなめらかではなく、400,000円から600,000円の区間で傾きがいったん大きくなっています。原資の判断は推定モデルの見込みの曲線で行うことになりますが、その曲線は実際より高めで、特に原資の少ない側で楽観が大きい、と読む必要があります。

ハイ・ローとEDLPをどう考えるか

ここまでは、通常売価を固定したまま販促をどう組むかを考えてきました。小売の価格政策には、もう1つ上の層の選択があります。通常売価を高めに置いて頻繁に特売を打つハイ・ロー(Hi-Lo)と、特売に頼らず毎日低い価格を保つEDLP(everyday low price、毎日低価格)です。どちらが粗利に有利かは、販促カレンダーの最適化より前に決まる、価格政策の選択です。

この比較を実地の実験で調べた研究として、ホック、ドレーズ、パークの論文(著者名の原綴りは Hoch、Drèze、Purk。Journal of Marketing、1994年、第58巻第4号)があります。要旨によれば、著者らは86店舗の食品スーパーのチェーンで、26の商品カテゴリについて2系列の実地実験を行いました。カテゴリの価格を EDLP の形で10%下げると販売数量は3%増え、ハイ・ローの形で10%上げると販売数量は3%減りました。客の需要が毎日の価格の変化にあまり反応しなかったため、利益には大きな差が出て、EDLP の方針は利益を18%減らし、ハイ・ローの価格設定は利益を15%増やしました。さらに3つ目の実験で、毎日の価格を高めにしたうえで浅い値引きの頻度を増やすと、販売数量が3%、利益が4%増えたと報告しています。この論文の結論の向きは、その実験の条件のもとでは EDLP は利益の面で成り立ちにくい、というものです。ただしこれは、1つのチェーンの、論文が対象とした時期と市場での実験結果であり、どの小売にも当てはまる法則として示されたものではありません。

共通データの真のモデルでも、同じ問いを試算しました。EDLP の形として「販促をやめ、12品目すべての通常売価を一律に下げる」場合を、計画期間の14週について真のモデルで計算し、販促なし・現在の売価の場合と比べました。ハイ・ローの形は、「販促カレンダーの結果を読む」の節の、推定モデルの係数による販促カレンダーです。

価格政策(14週・真のモデル)粗利の改善売上の増減数量の増減値引き・値下げに使った額
EDLP の形:通常売価を一律10円下げる(販促なし)-0.39%+11.16%+24.29%2,922,701円
EDLP の形:通常売価を一律20円下げる(販促なし)-4.07%+25.95%+61.31%7,586,335円
ハイ・ローの形:現在の売価+推定モデルの販促カレンダー+3.29%+9.39%+14.37%1,544,857円

表の「値引き・値下げに使った額」の列は、EDLP の形では「下げた額×14週の販売数量」、ハイ・ローの形では値引きの原資です。この試算では、一律10円の値下げは粗利をほぼ変えず(-0.39%)、売上と数量を大きく増やします。20円の値下げでは粗利が4.07%減ります。ハイ・ローの形は、粗利が3.29%増えています。

この表の読み方には大きな注意が要ります。共通データの真のモデルでは、チラシと陳列の上乗せ(約1.284倍)は販促の週にしか得られないので、販促をやめる EDLP の形は、仕組みの上で上乗せを手放します。さらに真のモデルには、店に来る客の数や、客がどの店を選ぶかといった仕組みが入っていません。EDLP が客に「この店はいつも安い」と受け止められて来店が増える、といった効果が現実にあるとしても、それはこの試算には一切反映されません。つまりこの表は、品目ごとの売価・原価と数量の計算だけで EDLP とハイ・ローを比べたものです。真のモデルの自己弾力性(-2.3〜-3.6)は、ホックらの実験でカテゴリの価格を10%動かしたときの数量の反応(約3%)よりずっと大きく、条件も異なります。この試算から「EDLP は不利」と一般化することはできません。言えるのは、EDLP に移るかどうかを判断するときには、値下げに使う額(表の「値引き・値下げに使った額」の列。この試算では10円下げで14週に2,922,701円)を、増える数量と、モデルに入っていない来店客の増加で取り返せるかどうかを見積もる必要がある、ということです。その見積もりには、店単位の実験(第10章)が欠かせないと考えています。

経営の判断に翻訳する

この章の結果を、販促の原資をどう使うかという経営の判断に翻訳します。1つ目は、販促の評価指標を、販促品の売上や数量ではなく、2週間・カテゴリ全体で見た正味の粗利に置くことです。この章の例では、輪番の規則の30%引きは売上 +33.61%・数量 +75.79% と、最も派手な数字を出しながら、粗利を990,282円減らしていました。1回の販促でも、T1 の20%引きは販促品の粗利だけを見れば +34,761円ですが、正味では +8,254円です。販促の担当者の評価が売上や数量で行われていると、粗利を減らす深い値引きが、成果を上げた施策として繰り返されることになります。評価の指標を変えることは、モデルを作るより先に手を付けられる対策です。

2つ目は、値引きの原資を予算として扱い、その限界的な価値を見ることです。この章の例では、推定モデルの見込みで、最初の100,000円の原資は101,418円の粗利の増分を生みましたが、800,000円を超えてからの約76万円は126,639円しか生んでいません。原資を増やすか減らすかを判断するときは、「次の10万円で粗利がいくら増えるか」を見るのが筋です。しかも、推定モデルの見込みは真のモデルで得られる値より高めに出ていて、原資100,000円の計画では見込みの約59%しか実現しませんでした。見込みをそのまま予算の根拠にすると、販促の効果を過大に見積もった予算になります。

3つ目は、販促に向く品目と向かない品目を分けることです。自己弾力性が大きく(値下げで数量がよく伸び)、もともとの粗利率が値引き後も残る品目は販促に向き、弾力性の小さい品目は向きません。共通データでは C3(真の自己弾力性 -2.3)は49通りの販促価格のうち1通りしか正味の粗利がプラスになりませんでした。また、浅い値引きが最も得になったのは、真のモデルでチラシと陳列の上乗せが値引きの深さによらないと設定しているためで、上乗せと値引きの深さの関係は、自社の販売履歴で、値引きの段階ごとに確かめる必要があります。

4つ目は、販促の運用の取り決めにも値段があることです。「同じ品目の販促は13週で3回まで」という上限は、この例題では約22万円の粗利と引き換えに守られていました。取り決めを変えるかどうかは、その値段を見たうえで判断することになります。逆に、モデルの中では冗長だったチラシの枠のように、今は効いていない取り決めもあります。どの取り決めが今の計画を縛っているかを数字で示すことが、販促カレンダーを最適化する道具の大きな役割だと考えています。

判断を誤ったときの損失の型も整理しておきます。販促を見た目の伸びで評価し続けると、深い値引きが増え、値引きの原資が膨らみ、粗利が減ります。この章の例では、輪番の規則で値引き率を10%から30%に深めただけで、14週の粗利の増分は +582,655円から -990,282円まで、約157万円動きました。反対に、販促の翌週の反動や他品目からの移動を無視して、季節の山まで販促の手柄に数えると、効果を過大に見積もった販促が翌年の計画に引き継がれます。どちらの損失も、販促1回ごとの成績表には現れず、カテゴリの粗利の合計にだけ現れるので、カテゴリ単位・数週間単位で粗利を見る仕組みが必要です。

この章の要点は3つです。第一に、1回の販促の効果は、価格の効果・チラシと陳列の上乗せ・翌週の反動・他品目からの移動の4つに分かれ、2週間・カテゴリ全体で見た正味の粗利は、販促品の見た目の伸びよりずっと小さくなります。販売履歴の見た目の倍率には、値下げそのものの効果と季節の山が混ざっていて、季節は販促後の落ち込みも隠します。第二に、販促カレンダーは、販促1回ごとの正味の粗利を係数にした整数計画で近似して解け、この例題では近似の誤差は約1.2%でした。推定モデルで作った計画は答え合わせ用の計画の約94%の粗利を取れましたが、推定モデルの見込みは実際より高めに出ます。第三に、制約や値引きの原資の上限には値段があり、最適化の結果を規則と比べるときは同じ制約がかかっているかを確かめる必要があります。次の第7章では、販促のように一時的に値引きしてまた元に戻すのではなく、季節品や流行品の在庫を売り切るために値段を下げていくマークダウンを、残りの週数と在庫に応じて決める問題として扱います。

この章を深めたい方への参考書籍

『プロモーション効果分析』(守口剛、朝倉書店):プロモーションの効果を測る枠組み・データ・分析手法を順に扱い、消費者ごとの違いや参照価格を考慮した効果の測定にも章を割いた本です。「利益視点とカテゴリー視点を考慮したプロモーション効果測定」という章があり、この章で行った「販促品の売上ではなく、カテゴリ全体の粗利で販促を評価する」考え方を、より詳しく学ぶのに向いています。

『マーケティング・サイエンス入門 新版』(古川一郎・守口剛・阿部誠、有斐閣):消費者行動・製品デザイン・プライシング・広告・流通などのマーケティングの意思決定を、データとモデルで扱う入門書で、プロモーションに1章を割いています。販促を、価格や広告を含むマーケティングの意思決定全体の中に位置づけて読み直すのに役立ちます。

第7章 値下げと在庫処分

第6章では、販促の効果を価格の効果・チラシや陳列の上乗せ・翌週の反動に分け、どの品目を何週目にいくら引くかを、販促カレンダーとして整数計画で決めました。そこで扱った販促は、期間が終われば通常売価に戻る一時的な値引きです。この章で扱うのは、戻らない値下げです。夏物・季節限定品・流行品のように、売れる期間が決まっていて、期間を過ぎると商品の価値が大きく下がる商品では、売れ残りそうな在庫を、期間の中のどこかで値下げして売り切る判断が毎シーズン必要になります。この章では、架空の季節商品を設定して、残り週数と残り在庫に応じて値下げのタイミングと幅を決める問題を動的計画法で解き、一律に値下げする規則や値下げしない場合と、粗利・消化率・売れ残りで比べます。後半では、値下げを上げ直さないという制約の意味、需要の見込みが外れたときの強さ、生鮮品の見切りと食品ロスとの関係を扱います。

値下げは「期限つきの在庫」の価格の問題

シーズンの途中や終わりに、売れ残りそうな商品の売価を引き下げることをマークダウンと呼びます。第4章・第5章で扱った通常売価の設定では、同じ商品を毎週売り続けることが前提で、売れなかった分は翌週以降に売ればよいと考えることができました。季節商品では、この前提が成り立ちません。販売期間が終わると、残った在庫は大きく値を下げて処分するか、廃棄するしかなくなります。値下げの判断で比べるのは、「今は定価で売り、残りを期末に安く処分する」場合と、「今のうちに値下げして多く売り、期末の残りを減らす」場合の損得です。

この問題にはいくつか特徴があります。1つ目は、仕入れが済んでいることです。シーズンの初めに在庫を一括で仕入れ、追加の発注をしない商品では、仕入れた分の原価はすでに払っていて、値下げをしてもしなくても変わりません。したがって値下げの判断で考えるべきなのは、これから得られる売上と期末の処分の収入の合計だけで、原価を割り込む値下げであっても、処分するよりましなら選ぶ価値があります。2つ目は、時間とともに状況が変わることです。同じ在庫3,000本でも、残り8週なら定価で売り切れるかもしれず、残り2週なら大きく値下げしないと残ります。3つ目は、需要が読み切れないことです。今週の売れ行きを見てから来週の価格を決められるので、最初に計画を1本決めるより、売れ行きに応じて決め直すほうが有利になりえます。この3つを同時に扱えるのが、この章で使う動的計画法です。

あわせて、発注量そのものは扱いません。シーズンの初めに何本仕入れるかは、売れ残りと品切れの損失の釣り合いで決める問題で、弊社コラム『在庫と発注量を決める数理モデル、安全在庫の計算から多段階在庫の最適化まで』の第6章でニューズベンダー問題として扱っています。この章は、仕入れた数が決まったあとで、それをどう売り切るかという後半の判断を受け持ちます。また、時間と残り在庫で価格を上にも下にも動かす話は第9章のダイナミックプライシングで扱います。この章の値下げは、価格を下げる方向にだけ動かす点が違います。

架空の設定:夏限定フレーバー炭酸の10週間

第2章で用意したサンプルデータは、毎週同じ品目を売り続ける飲料12品目の記録で、季節限定品は入っていません。そこでこの章では、同じ架空の食品スーパーが夏に扱う季節限定の商品を1つ、別に設定しました。以下の値はすべて架空の設定で、実在の商品・企業の売価や原価ではありません。

項目値(架空)意味
商品夏限定フレーバー炭酸 500ml夏の10週間だけ売る季節限定品。チェーン合計で考える
初期在庫6,000本販売開始時に一括で仕入れる。期間中の追加の発注はない
原価1本80円仕入れ済み。6,000本で480,000円
販売期間10週第10週の終わりで販売を打ち切る
価格の段階148円(定価)・128円・108円・88円・68円値引き率はそれぞれ0%・13.5%・27.0%・40.5%・54.1%。週の初めに1つ選ぶ
期末の処分価値1本20円第10週の終わりに残った在庫を、この値で引き取ってもらえる
定価のときの週の平均需要第1週800本から、毎週0.85倍に減る第1週800本、第5週418本、第10週185本。10週の合計は4,283本で、初期在庫より少ない
価格の効果定弾力性。価格弾力性はマイナス2.5(価格が1%下がると数量が2.5%増える)定価に対する平均需要の倍率は、128円で1.44倍、108円で2.20倍、88円で3.67倍、68円で6.99倍
需要のばらつき負の二項分布第1週・定価の需要は平均800本、標準偏差208本(平均の26.1%)

この設定の要点は、定価のまま10週売り続けた場合の平均需要の合計が4,283本で、仕入れた6,000本に1,700本以上届かないことです。仕入れが多めだったシーズン、あるいは季節の後半に需要が細っていく商品では、何もしなければ在庫が残ります。需要が週ごとに0.85倍ずつ減っていくのは、夏の終わりに向けて売れ行きが落ちることを表しています。需要のばらつきには、平均より大きく振れることがある負の二項分布を使いました。週の販売数が数百本の規模では、ポアソン分布だと標準偏差が平均の数%にしかならず、需要の読みにくさを小さく見積もりすぎるためです。

粗利は、この記事の定義どおり、売価から原価を引いた額に数量を掛けて合計したもので数えます。この章では、期末に残った在庫も1本20円で引き取られる、つまり「売価20円で売れた」と見なします。そうすると、仕入れた6,000本のすべてについて売価と原価の差に数量を掛けて足したものが粗利になり、言い換えると「売上と処分の収入の合計から、仕入れの原価480,000円を引いた額」です。この章の粗利は、第5章の週あたりの粗利と違い、販売期間10週の1シーズン合計の額です。売れ残りが多いほど、原価80円のものを20円で手放す分が増えて粗利が減ります。消化率は、仕入れた6,000本のうち販売期間中に売れた本数の割合で、処分した分は含めません。

動的計画法で「残り週数と残り在庫」から価格を決める

動的計画法は、何段階にも分かれた意思決定を、最後の段階から逆向きに解いていく方法です。値下げの問題に当てはめると、段階は週、各週の初めに分かっている状況(状態)は「残り在庫」と「今の価格の段階」、決めることは「今週の価格」です。今週の価格を決めると、今週の売上の期待値と、来週に持ち越す在庫の分布が決まります。来週の初めの状態ごとに「そこから最善を尽くしたときに得られる金額」が分かっていれば、今週の価格は「今週の売上+来週以降に得られる金額」の期待値が最も大きいものを選べばよいことになります。この「来週以降に得られる金額」を価値と呼びます。

価値は最終週の後ろから順に求められます。第10週の終わりの価値は分かっていて、残った在庫×20円です。これを使うと、第10週の初めに在庫が何本でも、5つの価格それぞれの「第10週の売上+期末の処分の収入」の期待値を計算でき、最も大きい価格とその金額が決まります。その金額が第10週の初めの価値です。次に第9週に戻って同じ計算をし、第1週まで戻れば、販売開始時の在庫6,000本・定価のときの価値が、この問題で得られる売上と処分の収入の合計の期待値の最大値になります。式で書くと次のとおりです。

\( V_t(x, l) = \max_{a \ge l} \; E\left[ p_a \min(D_{t,a}, x) + V_{t+1}\left(x – \min(D_{t,a}, x), a\right) \right] \)

言葉で言い換えると、「第t週の初めに在庫がx本、前の週の価格の段階がlのときの価値は、lと同じかそれより安い段階aの中から、今週の売上と来週以降の価値の合計の期待値が最も大きいものを選んだときの値」です。\( D_{t,a} \) は第t週に段階aの価格を付けたときの需要(ばらつく値)、\( \min(D_{t,a}, x) \) は在庫を超えては売れないことを表します。「aはl以上」という条件が、一度下げた価格を上げ直さないという制約です。この形の式はベルマン方程式と呼ばれます。名前は、動的計画法という語を作り、その初期の理論を築いたリチャード・ベルマンにちなみます。

状態の数は、在庫が0本から6,000本までの6,001通りと価格の段階5通りの組で、週ごとに約3万通りです。各状態で5つの価格を比べ、需要の分布について期待値をとる計算を10週分繰り返します。この章のスクリプトでは、需要の分布と価値の表の掛け合わせを、畳み込みの計算(一方の並びをずらしながら掛けて足す計算)でまとめて行い、この記事の実行環境(一般的なノートPC)での実測で0.12秒で解けました(同じ記事の他の章の計算と同じPCで並行して動かしているので、実行ごとに多少揺れます)。次のコードは、同じ計算を短く書き直したもので、単独で実行して同じ期待値が出ることを確かめています。

import sys, io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8")
import numpy as np
from scipy import stats
from scipy.signal import fftconvolve

S0, COST, T, SALVAGE = 6000, 80, 10, 20          # 架空の設定
PRICES = np.array([148, 128, 108, 88, 68])
x = np.arange(S0 + 1)
V = np.tile((SALVAGE * x)[:, None], (1, 5)).astype(float)   # 期末:残りは1本20円
for t in range(T - 1, -1, -1):                   # 最終週から逆向きに解く
    Q = np.empty((S0 + 1, 5))
    for a in range(5):                           # 今週の価格の段階 a
        mu = 800 * 0.85 ** t * (PRICES[a] / 148) ** -2.5
        f = stats.nbinom.pmf(x, 15, 15 / (15 + mu))          # 需要が d 本の確率
        tail = 1 - np.cumsum(f)
        sales = np.r_[0, np.cumsum(tail[:-1])]               # 期待販売数 E[min(D, x)]
        p_ge = np.r_[1, tail[:-1]]                           # 需要が x 本以上の確率
        nxt = fftconvolve(f, V[:, a])[:S0 + 1] - f * V[0, a] + p_ge * V[0, a]
        Q[:, a] = PRICES[a] * sales + nxt                    # 今週の売上+来週以降の価値
    # 前の週の段階 l からは、同じか安い段階 a だけ選べる(上げ直さない)
    V = np.stack([Q[:, l:].max(axis=1) for l in range(5)], axis=1)
print("期待粗利 %.0f円" % (V[S0, 0] - COST * S0))
# 出力: 期待粗利 282235円

コードの要所は3つです。1つ目は、V が「在庫x本・前の週の段階l」ごとの価値の表で、期末の値(在庫×20円)から始めて、for t in range(T - 1, -1, -1) で最終週から第1週へ逆向きに更新していることです。2つ目は、Q[:, a] が「今週は段階aで売る」と決めたときの、在庫ごとの「今週の売上+来週以降の価値」の期待値であることです。sales は在庫を上限にした期待販売数で、nxt は「需要がd本なら、在庫はx本からd本を引いた本数になって来週を迎える」ことを、需要の確率で重みづけして足し合わせたものです。需要が在庫以上なら在庫は0本になるので、その確率の分を最後の項で足しています。3つ目は、最後の行の Q[:, l:] で、前の週の段階l以上(同じ価格か安い価格)だけから最大を選んでいることです。ここを Q 全体の最大に変えれば、上げ直しを許すモデルになります。

出力の282,235円は、売上と処分の収入の合計の期待値762,235円から原価480,000円を引いた、期待粗利です。この値は、上げ直さない規則の中での上限です。つまり「需要が設定どおりの分布で出るなら、一度下げた価格を上げ直さない値下げの規則をどう作っても、これより大きい期待粗利は得られない」ことを示しています。上げ直しを許すと、後の節で見るように、これより大きい期待粗利になりえます。ここでの最適は、この章の架空の設定を正しいと見なしたモデルでの最適です。第2章以降の飲料のデータと同じく、設定を作った側は需要の式を知っているので答え合わせができますが、現実の季節商品では需要の式は推定するしかありません。見込みが外れた場合は後の節で扱います。

最適な値下げの規則を読む

動的計画法の答えは、1本の価格の計画ではなく、「第t週の初めに在庫がx本で、今の価格がこれなら、今週はこの価格」という対応表です。第1週から定価のまま来た場合について、この対応表を図にしました。

定価のまま来た場合に、残り週数と残り在庫で選ぶ価格の図。横軸は第1週から第10週、縦軸は週の初めの残り在庫0本から6,000本。色が薄いほど高い価格で、148円・128円・108円・88円・68円の5段階。右下の在庫が少なく週が早い領域は148円のまま、右上の在庫が多く週が遅い領域ほど濃い色の68円になる。黒い線は動的計画法で売ったときの週初の在庫の平均で、第2週から第10週まで、148円と128円の境目の近くを通っている

図の横軸は週、縦軸は週の初めの残り在庫で、色が濃いほど安い価格を選ぶことを表します。どの週でも、残り在庫がある本数を超えると値下げを選び、在庫が多いほど大きく下げる、という階段の形になっています。この境目は週を追うごとに下がります。定価のまま来た場合に値下げを始める在庫の境目を、記録から抜き出したのが次の表です。

週定価のまま売り続ける在庫境目で選ぶ価格在庫6,000本のまま来た場合に選ぶ価格
第1週0〜6,000本のどれでも定価なし148円
第2週5,113本以下128円128円
第3週4,105本以下128円128円
第4週3,249本以下128円108円
第5週2,520本以下128円108円
第6週1,900本以下128円88円
第7週1,372本以下128円88円
第8週926本以下128円68円
第9週547本以下128円68円
第10週219本以下128円68円

表の「定価のまま売り続ける在庫」の列は、その週の初めの在庫がこの本数以下なら定価のまま、1本でも多ければ値下げに移る、という境目です。この設定では、第1週はどの在庫でも定価が最適になりました。第1週の需要が最も大きく、定価のままでも平均800本が売れることに加えて、第2週からは売れ行きを見て下げられるからだと読めます。第2週の境目は5,113本で、第1週の定価の平均需要800本を売れば在庫は5,200本なので、平均どおりに売れただけでは境目をわずかに上回り、値下げに移ります。図の黒い線は、2万シーズンを模擬したときの週初の在庫の平均で、第2週以降ずっと、定価と128円の境目のすぐ近くを通っています。この設定では、最適な規則は「定価で売れる分は定価で売り、在庫が境目を超えたら1段だけ下げる」という動きを基本にしているということです。

右端の列は、仮に在庫6,000本のまま(1本も売れずに)その週を迎えた場合に選ぶ価格です。第4週なら108円、第8週以降なら最も安い68円まで一度に下げます。残り週数が少ないほど、売り切るために必要な値引きが大きくなるからです。このように、動的計画法の答えは「第何週に何%引き」という暦ではなく、「その時点の残り週数と残り在庫に見合った値引き」として出てきます。売り場の担当者が毎週の会議で「在庫がまだこれだけ残っているから、そろそろ下げよう」と判断していることを、境目の数字として明示したものと見ることができます。

値下げの規則を比べる

動的計画法の規則が、実務でよく使われる単純な規則と比べてどれだけ違うのかを確かめるために、同じ需要の乱数を使って2万シーズンを模擬しました。比べたのは次の7つの規則です。

  • A 値下げしない:10週とも148円
  • B 暦どおり:第6週から128円、第9週から108円に下げる。売れ行きは見ない
  • C 消化率の規則:販売開始前に、定価の平均需要の形に沿って「各週の終わりに残っているべき在庫」の計画を作り、週の初めの在庫が計画を初期在庫の5%(300本)より多く上回っていたら、その週に1段下げる
  • D1 平均で立てた計画:需要が平均どおりに出ると見なして、上げ直さない価格表1,001通りの中で計画上の粗利が最大のものを選び、売れ行きを見ずにそのまま実行する
  • D2 最良の固定表:需要のばらつきを入れて、同じ1,001通りの価格表のそれぞれの期待粗利を厳密に計算し、最も大きいものを選ぶ。売れ行きは見ない
  • E 動的計画法(上げ直さない):前の節の規則
  • F 動的計画法(上げ直しも可):比較のための参考

D1とD2は「シーズンの前に値下げの週と幅を1本決めて、そのとおりに実行する」規則で、その中で最も良いものを選んでいます。候補の1,001通りは、10週のそれぞれに5段階の価格のどれかを置き、前の週より高い価格に戻さない並べ方をすべて数えた数です。選ばれた価格表は、D1 が第1週148円・第2〜9週128円・第10週108円、D2 が第1週148円・第2〜8週128円・第9週108円・第10週88円で、どちらも第2週から128円に下げます。B・Cは、現場で使われることの多い形を、この章で架空に作った規則です。結果が次の表です。

規則期待粗利粗利の10%点粗利の90%点消化率売れ残り平均販売単価定価で売れた割合値引きの原資値下げ回数
A 値下げしない188,574円125,888円253,901円71.4%1,714本148.0円100.0%0円0.00回
B 暦どおり239,247円173,722円307,860円86.0%839本136.1円57.5%61,420円2.00回
C 消化率の規則228,479円140,220円303,200円99.9%8本118.2円20.1%178,532円2.14回
D1 平均で立てた計画273,199円218,211円307,160円96.1%234本129.8円13.9%104,848円2.00回
D2 最良の固定表275,632円235,508円304,002円98.8%73本127.2円13.5%123,046円3.00回
E 動的計画法(上げ直さない)282,477円243,860円316,460円99.3%40本127.8円17.9%120,342円1.95回
F 動的計画法(上げ直しも可)288,951円251,860円324,002円99.5%32本128.7円12.2%114,985円3.76回

表の値は2万シーズンの平均で、「粗利の10%点」は2万シーズンを粗利の小さい順に並べたときの下から10%の位置の値、「90%点」は上から10%の位置の値です。「値引きの原資」は、定価との差額に売れた本数を掛けた合計で、定価で売っていれば得られたはずの売上のうち、値下げで手放した額を表します。「値下げ回数」は、価格を変えた回数の平均です(上げ直しを許すFでは、上げた回数も数えています)。模擬で出したEの期待粗利282,477円は、動的計画法が厳密に計算した282,235円と0.09%の差、Fの288,951円も厳密な288,735円と0.07%の差で、模擬の数が十分であることを示しています。この章では、A〜Fの規則を並べて比べるときは同じ乱数で模擬したこの表の値を使い、動的計画法どうし(EとF)の差を示す「値下げは一方向という制約の意味」の節では、模擬の揺れを含まない厳密な値を使います。

表の「期待粗利」の列で、値下げしない規則Aと動的計画法Eを比べると、期待粗利は188,574円から282,477円へ、93,903円(49.8%)増えています。値下げしないと、平均で1,714本が売れ残り、原価80円の商品を20円で手放すことになるからです。値下げにより平均販売単価は148.0円から127.8円に下がりますが、売れ残りが40本まで減ることで、粗利は大きく増えます。季節商品では、値下げは粗利を削る行為ではなく、処分の損失を減らして粗利を守る行為になりうる、ということがこの差に表れています。

単純な規則の中では、暦どおりのBは消化率が86.0%にとどまり、平均839本が売れ残りました。需要が多いシーズンにも少ないシーズンにも同じ週に同じ幅で下げるので、少ないシーズンでは下げ方が足りず、多いシーズンでは定価で売れた分まで値下げしてしまいます。消化率の規則Cは、消化率が99.9%とほぼ売り切りますが、期待粗利は228,479円で、暦どおりのBより低くなりました。「定価で売れた割合」が20.1%、「値引きの原資」が178,532円と、表の中で最も多く値引きをしています。Cの計画は「10週で在庫を0本にする」ことを目標にしているので、売り切ることを最優先して、その分の値引きの費用を考えていません。売れ残った1本は、会計の上では原価80円のものを20円で手放すので60円のマイナスです。ただし、値下げを決める時点では原価はすでに払っているので、値下げで1本多く売れたときに増える金額は、売価と処分価値の差です(128円で売れれば108円、108円で売れれば88円)。その一方で、値下げをすると、定価で売れたはずの商品にも20円・40円の値引きが付きます。Cの規則はこの2つを比べず、在庫を0本にすることだけを目標にしているので、売れ残りを減らして得る額より、定価で売れたはずの分に付けた値引きのほうが大きくなる場面でも値下げをしてしまう、ということです。消化率を目標にした規則は、分かりやすく現場で運用しやすい一方で、目標の置き方しだいで値引きをしすぎるという弱点がこの結果から読み取れます。

シーズン前に価格表を1本決めるD1・D2は、単純な規則よりずっと良く、D2の期待粗利は275,632円で、動的計画法Eとの差は6,845円(Eに対して2.4%)です。この差が、「売れ行きを見て決め直せること」の価値に当たります。差が大きく出るのは、粗利が低いシーズンの側です。表の「粗利の10%点」の列ではD2が235,508円、Eが243,860円で、需要が少なめのシーズンでEは8,352円多く粗利を残しています。D1は、需要が平均どおりに出ると見なして作った計画で、計画上の粗利は290,292円でしたが、ばらつきのある需要で実行すると期待粗利は273,199円にとどまりました。平均の需要で作った計画は、計画の上では良く見えても、実際には売れ残りと品切れの両方の側に外れることを織り込んでいないので、見込みより悪い結果になります。

同じ規則でも、価格の推移はシーズンごとに違う

動的計画法の規則は、売れ行きに応じて値下げの週と幅を変えます。そのことを、2万シーズンの中から、Eの粗利が10%点・中央・90%点に当たる3つのシーズンを取り出して確かめました。上の段が各週の売価、下の段が各週の終わりの残り在庫です。比べるために、暦どおりの規則Bの価格(どのシーズンでも同じ)を灰色の破線で重ねています。

動的計画法で売った3つのシーズンの価格と在庫の推移。上段は横軸が週、縦軸が売価で、需要が少なめのシーズンは第2週に128円、第7週に108円、第10週に88円へ下げ、中くらいのシーズンは第2週に128円、第10週に108円へ下げ、需要が多めのシーズンは第3週に128円へ下げてそのまま売り切る。灰色の破線の暦どおりは第6週に128円、第9週に108円。下段は各週の終わりの残り在庫で、需要が多めのシーズンは第7週の終わりにほぼ売り切り、少なめのシーズンは第10週まで在庫が残る。点線は消化率の規則が使う計画の残り在庫
シーズン(Eの粗利の位置)粗利各週の売価(第1週〜第10週)第5週の終わりの在庫第10週の終わりの在庫
需要が少なめ(10%点)243,860円148・128・128・128・128・128・108・108・108・882,782本0本
中くらい(中央)285,620円148・128・128・128・128・128・128・128・128・1082,475本0本
需要が多め(90%点)316,460円148・148・128・128・128・128・128・128・128・1281,259本0本

表の「各週の売価」の列を見ると、3つのシーズンとも第1週は定価で、需要が多めのシーズンだけは第2週も定価を続けています。第1週に898本売れて第2週の初めの在庫が5,102本と、表の境目の5,113本を下回ったからです。需要が少なめのシーズンは、第7週に108円、第10週に88円と、売れ残りそうなことが分かるにつれて段階的に下げました。需要が多めのシーズンは、第3週に128円に下げたあと、第8週の初めには在庫が12本まで減り、そこから先はほとんど売るものがありません。3つとも第10週の終わりの在庫は0本で、結果として売り切っていますが、そこまでの値下げの道筋はシーズンごとに違います。

需要が多めのシーズンの動きには、上げ直さない規則の限界も表れています。シーズン全体では需要が多めでも、週ごとの売れ行きはばらつきます。このシーズンの第2週に定価で売れたのは525本で、その週の定価の平均需要680本を下回り、第3週の初めの在庫は4,577本と、境目の表の第3週の4,105本を超えました。そのため第3週に128円へ下げたところ、その第3週に1,791本が売れて、在庫が一気に減りました。128円のときの第3週の平均需要は831本なので、その倍を超える売れ行きです。上げ直しが許されていれば、在庫が早く減った時点で定価に戻すことで、残りの在庫をより高く売れた可能性があります。この点を次の節で数字で確かめます。

下の段の点線は、消化率の規則Cが使う「各週の終わりに残っているべき在庫」の計画です。3つのシーズンの在庫の線は、計画の点線の上を通る週が多くあります。動的計画法は、計画の点線よりも在庫が多い状態でも、定価や128円で売り続けることを選んでいるということです。消化率の規則は「計画より在庫が多い=値下げが必要」と判定しますが、動的計画法は「残り週数でこの在庫なら、128円で売り切れる見込みが十分ある」と判定しています。消化率の規則Cが値引きをしすぎた理由は、この違いにあります。

値下げは一方向という制約の意味

この章の動的計画法Eは、一度下げた価格を上げ直さない、という制約の下で解いています。この制約を置いたのは、値下げした商品を元の価格に戻すと、値下げの後に買おうと考えていた顧客の受け止めが悪くなることや、棚札の付け替えの作業が増えることが考えられ、さらに、値下げ前の価格を比較対照価格として表示する場合には、その表示が認められる条件が問題になることがあるためです。価格表示の法的な扱いは第12章で扱います。

この制約が粗利にどれだけ効いているかは、制約を外したモデルFと比べれば分かります。動的計画法で厳密に計算した期待粗利は、上げ直さないEが282,235円、上げ直しも許すFが288,735円で、差は6,500円、Eに対して2.3%です。模擬の表でも、Fは値下げ回数が3.76回とEの1.95回のほぼ倍で、価格を上げ下げしながら売っています。この6,500円が、この設定での「上げ直さない」という約束の値段です。

この比較で注意したいのは、上げ直しを許すモデルFの値は、顧客の行動が変わらないことを前提にしていることです。この章の需要の式では、今週の需要は今週の価格と季節の減り方だけで決まり、過去に値下げがあったか、これから値下げがありそうかは影響しません。現実には、価格が上がったり下がったりする商品では、顧客が値下がりを待って買い控えることが考えられ、そうなるとFの2.3%は得られません。顧客が値下がりを待つ行動と、それを考えた価格の決め方は、第9章のダイナミックプライシングで扱います。この章の範囲で言えるのは、上げ直しの自由には、この設定で期待粗利の2.3%分の価値がありうるが、それは顧客が待たない場合の上限であり、上げ直しによって失う信頼と比べて判断する必要がある、ということです。

もう1つ、価格の段階の数も制約です。この章では148円から68円までの5段階としましたが、値下げを何段階で行うか、1回にどこまで下げられるかは、棚札・値札の作業の量や、売り場の表示の決まりで制約されます。段階を減らせば作業は減りますが、在庫の状況に細かく合わせることはできなくなります。たとえば、128円の段階が使えず148円から108円にいきなり下げるしかない場合には、境目を超えた在庫を少しだけ下げて売る動きができなくなります。どの段階を残すかを決めるときも、この章と同じ計算で、段階を減らしたときの期待粗利の差を見ることができます。

需要の見込みが外れたとき

ここまでの比較は、需要が設定どおりの分布で出ることを前提にしていました。季節商品は、売り始める前の需要の見込みが外れやすい商品です。そこで、実際の需要の水準が見込みの0.7倍だった場合と1.3倍だった場合を模擬しました。どの規則も、見込みの需要(1.0倍)を前提に作ったものをそのまま使います。比べるために、需要の水準を最初から知っていた場合の動的計画法(E*)も載せました。E*は現実には使えない、答え合わせのための参考です。

規則0.7倍・期待粗利0.7倍・消化率0.7倍・売れ残り1.3倍・期待粗利1.3倍・消化率1.3倍・定価で売れた割合
A 値下げしない24,003円50.0%3,000本345,493円91.9%100.0%
B 暦どおり59,896円60.3%2,382本353,105円99.6%64.6%
C 消化率の規則105,994円100.0%1本334,456円99.6%54.9%
D1 平均で立てた計画95,451円69.4%1,834本308,646円100.0%17.3%
D2 最良の固定表108,519円74.5%1,528本308,156円100.0%17.3%
E 動的計画法(見込みのまま)155,012円93.8%372本340,271円100.0%44.0%
E* 水準を知っていた動的計画法(参考)179,613円99.2%47本369,393円99.4%77.2%

需要が見込みの0.7倍だった場合、表の「0.7倍・期待粗利」の列で最も高いのは動的計画法Eの155,012円で、シーズン前に価格表を決めるD2の108,519円より46,493円多くなりました。D2は見込みの需要で売り切れるように作った価格表なので、需要が少ないと平均1,528本が売れ残ります。動的計画法Eも、需要の水準が下がっていることは知りませんが、毎週の在庫が境目を超えるたびに値下げを重ねるので、売れ残りは372本まで減りました。それでも、水準を知っていたE*の179,613円とは24,601円の差があります。E*は第1週から値下げしているのに対して、Eは見込みどおりの需要を前提にしているので、第1週を定価で売り、値下げを始めるのが遅れるためです。表には0.7倍の側の「定価で売れた割合」の列を載せていませんが、同じ模擬の記録では、この割合はE*が0.0%(定価では1本も売っていない)、Eが10.2%でした。需要の水準が下がっていることに早く気づくほど、この差は縮まります。

需要が見込みの1.3倍だった場合は、結果が逆になります。表の「1.3倍・期待粗利」の列では、暦どおりのBが353,105円で、動的計画法Eの340,271円を上回りました。値下げしないAの345,493円も、Eより高くなっています。需要が多いと、定価のままでも在庫の大半が売れるので、値下げの必要は小さくなります。Eは見込みの需要を前提にした境目を使うので、需要が多いシーズンでも在庫が境目を超えれば値下げを始め、一度下げると上げ直せません。表の「1.3倍・定価で売れた割合」の列で、Eは44.0%、水準を知っていたE*は77.2%で、Eは定価で売れたはずの分の多くを128円で売ったことになります。D1・D2は、「値下げの規則を比べる」の節で示した価格表のとおり、需要の水準によらず第2週から128円に下げる計画なので、需要が多いシーズンでは、売り切りは早いものの粗利は308,000円前後にとどまりました。

この結果から言えるのは、動的計画法の規則は、使った需要のモデルの範囲でしか最適ではないということです。この例では、需要が見込みより少ない側に外れたときには、売れ行きを見て決め直すことの価値が大きく、規則の中で最も強い結果になりました。一方で、需要が多い側に外れたときには、早めに値下げしすぎて、単純な暦どおりの規則に負けました。上げ直さない制約の下では、早すぎる値下げは取り返せません。実務では、需要の見込みそのものをシーズンの途中で直す仕組み、たとえば最初の数週の売れ行きから需要の水準を推定し直して、動的計画法を毎週解き直す運用が必要になると考えています。この章のモデルは需要の水準を固定していますが、計算は0.1秒前後なので、毎週の解き直しは計算の負担にはなりません。需要の水準を学びながら価格を決める考え方は、第10章で価格の実験と探索として扱います。

生鮮品の見切りと食品ロス

この章の値下げの考え方は、食品スーパーの売り場で毎日行われている見切りにもそのまま当てはまります。見切りは、消費期限や賞味期限が近づいた商品、その日のうちに売る総菜や弁当、鮮度の落ちる生鮮品の売価を引き下げて売り切ることです。季節商品のマークダウンと比べると、販売期間が10週ではなく数時間から数日と短く、売れ残ったときの処分価値がゼロ、あるいは廃棄の費用がかかってマイナスになる点が違います。問題の形は同じで、「残り時間」と「残り数量」を状態にして、どの時刻にどこまで下げるかを決めることになります。この章のコードの週を時刻に、処分価値の20円を0円や廃棄の費用に置き換えれば、同じ計算で見切りの規則を作ることができます。

見切りは、粗利の問題であると同時に、食品ロスの問題でもあります。農林水産省が公表している推計では、令和6年度の食品ロス量は年間461万トンで、そのうち事業系食品ロスが237万トン、家庭系食品ロスが224万トンです。事業系の内訳は、食品製造業110万トン・食品卸売業9万トン・食品小売業48万トン・外食産業70万トンとされています(農林水産省「食品ロスとは」)。売り場の値下げや見切りの判断は、このうち小売業の段階で出る量にかかわる判断の1つです。

見切りでは、売れ残りの処分価値が季節商品より低く、廃棄の費用がかかることもあります。そこで、この章の設定のまま、期末の処分価値だけを1本20円から0円、さらにマイナス30円(廃棄の費用、あるいは廃棄1本に食品ロスとしての社会的な費用の重みを足した値として、架空に置いたもの)に変えて、動的計画法を解き直しました。

規則を作るときに置いた期末の処分価値期待粗利(その行の処分価値で評価。動的計画法の厳密な値)期待粗利(全行を1本20円でそろえて評価。模擬)消化率売れ残り値引きの原資定価のまま来た場合に値下げを始める在庫(第2週/第5週/第8週)
1本20円(基準の設定)282,235円282,477円99.3%40本120,342円5,113本超/2,520本超/926本超
1本0円281,553円282,353円99.5%28本122,030円5,096本超/2,506本超/911本超
1本マイナス30円280,859円282,056円99.7%19本123,570円5,080本超/2,491本超/897本超

表の「消化率」「売れ残り」「値引きの原資」は2万シーズンの模擬の平均です。処分価値を下げると、値下げを始める在庫の境目は、処分価値を下げるたびに、どの週でも十数本ずつ低くなりました。売れ残りに対する罰が重くなるので、少し早めに値下げを始めるということです。その結果、売れ残りは40本から28本、19本へと減り、値引きの原資は120,342円から123,570円へ増えました。

粗利を比べるときには注意が要ります。表の2列目の期待粗利は、各行が自分の処分価値で評価した値なので、売れ残り1本の数え方(20円の収入か、30円の費用か)が行ごとに違います。この列の差(20円の行とマイナス30円の行の間で1,376円)の大半は、規則の違いではなく、売れ残りの数え方を変えたことによるものです。そこで、3つの規則を、同じ乱数の2万シーズンで、すべて処分価値1本20円として評価し直しました(3列目)。こうすると、マイナス30円で作った規則の期待粗利は282,056円で、基準の20円で作った規則の282,477円より421円(0.15%)少ないだけです。この差は、20円の行で厳密な値と模擬の値が242円ずれていることと同じ桁の、小さな差です。この例では、動的計画法がもともと売れ残りを平均40本まで抑えているので、処分価値の重みを変えても規則の動きは小さく、売れ残りを40本から19本へ半分以下にしても、同じ物差しで測った粗利は数百円しか減りませんでした。値下げしない規則Aの売れ残りが平均1,714本だったことと比べると、廃棄を減らすうえで効いているのは、処分価値の重みづけよりも、そもそも売れ行きに応じて値下げする規則を持つことのほうだと読めます。

この表から言えることは2つあります。1つ目は、食品ロスを減らすこと自体を目的に入れたい場合には、廃棄1本あたりに処分の費用とは別の重みを足すという書き方ができ、その重みを大きくするほど、廃棄が減り粗利が少し減るという兼ね合いを、数字で示せることです。「廃棄をこれだけ減らすために、粗利をいくらまで手放すか」を経営として決める材料になります。これは第6章の販促の原資や、第5章で見た制約1つあたりの費用と同じ考え方です。2つ目は、売り切ることだけを目標にすると値引きをしすぎることです。「値下げの規則を比べる」の節で見た消化率の規則Cは、売れ残りを平均8本まで減らしましたが、値引きの原資は178,532円で、処分価値をマイナス30円にした動的計画法の123,570円より5万円以上多くなっています。「必ず売り切る」を目標にした見切りは、廃棄を減らす代わりに、値下げしなくても売れた商品まで安く売ることになりがちです。見切りの規則を決めるときには、廃棄の量と値引きの原資の両方を見る必要があります。

値下げの判断に使う情報と、判断の結果として動く経営指標の関係を表す概念図の図

経営の判断に翻訳する

この章の結果を、経営の判断に使える形に整理します。1つ目は、値下げを「粗利を削るもの」と見るか「処分の損失を減らすもの」と見るかで、判断が逆になることです。この章の設定では、値下げしない規則Aの期待粗利188,574円に対して、動的計画法Eは282,477円で、値下げをすることで期待粗利が約9.4万円増えました。仕入れが済んだあとの季節商品では、原価はもう変えられないので、判断の基準は「これから得られる売上と処分の収入の合計」になります。値下げの実績を、平均販売単価の低下や値引きの原資の大きさだけで評価すると、この判断を誤ります。値下げの評価は、売れ残りと処分の損失を含めたシーズン全体の粗利で行う必要があります。

2つ目は、値下げの規則の選び方で、粗利がシーズンあたり数万円単位で変わることです。同じ需要の下で、暦どおりのBは239,247円、消化率の規則Cは228,479円、動的計画法Eは282,477円でした。Eに対してBは15.3%、Cは19.1%低い期待粗利です。この差は、規則を作るための計算の手間に比べて大きいと考えています。動的計画法の計算はこの例で0.1秒前後で、毎週の会議の前に解き直しても負担になりません。一方で、答えが「残り週数と残り在庫ごとの境目の表」として出てくるので、売り場の担当者が使う形に翻訳する作業は必要です。「最適な値下げの規則を読む」の節の境目の表のように、「第5週の初めに在庫が2,520本を超えていたら128円に下げる」という形にすれば、毎週の判断の基準として渡すことができます。

3つ目は、判断を誤ったときの損失の型です。値下げが遅すぎる、あるいは小さすぎる側の誤りは、売れ残りと処分の損失として期末に現れます。値下げしない規則Aの売れ残りは平均1,714本で、1本60円の損失として約10万円分です。値下げが早すぎる、あるいは大きすぎる側の誤りは、値引きの原資として期中に現れます。消化率の規則Cの値引きの原資は178,532円で、動的計画法Eの120,342円より約5.8万円多くなりました。前者は「売れ残り」として目に見えますが、後者は「売り切った」という成果の陰に隠れて見えにくい損失です。消化率だけを評価の指標にすると、後者の損失を積み上げる方向に現場の判断が向きます。消化率と粗利を必ず並べて見ることが大切です。

4つ目は、需要の見込みの精度の価値です。需要が見込みの0.7倍だった場合、見込みのまま動的計画法を使ったEの期待粗利155,012円に対して、水準を知っていたE*は179,613円でした。需要が1.3倍だった場合も、Eの340,271円に対してE*は369,393円です。この差は、需要の見込みを外したことの費用であり、シーズン前の需要予測や、シーズン序盤の売れ行きから見込みを早く直す仕組みにかける投資の上限の目安になります。規則を精密にすることと、見込みを精密にすることは別の投資で、両方がそろって初めて動的計画法の答えが最適に近づきます。

この章の要点は3つです。第一に、季節商品の値下げは、仕入れが済んだ在庫を期限までにどう売るかという問題で、残り週数と残り在庫を状態にした動的計画法で、値下げの週と幅を決める規則を厳密に求められます。この例では、値下げしない場合より期待粗利が約5割増え、暦どおりや消化率を目標にした単純な規則の期待粗利は、動的計画法より15〜19%低くなりました。第二に、上げ直さないという制約には、この設定で期待粗利の2.3%の費用がありますが、それは顧客が値下がりを待たない場合の上限です。第三に、動的計画法の規則は需要の見込みが正しい範囲で最適で、需要が多い側に外れると早すぎる値下げを取り返せず、単純な規則に負けることもあります。見込みを毎週直して解き直す運用が欠かせません。次の第8章では、容量が決まっていて売れ残りの価値がゼロになる事業として宿泊や座席を取り上げ、価格の段階ごとに販売枠を決めるレベニューマネジメントを扱います。

Anagraftでは、データ活用の構想づくりから、値下げや販促のような価格の業務課題の定式化、需要の推定と最適化の設計と実装、結果の読み解きと意思決定への接続、社内への定着まで一貫したご支援を行っています。会社概要・ご支援内容の詳細は、以下の資料からご覧いただけます。

Anagraft 会社概要資料(ダウンロードページへ)

この章を深めたい方への参考書籍

『マルコフ決定過程 理論とアルゴリズム』(中出康一、コロナ社):状態と行動と確率的な遷移で書かれる意思決定の問題を、動的計画法を出発点にして体系的に解説する本です。この章で使った「最終週から逆向きに価値を求め、各状態で最良の行動を選ぶ」計算は、この本の枠組みでは有限期間のマルコフ決定過程の解き方に当たります。状態の数が増えて表で解けなくなったときの近似の考え方まで含めて、値下げの規則の計算を一般化するのに役立ちます。

『食品ロスの経済学 第4版』(小林富雄、農林統計出版):食品ロスがどこでなぜ発生するのかを、経済学の立場から分析した本です。この章の後半で触れた見切りと食品ロスの関係を、流通の取引慣行や業態ごとの事情まで含めて考えるのに向いています。値下げの規則を粗利の計算だけで決めず、廃棄を減らすことをどう目的に入れるかを考える材料になります。

第8章 レベニューマネジメントで容量を売り分ける

第7章では、季節品の在庫を売り切るために、残り週数と残り在庫に応じて値下げの時期と幅を決める問題を動的計画法で解きました。そこでは在庫を「売り切ること」が課題で、売れ残った商品にも処分価値が少し残っていました。この章で扱うのは、容量(客室・座席・車両など)が固定されていて、その日を過ぎると売れ残った容量の価値がゼロになる事業です。宿泊・航空・興行の座席・レンタカーなどがこれに当たります。こうした事業で、同じ容量を条件の違う複数の料金で売り分け、限られた容量から得る収入を大きくする技術の体系をレベニューマネジメントと呼びます。この章では、架空のビジネスホテルを例に、2つの料金クラスの売り分けを決める公式、3つ以上のクラスに広げる近似の方法、無断キャンセルを見込んで客室数より多く予約を受ける判断を、実際に計算して確かめます。価格そのものを時間とともに連続的に動かす話は第9章で扱います。この章の計算は、第7章と同じく、需要の分布(料金クラスごとの需要の平均とばらつき)を売り手が正しく知っているという前提で最適を求めます。見込みが外れた場合の損は、後の節で別に確かめます。

レベニューマネジメントが決めるのは「どの料金で何室まで売るか」

レベニューマネジメントの考え方を整理した van Ryzin と Talluri のチュートリアル(INFORMS の Tutorials in Operations Research、2005年。同じ著者たちのレベニューマネジメントの教科書からの抜粋として書かれたもの)は、売り手が決めることを3つの種類に分けています。販売の形式(定価で売るか、交渉か、競売か)や顧客の区分の仕方、取消や払い戻しの条件を決める構造の判断、価格をいくらにするかを決める価格の判断、そして申し込みを受けるか断るか、容量をどの区分にどれだけ割り当てるかを決める数量の判断です。この記事のここまでの章は主に価格の判断を扱ってきました。この章の中心は3つ目の数量の判断で、料金の水準そのものは前もって決まっているものとして、「早期割引の予約をあと何室まで受けるか」「正規料金の客のために何室残しておくか」を決めます。

同じチュートリアルは、どちらの判断が中心になるかは業種で違うと述べています。航空会社が売る運賃の種類は、どれも同じ座席という1つの容量から供給されるので、数量の調整がしやすく、容量の割当が自然な手段になります。これに対して小売業は、最初の仕入れ量を先に決めてしまう一方で、価格はあとから動かしやすい、という対比です。第2章から第7章で扱った食品スーパーの値付けや値下げは後者で、この章のホテルは前者に当たります。

チュートリアルは、レベニューマネジメントが効きやすい条件として、顧客の多様性(支払ってよいと考える金額や買い方が客によって違う)、需要の変動と不確かさ、生産の柔軟性の低さ(需要に合わせて供給を増減しにくい)、データと情報システムの基盤、の4つを挙げ、加えて経営の文化が導入を左右すると述べています。ホテルの客室はこの条件によく当てはまります。客室数は建物で決まっていて、需要の多い夜に部屋を増やすことはできません。出張の客と観光の客では、予約の時期も、払ってよいと考える金額も違います。そして、今夜売れ残った客室を明日に持ち越すことはできません。売れ残った1室は、清掃などの費用がかからない代わりに、建物や人件費などの固定費の回収にまったく寄与しません。

この性質が、小売の値付けとの大きな違いを生みます。第2章から第6章で扱った飲料の通常売価は、価格を下げれば数量が増え、在庫は補充できるので、売れた数だけ粗利が積み上がりました。客室ではそうはいきません。安い料金で早く客室を埋めると、あとから来る高い料金の客を断ることになります。逆に、高い料金の客のために客室を空けておきすぎると、その客が来なかった夜には空室が残ります。どちらに振っても損が出うるので、「どの料金の客に、何室まで売るか」を、需要の予測とその不確かさから決める必要があります。これが、この章で解く問題の形です。

レベニューマネジメントの起源は航空会社です。前出のチュートリアルによれば、出発点は米国の1978年の航空規制緩和法(Airline Deregulation Act)でした。運賃が規制から外れ、費用の安い新しい航空会社が参入して、休暇の旅行などの価格に敏感な客を大きく取り込みました。既存の大手航空会社にとって、全面的な値下げ競争は採れない選択でした。そこで、便ごとに余りそうな座席を見極め、その座席にだけ購入条件の制限を付けた割引運賃を割り当てる、という方法が取られます。割引運賃に条件を付けるのは出張の客が割引運賃に流れないようにするためで、割引の座席数を便ごとに管理するのは正規運賃の客の座席を守るためです。

チュートリアルは、この仕組みを支えたシステムとして American Airlines が開発した DINAMO を挙げ、多くの点で業界で最初の大規模なレベニューマネジメントのシステム開発だったと紹介しています。導入の時期について、チュートリアルは、1985年1月に新しい割引運賃の制度の開始と同時に全面的に導入されたと書いています。チュートリアルはまた、Smith・Leimkuhler・Darrow の論文(1992年)を引いて、同社がレベニューマネジメントの実践によって1988年ごろからの3年間に14億ドルの追加の収入を得たと見積もっていることを紹介し、いくつかの業種でレベニューマネジメントのシステムを入れて収入が5%以上増えたという報告があるとも述べています。これらは企業や研究者の報告をチュートリアルが紹介したもので、どの企業でも同じ効果が出るという意味ではありません。なお、DINAMO の導入の年(1985年)はチュートリアルの記述によるもので、この論文の要旨には書かれていません。チュートリアルは、航空と同じ性質(容量が固定で、売れ残りの価値が残らない)を持つ業種として、ホテル・クルーズ船・レンタカー・劇場やスポーツの会場・放送の広告枠などを挙げています。この章でホテルを例にとるのはこのためです。実在の企業の導入事例は第14章で扱います。

架空のビジネスホテルの設定

この章では、第2章で用意した飲料のサンプルデータとは別に、架空のビジネスホテルを設定します。実在のホテルや予約サイトの料金・客室数・需要の記録ではなく、計算の仕組みを示すために作った数字です。料金は1泊1室あたりの室料として円で書きますが、実在の宿泊施設の料金水準を表すものではありません。最初は2つの料金クラスだけの単純な形から始め、あとの節で4つのクラスに広げます。対象は、ある平日の1泊だけです。連泊の客をどう扱うかは、モデルの限界の節で触れます。この章の収入と粗利は、すべてこの1泊ぶんの客室の額(粗利は室料から1室ごとの変動費を引いた額)で、第5章の週あたりの粗利とは単位が違います。

項目値(すべて架空)意味
客室数120室その夜に売れる客室の上限。増やせない
正規料金12,000円宿泊日の直前まで予約でき、変更・取消の自由が大きい料金。出張の客が中心という想定
早期割引7,000円早い時期に予約し、払い戻しのない料金。観光の客が中心という想定
正規料金の需要平均50室・標準偏差15室その夜に正規料金で泊まりたい客の数。夜ごとにばらつく
早期割引の需要平均110室・標準偏差25室その夜に早期割引なら泊まりたい客の数
予約の来る順早期割引が先、正規料金があと早期割引の予約を受けている時点では、正規料金の需要がいくつになるかはまだ分からない
1室を売ると増える費用1,500円清掃・リネン・アメニティなど、泊まった客室にだけかかる費用

需要は、夜ごとに偶然ばらつく客の数を表す確率分布(負の二項分布。平均と標準偏差を別々に決められる分布)で表し、平均と標準偏差が表の値になるように作りました(分布から計算し直した値も、正規料金が平均50.0・標準偏差15.0、早期割引が平均110.0・標準偏差25.0で一致しています)。2つの需要を合わせると平均160室で、客室数120室を上回ります。つまりこのホテルは、平均的な夜には全員を泊めることができず、誰かを断る必要がある設定です。需要が客室数を大きく下回る夜には、売り分けの工夫で得られるものはほとんどありません。レベニューマネジメントの効果が大きいのは、このように需要が容量を上回る夜です。

「予約の来る順」の行が、この問題の要です。早期割引の客は宿泊日より前に予約し、正規料金の客は直前に予約するので、ホテルは早期割引の予約を受けるかどうかを、正規料金の需要が分からないうちに決めなければなりません。「安い客が先に来て、高い客があとから来る」という順序は、ここで紹介する古典的なモデルの前提で、チュートリアルも静的なモデルの仮定として明記しています。あわせて、取消も客室数を超える予約の受付もないことを前提にしています。取消を見込んだ予約の受け方は、あとのオーバーブッキングの節で別に扱います。

リトルウッドの公式で保護枠を決める

このホテルが決めるのは、正規料金の客のために残しておく客室の数です。これを保護枠(protection level)と呼びます。保護枠を46室にするということは、早期割引の予約は74室までしか受けず、残りの46室は正規料金の客のために取っておく、という意味です。保護枠の裏返しとして、安いクラスに売ってよい上限(この例では74室)を予約上限(booking limit)と呼びます。

保護枠の決め方として最も古く、今も考え方の土台になっているのがリトルウッドの公式です。Ken Littlewood が1972年10月の第12回 AGIFORS シンポジウム(AGIFORS は、航空業界での OR(オペレーションズ・リサーチ)の応用を目的とする専門家の団体)で発表した、旅客の予約の予測と管理を論じた論文に由来し、この論文は2005年にレベニューマネジメントと価格設定を扱う学術誌 JRPM の第4巻(111〜123ページ)に再録されました(原題と掲載誌の正式名は参考情報に記載します)。再録版の要旨は、この論文が「乗せた旅客の数」ではなく「便ごとに得る収入」を最大にするという考え方を導入したと説明しています。

公式の考え方は、1室ずつの損得の比較です。残りの客室が x 室のときに早期割引の予約が来たとします。受ければ確実に7,000円が入ります。断ってその1室を正規料金のために残せば、正規料金の需要が x 室以上あった場合に限って12,000円が入ります。したがって、残した1室の期待値は「12,000円×正規料金の需要が x 室以上になる確率」です。早期割引の7,000円がこの期待値以上なら受け、下回るなら断るのが得です。残りの客室が少なくなるほど、正規料金の需要がそれを上回る確率は上がるので、ある室数を境に「断るほうが得」に切り替わります。その境目が最適な保護枠です。式で書くと次のとおりです。

\( P(D_1 > y^*) = \dfrac{p_2}{p_1} \quad \Longleftrightarrow \quad y^* = F_1^{-1}\!\left(1 – \dfrac{p_2}{p_1}\right) \)

言葉で言い換えると、「正規料金の需要 \( D_1 \) が保護枠 \( y^* \) を超える確率が、料金の比(安い料金 \( p_2 \) ÷高い料金 \( p_1 \))にちょうど等しくなるところまで客室を残す」ということです。右の形は、正規料金の需要の分布 \( F_1 \) で、累積確率が「1から料金の比を引いた値」に届く室数を読めばよい、という意味です。前の段落の「x 室以上」と式の「超える」は、室の数え方の起点が1つ違うだけで、どちらも「残した次の1室が売れる確率」を指しています。結論の保護枠は変わりません。チュートリアルは、この形を在庫理論のニューズベンダー問題(売れ残りと品切れの損を比べて1回分の仕入れ量を決める問題)と似た構造だと説明し、連続の分布を使う場合にこの式が最適な方針を与えることを示しています。ニューズベンダー問題そのものは、弊社コラム『在庫と発注量を決める数理モデル、安全在庫の計算から多段階在庫の最適化まで』の第6章で扱っています。

架空のホテルに当てはめると、料金の比は7,000÷12,000=0.5833で、1から引くと0.4167です。正規料金の需要の分布で累積確率が0.4167に届く室数を数えると、46室になりました。正規分布で近似して計算すると46.8室で、ほぼ同じです。保護枠が正規料金の需要の平均(50室)より少し小さいのは、料金の比が0.5833と大きめだからです。早期割引でも正規料金の6割近くが入るので、平均ぎりぎりまで客室を空けて待つより、少し早めに早期割引に売ったほうが期待値で得になります。料金の比が小さい(早期割引がずっと安い)ほど、保護枠は大きくなります。

次のコードは、公式で保護枠を出したうえで、保護枠を0室から120室まで1室ずつ全部試して期待収入が最大になる室数を探し、両者が一致するかを確かめるものです。このまま単独で実行できます。

import numpy as np
from scipy import stats

C, P1, P2 = 120, 12000, 7000           # 客室数・正規料金・早期割引(架空)
def demand(m, s):                       # 平均 m・標準偏差 s の負の二項分布
    n = m * m / (s * s - m)
    return stats.nbinom(n, n / (n + m))
d1, d2 = demand(50, 15), demand(110, 25)  # 正規料金・早期割引の需要(架空)

# リトルウッドの公式:正規料金の需要が y を超える確率が P2/P1 以下になる最小の y
y = 0
while d1.sf(y) > P2 / P1:
    y += 1
print("保護枠", y, "室 / 早期割引の予約上限", C - y, "室")

# 確かめ:保護枠を0〜120室で全部試し、期待収入が最大になる室数を探す
k = np.arange(401)
f1, f2 = d1.pmf(k), d2.pmf(k)
def revenue(y):
    sold2 = np.minimum(k, C - y)                            # 早期割引の販売室数
    sold1 = np.minimum(k[None, :], (C - sold2)[:, None])    # 残りの客室に正規料金
    return (f2 * (P2 * sold2 + (f1 * P1 * sold1).sum(axis=1))).sum()
best = max(range(C + 1), key=revenue)
print("全部試した最適", best, "室 / 期待収入", round(revenue(best)), "円 / 先着順", round(revenue(0)), "円")
# 出力:
# 保護枠 46 室 / 早期割引の予約上限 74 室
# 全部試した最適 46 室 / 期待収入 1020711 円 / 先着順 910433 円

コードの前半が公式そのものです。d1.sf(y) は「正規料金の需要が y 室を超える確率」で、これが料金の比を下回るまで y を1ずつ増やしています。後半の revenue は、早期割引の需要がいくつのときに何室売れ、残った客室に正規料金の客が何室入るかを、2つの需要のすべての組合せについて確率で重みづけして足し合わせ、1泊の期待収入を正確に計算しています。乱数のシミュレーションではなく分布からの計算なので、何度実行しても同じ値になります。出力のとおり、全部試して見つけた最適は46室で、公式と一致しました。

保護枠を変えると収入・稼働率・客室単価がどう動くか

保護枠の大きさを変えたときの期待収入と客室稼働率(販売した客室数÷客室数)を、0室から120室まで描いたのが次の図です。この章のスクリプトで、保護枠ごとに分布から期待値を計算しました。

架空のビジネスホテル(120室・2クラス)で、正規料金のために残す客室数(保護枠)を横軸に、1泊の期待客室収入を実線、客室稼働率を点線で描いた図。期待収入は保護枠0室(先着順)の91.0万円から上がり、保護枠46室(リトルウッドの公式)で最大の102.1万円になり、そこから先は下がる。客室稼働率は保護枠40室付近までほぼ100%で、そこから下がっていく

保護枠0室、つまり先着順に予約を受ける場合、早期割引の客が先に客室をほとんど埋めてしまい、期待収入は91.0万円にとどまります。保護枠を増やすと収入は上がり、46室で最大の102.1万円になります。そこを過ぎると、正規料金の客が来なかった夜の空室が増えて、収入は下がっていきます。点線の稼働率は、保護枠が小さいうちはほぼ100%で、保護枠を大きくするほど下がります。収入の山と稼働率の山は一致しません。代表的な保護枠について、内訳を並べたのが次の表です。表の客室単価は収入÷販売した客室数(売れた1室あたりの収入)、RevPAR は収入÷客室数(販売できる客室1室あたりの収入)で、定義の出典は後の「経営指標の定義を確かめる」の節に示します。

方針保護枠早期割引の販売室数正規料金の販売室数断った正規料金の客期待収入粗利(変動費控除後)客室稼働率客室単価RevPAR
保護枠なし(先着順)0室104.0室15.2室34.8人910,433円731,615円99.3%7,637円7,587円
保護枠=正規料金の需要の平均50室69.7室44.1室5.9人1,017,739円846,952円94.9%8,939円8,481円
リトルウッドの公式46室73.5室42.2室7.8人1,020,711円847,178円96.4%8,823円8,506円
保護枠を多めに70室50.0室49.1室0.9人939,000円790,380円82.6%9,477円7,825円
保護枠を大きく90室30.0室49.9室0.1人809,014円689,137円66.6%10,123円6,742円

表の数字はすべて1泊あたりの期待値で、架空の設定から計算したものです。「期待収入」の列で見ると、リトルウッドの公式(保護枠46室)は先着順より1泊あたり110,278円、比率で12.11%多くなります。先着順では、正規料金で泊まりたい客のうち平均34.8人を、満室を理由に断っています。この34.8人は、安い早期割引の客に先に客室を渡した結果として失った、高い料金の客です。

一方で、「客室稼働率」の列は先着順が99.3%で最も高く、「客室単価」の列は保護枠を大きくするほど上がり、保護枠90室では10,123円になります。稼働率だけを目標にすれば先着順が最良に見え、客室単価だけを目標にすれば保護枠を大きくするほど良く見えます。どちらも、期待収入が最大の方針を指しません。期待収入が最大の方針を指すのは「RevPAR」の列で、リトルウッドの公式の8,506円が最大です。RevPAR の分母の客室数は決まっているので、RevPAR は収入と同じ順位になります。稼働率と客室単価を別々に目標にせず、RevPAR を主な指標にして、稼働率と客室単価はその内訳として見るのはこのためです。ただし RevPAR も収入の指標で、1室ごとの変動費や、後の節で扱うオーバーブッキングの費用は含みません。変動費を引いた粗利で保護枠を決めた場合は、この節の後半で確かめます。

保護枠の決め方をもう1つ比べておきます。「正規料金の需要の平均(50室)だけ残す」という分かりやすい規則でも、期待収入は1,017,739円で、公式との差は2,972円(0.29%)でした。最適の近くでは曲線が平らで、公式から5室少ない41室では0.31%、5室多い51室では0.44%、10室少ない36室では1.26%、10室多い56室では1.63%だけ収入が下がります。第4章で見た利益曲線の平らさと同じ性質で、最適の数室の違いに神経質になる必要はありません。大きな損は、保護枠を持たない(先着順)か、極端に大きく取ったときに出ます。

保護枠の計算には、もう1つ注意点があります。リトルウッドの公式の比は、元の形では料金の比です。しかし、客室を1室売ると清掃やリネンの費用が増えるので、ホテルが手にする粗利は料金から変動費を引いた額です。架空の設定では1室を売ると1,500円の費用がかかるので、粗利で比べると早期割引は5,500円、正規料金は10,500円で、比は0.5238になります。料金の比0.5833より小さくなるので、公式に当てはめると保護枠は48室になり、料金で計算した46室より2室増えます。保護枠を0室から120室まで全部試して粗利(変動費控除後)が最大になる室数を探しても48室で、粗利の比で計算した値と一致しました。

理由は単純で、変動費は料金の高低によらず1室ごとに同じ額がかかるため、安い料金ほど粗利の目減りの割合が大きいからです。変動費が大きい業態ほど、安いクラスの魅力は料金の比で見るより小さくなり、高いクラスのために残す客室を増やすのが得になります。目的を収入にするか粗利にするかで答えが変わるので、どちらを最大にするのかを最初に決めておく必要があります。客室の販売を収入で評価している組織でも、変動費が無視できない場合は粗利の比で保護枠を計算するほうが、会社の利益に沿った判断になると考えています。ただし、この例での差は2室で、粗利への影響も小さいものでした。

経営指標の定義を確かめる

ここまで使った客室稼働率・客室単価・RevPAR は、ホテルの経営で最も基本的な指標ですが、分母と分子の取り方が資料によって少しずつ違うことがあります。この章では、沖縄振興開発金融公庫の調査報告『2020年度県内主要ホテルの稼働状況』(公庫レポート174号)の用語の定義に合わせました。この報告の定義を、この章の計算への当てはめと並べると次のとおりです。

指標報告の定義(計算式)この章の計算
客室稼働率(OCC)延販売客室数÷販売可能客室数(公表客室数×対象期間の営業日数)1泊の期待販売室数÷120室
客室単価(ADR)宿泊収入÷延販売客室数1泊の期待収入÷1泊の期待販売室数
RevPAR宿泊収入÷販売可能客室数、または客室稼働率×客室単価。販売可能客室1室当たりの宿泊収入1泊の期待収入÷120室

報告は RevPAR を、客室稼働率と客室単価の積で成り立ち、客室販売実績の総括的な指標の役割を果たすものと説明しています。注意したいのは、この報告では公表客室数に修理・改装中の部屋や業務で使っている部屋を含めていることと、宿泊収入に消費税・サービス料・分離できない食事料金を含めていることです。販売可能な客室から改装中の部屋を除く、税抜きの室料だけで計算する、といった別の取り方をする資料もあるので、自社の指標を他社や業界の統計と比べるときは、分母と分子の定義をそろえてから比べる必要があります。この章の架空の計算では、120室すべてが販売可能で、料金はすべて室料として扱っています。

3つ以上のクラスに広げる EMSR

現実のホテルの料金は2つでは済みません。正規料金・法人向けの料金・早期割引・予約サイトのセールなど、条件の違う料金がいくつも並びます。クラスが3つ以上になると、リトルウッドの公式はそのままでは使えず、厳密な最適を求めるには、クラスごとの段階を順にたどる動的計画法が必要になります。実務でよく使われてきたのは、2クラスの公式を繰り返し当てはめる近似の方法で、EMSR(expected marginal seat revenue、座席1つあたりの期待限界収入)と呼ばれます。チュートリアルは、EMSR を Belobaba の1987年の博士論文と、それにもとづく論文(Transportation Science、1987年。Operations Research、1989年)に帰しています。

EMSR には2つの版があります。EMSR-a は、上位のクラスを1つずつ取り出して、いま判断しているクラスと2クラスの公式で比べ、その保護枠を足し合わせる方法です。EMSR-b は、上位のクラスの需要を1つにまとめ、まとめた需要の平均料金(各クラスの料金を需要の平均で重みづけした平均)を高いほうの料金とみなして、2クラスの公式を1回当てる方法です。チュートリアルは、EMSR-a のほうが広く紹介されてきたものの、実務で好まれ、一般に成績が良いのは EMSR-b だと述べ、Belobaba が報告した研究では EMSR-b が最適な収入から常に0.5%以内だった一方、EMSR-a は場合によって最適から1.5%近く離れたことを紹介しています。ただし、Lufthansa のデータを使った別の研究では、どちらが優れるとも言えない結果だったとも書いています。

架空のホテルを4クラスに広げて確かめました。設定は次の表のとおりです。予約は最も安いセールから順に来て、最後に正規料金の客が来るという、2クラスのときと同じ前提を置いています。

クラス料金(架空)需要の平均需要の標準偏差予約の来る順
1 正規13,000円25室9室最後
2 標準10,500円35室11室3番目
3 早割8,000円45室14室2番目
4 セール6,000円60室18室最初

需要の平均の合計は165室で、客室数120室を45室上回ります。EMSR-b の計算は次のとおり短く書けます。上位のクラスの需要を正規分布で近似し、平均と分散を足し合わせてまとめているのは、チュートリアルが EMSR-b でよく使われる仮定として紹介しているやり方に合わせたものです。このコードも単独で実行できます。

import numpy as np
from scipy import stats

# 4つの料金クラス(架空)。1が最も高く、予約は安いクラスから順に来る
P = np.array([13000, 10500, 8000, 6000])   # 料金
MU = np.array([25, 35, 45, 60])            # 需要の平均
SD = np.array([9, 11, 14, 18])             # 需要の標準偏差

def emsr_b(P, MU, SD):
    prot = []
    for j in range(1, len(P)):
        m = MU[:j].sum()                         # 上位 j クラスの需要を1つにまとめる
        s = np.sqrt((SD[:j] ** 2).sum())
        pbar = (P[:j] * MU[:j]).sum() / m        # まとめた需要の平均料金(需要で重みづけ)
        prot.append(stats.norm.ppf(1 - P[j] / pbar, m, s))   # リトルウッドの公式を当てる
    return np.array(prot)

y = emsr_b(P, MU, SD)
print("保護枠(上位クラスのために残す室数):", np.round(y, 1))
print("クラス2〜4の予約上限:", 120 - np.round(y).astype(int))
# 出力:
# 保護枠(上位クラスのために残す室数): [ 17.2  52.8 100. ]
# クラス2〜4の予約上限: [103  67  20]

出力の保護枠は、左から「正規のために残す室数」「正規と標準のために残す室数」「正規・標準・早割のために残す室数」です。保護枠は上位のクラスを含めて入れ子になっていて、たとえばセールの予約は、客室の残りが100室になった時点で止め、120室から100室を引いた20室までしか受けません。早割の予約は残りが53室になるまで、標準の予約は残りが17室になるまで受けます。正規料金の客は、空いている限り最後の1室まで受けます。

この保護枠の期待値を、需要の分布から正確に計算し、先着順・EMSR-a・動的計画法で求めた厳密な最適と比べたのが次の表と図です。厳密な最適は、残りの客室数ごとに「あと1室を残す価値」を下位のクラスから順に計算する動的計画法で求めました。

方針保護枠(整数)期待収入厳密な最適との差粗利(変動費控除後)客室稼働率客室単価RevPAR
先着順(保護枠なし)0・0・0889,827円15.51%少ない710,295円99.7%7,435円7,415円
EMSR-a17・50・941,049,891円0.31%少ない876,276円96.5%9,071円8,749円
EMSR-b17・53・1001,053,184円差なし882,847円94.6%9,274円8,777円
厳密な最適(動的計画法)17・53・1001,053,184円基準882,847円94.6%9,274円8,777円
架空のビジネスホテル(4クラス)で、先着順・EMSR-a・EMSR-b・厳密な最適(動的計画法)の4つの方針について、1泊の期待販売室数をクラス別(正規・標準・早割・セール)に積み上げた横棒グラフ。先着順はセールと早割で客室の大半が埋まり正規は2.4室、期待収入89.0万円。EMSR-a は105.0万円、EMSR-b と厳密な最適はどちらも正規20.6室・標準32.6室・早割40.3室・セール20.0室で105.3万円

この設定では、EMSR-b の保護枠を整数に丸めた値(17・53・100)が、動的計画法で求めた厳密な最適と完全に一致し、期待収入も同じ1,053,184円になりました。EMSR-a は「正規と標準のため」「正規・標準・早割のため」の保護枠がそれぞれ50室・94室と少なめで、期待収入は厳密な最適より0.31%(3,293円)少なくなりました。チュートリアルが紹介する傾向(EMSR-b のほうが成績が良い)と同じ向きの結果ですが、これは1つの架空の設定での結果で、一般にいつも EMSR-b が厳密な最適と一致するわけではありません。

差が大きいのは先着順です。図のいちばん上の棒のとおり、先着順ではセール60.0室と早割41.2室で客室の大半が埋まり、正規料金の客はわずか2.4室しか泊まれず、平均22.6人を断っています。期待収入は厳密な最適より15.51%少ない889,827円です。稼働率は99.7%で4つの方針の中で最も高いので、稼働率だけを見て運営していると、この損は見えません。

需要の予測を誤ったとき

EMSR も動的計画法も、各クラスの需要の分布が分かっていることを前提にしています。現実には需要は予測するしかなく、予測は外れます。そこで、正規と標準の2クラスの需要の平均(と標準偏差)を、真の値より小さく、あるいは大きく見込んで EMSR-b の保護枠を計算し、その保護枠を真の需要で評価しました。

上位2クラスの需要の見込みEMSR-b の保護枠期待収入(真の需要で評価)厳密な最適との差客室稼働率客室単価
真の値の0.6倍(少なく見込む)10・32・76992,613円5.75%少ない99.5%8,317円
真の値の0.8倍14・42・881,035,292円1.70%少ない98.1%8,790円
真の値どおり17・53・1001,053,184円差なし94.6%9,274円
真の値の1.2倍21・63・1121,035,781円1.65%少ない88.6%9,743円
真の値の1.4倍(多く見込む)24・74・120999,329円5.11%少ない82.4%10,107円

見込みを2割外すと期待収入は1.7%前後、4割外すと5%以上下がりました。損の出方は外す向きで違います。高いクラスの需要を少なく見込むと、保護枠が小さくなって安いクラスに客室を早く渡しすぎ、稼働率は高いまま客室単価が下がります。多く見込むと、保護枠が大きくなって空室が増え、客室単価は上がるのに稼働率が下がります。見込み1.4倍のときの「正規・標準・早割のため」の保護枠は120室で、客室数と同じになり、セールの予約をまったく受けない方針になっています。

この表は、運用の現場でよく見かける2つの症状の読み方を教えてくれます。「満室なのに客室単価が低い」夜が続くなら、高いクラスの需要を少なく見込んでいる可能性があります。「客室単価は高いのに空室が残る」夜が続くなら、多く見込んでいる可能性があります。どちらも、保護枠の計算式ではなく需要の予測を直すのが筋です。予測の作り方そのものは、弊社コラム『ビジネスデータの予測に効く時系列分析、基礎から実務まで』で扱っています。

もう1つ、需要の水準が夜によって変わる場合も確かめました。4クラスすべての需要の平均を同じ倍率で変え、平常の夜(倍率1.0)の EMSR-b の保護枠をそのまま使い続けた場合と、その夜の需要に合わせて保護枠を計算し直した場合を比べています。前の表は上位2クラスの見込みだけを変えたもので、この表は4クラスすべての需要を変えているので、同じ0.6倍でも計算し直した保護枠は前の表(10・32・76)と違う値(10・32・60)になります。

その夜の需要の水準需要の平均の合計先着順平常の夜の保護枠のまま需要に合わせ直した EMSR-b(保護枠)
平常の0.6倍99室836,174円749,885円837,282円(10・32・60)
平常の0.8倍132室939,291円940,817円983,540円(14・42・80)
平常どおり165室889,827円1,053,184円1,053,184円(17・53・100)
平常の1.2倍198室837,361円1,090,062円1,119,908円(21・63・120)

需要が客室数を下回る夜(0.6倍、平均の合計99室)に平常の保護枠を使うと、期待収入は749,885円で、先着順の836,174円より約10%少なくなりました。来ない上位クラスのために客室を空けて待ち、安いクラスの客を断ってしまうからです。需要の少ない夜には保護枠を小さくし、多い夜には大きくする。保護枠は一度決めて固定するものではなく、宿泊日ごとの需要の見込みに合わせて計算し直すものです。曜日・季節・地域の催しで需要が大きく動く宿泊業では、この見直しの仕組みがあるかどうかが、レベニューマネジメントの成果を左右すると考えています。

オーバーブッキングで無断キャンセルに備える

ここまでは、予約した客は必ず来ることを前提にしてきました。実際には、無断で来ない客や当日に取り消す客がいます。予約上限を客室数ちょうどにしておくと、来なかった客の分だけ空室が残ります。そこで、来ない客の分を見込んで、客室数より多く予約を受けることをオーバーブッキングと呼びます。受けすぎると、来た客を泊められないことが起き、代わりの宿の手配や移動の費用、お詫び、そして顧客の信用の損失が生じます。この判断も、1件ずつの損得の比較で解けます。

架空のホテルの設定を次のように置きました。需要が十分にあり、受けると決めた上限まで予約が入る夜を想定しています。予約のうち8%が当日来ず、来なかった客からは室料が入らないものとします。泊められなかった客1人あたりの費用は30,000円と置きました。泊まった1室あたりの平均室料は9,000円、変動費1,500円を引いた粗利は7,500円です。予約した客が来るかどうかは、1件ずつ独立に決まるものとします(あとでこの仮定を外します)。

予約を1件足すかどうかの損得は、次のように考えます。足した1件の客が来たとき、来館がまだ客室数に届いていなければ7,500円の粗利が増え、すでに客室数以上来ていれば30,000円の費用が増えます。したがって、「すでに受けた予約の来館が客室数以上になる確率」が、7,500÷(7,500+30,000)=0.20以下なら1件足すのが得です。この比も、リトルウッドの公式と同じ形の、増やしたときの得と損の比です。この章のスクリプトで確かめると、127件受けた状態で来館が120人以上になる確率は0.1949で0.20以下なので128件目は受け、128件受けた状態では0.2964で0.20を超えるので129件目は受けない、という判断になりました。予約上限ごとの期待値は次のとおりです。

予約上限期待宿泊室数客室稼働率泊められない人数の期待値泊められない客が出る確率期待粗利
120件(客室数ちょうど)110.40室92.0%0.000人0.0%828,000円
124件114.07室95.1%0.011人0.9%855,169円
126件115.83室96.5%0.090人5.7%866,013円
128件(最適)117.38室97.8%0.375人18.8%869,122円
130件118.57室98.8%1.027人40.2%858,485円
132件119.33室99.4%2.108人63.4%831,753円
136件119.91室99.9%5.211人92.2%742,969円
架空のビジネスホテルで、受け付ける予約の上限(120件から140件)を横軸に、1泊の期待粗利を折れ線、泊められない客が出る確率を棒で描いた図。期待粗利は120件の82.8万円から上がり、128件で最大の86.9万円になり、その先は下がる。泊められない客が出る確率は124件付近から上がり始め、128件で18.8%、135件を超えると9割近くになる

予約上限を客室数ちょうどの120件にすると、平均9.6室(120室から期待宿泊室数110.40室を引いた分)が空き、期待粗利は828,000円です。最適な128件まで受けると、稼働率は92.0%から97.8%に上がり、期待粗利は869,122円で、41,122円(4.97%)増えます。その代わりに、泊められない客が出る夜が18.8%の確率で生じ、1泊あたりの泊められない人数の期待値は0.375人です。言い換えると、この方針では5夜に1夜ほど、誰かに別の宿へ移ってもらうことになります。最適を超えて受けると、期待粗利は急に下がり、136件では客室数ちょうどの場合より低くなります。

最適な上限は、来ない割合と泊められない費用で大きく変わります。両方を変えて、最適な予約上限が客室数より何件多いかを計算したのが次の表です。

当日来ない割合泊められない費用 15,000円30,000円60,000円120,000円
3%3件多く2件多く1件多く1件多く
5%5件多く4件多く3件多く3件多く
8%9件多く8件多く6件多く5件多く
12%14件多く13件多く11件多く10件多く

来ない割合が大きいほど、上乗せは大きくなります。泊められない費用が大きいほど上乗せは小さくなりますが、費用を15,000円から120,000円へ8倍にしても、上乗せは数件しか減りません。費用を大きく置いても、上乗せの件数が0になるわけではないということです。泊められない費用には、代わりの宿の手配や移動といった目に見える費用だけでなく、その客が二度と予約しなくなる損や、口コミでの評判の損も含めて考える必要があります。この費用をいくらと置くかは計算では決まらず、経営の判断です。

最後に、来る・来ないが1件ずつ独立という仮定を外しました。団体の予約がまとめて取り消される、悪天候で交通が止まる、といった事情で、来ない割合が夜ごとにまとめて揺れる場合です。来ない割合の平均は8%のまま、夜ごとの揺れを入れた分布(ベータ二項分布)で計算すると、揺れの強さを表す値を0.01にしたときの最適な上限は126件、0.03にしたときは124件に下がりました。揺れの強さは、夜ごとの来ない割合がどれだけ平均からずれるかを決める値です。0.01のとき、来ない割合は平均8%に対して夜ごとに標準偏差で約2.7ポイント動き、10夜のうち1夜は4.7%以下、1夜は11.6%以上になります。0.03のときは標準偏差が約4.7ポイントで、10夜に1夜は2.8%以下、1夜は14.4%以上です。独立と仮定して決めた128件を、揺れの強さ0.03の夜にそのまま使うと、泊められない客が出る確率は40.4%、泊められない人数の期待値は1.501人に上がり、期待粗利は826,928円で、客室数ちょうどの120件(独立の場合の828,000円)を下回ります。来ない客の数を独立と仮定すると、揺れを過小評価して受けすぎる側に誤ります。来ない割合の平均だけでなく、夜ごとのばらつきを過去の記録から測っておくことが、オーバーブッキングを安全に使う前提になります。

モデルの前提と、使ってはいけない場面

この章のモデルはどれも、前提を置いて単純化したものです。チュートリアルは、ここで扱った静的なモデルの主な仮定と、その弱点を整理しています。実務に当てはめる前に、少なくとも次の点を確かめる必要があります。

  • 予約は安いクラスから順に来るか。現実には、正規料金の客が早く予約することも、セールの客が直前に来ることもあります。チュートリアルは、順序が入り混じる場合を扱う動的なモデルを別に紹介しています。価格を時間とともに動かす扱いは第9章で扱います
  • クラスごとの需要は、互いに独立で、保護枠の開け閉めに影響されないか。チュートリアルは、安いクラスを閉めたときに高いクラスを買う客(買い上がり)や、別の便に移る客がいることを挙げ、この仮定は実際には成り立たないと述べています。買い上がりがある場合は、安いクラスをより早く閉めるのが得になることも示しています
  • 高い料金の客が、条件の緩い安いクラスに流れていないか。割引の条件(事前購入・払い戻し不可など)が弱いと、高いクラスの客が安いクラスを買います。チュートリアルは、条件による区分には実際には漏れがあることを弱点として挙げています
  • 1泊だけで考えてよいか。チュートリアルは、同じホテルの連続した複数泊のように、客が複数の資源の組を求める問題をネットワークの問題と呼び、実務ではそれを1つずつの資源の問題の集まりとして解くことが多いと述べています。連泊の客を1泊ずつの保護枠で断ると、前後の夜の空室も一緒に失うことがあります

使ってはいけない場面も挙げておきます。1つ目は、需要が容量を大きく下回る時期です。前の節で見たとおり、来ない上位クラスのために客室を空けて待つと、先着順より収入が下がります。2つ目は、料金のクラスの区分が顧客に説明できない場合です。同じ部屋に、同じ日に予約した客が違う料金を払っていると、条件の違いが分からない客には不公平に見えます。チュートリアルも、航空の運賃が複雑で、隣り合う席の客の運賃が大きく違うことが消費者の反感を招いてきたことを、他業種が導入をためらう理由として挙げています。料金の区分は、条件(予約の時期・取消の可否・含まれるサービス)の違いとして説明できる形にしておく必要があります。価格の公平感と表示の法令は第12章で扱います。

レベニューマネジメントの判断の流れを表す概念図の図

経営の判断に翻訳する

この章の結果を、経営の判断に使える形に整理します。1つ目は、目標にする指標の選び方です。架空のホテルでは、先着順は2クラスでも4クラスでも客室稼働率が最も高い(99.3%と99.7%)のに、期待収入は最適を大きく下回る方針でした。2クラスの例で先着順とリトルウッドの公式の差は1泊あたり110,278円、4クラスの例で先着順と厳密な最適の差は163,357円です。稼働率を現場の目標にすると、安いクラスで早く埋めるほど評価が上がり、高い料金の客を断る損が見えなくなります。逆に客室単価だけを目標にすると、保護枠を大きくして空室を出すほど評価が上がります。容量が固定の事業では、RevPAR(あるいは変動費を引いた粗利を販売可能な容量で割った値)を主な指標にし、稼働率と客室単価は、その内訳を説明する指標として並べるのがよいと考えています。

2つ目は、投資の向け先です。この章の例では、2クラスの公式と平均だけ残す規則の差は0.29%、4クラスで EMSR-a と厳密な最適の差は0.31%でした。最適化の計算方法を精緻にすることの効果は、この例では小さいものでした。一方、上位クラスの需要の見込みを2割外すと1.7%前後、4割外すと5%以上の収入が失われ、平常の夜の保護枠を需要の少ない夜に使い続けると先着順を下回りました。保護枠の計算方法より、宿泊日ごとのクラス別の需要予測と、その予測に合わせて保護枠を計算し直す仕組みに先に手を入れるほうが、効果が大きいということです。チュートリアルがデータと情報システムの基盤を条件の1つに挙げているのも、この点につながります。

3つ目は、オーバーブッキングの方針を、収入の問題としてだけでなく顧客の信用の問題として決めることです。架空の設定では、128件まで受けると1泊の期待粗利は4.97%増えますが、5夜に1夜ほど客に別の宿へ移ってもらうことになります。来ない割合が夜ごとにまとめて揺れる場合、独立を仮定した上限は受けすぎになり、泊められない客が出る確率は40.4%まで上がりました。泊められない費用をいくらと置くか、泊められない客が出る確率の上限を何%にするかは、ブランドと顧客との関係を預かる経営が決めることです。計算は、その方針を置いたときに期待粗利がいくら変わるかを示す道具です。

判断を誤ったときの損失の型も整理しておきます。保護枠が小さすぎると、満室なのに客室単価が低く、高い料金の客を断る損が出ます。大きすぎると、空室が残って固定費が回収できません。オーバーブッキングが少なすぎると来ない客の分の空室が残り、多すぎると客を泊められない費用と信用の損失が出ます。どの損も、実績の記録(クラス別の予約数・断った数・来なかった数・泊められなかった数)を残していれば後から測れます。断った客の数は記録しなければ残らないので、予約システムで「満室・販売停止で受けられなかった問い合わせ」を数える仕組みを用意しておくことが、需要の予測の前提になります。

この章の要点は3つです。第一に、容量が固定で売れ残りの価値が残らない事業では、料金の水準と並んで「どの料金で何室まで売るか」という数量の判断が収入を大きく左右し、2クラスならリトルウッドの公式(高いクラスの需要が保護枠を超える確率を料金の比に合わせる)で最適な保護枠が決まります。第二に、3クラス以上では EMSR-b が実用的な近似で、この章の架空の設定では厳密な最適と一致しましたが、成果を大きく左右したのは計算方法より需要の予測の精度と、宿泊日ごとの見直しでした。第三に、オーバーブッキングも同じ限界の損得の比較で決まり、来ない割合のばらつきと泊められない費用の置き方が答えを動かします。次の第9章では、料金のクラスを固定せず、残りの日数と残りの容量に応じて価格そのものを動かすダイナミックプライシングを扱います。

この章を深めたい方への参考書籍

『レベニューマネジメント 収益管理の基礎からダイナミックプライシングまで』(佐藤公俊・澤木勝茂、共立出版):収益管理を経済学の基礎から説き起こし、航空産業の収益管理の章で Littlewood のモデルやオーバーブッキングを、続く章でダイナミックプライシングを扱う日本語の教科書です。この章の保護枠とオーバーブッキングの計算を、数式の導出まで含めて確かめるのに向いています。

『価格分析とレベニューマネジメント入門 Excelによる実践アプローチ』(エリック・ハウゴム著、佐藤公俊・太宰潮・木村隆介訳、千倉書房):価格の分析とレベニューマネジメントの手法を、Excel で手を動かしながら学ぶ入門書です。この章の計算を Python ではなく表計算で追ってみたい方や、現場の担当者と同じ道具で考え方を共有したい方に向いています。

第9章 ダイナミックプライシング

第8章では、客室数のように容量が決まっていて、売れ残った容量の価値がゼロになる事業で、料金クラスごとに何室まで売るか(保護枠)を決めるレベニューマネジメントを扱いました。そこでは料金の段階はあらかじめ決まっていて、決めるのは「どのクラスをいつ締め切るか」でした。この章では一歩進めて、価格そのものを時間と残り在庫に応じて動かす方法を扱います。売り切るべき数量と締め切りが決まっている商品について、「残り何日で、あと何個残っているか」を見て、その日の価格を決める考え方です。架空の興行の座席を例に、動的計画法で最適な価格表を作り、固定価格や数段階の価格表と、売上・売れ残り・価格の変動回数で比べます。あわせて、価格の改定回数や上下幅に制約を入れたときの損失と、顧客が値下がりを待つ行動が結果をどう変えるかを確かめます。

ダイナミックプライシングが決めること

この記事でダイナミックプライシングと呼ぶのは、販売の途中で、そのときの状況(残りの期間・残りの在庫・それまでの売れ行き)を見ながら価格を改定していく決め方です。第4章・第5章で扱った通常売価の最適化は、毎週同じように売れ続ける商品について、1つの価格を選ぶ問題でした。第7章の値下げ(マークダウン)は、季節の終わりまでに在庫を売り切るために価格を下げていく問題で、価格を上げ直さないという一方向の制約が付きます。この章で扱うのは、上げることも下げることもできる場合で、売り手が決めるのは「残り日数と残り在庫の組合せごとに、いくらにするか」という表です。この表をこの章では価格表(価格の方策)と呼びます。

この決め方が意味を持つのは、次の3つの条件がそろう事業です。1つ目は、売る数量の上限が先に決まっていることです。座席・客室・便の座席・季節品の在庫などがこれに当たります。2つ目は、販売に締め切りがあり、締め切りを過ぎると残った分の価値がなくなるか、大きく下がることです。公演が終われば空席は売れません。3つ目は、需要が価格に反応し、しかも日によって偶然に上下することです。需要が完全に予測どおりに来るなら、最初に決めた価格のまま売れば済みますが、実際には売れ行きが速い日も遅い日もあるので、途中の在庫を見て価格を直す余地が生まれます。反対に、在庫を補充できて締め切りのない日用品(第2章のサンプルデータの飲料など)では、残り在庫で価格を変える理由は薄く、通常売価と販促の設計(第4章から第6章)が中心になります。

ガジェゴとヴァン・ライジンの枠組み

時間と在庫で価格を変える問題の数理モデルとして、よく出発点に置かれるのが、ガジェゴ(Guillermo Gallego)とヴァン・ライジン(Garrett van Ryzin)が1994年に Management Science 誌(第40巻第8号、999〜1020ページ)に発表した論文「Optimal Dynamic Pricing of Inventories with Stochastic Demand over Finite Horizons」です。要旨によると、この論文が扱うのは「決まった量の在庫を締め切りまでに売る」問題で、需要は価格に反応し、しかも確率的に来ます。売り手の目的は期待売上の最大化です。要旨は当てはまる例として、ファッション・季節品を売る小売と、航空便の座席・クルーズ船の客室・ホテルの客室のように、決まった時点までに売れなければ価値がなくなる旅行・レジャーの業界を挙げています。

要旨に書かれている主な結果は4つです。第一に、最適な価格(論文では需要の強さとして表した量)が、在庫の水準と残りの期間の長さに対して単調に動くという構造の結果です。第二に、需要の関数が特定の指数型の場合には、最適な価格の方策が式で閉じた形に求まることです。第三に、一般の需要の関数については、需要の偶然の揺れを無視した決定論的な問題を解くと期待売上の上界(これより良くはならない値)が得られ、その上界を使って、販売量の期待値が大きくなるにつれて単純な固定価格の方策が漸近的に最適になる(最適との差の割合が小さくなる)ことを示したことです。第四に、需要がまとまって来る場合、価格の候補が有限個に限られる場合、需要の強さが時間で変わる場合、在庫の保管費や割引がある場合、初期在庫を決める場合、追加の発注・オーバーブッキング・キャンセルがある場合への拡張です。

この章では、この枠組みを、価格の候補が有限個(500円刻み)で、来訪客の数が日によって変わる設定に置き、動的計画法で数値的に解きます。論文の要旨は単調性の向き(在庫が多いと価格は高いのか低いのか)までは書いていないので、向きはこの章の例題で実際に計算して確かめます。また「固定価格が漸近的に最適」という結果も、規模を変えて自分で計算して確かめます。

例題の設定(架空の興行の座席)

この章では、第2章で用意した飲料のサンプルデータを使わず、別の架空の設定を作りました。ある公演1回の座席を、公演の60日前から前日まで販売する興行です。席はすべて同じ扱い(席種の区別なし)とし、1日に1回、その日の価格を決めます。実在の興行・事業者の料金や来場者数とは関係がなく、価格の水準も例題として置いた値です。この章で比べる金額は、第5章から第8章の粗利と違い、公演1回(販売期間60日の合計)の売上で、原価は差し引いていません。座席の費用は売れた枚数によらず公演ごとに決まっているとみなし、1席売れるごとに増える原価は無い設定にしたので、この設定では売上を最大にすることが、その公演の粗利を最大にすることと同じになります。設定の数値を次の表にまとめます。

項目架空の設定値意味
席数300席売れる数量の上限。追加はできない
販売期間60日(公演の60日前から前日まで)締め切りを過ぎた空席の価値は0円
来訪客数日ごとにポアソン分布。平均は初日10人から前日20人へ直線で増える(60日の合計900人)購入を検討してチケットの販売画面を見に来る人の数
支払意思額対数正規分布。中央値6,000円、対数の標準偏差0.45来訪客1人ひとりが「この額までなら払う」上限。価格がこれ以下なら買う
価格の候補3,000円〜12,000円の500円刻み(19通り)その日に付けられる価格
価格の改定1日1回まで(基本の設定では回数・幅の制限なし)制限を入れた場合は後の節で比べる

来訪客は、その日の価格が自分の支払意思額以下なら1席買い、そうでなければ買わずに去ります(この節の基本の設定では、去った客は戻ってこないとします。値下がりを待つ客は後の節で扱います)。表の2つの分布を言葉で補うと、ポアソン分布は、1日に来る人数の平均だけを決めたとき、実際の人数がその平均の前後に偶然ばらつく様子を表す分布です。対数正規分布は、値の対数を取ると正規分布になる分布で、多くの客の支払意思額は中央値の近くにありつつ、高い額まで払う客が少数いるという右に裾の長い形を表します。支払意思額の分布から、価格ごとに「来訪客が買う確率」が決まります。この章の計算を実行したときの出力の記録(以下、実行記録)によると、価格6,000円なら買う確率は0.500で、60日の来訪客900人のうち買いたい人は期待値で450.0人です。7,000円なら確率0.366・329.4人、8,000円なら0.261・235.2人、5,000円なら0.657・591.6人になります。席は300席なので、6,000円で売ると需要が席を大きく上回り、8,000円では席が余ります。期待値で見ると、ちょうど300席が埋まる価格は7,000円と8,000円の間にあります。

この設定は、第3章で扱った需要曲線を、来訪客の数と支払意思額の分布に分けて書いたものです。価格が上がるほど買う人の割合が下がるという関係は同じですが、ここでは「1日に来る人数が偶然に上下する」ことと「同じ価格でも買う人数が偶然に上下する」ことを、確率として明示的に入れています。売れ行きの揺れが無ければ、在庫を見て価格を直す必要はありません。揺れがあるからこそ、残り在庫という情報に価値が生まれます。

動的計画法で価格表を作る

最適な価格表は、第7章の値下げでも使った動的計画法で求めます。動的計画法は、決定を何回もくり返す問題を、最後の回から順にさかのぼって解く方法です。第7章では価格を下げる方向にしか動かせませんでしたが、この章では上げることも下げることもできます。この例題では、状態を「公演までの残り日数」と「残り席数」の組で表します。残り日数が0になった時点(公演当日)では、残った席の価値は0円です。その1日前の各残り席数について、19通りの価格それぞれで「その日の売上の期待値」と「翌日以降に残る席の価値の期待値」の和を計算し、和が最も大きい価格を選びます。これを公演前日から販売初日まで60日分さかのぼると、あらゆる残り日数と残り席数の組について、最適な価格と、その時点から先に得られる期待売上が表として求まります。

式で書くと、残り席数が \( n \) のときの \( t \) 日目の価値 \( V_t(n) \) は次のとおりです。

\( V_t(n) = \max_{p} \; \mathbb{E}\left[\, p \cdot \min(D_t(p), n) + V_{t+1}\big(n – \min(D_t(p), n)\big) \right] \)

言葉で言い換えると、「今日の価格を \( p \) にしたとき、今日買いたい人の数 \( D_t(p) \) と残り席の小さいほうだけ売れる。その売上と、売れ残った席で明日以降に得られる価値の合計の期待値が最大になる価格を選ぶ」ということです。\( D_t(p) \) は平均が「その日の来訪客数の平均×価格 \( p \) で買う確率」のポアソン分布に従います。状態は残り席数301通り×60日、選ぶ価格は19通りなので、表全体でも計算はすぐ終わります。実行記録では0.19秒でした(この記事の実行環境(一般的なノートPC)での実測。同じPCで他の章の計算も並行して動いているので、時間は揺れます)。

次のコードは、この価格表を作る計算を、単独で動く形に縮めたものです。この章の本体のスクリプト(ch09_model.py)と同じ設定で、同じ結果になることを確かめています。

import numpy as np
from scipy.stats import lognorm, poisson

C, T = 300, 60                                   # 席数、販売期間(日)。架空の設定
prices = np.arange(3000, 12001, 500.0)           # 価格の候補(円)
lam = 10 + 10 * np.arange(T) / (T - 1)           # 日ごとの来訪客数の平均
buy = lognorm.sf(prices, s=0.45, scale=6000)     # 価格ごとに買う確率(支払意思額が価格以上)
n = np.arange(C + 1)                             # 残り席数
d = np.arange(81)                                # 1日の購入希望者数

V = np.zeros(C + 1)                              # 公演後の売れ残りの価値は0
policy = np.zeros((T, C + 1))
for t in range(T - 1, -1, -1):                   # 最終日から初日へさかのぼる
    G = np.zeros((C + 1, len(prices)))
    for j, p in enumerate(prices):
        pm = poisson.pmf(d, lam[t] * buy[j])
        pm[-1] += 1 - pm.sum()
        s = np.minimum(d[None, :], n[:, None])   # 売れる席数=購入希望者と残り席の小さい方
        G[:, j] = (pm[None, :] * (p * s + V[n[:, None] - s])).sum(axis=1)
    policy[t] = prices[G.argmax(axis=1)]
    V = G.max(axis=1)

print("期待売上 %.0f円 / 初日の価格 %d円" % (V[C], policy[0, C]))
print("残り10日の価格(残り200席・100席・20席):", policy[T - 10, [200, 100, 20]])
# 出力:
# 期待売上 2168368円 / 初日の価格 7500円
# 残り10日の価格(残り200席・100席・20席): [ 4500.  6000. 10500.]

コードの要所は3つです。1つ目は、for t in range(T - 1, -1, -1) で最終日から初日へさかのぼっていることです。明日以降の価値 V が分かっていないと今日の価格を決められないので、順番は必ず後ろからになります。2つ目は、売れる席数を np.minimum(d, n) で「買いたい人数と残り席数の小さいほう」としていることです。席が尽きれば、それ以上買いたい人が来ても売上は増えません。これが在庫に上限がある問題の本質で、価格を上げて客を絞る理由になります。3つ目は、1日の購入希望者数を80人で打ち切り、それを超える確率を80人の点に寄せていることです。この設定では来訪客数の平均が最大20人なので、80人を超える確率は無視できる大きさです。

最適な価格表を読む

動的計画法で求めた価格表の期待売上は2,168,368円で、販売初日(残り60日・残り300席)の最適な価格は7,500円でした。価格表の一部を実行記録から抜き出したのが次の表です。行が公演までの残り日数、列が残り席数で、セルの値がその状態で付けるべき価格です。

残り日数\残り席数300席250席200席150席100席50席20席5席
60日7,5008,0008,5009,50010,50012,00012,00012,000
45日6,5007,0008,0008,50010,00012,00012,00012,000
30日5,5006,0007,0007,5009,00011,00012,00012,000
20日4,5005,0005,5006,5008,00010,00012,00012,000
10日4,5004,5004,5004,5006,0008,00010,50012,000
5日4,5004,5004,5004,5004,5006,0008,50012,000
3日4,5004,5004,5004,5004,5004,5007,50011,000
1日4,5004,5004,5004,5004,5004,5004,5007,500

表の読み方は2方向です。同じ行(同じ残り日数)を左から右へ見ると、残り席数が少ないほど価格が高くなっています。席が少なければ、安くして多くの客に売る必要はなく、支払意思額の高い客だけに売るほうが得だからです。同じ列(同じ残り席数)を上から下へ見ると、公演が近づくほど価格が下がっています。残り日数が短くなると、これから来る客の数が減るので、今の席数を売り切るには買う確率を上げる、つまり価格を下げる必要があるからです。実行記録では、この2つの向きが価格表のすべての日と残り席数で成り立つこと(同じ日なら残り席が多いほど価格が低いか同じ、同じ残り席数なら公演が近いほど価格が低いか同じ)を確かめています。ガジェゴとヴァン・ライジンの論文の要旨が述べる「在庫と残り期間に対する単調性」は、この例題ではこの向きで現れました。

表の左下に4,500円が並んでいることにも意味があります。この設定では、残り日数が少なく席が大量に残っている場合でも、価格は4,500円より下がりません。4,500円より安くしても買う人の増え方が小さく、1席あたりの売上の減り方のほうが大きくなるので、席を余らせてでも4,500円で売るほうが期待売上は大きい、という計算結果です。売れ残りの価値が0円でも、「売れ残るくらいなら、いくらでもよいから売る」が最適になるとは限りません。反対に、右上の12,000円は価格の候補の上限で、残り50席以下のまま60日も残っている状態では、候補の範囲内ではいちばん高い価格を付けることになります。実際の販売でこの状態になることはまれですが、価格表としては全部の状態に答えを持っておく必要があります。

動的計画法による最適な価格表のヒートマップ。横軸は公演までの残り日数(左が60日、右が1日)、縦軸は残り席数(0から300席)、色の濃さが最適な価格(薄い色が4,500円、濃いネイビーが12,000円)。下側(残り席数が少ない)ほど濃く、右側(公演が近い)ほど薄い。右上の広い範囲が最も薄い4,500円になっている

図は価格表の全体を色で表したものです。縦軸の下ほど(残り席が少ないほど)色が濃く、横軸の右ほど(公演が近いほど)色が薄くなります。等しい価格の境目が右下がりの斜めの線になっているのは、「何日残っていて何席残っているか」の比、つまり残りの1日あたりにどれだけの席を売る必要があるかで価格がほぼ決まっていることを示しています。

実際の販売では、この表の上をどの道筋で進むかが日々の売れ行きで変わります。シミュレーションで販売期間を20,000回くり返すと、平均の売上は2,167,998円で、動的計画法で計算した期待売上2,168,368円とほぼ一致しました(差は乱数による揺れです)。1回の販売期間で価格を改定した回数は平均12.2回、最も多い回で33回でした。1回の販売期間の中で付いた価格の最高と最低の差は平均1,555円です。販売された席の平均価格は7,248円でした。

固定価格・数段階の価格表と比べる

動的計画法の価格表がどれだけ得なのかは、もっと単純な決め方と比べてはじめて分かります。以下、前の節で作った価格表(残り日数と残り席数を見て、毎日その日の価格を決め直すもの)を「毎日改定」と呼びます。比べたのは次の3種類です。1つ目は、販売期間中ずっと同じ価格で売る固定価格で、19通りの価格の候補それぞれの期待売上を同じ動的計画法の計算で求め、最も良いものを選びました。2つ目は、日付だけで価格を変える数段階の価格表で、「前半40日・後半20日」の2段階と「20日ずつ」の3段階について、各段の価格を5,000円〜10,000円の11通りから選ぶ組合せを全部(2段階は121通り、3段階は1,331通り)評価して、最も良いものを選びました。早期割引・通常・直前のように、販売開始前に公表できる価格表に当たります。3つ目は、需要の揺れを無視した決定論的な問題の上界です。60日の来訪客900人が期待値どおりに来ると考えると、ちょうど300席が売れる価格は約7,283円で、売上は2,184,996円になります。ガジェゴとヴァン・ライジンが上界として使った考え方で、価格を500円刻みに限らない連続の値とし、売れる席数が席数にちょうど等しくなる価格を方程式として解いているので、どの方式もこれを超えることはありません。

方式平均売上毎日改定に対する比率下位10%の売上平均の売れ残り完売した割合平均の改定回数後から安く売られた席の割合
毎日改定(動的計画法)2,167,998円100.0%2,101,000円0.9席64.9%12.2回71.0%
固定価格7,000円2,097,417円96.7%2,100,000円0.4席95.3%0.0回0.0%
2段階(7,500円→7,000円)2,132,259円98.3%2,019,000円7.2席49.7%1.0回56.3%
3段階(7,500円→7,500円→7,000円)2,132,259円98.3%2,019,000円7.2席49.7%1.0回56.3%

表はすべて、各方式で販売期間を20,000回くり返したシミュレーションの結果です(乱数種1)。ただし「毎日改定に対する比率」の列は、分母にこの表の毎日改定の平均売上(2,167,998円)ではなく、動的計画法で計算した期待売上2,168,368円を使っています(2段階の98.3%は2,132,259円÷2,168,368円)。この章の金額には、動的計画法で計算した期待売上と、シミュレーションの平均売上の2種類があります。シミュレーションの値は乱数の揺れで期待売上から数百円ずれ、表ごとに乱数種が違うので、同じ方式でも表によって数百円違う値になります(たとえば固定価格7,000円は、期待売上が2,097,380円、この表のシミュレーションでは2,097,417円です)。後の節で予測の外れを比べる表の「1.0倍(予測どおり)」の行で、毎日改定の平均売上2,168,405円が後知恵の最適2,168,368円を37円上回っているのも、この揺れによるもので、最適を超えたわけではありません。2段階の平均売上2,132,259円もシミュレーションの値で、動的計画法で計算した期待売上は2,132,670円です。後の節の比較でこの方式に触れるときは、計算値の2,132,670円を使います。「後から安く売られた席の割合」は、ある日に売れた席について、同じ販売期間のそれより後の日に、より安い価格で売れた席があった場合を数えたものです。先に高く買った客から見ると、後で安く買われたことになる席の割合で、顧客の不公平感の目安としてこの章で置いた指標です。

平均売上の列を見ると、毎日改定は固定価格より70,581円(固定価格の売上の3.4%)多く売り上げています(この表のシミュレーションの値どうしの差で、動的計画法の期待売上どうしでは70,988円です)。決定論的な上界2,184,996円に対しては、毎日改定の期待売上2,168,368円は99.2%に当たり、上界との差はわずかです。2段階の価格表は、前半40日を7,500円、後半20日を7,000円にするもので、固定価格より多く、毎日改定より少ない98.3%でした。3段階の最良は「7,500円・7,500円・7,000円」で、2段階と同じ価格表になりました。この設定では、日付だけで決める価格表の段数を2から3に増やしても得はありません。日付だけの価格表は、その販売期間の売れ行きを見ていないので、段数を増やしても情報は増えないからです。

売上以外の列には、それぞれの方式の性格が出ています。固定価格7,000円は、完売した割合が95.3%と高く、下位10%の売上も2,100,000円(300席×7,000円)です。7,000円は期待値では300席を少し上回る需要(329.4人)を呼ぶ価格なので、ほとんどの回で完売し、売上が安定します。その代わり、需要が多い回でも7,000円以上は取れません。2段階の価格表は、平均では固定より多いものの、下位10%の売上は2,019,000円で固定より低く、平均の売れ残りも7.2席あります。前半を7,500円にする分、売れ行きが悪い回に席が残る危険を負っているためです。毎日改定は、平均では固定価格を上回り、下位10%の売上(2,101,000円)は固定価格の2,100,000円とほぼ同じ水準を保っています。売れ行きの悪い回には価格を下げて席を埋めることで下側の落ち込みを固定並みに抑え、良い回には価格を上げて単価を取ることで平均を押し上げている、という形です。固定価格の下位10%は300席×7,000円の頭打ちの値なので、下側で固定を「上回った」とまでは言えません。

一方で、後から安く売られた席の割合は、毎日改定で71.0%、2段階で56.3%、固定で0.0%でした。毎日改定では、売れた席の7割について、同じ公演のもっと後の日に、より安く売れた席があるということです。価格が売れ行きに応じて上下するので、多くの席で、買った日より後に価格が下がる日があります。これは期待売上の計算には現れない費用で、後の節の「値下がりを待つ客」と、第12章で扱う価格の公平感の問題につながります。

価格の推移の例。左の図は毎日改定(動的計画法)の3回の販売期間の価格の推移で、7,500円から始まり、7,000円と7,500円の間を行き来したあと、ある例では最終週に6,000円まで下がり、別の例では8,000円から8,500円まで上がる。灰色の点線は固定価格7,000円。右の図は、2段階と3段階の価格表(どちらも7,500円で始まり41日目から7,000円)と、改定2回までの方式の1回の例(7,500円で始まり、途中で7,000円に下げ、終盤に6,000円まで下げる)

左の図は、毎日改定の価格が実際にどう動くかを、3回の販売期間について描いたものです。どの回も7,500円から始まり、序盤は7,000円と7,500円の間を細かく行き来します。売れ行きが平均より少し速いか遅いかで、価格表の境目をまたぐからです。終盤になると、席が多く残った回は価格が下がり、席が少なくなった回は8,000円以上に上がります。右の図は、日付だけで決める2段階・3段階の価格表と、後の節で扱う「改定2回まで」の方式の例です。

価格の決め方ごとの1公演あたりの平均売上の横棒グラフ。上から毎日改定(動的計画法)216.8万円・改定平均12.2回、固定価格7,000円209.7万円、2段階213.2万円、3段階213.2万円、改定1回まで215.1万円、改定2回まで216.2万円、改定3回まで216.5万円、改定幅500円まで216.7万円、上げるだけ215.7万円、下げるだけ215.9万円。決定論的な上界を縦の点線で示している。横軸は190万円から始まる

直前の横棒グラフは、この節と次の節以降で比べる方式の平均売上をまとめたものです。差を見やすくするため、横軸は190万円から始めています。棒の長さの比は売上の比ではないことに注意が要ります。

固定価格との差はどこから来るか

前の節の差(固定価格は毎日改定の96.7%)は、どんな条件でも同じ大きさになるわけではありません。ガジェゴとヴァン・ライジンの論文の要旨は、販売量の期待値が大きくなるにつれて固定価格の方策が漸近的に最適になると述べています。この例題で確かめるため、席数と来訪客数を同じ倍率で0.1倍から4倍まで変え、毎日改定と最良の固定価格の期待売上を動的計画法で計算しました。

倍率席数価格の刻み毎日改定の期待売上最良の固定価格固定の期待売上固定の比率
0.1倍30席500円210,163円7,000円202,449円96.3%
0.25倍75席500円535,577円7,000円517,782円96.7%
1倍300席500円2,168,368円7,000円2,097,380円96.7%
4倍1,200席500円8,706,550円7,000円8,399,967円96.5%
0.25倍75席100円535,955円7,200円521,768円97.4%
1倍300席100円2,170,342円7,200円2,134,379円98.3%
4倍1,200席100円8,717,641円7,300円8,633,193円99.0%

表の上4行(価格の刻み500円)では、規模を40倍に変えても「固定の比率」の列は96.3%から96.8%の間にとどまり、規模が大きくなっても100%に近づきませんでした(実行記録には0.5倍・2倍の行もあり、96.8%・96.6%です)。原因は価格の刻みです。決定論的な問題で最適な一定価格は約7,283円で、500円刻みの候補には無く、固定価格は7,000円か7,500円のどちらかを選ぶしかありません。7,000円では需要が席を上回って安売りになり、7,500円では席が余ります。毎日改定の価格表は、7,000円と7,500円を状況に応じて使い分けることで、実質的に間の価格を作れます。前の節で2段階の価格表(7,500円→7,000円)が固定より良かったのも、同じ理由です。

そこで価格の候補を100円刻み(91通り)に細かくして計算し直したのが下3行です。こちらは、固定の比率が0.25倍で97.4%、1倍で98.3%、4倍で99.0%と、規模が大きくなるほど100%に近づきました。決定論的な上界(0.25倍で546,249円、1倍で2,184,996円、4倍で8,739,984円。上界は価格の刻みによらないので、1倍の値は前の節と同じです)に対する100円刻みの毎日改定の期待売上の比率も、実行記録の値から計算すると98.1%・99.3%・99.7%と上がっています。販売量が大きくなると、需要の偶然の揺れが平均に対して相対的に小さくなり、期待値どおりに来ると考えた計画(一定価格)との差が縮むからです。論文の要旨にある漸近的な最適性は、この例題でも、価格を十分に細かく選べる場合には数字として確かめられました。なお、1倍の99.3%が前の節の99.2%と違うのは、毎日改定の側の価格の刻みが100円か500円かの違いによるものです。

この結果から、毎日改定の利点は、少なくとも2つの部分に分けて考えられます。1つは、需要の揺れに応じて価格を直す部分で、規模が小さいほど大きくなります。席数が数十席の小さな公演や、1便あたりの座席数が少ない商品では、この部分が効きます。もう1つは、価格の刻みが粗いときに、2つの価格を使い分けて間の価格を作る部分です。こちらは規模によらず残ります。逆に言えば、規模が大きく、価格を細かく選べ、需要の予測が正確な事業では、手間をかけて毎日改定しても、上手に選んだ固定価格との差は小さいということです。

ただし、ここまでの比較はすべて「来訪客数の平均を正しく知っている」場合です。実務で最も効くのは、予測が外れたときの差です。価格表は来訪客数の予測(倍率1.0)で作ったまま、実際の来訪客数が予測の0.7倍から1.3倍だった場合をシミュレーションで比べました(各20,000回、乱数種2)。比較の相手として、実際の来訪客数を最初から知っていたら得られた期待売上(後知恵の最適)も計算しています。

実際の来訪客数(予測に対する倍率)毎日改定の平均売上毎日改定の売れ残り固定7,000円の平均売上固定7,000円の売れ残り後知恵の最適
0.7倍1,756,320円18.4席1,614,040円69.4席1,832,293円
0.85倍2,005,223円4.1席1,954,710円20.8席2,019,114円
1.0倍(予測どおり)2,168,405円0.9席2,097,296円0.4席2,168,368円
1.15倍2,286,105円0.2席2,100,000円0.0席2,293,066円
1.3倍2,371,842円0.1席2,100,000円0.0席2,400,806円

表の「後知恵の最適」に対する比率を計算すると、毎日改定は0.7倍で95.9%、0.85倍で99.3%、1.15倍で99.7%、1.3倍で98.8%でした。固定7,000円は、0.7倍で88.1%、0.85倍で96.8%、1.15倍で91.6%、1.3倍で87.5%です。需要が予測より3割少ないとき、固定価格は平均69.4席を売れ残し、毎日改定は価格を下げて売れ残りを18.4席に抑えます。需要が予測より多いとき、固定価格は完売して売上が2,100,000円(300席×7,000円)で頭打ちになり、毎日改定は価格を上げて1.3倍のときに271,842円多く売り上げます。需要の予測が当たっている場合、毎日改定が固定価格を上回る幅は売上の3.4%でしたが、予測が3割外れると、その幅は少ない側(0.7倍)で8.8%(142,280円)、多い側(1.3倍)で12.9%(271,842円)に開きました。後知恵の最適に対する比率の差で見ても、0.7倍で7.8ポイント、1.3倍で11.3ポイントです。

経営の言葉にすると、毎日改定の価値の多くは、需要予測の誤りに対する保険にあります。売れ行きという結果を見て価格を直すので、予測が多少外れても、そのつど後知恵の最適に近づけます。固定価格は、予測が当たる前提に賭けた決め方で、外れたときの損を価格では取り返せません。新しい公演や新しい商品のように需要の予測が難しい場合ほど、在庫を見て価格を直す仕組みの価値は大きくなります。なお、この節の毎日改定は来訪客数の予測を販売の途中で直していません。売れ行きから予測そのものを学び直す方法(価格を試して学ぶ方法)は第10章で扱います。

改定の回数と幅に制約を入れる

毎日改定の価格表は、1回の販売期間に平均12.2回、多いときは33回も価格を変えていました。実務では、価格を変えるたびに販売画面・案内・告知の更新が要り、顧客からの問い合わせや不満も増えるので、改定の回数や幅に上限を設けることが多いと考えられます。そこで、次の制約を入れた価格表を、それぞれ動的計画法で解き直しました。改定回数の上限は、状態に「今の価格」と「残りの改定回数」を加えると、同じ動的計画法の形で扱えます。改定幅の上限と、上げるだけ・下げるだけの制約は、状態に「今の価格」を加え、翌日に選べる価格の範囲を絞って扱います。どの方式も、販売初日の価格は自由に選べるものとし、初日の価格の設定は改定の回数に数えていません。

制約期待売上毎日改定に対する比率毎日改定との差初日の価格平均の改定回数(シミュレーション)後から安く売られた席の割合
制約なし(毎日改定)2,168,368円100.0%0円7,500円12.2回71.0%
改定は期間中1回まで2,151,022円99.2%17,346円7,500円1.0回64.5%
改定は期間中2回まで2,161,859円99.7%6,509円7,500円1.9回64.9%
改定は期間中3回まで2,165,270円99.9%3,098円7,500円2.8回68.8%
改定は期間中5回まで2,167,456円100.0%912円7,500円未計測未計測
1日の改定幅は500円まで2,167,546円100.0%822円7,500円12.1回66.8%
1日の改定幅は1,000円まで2,168,177円100.0%191円7,500円未計測未計測
価格は上げるだけ2,156,927円99.5%11,441円7,000円2.7回0.0%
価格は下げるだけ2,159,587円99.6%8,781円7,500円2.2回76.0%
(参考)固定価格7,000円2,097,380円96.7%70,988円7,000円0.0回0.0%

期待売上の列は動的計画法で計算した値、改定回数と「後から安く売られた席の割合」の列は、20,000回のシミュレーションの結果です。5回までと改定幅1,000円までの2つはシミュレーションをしていないので「未計測」としました。比率の列は小数第1位に丸めているので、差が912円の5回までも100.0%と表示されています。

この表から読み取れる最も大事な点は、改定の回数を大きく減らしても、失う売上は小さいということです。改定を期間中1回に限っても、毎日改定との差は17,346円(0.8%)で、固定価格との差70,988円の4分の1程度です。2回までなら差は6,509円、3回までなら3,098円で、平均12.2回の改定で得ていた上積みのほとんどを、2〜3回の改定で取れています。改定回数に上限のある価格表は、「いつ、いくらに変えるか」を残り席数を見て決めるので、日付だけで1回変える2段階の価格表(期待売上2,132,670円)より、同じ1回の改定でも18,352円多く売り上げています。回数が同じでも、売れ行きを見て変えるかどうかで差が出るということです。

1回だけ価格を変えるときに、いつ変えるのが最適かという問題については、フェン(Youyi Feng)とガジェゴが1995年に Management Science 誌(第41巻第8号)に発表した論文(題名を訳すと「季節末セールの最適な開始時期と、販促運賃の最適な終了時期」)が扱っています。要旨によると、決まった初めの価格から、決まった低い価格(または高い価格)へ1回だけ変える場合に、穏やかな条件のもとで、残り時間が「まだ売れていない在庫の数に応じて決まるしきい値」を下回ったらすぐに値下げするのが最適だと述べています(値上げの場合は、要旨の中で「下回る」が「上回る」に置き換えて書かれています)。この章の「改定1回まで」は、改定後の価格も自由に選べる点で論文の設定とは違いますが、改定の時点を残り日数と残り席数の組で決める点は共通しています。

1日の改定幅を500円までに制限した場合も、差は822円で、ほとんど損がありません。この設定では価格表が日々大きく跳ぶことは少なく、500円ずつ動けば十分に追いつけるからです。ただし、平均の改定回数は12.1回で、毎日改定とほとんど変わりません。幅の制約は、顧客から見た価格の急な変化を抑えますが、改定の手間は減らしません。改定の手間を減らしたいなら回数の制約、急な変化を抑えたいなら幅の制約というように、何を避けたいかで制約の種類を選ぶ必要があります。

上げるだけ・下げるだけの制約は、方向を縛るものです。上げるだけの価格表は、初日の価格を7,000円と低めに置き、売れ行きが良ければ上げていきます。差は11,441円(0.5%)で、「後から安く売られた席」は定義上0.0%になります。下げるだけの価格表は、初日を7,500円に置き、売れ行きが悪ければ下げます。差は8,781円で上げるだけより小さいものの、後から安く売られた席の割合は76.0%と、毎日改定の71.0%より高くなりました。値下げを一方向で進める場合の詳しい設計(季節品のマークダウン)は第7章で扱いました。この章で注目したいのは、上げるだけの価格表が、期待売上では毎日改定に0.5%しか劣らないまま、先に買った客が後で損をしない価格の動かし方になっている点です。この性質は、次の節で値下がりを待つ客を考えると、売上の差として現れます。

値下がりを待つ客がいるとき

ここまでの計算は、来訪客がその日の価格だけを見て、買うか去るかをその場で決めると仮定していました。しかし、価格が売れ行きに応じて下がることがあると客が知れば、今は買わずに値下がりを待つ客が出てきます。このように、将来の価格を見込んで買う時期を選ぶ客を、研究では戦略的な顧客(strategic customers、forward-looking consumers)と呼んで分析してきました。文献の結論は一様ではないので、この節では、要旨を開いて確かめた3本の論文の範囲で紹介します。

スー(Xuanming Su)が2007年に Management Science 誌(第53巻第5号、726〜741ページ)に発表した「Intertemporal Pricing with Strategic Customer Behavior」は、決まった在庫を決まった期間で売る売り手が価格を動的に調整し、客は今の価格で買う・費用を払って待つ・去る、のいずれかを選ぶモデルを分析しています。要旨によると、客は支払意思額と待つことの我慢強さの2つの面で異なり、その組合せで最適な価格の形が変わります。支払意思額の高い客ほど我慢が利かない場合は、高い客が早く高い価格で買い、低い客が待ってくれるので値下げの方策が有効になり、反対に支払意思額の高い客ほど我慢強い場合は、無駄な待ちをなくすために価格を時間とともに上げるべきだとしています。さらに、低い支払意思額の客が待つことで、席を巡る競争が起きて高い客の支払意思額が上がり、待ちが売り手に有利に働く場合もあるという、直観に反する結果も述べています。

アヴィヴ(Yossi Aviv)とパズガル(Amit Pazgal)が2008年に Manufacturing & Service Operations Management 誌(第10巻第3号、339〜359ページ)に発表した「Optimal Pricing of Seasonal Products in the Presence of Forward-Looking Consumers」は、季節品について、売れ行きに応じて値下げを決める方式と、値下げの時期と幅を前もって公表する方式を比べています。要旨によると、戦略的な顧客の行動は、価格で客を分ける効果を弱めます。前もって公表する方式は、戦略的な顧客がいる場合に売れ行きに応じて決める方式より有利になりうる一方で、有利になる場合でも、固定価格に比べた利点はわずかだったとしています。また、売り手が戦略的な顧客を、その場で決める客だと誤って想定すると損失が大きく、売上の損失が約20%に達しうると述べています。

リウ(Qian Liu)とヴァン・ライジンが2008年に Management Science 誌(第54巻第6号、1115〜1131ページ)に発表した「Strategic Capacity Rationing to Induce Early Purchases」は、別の対策を分析しています。要旨によると、動的な価格は売上を増やしうる一方で、客に買う時期を戦略的に選ぶ動機を与えます。そこで、在庫をわざと少なめに用意して「待つと売り切れるかもしれない」という危険を作り、早い時期に高い価格で買わせることが最適になる条件を、2期間で価格が下がる単純なモデルで調べています。競争がある場合には、この売り切れの危険を利益につなげる力が弱まることも示しています。

この3本に共通するのは、「客が価格の動きを読む」ことを入れると、その場で決める客を前提に作った最適な価格表がそのまま最適ではなくなる、という点です。そこで、この章の例題に、架空の単純な規則で待つ客を入れて、どの程度の差になるかを確かめました。規則は次のとおりです。来訪客のうち一定の割合が「待つ客」で、最終週(公演前の7日間)より前に来たとき、その方式で過去に最終週に付いた平均価格がその日の価格より安ければ、買わずに最終週まで待ちます。最終週に入ると、価格が自分の支払意思額以下になった日に買います(席が残っていれば)。最終週に来た客は待ちません。上げるだけの価格表と固定価格では、値下がりが無いと分かっているので待つ客はおらず、全員がその場で決めるとしました。待つ客が見込む最終週の平均価格は、待つ客がいない場合のシミュレーションから、毎日改定で7,329円、下げるだけで6,717円です。価格表は、どの方式も待つ客がいないと想定して作ったものをそのまま使っています。

待つ客の割合毎日改定下げるだけ上げるだけ固定7,000円
0%2,168,531円2,159,760円2,157,015円2,097,492円
20%2,154,331円2,054,635円2,157,098円2,097,321円
40%2,137,205円1,989,818円2,156,769円2,097,267円
60%2,126,668円1,953,891円2,156,680円2,097,284円

表の値は1公演あたりの平均売上で、各20,000回のシミュレーション(乱数種3)の結果です。待つ客の割合が0%から60%に増えると、毎日改定の平均売上は2,168,531円から2,126,668円へ41,863円(1.9%)下がりました。下げるだけの価格表は2,159,760円から1,953,891円へ205,869円(9.5%)下がり、待つ客が20%でも固定価格7,000円を下回ります。下げるだけの価格表は、初日を7,500円に置いて値下げで調整するので、最終週の平均価格(6,717円)が初めの価格より大きく下がり、待つ理由がはっきりしているからです。上げるだけの価格表は、この規則では待つ客が生じないので、期待売上は待つ客の割合によらず同じです。表の値が2,156,680円から2,157,098円までわずかに(最大418円)違うのは、シミュレーションの乱数の揺れによるものです。待つ客が20%以上になると、上げるだけの価格表は毎日改定を上回りました。

値下がりを待つ客の割合(横軸、0%から60%)と1公演あたりの平均売上(縦軸、万円)の折れ線グラフ。毎日改定(動的計画法)は216.9万円から212.7万円へゆるやかに下がる。下げるだけは216.0万円から195.4万円へ大きく下がり、20%で固定価格を下回る。上げるだけは215.7万円前後で横ばい、固定7,000円は209.7万円前後で横ばい。20%以上で上げるだけが毎日改定を上回る

毎日改定の価格表では、最終週に席が多く残っていれば価格が下がりますが、少なければ上がります。そのため、毎日改定の最終週の平均価格(7,329円)は、販売された席全体の平均価格(7,248円)より高くなっていました。待つ客から見ると、待って安く買える回もあれば、高くなったり売り切れたりする回もあるので、待つ得が限られます。毎日改定の売上の下がり方が下げるだけより小さいのは、このためです。リウとヴァン・ライジンが分析した「売り切れの危険が早めの購入を促す」働きが、この例題の毎日改定でも部分的に起きていると考えられます。ただし、この節の待つ規則は、最終週の平均価格だけを見る単純なもので、論文のように客が売り手の方策を読み切って最適に行動する均衡を解いたものではありません。数字は「待つ客がいると、値下げに頼る価格表ほど売上を失う」という向きを確かめたものとして読む必要があります。

実務上の示唆は、価格を下げることがあると客に知られている売り方ほど、待つ客への備えが要るということです。この例題で効いたのは、価格を上げる方向にだけ動かすという約束でした。期待売上では毎日改定に0.5%劣りますが、先に買った客が損をしないので待つ理由がなく、待つ客の割合に左右されません。ほかにも、アヴィヴとパズガルが分析した値下げの時期と幅の事前公表や、リウとヴァン・ライジンが分析した供給量の調整があります。どれを選ぶかは、客がどれだけ価格の動きを知っているか(過去の販売の履歴が見えるか、再訪しやすいか)で変わります。

価格の動かし方と顧客の待ち行動の関係を表す2×2のマトリクスの図

経営の判断に翻訳する

この章の結果を、導入の判断に使える形に整理します。1つ目は、ダイナミックプライシングの効果を見積もるときの物差しです。この例題では、需要の予測が当たっている場合、毎日改定は上手に選んだ固定価格より3.4%多く売り上げました。決定論的な上界との差は16,628円(上界の0.76%)しか残っておらず、どれほど精巧な価格の仕組みを作っても、この設定で上積みできるのは数%の範囲です。一方、需要が予測より3割少ないと、固定価格は平均69.4席を売れ残して後知恵の最適の88.1%に落ち、毎日改定は95.9%を保ちました。3割多い場合も、固定価格は2,100,000円で頭打ちになり、毎日改定は271,842円多く売り上げています。導入の効果は「予測が当たったときの上積み」ではなく、「予測が外れたときの損の減り方」で見積もるのが実態に合っていると考えています。過去の公演で、需要の予測と実績がどれだけ外れてきたかを先に調べると、効果の見積もりが現実的になります。

2つ目は、改定の回数を、売上と手間の取引として決めることです。この例題では、毎日改定(平均12.2回)に対して、改定を2回までに絞っても期待売上の差は6,509円(0.3%)、3回までなら3,098円でした。価格を1回変えるごとに、販売画面や案内の更新・告知・問い合わせへの対応・関係者への周知に手間がかかるなら、その手間を金額で見積もり、改定回数を増やして得られる上積みと比べて上限を決めるのが筋です。この例題の数字で言えば、改定を3回から無制限にしても1公演あたりの上積みは約3,000円しかなく、その手間に見合わない事業も多いはずです。

3つ目は、判断を誤ったときの損失の型です。高すぎる側の誤りは、売れ残りとして現れます。この例題の空席1席は、売れていれば数千円の売上だったもので、公演が終われば取り返せません。安すぎる側の誤りは、早い時期に席が売り切れ、後から来る支払意思額の高い客に売れなかった売上として現れますが、こちらは帳簿に残りにくい損です。さらに、価格を頻繁に下げる売り方は、先に買った客の不公平感(この例題の毎日改定で、売れた席の71.0%が後でより安く売られた席)と、値下がりを待つ客の増加という、期待売上の計算に入っていない損を生みます。待つ客が増えると、値下げに頼る価格表ほど売上を失いました。価格の決め方を選ぶときは、期待売上だけでなく、売れ残り・後から安く売られた席の割合・改定回数を並べた表で比べ、どの損をどこまで受け入れるかを決めることが有効だと考えています。

4つ目は、価格表をどう現場に渡すかです。動的計画法の答えは「残り日数と残り席数ごとの価格」という表なので、システムに組み込めば、毎日の売れ行きから自動で価格を引けます。ただし、表の端(残り席が少ないまま日数が多く残った状態の12,000円など)は、実際にはほとんど通らない状態の答えで、需要の想定が外れたときに極端な価格を付ける原因にもなります。価格の上限と下限、1日の改定幅、改定回数の上限を、ガードレールとして先に決めておく必要があります。この章の計算では、改定幅を500円までにしても失う期待売上は822円でした。こうした制約は、売上をほとんど失わずに、顧客から見た価格の振れを抑えられます。価格改定の業務への組み込み方は第13章、価格を変えることの法令上の扱いと顧客の受け止めは第12章で扱います。

この章の要点は3つです。第一に、売る数量の上限と締め切りがあり、需要が価格に反応して偶然に揺れる商品では、残り日数と残り在庫ごとの価格表を動的計画法で作れます。架空の興行では、価格は残り席が少ないほど高く、公演が近いほど低くなり、固定価格より3.4%多く売り上げました。第二に、その利点の多くは需要予測の外れに対する保険で、予測が3割外れる場合には、固定価格を上回る幅が売上の3.4%から8.8%(少ない側)・12.9%(多い側)に開きます。改定の回数を2〜3回に絞っても上積みのほとんどは残ります。第三に、価格を下げることがあると客に知られると、値下がりを待つ客が増え、値下げに頼る価格表ほど売上を失います。この章の例題では、上げるだけと約束した価格表が待つ客の影響を受けませんでした。ここまでの章は、需要の式(来訪客数と支払意思額の分布)を知っている前提で価格を決めてきました。次の第10章では、需要の式が分からないときに、価格を試しながら学ぶ方法を扱います。

この章を深めたい方への参考書籍

『強化学習(第2版)』(Richard S. Sutton、Andrew G. Barto 著、奥村エルネスト純ほか訳、森北出版):強化学習の標準的な教科書の改訂版で、第3章で有限マルコフ決定過程、第4章で動的計画法を扱っています。この章の価格表の計算は、状態(残り日数と残り席数)ごとに価値をさかのぼって求める動的計画法そのものなので、価値と方策の考え方を一般的な形で整理し直すのに向いています。状態が多すぎて表で持てない場合の近似による解き方も後半で扱われています。

『マルコフ決定過程 モデル化の基礎と応用事例』(前田康成、森北出版):マルコフ決定過程の基本的な問題設定とアルゴリズムから、真のパラメータが変化する場合や、状態・行動・利得の置き方の工夫までを、応用例を交えて説明する本です。この章で「状態に今の価格や残りの改定回数を加える」ことで制約を扱ったように、現実の条件をどう状態と行動に落とし込むかというモデル化の練習に役立ちます。

第10章 価格を試して学ぶ

第9章では、販売期間と残りの在庫に応じて価格を動かすダイナミックプライシングを、需要の性質が分かっている前提で解きました。第3章から第9章までの手法は、どれも「需要曲線が手元にある」ことを出発点にしています。ところが実務では、需要曲線そのものが分からない、あるいは過去の販売履歴から推定した需要曲線が信用しきれない、という場面が少なくありません。過去に一度も付けたことのない価格での売れ方は、履歴を見ても分からないからです。この章では、価格を実際に変えて売れ方を観測し、そこから学ぶ方法を扱います。前半では、価格を試す実験をどう組むか(どこに・いつ・どれだけの期間・何を測るか)を、第2章で用意したサンプルデータの季節の山を使って確かめます。後半では、試しながら良い価格へ寄せていく多腕バンディット問題の考え方を紹介し、共通データの水の2品目の真のモデルに対して、固定の価格テストといくつかの方策(毎週の価格の決め方)を競わせるシミュレーションを行います。試すことには費用がかかります。その費用を円で数え、現状維持と比べて差し引きで損になるのか得になるのかを確かめて、どういうときに試す価値があり、どういうときには試さないほうがよいのかを、経営の判断に使える形で整理します。

価格を「試す」とは何を決めることか

価格を試すことで知りたいのは、「この品目をいくらにすると、粗利がいくらになるか」という対応です。第3章では、これを過去の販売履歴から回帰で推定しました。推定がうまくいくのは、履歴の中で価格が十分に動いていて、しかも価格の動きが需要の動きと無関係に決まっていた場合です。第3章で見たとおり、夏の需要の山と販促が重なっていると、季節を入れずに推定した弾力性は真の値から外れます。さらに、通常売価を長いあいだ据え置いてきた品目では、履歴に現れる価格は通常売価と販促の売価の数通りだけで、その間や外側の価格での売れ方は、需要の式の形を仮定して外挿するしかありません。価格の実験は、こうした弱点を「自分で価格を動かして、その結果を見る」ことで補う方法です。ただし、自分で価格を動かすだけでは足りません。売れ行きや季節、在庫、競合の販促を見ながら、試す価格や試す週をその場で選ぶと、価格の動きはやはり需要の動きとつながってしまい、第3章で見た取り違えが実験の中でも起きます。価格の変化を需要の変化と切り離して比べられるのは、試す価格の候補と、どの週(あるいはどの店舗)にどの価格を付けるかを、結果を見る前に計画として決めておき、その割り付けを無作為に行った場合です。この考え方の詳しい背景(なぜ実験だと因果が言えるのか、検定の作法)は、弊社コラム『施策の効果を正しく測る、因果推論と効果検証の進め方』に譲り、この章では価格に固有の論点に絞ります。

価格を試すときに決めることは、大きく4つあります。1つ目は、どの価格を候補にするかです。候補を広く取れば、良い価格を見落とす心配は減りますが、明らかに悪い価格で売る週も増えます。2つ目は、候補をどこで、いつ試すかです。店舗を分けて同じ週に別の価格を付けるのか、同じ店舗で週ごとに価格を変えるのかで、比べられるものが変わります。3つ目は、何週間試すかです。短すぎると偶然の売れ方の差と価格の効果を見分けられず、長すぎると悪い価格で売る期間が延びます。4つ目は、何を測って判断するかです。この記事の目的は粗利なので、測る指標の中心は粗利ですが、数量・客数・同じカテゴリの他品目の数量(第5章で扱ったカニバリゼーション。自社の品目どうしで販売を奪い合うこと)もあわせて見る必要があります。

決め方には、大きく2つの流儀があります。1つは、試す期間と割り付けをあらかじめ固定し、期間が終わってから結果を比べて価格を決める「固定の価格テスト」です。もう1つは、試しながら結果を見て、良さそうな価格を試す回数を増やし、悪そうな価格を早めに外していく「適応的な探索」です。前者は設計と説明が簡単で、後者は試している間の損を小さくできる可能性があります。後者を数理的に定式化したのが、後半で扱う多腕バンディット問題です。どちらが得かは条件によって変わるので、この章では同じ真のモデルの上で両方を動かし、粗利の差を実測します。

価格を試す2つの流儀を対比する概念図の図

実験の組み方:割付・期間・測る指標

価格の実験を組むときの選択肢を、割付・期間・指標の3つの軸で整理したのが次の表です。どの選択肢にも長所と短所があり、「これが正解」という組み方はありません。表の右の列に、それぞれで起きやすい失敗を書きました。

軸選択肢比べられるもの起きやすい失敗
割付店舗を分ける(同じ週に、店舗群Aは現在の売価、店舗群Bは試す価格)同じ週の、別の店舗どうし店舗群の客層・立地の差を価格の効果と取り違える。近い店舗どうしで客が移る
割付期間を分ける(同じ店舗で、前半は現在の売価、後半は試す価格)同じ店舗の、別の週どうし季節・天候・競合の販促など、時期による需要の変化を価格の効果と取り違える
割付期間を細かく交互にする(1週ごとに価格を入れ替える)同じ店舗の、隣り合う週どうし価格を頻繁に変える手間と、顧客の受け止め。買いだめで前後の週が影響し合う
期間短く(数週)少ない観測偶然の売れ方の差を価格の効果と見誤る
期間長く(数か月以上)多い観測悪い価格で売る期間が延びる。途中で季節や競合が変わる
指標試した品目の数量・粗利だけ品目単体同じカテゴリの他品目への移動(カニバリゼーション)を見落とす
指標カテゴリ全体の粗利カテゴリ単位ばらつきが大きくなり、差を見分けるのに時間がかかる

表の「割付」の3行のうち、店舗を分ける組み方は、第2章で用意したサンプルデータでは試せません。共通データはチェーン合計の週次の記録で、店舗の区別を持たないからです。そこでこの章のシミュレーションは、すべて「同じ売場で週ごとに価格を変える」組み方で行います。店舗を分ける組み方では、価格以外の条件がそろった店舗群を作ることが鍵になります。店舗を無作為に2群に分ける、売上規模や立地の似た店舗を2つずつ組にしてから組の中で無作為に分ける、といった分け方が考えられます。無作為に割り付けることの意味は、弊社コラム『施策の効果を正しく測る、因果推論と効果検証の進め方』で扱っています。

指標については、この章のシミュレーションでは「カテゴリ全体の粗利」を使います。第5章で見たとおり、同じカテゴリの品目どうしは交差価格弾力性でつながっていて、1品目の価格を下げると、その品目の数量は増えますが、一部は同じカテゴリの他品目から移ってきた分です。試した品目の粗利だけを見ていると、他品目から移ってきた分まで価格の手柄に数えてしまいます。共通データの水のカテゴリは、水E 2L(W1)と水PB 2L(W2)の2品目で、真のモデルでは片方の価格が1%上がると、もう片方の数量が0.25%増えます。以下、「水カテゴリの粗利」はこの2品目の粗利の合計(週あたり)を指します。

実験の期間中に守るべき条件も、あらかじめ決めておく必要があります。たとえば「原価を割る価格は試さない」「現在の売価から上下15%を超える価格は試さない」「価格を変えるのは週に1回まで」といった条件です。これらは第13章で扱うガードレール(価格の改定に置く安全柵)と同じもので、実験だからといって外してよいものではありません。後の節で、候補を上下15%以内に絞るかどうかで、試す費用が大きく変わることを実測します。

試す品目と、真のモデルが知っている答え

この章のシミュレーションでは、水カテゴリの2品目を、それぞれ1品目ずつ試す対象にします。動かす品目の通常売価だけを候補の中から週ごとに選び、もう1品目と他のカテゴリは現在の売価のまま置きます。毎週の数量は、第2章で用意した真のモデル(データを作った側だけが知っている需要の式)の期待数量に、共通データと同じ大きさの週ごとの誤差(log の標準偏差0.08)を品目ごとに掛けて作りました。季節は、後の節で扱うまでは入れず、年平均の平常週(販促なし)で考えます。候補の価格は、第4章・第5章と同じ price_grid の9通り(現在の売価から10円刻みで上下4段)です。真のモデルで計算した、候補ごとの水カテゴリの粗利の期待値は次のとおりです。

水E 2L(W1)の売価水カテゴリの粗利(真のモデル)最大との差水PB 2L(W2)の売価水カテゴリの粗利(真のモデル)最大との差
68円57,015円24,185円38円マイナス109,981円194,888円
78円73,411円7,789円48円49,108円35,800円
88円79,573円1,627円58円81,888円3,020円
98円(最大)81,200円0円68円(最大)84,908円0円
108円(現在の売価)80,798円402円78円(現在の売価)80,798円4,110円
118円79,525円1,675円88円75,580円9,328円
128円77,937円3,263円98円70,869円14,039円
138円76,299円4,901円108円67,002円17,906円
148円74,737円6,463円118円63,944円20,964円

表の「最大との差」の列は、その価格に1週置いたときに、真のモデルでの最適の価格に比べて失う粗利の期待値です。2つの品目は、置かれた状況がはっきり違います。水E 2L は、現在の売価108円が真のモデルでの最適(98円)のすぐ隣にあり、現在の売価のままでも失っているのは週402円です。水PB 2L は、現在の売価78円が最適(68円)から1段ずれていて、週4,110円を失っています。同じ「最適から10円ずれ」でも、失う額は10倍違います。どちらの品目でも、最適から離れるほど失う額は大きくなりますが、最適の近くでの利益曲線の傾きが品目によって違うということです。もう1つ目を引くのが、水PB 2L の候補の下端38円です。原価46円を割るので、この価格で売ると水カテゴリの粗利はマイナスになり、1週置くだけで194,888円を失います。price_grid は現在の売価から機械的に上下4段を作るので、安い品目ではこういう候補が混ざります。

ここで比べたいのは、これらの差の大きさと、週ごとの粗利の揺れの大きさです。同じ価格を続けても、水カテゴリの粗利は誤差で毎週揺れます。現在の売価のまま20万週分の乱数を回して測ると、週の粗利の標準偏差は水E 2L を動かす場合で4,596円、水PB 2L を動かす場合で4,597円でした。水E 2L の現在の売価と最適の差(週402円)は、この揺れの1割にも届きません。次の図は、候補ごとの真の期待粗利を線で、週ごとの揺れ(±1標準偏差)を縦線で描いたものです。

水E 2L と水PB 2L の売価を候補の中で動かしたときの、水カテゴリの週の粗利の真の期待値を折れ線で、週ごとのばらつき(±1標準偏差、約4,600円)を灰色の縦線で示した2枚のグラフ。左の水E 2L では最適の98円と現在の売価108円の粗利がほぼ同じ高さで、縦線が大きく重なっている。右の水PB 2L では最適の68円が現在の売価78円より約4,000円高い。右のグラフでは粗利がマイナスになる38円の点を省いている

左の水E 2L のグラフでは、98円と108円の点の高さはほとんど同じで、縦線が大きく重なっています。1週や2週売ってみただけでは、どちらが高いかは揺れに埋もれて分かりません。右の水PB 2L のグラフでは、68円と78円の差は約4,100円で、揺れの1標準偏差に近い大きさがあります。この違いが、以降のシミュレーションの結果を大きく分けます。第4章で見た「利益曲線の平らさ」は、ここでは「平らなところでは試しても見分けにくいが、見分けられなくても損は小さい」という形で現れます。

季節が動くと、前後比較は答えを逆にする

実験の組み方の中で、最も手軽で、最も危ないのが前後比較です。「今月は78円、来月は68円で売って、粗利を比べる」というやり方で、店舗を分ける必要もなく、価格の変更も1回で済みます。危ないのは、前半と後半で、価格以外の条件も変わってしまうことです。共通データの真のモデルには、夏(第18週前後)を山とする季節の変動が入っています。季節の倍率(季節の効果を入れない年平均の平常週を1としたときの需要の大きさ)は、第1週(4月第1週)で0.890、第9週で1.123、第18週で1.284、第27週で1.123、第31週で1.000、第35週で0.890、第44週で0.779です。春から夏に向かう時期には、何もしなくても数量が週を追って増えていきます。

この季節のある真のモデルで、水PB 2L の78円(現在の売価)と68円(真のモデルでの最適)を16週かけて比べる実験を、3つの組み方で2,000回ずつ繰り返しました。前後比較は「前半8週を一方の価格、後半8週をもう一方の価格」で、順番を両方試しています。交互は「1週ごとに78円と68円を入れ替える」組み方です。実験の開始週を4通りに変えた結果が次の表です。「推定した差」は、68円の週の平均粗利から78円の週の平均粗利を引いた値の、2,000回の平均です。「その期間の真の差」は、同じ16週の季節の倍率で重みをつけた、真のモデルでの差です。

開始週組み方推定した差の平均その期間の真の差68円を選んだ割合
第1週前後比較(78円→68円)22,948円4,516円100.0%
第1週前後比較(68円→78円)マイナス13,893円4,516円0.0%
第1週1週ごとに交互6,645円4,516円99.5%
第9週前後比較(78円→68円)9,136円5,072円99.9%
第9週前後比較(68円→78円)1,043円5,072円62.6%
第9週1週ごとに交互5,431円5,072円96.5%
第18週前後比較(78円→68円)マイナス11,692円4,711円0.0%
第18週前後比較(68円→78円)21,144円4,711円100.0%
第18週1週ごとに交互2,856円4,711円86.3%
第31週前後比較(78円→68円)マイナス6,334円3,488円0.2%
第31週前後比較(68円→78円)13,338円3,488円100.0%
第31週1週ごとに交互2,277円3,488円87.1%

前後比較の行を見ると、結論がほぼ「どちらの価格を後半に置いたか」で決まっています。第1週に始めると、季節が上り坂なので、後半に置いた価格が有利になります。78円から68円へ切り替えた実験は、真の差(4,516円)の5倍に当たる22,948円の差を推定し、2,000回すべてで68円を選びました。結論は正しいのですが、効果を5倍に見積もっているので、この数字を使って年間の粗利の改善を見込めば、計画は大きく外れます。逆に68円から78円へ切り替えた実験は、差をマイナス13,893円と推定し、2,000回すべてで78円を選びました。正しい答えの逆です。第18週(夏の山)や第31週(下り坂)に始めると、今度は季節が下がっていくので、前半に置いた価格が有利になり、78円→68円の順の実験がほぼ全回で78円を選んでいます。

1週ごとに交互にする組み方では、どの開始週でも推定した差は真の差と同じ符号で、68円を選んだ割合は86.3〜99.5%でした。隣り合う週は季節の倍率がほぼ同じなので、季節の効果が両方の価格にほぼ等しくかかり、差を取ると打ち消し合うからです。ただし、打ち消しは完全ではありません。16週の中で、78円は奇数番目の週、68円は偶数番目の週に置かれるので、季節が上り坂なら68円がわずかに有利、下り坂なら78円がわずかに有利になります。第1週開始の推定した差(6,645円)が真の差(4,516円)より大きく、第18週・第31週開始の推定した差が真の差より小さいのはこのためです。冒頭の節の条件に照らすと、この交互の順番は結果を見る前に決めているので「事前に計画する」ことは満たしていますが、どの週にどちらの価格を置くかを無作為には割り付けていません。上で見たわずかな偏りは、78円をいつも奇数番目に置くという決まった順番が、季節の上り下りと重なって生じたものです。

この結果から言えるのは、季節や天候のように時期で動く需要を持つ品目で、前後比較の結果を判断に使ってはいけない、ということです。前後比較を避けられない場合は、少なくとも2つの手当てが要ります。1つは、価格を変えない対照(同じ時期の別の店舗群、あるいは価格を変えない似た品目)を置き、対照に対する相対の変化で比べることです。もう1つは、第3章の回帰のように季節の項を入れて、季節の効果を差し引いてから比べることです。どちらも、季節の形を別の情報で押さえるという点で同じ考え方です。

何週間試せば見分けられるか

前の節で、1週ごとに交互にすれば季節の偏りはかなり小さくなることを見ました。では、交互にした実験を何週間続ければ、正しい価格を選べるのでしょうか。季節を除いた真のモデルで、2つの価格を1週ごとに交互に試し、終わった時点で週の平均粗利が高い方を選ぶ、という実験を、試験の長さを変えて4,000回ずつ繰り返しました。水E 2L は98円と108円(真の差は週402円)、水PB 2L は68円と78円(真の差は週4,110円)です。

試験の週数(2つの価格の合計)水E 2L:98円を選んだ割合(真の差 週402円)水PB 2L:68円を選んだ割合(真の差 週4,110円)
4週53.3%80.3%
8週56.2%89.2%
16週57.6%96.0%
26週58.7%98.8%
52週61.2%100.0%
104週66.5%100.0%

水PB 2L は、16週で96.0%、26週で98.8%の割合で正しい価格を選べます。水E 2L は、2年(104週)続けても66.5%で、半分の確率で当たる当てずっぽう(50%)からあまり離れません。違いの源は、前の節の図で見た「差と揺れの比」です。週402円の差を、週4,596円の揺れの中から見つけ出すには、2年でも足りません。

ここで1つ確かめておきたいのは、数量の差は見分けやすいということです。水E 2L の数量の期待値は、98円で1,100.0本、108円で829.9本で、98円のほうが32.5%多く売れます。週ごとの数量の揺れ(108円で標準偏差66.6本)に比べて十分大きく、数週で見分けられます。見分けにくいのは、数量の差ではなく粗利の差です。98円にすると数量は3割以上増えますが、1本あたりの粗利が46円から36円に減るので、粗利の合計はほとんど変わりません。この記事の基準(第5章)でも水E 2L は98円への値下げが選ばれていますが、その根拠は、実験で直接粗利を比べた結果ではなく、推定した弾力性から計算した粗利です。なお、2つの価格だけを比べる場合は、数量から弾力性を推定して粗利を計算しても、正しい価格を選ぶ割合は粗利を直接比べた場合とほぼ同じでした。上の表の試験の長さ6通りで比べると、差が最も大きかったのは水E 2L の52週で、粗利を直接比べると61.2%、数量から計算すると60.8%の0.4ポイントです。水PB 2L では差は0.2ポイント以内でした。数量から計算する方法が効いてくるのは、後で見るように、候補が多く、需要曲線の形を使って候補どうしの情報を融通できる場合です。

経営の言葉にすると、水E 2L のような品目では、実験で「どちらが儲かるか」を確かめようとしても、確かめきれないうちに期間が終わります。そして、確かめられないほど差が小さいということは、どちらを選んでも損が小さいということでもあります。水E 2L で間違って108円を選び続けても、失うのは週402円、年に約2万円です。試験にかける手間(棚札の掛け替え、集計、説明)がそれを上回るなら、試さないのが合理的な判断になります。反対に、水PB 2L のように差が大きい品目は、数か月の試験で答えが出て、正しい価格に移れば週4,110円を取り戻せます。どの品目を試すかを、試す前に推定モデルで「差がどれくらいありそうか」を見て選ぶことが、実験の費用対効果を決めます。

多腕バンディット問題:試しながら稼ぐ

ここまでの実験は、試す期間と割り付けを先に決め、期間が終わってから答えを出す組み方でした。この組み方には、試している間ずっと、悪いと分かりかけている価格にも同じ回数を割り当て続けるという無駄があります。水PB 2L で言えば、38円が大赤字だと1週で分かっても、計画どおりなら2巡目でもう一度38円を付けることになります。試しながら結果を見て、見込みのある価格に試す回数を寄せていく、という考え方を定式化したのが多腕バンディット問題です。問題の形は、当たりの出方の違う機械が何台も並んでいて、どの台が良いかを知らないまま、限られた回数で報酬の合計を最大にする、というものです。後で引く Auer らの論文も、選ぶ対象を「マシン」、選ぶことを「プレイ」と呼んでいます。価格の実験に当てはめると、台が価格の候補、台を選ぶことがその週にその価格を付けること、報酬がその週の粗利に当たります。

ここで、冒頭の節で挙げた条件(試す価格と割り付けを結果を見る前に計画として決め、無作為に割り付ける)との関係を整理しておきます。前の節までの前後比較と交互の比較は、候補と順番を結果を見る前に決めている点で、この条件のうち事前の計画を満たしています(後の節の固定テストは、試す順番も無作為に決めています)。これに対して、この節から扱う方策は、売れ行きを見て次の週の価格を選ぶので、冒頭で「その場で選ぶ」と書いた型に当たります。この節と次の2つの節のシミュレーションは、季節を入れない年平均の平常週で行っているので、需要が時期によって変わることはなく、価格を選んだ時期と需要の動きが重なる問題は表に出ません。需要が季節で動く場合には、方策が試す価格が時期によって偏り、前後比較と同じ取り違えが起きます。その場合に何が起き、どう手当てするかは、後の「需要が季節で動くときのバンディット」の節で確かめます。方策が残した販売の記録を、あとで第3章のような回帰に使って価格の効き目を推定し直すときも、同じ注意が要ります。記録の中の価格は、売れ行きを見て、良さそうに見えた価格ほど多く、選ばれた時期も偏っているので、計画どおりに割り付けた実験の記録と同じには扱えません。季節や販促を説明変数に入れて、時期の違いを差し引いてから使う必要があります。

多腕バンディット問題の中心にあるのが、探索と活用の兼ね合いです。活用は、これまでの結果で最も良さそうな価格を付けて、今週の粗利を稼ぐことです。探索は、まだよく分かっていない価格を付けて、その価格についての情報を集めることです。活用ばかりでは、最初にたまたま良く見えた価格に居着いて、本当に良い価格を見逃します。探索ばかりでは、悪い価格で売る週が増えます。Auer・Cesa-Bianchi・Fischer の論文(Machine Learning 誌、第47巻、2002年)は、この兼ね合いへの対処の良し悪しを測る代表的な尺度をリグレット(後悔)と呼び、「選び方が、期待される報酬の最も高い台を常に選ぶわけではないことによる期待損失」と定義しています。この章では、毎週「真のモデルでの最適の価格」を付けていた場合に比べて失った粗利の期待値を、週ごとに足し上げたものをリグレットとし、日本語で「後悔の累計」と呼びます。後悔の累計は最適の価格との差で数えるので、試すことの費用だけを表すものではありません。何も試さない現状維持にも後悔の累計があり、それは現在の売価が最適からずれているために取りこぼしている粗利です。この章では、方策の後悔の累計から現状維持の後悔の累計を引いた差を、試したことによる粗利の増減として読みます。差がプラスなら、試したことで現状維持より粗利を失ったことになり、その額が試すことの正味の費用です。

同じ論文によると、Lai と Robbins は、この問題のリグレットが試行の回数に対して少なくとも対数のペース(試す回数が10倍になるごとに、ほぼ一定の額ずつ増える増え方)で増えざるを得ないことを最初に示しました。つまり、どれほど賢い方策でも、試している間の後悔の累計(最適との差)をゼロにはできません。Auer らは、報酬が0から1の範囲に収まる場合について、対数のペースのリグレットを有限の回数でも保証する単純な方策を示し、その1つを UCB1 と名付けています。UCB1 の指標は2つの項の和で、1つ目はその台のこれまでの平均の報酬、2つ目はその平均の信頼区間(これまでの観測から見て、本当の平均がありそうな範囲)の幅に関わる項です。試した回数が少ない台ほど幅が大きく、指標が高くなるので、「よく分かっていない台にも、見込みのあるうちは試す機会を与える」ことになります。

もう1つの代表的な方策がトンプソン抽出です。Russo らの解説(A Tutorial on Thompson Sampling、2017年に初版公開)によれば、この方法は1933年に Thompson が、臨床試験で生じる2本腕のバンディット問題で実験の労力を割り振る方法として最初に提案したもので、長く学術文献では顧みられなかったものの、近年は収益管理(レベニューマネジメント)やマーケティングを含む幅広い分野で応用されています。Thompson の論文は Biometrika 誌の第25巻(1933年)に載っています。考え方は単純で、各台の「本当の平均の報酬」についての見込みを確率分布で持ち、毎回その分布から1つずつ値を引いて、引いた値が最大の台を選びます。よく分かっていない台は分布の幅が広いので、ときどき大きな値が引かれて試されます。結果が悪ければ分布が下にずれて、選ばれにくくなります。ベイズ統計の言葉では、試す前に置く見込みの分布を事前分布、観測した結果を取り込んで更新した見込みの分布を事後分布と呼びます。考え方の詳しい背景は、弊社コラム『ベイズ統計の考え方と使い方、MCMCから階層ベイズまで』で扱っています。

価格への応用の研究もあります。Misra・Schwartz・Abernethy の論文(Marketing Science 誌、第38巻第2号、2019年)は、多腕バンディットのアルゴリズムに、ミクロ経済学の選択理論(価格が上がると買う人が減るといった需要の構造)を組み込んだ、価格の実験の方策を提案しています。後で示す「需要曲線つきトンプソン抽出」も、需要曲線の形を方策に組み込むという点で同じ方向の考え方ですが、この論文の方法そのものではなく、この章で作った単純な版です。

トンプソン抽出を、水PB 2L の3つの候補(68・78・88円。現在の売価から上下15%以内)に当てはめた最小のコードが次のものです。報酬は水カテゴリの週の粗利で、候補ごとの平均の粗利に「平均8万円、標準偏差2万円」の正規分布を事前分布として置いています。試す前の時点では、どの候補の平均の粗利も「8万円を中心に、上下2万円ほどの範囲にありそうだが、それより外れている可能性も残す」と見込んでいる、という意味です。週の粗利のばらつきは約4,600円と見込んでいます(前の節で実測した値の丸め)。コードの from price_data import * は、第2章で紹介した共通データのプログラム(price_data.py)から、品目マスタ SKUS・品目の並び SKU_IDS・真のモデルの期待数量を返す true_expected_qty・誤差の大きさ NOISE_SD を読み込む行です。

import sys, io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8")
import numpy as np
from price_data import *

# 水PB 2L(W2)の売価を68・78・88円から週ごとに選ぶ。報酬は水カテゴリ(W1+W2)の週の粗利
arms = np.array([68.0, 78.0, 88.0])
i1, i2 = SKU_IDS.index("W2"), SKU_IDS.index("W1")
cur, cost = SKUS.current.values.astype(float), SKUS.cost.values.astype(float)

def weekly_gross(p, rng):
    pr = cur.copy(); pr[i1] = p
    q = true_expected_qty(pr) * np.exp(rng.normal(0, NOISE_SD, 12))   # 真のモデル+誤差
    return (p - cost[i1]) * q[i1] + (cur[i2] - cost[i2]) * q[i2]

rng = np.random.default_rng(0)
sigma = 4600.0                      # 週の粗利のばらつき(標準偏差)の見込み
prec = np.full(3, 1 / 20000.0**2)   # 事前分布:平均8万円、標準偏差2万円
pmean = np.full(3, 80000.0 / 20000.0**2)
picked = []
for week in range(52):
    draw = rng.normal(pmean / prec, 1 / np.sqrt(prec))   # 事後分布から1つずつ引く
    k = int(np.argmax(draw))                              # 引いた値が最大の価格を試す
    g = weekly_gross(arms[k], rng)
    prec[k] += 1 / sigma**2                               # 観測した粗利で事後分布を更新
    pmean[k] += g / sigma**2
    picked.append(int(arms[k]))
print("1〜13週 :", picked[:13])
print("40〜52週:", picked[39:])
print("試した週数:", {int(a): picked.count(int(a)) for a in arms})
print("事後の平均:", np.round(pmean / prec).astype(int))
# 出力:
# 1〜13週 : [88, 88, 78, 78, 88, 88, 78, 78, 68, 68, 68, 68, 68]
# 40〜52週: [68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68]
# 試した週数: {68: 39, 78: 9, 88: 4}
# 事後の平均: [84859 80405 76091]

コードの中心は、ループの中の4行です。prec は各候補の事後分布の精度(分散の逆数)、pmean は精度を掛けた平均で、正規分布どうしの組み合わせでは、観測を1つ足すたびにこの2つに足し算をするだけで事後分布が更新できます。毎週、3つの事後分布から1つずつ値を引き、最大の候補を試します。この1回の実行では、最初の8週は88円と78円を行き来し、9週目に68円を試してからは、ほぼ68円に落ち着きました。52週のうち68円が39週、78円が9週、88円が4週です。終わった時点の事後の平均は、68円が84,859円、78円が80,405円、88円が76,091円で、真のモデルでの期待値(84,908円・80,798円・75,580円)と同じ並びになっています。

読み方で注意したいのは、これは乱数の種を1つに決めた1回の実行にすぎないことです。同じ方策でも、乱数が違えば、最初にどの価格が良く見えるかが変わり、68円にたどり着くまでの週数も変わります。方策の良し悪しは、1回の実行ではなく、多数回の繰り返しの平均で比べる必要があります。次の節では、この比較を1,000回ずつの繰り返しで行います。

固定の価格テストと4つの方策を競わせる

同じ真のモデルの上で、価格の決め方を7通り用意し、52週ずつ、乱数を変えて1,000回繰り返しました。対象は水E 2L と水PB 2L のそれぞれで、候補の取り方は「price_grid の9通り」と「現在の売価から上下15%以内」の2通りです。上下15%以内は、この記事の基準の最適化(第5章)と同じ制約で、水E 2L では98・108・118円、水PB 2L では68・78・88円の3つになります。方策の中身は次の表のとおりです。固定テストの「1週・2週・4週ずつ」は、候補ごとに合計で何週試すかを表す名前で、同じ価格を続けて2週・4週付けるという意味ではありません。

方策価格の選び方この章の実装で置いた前提
現状維持現在の売価のまま動かさないなし
固定テスト(1週・2週・4週ずつ)候補を無作為な順番に並べ、1週ずつ順に試すことを1巡・2巡・4巡繰り返す。終わったら週の平均粗利が最大の価格に固定するなし
UCB各候補を1回ずつ試したあと、「平均の粗利+幅」が最大の候補を選ぶ。幅は試した回数が少ないほど大きいAuer らの UCB1 は報酬が0から1の範囲に収まる前提なので、幅に週の粗利の標準偏差(実測値)を掛けて円の単位に直した
トンプソン抽出候補ごとの平均の粗利の事後分布から1つずつ値を引き、最大の候補を選ぶ事前分布は平均77,777円(販売履歴の第53〜104週の平常週の水カテゴリの粗利の平均)、標準偏差2万円。週の粗利の標準偏差は実測値を既知とした
需要曲線つきトンプソン抽出2品目それぞれについて「log 数量=切片+傾き×log(売価÷現在の売価)」の係数の事後分布から値を引き、その需要曲線で粗利が最大になる候補を選ぶ傾きの事前分布は、動かす品目が平均マイナス2・標準偏差1.5、もう1品目が平均0・標準偏差1。切片は販売履歴の平常週の平均数量を中心に置いた。数量の誤差の大きさ(log の標準偏差0.08)は既知とした

最後の需要曲線つきトンプソン抽出について、先に断っておくことがあります。この方策が仮定している需要曲線の形(log 数量が log 価格の直線)は、第2章で用意した真のモデルの形とちょうど同じです。数量の誤差の大きさも、真の値を既知として使っています。現実には、需要曲線の形は分からず、仮定した形が外れていれば、この方策は誤った価格に自信を持って居着くおそれがあります。この章の結果では、需要曲線つきトンプソン抽出が有利に見えますが、その有利さの一部は「正しい形を知っていた」ことから来ています。

結果を、52週の後悔の累計で並べたのが次の表です。「後悔の累計」は、毎週真のモデルでの最適の価格を付けた場合に比べて失った粗利の期待値を52週分足したもので、1,000回の平均です。「最終週に最良」は、52週目に真のモデルでの最適の価格を付けていた回の割合、「価格変更」は52週の中で価格を変えた回数の平均です。

方策(52週)水E 2L・9通り:後悔の累計水E 2L・上下15%:後悔の累計水PB 2L・9通り:後悔の累計水PB 2L・上下15%:後悔の累計
現状維持20,919円20,919円213,726円213,726円
固定テスト1週ずつ108,118円29,324円376,117円87,577円
固定テスト2週ずつ134,694円28,792円642,624円63,461円
固定テスト4週ずつ212,753円25,505円1,213,364円73,240円
UCB112,159円24,344円350,136円43,068円
トンプソン抽出110,792円24,583円354,128円44,689円
需要曲線つきトンプソン抽出41,816円24,539円70,312円28,501円
方策(52週)水E 2L・9通り:最終週に最良/価格変更水E 2L・上下15%:最終週に最良/価格変更水PB 2L・9通り:最終週に最良/価格変更水PB 2L・上下15%:最終週に最良/価格変更
現状維持0.0%/0.0回0.0%/0.0回0.0%/0.0回0.0%/0.0回
固定テスト1週ずつ26.7%/8.9回38.0%/2.7回54.4%/8.9回68.9%/2.7回
固定テスト2週ずつ32.4%/17.9回43.4%/5.6回64.7%/17.9回82.3%/5.7回
固定テスト4週ずつ40.6%/35.9回45.0%/11.6回76.0%/35.9回88.4%/11.7回
UCB33.4%/34.2回50.0%/18.8回84.3%/21.7回93.4%/9.9回
トンプソン抽出34.9%/37.3回52.5%/23.3回81.8%/23.7回96.8%/10.2回
需要曲線つきトンプソン抽出63.3%/25.6回62.9%/21.0回97.7%/5.4回98.1%/5.3回

1つ目の表の「現状維持」の行が、何もしないことの費用です。水E 2L では52週で20,919円、水PB 2L では213,726円で、それぞれ週402円・週4,110円の52週分に当たります。この行より後悔の累計が小さい方策は、試している間に最適との差で失った分を含めても、現状維持より粗利を多く稼いだことを意味します。後悔の累計の差は、そのまま粗利の差です。

水E 2L の2列を見ると、9通りでも上下15%でも、現状維持以外の6つの方策のどれも、後悔の累計が現状維持(20,919円)を下回っていません。9通りの候補で試すと、トンプソン抽出で110,792円、固定テスト4週ずつでは212,753円で、現状維持より9万〜19万円多く粗利を失っています。原因は、68円(最適との差 週24,185円)や148円(同6,463円)のような遠い候補を試す週の損です。候補を上下15%に絞ると、損は2万4千〜2万9千円台まで縮みますが、それでも現状維持には届きません。前の節で見たとおり、水E 2L の現在の売価はもともと最適の隣にあり、試して取り戻せる粗利が週402円しかないからです。現状維持との差で見ると、UCB で3,425円、トンプソン抽出で3,664円、固定テスト1週ずつで8,405円を、試したことで余分に失っています。これが、水E 2L を上下15%以内で52週試すことの正味の費用です。52週目に98円を付けていた割合も、トンプソン抽出で52.5%、需要曲線つきトンプソン抽出でも62.9%にとどまります。

水PB 2L は様子が違います。候補を上下15%に絞った列では、すべての方策が現状維持(213,726円)を下回り、最も小さい需要曲線つきトンプソン抽出は28,501円、UCB は43,068円、トンプソン抽出は44,689円でした。現状維持との差で言えば、52週で約17万〜18万5千円の粗利を取り戻しています。固定テストも63,461〜87,577円で現状維持より良いのですが、試す回数を寄せない分、UCB やトンプソン抽出より約2万〜4万5千円多く失っています。一方で、9通りの候補の列では、需要曲線つきトンプソン抽出(70,312円)を除くすべての方策が、現状維持より悪くなりました。原価割れの38円を、固定テストは巡回のたびに、UCB は最初に必ず1回試します。トンプソン抽出も、どの候補にも同じ事前分布を置いているので、最初のうちは38円も他の候補と同じように選ばれ、1,000回の平均でちょうど1週、38円を付けていました。38円を1週置くと194,888円を失うので、1回の試しで現状維持の1年分に近い損が出ます。固定テスト4週ずつの1,213,364円も、38円と48円をそれぞれ4週ずつ試すだけで922,752円になり、これが大半を占めます。需要曲線つきトンプソン抽出が38円を付けた週は、1,000回の平均で0.17週でした。

2つ目の表の「価格変更」の列は、顧客から見た価格の動きの多さです。UCB とトンプソン抽出は、最後まで少しずつ探索を続けるので、価格を変える回数が多くなります。水E 2L の9通りでは、52週のうち34〜37回、つまりほぼ毎週のように価格が変わっています。需要曲線つきトンプソン抽出は、水PB 2L では5回程度で落ち着きました。価格の変更の回数は、棚札の掛け替えの手間であると同時に、顧客の受け止めにも関わります。この点は最後の節で触れます。

水E 2L(左)と水PB 2L(右)の売価を9通りの候補から週ごとに選んだときの、後悔の累計の推移を方策ごとに描いた折れ線グラフ(52週・1000回の平均)。左では現状維持の破線が最も低く、需要曲線つきトンプソン抽出が次に低い。右では需要曲線つきトンプソン抽出が最初の数週で約7万円まで上がったあと平らになり、現状維持の破線は週を追って直線的に上がって約21万円に達する。固定テストの線は試験の期間中に急に上がり、固定したあとは平らになる

図は、9通りの候補の場合の後悔の累計の推移です。どの方策も、最初の数週で急に上がり、その後は傾きが小さくなります。最初の急な上がりが探索の費用(試している間に積み上がる、最適との差としての後悔の累計で、現状維持と比べた正味の費用とは別のもの)で、その後の傾きが、学んだあとに残る損です。固定テストの線は、試験の期間中はまっすぐ上がり続け、価格を固定した時点で折れて平らになります。平らになったあとの傾きが0でないのは、固定した価格が最適でない回が混ざっているからです。右の水PB 2L では、現状維持の破線が週4,110円の傾きで上がり続け、需要曲線つきトンプソン抽出は最初の数週で平らになって、その差が週を追って開いていきます。左の水E 2L では、現状維持の破線の傾き(週402円)がもともと小さいので、どの方策も最初の探索の損を52週の中で取り戻せていません。

水PB 2L の売価を9通りの候補から選んだときの、1回目の繰り返しでの週ごとの売価の推移を3段に並べた階段状のグラフ。上段の固定テスト2週ずつは、最初の18週で38円から118円までの9通りを2巡し、19週目から68円に固定している。中段のトンプソン抽出は、最初の12週ほどで38円から118円まで幅広く試したあと68円が中心になるが、52週目まで58円・78円・88円をときどき試している。下段の需要曲線つきトンプソン抽出は、118円・78円・58円を試したあと6週目から68円に落ち着いている。点線は真のモデルでの最適68円、破線は現在の売価78円

上の図は、水PB 2L・9通りの候補で、3つの方策が1回目の繰り返しで付けた価格を週ごとに並べたものです。週ごとの価格の推移を並べると、方策ごとの性格が読み取れます。固定テスト2週ずつは、最初の18週で9通りを2巡し、その中で38円を2回付けています。トンプソン抽出は、序盤に38円から118円まで幅広く試したあと68円が中心になりますが、52週目まで58円・78円・88円をときどき試し続けています。需要曲線つきトンプソン抽出は、118円を2週、78円・58円を1週ずつ試したあと、6週目から68円に落ち着きました。需要曲線の形を仮定しているので、118円と78円と58円の売れ方から、試していない38円や48円の売れ方も推し量れるわけです。1回目の繰り返しだけの図なので、他の回では並びが違いますが、方策ごとの性格は1,000回の平均(前の表)と同じ傾向です。

試す期間の長さと、探索の費用の回収

探索の費用は最初にまとめて払い、学んだ結果の得はその後に少しずつ入ってきます。したがって、同じ方策でも、価格を運用する期間が長いほど、探索の費用を回収しやすくなります。候補を上下15%に絞った場合について、期間を26週・52週・104週に変えて後悔の累計を比べたのが次の表です(いずれも1,000回の平均)。

方策水E 2L:26週水E 2L:52週水E 2L:104週水PB 2L:26週水PB 2L:52週水PB 2L:104週
現状維持10,459円20,919円41,837円106,863円213,726円427,452円
固定テスト2週ずつ14,629円28,792円51,932円44,727円63,461円105,049円
UCB13,642円24,344円42,598円34,803円43,068円54,223円
トンプソン抽出13,641円24,583円41,861円37,242円44,689円53,045円
需要曲線つきトンプソン抽出14,346円24,539円38,022円25,812円28,501円32,108円

水PB 2L の列では、どの方策も26週の時点ですでに現状維持(106,863円)を大きく下回っています。現状維持の後悔は期間に比例して増えるのに対し、トンプソン抽出は26週から104週までで37,242円から53,045円へ、需要曲線つきトンプソン抽出は25,812円から32,108円へと、増え方が鈍っています。学び終えたあとは、ほぼ最適の価格で売っているからです。固定テスト2週ずつは52週から104週の間に約4万2千円増えていて、試験の後に固定した価格が最適でない回(52週の時点で17.7%)の損が、期間とともに積み上がっています。固定テストは、一度決めたら学び直さないので、決め間違いを後から直せません。

水E 2L の列では、104週まで延ばすと、需要曲線つきトンプソン抽出(38,022円)が初めて現状維持(41,837円)を下回り、トンプソン抽出(41,861円)がほぼ並びます。2年かけて、ようやく探索の費用を回収できるかどうか、ということです。104週は2年で、実際には途中で原価・競合・品揃えが変わるので、2年後に回収できる見込みのために探索の費用を払う判断は、慎重にすべきだと考えています。

この結果は、価格の実験の期間を決める考え方を示しています。期間の長さは、統計の検定で差を見分けるのに必要な週数だけで決めるものではありません。「試して見つけた価格で、その後どれだけの期間売るのか」と合わせて決める必要があります。棚替えや商品の改廃で半年後に品目そのものが入れ替わるなら、半年で探索の費用を回収できない実験は、粗利の上では割に合いません。

需要が季節で動くときのバンディット

ここまでのバンディットのシミュレーションは、季節を入れない年平均の平常週で行いました。前半の節で見たとおり、季節があると、時期の違う週の粗利をそのまま比べることはできません。適応的な探索は、試す価格が時期によって偏るので、前後比較と同じ問題を抱えます。たとえば、春に78円を多く試し、夏に68円を多く試した方策は、夏の需要の山を68円の手柄と取り違えます。

そこで、季節のある真のモデルの上で、水PB 2L の上下15%以内の候補(68・78・88円)を52週選ぶシミュレーションを、開始週を第1週(4月第1週。季節が上り坂)と第27週(季節が下り坂)の2通りで、1,000回ずつ繰り返しました。需要曲線つきトンプソン抽出は、季節の項(52週周期の cos と sin。第3章の回帰と同じ形)を説明変数に入れない版と入れた版を比べています。後悔の累計は、その週の季節の倍率を掛けて数えています。このシミュレーションでは、トンプソン抽出の事前分布の平均を8万円とし、週の粗利の標準偏差は開始週の現在の売価で実測した値(第1週開始で4,093円、第27週開始で5,163円)を使いました。

方策第1週開始:後悔の累計第1週開始:最終週に68円第1週開始:価格変更第27週開始:後悔の累計第27週開始:最終週に68円第27週開始:価格変更
現状維持217,079円0.0%0.0回217,079円0.0%0.0回
固定テスト2週ずつ79,764円75.0%5.5回84,634円73.5%5.8回
トンプソン抽出76,206円74.0%3.8回90,809円81.3%16.3回
需要曲線つきトンプソン抽出(季節の項なし)35,055円95.8%2.5回82,408円89.4%13.8回
需要曲線つきトンプソン抽出(季節の項あり)34,217円97.9%6.7回35,234円98.3%6.9回

季節の項を入れた需要曲線つきトンプソン抽出は、開始週によらず後悔の累計が3万4千〜3万5千円台で、季節のない場合(前の節の52週で28,501円)の約1.20〜1.24倍でした。後悔の累計を季節の倍率を掛けて数えているので、季節のない場合とそのまま比べられる数字ではありませんが、次に見る季節の項を入れない版の第27週開始(82,408円)のような膨らみ方はしていません。季節の項を入れない版は、第1週開始では35,055円と遜色ありませんが、第27週開始では82,408円に膨らみ、最終週に68円を付けていた割合も89.4%に下がりました。第27週開始では、価格変更の回数も13.8回と、季節の項を入れた版(6.9回)の2倍になっています。季節の項のないモデルは、季節による数量の上下も価格の違いで説明しようとするので、季節の動きが価格の効果に混ざります。第27週開始の実行では、その結果として価格が定まらず、変更の回数が増えました。第1週開始では逆に、季節の項のない版の価格変更は2.5回で、季節の項を入れた版(6.7回)より少なくなっています。価格変更の回数の多い少ないは開始週によって入れ替わるので、季節の項を入れるかどうかの判断は、変更の回数ではなく後悔の累計と最終週の価格で見るのが筋です。第3章で、季節を入れずに回帰すると弾力性を取り違えることを見ましたが、同じことが、試しながら学ぶ方策の中でも起きるということです。

候補ごとの平均の粗利だけを見るトンプソン抽出も、第27週開始では90,809円と、季節のない場合(44,689円)の約2倍になっています。開始週による違いは、季節の上り坂と下り坂のどちらで、どの価格が多く試されたかで変わるので、「季節が下り坂のときにだけ悪くなる」と一般化はできません。言えるのは、季節のある品目で適応的な探索を使うなら、季節の効果を何らかの形で差し引く仕組み(季節の項を入れたモデル、価格を変えない対照の品目や店舗との相対)を、方策の中に組み込む必要があるということです。販促の週も同じで、共通データでは販促の上乗せ(log で+0.25)と翌週の反動(マイナス0.10)があるので、販促の週とその翌週を実験の観測に混ぜるなら、それも説明変数に入れる必要があります。

経営の判断に翻訳する

この章の結果を、価格の実験を承認する立場の判断に使える形に整理します。1つ目は、実験の前に「取り戻せる粗利の上限」を見積もることです。この章の例では、水E 2L は現在の売価のままでも失っているのは週402円(年に約2万円)で、どんな方策を使っても、52週の中で探索の費用を回収できませんでした。水PB 2L は週4,110円(年に約21万円)を失っていて、上下15%以内の候補で試せば、52週で約17万〜18万5千円を取り戻せました。違いを決めたのは方策の賢さではなく、現在の売価が最適からどれだけ離れているかです。第3章・第4章の推定モデルで「この品目は現在の売価から動かすと粗利がどれだけ変わりそうか」を先に計算し、差が大きく、しかも推定の不確かさが大きい品目から実験に回すのが、実験の費用対効果を上げる順序だと考えています。推定の不確かさが小さい品目は、実験せずに推定モデルの答えで動かしてもよく、差が小さい品目は、実験も改定もしないのが合理的なことがあります。

2つ目は、候補の範囲を決めるのが経営の仕事だということです。この章で最も大きな損を出したのは、方策の選び方ではなく、原価割れの38円を候補に入れたことでした。水PB 2L で9通りの候補を使うと、トンプソン抽出でも52週で354,128円を失い、現状維持より約14万円悪くなりました。同じ方策で候補を上下15%に絞ると44,689円です。候補に原価割れ・ブランドの位置づけと矛盾する価格・法令や取引条件に触れる価格を入れないことは、アルゴリズムではなく、価格の方針を決める人が先に決めることです。第13章で扱うガードレールは、実験にもそのまま適用する必要があります。

3つ目は、試すことの正味の費用を予算として明示することです。このとき、何と比べた費用かを分けておく必要があります。後悔の累計は最適の価格との差なので、何もしない現状維持にも、据え置いたことによる取りこぼしとして載ります。水PB 2L では、現状維持の後悔の累計は52週で213,726円で、上下15%以内で試したときの後悔の累計は、需要曲線つきトンプソン抽出で28,501円、トンプソン抽出で44,689円でした。どちらも現状維持より小さく、52週の合計で見ると、試したことで現状維持より約17万〜18万5千円多く粗利を稼いでいます。水E 2L では反対に、上下15%以内のトンプソン抽出の後悔の累計は24,583円で、現状維持の20,919円より3,664円大きく、この3,664円が試すことの正味の費用です。予算として決めておくのは、この「現状維持と比べて、試したことで粗利がどれだけ減ったか」の上限です。実験を始める前に「この品目の実験では、現状維持と比べて年に何円までの粗利の減少を許すか」を決めておき、途中でその見積もりが上限を超えたら止める、という運用にしておくと、実験が目的を見失って続くことを防げます。後悔の累計そのものを上限にすると、水PB 2L のように現状維持より得をしている実験まで止めることになります。現実の実験では、現在の売価のままだった場合の粗利は観測できないので、推定モデルや、価格を変えない対照の店舗・品目の粗利で見積もることになります。

4つ目は、価格を頻繁に動かすことの、顧客から見た費用です。この章のシミュレーションでは、トンプソン抽出や UCB は52週のうち10〜37回価格を変えていました。同じ商品の価格が週ごとに上下することを、顧客がどう受け止めるかは、粗利のシミュレーションには入っていません。実験の期間に、来店した週によって同じ商品の価格が違うことを不公平と感じる顧客もいるでしょう。店舗を分ける組み方なら、同じ週に店舗によって価格が違うことになります。価格の公平感についての研究と、価格の表示に関わる法令(景品表示法の二重価格表示など)の論点は、第12章で扱います。実験の設計では、価格を変える回数の上限や、変える曜日をそろえるといった条件を、粗利とは別に置いておくことが有効だと考えています。

5つ目は、実験で見つけた価格の「賞味期限」です。この章のシミュレーションの真のモデルは、52週の間ずっと変わりませんでした。現実の需要曲線は、競合の価格(第11章)、原価、品揃え、景気で動きます。固定テストで一度決めた価格は、条件が変われば最適でなくなりますが、固定テストはそれに気づく仕組みを持ちません。トンプソン抽出のように探索を続ける方策は、条件の変化に気づく余地を残しますが、そのぶん価格の変更が多くなります。どちらを選ぶかは、需要の条件がどれくらいの頻度で変わる品目かによります。

この章の要点は3つです。第一に、価格の実験は、割付・期間・測る指標の決め方で結論が変わり、特に季節で動く品目の前後比較は、正しい答えの逆を出すことがあります。試す価格と、どの週(店舗)にどの価格を付けるかを結果を見る前に決めて無作為に割り付けることが基本で、季節で動く品目では、1週ごとに交互にする、対照を置く、季節の項を入れるといった手当てが要ります。第二に、多腕バンディット問題の方策(UCB・トンプソン抽出)は、試しながら良い価格に寄せることで、固定の価格テストより後悔の累計(リグレット)を小さくできますが、その効果は候補の範囲と、現在の売価が最適からどれだけ離れているかで大きく変わります。現在の売価が最適の近くにある品目では、どの方策も1年では現状維持に勝てませんでした。また、方策は売れ行きを見て価格を選ぶので、需要が季節で動く品目では、季節の効果を差し引く仕組みを方策に組み込む必要があります。第三に、需要曲線の形を方策に組み込むと、試していない価格の売れ方も推し量れるので探索の費用はさらに下がりますが、その有利さは仮定した形が正しいことに依存します。次の第11章では、ここまで固定してきた競合の価格を動かし、競合の値付けへの反応が自社の粗利にどう効くかを扱います。

この章を深めたい方への参考書籍

『バンディット問題の理論とアルゴリズム』(本多淳也・中村篤祥、講談社):機械学習プロフェッショナルシリーズの1冊で、確率的バンディット問題の方策とリグレットの解析、最適腕識別と A/B テスト、線形モデル上のバンディット問題、連続腕バンディットとベイズ最適化までを章立てで扱っています。この章で使った UCB とトンプソン抽出の理論的な裏付けと、需要曲線のような構造を持つ問題(線形モデル上のバンディット)への広げ方を学ぶのに向いています。

『A/Bテスト実践ガイド 真のデータドリブンへ至る信用できる実験とは』(Ron Kohavi・Diane Tang・Ya Xu 著、大杉直也 訳、ドワンゴ):原題は Trustworthy Online Controlled Experiments で、オンラインの対照実験を信頼できる形で回すための本です。実験の実施と分析の流れ、結果を疑うべきときの見分け方、実験の基盤と組織の文化を扱っています。この章の前半で見た、割付・期間・指標の決め方を、組織として実験を回す運用の側から補うのに役立ちます。

第11章 競合と価格

第10章では、価格を実際に試しながら需要を学ぶ方法を扱いました。そこまでの章は、需要の式の中に自店の価格と自店の他の品目の価格だけが入っている前提で進めてきました。しかし多くの小売・サービスの事業では、近くの競合店や同じ商品を扱う通販サイトの価格が、自店の販売数量を動かします。しかも競合は、こちらの価格を見て自分の価格を変えることがあります。この章では、競合の価格が需要に入るとはどういうことかを整理したうえで、第2章で用意したサンプルデータの考え方を2つの店に広げた架空の2社モデルを作り、競合の価格に合わせる規則(一律に追随する・一部だけ追随する・無視する、など)を比べます。あわせて、価格競争の基本であるベルトラン型の競争と、価格競争が粗利を削る仕組み、差別化が価格に与える効果、アルゴリズムどうしが価格を反応させ合うことをめぐる議論、競合価格データの集め方と使い方を扱います。集めた競合の価格を表示に使うときの条件と、アルゴリズムによる価格設定の競争法上の扱いは第12章で扱います。競合の価格を集める方法そのものの法的な注意(相手のサイトの利用規約や技術的な制限の扱いなど)は、このコラムでは扱いません。

競合の価格が自店の需要に入るということ

第5章では、同じ店の中の品目どうしの関係を交差価格弾力性で表しました。「緑茶Bが1%値上げすると、緑茶Aの数量が0.25%増える」といった関係です。競合店との関係も、同じ形で書けます。自店のある品目の数量が、競合店の同じ品目(あるいは近い品目)の価格によって動くなら、その動き方は「競合の価格が1%上がると、自店の数量が何%変わるか」という交差弾力性で表せます。違いは、店の中の品目の価格は自店が決められるのに対して、競合店の価格は自店が決められない点です。

この違いが、価格の判断に大きく効いてきます。第3章で推定した自己弾力性は、過去の販売履歴から「自店の価格が動いたとき数量がどれだけ動いたか」を測ったものです。この値をそのまま将来の判断に使えるのは、自店が価格を動かしたときに競合の価格がどう振る舞っていたかが、これから先も同じである場合だけです。過去に自店が値上げしたとき、競合がたまたま価格を据え置いていたなら、推定された弾力性は「競合が動かないときの弾力性」です。逆に、競合がいつも数週遅れで追随していたなら、推定された弾力性には競合の追随の効果が混ざっています。

この章では、2つの弾力性を区別して呼びます。1つは、相手の価格を固定したまま自店だけが価格を変えたときの弾力性で、これを「自社弾力性」と呼びます。もう1つは、自店と競合が同じ割合で一緒に価格を変えたときの数量の弾力性で、これを「市場全体の弾力性」と呼びます。自店だけが値上げすると、客の一部は競合へ移り、一部は買うのをやめます。両店が一緒に値上げすると、競合へ移る客はいなくなり、買うのをやめる客だけが残ります。そのため、この章のように2店の商品が互いに代わりになる(競合の価格に対する交差弾力性が正の)設定では、市場全体の弾力性の絶対値は、自社弾力性の絶対値より小さくなります。この章の線形の需要では、出発点(両店が同じ価格)において、自社弾力性の絶対値から市場全体の弾力性の絶対値を引いた差が、競合の価格に対する交差弾力性に等しくなります。

経営の判断で問題になるのは、自店が値上げしたときに実際に起きる数量の変化が、この2つの間のどこに来るかです。競合が動かなければ自社弾力性どおりに数量が減り、競合が完全に追随すれば市場全体の弾力性どおりにしか減りません。つまり、競合の反応を考えずに自社弾力性だけで最適な価格を決めると、競合が追随する市場では値上げの余地を過小に見積もり、競合が追随しない市場では、追随を期待して値上げした場合に数量の減少を過小に見積もることになります。以下の節では、この関係を架空の2社モデルで数字にして確かめます。

架空の2社モデルを作る

この章で使うのは、架空の設定です。第2章で用意したサンプルデータの品目のうち、緑茶A 500ml(T1、原価72円・現在の売価138円・真の自己弾力性\( -2.4 \))を手本にして、同じ商品を自店Aと競合Bの2店が近くで売っている状況を作りました。共通データそのものには競合店は入っていないので、この章の数字は共通データや基準の結果(第5章の最適化)とは別のものです。基準の結果と並べて比べることはしません。パラメータは次のとおりで、すべて架空の値です。

項目値(架空)意味
品目緑茶A 500ml に当たる架空の品目自店Aと競合Bが同じ商品を売る
原価72円(両店同じ)第2章の T1 の原価に合わせた
出発点の売価両店とも138円第2章の T1 の現在の売価に合わせた
出発点の週販数量各店2,000個両店が138円のときの1店あたりの週の期待数量
自社弾力性\( -2.4 \)相手の価格を固定して自店だけが1%上げると、自店の数量が2.4%減る(出発点で)
市場全体の弾力性\( -1.2 \)両店が一緒に1%上げると、各店の数量が1.2%減る(出発点で)
交差弾力性1.2相手が1%上げると、自店の数量が1.2%増える(出発点で。\( 2.4 – 1.2 \))
需要の式\( \text{数量} = 4400 – 34.78 \times \text{自店の価格} + 17.39 \times \text{相手の価格} \)上の3つの弾力性と出発点に合うように係数を決めた線形の式
売価の候補78円から198円まで10円刻み(末尾8円)共通データの売価の付け方に合わせた
期間と手番52週。両店とも毎週、先週の相手の価格を見て同時に今週の価格を決める競合の価格は1週遅れで分かる

共通データの需要は、価格の対数で書いた式(定弾力性の形)でした。この章では、需要の式を価格のまま書いた線形の形にしています。定弾力性の形のまま2社に広げると、相手の価格は自店の数量に「相手の価格の何乗」という掛け算で入るため、相手の価格がいくらであっても、自店の粗利を最大にする価格が変わらなくなります。相手の価格によって自店の最適な価格が動く、という競争の性質を見るには、線形の形のほうが都合がよいためです。需要の形で最適な価格がどれだけ変わるかは第4章で扱いました。

式の読み方を確かめておきます。両店が138円のとき、数量は \( 4400 – 34.78 \times 138 + 17.39 \times 138 \) で約2,000個です。表の係数34.78と17.39は小数第2位までに丸めた値で、丸めたまま計算すると2,000.18個になりますが、丸める前の係数(\( 2.4 \times 2000 \div 138 \) と \( 1.2 \times 2000 \div 138 \))で計算するとちょうど2,000個です。粗利は1店あたり \( (138 – 72) \times 2000 = 132000 \) 円です(後で示すコードの実行結果の最後の行)。自店だけが10円上げて148円にすると、自店の数量は約348個減ります。両店が一緒に10円上げると、自店の数量の減り方は約174個で、半分で済みます。この「半分」が、自社弾力性\( -2.4 \)と市場全体の弾力性\( -1.2 \)の比に当たります。

価格競争の基本、ベルトラン型の競争

競合どうしが価格を武器に競う状況を分析する基本の枠組みが、ベルトラン型の競争です。各社が同時に価格を決め、買い手はその価格を見て買う量を決める、という競争を指します。数量を決めて競うクールノー型の競争と対で、産業組織論の教科書で扱われます。花薗誠『産業組織とビジネスの経済学』(有斐閣、2018年)の第4章「寡占市場での企業競争」も、この2つを価格競争と数量競争として並べています。

最も単純なベルトラン型の競争は、2社がまったく同じ商品(同質財)を売り、買い手は少しでも安いほうから全部買い、各社には需要を全部満たせる供給力がある、という設定です。この設定では、相手より1円でも安くすれば市場全体を取れるので、相手の価格が原価より高い限り、少し下回ることが得になります。その結果、価格は原価(経済学の用語では、1個追加で売るのにかかる費用である限界費用)まで下がったところでしか止まりません。同書の版元が公開している練習問題の解答も、2社の限界費用が違う問題について、価格引き下げ競争がいずれかの限界費用に到達したところで止まる、という帰結を示しています。競合が2社しかいなくても、価格が原価まで下がるという結論です。

現実に価格が原価まで下がらない理由として、教科書が挙げるのは主に2つです。1つは供給力の制約で、相手の客を全部取れるほどの在庫や設備がなければ、少し下回って市場全体を取る作戦は成り立ちません。もう1つが製品差別化で、立地・品揃え・接客・ポイント制度などの違いがあれば、相手より少し高くても全部の客を失うことはありません。同書の版元の解答は、繁盛期でない長距離バス・格安航空路線・閑散期のホテルを、限界費用に近いところまで価格が下がっていると見られる例として挙げています。供給力に余裕があり、商品の違いが小さいときに、価格競争が厳しくなるということです。

この章の架空の2社モデルは、商品は同じでも、立地などの違いから一方が少し高くても客の全部は逃げない、という差別化のある設定です。各社が「相手の今の価格を所与として(動かないものとして受け取って)、自分の粗利を最大にする価格」を選び、両社とも相手の価格を見て選び直す理由がなくなった状態を、この章では「釣り合い」と呼びます。ゲーム理論の用語ではナッシュ均衡に当たります。線形の需要では、釣り合いの価格と、2社の粗利の合計を最大にする価格を、次の式で計算できます。

\( p^{*} = \dfrac{a + b\,c}{2b – g}, \qquad p^{J} = \dfrac{a + (b – g)\,c}{2(b – g)} \)

ここで \( a \) は需要の式の定数(4,400)、\( b \) は自店の価格の係数(34.78)、\( g \) は相手の価格の係数(17.39)、\( c \) は原価(72円)です。左の式が釣り合いの価格、右の式が2社の粗利の合計を最大にする価格で、言葉で言うと「相手の客を奪う効果(\( g \))を気にしなくてよい分だけ、合計を最大にする価格は高くなる」ということです。この2つの式で計算した値は、次のコードの後の表にまとめます。競合と相談して価格をそろえることは独占禁止法が禁じる不当な取引制限(言葉の意味は、この章の「アルゴリズムどうしの価格の反応をめぐる議論」の節で説明します)に当たりうるので、合計を最大にする価格は、釣り合いの価格がどれだけ低いかを測るための物差しとして使います。法令の扱いは第12章で扱います。

import sys, io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8")
# 架空の2社モデル:同じ商品(緑茶A 500ml を手本にした架空の品目)を、自店Aと競合Bが売る
# 線形の需要  q_i = a - b * p_i + g * p_j (i は自分、j は相手。週あたりの期待数量)
C, P0, Q0 = 72, 138, 2000      # 原価・両社の現在の売価・その価格での各社の週販数量(架空)
E_MKT = -1.2                   # 両社が一緒に1%上げたときの数量の変化率(架空)

def calib(e_own):
    """自社の弾力性 e_own(相手の価格は固定)と E_MKT に合うように a, b, g を決める"""
    b = -e_own * Q0 / P0
    g = (-e_own + E_MKT) * Q0 / P0       # 交差弾力性 = 自社弾力性の絶対値 - 市場全体の弾力性の絶対値
    a = Q0 + (b - g) * P0
    return a, b, g

def nash(a, b, g):        # 両社が相手の価格を所与として粗利を最大にした釣り合い(ベルトラン型)
    return (a + b * C) / (2 * b - g)

def joint(a, b, g):       # 2社の粗利の合計を最大にする価格(比較のための上限)
    return (a + (b - g) * C) / (2 * (b - g))

def profit(p, a, b, g):   # 両社が同じ価格 p のときの1社あたりの粗利
    return (p - C) * (a - (b - g) * p)

print("自社弾力性 交差弾力性  釣り合い価格  粗利/社   合計最大価格  粗利/社   釣り合い/合計最大")
for e in [-1.6, -2.4, -4.0, -8.0, -16.0, -40.0]:
    a, b, g = calib(e)
    pn, pj = nash(a, b, g), joint(a, b, g)
    print("%8.1f %9.2f %11.1f %10.0f %11.1f %10.0f %10.1f%%"
          % (e, g * P0 / Q0, pn, profit(pn, a, b, g), pj, profit(pj, a, b, g),
             100 * profit(pn, a, b, g) / profit(pj, a, b, g)))
a, b, g = calib(-2.4)
print("基準(自社弾力性-2.4): a=%.1f b=%.2f g=%.2f / 現在の売価138円の粗利/社 %.0f円"
      % (a, b, g, profit(P0, a, b, g)))
# 出力は次の表のとおり

このコードは、市場全体の弾力性を\( -1.2 \)に固定したまま、自社弾力性だけを\( -1.6 \)から\( -40 \)まで変えています。自社弾力性の絶対値が大きいほど、自店だけが値上げしたときに客が競合へ逃げやすい、つまり2店の差別化が小さいことを表します。自社弾力性が\( -40 \)の行は、ほとんど同質財の価格競争に近い状態です。実行した結果を表にまとめます。

自社弾力性交差弾力性釣り合いの価格釣り合いの粗利(1店・週)合計を最大にする価格合計最大のときの粗利(1店・週)釣り合いの粗利÷合計最大の粗利
\( -1.6 \)0.40149.6円139,532円162.5円142,439円98.0%
\( -2.4 \)(この章の基準の設定)1.20132.3円126,613円162.5円142,439円88.9%
\( -4.0 \)2.80113.8円101,140円162.5円142,439円71.0%
\( -8.0 \)6.8095.6円64,623円162.5円142,439円45.4%
\( -16.0 \)14.8084.6円36,977円162.5円142,439円26.0%
\( -40.0 \)38.8077.3円16,112円162.5円142,439円11.3%

表の「合計を最大にする価格」の列は、どの行も162.5円で変わりません。両店が一緒に動くときの数量の減り方(市場全体の弾力性)を固定しているので、2店を1つの店と見なしたときの最適な価格は差別化の度合いによらないためです。一方、「釣り合いの価格」の列は、差別化が小さくなる(自社弾力性の絶対値が大きくなる)ほど下がり、自社弾力性が\( -40 \)の行では77.3円と、原価72円の近くまで下がっています。同質財どうしの価格競争の帰結(価格が原価まで下がる)に近づいているということです。

この章の基準の設定(自社弾力性\( -2.4 \))では、釣り合いの価格は132.3円で、出発点の138円より低い値です。両店が138円のときの粗利は1店あたり132,000円で、釣り合いの粗利126,613円より高くなっています。つまり出発点の138円は、両店がともに相手の客を少しずつ奪おうとすると崩れうる状態です。ただし、売価が10円刻みに限られていると話が変わります。この章の売価の候補で、相手の価格ごとに、その価格を所与として自店の粗利を最大にする価格を計算すると(後の節のシミュレーションの実行結果の冒頭。この価格を後の節では「最適応答」と呼びます)、相手が138円なら自店も138円、相手が128円なら自店も128円が、それぞれ粗利を最大にする価格でした。10円刻みの候補の中では、両店138円と両店128円の2つが、どちらも釣り合いになっています。売価を10円刻みに限るという価格の刻み方そのものが、価格競争の落ち着き先を変えるということです。

差別化が粗利を守る

前の節の表を、差別化の度合いという見方で読み直します。表は、上の行ほど2店の差別化が大きく(自社弾力性の絶対値が小さく)、下の行ほど差別化が小さい状態を表しています。

右端の列「釣り合いの粗利÷合計最大の粗利」から読み取れるのは、差別化が粗利に与える効果が大きいことです。この架空の設定では、自社弾力性が\( -1.6 \)なら、両店が相手の客を奪い合っても粗利は合計最大の98.0%残りますが、\( -8.0 \)では45.4%、\( -40.0 \)では11.3%しか残りません。両店に来る客の総数の反応(市場全体の弾力性\( -1.2 \))は同じでも、客が店を乗り換えやすいかどうかだけで、価格競争の結果として残る粗利が大きく変わります。

ここから、価格の判断と、価格以外の判断がつながっていることが分かります。自社弾力性は、価格の担当者が決められる値ではなく、品揃え・立地・接客・ポイント制度・会員の囲い込みといった、価格以外の要素で決まる値です。同じ商品を売る店どうしでは、商品そのもので差別化できないので、こうした要素の違いが自社弾力性の大きさを左右します。プライベートブランド(PB)は、他の店では買えない商品を持つことで、価格を直接比べられる範囲を狭める手段の1つと見ることができます。第2章の共通データの PB は、同じ店の中で NB より安い価格帯を担う品目として置いていますが、店どうしの競争から見ると、PB には「比べられない商品」という別の役割もあります。

経営の言葉にすると、価格競争が厳しい商品ほど、釣り合いで残る粗利が小さくなり、価格の付け方だけで守れる粗利には限りがある、ということです。差別化への投資が割に合うかどうかは、その投資の額と、差別化で残る粗利の増え方を比べて決めることになり、この章の計算はそこまでは示していません。どの商品が「客が価格を比べて店を選ぶ商品」で、どの商品が「店を選んだあとで買う商品」かを分けて考えると、競合への対応の優先順位を付けやすくなります。前者は、競合の価格を見て価格を決める必要がある商品で、後者は、第4章・第5章の方法で自店の需要だけを見て価格を決めてもよい商品です。この区別を付けるための測り方は、後の節の競合価格データの使い方で扱います。

競合に合わせる規則を比べる

理論の釣り合いは「両社が同時に、相手の価格を所与として最適な価格を選んだら」という状態です。実際の価格改定は、毎週決まった規則で行われることが多く、競合の価格に合わせる規則もいくつかの型があります。この節では、自店が使う規則を4つ、競合が使う規則を5つ用意し、架空の2社モデルで52週を動かして比べました。自店の規則は次の4つです。

  • 無視:競合の価格を見ず、138円を保つ
  • 一律追随:先週の競合の価格に、そのまま合わせる
  • 一部追随:先週の競合の価格に合わせるが、118円から138円の幅の外には出ない(下げは118円まで、上げは138円まで)
  • 最適応答:先週の競合の価格を所与として、需要の式から自店の粗利を最大にする価格を選ぶ

4つ目の最適応答は、需要の式(この章では真の式)を知っていて、相手の今の価格に対して最も得な価格を選ぶ規則です。相手の価格を所与とするので、自分が価格を変えたら相手がどう反応するかは考えません。競合の規則は、138円を保つ「固定」、自店の先週の価格より10円安くする「10円下回る」(下限88円)、自店の先週の価格に合わせる「追随」、自店と同じ考え方の「最適応答」、そして138円から108円へ恒久的に下げた「恒久的に108円」の5つです。どの組み合わせでも、競合は第1週に1週間だけ108円の特売を行い、第2週からそれぞれの規則に戻ります。ただし「恒久的に108円」の規則では、戻る先の規則そのものが108円なので、競合の価格は第2週以降も108円のままです。チラシの特売のような、一時的な競合の値下げが起きたあとに何が起きるかを見るためです。シミュレーションのコードの要所は次のとおりです(プログラムの全体から、結果を出力する部分を除いて抜き出したものです)。

import sys, io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8")
import numpy as np
# 架空の2社モデル(前のコードと同じ。自社弾力性 -2.4、市場全体 -1.2 の需要 q = a - b*p + g*相手の価格)
C, P0 = 72, 138
A_, B_, G_ = 4400.0, 2.4 * 2000 / 138, 1.2 * 2000 / 138
GRID = np.arange(78, 199, 10)             # 売価の候補(78円から198円、末尾8円)

def qty(p, q):                            # 自分の価格 p・相手の価格 q のときの週販数量
    return max(0.0, A_ - B_ * p + G_ * q)

def best(q):                              # 相手の価格 q を所与とした粗利最大の価格(候補から選ぶ)
    return int(GRID[np.argmax([(p - C) * qty(p, q) for p in GRID])])

RULES = {                                 # 先週の自分の価格 me・相手の価格 rv から今週の価格を決める
    "無視":        lambda me, rv: P0,
    "一律追随":    lambda me, rv: rv,
    "一部追随":    lambda me, rv: int(min(max(rv, 118), P0)),   # 118円から138円の幅で合わせる
    "最適応答":    lambda me, rv: best(rv),
}
RIVALS = {
    "固定":        lambda me, rv: P0,
    "10円下回る":  lambda me, rv: int(max(rv - 10, 88)),        # 下限88円
    "追随":        lambda me, rv: rv,
    "最適応答":    lambda me, rv: best(rv),
    "恒久的に108円": lambda me, rv: 108,
}

def run(rule, rival, weeks=52, sale=108):
    pa, pb, path = P0, P0, []
    for t in range(weeks):
        pa, pb = rule(pa, pb), rival(pb, pa)        # 両社とも先週の相手の価格を見て同時に決める
        if t == 0:
            pb = sale                               # 競合は第1週だけ特売(その後は規則どおり)
        path.append((pa, pb, (pa - C) * qty(pa, pb), (pb - C) * qty(pb, pa)))
    return np.array(path)

規則は「先週の自分の価格と相手の価格を受け取り、今週の価格を返す関数」として書いています。run の中の1行で、両店が同時に、先週の相手の価格を見て今週の価格を決めます。競合の規則には、引数を自分から見た順(自分の価格、相手の価格)で渡しています。結果のうち、自店の52週の平均の粗利(1週あたり)を、組み合わせごとに並べたのが次の表です。比べる相手は、特売がなく両店が138円のままの場合の132,000円です。

自店の規則競合が固定競合が10円下回る競合が追随競合が最適応答競合が恒久的に108円
無視131,338円120,080円131,338円131,338円97,565円
一律追随130,906円51,438円103,565円125,137円90,913円
一部追随131,184円100,458円116,301円125,415円99,953円
最適応答131,328円111,910円125,559円125,559円102,171円

表の値は、どれも自店の粗利の1週あたりの平均です。列ごとに最も高い値を見ると、競合が「固定」「10円下回る」「追随」「最適応答」の4つの列では、自店の規則が「無視」の行が最も高く、競合が「恒久的に108円」の列だけは「最適応答」の行が最も高くなっています。この結果は、この架空の設定に強く依存しています。1つは、出発点の138円がすでに10円刻みの釣り合いになっていることです。もう1つは、規則の外から与えた競合の値下げが、最後の列を除いて第1週の1回の特売だけであることです。第2週以降の競合の価格は、それぞれの規則に従って動きます。たとえば「10円下回る」の列では、競合は第2週以降も自店の先週の価格より10円安い価格(下限は88円)を付け続け、「追随」「最適応答」の列では自店の先週の価格に応じて価格を変えます。こうした設定に依存した結果ではありますが、規則の性質の違いは一般的な形で読み取れます。以下、組み合わせごとに中身を見ます。

架空の2社モデルで、競合が第1週に108円の特売をしたあとの第1週から第20週までの価格の推移を4つの組み合わせで描いた図。自店の一律追随と競合の10円下回るの組では、両店が交互に値下げして第10週ごろに88円で止まる。自店の一部追随では118円で止まり、競合は108円になる。自店の無視では自店は138円のまま、競合は128円で止まる。両店が最適応答の組では、128円と138円を毎週入れ替える

図の左上は、自店が一律追随、競合が10円下回る規則の組です。自店の価格は第1週から138円、108円、128円、98円、118円、88円と動き、競合は108円、128円、98円、118円、88円と、互いに1週遅れで相手の価格を追いかけ、上下しながら下がっていきます。第10週には両店とも88円になり、そこから動かなくなりました。88円は競合の規則の下限で、粗利は1個あたり16円です。52週の平均の粗利は自店51,438円、競合51,154円で、両店とも、138円のままの132,000円の4割程度に落ちています。52週で合計すると、自店の粗利は、特売がなく両店が138円のままだった場合(週132,000円の52週分)より4,189,217円少なくなります。これが、価格戦争が粗利を削る仕組みの最も単純な形です。どちらの店も「相手に合わせる」「相手より少し安くする」という、一見もっともな規則を使っているだけですが、2つの規則が組み合わさると、どちらかの下限に当たるまで価格が下がり続けます。

右上の一部追随では、自店は118円の下限で止まり、競合はそれより10円安い108円で止まりました。自店の平均の粗利は100,458円です。下げに下限を付けたことで価格戦争は途中で止まりましたが、競合に10円下回られた状態が続きます。左下の無視では、自店は138円のまま動かず、競合は第2週から128円で止まりました。自店の平均の粗利は120,080円で、表の「競合が10円下回る」の列では最も高い値です。自店が動かなければ、競合の「10円下回る」規則は自店の138円から10円下の128円で落ち着き、それ以上は下がりません。下回る相手に追随すると、相手の規則が再び発動して、さらに下がるということです。

「競合が10円下回る」の列でもう1つ目を引くのは、自店の最適応答の行(111,910円)が無視の行(120,080円)より低いことです。最適応答は、先週の競合の価格を所与として自店の粗利を最大にする価格を選びます。競合が128円なら自店は128円を選びますが、すると競合はさらに10円下げて118円にします。自店の最適応答は118円に対しても128円なので、最後は自店128円・競合118円で止まりました。1週ごとに見れば最も得な価格を選んでいるのに、相手が自分の価格に反応することを考えに入れていないので、52週を通すと、何もしない規則より粗利が少なくなっています。

反応し合う規則どうしでは、別の現象も起きました。図の右下は、両店とも最適応答を使う組です。理論の釣り合いの考え方からすると、両店とも最適応答を使えば釣り合いに落ち着きそうに見えます。ところが実際には、自店の価格は138円、128円、138円、128円と、毎週入れ替わり続けました(第1週から第12週までの推移を実行結果で確かめました)。競合はその逆で、自店が128円の週に138円、138円の週に128円を付けています。自店の価格改定は52週で51回、平均の粗利は125,559円でした。

原因は手番の作り方にあります。両店とも「先週の相手の価格」を見て同時に決めるので、第1週の競合の特売108円に対して自店は第2週に128円を選び、同じ第2週に競合は自店の第1週の138円に対して138円を選びます。第3週には、自店は競合の138円を見て138円に、競合は自店の128円を見て128円にします。こうして、両店とも1週前の相手を追いかけるので、2つの釣り合い(両店138円、両店128円)のどちらにも落ち着かず、互い違いに入れ替わり続けます。自店が一律追随、競合が追随の組(表の103,565円)でも同じことが起き、両店が138円と108円を毎週入れ替える形になりました。2つの店がどちらも相手に合わせる規則を使い、同時に改定すると、どちらか一方の一時的な特売が、いつまでも消えない振動として残ることがあるということです。

この振動は、改定のタイミングを両店がそろえて同時に動かすという、この章の手番の置き方から生まれたものです。現実には、改定の曜日や時刻、相手の価格を調べる頻度が店ごとに違うので、同じ形の振動がそのまま起きるとは限りません。ただし、規則どうしの組み合わせが、それぞれの規則を単独で見たときには予想しにくい動きを作ることは、規則を自動で動かす前にシミュレーションで確かめておく理由になります。価格の改定回数は、それ自体が棚札の付け替えや売場の作業の費用を生み、客から見た価格の分かりやすさにも影響します。第9章で、価格の改定回数に制約を入れたときの損失を扱いました。競合に反応する規則では、改定回数の上限や、同じ価格を最低何週続けるかといった条件を、規則の側に入れておくことが有効だと考えています。

一時的な値下げか、恒久的な値下げか

表の最後の列「競合が恒久的に108円」では、結果が逆になります。競合が138円から108円に下げて戻さない場合、無視の行の自店の平均の粗利は97,565円で、最適応答の行の102,171円より低くなりました。競合が108円のとき、自店の最適応答は128円です(相手の価格ごとの最適応答を計算した実行結果で、相手108円に対して128円、そのときの粗利102,261円)。競合の値下げが恒久的なら、自店は138円を保つより128円に下げたほうが得で、ただし108円まで合わせる必要はありません。一律追随の行は90,913円で、4つの規則の中で最も低くなっています。

つまり、競合の値下げに対する最もよい対応は、その値下げが一時的な特売なのか、競合の価格の水準そのものが変わったのか、競合がこちらの値下げにさらに値下げで返してくる相手なのかによって変わります。一時的な特売や、下回ることを規則にしている相手に対しては、追随しないほうが粗利を守れます。恒久的な値下げに対しては、需要の式にもとづいて部分的に下げることが有効です。どの場合も、「競合と同じ価格にそろえる」ことは、この架空の設定では最も粗利の少ない選択肢の1つでした。

一部追随の下限をどこに置くかも、同じ考え方で決められます。競合が10円下回る規則のとき、一部追随の下限を88円から138円まで10円ずつ変えた結果が次の表です。

一部追随の下限自店の平均価格自店の粗利(1週の平均)競合の粗利(1週の平均)最終週の価格(自店、競合)
88円91.5円51,438円51,154円88円、88円
98円100.1円68,545円53,662円98円、88円
108円109.2円85,793円76,873円108円、98円
118円118.6円100,458円97,903円118円、108円
128円128.2円111,910円115,987円128円、118円
138円138.0円120,080円131,057円138円、128円

表の「自店の粗利」の列は、下限を上げるほど増えています。下限88円は、競合の下限と同じなので一律追随と同じ結果になり、下限138円は無視と同じ結果になります。下限を10円上げるごとに、自店の粗利は1週あたり約8千円から約1万7千円ずつ増えました。下限は、追随の規則が価格戦争に巻き込まれたときに、どこで止まるかを決める値です。第13章で扱う価格のガードレール(上げ幅・下げ幅・粗利率の下限)のうち、競合への追随に付ける下限は、この表のように「相手がどんな規則でも、ここより下には行かない」値として、粗利の見込みとあわせて決めておく必要があります。

値上げは相手の反応で決まる

ここまでは競合の値下げへの対応を見てきました。逆に、自店が値上げしたいときにも、競合の反応が結果を決めます。この節では、自店が第5週と第6週に158円へ値上げし、第7週以降は「競合の先週の価格が158円以上なら158円を保ち、そうでなければ138円に戻して二度と試さない」という規則で動かしてみました。この試行では、競合の特売は入れていません。結果は次のとおりです。

競合の規則自店の平均価格自店の粗利(1週の平均)競合の粗利(1週の平均)最終週の価格(自店、競合)
固定138.8円131,237円132,883円138円、138円
10円下回る138.8円120,642円132,134円138円、128円
追随156.5円140,736円141,559円158円、158円
最適応答138.8円131,237円132,883円138円、138円
恒久的に108円138.8円96,401円110,047円138円、108円

値上げが定着したのは、競合が追随する場合だけでした。両店が158円のときの粗利は1店あたり142,087円で、両店138円のときの132,000円より約1万円多くなります。競合が追随する相手なら、自店の値上げは市場全体の弾力性(\( -1.2 \))で効くので、数量の減り方は競合が動かないときより小さくなります。この需要の式で計算すると、両店が158円のときの自店の数量は1,652.2個で、両店138円の2,000個から17.4%減ります。競合が138円のまま自店だけが158円にした場合は1,304.3個で、34.8%減ります。減り方は半分ですが、値上げした分の数量は確かに減っています。競合が最適応答を使う場合は、値上げは定着しません。相手の価格ごとの最適応答を計算した実行結果では、相手が158円のときの自店の最適応答は138円で、そのときの粗利は154,957円です。つまり、相手が値上げしたら、自分は据え置いて相手の客を取るのが、1週だけを見れば最も得です。両店とも158円のほうが両店とも138円より粗利が多いのに、どちらも自分だけ据え置く誘惑があるので、相談なしには高い価格にそろいにくい、というのがこの節の結果の意味です。

経営の判断に置き換えると、原価が上がって値上げが必要なときに、その値上げで数量がどれだけ減るかは、自店の需要だけでなく、競合が追随するかどうかで決まります。第4章で扱った原価上昇の転嫁の計算は、競合の価格を固定した自社弾力性で行えば「競合が追随しない場合」の答えになり、市場全体の弾力性で行えば「競合も同じだけ上げる場合」の答えになります。原価の上昇が業界全体に共通のもの(原材料や物流費の上昇など)であれば、競合も同じ圧力を受けているので、後者に近づくと考えることもできます。どちらの前提を置いたかを、値上げの判断の資料に明記しておくことが大切です。

注意しておきたいのは、ここでの「競合が追随するなら値上げが定着する」という結果は、競合が独立に判断した結果として追随する場合の話だということです。競合と連絡を取り合って値上げをそろえることは、独占禁止法が禁じる不当な取引制限に当たりえます。法令の扱いは第12章で扱います。

アルゴリズムどうしの価格の反応をめぐる議論

価格の調査と改定を自動で行うソフトウェアが広がるにつれて、アルゴリズムどうしの反応が価格をどう動かすかが、競争政策の論点になっています。公正取引委員会の「デジタル市場における競争政策に関する研究会」は、2021年3月31日に報告書「アルゴリズム/AIと競争政策」を公表しました(公正取引委員会の報道発表)。報告書は、事業者が競争事業者の販売価格を把握するための価格調査のアルゴリズムと、価格設定のアルゴリズムを検討の対象とし、価格自動更新ツールの使い方の例として、収集した競争事業者の価格のうち最安値に合わせた価格設定を自動で行う形を挙げています。この章の「一律追随」の規則は、これを1社の相手に単純化したものに当たります。

報告書は、こうしたアルゴリズムが一般には価格競争を活発にすると考えられる一方で、利用の態様によっては競争事業者間の協調的な価格設定につながりうる、と整理しています。理由として挙げているのは、市場の透明性が上がり、事業者間の相互作用の頻度が増えることで、合意からの逸脱を見つけることや、逸脱した相手にすぐ対抗することが容易になる点です。そのうえで、経済協力開発機構(OECD)の2017年の報告書の分類にならい、アルゴリズムによる協調的行為を、「監視型アルゴリズムを利用した協調的行為」「アルゴリズムの並行利用による協調的行為」「シグナリングアルゴリズムを利用した協調的行為」「自己学習アルゴリズムによる協調的行為」の4つの類型に分けて検討しています。2つ目の並行利用の類型は、競争事業者以外の第三者が関わるかどうかで、さらに2つに分けられています。1つは、価格カルテルなどの合意に従って価格を付けるように設定したアルゴリズムを、合意した事業者どうしが使う場合です。もう1つは、複数の競争事業者が同じ第三者(価格設定アルゴリズムの販売事業者など)が提供するアルゴリズムを使うことで価格が同調する場合で、報告書はこれを、その第三者を中心(ハブ)として価格が同調することから「ハブアンドスポーク型」と呼んでいます。報告書の概要資料は、アルゴリズムの協調的行為は「基本的に現在の独占禁止法により対応可能な場合が多い」とし、自己学習アルゴリズムによるものについては技術の変化や利用動向、関連事例を今後も注視していく必要がある、としています。協調的行為に当たる行為のうち、どのようなものが独占禁止法の規制の対象になるかについての報告書の整理は、この節の後の段落で紹介します。

次の表は、報告書の4類型の整理を紹介し、この章のモデルの作りと並べたものです。2列目は報告書の整理の要点です。3列目は、この章のモデルにその類型の要素を置いているかどうかを比べたもので、独占禁止法上の問題になるかどうかを示すものではありません。モデルに置いていない要素があることは、同じことを現実に行った場合に問題がないことを意味しません。

類型(報告書の分類)報告書の整理の要点この章のモデルの作りとの比較(法的な評価ではない)
監視型アルゴリズムを利用した協調的行為価格カルテルなどの合意がある場合に、その実効性を確保するために、競争事業者の価格を集め、逸脱に報復するのに使われる報告書の整理では合意があることを前提にした類型。この章のモデルには合意を置いていない
アルゴリズムの並行利用による協調的行為アルゴリズムが競争事業者間の価格を同調させる役割を果たす。合意に従って価格を付けるアルゴリズムを合意した事業者どうしが使う場合と、同じ第三者が提供するアルゴリズムを複数の競争事業者が使うことで価格が同調する場合(ハブアンドスポーク型)がある両店が同じ規則を使う組(例:両店とも最適応答)は形が似ている。この章のモデルには、合意と、アルゴリズムを提供する第三者を置いていない
シグナリングアルゴリズムを利用した協調的行為シグナル(値上げの意向などを示す価格情報)を発信し、それへの競争事業者の反応をアルゴリズムで確かめるこの章の「値上げの試行」は、相手の反応を見て値上げを保つか戻すかを決める点で、報告書が説明する仕組みと一部が重なる
自己学習アルゴリズムによる協調的行為各社が機械学習で価格を決めた結果、互いに競争的な価格を上回る価格に至る可能性が懸念されている。報告書の時点で具体的事例は国内外で確認されていないこの章のモデルの規則は学習をしない

4つ目の類型について報告書が引いている経済分析の1つが、カルヴァーノらの論文(American Economic Review、2020年、第110巻第10号)です。論文の要旨は、強化学習の一種であるQ学習で価格を決めるアルゴリズムを、繰り返し価格を競う寡占のモデルの中で実験的に動かしたところ、アルゴリズムは互いに通信することなく、一貫して競争的な水準を上回る価格を付けることを学んだ、と述べています。高い価格は、一定期間の報復のあとに徐々に協調へ戻る戦略によって保たれていた、とも書かれています(American Economic Association の論文ページ)。一方、公正取引委員会の報告書は、強化学習を用いた価格設定ツールについて、需要と比例しない価格の暴騰・暴落が起こりうること、訓練の環境を用意するのが難しいこと、膨大なデータが要ることから、報告書が公表された2021年3月の時点では実際のビジネスで活用されている実績はほぼないと考えられている、と記しています。研究の結果と、現場での普及の状況は分けて読む必要があります。

この章のシミュレーションとの関係を整理しておきます。この章の規則はどれも学習をしない単純なものですが、「値上げの試行」で、競合が追随する相手なら、連絡を取らなくても両店が158円にそろいました。報告書は、アルゴリズムによる協調的行為を検討する第2部第1の冒頭の注で、報告書でいう「協調的行為」には、明示的な合意によって価格を同調させる行為だけでなく、事業者が競争事業者の価格引上げなどを観察し、独立の判断で価格を同調させる結果、互いの価格が競争的な価格を上回るような行為も含む、と断っています。後者が「意識的並行行為」です。そのうえで報告書は、事業者間にコンタクトがなく、それぞれが独立して価格を決めた結果として同じ価格水準に至る意識的並行行為は、不当な取引制限による規制の対象とはされていない、と整理しています。一方で、明示的な合意が認められなくても、各事業者による独立の価格設定とは評価できないような場合には、並行的な値上げという外形的な事実などから「黙示による意思の連絡」が推認されることがある、とも記しています。

不当な取引制限は、事業者が他の事業者と共同して価格を決めるなどして互いの事業活動を拘束し、競争を実質的に制限することで、独占禁止法が禁じています。「共同して」に当たるには事業者どうしの意思の連絡(価格をそろえることについての認識の一致)が要り、黙示による意思の連絡は、文書や言葉による明示の取り決めによらない認識の一致を指します。推認は、直接の証拠がなくても、周りの事実から、そうした認識の一致があったと判断することです。つまり、協調的行為として議論の対象に入ることと、独占禁止法上の問題になることは別で、その境目がどこにあるかの詳しい扱いは、報告書の該当部分と第12章で扱います。ここでは報告書の整理を紹介しているだけで、本記事は法律の助言ではありません。個別の判断は専門家に確認する必要があります。実務の側で押さえておきたいのは、価格を自動で決める規則を作るときには、その規則が競合の規則と組み合わさったときにどう動くかを、粗利の面だけでなく、規則どうしの反応が価格の同調につながらないかという、この節で見た報告書の論点の面からも確かめておく必要があるということです。

競合価格データの集め方と使い方

ここまでの分析は、競合の価格が毎週正しく分かることを前提にしていました。実務では、競合の価格をどう集めるかが、分析の質を大きく左右します。集め方の代表的なものは、店頭での目視の調査、チラシの記録、通販サイトの価格の収集、外部の調査会社やデータ提供会社のデータの購入です。どの方法で集めるかは、その方法が法令や相手のサイトの利用規約に触れないかを含めて判断する必要があります。収集の方法そのものの法的な注意は、章の冒頭で述べたとおり、このコラムでは扱いません。収集を始める前に相手のサイトの利用規約を確かめ、判断に迷う点は専門家に相談してください。集めた価格を表示に使うときの条件と、価格設定アルゴリズムの競争法上の扱いは第12章で扱います。この節では、集めたデータを価格の判断に使うときの、データの側の注意点を整理します。

注意点何が起きるか対処の考え方
商品の照合容量・入数・味の違う商品を同じ商品として比べると、価格差を取り違えるJANコードなどの商品コードで照合し、照合できない商品は容量あたりの価格で比べる
調べる頻度週1回の調査では、週の途中の特売や時間限定の値引きを見落とす商品ごとに、客が価格を比べて店を選ぶ商品かどうかで頻度を分ける
表示価格と実際の支払額ポイント還元・会員価格・まとめ買いの値引きは、棚の価格に表れない集めた価格が何を表しているかを項目として記録しておく
一時的な値下げと恒久的な値下げの区別特売を価格の水準の変化と取り違えて追随すると、この章で見たように粗利を失う同じ価格が何週続いたかを記録し、追随の判断に使う
欠損品切れ・取扱いの終了・調査漏れで価格が抜ける欠損を前の値で埋めるかどうかを決めておき、埋めたことを記録する
影響の大きさの推定競合の価格が自店の数量にどれだけ効くかが分からないと、追随の要否が決められない競合の価格を説明変数に加えた回帰で交差弾力性を推定する

表の最後の行は、第3章の需要の推定に、競合の価格を説明変数として加えることを指しています。第3章の log-log 回帰に「競合の価格の log」を足せば、その係数が、競合の価格が1%上がったときに自店の数量が何%変わるかという交差弾力性の推定値になります。ここで注意が要るのは、第3章で扱った内生性の問題が、競合の価格では二重に起きることです。競合も需要の季節の山を見て価格を決めているかもしれず、自店の価格を見て価格を変えているかもしれません。季節や販促を回帰に入れることは自店の価格のときと同じで、競合の価格が自店の価格に反応して動いている場合には、推定された係数に「自店の価格の効果」の一部が混ざります。推定の考え方の詳細は、弊社コラム『施策の効果を正しく測る、因果推論と効果検証の進め方』で扱っています。

交差弾力性の推定値は、前の節で触れた「客が価格を比べて店を選ぶ商品」と「店を選んだあとで買う商品」を分けるのにも使えます。競合の価格に対する交差弾力性が大きい商品は前者で、競合の価格を見て価格を決める必要があります。小さい商品は後者で、競合の価格に合わせる必要は小さく、第4章・第5章の方法で自店の需要にもとづいて価格を決められます。競合の価格を全商品について同じ頻度で集めるのは費用がかかるので、交差弾力性の推定値で商品を分け、前者の商品に調査の手間を集中させることが有効だと考えています。

もう1つの使い方が、競合の反応の記録です。この章で見たとおり、最もよい対応は、競合がどんな規則で価格を動かしているかで変わります。自店が価格を変えたあと、競合が何週後に、どれだけ価格を動かしたかを記録しておけば、競合の反応の型(追随する・下回る・動かない)を過去の記録から読み取れます。競合の規則を推測で決めつけるのではなく、記録から確かめたうえで、この章のようなシミュレーションに入れて、自店の規則を選ぶのが筋だと考えています。

ここまでの内容を、競合の価格に対応する判断の順序としてまとめると、次の4段になります。

  1. 競合価格の収集:交差弾力性の推定値で、競合の価格を見て価格を決める必要がある商品を分け、そこに調査の手間を集中させる。商品を照合したうえで価格を集め、同じ価格が何週続いたかと、自店の価格変更に競合がどう反応したかもあわせて記録する
  2. 値下げの見極め:競合の値下げが、一時的な特売なのか、恒久的な値下げなのか、こちらを下回ることを規則にしている相手によるものなのかを見分ける
  3. 対応の規則:見極めの結果にもとづいて、追随しない・需要の式にもとづいて部分的に下げる、といった規則を選ぶ
  4. 下限と改定回数の確認:選んだ規則に、下げの下限と改定回数の上限が入っているかを確かめる

経営の判断に翻訳する

この章の結果を、経営の判断に使える形に整理します。1つ目は、競合の価格への対応を、規則として明文化することです。この架空の設定では、同じ競合の行動に対して、自店の規則の違いだけで、52週の粗利に大きな差が出ました。競合が10円下回る規則の場合、自店が一律追随なら1週あたりの平均の粗利は51,438円、無視なら120,080円で、52週の合計では、競合の特売がなく両店が138円のままだった場合(週132,000円の52週分)と比べた減少が、それぞれ4,189,217円と619,826円です。担当者がその場の判断で競合に合わせていると、会社として意図しない規則が、毎週の売価に黙って組み込まれます。

2つ目は、規則を選ぶ前に、競合の値下げの性質を見極めることです。一時的な特売や、こちらを下回ることを規則にしている相手に追随すると、価格戦争に入ります。恒久的な値下げに対しては、需要の式にもとづいて部分的に下げるのが、この架空の設定では最も粗利を守る対応でした。そのためには、競合の価格を集めるだけでなく、同じ価格が何週続いたか、自店の価格変更に競合がどう反応したかを記録しておく必要があります。

3つ目は、判断を誤ったときの損失の型です。競合に過剰に反応すると、価格戦争で粗利の原資を失い、改定回数が増えて売場の作業も増えます。この章の一律追随と追随の組では、自店の価格改定は52週で51回でした。反対に、競合が恒久的に価格の水準を下げたのに反応しないと、客数と数量を失い続けます。この架空の設定では、恒久的に108円の競合に対して、無視の97,565円と最適応答の102,171円の差は1週あたり4,606円で、気づくのが遅れるほど損失が積み上がります。どちらの損失も、価格の担当者の判断の良し悪しではなく、競合への対応を規則として持っているか、その規則を競合の行動の記録で見直しているかで決まります。

4つ目は、価格競争が厳しい商品では、差別化の度合いが粗利を大きく左右することです。この架空の設定では、両店に来る客の反応が同じでも、客が店を乗り換えやすくなるだけで、釣り合いの粗利は合計最大の98.0%から11.3%まで下がりました。どの商品で価格競争をし、どの商品で価格以外の価値を作るかは、価格の担当者だけでは決められない、売場・品揃え・販促を含めた判断です。

この章の要点は3つです。第一に、競合が価格に反応する市場では、自店の値上げや値下げの効果は、相手の価格を固定した自社弾力性と、両店が一緒に動く市場全体の弾力性の間のどこかに来ます。ベルトラン型の競争で見たとおり、差別化が小さいほど、価格競争の釣り合いは原価に近づき、粗利が削られます。第二に、競合に合わせる規則は、相手の規則との組み合わせで結果が決まり、相手を下回る規則に一律に追随すると価格戦争になり、両店が相手に反応する規則を同時に使うと振動が起きることがあります。下限や改定回数の上限を規則に入れ、競合の値下げが一時的か恒久的かを記録で見極めることが粗利を守ります。第三に、アルゴリズムどうしの価格の反応は、公正取引委員会の報告書でも論点として整理されており、価格を自動で決める規則は、粗利の面と競争政策の面の両方から確かめておく必要があります。次の第12章では、景品表示法・独占禁止法・消費税の総額表示など、価格に関わる法令と、価格に対する顧客の公平感を扱います。

この章を深めたい方への参考書籍

『産業組織とビジネスの経済学』(花薗誠、有斐閣):有斐閣ストゥディアの1冊で、寡占市場での企業競争を価格競争と数量競争に分けて説明する章、製品差別化・広告・スイッチング・コストを競争を緩める非価格戦略として扱う章、談合・カルテルの章を置いています。この章で扱ったベルトラン型の競争と、差別化が価格競争を和らげることを、教科書の順序で確かめるのに向いています。

『産業組織論 理論・戦略・政策を学ぶ』(小田切宏之、有斐閣):寡占での企業間の相互作用、価格戦略の多様性、製品差別化と参入の戦略、カルテルがいつ起き、なぜ持続するかを、それぞれ章を立てて扱う本です。この章の「値上げは相手の反応で決まる」で見た現象や、規則どうしが反応し合って起きた価格戦争と振動を、理論・戦略・政策の3つの面から読み直せます。

『ゲーム理論』第3版(岡田章、有斐閣):戦略形ゲーム・展開形ゲームから繰り返しゲーム・進化ゲームまでを扱うゲーム理論の教科書です。この章で「釣り合い」と呼んだ状態を扱う戦略形ゲームの考え方と、同じ相手と何度も価格を競うときに協調が保たれる仕組み(繰り返しゲーム)を、数理の面から学ぶのに役立ちます。

第12章 法規制・公平性・顧客の受け止め

第11章では、競合の価格が自店の需要に入る場合の価格の決め方と、価格競争が粗利を削る仕組みを扱いました。そこまでの章は、需要の式と原価と価格の並びの制約から、粗利が最大になる価格を計算する方法でした。しかし実際に売場やECサイトに出す価格には、計算の外側にもう1組の条件がかかっています。価格をどう表示してよいか、原価を下回る価格で売り続けてよいか、取引先の販売価格に口を出してよいか、税込の価格をどう示すか、といった法令の条件と、その価格を顧客が納得するかどうかという受け止めの条件です。この章では、景品表示法・独占禁止法・消費税法の総額表示の規定を、e-Gov 法令検索・消費者庁・公正取引委員会・国税庁のページで条文とガイドラインの記述まで確かめ、原則と例外の条件を表に整理します。あわせて、アルゴリズムによる価格設定をめぐる公正取引委員会の報告書の整理、価格の公平感についての研究、顧客ごとに価格を変えることへの懸念を、開いて確かめた一次情報の範囲で紹介します。最後に、第2章で用意したサンプルデータの販売履歴を使い、販促週に通常売価を「当店通常価格」として併記できたかどうかを、ガイドラインの目安で点検した結果を示します。

最初にお断りしておきます。この章は、価格の数理モデルを使う側が知っておくべき法令の条件を、モデルのどこに効くかという観点で整理したものであり、法律の助言ではありません。条文は2026年10月2日に e-Gov 法令検索で取得した現行の版を、ガイドラインは同日に各官庁のページから取得した版を引用しています。個々の表示や取引が法令に反するかどうかは、ガイドライン自身が書いているとおり個別の事案ごとに判断されるもので、業種・商品・表示の媒体・取引の形によって変わります。実際の運用では、自社の表示と取引の現物を前にして、弁護士などの専門家や所管の官庁の相談窓口に確認してください。

価格の判断にかかる法令の地図

価格を最適化するモデルにとって、法令は3つの形で効いてきます。1つ目は表示の形で、景品表示法と消費税法がこれに当たります。景品表示法は、販売価格を実際より有利に見せる表示を禁止しており、特に通常の価格と並べて値引き後の価格を示す表示(二重価格表示)には、比較に使う価格の条件がガイドラインで細かく示されています。消費税法は、消費者に対してあらかじめ価格を示すときに税込の価格を表示することを求めています。2つ目は価格の水準の形で、独占禁止法の不当廉売がこれに当たります。供給に要する費用を著しく下回る価格で継続して売り、他の事業者の事業活動を困難にさせるおそれがある場合に問題になります。3つ目は価格を決める主体の形で、独占禁止法の再販売価格の拘束(メーカーなどが小売店の販売価格を決めて守らせること)と、競争事業者どうしで価格をそろえる不当な取引制限がこれに当たります。アルゴリズムで価格を決める場合の議論は、主にこの3つ目にかかわります。

この3つの形は、モデルの中での扱い方がそれぞれ違います。表示の条件は、価格そのものではなく「その価格をどう見せてよいか」を縛るので、販促カレンダー(第6章)や値下げの計画(第7章)を作るときに、表示の仕方とセットで点検する必要があります。価格の水準の条件は、最適化の下限の制約として書ける部分があります。価格を決める主体の条件は、モデルの外側の、誰がどの情報を使って価格を決めているかという業務の設計の問題です。次の表は、この章で確かめた規定を、価格の数理モデルとの関係で並べたものです。

法令・ガイドライン規制される行為(要旨)確かめた一次情報価格の数理モデルとの関係
景品表示法 第5条第2号価格その他の取引条件について、実際のもの、または競争事業者のものよりも著しく有利であると一般消費者に誤認される表示(有利誤認表示)e-Gov 法令検索の条文、消費者庁「不当な価格表示についての景品表示法上の考え方」販促・値下げの表示の仕方を点検する。二重価格表示の比較対照価格に条件がある
消費者庁「将来の販売価格を比較対照価格とする二重価格表示に対する執行方針」セール後の将来の価格を比較に使う表示の扱い消費者庁のページのPDF(令和2年12月25日)「来週から値上げ」と見せる表示は、計画どおりの販売が確実なときに限られる
消費税法 第63条不特定かつ多数の者にあらかじめ価格を表示するとき、消費税額を含めた価格を表示する(総額表示)e-Gov 法令検索の条文、国税庁タックスアンサー No.6902最適化した税抜の価格を、税込の価格に直したときの端数と価格の並びを点検する
独占禁止法 第2条第9項第3号・第19条正当な理由がないのに、供給に要する費用を著しく下回る対価で継続して供給し、他の事業者の事業活動を困難にさせるおそれがあるもの(不当廉売)e-Gov 法令検索の条文、公正取引委員会「不当廉売に関する独占禁止法上の考え方」価格の下限の制約。原価を下回る価格を最適化の候補に入れるときの条件
独占禁止法 第2条第9項第4号・第19条自己の供給する商品を購入する相手方に、正当な理由がないのに、販売価格を定めて維持させるなどの拘束の条件を付けて供給すること(再販売価格の拘束)e-Gov 法令検索の条文、公正取引委員会「流通・取引慣行に関する独占禁止法上の指針」メーカーの価格監視・小売の価格決定の業務の設計。希望小売価格の扱い
独占禁止法 第2条第6項・第3条事業者が他の事業者と共同して対価を決定・維持・引き上げるなどして、一定の取引分野における競争を実質的に制限すること(不当な取引制限)e-Gov 法令検索の条文、公正取引委員会の報告書「アルゴリズム/AIと競争政策」(2021年3月)競合の価格に反応するアルゴリズム(第11章)の設計と、価格設定ツールの共同利用の扱い

表の「確かめた一次情報」の列は、この章で本文を書くために実際に開いたものです。景品表示法の条文は、e-Gov 法令検索で取得した版の附則に、令和5年5月17日法律第29号までの改正が反映されていることを確かめました。独占禁止法は令和7年5月23日法律第39号まで、消費税法は令和8年3月31日法律第12号までの改正が反映された版です。ガイドラインは改定の日付が古いものもありますが、各官庁のページに現行のものとして掲載されている版を使いました。

景品表示法の有利誤認表示と、違反したときの措置

不当景品類及び不当表示防止法(景品表示法)の第5条は、事業者が自己の供給する商品・役務の取引について、3種類の表示をしてはならないと定めています。第1号は品質・規格などの内容を実際より著しく優良と示す表示(優良誤認表示)、第2号は価格その他の取引条件について、実際のもの、または同種・類似の商品を供給している他の事業者のものよりも、取引の相手方に著しく有利であると一般消費者に誤認される表示です。第2号の表示は有利誤認表示と呼ばれ、価格の表示はこの号の問題になります。どちらの号も、「不当に顧客を誘引し、一般消費者による自主的かつ合理的な選択を阻害するおそれがあると認められるもの」という限定が付いています。

消費者庁の「不当な価格表示についての景品表示法上の考え方」(平成12年6月30日公正取引委員会、平成28年4月1日消費者庁が最終改定。以下「価格表示ガイドライン」)は、この第2号の読み方を価格表示に即して示した文書です。ガイドラインの第2によると、「有利であると一般消費者に誤認される」とは、表示によって販売価格が実際と異なって安いという印象を一般消費者に与えることをいい、「著しく有利」かどうかは、表示が一般的に許容される誇張の程度を超えて、商品選択に影響を与えるような内容かどうかで判断されます。さらに、問題になるかどうかは表示媒体における表示内容全体をみて判断され、その際、事業者の故意・過失の有無は問題とされないと書かれています。対象は、製造業者・小売業者・通信販売業者・サービス業者など事業形態を問わず、一般消費者に対する価格表示のすべてで、値札・店頭・チラシ・新聞やテレビの広告・インターネットの広告など媒体も問いません。

価格の数理モデルにとって重要なのは、「故意・過失の有無は問題とされない」という点です。システムが自動で作った販促の表示が、たまたまガイドラインの条件を外れていた場合でも、表示としての評価は変わらないということです。最適化の結果を売場の表示に流す仕組みを作るなら、表示の条件の点検もその仕組みの中に置いておく必要があります。

違反したときの措置も条文で確かめました。第7条により、内閣総理大臣は、第5条に違反する行為について、その差止め、再発防止に必要な事項、これらの実施に関連する公示などを命ずることができ(措置命令)、違反行為が既になくなっている場合でも命ずることができます。この法律による内閣総理大臣の権限は、政令で定めるものを除き、第38条で消費者庁長官に委任されています。第8条は課徴金で、第5条第1号・第2号に違反した事業者に、課徴金対象期間の対象商品の売上額に100分の3を乗じた額の納付を命じなければならないと定めています。ただし、表示が誤認させるものであることを知らず、知らないことについて相当の注意を怠った者でないと認められるとき、または額が150万円未満であるときは命ずることができません。課徴金対象期間は最長3年間で、基準日からさかのぼり10年以内に確定した課徴金納付命令を受けたことがある事業者には、率が100分の4.5に上がります(第8条第5項)。罰則としては、措置命令に違反した者への2年以下の拘禁刑または300万円以下の罰金(第46条)に加え、第48条が、価格その他の取引条件について著しく有利であると一般消費者を誤認させるような表示をしたときに、100万円以下の罰金を定めています。第48条は刑罰の規定で、消費者庁の「改正景品表示法の概要」(令和6年10月1日施行分の説明資料)は、これを、故意に優良誤認表示・有利誤認表示を行う行為を対象とする直罰規定(命令への違反ではなく、不当な表示をした行為そのものを罰する規定)として説明しています。整理すると、表示が有利誤認表示に当たるかどうかの評価では故意・過失の有無は問題とされず、課徴金は知らないことについて相当の注意を怠らなかった事業者には命じられず、罰金は故意に行った場合が対象です。前に述べた「故意・過失の有無は問題とされない」は、この評価についての記述で、刑罰の要件とは別です。

経営の言葉に直すと、価格の表示の誤りは、売上額に比例する費用(課徴金)と、差止めや公示を命じられることによる販促の中断と信用の毀損につながりうるということです。課徴金は粗利ではなく対象商品の売上額に率を掛けて計算されるので、粗利率の低い品目ほど、同じ率の課徴金が粗利を大きく削ります。たとえば粗利率が30%の品目なら、売上額の3%は粗利の10%にあたり、粗利率が15%の品目なら粗利の20%にあたります(課徴金対象期間の売上額の全体に掛かる点は同じです)。さらに対象期間は表示をやめた後の一定期間の取引を含み最長3年なので、売上の大きい主力品の販促で表示を誤るほど、費用は大きくなります。規模の感覚をつかむため、第2章で用意したサンプルデータの12品目で、課徴金の率と最適化の改善を同じ単位(週あたりの円)にそろえて比べました。現在の売価のときの週あたりの売上は1,952,870円、粗利は837,136円(粗利率42.87%)で、売上の3%は58,586円、粗利の7.00%に当たります。基準の最適化が真のモデルで生む粗利の改善は週11,759円(+1.40%)なので、12品目すべての表示が課徴金の対象になったとすると、同じ期間で比べて改善額の約5倍(4.98倍)です。一方、対象が1品目だけなら、その品目の売上の3%は週2,689円(水E 2L)から8,344円(緑茶A 500ml)で、12品目全体の改善額の0.23倍から0.71倍にとどまります。つまり、表示の誤り1件の課徴金が最適化の改善分を必ず上回るわけではなく、誤りが多くの品目に及ぶ(たとえば販促の表示の作り方そのものに誤りがあって、カテゴリ全体の表示が対象になる)ときに、改善分を大きく上回る規模になります。なお、前に見たとおり、表示が誤認させるものであることを知らず、知らないことについて相当の注意を怠った者でないと認められるときや、額が150万円未満のときは課徴金は命じられません。この計算は課徴金が命じられた場合の規模を測るための架空の計算で、措置命令による販促の中断や信用の毀損は含んでいません。

二重価格表示と比較対照価格の条件

販促や値下げで最もよく使われる表示が、二重価格表示です。価格表示ガイドラインの第4は、二重価格表示を「事業者が自己の販売価格に当該販売価格よりも高い他の価格(比較対照価格)を併記して表示するもの」と定義し、内容が適正な場合には一般消費者の適正な商品選択と事業者間の価格競争の促進に資する面がある、としています。そのうえで、比較対照価格の内容が適正に表示されていない場合に不当表示に該当するおそれがあるとし、比較対照価格の種類ごとに条件を示しています。次の表は、ガイドラインの第4と第5の記述を、比較対照価格の種類ごとにまとめたものです。

比較対照価格の種類ガイドラインが示す考え方(要旨)不当表示に該当するおそれがある例(要旨)
過去の販売価格(「当店通常価格」「セール前価格」など)同一の商品について最近相当期間にわたって販売されていた価格を比較対照価格とする場合は、不当表示に該当するおそれはないと考えられる。そうでない価格を使うときは、いつの時点でどの程度の期間販売されていた価格かを正確に表示しない限り、おそれがある実際より高い価格を「当店通常価格」とする。販売実績のない商品・セール直前に販売を始めた商品の価格を使う。販売期間を示さずに、または実際と違う期間を付けて使う
将来の販売価格(「○月○日以降は○円」など)表示された将来の価格で販売することが確かな場合以外に行うことは適切でないと考えられるセール後も価格を引き上げる予定がないのに、またはごく短期間しかその価格で売らないのに使う
タイムサービス(一定の時間に限る値下げ、生鮮食料品の売れ残り回避の値下げ)当初の表示価格を比較対照価格とする二重価格表示は、通常は不当表示に該当するおそれはないと考えられる(ガイドラインは問題の例を挙げていない)
希望小売価格製造業者等が設定し、あらかじめ公表している価格であること。参考小売価格などは、小売業者に広く呈示されている場合に限り、希望小売価格以外の名称で使える実際より高い価格を希望小売価格とする。設定されていない・撤廃された価格を使う。PB商品について小売業者が自ら設定した価格を希望小売価格とする
競争事業者の販売価格(「市価」「○○店の価格」)同一の商品を代替的に購入しうる事業者の最近時の販売価格であること。市価は、地域内の競争事業者の相当数の価格を正確に調査すること。特定の競争事業者と比べるときは名称を明示する最近時の市価より高い価格を市価とする。商圏が異なり購入の機会のない店舗の価格を使う。同一ではない商品の価格を使う
他の顧客向けの価格(非会員価格、ピーク時の価格)それぞれの価格が適用される顧客の条件を正確に表示すること誰でも容易に会員になれ、非会員価格での購入者がほとんどいない価格を使う。需要のピーク時の価格を「当店標準価格」などの名称で使う
割引率・割引額の表示基本的には二重価格表示と同じ考え方。一括的な割引率の表示は、算出の基礎となる価格・対象商品の範囲・条件を明示する対象が一部に限られるのに全商品が対象のように表示する。表示価格をいったん引き上げたうえで割引率を表示する。最大割引率が一部にしか適用されないのに強調する

表のうち、価格の数理モデルに最も直接かかわるのは、過去の販売価格を比較対照価格とする場合の目安です。ガイドラインは、「最近相当期間にわたって販売されていた価格」に当たるかどうかは、販売されていた時期と期間、商品の一般的な価格変動の状況、店舗の販売形態などを考慮して個々の事案ごとに検討されるとしたうえで、一般的な目安を次のように示しています。二重価格表示を行う最近時(セール開始時点からさかのぼる8週間。販売期間が8週間未満ならその期間)において、その価格で販売されていた期間が、商品が販売されていた期間の過半を占めているときには、「最近相当期間にわたって販売されていた価格」とみてよいものと考えられる。ただし、この要件を満たす場合でも、その価格で販売されていた期間が通算して2週間未満の場合、またはその価格で販売された最後の日から2週間以上経過している場合は、「最近相当期間にわたって販売されていた価格」とはいえないものと考えられる。

この目安には、読み違えやすい点が3つあります。1つ目は、「相当期間」は連続した期間に限られず、断続的にセールが行われる場合は、比較対照価格で販売されていた期間を全体としてみて評価する、とされていることです。2つ目は、「販売されていた」とは通常の販売活動で販売していたことをいい、実際に購入された実績までは要らない一方、通常と異なる場所に陳列していた場合や、比較対照価格を作るための実績作りとして一時的にその価格で売っていたとみられる場合は、「販売されていた」とはみられないことです。3つ目は、セールの実施を決めた後に販売を始めた商品の二重価格表示は、セール前の価格で販売されていた期間を正確に表示しても、不当表示に該当するおそれがあるとされていることです。最後の点は、新商品を少し高く出して、すぐに値引きを打つという販売計画を、最適化の結果として出してはいけないことを意味します。

割引率の表示についても、価格の最適化と直接ぶつかる記述があります。ガイドラインの第5は、表示価格からの割引率等を用いた表示で、表示価格をいったん引き上げたうえで割引率等を用いた表示を行うことを、不当表示に該当するおそれのある例に挙げています(例として、適用対象の商品の表示価格がセール直前に引き上げられているとき)。通常売価の改定と販促を別々のモデルで決めていると、値上げの直後に割引の販促が入る、という組合せが計算の上では自然に出てきます。通常売価の最適化(第4章・第5章)と販促カレンダーの最適化(第6章)を別々に回す場合は、2つの結果を突き合わせる点検が要ります。

過去の販売価格を比較対照価格にできるかの目安を表す概念図の図

サンプルデータの販促週を、比較対照価格の目安で点検する

ガイドラインの目安が、実際の販売の記録の上でどのくらい効いてくるかを、第2章で用意したサンプルデータ(架空の食品スーパーの飲料12品目・104週の販売履歴)で確かめました。販促週ごとに、その週の通常売価を「当店通常価格」として値引き後の価格と並べて表示したと仮定し、さかのぼる8週間のうち、その通常売価で実際に売っていた週が過半(5週以上)か、通算2週以上か、最後にその価格で売った週が販促週の2週前までに入っているか、を数えます。ガイドラインの単位は日なので、ここでは週を単位にした近似です。最後の条件は、ガイドラインの「当該価格で販売された最後の日から2週間以上経過している場合」は「最近相当期間にわたって販売されていた価格」とはいえない、という記述を週に直したものです。サンプルデータの記録は週単位なので、1つの週はその週の価格で通して売ったとみなし、販促は週の初日に始まるとみなしました。すると、最後にその価格で売った週が販促週の1週前なら、最後に売った日から販促の開始までは1日、2週前なら8日で、どちらも2週間に届きません。3週前なら15日で、2週間以上経過した場合に当たります。そこでコードでは、最後に売った週から販促週までの差 gap が2以下を目安の内側、3以上を外側として書いています。日単位の記録で点検するときは、最後に売った日から販促の開始までが14日以上あいていないかを、日数で直接確かめることになります。また、共通データには第1週より前の記録が無いので、さかのぼる8週間がそろう第9週以降の販促週を点検の対象にしました。この点検は、記録の上で目安を満たしているかを数えるもので、法的な判断ではありません。

import sys, io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8")
import pandas as pd
from price_data import history, SKU_IDS, RAISED

df = history()
rows = []
for s in SKU_IDS:
    d = df[df.sku == s].set_index("week")
    for w in d.index[(d.promo == 1) & (d.index >= 9)]:
        ref = d.loc[w, "regular_price"]                 # 「当店通常価格」として併記したい価格
        past = d.loc[w - 8:w - 1]                       # セール開始前の8週
        at_ref = past.index[past.price == ref]          # その価格で実際に売っていた週
        n = len(at_ref)
        gap = (w - at_ref.max()) if n else 99           # 最後にその価格で売った週からの経過
        ok = (n >= 5) & (n >= 2) & (gap <= 2)
        why = "" if ok else ("直近8週の過半に満たない(%d週)" % n)
        rows.append((s, w, ref, d.loc[w, "price"], n, ok, why))

r = pd.DataFrame(rows, columns=["sku", "week", "通常売価", "販促価格", "通常売価で売った週", "目安を満たす", "理由"])
print("点検した販促週:", len(r), " 目安を満たす:", int(r["目安を満たす"].sum()),
      " 満たさない:", int((~r["目安を満たす"]).sum()))
print(r[~r["目安を満たす"]].to_string(index=False))
# 出力: 点検した販促週: 99  目安を満たす: 97  満たさない: 2
# 出力:  T4    57 258.0 208.0          4   False 直近8週の過半に満たない(4週)
# 出力:  C3    53 238.0 188.0          0   False 直近8週の過半に満たない(0週)

点検した99の販促週のうち、97週は目安を満たし、2週が満たしませんでした。満たさなかった2週は、どちらも第53週に通常売価を10円値上げした5品目(T1・T4・C1・C3・W1)の中にあります。炭酸C 1.5L(C3)は、値上げした第53週そのものが販促週で、新しい通常売価238円で売った週はさかのぼる8週間に1週もありません。238円を「当店通常価格」として188円と並べれば、ガイドラインが例に挙げた「表示価格をいったん引き上げたうえで割引率を表示する」形に近くなります。緑茶A 2L(T4)は、値上げから4週後の第57週の販促で、新しい通常売価258円で売った週が8週のうち4週しかなく、過半に届きません。値上げした残りの3品目は、値上げ後の最初の販促が第61週・第63週・第79週で、さかのぼる8週間すべてを新しい通常売価で売っていました。

この結果から、価格の数理モデルに足すべき制約が2つ読み取れます。1つ目は、通常売価を改定した品目は、改定から一定の週数(この週単位の近似では、新しい価格で5週売るまで)は、新しい価格を「当店通常価格」として併記する販促を組まないか、組むなら比較対照価格を表示しない、という制約です。第6章の販促カレンダーの整数計画では、品目ごと・週ごとの販促の0か1の変数に対して、「改定週から4週以内は、二重価格表示つきの販促を0にする」という形で書けます。2つ目は、販促が密な時期の制約です。この共通データでは同じ品目の2週連続の販促を禁じているので、8週のうち通常売価の週は最低でも4週は残りますが、目安の過半は5週です。目安を満たした97週のうち、通常売価で売った週が5週ちょうどだった販促週が2週ありました。夏の販促を今より増やす計画を立てると、目安を外れる週が出てきます。「8週のうち販促は3週まで」という窓の制約を販促カレンダーに入れておけば、記録の上ではこの目安を満たす販促しか計画されなくなります。

経営の判断としては、販促の効果(第6章)を評価するときに、表示の条件を満たさない販促は、そもそも計画の候補から外れるという点を織り込む必要があります。計算の上では値上げ直後の販促は、上がった通常売価からの値引きなので見かけの値引き率が大きく、数量の伸びも大きく見えます。しかしその表示ができないなら、販促の訴求力は計算で想定したものより弱くなります。値上げと販促の計画を同じ表の上に並べ、改定直後の週に販促が入っていないかを毎回点検することは、表示の誤りを防ぐと同時に、販促の効果の見積りを現実に合わせることにもなります。

将来の価格、タイムサービス、時期による価格差の表示

第7章の値下げや第9章のダイナミックプライシングのように、価格を時間とともに動かす仕組みでは、過去の価格だけでなく、将来の価格や、時間帯・時期による価格の差をどう見せるかが問題になります。価格表示ガイドラインは、この3つにそれぞれ考え方を示しています。

将来の販売価格を比較対照価格とする表示(「○月○日以降は○円になります」など)について、ガイドラインは、表示された将来の価格が十分な根拠のあるものでないとき(実際に販売することのない価格であるときや、ごく短期間のみその価格で販売するにすぎないときなど)に不当表示に該当するおそれがあるとし、将来の価格設定は将来の不確定な需給状況などに応じて変動するものであることから、将来の価格として表示した価格で販売することが確かな場合(需給状況などが変化しても表示価格で販売することとしている場合など)以外は、適切でないと考えられるとしています。消費者庁はこれを補う「将来の販売価格を比較対照価格とする二重価格表示に対する執行方針」(令和2年12月25日)を公表しており、そこでは、将来の販売価格で販売する確実な予定を持っていると認められるには、セール期間経過後にその価格で販売するための「合理的かつ確実に実施される販売計画」をセール期間を通じて持っている必要がある、とされています。

執行方針は、どのような場合に有利誤認表示として扱うかも具体的に書いています。セール期間経過後に、将来の販売価格で販売できない特段の事情(天変地異や感染症の流行などの不可抗力で、店舗の損壊や流通網の寸断が起きた場合など)が無いのに、その価格で販売していない場合は、通常、販売計画を持っていなかったことが推認され、原則としてその表示の開始時点から有利誤認表示として扱う、としています。一方で、顧客の要望や売上目標の未達でセールを延長した場合、気温の変化による一般的な需要の増減で売り切れた・売れ残った場合、他社の値下げに対抗してセールを続けた場合は、合理的に予見できなかったとはいえないので、特段の事情とは認められない例として挙げられています。将来の価格での販売期間については、セール期間経過後ただちにその価格で販売を始め、2週間以上続けた場合には、一般的には、ごく短期間であったとは考えないとしています(クリスマスケーキ・恵方巻・年越しそばのように特定の期間・日に需要が集中する商品は、その期間が2週間未満でも、通常は有利誤認表示として扱わないとする注があります)。また、具体的なセールの期間や期限を示さずに将来の価格を比較対照価格とする表示は、そのこと自体で販売計画を持っていなかったことが強く疑われるので、期間や期限を示すことが望ましいとしています。

この執行方針は、需要に応じて価格を動かす仕組みとの相性が特に悪いところがあります。ダイナミックプライシングは、将来の価格を需給の状況に応じて決め直すことそのものが目的です。執行方針が特段の事情と認めない例に「需要の増減」「他社の値下げへの対抗」が入っていることを考えると、動的に価格を決める品目で「来週から○円」と見せる表示を使うことは、仕組みの性質と表示の前提が矛盾しやすいと言えます。動的な価格の仕組みを入れる品目では、将来の価格を比較に使う表示を、計画の候補から外しておくのが安全だと考えています。

タイムサービスについては、ガイドラインは、特定の商品について一定の営業時間に限り価格を引き下げたり、生鮮食料品などについて売れ残りを回避するために一定の営業時間経過後に価格を引き下げたりする場合に、当初の表示価格を比較対照価格とする二重価格表示は、通常は不当表示に該当するおそれはないと考えられる、としています。第7章で扱った生鮮品の見切り(消費期限が近い商品の値引き)は、この類型に近いものです。

時期による価格差については、ガイドラインの第4の5(他の顧客向けの販売価格を比較対照価格とする二重価格表示)が、需要のピーク時とオフ時で販売価格の差が大きく、ピーク時の期間が特定の時期に限定されている場合に、オフ時の販売価格を表示する際に、ピーク時の販売価格を「当店標準価格」など平均的な販売価格であるとの印象を与える名称を付けて比較対照価格に用いることを、不当表示に該当するおそれのある例に挙げています(例はリゾートホテルの宿泊料金)。第8章のレベニューマネジメントや第9章のダイナミックプライシングで料金の段階を持つ事業では、最も高い段階の料金を「標準」と呼んで比べる表示は避ける必要があります。なお、この節の「顧客の条件」には顧客の購入時期を含む、とガイドラインは明記しています。

消費税の総額表示と、税込の価格で制約を書くこと

消費税法の第63条は、事業者(第9条第1項本文により消費税を納める義務が免除される事業者を除く)が、不特定かつ多数の者に課税資産の譲渡等を行う場合(専ら他の事業者に課税資産の譲渡等を行う場合を除く)に、あらかじめ価格を表示するときは、消費税額と地方消費税額の合計額に相当する額を含めた価格を表示しなければならない、と定めています。これが総額表示の義務です。国税庁のタックスアンサー「No.6902「総額表示」の義務付け」(令和8年4月1日現在法令等)は、対象は事業者が消費者に対してあらかじめ表示する価格であり、価格を表示していない場合にまで税込価格の表示を義務付けるものではなく、口頭で伝えるような価格は対象とならないこと、表示媒体(店頭表示・チラシ広告・新聞やテレビの広告など)を問わないことを説明しています。総額表示として認められる例には、税込価格だけを示すもののほか、税込価格に税抜価格や消費税額等を併記するもの、税抜価格に続けて括弧で税込価格を示すもの(「10,000円(税込価格11,000円)」の形)が挙がっています。同じページの問答では、見積書・契約書・請求書などは、あらかじめ価格を表示する場合に当たらないので対象とならないとされています。

価格の数理モデルにとっての意味は、顧客が見て反応する価格は税込の価格だということです。第3章の需要の推定に使う価格、第5章の価格の並びの制約(PBとNBの価格差、容量あたりの単価)、端数の制約(末尾を8円にそろえるなど)は、売場で顧客の目に入る価格の側で書くのが筋です。共通データの売価は、税込か税抜かを定めていない架空の数字です。自社のデータで同じことをするときは、マスタの売価が税込か税抜かを最初に確かめ、税抜の価格で最適化した場合は、税込に直したときに端数と価格の並びが崩れていないかを点検する必要があります。

この点は、2026年10月の時点で、具体的な日程が改正案に示されている論点になっています。国税庁の「消費税率引下げ特設サイト」(国税庁・財務省、2026年9月15日開設)は、「飲食料品消費税率の臨時的な引下げ及び就業者負担軽減支援金の導入に関する大綱」(令和8年9月15日閣議決定)に示された改正案として、令和9年(2027年)4月1日から令和11年(2029年)3月31日までの2年間、飲食料品の譲渡に係る消費税率(国・地方の合計)を1%に引き下げる内容を説明しています。サイトと、そこに掲載された「飲食料品に係る2年間の消費税率引下げに関するQ&A」(令和8年9月)は、いずれも、内容は今後法案が国会に提出され、審議を経たうえで可決・成立した場合のものだと断っています。2026年10月6日に特設サイトを改めて開いた時点でも、この断り書きは変わっていませんでした。この章では、引下げとそれにともなう特例を、成立前の改正案の内容として紹介します。

改正案では、この引下げにあわせて総額表示義務の特例を設けるとされており、同じQ&Aの問3-9がその案の内容を説明しています。値札の貼り替えなどの事務負担に配慮する観点から、総額表示に直ちに対応することが困難な事情がある場合には、誤認防止措置を講じている場合に限り、引下げの開始の前後(令和9年2月1日から5月31日まで)と終了の前後(令和11年2月1日から5月31日まで)に、適用される税率と異なる税率(8%または1%)による税込価格を表示できる、とされています。「困難な事情」の例は、夜間の値札の貼り替え作業に対応できない、カタログや商品パッケージ自体に価格が印字されている、などです。一方、具体的な事情がないのに、値札を随時貼り替えているにもかかわらず貼り替えた値札に引き続き8%による表示がされている場合は、困難な事情があったとは考えられないとしています。税抜価格のみを表示する方法や、税抜価格に続けて「+税」とだけ表示する方法は、引き続き認められないとされています。

共通データの飲料(酒類を除く飲料は、Q&Aが対象とする飲食料品の範囲に入るかを個別に確かめる必要がありますが、ここでは対象と仮定します)を例に、税率の変化だけで税込の価格がどれだけ動くかを計算すると、税抜の価格を据え置いた場合、税率が現在の8%(軽減税率)から1%になると税込の価格は \( 1.01 \div 1.08 \) 倍、つまり約6.5%下がり、2年後に1%から8%に戻ると約6.9%上がります。言い換えると、税率の変更は、対象品目の税込の価格を同じ率で一斉に動かすのと同じことです。

この一斉の変化を、共通データの真のモデルにそのまま入れて計算しました。現在の売価を税抜の売価とみなし、税抜の売価と原価は据え置き、顧客の見る価格だけが6.48%下がると置いた架空の計算です。結果は、12品目の数量の合計が週13,585.0本から15,987.7本へ17.69%増え、税抜の売価で計算した粗利が837,136円から978,729円へ16.91%増える、というものでした。品目別の数量の増加は、緑茶A 500ml(T1)の11.69%から水PB 2L(W2)の25.17%まで幅があります。しかし、この数字を税率の引下げの効果の見積りとして使うのは誤りです。共通データの真のモデルには競合の店の価格が入っておらず、自店の価格だけが動く場面を表したものです。一般に、1つの店が1つの品目の価格を動かしたときに観察される反応には、他の店や他の売場から客と数量が移ってくる分が含まれえます。税率の引下げは競合の店の税込の価格も同じ率で一斉に下げるので、そうした移動の分は生じにくく、自店の価格だけを動かした場面の弾力性を当てはめると、反応を大きく見積もるおそれがあります。第11章で扱った、競合の価格が需要の式に入っているかどうかの問題が、ここでそのまま効いてきます。制度の変更は自店の価格の変更とは別物として扱い、自店の価格だけを動かして推定した弾力性をそのまま使わないことが必要です。

そのうえで、税込の価格がどう決まるか(税抜の価格を据え置くのか、税込の価格を据え置いて税抜の価格を上げるのか、その中間か)は各社の判断で、そこから先は第4章の原価転嫁と同じ問題の裏返しになります。競合が税抜の価格を据え置く中で自店だけが税込の価格を据え置けば、それは自店だけの相対的な値上げになり、今度は自店の価格の弾力性が効いてきます。また、2年後に1%から8%へ戻るときは、税抜の価格を据え置いても税込の価格は6.93%上がり、顧客から見ると一斉の値上げに見えるので、後で扱う公平感の問題も絡みます。この記事で扱った最適化の道具は、税率の変更そのものの効果を当てるためではなく、「競合がどう動いたら、自店の税抜の価格をどこに置くのが粗利最大か」という場合分けを、税率が変わる前に計算しておくことに使うのが適していると考えています。

独占禁止法の不当廉売と再販売価格の拘束

私的独占の禁止及び公正取引の確保に関する法律(独占禁止法)の第19条は、事業者は不公正な取引方法を用いてはならないと定め、第2条第9項は不公正な取引方法を列挙しています。その第3号が不当廉売で、「正当な理由がないのに、商品又は役務をその供給に要する費用を著しく下回る対価で継続して供給することであつて、他の事業者の事業活動を困難にさせるおそれがあるもの」です。第20条の4は、この行為をした事業者が、調査開始日からさかのぼり10年以内に同じ号に係る排除措置命令または課徴金納付命令を受けたことがある場合(命令が確定している場合に限る)などに、違反行為期間の対象商品の売上額に100分の3を乗じた額の課徴金の納付を命じなければならないとしています(額が100万円未満の場合などを除く)。

公正取引委員会の「不当廉売に関する独占禁止法上の考え方」(平成21年12月18日、最終改正平成29年6月16日)は、この号の要件を、廉売の態様(価格・費用基準と継続性)、他の事業者の事業活動を困難にさせるおそれ、正当な理由の3つの面から説明しています。価格の数理モデルと直接かかわるのは価格・費用基準です。ガイドラインによると、「供給に要する費用」とは、廉売を行っている事業者自身の費用で、業界一般の費用や特定の競争者の費用ではありません。供給に要する費用(総販売原価)は、通常の販売業では仕入原価に販売費及び一般管理費を加えたものです。そのうち、廉売の対象の商品を供給しなければ発生しない費用を「可変的性質を持つ費用」と呼び、可変的性質を持つ費用を下回る価格は「供給に要する費用を著しく下回る対価」であると推定される一方、可変的性質を持つ費用以上の価格での供給は、第2条第9項第3号の不当廉売に該当することはない、としています。販売業の仕入原価(仕入価格と、運送費・検収費などの仕入れに付随する諸経費の合計)は、特段の事情がない限り可変的性質を持つ費用と推定され、そのうち仕入価格は可変的性質を持つ費用となります。ここでいう仕入価格は名目ではなく、値引き・リベート・現品添付などを考慮に入れた実質的な仕入価格です。

ただし、ガイドラインはこの第3号とは別に、不公正な取引方法(一般指定)の第6項も説明しています。一般指定は、公正取引委員会の告示(昭和57年公正取引委員会告示第15号)で定められた不公正な取引方法の一覧です。その第6項は、法律の第3号に当たる行為のほかに、不当に低い対価で供給して他の事業者の事業活動を困難にさせるおそれがあることを対象にしています。可変的性質を持つ費用以上で総販売原価を下回る価格での供給や、可変的性質を持つ費用を下回る価格での単発の供給であっても、商品の特性、廉売者の意図・目的、廉売の効果、市場全体の状況などからみて公正な競争秩序に悪影響を与えるときは、第6項に該当しうるとしています。例として、市場シェアの高い事業者が継続して大量に廉売する場合や、他の事業者にとって経営上重要な商品を集中的に廉売する場合が挙げられています。つまり、仕入価格を上回っていれば必ず問題がない、という読み方はできません。

「継続して」については、相当期間にわたって繰り返し廉売を行うこと、または営業方針などから客観的にそれが予測されることで、毎日継続して行われることは必ずしも要しないとされ、毎週末など日を定めて行う廉売でも、需要者の購買状況によっては継続して供給しているとみられる場合がある、と書かれています。「正当な理由」の例としては、需給関係から販売価格が低落している場合や、原材料の再調達価格が取得原価より低くなった場合に市況に対応して低い価格を設定したときなどが挙げられ、注で、生鮮食料品のように品質が急速に低下するおそれがあるものや、季節商品のように販売の最盛期を過ぎたものについて見切り販売をする必要がある場合は、可変的性質を持つ費用を下回る価格を設定することに「正当な理由」があると考えられる、としています。第7章で扱った季節品のマークダウンや生鮮品の見切りは、この注が想定している場面です。

価格の最適化に落とすと、次のように整理できます。通常売価や販促価格の候補には、「実質的な仕入価格(できれば仕入れに付随する諸経費を含む仕入原価)以上」という下限の制約を置くのが基本です。粗利を最大化する最適化は、交差の効果(第5章)で他の品目の粗利が増えるなら、単品では原価割れの価格を選ぶことがありえます。いわゆる目玉商品の考え方を数式にすると、まさにその形になります。計算としては筋の通った答えでも、継続して原価割れで売る計画は、他の事業者の状況によってはこの規定の問題になりうるので、モデルの側で候補から外しておき、外さない場合は人が判断する対象として明示する設計がよいと考えています。例外として、見切りや季節の最盛期を過ぎた商品の処分は、ガイドラインの注が「正当な理由」の例に挙げているので、値下げのモデル(第7章)では下限を別に扱う、という切り分けになります。

共通データの販売履歴で、この下限を確かめました。販売履歴の108の販促週で、実売価が原価(共通データの cost 列。架空の仕入価格として扱います)を下回った週は0でした。原価との差が最も小さかったのは水PB 2L(W2)の販促価格48円(原価46円・差2円、差の率4.2%)、次が水E 2L(W1)の68円(原価62円・差6円)です。ここでいう108の販促週は第1週から第104週までのすべてで、前の節で比較対照価格の目安を点検した99週は、そのうち第9週以降の販促週です。値引き率30%の販促を現在の通常売価から組む場合を計算すると、W2の78円の30%引きは54.6円です。共通データの売価の付け方(末尾8円)に合わせて、10円単位に四捨五入した50円から2円引くと48円になり、原価との差は2円まで縮みます。このとき実際の値引き率は38.5%で、表示上の30%より深くなります。同じ54.6円を末尾8円の側に切り上げれば58円(実際の値引き率25.6%)で、原価との差は12円です。末尾をそろえる丸めの方向ひとつで、原価との差が2円にも12円にもなるということです。48円に丸めた場合、仕入れに付随する諸経費を1本あたり2円以上と見込むなら、この販促価格は仕入原価を下回ることになり、可変的性質を持つ費用との関係を確かめる必要が出てきます。また、基準の最適化(第5章)が使う通常売価の候補(現在の売価から10円刻みで上下4段)には、W2の最も安い候補として38円が含まれ、これは原価46円を8円下回ります。基準ではこの候補が「現在の売価から上下15%以内」の制約で除かれているので問題になりませんが、改定幅の制約を緩めて解き直すときには、原価の下限の制約を別に置かないと、原価割れの価格が最適解に入る可能性があります。改定幅の制約が、意図せずに原価の下限の役割も果たしていた、ということです。

独占禁止法には、価格の水準ではなく、誰が価格を決めるかにかかわる規定もあります。第2条第9項第4号は、自己の供給する商品を購入する相手方に、正当な理由がないのに、相手方の販売価格を定めて維持させること、その他相手方の販売価格の自由な決定を拘束することなどの条件を付けて、商品を供給することを、不公正な取引方法としています。これが再販売価格の拘束です。第20条の5は、不当廉売と同様に、10年以内に同じ号に係る命令を受けたことがあるなどの場合に、売上額の100分の3の課徴金を定めています。

公正取引委員会の「流通・取引慣行に関する独占禁止法上の指針」(平成3年7月11日、最終改正令和8年7月8日)の第1部の第1(再販売価格維持行為)は、事業者が流通業者の販売価格(再販売価格)を拘束することは原則として不公正な取引方法に該当し違法となるとし、「正当な理由」がある場合には例外的に違法とはならないとしています。正当な理由は、拘束によって実際に競争促進効果が生じてブランド間競争が促進され、それによって需要が増大し消費者の利益の増進が図られ、その効果が拘束以外のより競争阻害的でない方法では生じえない場合に、必要な範囲と期間に限り認められる、とされています。拘束の有無は、事業者の何らかの人為的手段によって、流通業者がその価格で販売することについての実効性が確保されているかどうかで判断され、文書や口頭の合意で示した価格で販売させる場合のほか、示した価格で販売しない場合に出荷停止などの不利益を課す(課すと示唆する)場合、販売価格の報告徴収・店頭でのパトロール・派遣店員による価格監視などで示した価格で販売させる場合などが挙げられています。拘束の対象になる「示す価格」には、確定した価格のほか、希望小売価格の○%引き以内の価格、一定の範囲内の価格、事前の承認を得た価格、近隣店の価格を下回らない価格、一定の価格を下回ると警告するなどして暗に下限として示す価格も含まれるとしています。

希望小売価格そのものについて、指針は、流通業者に単なる参考として示されているものである限りはそれ自体は問題とならないが、参考価格として通知するだけにとどまらず、その価格を守らせるなど流通業者の販売価格を拘束する場合には原則として違法となる、としています。通知する場合は、「正価」「定価」といった表示や金額のみの表示ではなく、「参考価格」「メーカー希望小売価格」といった非拘束的な用語を使い、希望小売価格はあくまでも参考であり、流通業者の販売価格はそれぞれが自主的に決めるべきものであることを明示することが、違反の未然防止の観点から望ましいとしています。

価格の数理モデルとの関係は、立場によって2つに分かれます。小売の側から見ると、この記事で扱ってきた価格の最適化は、小売が自分の販売価格を自主的に決めることが前提になっています。仕入先から「この価格以上で売るように」という条件が付いている商品は、モデルの上では価格の下限の制約として現れますが、その制約は本来、自主的に価格を決める自由を拘束されている状態です。価格の候補を作るときに「仕入先の要請」を理由にした下限を機械的に入れる前に、その要請がどういう性質のものかを、モデルの外で確かめる必要があります。製造業者の側から見ると、第11章で扱った価格調査の仕組み(競合や小売店の価格を自動で集める仕組み)を、小売店の販売価格が希望小売価格から外れていないかを監視する目的で使い、外れた店に出荷やリベートで差を付ければ、指針が挙げる「価格監視」と「経済上の不利益」の組合せに近づきます。後で見る公正取引委員会の報告書も、価格調査アルゴリズムが再販売価格維持行為の実効性確保のために使われた海外の例に触れています。

なお、希望小売価格を二重価格表示の比較対照価格として使う場合は、景品表示法の側の条件(製造業者等が設定し、あらかじめ公表していること)がかかることを、前の節の表で見ました。PB商品について小売業者が自ら設定した価格を希望小売価格として比較に使うことは、価格表示ガイドラインが不当表示に該当するおそれのある例に挙げています。共通データのPB3品目(T3・T6・W2)は、この意味で、希望小売価格を比較対照価格に使えない品目です。

アルゴリズムによる価格設定と競争法の議論

第11章では、競合の価格を見て自店の価格を変える規則と、アルゴリズムどうしが価格を反応させ合うことをめぐる議論を扱いました。その法的な扱いについて、ここでは公正取引委員会のデジタル市場における競争政策に関する研究会の報告書「アルゴリズム/AIと競争政策」(令和3年3月31日公表)を開いて、書かれている範囲を確かめました。報告書の概要は、価格設定・価格調査のアルゴリズムは、その利用の態様によっては協調的な価格設定につながりうるとし、アルゴリズムを利用した協調的行為には、競争事業者間の「意思の連絡」が明らかではない場合があるなどの特徴があること、監視型・並行利用・シグナリング・自己学習の各類型に分けて検討した結果、独占禁止法により対応可能な場合が多いことをまとめています。

前提になるのは、独占禁止法の第3条(事業者は私的独占または不当な取引制限をしてはならない)と、第2条第6項の不当な取引制限の定義です。不当な取引制限は、事業者が、契約・協定その他何らの名義をもってするかを問わず、他の事業者と共同して対価を決定し、維持し、もしくは引き上げるなどして、相互にその事業活動を拘束し、または遂行することにより、公共の利益に反して、一定の取引分野における競争を実質的に制限することをいいます。報告書は、この「共同して」に当たるには事業者間の「意思の連絡」が必要で、それには黙示の意思の連絡も含まれると解されていることを、判例を引いて説明しています。平たく言えば、意思の連絡は価格をそろえることについての事業者どうしの認識の一致で、黙示の意思の連絡は、文書や言葉による明示の取り決めによらない認識の一致です。そのうえで、報告書が OECD(2017)の分類に沿って整理した4つの類型は次のとおりです。

類型アルゴリズムの使われ方(報告書の整理の要旨)独占禁止法の適用についての報告書の整理(要旨)
監視型アルゴリズムを利用した協調的行為競争事業者間で価格カルテルなどの合意がある場合に、合意の実効性を確保するため、競争事業者の価格を収集し、逸脱があれば報復するために価格調査アルゴリズムを使うアルゴリズムの利用以前に複数事業者間の合意が存在するため、不当な取引制限となりうる
アルゴリズムの並行利用による協調的行為合意に従って価格を付けるアルゴリズムを事業者間で使う場合と、同一の第三者(ベンダーなど)が提供するアルゴリズムを複数の競争事業者が使い価格が同調する場合(ハブアンドスポーク型)がある合意がある場合は不当な取引制限となりうる。第三者のアルゴリズムで価格が同調することを利用事業者が相互に認識しながら使う場合は、意思の連絡が認められ不当な取引制限となりうる。利用事業者に認識がなく、提供事業者が価格を同調させる場合は、一定の場合に提供事業者の行為が支配型私的独占(他の事業者の事業活動を支配することで競争を実質的に制限すること)となりうる
シグナリングアルゴリズムを利用した協調的行為値上げの意向などの価格情報を発信し、競争事業者の反応を探る価格情報の発信自体が不当な取引制限になることはない。発信が需要者にとって有用でない形で行われ、競争事業者がそれに反応して価格をそろえるなど、独立の価格設定とは評価できない事情があれば、意思の連絡を推認できる場合もある
自己学習アルゴリズムによる協調的行為各事業者が自己学習(強化学習など)の価格設定アルゴリズムを使い、協調の意図がなくても、アルゴリズム間の相互作用で競争的な価格を上回る価格に至るとされる報告書の時点で具体的な事例はなく、現実の市場で実現する可能性は低いのではないかとの指摘があることを紹介している

表の2行目の注記は、価格の最適化の仕組みを外部から調達する企業にとって重要です。報告書は、複数の競争事業者が同一の第三者が提供する価格設定アルゴリズムを使うことで相互に価格が同調することを認識しながら使う場合や、価格設定アルゴリズムを提供するプラットフォーム事業者がすべての利用事業者の販売価格に同じ割引率の上限を課すことを周知し、利用事業者がそれを認識しながら使う場合は、利用事業者間に直接・間接の情報交換がなくても、価格が同調することの共通の認識があると考えられ、意思の連絡が認められて不当な取引制限として違反となりうる、と整理しています。脚注では、事業者団体が単価などをあらかじめ入力した積算システムの会員間の共同利用を図ることについて、会員間で積算結果の情報交換を行わない場合でも、実質的に共通単価の統一的利用に等しい状況となり、独占禁止法上問題であるとした公正取引委員会の相談事例も引かれています。

価格の数理モデルに引き直すと、注意点は3つです。1つ目は、モデルの入力に競合の価格を使うこと自体は、報告書の整理では問題とされていないことです。報告書は脚注で、価格調査アルゴリズムの使用それ自体は問題ないとしつつ、カルテルの実効性確保や再販売価格維持行為の実効性確保のために使われる可能性があると書いています。問題になるのは、競合との間に価格についての合意や共通の認識があるとき、あるいは仕組みが価格を同調させる目的で作られているときです。2つ目は、外部の価格最適化サービスを使うときに、そのサービスが競合にも提供されているか、提供者がどの情報をどう使って推奨価格を出しているか、を把握しておく必要があることです。他社の非公開の価格や原価がサービスの中で混ざって推奨価格に使われているなら、それは報告書のいうハブアンドスポーク型に近い構造になりえます。3つ目は、第11章の「競合の値下げに一律に追随する」規則のように、競合の価格への反応を規則として書く場合、その規則が自社の判断として独立に決めたものであることを、社内の記録として残しておくことです。どの規則も、独立に決めたかどうかはモデルの数式からは分からず、モデルの外の経緯で判断されるからです。

競合の価格を集める方法そのもの(ウェブサイトの利用規約や技術的な制限の扱いなど)は、この章では一次情報を確かめていないので扱いません。収集を始める前に、相手のサイトの利用規約を確かめ、判断に迷う点は弁護士などの専門家に相談してください。この章で扱うのは、集めた競合の価格を使う側の条件です。集めた競合の価格を表示に使う場合は、前の節で見たとおり、価格表示ガイドラインの条件(同一の商品を代替的に購入しうる事業者の最近時の販売価格であること、市価なら地域内の相当数の事業者の価格を正確に調査すること、特定の事業者と比べるなら名称を明示すること)がかかります。自動で集めた競合の価格は、集めた日時と店舗が記録されていないと、「最近時」かどうか、「商圏が同じか」を後から示せません。収集の仕組みには、価格と一緒に日時・店舗・商品の同一性の根拠を残す設計が要ります。

価格の公平感と、顧客ごとに価格を変えることへの懸念

法令の条件を満たしていても、顧客が不公平だと受け止める価格は、離反や苦情という形で経営の指標に跳ね返ってきます。価格の公平感についての研究としてよく引かれるのが、カーネマン、クネッチ、セイラーの論文 “Fairness as a Constraint on Profit Seeking: Entitlements in the Market”(The American Economic Review, Vol. 76, No. 4, 1986年9月, pp. 728-741)です。原論文を開いて、調査の方法と結論を確かめました。

この研究は、1984年5月から1985年7月にかけて、カナダのトロントとバンクーバーの2つの都市圏で無作為に選んだ成人に電話調査を行い、企業の価格や賃金の決め方を説明する短い場面を読み上げて、その行為が公正か不公正かを答えてもらったものです。要旨は、顧客や労働の市場では、利益が脅かされたときに企業が価格を上げる(賃金を下げる)ことや、費用が下がったときに価格を据え置くことは受け入れられるが、需要の変化につけこんで価格を上げる(賃金を下げる)ことは不公正だと受け止められる、とまとめています。著者たちはこれを「二重の権利」の原則と呼びました。取引の相手は基準となる取引(参照取引)の条件に対する権利を持ち、企業は基準となる利益に対する権利を持つ、という考え方です。論文は、この研究は記述的なもので、「公正である」とは「調査対象の母集団の相当な多数が公正だと考える」ことの略だ、と断っています。

論文の場面(要旨)回答者数受け入れられる不公正価格の判断への読み替え
大雪の翌朝に、金物店が雪かき用シャベルの値段を上げる(問1)10718%(100%から82%を引いた値)82%一時的な需要の増加につけこむ値上げ
輸送の混乱でレタスの卸値が上がり、上がった分だけ小売価格を上げる(問7)10179%21%原価の上昇を価格に転嫁する
人気の車種が品薄になり、定価で売っていた販売店が定価より上乗せして売る(問5A)13029%71%基準の価格からの値上げ
同じ状況で、定価から割り引いて売っていた販売店が割引をやめて定価で売る(問5B)12358%42%割引の取りやめ
多くの地域で競争のある食品スーパーのチェーンが、競争のない1つの地域でだけ、費用も販売量も同じなのに価格を平均5%高くする(問13)10124%76%競争の無い場所での値上げ
賃貸の更新の際、借主が近くで職を得て引っ越しにくいと知った家主が、予定より家賃を上げる(問14)1579%91%特定の個人の事情につけこむ価格

表の「受け入れられる」は、論文が4段階の回答のうち「完全に公正」と「受け入れられる」をまとめた割合、「不公正」は「不公正」と「とても不公正」をまとめた割合です。シャベルの場面は、論文の本文に「回答者107人のうち82%が不公正と考えた」と書かれているだけなので、「受け入れられる」の列は100%から82%を引いて示しました。他の場面は、論文の各問の下に示された値です。問5Aと問5Bの比較について、論文は、同じ額の値上がりでも、定価という明確な基準からの上乗せは損失として受け止められ、割引の取りやめは利得の消失として受け止められやすい、と説明しています。問13について論文は、平均10%・15%高くする版も聞いたが回答に有意な差はなかった、と書いています。

この研究を価格の数理モデルに読み替えるときには、注意が要ります。調査は1984〜1985年のカナダの2都市の電話調査で、仮想の場面への回答です。現在の日本の小売の顧客が同じ割合で答えるとは限らず、割合の数字をそのまま自社の顧客の離反率として使うことはできません。そのうえで、この研究が示している構造は、この記事で扱ってきた手法の使い方に直接かかわります。1つは、需要の増加に応じて価格を上げる仕組み(第8章・第9章のレベニューマネジメントやダイナミックプライシング)は、「需要の変化につけこむ値上げ」と受け止められる危険を、仕組みそのものに含んでいることです。もう1つは、同じ価格の変化でも、基準の価格をどこに置いて見せるかで受け止めが変わることです。定価から割り引いた価格を基準として見せていれば、割引をやめることは値上げより受け入れられやすい、という問5の結果は、通常売価と販促価格の組み立て方(第6章)と、二重価格表示の条件(この章の前半)の両方に関係します。

論文は、公平の規範を守らせる力として、企業の評判のほかに、取引の相手が自分に費用がかかっても不公正な企業との取引を避ける行動を挙げ、電話調査でも、競合店が一時的に閉店したときに値上げした近くのドラッグストアから、5分遠い店に乗り換えると答えた人が68%いたことを紹介しています。これも仮想の質問への回答ですが、価格の判断を誤ったときの損失が、その品目の数量の減少(弾力性で測れる部分)だけでなく、店全体の客数の減少として現れうることを示しています。第3章で推定した弾力性は、この店全体への波及を測っていないので、公平感を損なう価格の変更の損失は、モデルが示す粗利の見込みより大きくなりうると考えておく必要があります。

価格の変え方と顧客の受け止めの対応を表す概念図の図

公平感の問題が最も鋭く出るのが、顧客ごとに価格を変える場合です。需要の推定を顧客の単位まで細かくすると、顧客ごとに支払ってもよいと考える額(支払意思額)を推定し、それに合わせて価格を変える、という使い方が技術的には視野に入ってきます。前の節で触れた公正取引委員会の報告書「アルゴリズム/AIと競争政策」は、これをパーソナライズド・プライシングと呼び、1つの節を割いて整理しています。報告書は、OECD などの報告書と同様の広い定義を採り、パーソナライズド・プライシングを「事業者が、消費者の特徴や行動に基づき、各消費者又は消費者のグループごとに(同じ商品・サービスに対して)異なる価格を設定することであり、その価格がそれぞれの推定支払意思額に対応するようにすること」としています。そのうえで、いわゆるダイナミック・プライシングは需要と供給の変化に合わせて価格を変化させる仕組みで、購入のタイミングの違いで類似の商品が異なる価格になることはありうるが、消費者個人の特徴等により差別することではない点で、パーソナライズド・プライシングと異なる、と区別しています。第9章で扱った動的な価格は、この区別でいえば前者に当たります。

報告書は、パーソナライズド・プライシングが成立しやすい市場条件として、事業者が各消費者の支払意思額を推定できること、転売できない商品であること、事業者が一定の有力な地位を持っていることの3つを挙げ、デジタル市場ではこれらの条件が相対的に整っていると考えられる、としています。日本での実施状況については包括的な調査はないとしたうえで、消費者ごとに異なる価格を設定する場合は消費者から不公平であるとの否定的な反応が考えられるため、本体価格を消費者ごとに設定する形の実施には慎重な事業者も多いのではないか、一方で、購買履歴などを使って消費者ごとに異なる割引クーポンを発行したり、ポイントの付与率を変えたりする形で実施されている可能性はある、と書いています。

経済効果については、価格差別の一般的な効果として、通常の均一価格では買わなかった支払意思額の低い消費者にも販売できるようになる産出量の拡大効果、支払意思額の高い消費者がより高い価格を支払うことで消費者余剰の一部が事業者に移る配分効果、競争的な市場では競合する顧客を獲得する競争を促す効果を整理しています。競争政策上の対応としては、概要の資料が例として、パーソナライゼーションの手法を使って競争事業者の顧客にだけ低い価格を示し、競争事業者を排除すれば問題となる場合がある、と挙げています。

報告書は、パーソナライズド・プライシングが競争政策だけでなく、消費者政策と個人情報保護政策にもかかわるとしています。消費者政策については、消費者庁の検討会の論点整理が、パーソナライズされた価格であることを消費者に情報提供すべきか、そもそもどのように捉えるべきかを課題とし、実態を把握しつつ今後状況に応じて更なる検討が必要とした、と紹介しています。個人情報保護政策については、日本の個人情報の保護に関する法律にはパーソナライズド・プライシングやプロファイリング自体を直接規制する規定は存在しない、としたうえで、EUの消費者権利指令が、価格が自動的な決定にもとづいて個人向けにされたものである場合に消費者への情報提供を求めていること、EUの一般データ保護規則(GDPR)がプロファイリングを含む専ら自動化された取扱いにもとづく決定の対象とされない権利などを定めていることを紹介しています。これらは報告書の公表時点(2021年3月)での整理で、その後の国内外の法令の改正の有無は、この章では確かめていません。

価格の判断としては、2つのことが言えます。1つは、前の節の公平感の研究で、特定の個人が他に移りにくい事情を知って価格を上げる場面(問14)が91%という最も高い割合で不公正とされていたことです。顧客ごとの支払意思額の推定は、まさに「その人が他に移りにくいかどうか」を推定することでもあり、推定が当たるほど、この場面に近い価格を付ける仕組みになりえます。もう1つは、会員価格のように顧客の条件で価格を分ける場合でも、価格表示ガイドラインが、条件の内容を正確に表示すること、誰でも容易に会員になれて非会員価格での購入者がほとんどいない価格を比較に使わないことを求めていることです。顧客の条件で価格を分けるなら、その条件を顧客が知りうる形で示すことが、表示の条件と公平感の両方の面で前提になると考えています。この記事では、顧客ごとの価格の最適化そのものは扱いません。

価格の数理モデルに法令と受け止めの条件を組み込む

ここまでの内容を、価格の最適化の仕組みの中で、どの段階で何を点検するかという形にまとめ直します。次の表は、この章で確かめた条件を、「制約」(モデルの中に制約として書くもの)、「点検」(モデルの出力を売場に出す前に突き合わせて確かめるもの)、「モデルの外」(数式に書く前に、人が業務や契約の中で決めるもの)の3つに分けたチェックリストです。表の「段階」の列は価格を決める仕事のどの時点で確かめるかを、「分類」の列はこの3つのどれに当たるかを示しています。なお、ここまでの節で「点検」と書いたのは確かめる作業一般の意味で、この表の「点検」は3つの分類の1つとしての意味です。

段階分類点検すること根拠(この章の節)モデルでの扱い
価格の候補を作る制約候補の価格が実質的な仕入原価を下回っていないか。下回る候補を残すなら、見切り・季節の処分など理由を付けて人が判断する不当廉売下限の制約。値下げのモデル(第7章)は別扱い
価格の候補を作る制約端数・価格の並び(PBとNBの差、容量単価)を、顧客の見る税込の価格で満たしているか総額表示制約を税込の価格で書く。飲食料品の税率の引下げは2026年10月時点で成立前の改正案なので、成立して施行が決まったら、そのときの特例の期間と条件を確かめる
価格の候補を作るモデルの外仕入先の要請を理由にした下限の制約を入れていないか。入れるならその性質を確かめたか再販売価格の拘束モデルの外で確かめてから、確かめた結果だけを制約として入れる
販促の計画を作る制約「当店通常価格」を併記する販促週の、さかのぼる8週間に、その価格で売った期間が過半あるか。通算2週以上か。最後に売った日から2週間以上たっていないか。いずれもガイドラインが示す一般的な目安で、満たすかどうかで可否が決まる規則ではなく、個々の事案ごとに判断される二重価格表示目安だが、販促の計画の条件として式に書けるので、販促カレンダー(第6章)の制約として入れる。改定直後の週と、販促の密度の窓の制約
販促の計画を作る点検通常売価を上げた直後に、割引率を表示する販促が入っていないか二重価格表示(割引率の表示)通常売価の改定と販促の計画を突き合わせる点検。前の行の制約を入れている場合も、表示の前にもう一度確かめる
表示する前点検将来の価格を比較に使う表示は、その価格で売る計画が確実か。動的に価格を決める品目では使わない将来の価格・執行方針動的な価格の品目では表示の候補から外す
表示する前点検時期で価格を変える事業で、ピーク時の価格を「標準」として比べていないか時期による価格差表示の文言の点検
表示する前点検競合の価格を比較に使うなら、最近時の同一商品の価格で、日時・店舗・同一性の根拠を残しているか二重価格表示(競争事業者の価格)競合価格データの記録の設計と、表示前の照合
仕組みを選ぶモデルの外外部の価格設定サービスが競合にも提供されているか。推奨価格に他社の非公開情報が使われていないかアルゴリズムと競争法モデルの外の業務・契約の設計
仕組みを選ぶ制約とモデルの外需要の増加に応じて上げる仕組み、顧客ごとに変える仕組みについて、顧客の受け止めをどう測り、上限をどう置くか公平感、顧客ごとの価格値上げ幅・改定回数の上限の制約(第9章)と、モデルの外での苦情・客数の監視(第13章)

「分類」の列で数えると、制約が4行(うち最後の行は、制約とモデルの外の監視を組み合わせたものです)、点検が4行、モデルの外だけの行が2行です。制約の4行は、この記事で扱ってきた最適化の式に書ける種類のものです。点検の4行のうち3行(将来の価格・ピーク時の価格・競合の価格を比較に使う表示)は、表示の文言や記録の照合で確かめるもので、式には書けません。割引率の表示の行は、前の行の制約として式にも書いていますが、表示の前にもう一度突き合わせます。いずれも、計算の後に突き合わせる手続きとして仕組みの中に置けるものです。これらを置いておかないと、最適化は粗利の大きい方向に素直に動き、改定直後の販促、原価すれすれの販促価格、ピーク時の価格を基準にした表示といった、計算の上では自然な答えを出してきます。この章の点検で、共通データの販促週の2週が比較対照価格の目安を外れていたこと、価格の候補に原価を下回るものが含まれ、それを除いていたのが改定幅の制約だったことは、その具体例です。どちらも、誰かが意図して作った問題ではなく、別々の目的で置いた制約や別々に作った計画の組合せから出てきたものです。一方、モデルの外だけの2行(仕入先の要請の性質の確認と、外部の価格設定サービスの選び方)は、数式の書き方では答えが出ない、誰がどの情報を使って価格を決めているかの問題です。ここで人が決めた結果が、制約としてモデルに入ります。

判断を誤ったときの損失も、経営の指標に翻訳しておきます。表示の誤りは、課徴金として売上額の3%(さかのぼり10年以内に課徴金納付命令を受けたことがあれば4.5%)が対象期間の売上の全体にかかりうるうえ、措置命令による差止めで販促そのものが止まり、計画していた販促の数量と粗利が失われます。不当廉売や再販売価格の拘束は、さかのぼり10年以内に同じ号に係る排除措置命令または課徴金納付命令を受けたことがある場合などに、売上額の3%の課徴金の対象になります。公平感を損なう価格の変更は、その品目の数量の減少として弾力性で測れる部分を超えて、店全体の客数の減少として現れうるもので、第3章の推定はこの部分を測っていません。大きさを比べると、価格の最適化が見込む粗利の改善は、基準の結果では真のモデルで評価して週あたり+1.40%(11,759円)です。課徴金の節で計算したとおり、12品目すべての表示が対象になれば売上の3%は粗利の7.00%で、改善額の約5倍になります。対象が1品目に限られれば改善額を下回りますが、措置命令で販促が止まる損失と、客数の減少として現れる損失は、この計算に入っていません。価格の最適化を導入するときに、法令と受け止めの条件を後から付け足すのではなく、最初から制約と点検の手続きとして組み込んでおくことが、改善の見込みを実際の粗利に変えるための前提になると考えています。

この章の要点は3つです。第一に、価格にかかる法令は、表示の仕方(景品表示法・総額表示)、価格の水準(不当廉売)、価格を決める主体(再販売価格の拘束・不当な取引制限)の3つの形で効き、それぞれに原則と例外の条件があります。条文とガイドラインを開いて確かめると、二重価格表示の比較対照価格には「さかのぼる8週間の過半」などの具体的な目安があり、不当廉売の価格・費用基準には「可変的性質を持つ費用」という具体的な基準があって、どちらも最適化の制約として書ける部分を含んでいます。第二に、共通データで点検すると、別々に置いた制約と計画の組合せから、目安を外れる販促や原価を下回る価格の候補が自然に出てくることが確かめられました。第三に、法令の条件を満たしても、需要の変化につけこむ値上げや特定の個人の事情につけこむ価格は不公正と受け止められやすく、その損失はモデルの外側に現れます。次の第13章では、計算した価格を承認し、売場に反映し、効果を測る運用の仕組みを扱います。

この章を深めたい方への参考書籍

『景品表示法〔第7版〕』(高居良平 編著、商事法務、2024年):版元の紹介によると、消費者庁の運用実務を踏まえて立案担当者が法律の全体像を解説した本で、確約手続や直罰規定の導入、課徴金制度の見直しを内容とする令和5年改正を反映しています。目次には価格に関する有利誤認表示の項があり、この章で引いた価格表示ガイドラインの読み方を、事例とともに確かめるのに向いています。

『独占禁止法』第4版(白石忠志、有斐閣、2023年):版元の紹介によると、公正取引委員会の事例・裁判例・ガイドラインを網羅して体系的に整理した体系書で、令和元年の独占禁止法改正に対応しています。この章では不当廉売・再販売価格の拘束・不当な取引制限を、条文とガイドラインの範囲で価格のモデルに引き直しましたが、それぞれの要件の解釈や先例を確かめたいときの手引きになります。

『行動経済学の逆襲』上(リチャード・セイラー、遠藤真美 訳、早川書房、ハヤカワ文庫NF、2019年):著者は、この章で紹介した公平感の論文の共著者の1人です。目次によると、上巻の第4部「カーネマンの研究室に入り浸る 1984〜85年」に「何を『公正』と感じるか」「不公正な人は罰したい」などの章があり、論文の調査がどのような問題意識から行われたかを、著者自身の言葉でたどれます。単行本(2016年)もあります。

第13章 現場に入れる

第12章では、景品表示法・独占禁止法・消費税の総額表示といった法令と、価格に対する顧客の公平感を扱いました。第3章から第11章までで扱ってきたのは、需要を推定し、制約のもとで粗利が最大になる価格を計算する方法です。この章では、計算した価格を実際の売場とシステムに載せ、その結果を測って次の改定に戻すまでの運用を扱います。価格の最適化を導入しても成果が出ない理由の多くは、計算の精度よりも、計算した価格が承認と反映の途中で止まること、計算の入力になるマスタ(商品の原価や売価などの基礎データ)と販売の記録が粗いこと、改定の効果を測る方法が決まっていないことにあると考えています。この章では、価格改定の業務の流れ(提案・承認・反映・効果測定)、計算した価格を機械的に点検するガードレール、推奨の改定を何品目ずつ反映するか、マスタとデータの精度、棚札・電子棚札・EC・POSへの反映、人が最終判断する運用、効果測定の設計、経営への報告の指標、導入の順序と失敗の型を順に述べます。仕組みと運用の話が中心ですが、ガードレール・段階的な反映・原価のマスタの誤り・効果測定の4つは、第2章で用意したサンプルデータと基準の結果で試算して数字で示します。

計算した価格が、売場に届く前に止まる道筋

価格の最適化を業務に入れたときに起きやすい経過には、ある程度決まった型があるように思います。最初に出てきた推奨価格の一覧を見た商品部やバイヤーから、「この品目はメーカーと取り決めた販売の方針がある」「この品目は競合が毎週チラシで安く出すので上げられない」「この品目を上げると、隣の棚の同じ容量の品目と価格が逆転する」「この品目は来月に原価が上がるので、今下げるとすぐ上げ直すことになる」といった指摘が出ます。どれも、計算機に渡したデータには書かれていなかった事情です。担当者は推奨の一部だけを採用し、残りは据え置きます。据え置く品目が多いと、推奨の一覧は会議で眺めるだけのものになり、やがて価格は以前と同じ決め方に戻ります。

この道筋で起きていることは、書き漏らした制約は最適化にとって存在しない、ということの現れです。第5章で扱った基準の最適化は、現在の売価から上下15%以内、PB(小売業者が自社で企画した商品)は同じ容量の NB(メーカーの商品)の最安値より20円以上安く、同じブランドでは大容量のほうが1mlあたり安く、という3種類の制約だけを持っています。取引の方針・競合の動き・原価の予定といった事情は入っていないので、計算上の推奨価格は、事情を知っている人から見ると実行できない価格に近づきます。しかも、制約を書かずに解くと最適化が選べる価格の組が増えるので、計算上の粗利の改善は、制約を入れた場合より小さくなることがありません。導入前の試算では効果が大きく見え、売場に入れた後で縮む、という順序になりやすいのはこのためです。

もう1つの型は、入力の誤りです。原価の改定がマスタに反映されていない、販促の記録が売価の記録と結びついていない、チラシの掲載や売場の陳列が記録に残っていない、といった状態です。第3章で扱ったとおり、販促の週を販促と知らずに回帰すると、販促の上乗せが価格の効果に混ざり、価格弾力性を大きく取り違えます。条件が正しく書けていても、条件に入れる数字が現実とずれていれば、推奨の価格は同じように売場で崩れます。

価格には、ほかの計画の数字と違う事情がもう1つあります。改定の結果が、顧客の目に直接見えることです。発注量や勤務表の誤りは社内で直せますが、売価の誤りは棚札とレシートを通じて顧客に届き、表示と精算の価格が食い違えば苦情や返金の対応になります。また、価格を頻繁に動かすと、顧客は価格を信頼しなくなり、値下がりを待つようになることがあります(顧客の待ちの行動は第9章、公平感は第12章で扱いました)。そのため、計算した価格を売場に載せる運用は、粗利の計算だけでなく、表示の正しさと改定の頻度を管理する仕組みとして設計する必要があります。

これらの型を防ぐ手順は、突き詰めると4つです。改定の提案から反映までの業務の流れと責任者を決めること、計算した価格を機械的に点検する規則(ガードレール)を置き、規則に掛かった品目だけを人が判断すること、改定の効果を前もって決めた方法で測り、推定モデルと最適化の条件に戻すこと、そして計算の入力になるマスタと販売の記録の精度を保つことです。以下では、この4つを中心に述べます。

価格改定の業務の流れ、提案・承認・反映・効果測定

価格の改定は、多くの小売業で、おおむね次の段で進みます。改定の候補を出す段(提案)、候補を確かめて採否を決める段(承認)、決まった価格を POS(販売時点情報管理。レジで精算と販売の記録を行う仕組み)・棚札・EC の商品ページに載せる段(反映)、改定の結果を測る段(効果測定)です。価格の最適化は、このうち提案の段を置き換えるものにすぎません。承認・反映・効果測定の段が決まっていないと、計算した価格は会議の資料で止まるか、反映の途中で一部だけが変わるか、変えた後に効果が分からないまま次の改定を迎えることになります。

次の表は、各段で行うこと、使う計算やデータ、担当の例、残すべき記録をまとめたものです。担当の名前は組織によって違うので例として示しました。大切なのは、段ごとに「誰が決めるか」と「何を記録に残すか」を決めておくことです。

段行うこと使う計算・データ担当の例残す記録
1 データの締め販売の記録・販促の記録・原価・競合価格を締めて、計算に渡すPOS の販売記録、販促の計画と実績、原価のマスタ、競合価格の調査情報システム、商品部の事務締めた日時、欠けている週や品目
2 推定と最適化需要を推定し、制約のもとで推奨価格を計算する第3章の推定、第4章・第5章の最適化分析の担当推定の結果(弾力性と標準誤差)、推奨価格、見込んだ粗利の改善
3 機械的な点検推奨価格をガードレールで点検し、掛かった品目に印を付ける上げ幅・下げ幅・粗利率の下限・価格の並び・端数の規則分析の担当(自動)規則ごとに掛かった品目の一覧
4 承認印の付いた品目を中心に、採用・修正・見送りを決める取引の方針、競合の動き、原価の予定、在庫カテゴリの責任者(バイヤー・マーチャンダイザー)品目ごとの判断と理由(選択肢)
5 反映決まった価格を、決まった日に、POS・棚札・EC に同時に載せる売価のマスタ、棚札の発行、EC の商品データ情報システム、店舗反映の日時、反映できなかった店舗や品目
6 効果測定前もって決めた方法で改定の効果を測る改定後の販売記録、比較の相手(前年同週・改定しなかった品目や店舗)分析の担当見込んだ改善と測った改善、差の理由

表の中で見落とされやすいのは、1番目のデータの締めと、6番目の効果測定の記録です。推奨価格は、締めたデータの範囲で計算した値なので、締めた日時と欠けているデータを記録しておかないと、後で推奨が外れたときに、推定の誤りなのか、入力の欠けなのかを切り分けられません。効果測定の記録は、次の節以降で述べるように、推定モデルが見込んだ改善と実際に得られた改善の差を測る唯一の材料です。この差を記録し続けないと、推定モデルがどれだけ楽観的なのかを組織として知る手段がなくなります。

改定の周期も、この流れの中で決めておく必要があります。通常売価の改定は、多くの小売業で、毎週ではなく、月や季節の区切り、あるいはメーカーの価格改定や原価の変動の時期に合わせて行われているように思います。周期が短いほど需要の変化に早く追随できますが、承認と反映の手間が増え、顧客から見た価格の安定が損なわれます。第9章で扱った価格の改定回数の制約は、この周期の判断を最適化の側から見たものです。最初の導入では、既存の改定の周期に合わせて推奨を出し、業務の流れが回ることを確かめてから周期を短くするかを検討するのが安全だと考えています。

ガードレール、上げ幅・下げ幅・粗利率の下限・価格の並び

承認の段で、推奨価格を1品目ずつ人が見ていくと、品目数が増えたときに承認が回らなくなります。そこで、推奨価格を機械的に点検する規則を置き、規則に掛かった品目だけを人が重点的に見る形にします。この規則を、この記事ではガードレールと呼びます。道路の防護柵のように、計算がどれだけ外れても、ここから先には出ないという線を引くものです。ガードレールには、最適化の制約として計算の中に入れるものと、計算の後に点検の規則として掛けるものの2種類があります。

前者は、第5章の基準の最適化が持っている「現在の売価から上下15%以内」「PB は同じ容量の NB の最安値より20円以上安く」「同じブランドでは大容量の1mlあたり単価が安い」の3つのように、破った価格がそもそも候補に上がらないものです。後者は、計算の結果を見てから掛ける規則で、掛かった品目は自動では止めず、人の判断に回します。どちらに置くかは、規則の出どころと、式に書けるかどうかで決めるのがよいと考えています。守らなければならない規則のうち、価格や販促の計画の条件として式に書けるもの(価格の並びの逆転を許さない、原価を下回らない、通常価格を併記する販促の条件など)は、制約として計算に入れます。守らなければならない規則でも、表示の文言のように式に書けないものは、売場に出す前の点検で確かめます(第12章のチェックリストで「点検」に分類したものです)。経営の判断で目安として置いている規則(一度の改定でどこまで動かすか、粗利率をどこまで下げてよいか)は、点検の規則として掛けて人に判断させるのが出発点になります。たとえば、この章の例の「現在の売価から上下15%以内」は経営の目安ですが、止めたい線として固まっているので、最適化の制約として入れたうえで、点検の一覧にも残しています。制約として計算に入れた規則も、点検の規則の一覧に残しておき、推奨価格がその規則を満たしているかを計算の後にもう一度確かめます。メーカーなど仕入先と取り決めた販売の方針は、そのまま制約には入れません。第12章で見たとおり、仕入先が小売の販売価格を拘束することは独占禁止法の再販売価格の拘束に当たりうるので、まずその方針がどういう性質のものかをモデルの外で確かめ、確かめた結果として守ると決めたものだけを制約として入れます。

点検の規則の効き方を、基準の結果で確かめました。次の表は、基準の推奨価格(推定モデルの最適)について、品目ごとに現在の売価からの変更率と、現在の売価と推奨価格それぞれでの粗利率を計算したものです。粗利率は(売価から原価を引いた額)÷売価で、この章の試算のプログラムで計算しました。原価・売価はすべて第2章のサンプルデータの架空の値です。

品目原価(円)現在の売価(円)推奨価格(円)変更率粗利率(現在の売価)粗利率(推奨価格)
T1 緑茶A 500ml72138158+14.5%47.8%54.4%
T2 緑茶B 500ml68118108マイナス8.5%42.4%37.0%
T3 緑茶PB 500ml4888880.0%45.5%45.5%
T4 緑茶A 2L150258288+11.6%41.9%47.9%
T5 緑茶B 2L142238248+4.2%40.3%42.7%
T6 緑茶PB 2L1021781780.0%42.7%42.7%
C1 炭酸C 500ml82148138マイナス6.8%44.6%40.6%
C2 炭酸D 500ml761281280.0%40.6%40.6%
C3 炭酸C 1.5L140238268+12.6%41.2%47.8%
C4 炭酸D 1.5L1342182180.0%38.5%38.5%
W1 水E 2L6210898マイナス9.3%42.6%36.7%
W2 水PB 2L467868マイナス12.8%41.0%32.4%

この推奨価格に、点検の規則を掛けてみます。変更率の上限を、最適化の制約と同じ15%にすると、掛かる品目はありません。最適化がすでにその範囲で選んでいるからです。上限を10%に締めると、値上げ側の T1・T4・C3 と、値下げ側の W2 の4品目が掛かります。5%に締めると、値上げ側の3品目に加えて値下げ側の T2・C1・W1・W2 が掛かり、改定する8品目のうち T5 を除く7品目が人の判断に回ります。粗利率の下限を置く場合は、35%で W2 の1品目、37%で W1・W2 の2品目、38%で T2・W1・W2 の3品目が掛かります。

この結果から読み取れることが2つあります。1つは、粗利率の下限に掛かるのは、値下げを推奨された品目だということです。値下げは数量を増やして粗利の額を増やすための推奨で、粗利率は下がりますが、真のモデルで見ても、W2 は値下げで期待数量が59.9%増えます(基準の結果)。粗利率の下限を機械的に適用して値下げを止めると、粗利の額を増やす推奨のうち、効果の大きいものから順に止めることになりかねません。粗利率は経営の報告でよく使われる指標ですが、価格の最適化が最大にしているのは粗利の額なので、粗利率の下限を置くときは、何を守るための下限なのか(値引きの常態化を防ぐのか、特定の品目の位置づけを守るのか)を決めてから置くのがよいと考えています。

もう1つは、変更率の上限を締めるほど、人の判断に回る品目が増え、承認の手間が増えることです。上限は、承認の手間と、推奨を信じられる程度の兼ね合いで決まります。推定の不確かさが大きい品目ほど、推奨価格が真の最適から外れやすいことは第4章で扱いました。そこで、品目ごとに一律の上限を置くのではなく、推定の標準誤差(推定した値がどれくらいぶれうるかの目安。第3章で扱いました)が大きい品目ほど上限を締める、という規則も考えられます。基準の結果では、自己弾力性の標準誤差は C2 の0.363・T5 の0.357が大きく、W1 の0.162が最も小さくなっています。

点検の規則には、ほかにも次のようなものがあります(価格の端数のように制約として計算に入れている規則も、前に述べたとおり点検の一覧に残します)。価格の端数(この記事のサンプルデータでは末尾8円にそろえています)、同じ品目の改定の間隔(前回の改定から何週たったか)、販促の予定との関係(改定の直後に販促を組むと、改定の効果と販促の効果が測り分けられなくなる)、競合の価格との差(競合より一定以上高くしない)、法令に関わる表示(第12章)です。規則の一覧には、規則ごとに「制約として計算に入れるか、点検として掛けるか」「出どころは何か」「規則を決めた人は誰か」を書き添えておくのが有効だと考えています。出どころを書いておかないと、慣行として置いた規則がいつの間にか絶対の制約として扱われ、第5章で測ったような制約の費用を、誰も気づかないまま払い続けることになります。

推奨の改定を何品目ずつ反映するか

推奨の改定を一度に全部反映するか、一部の品目から始めるかは、導入の初期に必ず出てくる判断です。一度に全部を変えると、効果が出なかったときにどの品目の改定が悪かったのかが分からず、顧客から見た変化も大きくなります。一部から始めれば、反映の手順と効果測定の方法を小さく試せますが、改定しない品目の分だけ粗利の改善を先送りすることになります。基準の推奨では、12品目のうち8品目(T1・T2・T4・T5・C1・C3・W1・W2)を改定します。この8品目から一部だけを選んで反映した場合の粗利を、推定モデルと真のモデルの両方で計算しました。改定しない品目は現在の売価のままにしています。

次の表は、推定モデルで粗利が最も増える品目から1品目ずつ足していった場合です。「推定の改善の何割」の列は、8品目すべてを改定したときに推定モデルが見込む粗利の増加分(週あたり833,512円から849,826円への16,314円)のうち、その段階で推定モデルが見込む増加分の割合です。「真の改善率」の列は、同じ価格を真のモデルで評価したときの、現在の売価に対する粗利の増減率です。

改定する品目数足した品目推定モデルの粗利(円/週)真のモデルの粗利(円/週)真の改善率推定の改善の何割
0(現在の売価)833,512837,1360.00%0.0%
1T2839,248838,772+0.20%35.2%
2W2844,132842,882+0.69%65.1%
3T4846,753843,295+0.74%81.2%
4C3847,792846,238+1.09%87.5%
5T1848,777846,589+1.13%93.6%
6W1849,349846,814+1.16%97.1%
7C1849,739847,754+1.27%99.5%
8T5849,826848,895+1.40%100.0%

推定モデルで見ると、改善の大半は少数の品目から来ています。T2 と W2 の2品目で、推定モデルが見込む改善の65.1%、4品目で87.5%に達します。品目数を k 品目までに限って、価格の並びの制約を満たす組の中から推定モデルで最良の組を全部の組合せで探しても、k が1から8のどの場合も、選ばれる組はこの表の順に足した組と同じでした。また、8品目のうち1〜7品目を選んで反映する254通りの組は、どれも第5章の価格の並びの制約(PB と NB の差・容量あたりの単価)を破りませんでした。このサンプルでは一部だけの反映で価格の並びが崩れることはありませんでしたが、これは推奨の改定幅と品目の組合せによる結果です。実際の運用では、一部だけを反映する組についても、価格の並びの点検を掛け直す必要があります。

一方、真のモデルで見ると、様子が変わります。2品目を反映した段階の真の改善率は+0.69%で、8品目すべての+1.40%の半分弱です。推定モデルでは65.1%を占める2品目が、真の改善では約半分にとどまっているのは、推定モデルが T2 の値下げの効果を大きく見込んでいたためです。1品目だけを反映したときの粗利の増減を品目ごとに計算すると、T2 は推定モデルで週あたり+5,736円、真のモデルで+1,636円でした。逆に、推定モデルの評価が小さい品目の中に、真のモデルでは効果の大きい品目があります。T5 は推定モデルではマイナス51円と、単独ではわずかに粗利を減らす改定ですが、真のモデルでは+1,147円でした。表で T5 を8番目に足したときの推定モデルの増分が+87円で、ここでの単独の値(マイナス51円)と違うのは、同じ売場の他の品目の価格が変わると T5 の需要も変わるためです。1品目だけを変えた場合と、他の7品目を変えたうえで足した場合では、同じ品目でも値が違います。C3 は推定モデルの+1,039円に対して真のモデルで+2,942円です。

この結果は、段階的な反映の順序を推定モデルの見込みで決めることの限界を示しています。推定モデルの見込みが大きい品目は、推定の誤差がたまたま有利な側に出ている品目である可能性も含んでいます。最適化は、推定上の粗利が最も大きい選択肢を選ぶので、選ばれた選択肢の推定値は、平均すると実際の値より大きくなります。スミスとウィンクラーは2006年の論文でこの現象をオプティマイザーの呪い(optimizer’s curse)と名付け、推定値自体に偏りがなくても、推定値で選んだ選択肢の実際の値は、平均すると推定値を下回ることを示しました。基準の結果で、推定モデルが見込んだ改善+1.96%に対して真のモデルで得られる改善が+1.40%だったのも、この性質と整合します(このデータ1組の結果であり、この差がいつも同じ大きさで出るわけではありません)。

  • ジェームズ・E・スミス、ロバート・L・ウィンクラー(2006)「オプティマイザーの呪い」に関する論文、Management Science 第52巻第3号、311〜322ページ
    https://doi.org/10.1287/mnsc.1050.0451

経営の判断としては、2つのことが言えると考えています。1つは、段階的に反映するなら、最初の段は「推定モデルの見込みが大きい品目」だけでなく、「推定の不確かさが小さく、効果を測りやすい品目」を混ぜて選ぶのがよいということです。最初の段の効果測定の結果は、その後の段を進めるかどうかの判断材料になるので、効果が測れる品目で始めることに意味があります。もう1つは、経営に報告する見込みの数字は、推定モデルが出した改善率そのものではなく、割り引いた値か幅で示すべきだということです。このサンプルでは推定モデルの見込み+1.96%に対して実際は+1.40%で、見込みの約7割でした。週あたりで見ると、推定モデルが見込んだ増加は16,314円、真のモデルでの増加は11,759円です。導入の初期に見込みの数字をそのまま約束すると、実績が見込みを下回ったときに、手法そのものへの信頼を失います。

マスタとデータの精度、原価・売価・販促の記録・競合価格

価格の計算に入る数字は、大きく4つの系統に分かれます。品目ごとの原価と売価を持つ商品のマスタ(基礎データ)、品目×週(あるいは日)ごとの販売数量と実売価の記録、販促の記録(いつ・どの品目を・いくらで・チラシや陳列を伴って売ったか)、競合の価格です。第3章の推定は販売と販促の記録から需要を読み取り、第4章・第5章の最適化はマスタの原価で粗利を計算します。どの系統の誤りも、計算の画面では見えないまま推奨価格に入り込みます。

この中で、粗利への効き方が最も直接的なのは原価です。原価は粗利の式(売価から原価を引いて数量を掛ける)にそのまま入るので、マスタの原価が実際より低いと、計算は値下げで数量を増やすことの価値を大きく見積もります。原価の改定がマスタに反映されないまま推奨価格を計算した場合を、基準の結果で試算しました。架空の設定として、12品目すべての実際の原価が第2章のサンプルデータの値で、マスタには一律に5%、あるいは10%低い古い原価が残っているとします。推奨価格はマスタの原価と推定モデルで計算し、その価格で実際に得られる粗利は、実際の原価と真のモデルで評価しました。

マスタの原価値上げ・値下げの品目数計算の画面に出る改善の見込み(マスタの原価・推定モデル)実際の粗利(実際の原価・真のモデル、円/週)実際の改善率(現在の売価に対して)
実際どおり値上げ4・値下げ4+1.96%848,895+1.40%
実際より5%低い値上げ3・値下げ8+2.30%845,688+1.02%
実際より10%低い値上げ2・値下げ8+3.17%838,356+0.15%

表の比較の相手は、どの行も同じで、現在の売価のときの実際の粗利(週あたり837,136円)です。マスタの原価が5%低いと、推奨は値下げの品目が4品目から8品目に増え、実際の改善率は+1.40%から+1.02%に下がります。10%低いと、実際の改善率は+0.15%で、改定のほとんどが効果を失います。注意したいのは、計算の画面に出る見込みの改善率が、逆に+1.96%から+2.30%・+3.17%へと大きくなっていることです。原価を低く見ているので、値下げで数量を増やすほど粗利が増えるように見え、見込みが良くなります。マスタの誤りは、推奨の質を下げながら、計算の見込みを良く見せる方向に働きました。見込みが大きくなる理由はほかにもありますが、見込みの改善率が急に大きくなった月は、入力のマスタの誤りを疑う候補の1つに入れておく必要がある、ということです。

原価のマスタについて決めておきたいのは、どの原価を使うか(仕入の単価そのものか、リベートや物流費を含めた正味の原価か)と、改定がいつマスタに入るかの2つです。仕入先からの値上げの通知を受けてから、マスタの原価が改定されるまでの間に価格の計算を回すと、この表の誤りがそのまま起きます。価格の計算を回す前に、原価の改定の予定をマスタと突き合わせる手順を、業務の流れの1番目の段(データの締め)に入れておくのが有効だと考えています。

販売と販促の記録では、実売価と販促の印が品目×週で結びついていることが要になります。第3章で扱ったとおり、販促の週を販促と知らずに回帰すると、チラシや陳列の上乗せが価格の効果に混ざります。多くの小売業では、POS の記録には精算した価格が残りますが、その週にチラシに載ったか、エンドの棚(通路の端の目立つ棚)に陳列したかは、販促の計画の側にしか記録が無いことがあります。2つの記録を同じ品目の識別子と週で結べるようにしておくこと、計画どおりに実施できなかった販促(陳列が間に合わなかった、欠品した)を実績として残すことが、推定の精度を左右します。

欠品も記録に残す必要があります。棚に商品が無い週の販売数量は、需要ではなく在庫で頭打ちになった数量です。欠品の週をそのまま回帰に入れると、需要を低く見積もり、その週の価格の効果も読み違えます。欠品を直接記録する仕組みが無い場合でも、在庫の記録から在庫が0になった日を拾い、その週に印を付けておけば、推定のときに除くか、別に扱えます。在庫と欠品の扱いは、弊社コラム『在庫と発注量を決める数理モデル、安全在庫の計算から多段階在庫の最適化まで』でも扱っています。

競合の価格は、集め方によって精度と頻度が大きく変わります。店頭の調査は頻度が低く、調査した日の価格しか分かりません。EC の価格は頻繁に集められますが、店頭の価格と同じとは限りません。競合の価格を推定や最適化に入れるときは、いつ・どこで・誰が集めた価格かを記録とともに持っておかないと、古い価格に反応した推奨が出ます。競合の価格の使い方は第11章で扱いました。集めた価格を表示に使うときの条件と、価格設定アルゴリズムの競争法上の扱いは第12章で扱いました。収集の方法そのものの法的な注意(相手のサイトの利用規約や技術的な制限の扱い)は、このコラムでは扱っていないので、収集を始める前に利用規約を確かめ、判断に迷う点は専門家に相談してください。

次の表は、4つの系統について、起きやすい誤りと、それが推定と最適化に与える影響、点検の方法をまとめたものです。

データ起きやすい誤り推定・最適化への影響点検の方法
原価のマスタ仕入の値上げが未反映、リベートや物流費の扱いが品目ごとに違う値下げの価値を大きく見積もる(この章の試算)。粗利の見込みが過大になる計算の前に原価の改定予定と突き合わせる。見込みの改善率が急に大きくなった月は原価を確かめる
売価のマスタPOS・棚札・EC の売価が食い違う、改定の日付がずれる計算の出発点(現在の売価)が実際と違う。表示と精算の食い違いは苦情になる系統ごとの売価を毎日突き合わせ、差のある品目を一覧にする
販売の記録欠品の週の数量を需要とみなす、店舗の開閉店で合計の数量が動く需要と価格の効果を小さく見積もる。合計の動きを価格の効果と取り違える在庫0の日に印を付ける。比較は既存店(同じ店舗の集合)で行う
販促の記録チラシ・陳列の有無が POS の記録と結びつかない、計画と実施が違う販促の上乗せが価格弾力性に混ざる(第3章)品目の識別子と週で計画と実績を結び、実施の有無を実績として残す
競合の価格調査の日付が古い、店頭と EC の価格を混ぜる古い価格に反応した推奨が出る調査の日時・場所・方法を価格と一緒に持つ

棚札・電子棚札・EC・POS への反映

承認された価格は、POS の売価のマスタ、店頭の棚札、EC の商品ページに載せて初めて効果を持ちます。反映の段で起きる問題の多くは、この3つの系統の売価が食い違うことです。POS の売価だけが変わって棚札が古いままだと、顧客は棚札の価格を見て商品を取り、レジで違う価格を請求されます。逆に、棚札だけが変わって POS が古いままでも、同じ食い違いが起きます。売価の改定は、POS の売価のマスタの切り替えと、棚札の差し替えを、同じ日の同じ時点に合わせる作業として設計する必要があります。棚札を紙で差し替える場合、店舗の作業量は改定する品目数に比例するので、改定の周期と品目数は、計算の都合ではなく店舗の作業の上限から決まることがあります。

この作業を減らす手段の1つが電子棚札です。電子棚札は、棚に取り付けた小さな表示器に売価を表示し、本部や店舗のシステムから無線で表示を書き換える仕組みです。売価のマスタと棚の表示を同じデータから更新できるので、差し替えの作業と、POS と棚札の食い違いを減らせます。価格の改定の頻度を上げる前提になる設備でもあります。

国内のスーパーマーケットでの導入状況について、全国スーパーマーケット協会・日本スーパーマーケット協会・オール日本スーパーマーケット協会の「2025年 スーパーマーケット年次統計調査 報告書」(2025年10月)を開いて確かめました。この調査は、国内にスーパーマーケットを保有する企業881社を対象に2025年6月〜7月に実施され、286社が回答しています(回収率32.5%)。生産性向上に関して実施している取り組み(複数回答)として「電子棚札の導入」を挙げた企業の割合は、業界推計値(回答企業の保有店舗数の構成を、国内のスーパーマーケット企業の構成に合わせて重みづけした値)で、2023年10.3%、2024年13.5%、2025年18.2%でした。報告書は、前回調査に比べて「電子棚札の導入」などの割合が増加している、と述べています。同じ設問の企業分類別の集計(回答企業244社)では、全体が20.9%で、保有店舗数が1〜3店舗の企業では6.6%、26〜50店舗では40.6%、51店舗以上では47.1%と、店舗数の多い企業ほど高くなっています。18.2%と20.9%が違うのは、報告書の説明によると、業界推計値の重みづけは全体の集計だけに行い、企業分類別の集計は回答の結果をそのまま集計しているためで、2つは重みづけの有無と、この設問に答えた企業の数が違う別の集計です。この数字は「生産性向上の取り組みとして挙げた企業の割合」であり、全店舗に設置した企業の割合や、店舗のうち設置した店舗の割合ではない点に注意が要ります。この記事の基準時点(2026年10月)で確かめた範囲では、この2025年版が最新の報告書でした。

この数字から、価格の運用について読み取れることがあります。電子棚札を導入していない企業では、売価の改定には棚札の差し替えの作業が伴うので、第9章で扱ったような頻繁な価格の改定は、作業の面から現実的ではありません。そうした企業で価格の最適化を始めるときは、月や季節の区切りでの通常売価の改定と、販促の設計(第6章)から始めるのが、作業の量と効果の兼ね合いから自然だと考えています。電子棚札があっても、価格を頻繁に動かすかどうかは別の判断です。改定の頻度を上げると、顧客から見た価格の安定が損なわれ、値下がりを待つ行動や不公平感を招くことがあるからです(第9章・第12章)。

EC の商品ページは、店頭より価格を変えやすい系統です。ただし、同じ品目の価格が店頭と EC で違う場合、顧客がそれをどう受け止めるかを考えておく必要があります。また、EC では、カートに入れた時点の価格と精算の時点の価格が違う、という問題が起きることがあります。改定を反映する時刻と、カートの中の商品の扱い(どの時点の価格で精算するか)を決めておく必要があります。価格の表示に関わる法令(総額表示・二重価格表示)は第12章で扱いました。

反映の段で記録しておきたいのは、改定を反映した日時と、反映できなかった店舗や品目です。反映が店舗によって数日ずれると、効果測定の段で、改定前と改定後の境目が店舗ごとに違うことになります。反映の記録が無いと、効果測定の結果がぶれた理由を後から調べられません。

反映先反映の方法の例起きやすい問題記録しておくこと
POS(売価のマスタ)本部の売価マスタを、決まった日時に切り替える切り替えの日時が店舗でずれる、販促の売価との優先順位の誤り切り替えた日時、店舗ごとの適用状況
紙の棚札本部で発行し、店舗で差し替える差し替えの漏れ・遅れ。POS との食い違い差し替えの完了の報告、未完了の品目
電子棚札売価のマスタから表示を書き換える表示器と品目の結びつけの誤り、通信の不具合書き換えの結果、失敗した表示器
EC の商品ページ商品データの売価を更新する店頭との価格の違い、カートの中の商品の価格更新した日時、店頭との差

人が最終判断する運用、判断の理由を記録して次の計算に戻す

価格の最適化を入れても、推奨価格を人が見て採否を決める工程は残すべきだと考えています。理由は3つあります。1つ目は、この章の最初に述べたとおり、取引の方針・競合の動き・原価の予定のように、計算に入っていない事情が必ず残っていて、それを知っているのはカテゴリの責任者だからです。2つ目は、推定モデルには誤差があり、推奨の一部は真の最適から外れているからです(第4章・この章の段階的な反映の試算)。3つ目は、価格は顧客の目に直接見えるので、誤りが出たときに説明する責任を、組織の中の誰かが持っている必要があるからです。計算機の推奨をそのまま反映する運用を目指すより、人が判断することを前提に、判断の作業を短くし、判断の理由を次の計算に戻す運用を設計するほうが、業務に定着しやすくなります。

そのためには、判断を記録に残す仕組みが要ります。推奨価格と、承認された価格の差を品目ごとに機械的に取り、差のある品目について理由を選んでもらう形が、責任者の負担が小さく、後で集計しやすいと考えています。理由を自由記述にすると集計できないので、選択肢を用意し、どれにも当てはまらないときだけ自由記述にします。記録の項目の例を次の表に示します。

項目記録する内容の例後で使う目的
対象の改定・計算の版推奨を計算した日、データを締めた日、推定モデルの版どの推奨をどう直したかを追う
判断の種類採用、価格を修正して採用、見送り、時期を延期判断の量を種類別に数える
対象品目、推奨価格、承認した価格同じ品目・同じ方向の修正が繰り返されていないかを見る
理由(選択肢)取引の方針、競合の動き、原価の予定、在庫の状況、価格の並び、品目の位置づけ(集客の品目など)、推奨が信用できない、その他制約の書き漏らしか、マスタの誤りか、推定への不信かを分ける
判断による変化推奨価格と承認した価格それぞれでの、推定モデルの粗利の見込み判断の費用を測る

この記録を改定のたびに集計すると、修正の理由はおおむね3種類に分かれます。同じ品目・同じ理由の修正が改定のたびに繰り返されているなら、それは書き漏らした制約か、マスタの誤りです。前者なら制約やガードレールとして足し、後者ならマスタを直します。たとえば「この品目は競合に合わせて据え置く」が毎回選ばれるなら、その品目の価格の上限を競合の価格に結びつけた制約として書けます。「推奨が信用できない」が多い品目は、推定の標準誤差が大きいか、データに欠品や販促の記録漏れがある品目かを確かめる対象になります。一方、その時だけの事情による修正は、制約にするのではなく、その回の判断として扱います。

判断による推定モデルの粗利の見込みの変化を記録しておくと、人の判断の費用が見えてきます。人の修正で見込みの粗利が下がっている場合、その差は計算に入っていない事情を守るための費用か、推定モデルへの不信による費用のどちらかです。ただし、見込みはあくまで推定モデルの値なので、人の修正のほうが正しかった可能性もあります。この章の段階的な反映の試算で見たとおり、推定モデルが単独ではわずかに粗利を減らすと評価した T5 の値上げが、真のモデルでは週あたり+1,147円の改定だった、というように、推定モデルの評価と実際の効果は品目単位では食い違います。どちらが正しかったかは、次の節の効果測定でしか確かめられません。判断の記録と効果測定の結果を同じ品目の単位で結んでおけば、「人が修正した品目」と「推奨どおりに改定した品目」のどちらが実際に粗利を増やしたかを、改定を重ねるごとに比べられるようになります。

ここで気を付けたいのは、判断の記録を責任者の評価に使わないことです。記録が評価に使われると、理由の選択が実態からずれ、「その他」に逃げる記録が増えます。記録の目的は、推定モデルと制約とマスタを直すことに限ると、最初に決めて伝えておくのが有効だと考えています。また、推奨をどこまで人が修正してよいかの範囲(たとえば、ガードレールに掛かった品目は自由に修正できる、掛からなかった品目を修正するときは理由の記録を必須にする)を決めておくと、判断の量と記録の手間の釣り合いが取れます。

効果測定の設計、改定の前後を比べるだけでは季節に埋もれる

改定の効果を測る方法は、改定の前に決めておく必要があります。改定の後で測り方を選ぶと、都合の良い比較を選んでしまう余地が残るからです。最も単純な方法は、改定の前の数週間と後の数週間の粗利を比べることですが、この方法は季節の変化をそのまま改定の効果と取り違えます。どの程度取り違えるかを、第2章のサンプルデータの真のモデルで試算しました。

架空の設定として、第105週に、基準の推奨価格へ通常売価を改定したとします。共通データの第1週は4月の第1週なので、第105週は3年目の4月第1週にあたります。改定の前の L 週は現在の売価、後の L 週は推奨価格で販売し、どの週も販促の無い平常週とします。各週の販売数量は、真のモデルの期待数量に、共通データと同じ大きさの週ごとの誤差を掛けて作りました。誤差の大きさは、数量の対数(log)で測った標準偏差が0.08で、数量の比にするとおおむね8%前後のぶれに当たります。この販売を乱数を変えて2,000回繰り返し、改定の前後の粗利の合計の比を「測った効果」として、その分布を見ました。比べる相手の「本当の効果」は、年平均の季節・平常週で真のモデルが示す+1.40%(基準の結果)です。

比べる期間季節だけによる差(価格を変えない場合)単純な前後比較の平均単純な前後比較の90%の範囲季節を補正した比較の平均季節を補正した比較の90%の範囲補正した比較で効果が0以下と出た割合
前後4週ずつ+10.71%+12.26%+9.06%〜+15.55%+1.40%マイナス1.49%〜+4.37%20.8%
前後8週ずつ+21.28%+22.97%+20.46%〜+25.54%+1.39%マイナス0.68%〜+3.51%12.9%
前後13週ずつ+31.96%+33.86%+31.81%〜+36.02%+1.44%マイナス0.11%〜+3.07%6.6%

「90%の範囲」は、2,000回の結果の5%点から95%点までです。単純な前後比較は、前後4週ずつで平均+12.26%、13週ずつで+33.86%と、本当の効果+1.40%の約9倍から約24倍の値を示しました。改定の前の期間が冬、後の期間が夏に向かう春なので、価格を変えなくても粗利は4週の比較で+10.71%、13週の比較で+31.96%増えるからです。単純な前後比較で「改定で粗利が12%増えた」と報告すると、季節の効果を改定の成果として数えることになり、次の改定の判断を大きく誤らせます。改定の時期が秋であれば、逆に季節の下りが改定の効果を打ち消し、効果の無い改定に見えることになります。

「季節を補正した比較」は、改定の前の粗利を、同じ価格のまま季節だけが変わった場合の比(真のモデルの期待値の比)で後の期間に引き直してから比べたものです。季節の比をデータを作った側が知る真の値で補正しているので、現実には望めない、いわば最良の場合です。それでも、前後4週ずつでは90%の範囲がマイナス1.49%から+4.37%まで広がり、2,000回のうち20.8%で効果が0以下と出ました。本当は粗利が1.40%増えているのに、5回に1回は「効果が無かった」あるいは「悪化した」と読める結果になる、ということです。13週ずつに延ばすと、0以下と出た割合は6.6%まで下がりました。週ごとの誤差がある以上、1.40%という小さな改善を測り分けるには、それなりの期間が要ります。

前年の同じ週と比べる方法(前年同週比)も試しました。第105〜117週の13週を、前年の第53〜65週と比べると、平均+1.44%、90%の範囲はマイナス0.12%〜+3.07%、0以下と出た割合は6.7%で、季節を補正した13週の比較とほぼ同じでした。このサンプルデータの季節は52週の周期でぴったり繰り返すので、前年同週比で季節がちょうど消えるからです。現実の前年同週比には、1年の間の客数の増減、競合の出店や閉店、天候の違い、店舗の改装などが入るので、この試算より誤差は大きくなります。

より信頼できる比較は、改定した品目や店舗と、改定しなかった品目や店舗を、同じ期間で並べる方法です。改定しなかった側の変化を季節や景気の変化とみなし、改定した側の変化からその分を差し引きます。この考え方は差の差の分析と呼ばれ、比べる相手の選び方と前提の確かめ方は、弊社コラム『施策の効果を正しく測る、因果推論と効果検証の進め方』で扱っています。価格の場合に注意が要るのは、改定しなかった品目が、比べる相手として汚れていることがある点です。基準の推奨で据え置いた4品目のうち、T3・T6・C2・C4 は、同じカテゴリの他の品目の改定の影響を受け、真のモデルで期待数量が T3 は+1.9%、T6 は+4.1%、C2 はマイナス1.1%、C4 は+2.7%動きます(基準の結果)。同じカテゴリの据え置いた品目を比べる相手にすると、交差の効果(第5章)の分だけ改定の効果を読み違えます。比べる相手は、別のカテゴリの品目か、改定しなかった店舗のほうが向いています。店舗や期間に価格を割り付けて試す設計は第10章で扱いました。

効果測定の設計として、改定の前に決めておきたいことを挙げておきます。何を測るか(粗利の額を主にし、数量・売上・粗利率を添える)、比べる相手は何か(前年同週・改定しなかった店舗・別のカテゴリ)、何週測るか(改定の大きさと週ごとのぶれから決める)、販促や欠品の週をどう扱うか、どの程度の結果なら改定を続け、どの程度なら戻すか、です。最後の「戻す条件」を前もって決めておかないと、効果がはっきりしない結果が出たときに、続けるか戻すかの議論が改定のたびに繰り返されます。

KPI と経営報告、見込みと実績を同じ物差しで並べる

第1章では、価格の判断を経営の指標(粗利・売上・販売数量・粗利率・客数・値引きの原資など)に翻訳する考え方を述べました。導入の効果を報告するときは、これらを「計算が見込んだ値」と「実際に測った値」の2列で並べるのが基本になります。見込みの値は推定モデルで計算した推奨価格の粗利から、実際の値は改定後の販売の記録と、前の節で決めた比べる相手から取ります。この章の試算で見たとおり、推定モデルの見込みは実際より楽観的になりやすいので、見込みだけを報告すると、効果を過大に伝えることになります。

指標見込みの値の出どころ実際の値の出どころ見込みと実際がずれたときに疑うこと
粗利の額推奨価格での推定モデルの粗利(マスタの原価)改定後の販売の記録と実際の原価、比べる相手との差推定の誤差(オプティマイザーの呪い)、原価のマスタ、季節の補正
販売数量・売上推定モデルの期待数量販売の記録欠品、販促の重なり、競合の動き
粗利率推奨価格と原価から計算販売の記録と原価から計算値下げの品目の数量の伸び(粗利率が下がっても粗利の額は増えうる)
見込みに対する実際の比(計画の段では1)実際の改善÷見込みの改善改定を重ねても比が小さいままなら、推定の方法そのもの
推奨の採用率(計画の段だけで測る)推奨どおりに改定した品目の割合書き漏らした制約、マスタの誤り、推定への不信
表示の誤り・苦情(計画の段では0)POS と棚札の食い違いの件数、価格に関する問合せや苦情の件数反映の手順、改定の頻度、表示の方法(第12章)

表の「見込みに対する実際の比」と「推奨の採用率」は、第1章の指標には含めていなかった、導入の段階に特有の指標です。経営への報告には、粗利の額と並べてこの2つを載せておくのが有効だと考えています。粗利が増えていても推奨の採用率が上がらない状態は、計算機の推奨がまだ業務に合っておらず、カテゴリの責任者の判断の手間が導入前と変わっていないことを意味します。見込みに対する実際の比は、この記事の基準では約7割(+1.96%の見込みに対して+1.40%)でした。この比を改定ごとに記録していけば、次の改定の見込みをどの程度割り引いて経営に報告すればよいかが、自社のデータで分かるようになります。

もう1つ、報告で分けておきたいのは、価格の改定による改善と、ほかの変化による改善です。導入と同時に、原価の交渉が進んだ、販促の方針を変えた、品揃えを入れ替えた、といった変化があると、粗利の改善のどこまでが価格の改定の効果なのかが混ざります。前の節の比べる相手を使った比較で、価格の改定の効果を分けて報告すると、次にどこへ手間を掛けるかの判断に使えます。

経営の判断として最も重要なのは、顧客の側の指標を、粗利の指標と同じ表に載せ続けることだと考えています。粗利の額だけを報告の中心にすると、次の改定は粗利を上げる方向にだけ進み、値上げが続く品目の客離れや、価格への不信が、報告に出ないまま積み上がります。客数の推移や価格に関する苦情は、後から粗利に跳ね返ってくるので、同じ表で両方を見ていないと、原因と結果のつながりが経営の側から見えなくなります。

導入の順序と失敗の型

ここまでの内容を、導入の順序としてまとめます。最初の段は、現状を数字にすることです。過去2年ほどの販売・販促・原価・売価の記録を集め、欠品の週や販促の記録漏れを洗い出し、現在の価格の決め方(誰が、何を見て、どの周期で決めているか)と、置かれている規則を書き出します。2番目の段は、1つのカテゴリを選んで需要を推定し、推奨価格を計算して、人の判断と並べる並行運用です。ここでは推奨を売場に反映せず、カテゴリの責任者に見てもらって、採用できない理由を集めます。理由の多くは書き漏らした制約かマスタの誤りなので、規則とマスタに戻して直します。3番目の段で、推奨の一部を実際に反映し、前もって決めた方法で効果を測ります。4番目の段で、効果の確かめられた手順を他のカテゴリに広げ、判断の記録と効果測定を毎回の改定に組み込みます。5番目の段で、改定の頻度を上げるか(電子棚札・EC)、販促や値下げの設計(第6章・第7章)に広げるかを、ここまでの実績から判断します。

価格の最適化を業務に導入する順序を表す概念図の図

並行運用の段を飛ばして、いきなり推奨を売場に反映することは避けるべきだと考えています。反映した価格に、取引の方針や価格の並びを無視した改定が一度でも入ると、カテゴリの責任者と売場の信頼を失い、その後の改善が進みにくくなります。しかも、価格は顧客の目に触れるので、誤った改定を戻すこと自体が、価格を短期間に上げ下げしたという別の問題を生みます。並行運用は、推奨の質を確かめる場であると同時に、責任者が推奨の一覧を見慣れる期間でもあります。並行運用をいつ終えるかは、推奨の採用率が一定の水準まで上がったかで判断するのが分かりやすい基準です。

導入でよく見られる失敗は、次の表の型に分けられると考えています。どれも、推定の手法や最適化の解き方とは別のところで起きます。

失敗の型起きること予防する手当て
規則の書き漏らし推奨が業務で採用されず、見送りが多くなり、やがて使われなくなる並行運用で採用できない理由を集め、制約とガードレールに戻す
規則の入れすぎ慣行まで絶対の制約にして、改善の余地が消える規則の出どころを記録し、制約の費用(第5章)を測って見直す
マスタの放置原価の改定が入らず、値下げの価値を大きく見積もった推奨が出る計算の前に原価の改定予定と突き合わせる。見込みが急に良くなった月は入力を疑う
見込みの過大な約束推定モデルの見込みをそのまま経営に約束し、実績が下回って信頼を失う見込みは割り引いた値か幅で示し、見込みに対する実際の比を記録する
前後比較だけの効果測定季節の変化を改定の効果と取り違え、次の改定の判断を誤る比べる相手と測る期間を改定の前に決める
表示と精算の食い違いPOS・棚札・EC の価格がずれ、苦情や返金の対応が生じる反映の日時をそろえ、系統ごとの売価を毎日突き合わせる
粗利の指標だけの報告客数や価格への信頼の低下が報告に出ず、後から粗利に跳ね返る客数・苦情を粗利と同じ表で報告し続ける
運用の担い手の不在導入した人が異動すると、規則・マスタ・推定モデルを直す人がいなくなる規則の一覧・マスタ・推定モデルの持ち主を業務の役割として決める

表の最後の型は、見落とされやすいものです。価格の最適化は、導入した時点で完成するものではなく、需要の変化に合わせて推定をやり直し、規則とマスタを直し続けることで精度を保つ仕組みです。直す作業が特定の個人の頑張りに依存していると、その人がいなくなった時点で仕組みが止まります。規則の一覧・マスタ・推定モデルの持ち主を業務の役割として決めておくことが、導入の最後の段として必要だと考えています。

この章の要点は3つです。第一に、価格の最適化が業務で使われなくなる原因の多くは、計算の精度ではなく、書かれていない規則・マスタの誤り・効果の測り方にあり、推奨価格はガードレールで機械的に点検して、掛かった品目を中心に人が判断します。マスタの原価が5%古いだけで、このサンプルでは実際の改善が+1.40%から+1.02%に下がり、見込みは逆に良く見えました。第二に、推定モデルの見込みは実際より楽観的になりやすく(このサンプルでは見込みの約7割)、段階的に反映する順序や経営への報告は、そのことを前提に組みます。第三に、改定の効果は、前もって決めた比べる相手と期間で測ります。単純な前後比較は季節の変化を効果と取り違え、このサンプルでは本当の効果の約9倍から約24倍の値を示しました。次の第14章では、公開された一次情報のある事例と研究の動向、生成AIと価格の運用の関係を扱います。

この章を深めたい方への参考書籍

『実践プロフェッショナル 価格戦略入門:ケースで学ぶ利益最大化の理論と方法』(吉川尚宏、ダイヤモンド社):戦略的な価格設定が企業の利益に与える影響の大きさを出発点に、ミクロ経済学やゲーム理論の基礎から、バンドリング・価格差別・顧客生涯価値・B2B の価格戦略までを、多くのケースで解説しています。この章で扱った業務の流れや承認の段で、推奨価格を見て採否を決める側が持っておきたい、価格戦略の考え方の土台を補えます。

『効果検証入門:正しい比較のための因果推論/計量経済学の基礎』(安井翔太 著、株式会社ホクソエム 監修、技術評論社):選択バイアスとランダム化比較試験、回帰分析、傾向スコア、差の差の分析と CausalImpact、回帰不連続デザイン(ある基準の値の前後で、ほかの条件がほぼ同じ観測どうしを比べる方法。第14章でも触れます)を、ビジネスの施策の効果を測る立場から解説しています。この章の効果測定の節で、単純な前後比較が季節に埋もれることを示しましたが、比べる相手をどう選び、前提をどう確かめるかを実務の水準で学べます。

第14章 事例と最新動向

第13章では、価格の計算結果を業務に入れる流れとして、ガードレール、マスタの精度、人が最終判断する運用、効果測定の設計を確認しました。計算の精度より先に、規則・データ・測り方の側で止まることが多いというのが、その章の要点でした。この第14章では、第1章から第13章までで扱ったのと同じ種類の問題が、実際の事業でどう現れているかを、公開された一次情報で確かめられる範囲で整理します。あわせて、需要を学びながら価格を決める研究の流れと、生成AI(大規模言語モデル)を価格の業務にどう組み込むかについて、弊社の考えを述べます。

事例の扱いには、この記事全体と同じ制約を置きました。企業・団体の公式発表(ニュースリリース)、官公庁の資料、学術論文を実際に開いて中身を確かめたものだけを取り上げます。書くのは「何を対象に、いつから、どういう仕組みで価格を変動させたか」までで、料金・売価・値引き率の具体額は、公式発表に載っていても書きません。具体額は時期によって変わり、記事の公開後に読まれたときに誤った情報になるためです。航空のレベニューマネジメントの歴史は第8章で、電子棚札の普及の状況は第13章で扱ったので、この章では重ねません。

事例を読むときに意識しておきたいのは、公式発表に書かれるのは「何を始めたか」であって、「どのモデルで、どれだけ粗利が動いたか」はほとんど書かれないという点です。企業にとって価格の決め方そのものが競争力の源泉であり、需要の推定の方法や最適化の制約は公開されないのが普通です。そのため、この章の事例から読み取れるのは、変動させる対象(席・日付・時間帯)、変動させる根拠(販売状況・需要予測・混雑)、変動の範囲を誰がどう管理しているか、という仕組みの骨格までです。各事例を第1章から第13章の枠組みに当てはめて読む箇所は、公開された説明をもとにした弊社の解釈であり、各社の内部の作りを示すものではありません。成果の数字が公開されている論文の事例は、別の節でまとめます。先に結論を述べると、この章で取り上げた公式発表から分かるのは仕組みまでで、効果の大きさは論文と自社の実験でしか確かめられません。

スポーツ興行のチケット、席種単位から個席単位へ

弊社が確認した範囲では、国内で公式発表を比較的確認しやすいのは、プロスポーツのチケットです。サッカーJリーグのクラブの公式サイトには、チケットの変動価格の試験導入の告知が掲載されています。ここでは、仕組みの説明が具体的な2つのクラブの発表を、公式サイトで開いて確かめたうえで取り上げます。

FC東京は、2023年7月19日に公式サイトで、同年8月から10月のホームゲーム3試合でチケットの価格変動制を試験導入すると告知しました(FC東京の告知)。告知では、試合日程や席種、天候などの情報から試合ごとの需要を予測し、チケット価格を自動で変える仕組みだと説明し、過去のチケット販売実績と販売期間中の販売実績をもとに、ダイナミックプラス株式会社の価格算出技術を使って価格を設定するとしています。公開された説明の範囲で、第9章の「時間と残り在庫で価格を変える」枠組みに当てはめて読むと、過去の販売実績は需要の見積もりに、販売期間中の販売実績は売れ行きの観測に当たると考えられます。これは弊社の解釈で、実際の内部の作りは公開されていません。告知から確かめられるのは、価格の算出に外部の事業者の技術を使っているという点までです。

名古屋グランパスは、2025年10月17日の発表で、同年12月6日のホームゲーム1試合において「個席」単位の変動価格(クラブの呼び方では個席差額設定販売)を試験的に実施すると告知し、Jリーグで初めての導入だとしています(名古屋グランパスの発表)。発表によれば、それまでは席種単位で価格が変動する方式で販売しており、新しい方式では通路側やピッチに近い下段など席ごとの人気を反映して値付けしたうえで、販売状況に応じて価格が変動します。試験運用を経て、2026年の明治安田Jリーグ百年構想リーグからの本格導入を予定しているとも書かれています。シーズンチケットと団体販売は対象外で、この2つは席種ごとの料金設定のままとすることも明記されていました。対象の1試合のチケットは10月19日に先行販売が始まっており、11月14日までは従来どおり席種単位の変動価格で売り、11月15日から個席単位に切り替える形で、発表はこれを販売途中からの試験運用開始と注記しています。個席単位の販売の対象はJリーグチケットでの販売で、発表に名前の挙がった2社のコンビニエンスストアの店頭販売は対象外とされていました。

この2つの発表を並べると、変動価格の設計が「同じ席種をまとめて1つの価格で動かす」段階から「席ごとに基準の価格差を付けたうえで動かす」段階へ進んでいることが分かります。弊社の解釈では、第5章で扱った品目をまたぐ価格の並びの問題が、ここでは座席の並びの問題として現れていると読めます。通路側の席を通路から遠い隣の席より高くするなら、その差が顧客に納得される幅に収まっているかを管理する必要があります。シーズンチケットや団体販売を対象外としている点も、長期の固定客と個別の試合の需要を分けて扱うという意味で、第8章の料金クラスの考え方に近い設計と読めます。発表に対象外とした理由は書かれていません。全部の販売経路を変動価格にするのではなく、変動させる経路と固定する経路を最初に分けている点は、他の業種で導入を考えるときにも参考になります。

鉄道の時間帯で価格を分ける、オフピーク定期券

鉄道では、東日本旅客鉄道株式会社(JR東日本)が2023年3月18日から「オフピーク定期券」を発売しています。同社が2024年8月30日に公表したニュースリリース(PR TIMES に掲載された同社のリリース)によれば、この定期券は平日朝の通勤時間帯の混雑緩和を目的とした、通常の通勤定期券より割安な定期券で、設定エリアと駅ごとのピーク時間帯が定められています。同じリリースで、2024年10月1日発売分から価格を引き下げ、ポイントの付与や、買い物・ワーキングスペースなどでの特典を組み合わせたプロモーションを始めることも告知されていました。

この事例は、ここまでの章で扱ってきた「需要に応じて価格を上下させる」仕組みとは目的の向きが違います。オフピーク定期券は、売上や粗利を直接増やすことより、需要を混む時間帯から空いている時間帯へ移すことを狙った価格です。容量が固定された事業で、ピークの容量に合わせて設備や人員を用意すると、ピーク以外の時間帯は容量が余ります。価格の差でピークの需要の一部を前後へ移せれば、同じ設備でより多くの需要を受け止められます。第8章のレベニューマネジメントが「限られた容量をどの料金の需要に割り当てるか」を扱ったのに対し、この事例は「需要そのものをどの時間帯に寄せるか」を価格で動かしています。

経営の目線で見ると、このような時間帯別の価格の効果は、割り引いた分の収入の減少と、混雑の緩和がもたらす費用の削減や顧客満足の向上を並べて評価する必要があります。後者は粗利の計算に直接は現れないため、第13章で述べたKPIの設計の段階で、何を成果とみなすかを決めておかないと評価がぶれます。2024年に価格を引き下げてプロモーションを強めた理由は、確認したリリースには書かれていません。ここで言えるのは、導入から約1年半で価格差と特典の組み合わせを見直したという事実までです。価格で需要を動かす施策は、一度決めて終わりではなく、反応を見て価格差を調整していくものだということは、この経緯からも読み取れます。

海外の小売の事例、効果を現場の実験で測った論文

国内の公式発表は仕組みまでしか書かれないのに対し、海外では、企業と研究者が共同で価格の最適化を実装し、その効果を現場での実験で測って学術誌に載せた事例があります。ここでは、要旨を開いて結論の向きまで確かめた2つの論文を取り上げます。どちらも、要旨の説明によれば、需要を予測し、その予測をもとに価格を最適化する手順を企業の業務に組み込んだもので、第3章から第7章までで扱った流れと同じ種類の取り組みです。

1つ目は、ファストファッションの小売チェーンであるZaraの在庫一掃セールの値下げを扱った、カロとガリエンの論文です(Operations Research 誌、2012年。論文のページ)。要旨によれば、Zaraは品揃えを絶えず入れ替え、シーズン中の販促を最小限にしているため、売れ残った品目の種類が多いわりに、品目ごとの過去の価格の記録が少ないという難しさがありました。2007年までは値下げの判断を手作業の非公式な手順で行っていましたが、著者らは同社の価格チームと共同で、需要予測のモデルが価格最適化のモデルに入力される手順を設計し、実装しました。2008年の秋冬シーズンにベルギーとアイルランドの全店舗で行った対照実験で、この新しい手順は在庫一掃セールの売上を約6%増やしたと報告されています。2012年の論文の時点で、同社がこの手順を全世界の値下げの判断に使っていたとも報告されています。現在も使われているかは確かめていません。

この事例は、第7章で扱ったマークダウン(値下げ)の問題そのものです。事例の側から読むべき点を3つ挙げます。1つ目は、過去の記録が少ない品目でも需要予測と最適化をつなげられたことです。第3章で述べたとおり、記録が少ないと推定は不確かになりますが、需要予測と価格最適化をつなぐ手順で、対照実験において手作業の手順を上回る結果が出ています。2つ目は、効果を前後比較ではなく、要旨が controlled field experiment と呼ぶ対照実験(新しい手順を使う側と使わない側を比べる実験)で測っていることです。第13章で述べた「季節の変化を効果と取り違える」誤りを避ける設計になっています。3つ目は、改善の幅が約6%で、一度の判断だけを見れば小さく見える数字だという点です。値下げの判断は件数が多く、毎シーズン繰り返されるので、数%の改善でも積み上がれば経営上は大きな額になります。ただし、要旨が報告しているのは売上の増加で、本記事が成果を測る粗利の変化は要旨からは確かめられません。第1章・第2章で述べたとおり、売上の増加は粗利の改善を意味しないため、この数字は売上の指標として読む必要があります。

2つ目は、米国のオンライン小売Rue La Laとの共同研究を扱った、フェレイラ、リー、シムチ・レヴィの論文です(Manufacturing & Service Operations Management 誌、2016年。論文のページ)。同社は、デザイナーブランドの衣料品や服飾品をごく短い期間だけ割引で販売する事業を営んでおり、要旨によれば、売上の大半を過去に一度も販売したことのない商品が占めることが、価格決定と需要予測の大きな課題でした。著者らは機械学習の手法で過去の売り逃し(在庫切れで売れなかった分)を推定し、新商品の需要を予測しました。そのうえで、競合する商品の価格に需要が左右されることと、顧客が覚えている基準の価格(参照価格)の効果を組み込んだ複数商品の価格最適化を効率よく解く手順を開発し、同社が日々使う価格決定の支援ツールとして実装しています。

この論文の結論は2つあります。1つは、中価格帯と高価格帯の商品についてツールが推奨した値上げを実施しても、販売数量は減らなかったという現場実験の結果です。もう1つは、実験の試験群(要旨の表現では test group)の売上が約9.7%増えたという推定で、要旨には90%信頼区間が2.3%から17.8%と添えられています。90%信頼区間は、同じ方法で区間を作れば10回に9回は本当の値を含むように作られた幅です。読み方としては、約9.7%が推定値で、2.3%から17.8%という幅がその推定の不確かさの大きさを示す、と捉えます。比べる相手の群がどう設定されたかは、要旨からは確かめられませんでした。また、ここでも報告されているのは売上の増加で、粗利の変化は要旨からは分かりません。

区間の幅が広いことは、第3章で述べた推定の不確かさが、効果の測定でもそのまま現れることを示しています。経営への報告では、点の推定値だけでなく、この程度の幅で効果が揺れうるという情報を一緒に渡すことが、期待の膨らみすぎを防ぎます。第13章で、推定モデルの見込みは実際より楽観的になりやすいと述べましたが、現場で実験して測ることが、その楽観を確かめる手段になります。

配車サービスの変動価格を需要曲線の推定に使った研究

変動価格は、需要を推定するためのデータを生むという面も持っています。米国の配車サービスUberの変動価格(同社の呼び方ではサージ料金)を使って需要曲線を推定した、コーエンらの研究があります(全米経済研究所のワーキングペーパー、2016年9月。NBER のページ。ワーキングペーパーは学術誌の査読を経る前の論文の段階を指します)。要旨によれば、消費者余剰(顧客が支払ってもよいと考える額と実際に支払った額の差の合計)を推定するには需要曲線全体を知る必要があり、著者らは同社の変動価格の仕組みと個人単位の豊富なデータを使って、需要曲線上のいくつかの点で需要の弾力性を推定しました。約5,000万件の個人単位の観測と、回帰不連続デザイン(ある基準の値の前後で、ほかの条件がほぼ同じ観測どうしを比べる方法)を用いています。

この研究の主眼は消費者余剰の推定であり、価格の最適化ではありません。それでも価格の実務にとって示唆があるのは、第3章で述べた内生性の問題、つまり価格が需要を見て決まるために価格と数量の関係から弾力性を素直に読めないという問題に対して、変動価格の仕組みそのものを利用して弾力性を推定している点です。規則で価格を決めている企業は、規則が価格を切り替える前後で顧客の反応を比べるという、実験に近い分析を設計できる余地があります。変動価格の規則を設計するときに、後から効果と弾力性を測れる形にしておくことは、第10章の価格実験と並ぶ学習の手段になります。

研究の動向、需要を学びながら価格を決める

第3章から第9章までの手法は、おおむね「先に需要を推定し、その推定を正しいものとして価格を最適化する」という順序でした。研究の側では、この2つを切り離さずに、価格を付けながら需要を学ぶ問題が扱われています。第10章のバンディットは、この流れの一部です。

代表的な出発点の1つが、ベスベスとジーヴィの論文です(Operations Research 誌、2009年。論文のページ)。要旨によれば、初期在庫が与えられた1品目について、有限の販売期間のあいだ価格を動的に調整して期待収入を最大化する問題を扱い、価格と平均の需要の関係(需要曲線)が分からない状況を考えています。需要曲線が形の分かった式で係数だけが未知の場合と、特定の式で表せない広い関数の集まりに属する場合の2つについて、需要曲線を販売しながら学び、それにもとづいて価格を最適化する方策を作りました。性能はリグレット、つまり販売開始前に需要曲線を知っていた場合に得られる最大の収入と比べた収入の損失で測り、どの方策でも避けられない損失の下限を示したうえで、提案した方策がその下限に近い損失を達成することを示しています。要旨は、このリグレットの大きさを「需要曲線についての事前の知識の経済的な価値」と解釈できると述べています。

この解釈は、経営の判断に直接つながります。需要を事前によく知っていれば、学ぶための損失を払わずに済みます。逆に言えば、過去の販売記録を整えて需要の推定の精度を上げることには、学習の費用を減らすという金額で表せる価値があります。第13章では、マスタとデータの精度を、推奨の質と見込みの確かさを保つための前提として扱いました。この論文の解釈に沿って読むと、記録を整えることには、それとは別に、学習の費用を減らすという面もあると弊社では考えています。

もう1つ、在庫の制約がある場合への拡張として、フェレイラ、シムチ・レヴィ、ワンの論文があります(Operations Research 誌、2018年。論文のページ)。要旨によれば、トンプソン抽出(第10章で扱った、それまでの結果から各候補が最良である確率を見積もり、その確率に応じて候補を選ぶ方法)はもともと在庫の制約を扱わないため、そのままでは収益管理の問題に使いにくいのですが、著者らはこれを線形計画(条件と目的を1次式で書いて解く最適化の方法)の定式化と組み合わせることで在庫の制約を入れられることを示しました。理論上の性能の保証と、数値実験での良好な結果が報告されています。要旨は同時に、事業の知識を取り入れないトンプソン抽出は性能が悪いことも示したと述べています。汎用の学習手法をそのまま当てはめるより、在庫や容量といった業務の制約を組み込むことが大事だと示唆していると読めます。

この分野の全体像は、デン・ブールによる総説(オペレーションズ・リサーチと経営科学の総説を載せる学術誌、2015年。論文のページ)があり、題名は歴史的な起源、現在の研究、新しい方向を掲げています。中身の結論は本章では確かめていないため、研究の流れを追う入口として書誌だけを挙げておきます。

機械学習による需要の推定と、その使いどころ

需要の推定に機械学習を使う動きは、上で紹介したRue La Laの事例のように、実装の段階に入っています。この事例で機械学習が担ったのは、過去に販売したことのない新商品の需要を、似た商品の記録から予測することと、在庫切れで観測されなかった売り逃しを推定することでした。どちらも、第3章の回帰による推定では扱いにくい部分です。

ただし、機械学習の需要予測をそのまま価格の最適化に使うときには、注意すべき点があります。予測の精度が高いことと、価格を変えたときの数量の変化を正しく捉えていることは別です。過去のデータで価格が需要を見て決まっていた場合、予測モデルは「価格が高い週は数量が多い」という見かけの関係を学ぶことがあります。これは第3章で扱った、季節を入れないと夏の販促と需要の山が重なって弾力性を取り違えるという問題と同じ構造で、モデルが柔軟になるほど、この見かけの関係をうまく再現してしまいます。Rue La Laの事例で、ツールの推奨にもとづく価格を現場実験で確かめている点は、この問題への備えとして参考になります。

実務での使い分けとしては、次のように考えるのが良いと考えています。品目数が少なく、価格を動かした記録が十分にある場合は、第3章の回帰で弾力性を推定し、その不確かさも含めて説明できる形を保つ方が、業務の担当者や経営への説明がしやすくなります。新商品が多く、品目ごとの記録が乏しい場合や、在庫切れによる売り逃しが多い場合は、機械学習で品目をまたいだ情報を使う価値が高くなります。いずれの場合も、推定にもとづく価格の効果は、比べる相手を置いた実験で確かめることを前提にするのが良いと考えています。

ここまでの事例と研究を、価格を変動させる対象と根拠、効果の確かめ方で整理すると、次の表のようになります。表の「効果の確かめ方」の列は、出典に書かれている範囲だけを記しています。「関連する章」の列は、弊社が読み合わせた本記事の章で、各社がその手法を使っていることを示すものではありません。

事例・研究分野価格を変動させる対象変動させる根拠効果の確かめ方関連する章
FC東京スポーツ興行試合ごと・席種ごとのチケット過去と販売期間中の販売実績にもとづく需要予測試験導入の告知まで。成果の数字は未公表第9章
名古屋グランパススポーツ興行席ごとのチケット席の人気と販売状況試験運用を経て本格導入を予定第5章・第9章
JR東日本のオフピーク定期券鉄道時間帯で利用条件を分けた定期券平日朝の混雑の分散導入後に価格差と特典を見直し第8章・第13章
Zara(カロとガリエン)衣料品の小売在庫一掃セールの値下げ需要予測のモデルと価格最適化のモデル2008年の対照実験で売上が約6%増(粗利は要旨から不明)第7章
Rue La La(フェレイラら)オンライン小売短期間の販売の商品価格機械学習による新商品の需要予測と複数商品の最適化現場実験で試験群の売上が約9.7%増(90%信頼区間 2.3%から17.8%。粗利は要旨から不明)第3章・第5章
Uber(コーエンら)配車サービス乗車料金(サージ料金)同社の変動価格の仕組み(サージ料金)変動価格の仕組みを使って需要の弾力性を推定(査読前のワーキングペーパー)第3章
ベスベスとジーヴィ研究1品目・有限期間の価格販売しながら学ぶ需要曲線リグレットの下限と、それに近い方策を理論で示す第9章・第10章
フェレイラ、シムチ・レヴィ、ワン研究在庫の制約がある複数品目の価格トンプソン抽出と線形計画の組み合わせ理論上の保証と数値実験第8章・第10章

表を縦に読むと、公式発表の事例は「変動させる対象と根拠」までが公開され、「効果の確かめ方」の列は空に近いことが分かります。一方、論文の2件は効果を現場の実験で測り、売上の増加を約6%、約9.7%と報告しています。自社で導入を検討するときに、この章で見たような公式発表から効果の大きさを読み取ろうとしても、根拠のある数字は得られません。効果の見込みは、第10章の価格実験か、第13章の効果測定の設計で、自社のデータから作ることになります。

事例から読み取れる共通点

本章で取り上げた事例のうち、導入の進め方が出典から分かる国内の3件と海外の小売の2件について、確かめた範囲で共通する点が3つあります。第一に、最初から全部の価格を変動させてはいません。FC東京は3試合で、グランパスは1試合の販売途中から試験導入し、グランパスはシーズンチケットと団体販売を対象外にしています。Zaraの事例は2つの国の店舗で対照実験を行い、2012年の論文の時点で全世界の値下げの判断に使われていたと報告されています。第13章で述べた「段階的に反映する」順序と同じ形が、これらの導入でも見られます。

第二に、変動させる範囲を区切っています。グランパスは販売経路で、JR東日本は時間帯とエリアで、Zaraは在庫一掃セールという期間で、価格を動かす対象を限定しています。弊社の解釈では、これは第13章のガードレールの考え方と同じで、価格を動かしてよい範囲を業務の側で先に決めてから、その範囲の中で計算に任せる設計と読めます。範囲を区切ることは、顧客の受け止めへの配慮でもあります。第12章で扱った価格の公平感の問題は、変動の対象が広く、変動の理由が見えにくいほど大きくなります。

第三に、本章で取り上げた効果の数字がある2件は、どちらも現場での実験の結果として報告されています。ただし、対照実験と要旨に明記されているのはZaraだけです。Rue La Laは現場実験の試験群の数字で、比べる相手の群がどう設定されたかは、前の節で述べたとおり要旨からは確かめられませんでした。前後の比較で「導入後に売上が何%増えた」と言うことは容易ですが、季節や景気、競合の動きの影響と区別できません。社内の報告でも、比べる相手を置いた測り方を求めることが、価格の施策への信頼を保つことにつながると考えています。

生成AIに任せられることと、人が決めること

価格の業務でも、大規模言語モデル(大量の文章で学習し、文章の生成や要約、質問への回答を行うAI。生成AIの中心となる技術)をどこに使えるかを考える場面が増えています。ここでは、確かめた研究を1つ紹介したうえで、弊社の考えを述べます。

大規模言語モデルに価格の決定そのものを任せた場合に何が起きるかを実験した研究として、フィッシュ、ゴンチャロフスキー、ショーラーの論文があります(arXiv で2024年3月に初版、2026年8月に改訂版を公開。arXiv のページ。arXiv は研究者が論文を査読の前に公開する場で、この論文も査読前の段階のものとして読む必要があります)。要旨によれば、大規模言語モデルを使った価格決定のエージェントを寡占(少数の企業が競争する市場)の設定で実験したところ、エージェントは速やかに、かつ自律的に(人が価格の水準を個別に指示しなくても)、競争的な水準を上回る価格と利益(競争が働いていれば付かないはずの高い価格と、それによる利益)に達しました。さらに、エージェントへの指示文(プロンプト)の一見無害な言い回しの違いが、その程度を大きく左右したと報告されています。著者らは、この結果が大規模言語モデルによる価格決定のエージェントを将来規制するうえでの固有の難しさを示すと述べています。

研究が示したのは、実験の設定のもとで、指示文の言い回しが価格の水準を大きく左右したことと、エージェントが競争的な水準を上回る価格に達したことです。アルゴリズムどうしの価格の反応の議論と法的な扱いは、第11章と第12章で扱いました。

ここからは弊社の考えです。この結果からは、大規模言語モデルが出す価格は、指示文の書き方という、数理モデルの制約や目的関数のように点検しにくいものに左右されうると考えています。第4章から第9章までの最適化は、目的と制約を式で書き、同じ入力からは同じ答えが出る手順でした。指示文の言い回しで結果が変わる仕組みは、第13章で述べた「なぜこの価格になったか」を記録して検証する運用と相性がよくありません。また、競合と価格をやり取りする市場で、自社の意図と関係なく価格が競争の水準より高い所に落ち着く可能性も、この研究の実験から考慮に入れるべき点だと考えています。

以上を踏まえて、価格の業務での大規模言語モデルの使い方を、弊社では次のように考えています。価格そのものを決める部分は、第3章から第10章までの推定と最適化、つまり目的と制約が書き下され、結果を再現して検証できる手法で行います。大規模言語モデルに任せるのは、その前後にある、文章と情報の整理の仕事です。

業務大規模言語モデルに任せられること人が決めること
価格改定の提案最適化の結果と根拠の数字から、承認者向けの説明文の下書きを作る提案を採用するか、どの品目を見送るか
顧客への告知価格改定の案内文・店頭掲示の文面の下書き、表現の言い換えの候補告知の内容と時期、表示が法令に適合しているかの確認
競合情報の整理人が適法に集めた競合の価格や販促の記録を、品目・時期ごとに整理し、要約するどの情報を集めるか、集め方が適法か、価格にどう反映するか
承認の記録却下や修正の理由を書いた自由記述を分類し、規則や制約に戻すべき候補を挙げるガードレールや制約を変えるかどうか
分析の補助回帰や最適化のコードの下書き、エラーの読み解きモデルの前提が業務に合っているか、結果を採用するか
価格そのものの決定任せない推定と最適化の結果をもとに、責任者が承認する

表の右の列に並ぶのは、いずれも責任を伴う判断です。価格は粗利と顧客の信頼を同時に動かし、誤ったときの損失は第1章で整理した型(安すぎによる粗利の取りこぼし、高すぎによる客数と数量の減少、値引きの常態化による基準価格の毀損)で現れます。その判断の根拠を後から説明できることが、価格の業務を続けていくための条件です。大規模言語モデルが作った文章は、事実と合っているかを人が確かめてから使います。説明文の下書きの中の数字が、最適化の出力と一致しているかを照合する手順を、業務の流れに組み込んでおくことが有効だと考えています。

文章の下書きと情報の整理を任せるだけでも、価格の業務の負担は小さくありません。第13章で述べたとおり、価格の最適化が業務に定着しない原因の多くは計算ではなく、提案・承認・告知・記録の手間の側にあります。大規模言語モデルは、まさにその手間を減らすのに向いています。計算は再現できる手法で、文章と整理は大規模言語モデルで、判断は人で、という分担を最初に決めておくと、新しい技術を取り入れても価格の決め方の筋道が崩れません。

価格の業務で、計算・文章・判断の担い手を分けることを表す概念図の図

経営の判断に翻訳する

この章の事例と研究を、価格の施策を検討する経営の立場から読み直すと、判断の材料は3つに整理できます。1つ目は、効果の見込みを何から作るかです。他社の公式発表からは効果の大きさは読み取れず、論文で報告された改善の幅も、その企業の業種・品目・実験の条件のもとでの数字です。論文の数字は売上の増加で、粗利の改善を示すものではない点にも注意が要ります。自社の効果の見込みは、自社のデータでの推定と、比べる相手を置いた試験導入で、粗利の指標で作ることになります。試験導入の費用は、第10章で述べた探索の費用であり、ベスベスとジーヴィの言う事前の知識の価値と表裏の関係にあります。

2つ目は、価格を動かす範囲をどこに置くかです。本章の国内の3件と海外の小売の2件は、いずれも対象を区切って始めていました。粗利への影響が大きく、顧客の受け止めへの影響が小さい範囲から始めるのが、損失の幅を抑えながら学ぶ順序だと考えています。第8章・第9章で扱った容量のある事業では残り在庫の価値がゼロになる前に売り切ることが粗利に直結し、第7章で扱った季節品では消化率と売れ残りが粗利を左右します。どの経営指標を動かしたいかによって、最初に変動させる対象が決まります。

3つ目は、新しい技術の位置づけです。機械学習による需要予測は、記録の少ない新商品や売り逃しの推定で価値を発揮しますが、価格と数量の見かけの関係を学ぶ危険があるため、実験での確認と組み合わせて使います。大規模言語モデルは、価格の業務の文章と整理の手間を減らす道具として有効で、価格そのものを決める役割には置きません。この線引きを最初に決めておくことで、技術が進んでも、価格の判断の責任と説明の筋道が保たれます。

この章の要点は3つです。第一に、国内の公式発表で確かめられるのは、スポーツ興行の席種単位から個席単位への変動価格や、鉄道の時間帯で分けた定期券のように、変動させる対象と根拠と範囲までで、効果の大きさは公表されていません。第二に、海外の論文の2件は現場の実験で効果を測っており、Zaraの値下げで約6%、Rue La Laの価格最適化で約9.7%の売上の増加が報告されていますが、いずれもその企業の条件のもとでの売上の数字で、粗利の改善は要旨からは確かめられません。第三に、研究は需要を学びながら価格を決める方向に進んでおり、事前の知識の価値と、在庫などの業務の制約を組み込む重要性が示されています。大規模言語モデルは文章と情報の整理に使い、価格そのものは再現できる手法と人の判断で決めるのが良いと考えています。終章では、第1章からこの章までの内容を、自社の価格をどこから見直すかという順序にまとめ直します。

この章を深めたい方への参考書籍

『施策デザインのための機械学習入門 データ分析技術のビジネス活用における正しい考え方』(齋藤優太・安井翔太 著、ホクソエム 監修、技術評論社):機械学習の予測を、そのまま施策の判断に使うと何が起きるかを、ビジネスの意思決定の側から整理した本です。この章で述べた、需要予測の精度が高いことと価格を変えたときの効果を正しく捉えていることは別だという問題を、より一般的な形で考える助けになります。

『大規模言語モデル入門』(山田育矢 監修・著、鈴木正敏・山田康輔・李凌寒 著、技術評論社):大規模言語モデルの仕組みを、モデルの構造から実装まで順に解説した本です。価格の業務で大規模言語モデルに何を任せられ、何を任せられないかを判断するには、その出力がどう作られるかを知っておくことが役に立ちます。

終章 価格の判断を、測って直す仕組みにする

本コラムでは、商品やサービスの価格をいくらにするかという意思決定を、販売の記録から価格の効き目を推定するところから始めて、1品目の価格、売場の複数の品目の価格、販促、値下げ、容量のある事業の予約の管理、ダイナミックプライシング、価格の実験、競合への対応、法令と顧客の受け止め、現場への導入へと、論点を1つずつ足しながら扱いました。終章では、各章で実際に計算した結果から言えることを振り返り、価格の判断を測って直す仕組みにするための考え方をまとめます。

各章の結果から言えること

はじめに、各章の結論を1行ずつ表にまとめます。数字はいずれも架空の設定による例題の値です。表の「真のモデル」は、データを作った側だけが知る本当の需要の式のことです。続く段落で、条件と根拠を章ごとに補います。

章一言の結論根拠の数字(例題)
第1章・第2章価格の良し悪しは粗利で測る。数量や売上の伸びは改善を意味しない一律10円の値下げで数量+24.29%・粗利-0.39%
第3章何を式に入れたかで、推定の結論の向きまで変わる販促の上乗せを入れない推定で選んだ売価は、真のモデルで粗利-3.27%
第4章・第5章品目ごとではなく、売場全体の粗利で決める各品目が自分の粗利だけを最大にすると粗利-1.33%
第6章販促は反動と他品目からの移動を引いた正味で評価する販促品の粗利+34,761円に対し正味+8,254円
第7章残り期間と残り在庫で値下げを決めると粗利が増えるが、需要の見込みの外れ方で優劣は入れ替わる値下げしない188,574円、残り在庫に応じた値下げ282,477円
第8章・第9章容量のある事業では、稼働率ではなく収入で判断する。価格の改定は少ない回数でも効く保護枠で収入+12.11%、改定1回で毎日改定の効果の大半
第10章試す価値のある品目を選んでから試す据え置きの取りこぼし213,726円に対し、試しながら決めると28,501〜44,689円
第11章競合への一律追随は両社の粗利を削る一律追随で週平均51,438円、追随しなければ120,080円
第12章計算の答えが表示できる価格かは、別に点検する販促99週のうち2週が、通常価格を併記する表示(二重価格表示)の目安を満たさない
第13章効果は季節を補正して測る前後4週の単純比較で+12.26%、補正すると1.40%前後
第14章公開事例の効果の数字は、何で測ったかと幅を確かめて読むRue La La の論文は売上の増加を約9.7%(90%信頼区間2.3〜17.8%)と報告

第1章では、架空の飲料売場の12品目について、売価・販売数量・原価をそれぞれ1%改善したときに粗利がどれだけ動くかを計算しました。数量が変わらないと仮定すると、売価の1%は粗利を2.33%、数量の1%は1.00%、原価の1%は1.33%動かします。ただし全品目の売価を同じ率で動かすと、数量の反応を入れた粗利は現在の売価のときが最も大きく、一律に上げても下げても粗利は減りました。第2章では、粗利率を全品目でそろえる、原価に一律の額を足す、一律に値下げするといった素朴な規則9通りを、真のモデル(データを作った側だけが知る本当の需要の式)で評価しました。9通りすべてが現在の売価の粗利を下回り、一律10円の値下げは数量を24.29%、売上を11.16%増やしながら、粗利を0.39%減らしました。数量や売上の伸びは、粗利の改善を意味しません。価格の良し悪しは粗利で測り、数量と売上はその内訳として読むというのが、第1章と第2章を通した結論です。

第3章では、価格の効き目(価格弾力性)の推定で何を誤りやすいかを測りました。販促の週のチラシや陳列による上乗せを式に入れずに推定すると、販促の週の売れ行きの伸びをすべて値引きの効き目とみなして、価格の効き目を大きく見積もります。価格だけの式でも、価格と季節の式でも、その推定で価格を選び直すと12品目すべてを値下げする答えが出ました。価格だけの式による推定モデルは、この価格で粗利が18.84%増えると見込みましたが、真のモデルで評価すると3.27%の減少でした(価格と季節の式でも同じ減少でした)。販促・季節・同じ売場の他品目の価格を入れた推定(基準の推定)では、同じ手順で真のモデルでも1.40%の改善が得られました。計算の手順が同じでも、何を式に入れたかで結論の向きまで変わります。第4章では、1品目の価格を他の品目を固定して最適化すると、12品目中11品目が現在の売価より安い価格を最適と示すことを確かめました。ところが T1(緑茶A 500ml)を138円から128円に下げると、T1 の粗利は週2,177円増える一方で、同じ売場の他品目の粗利が週4,324円減り、全体では週2,147円の減少になります。第5章では、各品目が自分の粗利だけを最大にする決め方では粗利が1.33%減り、売場全体の粗利を同時に見て決めると改善に転じることを示しました。品目ごとの担当者がそれぞれ自分の数字を最適化する組織の形が、売場全体の粗利を削ることがあります。

第6章では、販促1回の効果を分解しました。T1 を20%引きで販促すると、販促した週の T1 の粗利は34,761円増えますが、翌週の買いだめの反動で12,659円、同じ売場の他品目から客が移った分で13,848円が失われ、正味の増分は8,254円でした。そのために使った値引きの原資は139,820円です。13週の販促カレンダーを整数計画(0か1かを選ぶ変数を含む最適化)で組むと、推定モデルは564,105円の増分を見込み、真のモデルで評価した実際の増分は476,095円でした。第7章では、架空の夏季限定の商品を10週で売り切る値下げを動的計画法で決めました。値下げしない場合の期待粗利188,574円、暦どおりに値下げする規則の239,247円に対し、残り週数と残り在庫に応じて値下げを決める方法(動的計画法。先の週から順に最良の判断を逆算する方法)は282,477円でした。ただし需要が見込みの1.3倍だった場合は、暦どおりの規則のほうが上回りました。需要の見込みが外れる向きによって、決め方の優劣は入れ替わります。

第8章と第9章では、売れる数に上限がある事業を扱いました。架空のビジネスホテルでは、高い料金の客のために客室を残しておく数(保護枠)を、需要の分布から取り置く数を計算するリトルウッドの公式で46室と決めると、予約を先着順で受ける場合より期待収入が12.11%増えました。先着順は稼働率が99.3%と最も高い方法でしたが、収入は保護枠を置いた場合より1泊あたり110,278円少なくなりました。稼働率だけを見ると、この差は見えません。第9章の架空の興行では、残り日数と残り席数に応じて毎日価格を改定すると期待売上は2,168,368円、最良の固定価格では2,097,380円でした。改定を期間中に1回だけ認めても2,151,022円まで届き、改定の回数を大きく増やさなくても効果の多くが得られることを示しました。一方で、毎日改定した場合に売れた席の71.0%は、同じ公演の席が後の日により安く売られていました。顧客の受け止め方は第12章で扱った論点です。

第10章では、記録の少ない品目の価格を試しながら決める方法を比べました。水PB 2L では、現在の売価から上下15%以内の3つの候補の中で、現在の売価を据え置き続けると52週で213,726円を取りこぼすのに対し、需要曲線の形を仮定したトンプソン抽出(試した結果から、良さそうな価格ほど多く選ぶ方法)で価格を探ると、取りこぼしは28,501円にとどまりました。ただしこの方策は、例題の需要曲線の形を正しく仮定できていたことの有利さを含んでおり、形を仮定しないトンプソン抽出では44,689円でした。また候補に原価割れの価格を含めると、ほとんどの方策が据え置きより悪くなりました。一方、現在の売価がすでに最適に近い水E 2L では、52週ではどの方法も据え置きを上回りませんでした。試すあいだは最適でない価格でも売ることになるので、現在の売価が最適に近い品目では、試した分が差し引きで損になります。試す価値のある品目を選ぶことが先に来ます。第11章の架空の2社の競争では、競合が常に10円下回る規則で動く場合に一律に追随すると、両社の価格は88円まで下がり、自社の粗利は週平均51,438円になりました。追随しなければ週平均120,080円です。第12章では、景品表示法の価格表示ガイドラインが二重価格表示(販売価格に、それより高い比較の価格を併記する表示)について示す目安を共通データの販促に当てはめ、99週の販促のうち2週が、値上げの直後であるために目安を満たさないことを示しました。これは法的な判断ではなく、架空のデータを週単位に近似して点検した結果です。最適化の答えが法令の条件に照らして表示できる価格かどうかは、計算とは別に確かめる必要があります。

第13章では、価格を改定した前後の4週を単純に比べると粗利が12.26%増えたように見え(価格を変えなくても季節だけで10.71%増える時期でした)、季節を補正した比較で得られる1.40%前後の約9倍に見積もってしまうことを示しました。第14章では、公開された事例と研究を紹介しました。学術誌に載った小売の事例の効果は、例題のような粗利ではなく売上の増加として報告されており、Rue La La の論文が示す約9.7%という値にも、90%信頼区間で2.3%から17.8%という幅がありました。事例の数字を自社の見込みに使うときは、何を指標にした値か、どれだけの幅があるかを確かめる必要があります。

価格の判断を仕組みにするための5つの考え方

各章の結果を踏まえて、価格の判断を測って直す仕組みにするための考え方を5つにまとめます。

  1. 最初に、価格を変えたときの記録が残るようにする。売価・販促の有無と値引き率・陳列やチラシ・原価が週ごとに残っていなければ、価格の効き目は推定できません。記録の整備は、どの手法よりも先に来ます(第2章・第3章・第13章)。
  2. 推定の前提を疑う。販促と季節、同じ売場の他品目の価格を式に入れるかどうかで、推定の結論の向きまで変わります。推定した効き目には幅があります。第4章の T1 の例では、信頼区間の一方の端(効き目を小さく見積もる側)を信じると売価が高くなりすぎて粗利の損が5.99%、もう一方の端では1.27%と、誤る向きによって損の大きさが5倍近く違いました。推定値だけでなく区間の両端で粗利がどう変わるかを見てから決めます(第3章・第4章)。
  3. 品目ではなく、売場全体の粗利で決める。品目ごとに最適化すると、同じ売場の他品目から客を奪った分を見落とします。販促の効果も、反動と他品目からの移動を引いた正味で評価します(第5章・第6章)。
  4. 守る決まりと表示の条件を、ガードレールとして明文化する。ガードレールは、計算の答えが越えてはいけない線を規則として書いたものです。守らなければならない規則のうち、価格の並びや、通常価格を併記する販促の条件のように式に書けるものは、計算に入れる制約として書きます。表示の文言のように式に書けない条件と、粗利率の下限や一度の改定で動かす幅の目安のように経営の判断で置く目安は、まず計算の後の点検の規則として書き、点検の規則に掛かった品目を人が最終判断する範囲を決めておきます。目安のうち、止めたい線が固まったもの(例題では改定幅の上下15%)は制約に移してよく、制約として入れた規則も点検の一覧に残し、計算の後にもう一度確かめます。仕入先との取り決めの性質のように式に書く前に人が確かめる論点や、顧客の受け止め方のように計算の外で見続ける論点も、あわせて書き出しておきます(第5章・第12章・第13章)。
  5. 見込みと実績の差を測り、次の判断に戻す。本コラムの例題では、推定モデルの見込みは実際の改善より大きく出ました。第13章で述べたとおり、見込みの大きい改定を選ぶほど見込みは実際を上回りやすく、一方で個々の改定では逆に過小に出ることもあります。見込みをそのまま信じず、改定の前に、比べる相手・期間・季節の補正の仕方を決めておき、結果で推定を直します(序章・第13章)。

価格の理論には、ミクロ経済学、計量経済学、オペレーションズ・リサーチ、マーケティング・サイエンスの長い研究の蓄積があり、本コラムで使った推定や最適化は、無償のライブラリで動かせるものばかりです。例題の12品目の価格は、12品目を緑茶・炭酸・水のカテゴリに分け、カテゴリごとに価格の候補の組み合わせを数え上げた合計538,083通りを調べても、約1秒で決まりました。それでも価格が慣習や前年の数字で決められがちな背景には、道具の不足だけでなく、価格を変えた結果を測る仕組みと、推定の誤りを前提に判断する手順の不足があると考えています。本コラムが、自社の価格をどこから見直すかを考える材料になれば幸いです。

在庫と発注量の決め方は弊社コラム『在庫と発注量を決める数理モデル、安全在庫の計算から多段階在庫の最適化まで』で、施策の効果の測り方は弊社コラム『施策の効果を正しく測る、因果推論と効果検証の進め方』で扱っています。値下げと発注、価格の改定と効果検証は、それぞれ表裏の関係にあります。本コラムとあわせて参考にしていただければと思います。

Anagraftでは、データ活用の構想づくりから、価格や販促のような業務課題の定式化、需要の推定と最適化の設計と実装、結果の読み解きと意思決定への接続、社内への定着まで一貫したご支援を行っています。会社概要・ご支援内容の詳細は、以下の資料からご覧いただけます。

Anagraft 会社概要資料(ダウンロードページへ)

本コラムで紹介した書籍一覧

各章末でご紹介した書籍をまとめました。それぞれ、本コラムのどの部分と結びつくかを添えています。

第1章 価格はなぜ経営の問題なのか

『価格の掟 ザ・プライシングマンと呼ばれた男の告白』(ハーマン・サイモン著、上田隆穂監訳、渡部典子訳、中央経済社):原題は Confessions of the Pricing Man で、価格の考え方を経営の側から書いた本です。目次には「価格は重要な利益ドライバーである」「価格差異化という高度なアート」「経済危機への対応と価格戦争」「プライシングはCEOが取り組むべき仕事である」といった章が並びます。この章で共通データを使って確かめた「売価は利益に対して増幅されて効く」「価格の改善の余地は品目ごとの差の付け方にある」という論点を、数理モデルではなく経営の言葉で読み直すのに向いています。

『利益を最大化する価格決定戦略』(上田隆穂、明日香出版社):価格戦略を専門とする研究者が、価格の心理、参照価格、価格戦略の分類、ダイナミック・プライシング、サブスクリプション、流通の価格体系、コンジョイント分析やPSM法による価格の決め方までを1冊で扱った本です。この章で損失の型として挙げた「値引きの常態化」に関わる内的参照価格の節もあり、この記事が数理モデルで扱う範囲の外側にある、顧客の受け止めや流通の取引の論点を補うのに役立ちます。

第2章 価格の問題を記述する

『限界利益分析による価格決定戦略』(窪田千貫、同友館):副題に「コスト吸収、差別化で優位に立つ、値上げ・値下げ戦術」とあるとおり、書名のとおり限界利益の分析を軸に価格の上げ下げを扱う本です。この章では、原価に一律の粗利率や上乗せ額を乗せる規則が、真のモデルで評価すると粗利を下げることを見ました。原価から価格を組み立てる側の考え方を、限界利益という会計の物差しで整理し直すのに役立ちます。

『価格戦略論』(ヘルマン・サイモン、ロバート・J.ドーラン著、吉川尚宏監訳、エコノミクス・コンサルティング研究会訳、ダイヤモンド社):原題は Power Pricing で、価格の決め方を戦略の問題として扱った500ページ近い翻訳書です。この章では、価格の問題を数理モデルの部品に分けて書き出しましたが、その手前にある「どの顧客に、どんな価格の体系で売るか」という経営の問いを広く見渡すための1冊として挙げます。

第3章 需要曲線と価格弾力性を推定する

『計量経済学の第一歩 実証分析のススメ』(田中隆一、有斐閣ストゥディア):操作変数法・パネル・データ分析・マッチング法・回帰不連続デザインまでを章立てで扱う入門書です。この章の内生性と操作変数法の節で触れた考え方を、操作変数法の章から基礎に立ち返って確かめるのに向いています。

『実証分析のための計量経済学 正しい手法と結果の読み方』(山本勲、中央経済社):副題のとおり、手法の選び方と結果の読み方を扱う本で、同時決定や内生性による偏りと、操作変数を使った対処を1つの章で扱っています。この章で見た「標準誤差が小さくても推定が正しいとは限らない」という問題を、実証分析の作法として整理し直すのに役立ちます。

第4章 1品目の価格を最適化する

『ミクロ経済学の力』(神取道宏、日本評論社):消費者行動と企業行動の理論から市場均衡、独占までを扱うミクロ経済学の教科書で、第1章に価格弾力性の節、第5章に独占企業の行動の節があります。この章で使った「売り手が価格を選ぶときの粗利の最大化」と「弾力性と最適な価格の関係」を、経済学の考え方から基礎づけて読むのに向いています。

『ミクロ経済学 第3版』(伊藤元重、日本評論社):需要と供給、需要曲線と消費者行動、費用の構造と供給行動から始まり、第9章で独占の理論を扱う教科書です。この章の前提になっている「需要曲線」「限界費用」「売り手が価格を選ぶ独占の考え方」を、章を追って順に確かめるのに向いています。

第5章 品目をまたいで価格を最適化する

『しっかり学ぶ数理最適化 モデルからアルゴリズムまで』(梅谷俊治、講談社):線形計画・非線形計画・整数計画と組合せ最適化を、定式化からアルゴリズムまで扱う教科書です。整数計画の章には、論理的な制約条件や非凸な非線形関数の近似といった定式化の節があり、この章で行った「候補ごとの0か1の変数で選ぶ」「非線形の粗利を1次式で扱えるように書き換える」ことの考え方を、一般的な形で学び直すのに向いています。分枝限定法など、CBC のようなソルバーが内部で行っている解き方の章もあります。

『Pythonではじめる数理最適化(第2版) ケーススタディでモデリングのスキルを身につけよう』(岩永二郎・石原響太・西村直樹・田中一樹、オーム社):前半のチュートリアルと後半のケーススタディで構成され、学校のクラス編成や割引クーポンキャンペーンの最適化などの実務的な題材を Python で定式化して解く本です。この章のように、業務の方針を制約として書き、結果を業務の言葉で読み直す作業を、別の題材で練習するのに役立ちます。

第6章 販促と値引きを設計する

『プロモーション効果分析』(守口剛、朝倉書店):プロモーションの効果を測る枠組み・データ・分析手法を順に扱い、消費者ごとの違いや参照価格を考慮した効果の測定にも章を割いた本です。「利益視点とカテゴリー視点を考慮したプロモーション効果測定」という章があり、この章で行った「販促品の売上ではなく、カテゴリ全体の粗利で販促を評価する」考え方を、より詳しく学ぶのに向いています。

『マーケティング・サイエンス入門 新版』(古川一郎・守口剛・阿部誠、有斐閣):消費者行動・製品デザイン・プライシング・広告・流通などのマーケティングの意思決定を、データとモデルで扱う入門書で、プロモーションに1章を割いています。販促を、価格や広告を含むマーケティングの意思決定全体の中に位置づけて読み直すのに役立ちます。

第7章 値下げと在庫処分

『マルコフ決定過程 理論とアルゴリズム』(中出康一、コロナ社):状態と行動と確率的な遷移で書かれる意思決定の問題を、動的計画法を出発点にして体系的に解説する本です。この章で使った「最終週から逆向きに価値を求め、各状態で最良の行動を選ぶ」計算は、この本の枠組みでは有限期間のマルコフ決定過程の解き方に当たります。状態の数が増えて表で解けなくなったときの近似の考え方まで含めて、値下げの規則の計算を一般化するのに役立ちます。

『食品ロスの経済学 第4版』(小林富雄、農林統計出版):食品ロスがどこでなぜ発生するのかを、経済学の立場から分析した本です。この章の後半で触れた見切りと食品ロスの関係を、流通の取引慣行や業態ごとの事情まで含めて考えるのに向いています。値下げの規則を粗利の計算だけで決めず、廃棄を減らすことをどう目的に入れるかを考える材料になります。

第8章 レベニューマネジメントで容量を売り分ける

『レベニューマネジメント 収益管理の基礎からダイナミックプライシングまで』(佐藤公俊・澤木勝茂、共立出版):収益管理を経済学の基礎から説き起こし、航空産業の収益管理の章で Littlewood のモデルやオーバーブッキングを、続く章でダイナミックプライシングを扱う日本語の教科書です。この章の保護枠とオーバーブッキングの計算を、数式の導出まで含めて確かめるのに向いています。

『価格分析とレベニューマネジメント入門 Excelによる実践アプローチ』(エリック・ハウゴム著、佐藤公俊・太宰潮・木村隆介訳、千倉書房):価格の分析とレベニューマネジメントの手法を、Excel で手を動かしながら学ぶ入門書です。この章の計算を Python ではなく表計算で追ってみたい方や、現場の担当者と同じ道具で考え方を共有したい方に向いています。

第9章 ダイナミックプライシング

『強化学習(第2版)』(Richard S. Sutton、Andrew G. Barto 著、奥村エルネスト純ほか訳、森北出版):強化学習の標準的な教科書の改訂版で、第3章で有限マルコフ決定過程、第4章で動的計画法を扱っています。この章の価格表の計算は、状態(残り日数と残り席数)ごとに価値をさかのぼって求める動的計画法そのものなので、価値と方策の考え方を一般的な形で整理し直すのに向いています。状態が多すぎて表で持てない場合の近似による解き方も後半で扱われています。

『マルコフ決定過程 モデル化の基礎と応用事例』(前田康成、森北出版):マルコフ決定過程の基本的な問題設定とアルゴリズムから、真のパラメータが変化する場合や、状態・行動・利得の置き方の工夫までを、応用例を交えて説明する本です。この章で「状態に今の価格や残りの改定回数を加える」ことで制約を扱ったように、現実の条件をどう状態と行動に落とし込むかというモデル化の練習に役立ちます。

第10章 価格を試して学ぶ

『バンディット問題の理論とアルゴリズム』(本多淳也・中村篤祥、講談社):機械学習プロフェッショナルシリーズの1冊で、確率的バンディット問題の方策とリグレットの解析、最適腕識別と A/B テスト、線形モデル上のバンディット問題、連続腕バンディットとベイズ最適化までを章立てで扱っています。この章で使った UCB とトンプソン抽出の理論的な裏付けと、需要曲線のような構造を持つ問題(線形モデル上のバンディット)への広げ方を学ぶのに向いています。

『A/Bテスト実践ガイド 真のデータドリブンへ至る信用できる実験とは』(Ron Kohavi・Diane Tang・Ya Xu 著、大杉直也 訳、ドワンゴ):原題は Trustworthy Online Controlled Experiments で、オンラインの対照実験を信頼できる形で回すための本です。実験の実施と分析の流れ、結果を疑うべきときの見分け方、実験の基盤と組織の文化を扱っています。この章の前半で見た、割付・期間・指標の決め方を、組織として実験を回す運用の側から補うのに役立ちます。

第11章 競合と価格

『産業組織とビジネスの経済学』(花薗誠、有斐閣):有斐閣ストゥディアの1冊で、寡占市場での企業競争を価格競争と数量競争に分けて説明する章、製品差別化・広告・スイッチング・コストを競争を緩める非価格戦略として扱う章、談合・カルテルの章を置いています。この章で扱ったベルトラン型の競争と、差別化が価格競争を和らげることを、教科書の順序で確かめるのに向いています。

『産業組織論 理論・戦略・政策を学ぶ』(小田切宏之、有斐閣):寡占での企業間の相互作用、価格戦略の多様性、製品差別化と参入の戦略、カルテルがいつ起き、なぜ持続するかを、それぞれ章を立てて扱う本です。この章の「値上げは相手の反応で決まる」で見た現象や、規則どうしが反応し合って起きた価格戦争と振動を、理論・戦略・政策の3つの面から読み直せます。

『ゲーム理論』第3版(岡田章、有斐閣):戦略形ゲーム・展開形ゲームから繰り返しゲーム・進化ゲームまでを扱うゲーム理論の教科書です。この章で「釣り合い」と呼んだ状態を扱う戦略形ゲームの考え方と、同じ相手と何度も価格を競うときに協調が保たれる仕組み(繰り返しゲーム)を、数理の面から学ぶのに役立ちます。

第12章 法規制・公平性・顧客の受け止め

『景品表示法〔第7版〕』(高居良平 編著、商事法務、2024年):版元の紹介によると、消費者庁の運用実務を踏まえて立案担当者が法律の全体像を解説した本で、確約手続や直罰規定の導入、課徴金制度の見直しを内容とする令和5年改正を反映しています。目次には価格に関する有利誤認表示の項があり、この章で引いた価格表示ガイドラインの読み方を、事例とともに確かめるのに向いています。

『独占禁止法』第4版(白石忠志、有斐閣、2023年):版元の紹介によると、公正取引委員会の事例・裁判例・ガイドラインを網羅して体系的に整理した体系書で、令和元年の独占禁止法改正に対応しています。この章では不当廉売・再販売価格の拘束・不当な取引制限を、条文とガイドラインの範囲で価格のモデルに引き直しましたが、それぞれの要件の解釈や先例を確かめたいときの手引きになります。

『行動経済学の逆襲』上(リチャード・セイラー、遠藤真美 訳、早川書房、ハヤカワ文庫NF、2019年):著者は、この章で紹介した公平感の論文の共著者の1人です。目次によると、上巻の第4部「カーネマンの研究室に入り浸る 1984〜85年」に「何を『公正』と感じるか」「不公正な人は罰したい」などの章があり、論文の調査がどのような問題意識から行われたかを、著者自身の言葉でたどれます。単行本(2016年)もあります。

第13章 現場に入れる

『実践プロフェッショナル 価格戦略入門:ケースで学ぶ利益最大化の理論と方法』(吉川尚宏、ダイヤモンド社):戦略的な価格設定が企業の利益に与える影響の大きさを出発点に、ミクロ経済学やゲーム理論の基礎から、バンドリング・価格差別・顧客生涯価値・B2B の価格戦略までを、多くのケースで解説しています。この章で扱った業務の流れや承認の段で、推奨価格を見て採否を決める側が持っておきたい、価格戦略の考え方の土台を補えます。

『効果検証入門:正しい比較のための因果推論/計量経済学の基礎』(安井翔太 著、株式会社ホクソエム 監修、技術評論社):選択バイアスとランダム化比較試験、回帰分析、傾向スコア、差の差の分析と CausalImpact、回帰不連続デザイン(ある基準の値の前後で、ほかの条件がほぼ同じ観測どうしを比べる方法。第14章でも触れます)を、ビジネスの施策の効果を測る立場から解説しています。この章の効果測定の節で、単純な前後比較が季節に埋もれることを示しましたが、比べる相手をどう選び、前提をどう確かめるかを実務の水準で学べます。

第14章 事例と最新動向

『施策デザインのための機械学習入門 データ分析技術のビジネス活用における正しい考え方』(齋藤優太・安井翔太 著、ホクソエム 監修、技術評論社):機械学習の予測を、そのまま施策の判断に使うと何が起きるかを、ビジネスの意思決定の側から整理した本です。この章で述べた、需要予測の精度が高いことと価格を変えたときの効果を正しく捉えていることは別だという問題を、より一般的な形で考える助けになります。

『大規模言語モデル入門』(山田育矢 監修・著、鈴木正敏・山田康輔・李凌寒 著、技術評論社):大規模言語モデルの仕組みを、モデルの構造から実装まで順に解説した本です。価格の業務で大規模言語モデルに何を任せられ、何を任せられないかを判断するには、その出力がどう作られるかを知っておくことが役に立ちます。

参考情報

本コラムの記述は、次の資料を2026年10月に確認して書いています。ライブラリの関数名や引数は版によって変わりますので、実際に動かす際は各ライブラリの公式ドキュメントで現行の仕様をご確認ください。

第1章

第2章

第3章

第4章

第5章

第6章

第7章

第8章

第9章

第10章

第11章

第12章

第13章

第14章