ハフモデルは、店舗の魅力度と距離から「ある地区の住民がどの店に行くか」を確率で出す商圏分析のモデルです。1963年にデイヴィッド・ハフが提唱し、日本では旧通商産業省が大型店の出店調整に使った「修正ハフモデル」として広まりました。
この記事では、計算式と変数の意味、3地区×3店舗の計算例(Pythonコード付き)、修正ハフモデル・アドバンスハフモデル・小売吸引力指数との違い、距離抵抗係数λを自社の来店客データで決める手順を順に説明します。
まとめ:ハフモデルの要点
- 定義:地区iの消費者が店舗jを選ぶ確率は、店舗jの「魅力度÷距離のλ乗」が候補店全体の合計に占める割合です。
- λが結果を大きく動かす:後述の計算例では、λを1から3に変えるだけで自店の吸引人口が7,500人から8,763人へ17%動きます。既定値のまま使わず、来店客データで推定してください。
- 修正ハフモデル:旧通商産業省が簡便化した版で、魅力度に売場面積を使い、λを2に固定します。2000年に廃止された大規模小売店舗法の商業調整で使われました。
- アドバンスハフモデル:魅力度に複数の変数を使い、道路距離や移動時間で計算する拡張です。統一された学術上の定義はなく、GIS製品の機能名として使われています。
- 小売吸引力指数は別物:市町村の1人当たり小売販売額を県平均で割った指標で、店舗ごとの来店確率は出しません。
ハフモデルの定義と原典
ハフモデル(Huff model)は、消費者の店舗選択を確率で表すモデルです。ライリーの法則やコンバースの分岐点公式は、2つの都市の吸引力の比や、その境界点を求めます。これに対してハフモデルは、同じ地区の客が複数の店に分かれて向かう様子を確率で表します。商圏を「線」でなく「濃淡」で描く点が、わかりやすい違いです。「ハフ分析」「ハフ・モデル」も同じものを指します。
原典は次の2本です。
- Huff, D. L. (1963). A Probabilistic Analysis of Shopping Center Trade Areas. Land Economics, 39(1), 81–90.
- Huff, D. L. (1964). Defining and Estimating a Trading Area. Journal of Marketing, 28(3), 34–38.
ライリーの法則・コンバースの分岐点との違い
| モデル | 提唱 | 出す値 |
|---|---|---|
| ライリーの小売引力の法則 | 1931年 W. J. ライリー | 2都市が中間の町から引き付ける販売額の比 |
| コンバースの分岐点公式 | 1949年 P. D. コンバース | 2都市の商圏の境界点 |
| ハフモデル | 1963年 D. L. ハフ | 地区ごと・店舗ごとの来店確率 |
ライリーの法則は、都市の引き付ける力が人口に比例し距離の2乗に反比例するとみなします。コンバースの分岐点は、都市Aからの距離で「2都市間の距離 ÷(1 + √(Bの人口 ÷ Aの人口))」です。Bが大きいほど境界はA寄りになります。境界の内側の客はすべて一方の都市へ行く、という割り切りなので、店が何十もある都市部の競合分析には使えません。そこで、全候補店で客を按分するハフモデルが使われます。
ハフモデルの計算式と変数の意味
P_ij = ( S_j ÷ T_ij^λ ) ÷ Σ_k ( S_k ÷ T_ik^λ )
E_ij = P_ij × C_i
- P_ij:地区iの消費者が店舗jを選ぶ確率。地区内で全候補店を合計すると1になります。
- S_j:店舗jの魅力度。伝統的には売場面積を使います。
- T_ij:地区iから店舗jまでの距離または移動時間。
- λ:距離抵抗係数。大きいほど、遠い店の確率が急に下がります。
- C_i:地区iの人口(または世帯数・対象商材の支出総額)。E_ijは、人口を使う場合は吸引人口、世帯数なら吸引世帯数、支出総額なら店舗jへの推定支出額です。
魅力度にも指数αを付けて「S_jのα乗」とする一般化形もあります。ArcGIS ProのHuff Modelツールは、魅力度の指数を1、距離の指数を-1.5(距離の指数を負の値で入力する流儀)を既定値にしています。
3地区×3店舗の吸引人口の計算例
人口8,000人・12,000人・5,000人の3地区に、自店(2,000㎡)・競合X(5,000㎡)・競合Y(1,200㎡)がある想定で、λ=2として計算します。距離は直線距離(km)の仮の値です。
# huff.py
zones = {"A地区": 8000, "B地区": 12000, "C地区": 5000} # 地区の人口
stores = {"自店": 2000, "競合X": 5000, "競合Y": 1200} # 売場面積(m2)
dist = { # 地区から店舗までの距離(km)
"A地区": {"自店": 1.0, "競合X": 3.0, "競合Y": 2.0},
"B地区": {"自店": 2.5, "競合X": 1.5, "競合Y": 3.0},
"C地区": {"自店": 1.5, "競合X": 4.0, "競合Y": 0.8},
}
def huff(lam, alpha=1.0):
prob = {}
for z in zones:
u = {s: stores[s] ** alpha / dist[z][s] ** lam for s in stores}
total = sum(u.values())
prob[z] = {s: u[s] / total for s in stores}
return prob
def draw(prob):
return {s: round(sum(zones[z] * prob[z][s] for z in zones)) for s in stores}
if __name__ == "__main__":
p = huff(lam=2)
for z in zones:
print(z, {s: round(v, 3) for s, v in p[z].items()})
for lam in (1, 2, 3):
print(f"lambda={lam}", draw(huff(lam)))
Python 3.9.6で実行した出力です。
A地区 {'自店': 0.7, '競合X': 0.195, '競合Y': 0.105}
B地区 {'自店': 0.12, '競合X': 0.831, '競合Y': 0.05}
C地区 {'自店': 0.289, '競合X': 0.102, '競合Y': 0.609}
lambda=1 {'自店': 7500, '競合X': 13479, '競合Y': 4021}
lambda=2 {'自店': 8483, '競合X': 12031, '競合Y': 4486}
lambda=3 {'自店': 8763, '競合X': 11513, '競合Y': 4724}
A地区は自店まで1kmなので、自店を選ぶ確率が70%です。B地区は5,000㎡の競合Xが1.5kmにあるため、自店の確率は12%まで落ちます。地区人口×確率を足した吸引人口(λ=2)は自店8,483人・競合X 12,031人・競合Y 4,486人で、合計は3地区の人口25,000人に一致します。売上予測にするなら、人口の代わりに地区ごとの購買力(1人当たり支出額×人口)を掛けます。
距離抵抗係数λの意味と既定値
λは、その業種の客が距離をどれだけ嫌うかを表します。食料品のような最寄品では大きく、家具・自動車のような買回品では小さくなります。参照先によって既定値が違う点に注意してください。
| 参照先 | λ(距離の指数) |
|---|---|
| 旧通商産業省の修正ハフモデル | 2に固定 |
| ArcGIS Pro Huff Modelツールの既定値 | 1.5(-1.5で入力) |
| ESRIジャパンの用語解説 | 通常1.5〜2.0 |
上の計算例では、λを1・2・3と上げるほど自店の吸引人口は7,500人・8,483人・8,763人と増え、大型だが遠い競合Xは13,479人・12,031人・11,513人と減りました。λが大きいほど「近い店が勝つ」からです。λを1から3に変えるだけで自店の数字が17%動くので、既定値で出した売上予測は前提の置き方で大きく変わる、と考えてください。
修正ハフモデル・アドバンスハフモデルとの違い
| 項目 | ハフモデル | 修正ハフモデル | アドバンスハフモデル |
|---|---|---|---|
| 魅力度 | 店舗規模など | 売場面積 | 売場面積・駐車場台数など複数 |
| 距離 | 距離または時間 | 距離 | 道路距離・走行時間も可 |
| λ | 推定または仮定 | 2に固定 | 製品・設定による |
| 位置付け | 学術モデル | 旧通産省の行政運用 | GIS製品の機能名 |
修正ハフモデル:旧通産省が大店法の商業調整で使った簡便版
修正ハフモデルは、旧通商産業省がハフモデルを簡便化し、距離抵抗係数を2に固定したものです(山梨県商工労働部の資料の定義)。魅力度には売場面積を使います。大規模小売店舗法(大店法)の時代に、大型店の出店が地元商店街の客をどれだけ減らすかを示す材料として使われました。1991年2月22日の衆議院商工委員会では、通産省が新潟の商調協(商業活動調整協議会)にハフモデルの計算を「あくまでも審議の参考として」渡したと政府委員が答弁しています。
大店法は2000年に廃止され、同年6月1日施行の大規模小売店舗立地法は、周辺地域の生活環境の保持(騒音・交通など)を目的とする法律です。商業調整は行わないため、修正ハフモデルを使う法定の場面はなくなりました。
それでも自治体の影響試算には使われています。山梨県商工労働部は2007年5月22日の調査結果「大規模商業施設の立地が甲府市中心商店街に与える影響調査結果」で、昭和町の大型SC(店舗面積4.8万㎡)と甲斐市の大型SCが甲府市中心商店街に与える影響を修正ハフモデルで推計しました。売上高の減少は昭和町SCで△6.5%(33.0億円)、甲斐市SCで△3.4%(17.2億円)、両SC合計で△9.2%(46.3億円)です。同年11月27日の続報では、昭和町SCが2.8万㎡に縮小した後の減少を△3.8%(19.2億円)としています。この調査では、平成16年決算期の財務指標から算出した中小小売業の損益分岐点比率94.1%を使い、売上減少率約6%を影響判断の目安としています。
アドバンスハフモデル:複数の魅力度と道路距離を使う拡張
EsriはArcGIS Business Analyst 9.1の公式マニュアルで「Advanced Huff Model with Statistical Calibration」を、ハフ本人による改良を取り入れた機能として載せていました。直線距離・走行時間・走行距離を選べ、複数の魅力度変数を使い、実際の購買行動や市場調査の結果で指数を較正できます。日本ではマップマーケティングのTerraMap Web Plusが、売場面積と駐車場台数など複数項目の魅力度に対応する機能を「アドバンスハフモデル」と呼んでいます。
つまりアドバンスハフモデルは、統一された数式の名前ではありません。製品ごとに中身が違うので、提案書や見積もりでこの語が出たら、魅力度にどの変数を使うか、距離は直線・道路・時間のどれか、指数は固定か較正か、の3点を必ず確認してください。
小売吸引力指数との違い
「小売吸引力指数」はハフモデルと名前が似ていますが、店舗ではなく市町村単位の指標です。式は「市町村の人口1人当たり小売販売額 ÷ 都道府県の人口1人当たり小売販売額」で、1.00以上なら域外から買物客を引き付け、1.00未満なら域外へ流出していると読みます(日本商工会議所の資料の定義)。中小企業庁の資料では「商業人口(県人口×市町村の年間商品販売額÷県の年間商品販売額)÷行政人口」と表しますが、整理すると同じ値になります。
使い分けは明確です。小売吸引力指数は「この町は買物客を集める側か、流出する側か」を見る最初のふるいで、ハフモデルは「どの地区の客がどの店に行くか」を見る出店・競合分析の道具です。
λと魅力度を来店客データで推定する手順
既定値のλを使う代わりに、既存店の来店客データから推定します。必要なのは地区別の自店シェア(その地区の買物客のうち自店に来た割合)です。ポイントカード会員の住所や来店客の居住地区だけでは、地区内の競合店利用を含む分母が分からず、自店シェアは求められません。対象商材・期間・候補店舗をそろえ、地区別に各店の利用回数を調べる調査などが必要です。
- 地区ごとに、利用状況の調査結果から自店を選んだ割合(観測シェア)を出す。
- λを0.5〜3.5の範囲で動かし、モデルの自店確率と観測シェアの差の二乗和が最小になる値を探す。
- 求めたλを、推定に使わなかった別の既存店に当てはめて誤差を確かめてから、出店候補地の計算に使う。
前出のコードをhuff.py、次のコードを同じフォルダーのfit.pyとして保存し、python3 fit.pyで実行します。仮の観測シェア(A地区62%・B地区15%・C地区33%)にλを合わせる例です。
# fit.py
from huff import huff, zones
observed = {"A地区": 0.62, "B地区": 0.15, "C地区": 0.33} # 来店客調査で得た自店シェア
def sse(lam):
p = huff(lam)
return sum((p[z]["自店"] - observed[z]) ** 2 for z in zones)
grid = [round(0.5 + 0.1 * i, 1) for i in range(31)] # 0.5〜3.5を0.1刻み
best = min(grid, key=sse)
print("lambda =", best, "SSE =", round(sse(best), 5))
lambda = 1.6 SSE = 0.00031
0.5〜3.5を0.1刻みで調べた候補の中ではλ=1.6の二乗和が最小でした。これは仮の3地区のデータへの当てはまりであり、別地区や別店舗での予測精度を保証する値ではありません。魅力度の変数が複数あるときは、MCIモデル(Nakanishi & Cooper, 1974, Journal of Marketing Research 11(3), 303–311)の対数中心化で式を線形回帰に直し、各変数の指数を最小二乗法で推定するのが標準的な方法です。ArcGIS ProのHuff Model Calibrationツールも顧客の位置データを必須入力とし、推定した指数は入力した市場に固有で、別の市場に当てはめると信頼性が下がると注記しています。
新規出店で既存店が食われる量の見積もり
同じ地区に自店2号(1,500㎡、B地区から0.8km)を出した場合を計算します。
# sim.py
import huff as h
before = h.draw(h.huff(2))
h.stores["自店2号"] = 1500 # 出店候補の売場面積
for z, d in {"A地区": 3.5, "B地区": 0.8, "C地区": 3.0}.items():
h.dist[z]["自店2号"] = d
after = h.draw(h.huff(2))
for s in after:
print(s, before.get(s, 0), "->", after[s])
自店 8483 -> 7508
競合X 12031 -> 7287
競合Y 4486 -> 4015
自店2号 0 -> 6189
自店2号は6,189人を集めますが、そのうち975人は既存の自店から移った客です。競合Xの吸引人口は約4,744人、競合Yは約471人減る計算です。各店舗の人数を個別に丸めているため、既存自店の減少分を含む合計と新店の吸引人口には1人の丸め差があります。ドミナント戦略で自社店舗どうしの食い合いをどこまで許すかは、この内訳から議論を始められます。
ハフモデルが外れる条件と使わない方がよい場面
ハフモデルの式には、結果を誤らせる性質がいくつか組み込まれています。次の条件に当てはまるなら、結果をそのまま出店判断に使わないでください。
- 同じ地区内では、新店追加による既存各店の確率の減少率が等しい:上の例で、A地区の「自店÷競合X」の確率比は自店2号の出店前後とも3.6で変わりません。業態の近い店ほど強く食い合う現実の動きは表せません。
- 直線距離のまま使う:川・線路・幹線道路で地域が分断される場所では、直線距離が近くても客は来ません。道路距離か移動時間に置き換えます。
- 通勤動線で買われる店:駅ナカやオフィス街の店は、居住地からの距離では客の動きを説明できません。居住人口を前提にしたハフモデルは向きません。
- ネット購入の比率が高い商材:書籍や家電のように通販の比率が高い商材では、店どうしで客を分け合う前提が崩れ、店舗の市場規模を過大に見積もります。
来店客データがなくλを較正できない状態で、ハフモデルの売上予測だけを根拠に大型投資の出店を決めるべきではありません。この記事の仮想例ではλを1から2に変えると自店の吸引人口が約13%増えており、変化の方向や幅は店舗配置・魅力度・地区人口によって異なるため、既定値の結果は「候補地の相対比較」までに留め、金額の予測には使わないのが安全です。
商圏分析で使うデータとツール
- 人口:国勢調査の地域メッシュ統計(1km・500m・250mなど)や町丁・字別の集計。取得方法は商圏調査の進め方で解説しています。
- 店舗の魅力度:競合の売場面積・駐車場台数。複数変数を使うなら前述の較正が前提です。
- 距離:数地区なら地図で測れますが、道路距離・移動時間を数百地区で出すならGISの道路網計算を使います。
- ツール:ArcGIS ProのBusiness Analyst(Huff Model/Huff Model Calibration)、技研商事のMarketAnalyzer 5(グラビティモデル機能)、パスコのMarketPlanner Desktop(道路距離を使うハフモデル)、マップマーケティングのTerraMap Web Plus(アドバンスハフモデル)が計算機能を持っています。製品の選び方はGISソフトの比較を参照してください。
ハフモデルで出した吸引人口は、売上予測の重回帰分析に説明変数として入れる使い方もあります。地域ごとの施策全体の組み立てはエリアマーケティングの目的と始め方で扱っています。
ハフモデルに関するよくある質問
ハフモデルはExcelで計算できますか?
できます。地区×店舗の表を作り、各セルに「魅力度÷距離のλ乗」を入れ、地区ごとの合計で割れば確率になります。人口を掛けて店舗ごとに合計すれば吸引人口です。道路距離を数百地区で求める段階になったらGISを使います。
ハフ分析とハフモデルは同じものですか?
同じです。ハフモデルを使った商圏分析を「ハフ分析」と呼ぶことがあります。
距離抵抗係数λはいくつにすればよいですか?
既存店の来店客データから推定するのが原則です。データがない段階の目安としては、修正ハフモデルの2、ArcGIS Proの既定値1.5がありますが、どちらも自社の業種に合う保証はありません。
修正ハフモデルは今も使われていますか?
大店法の廃止で法定の商業調整はなくなりましたが、自治体が大型店の影響を試算する場面で使われています。山梨県は2007年に、甲府市中心商店街への影響を修正ハフモデルで推計しました。
ハフモデルの原論文はどれですか?
1963年のLand Economics掲載「A Probabilistic Analysis of Shopping Center Trade Areas」と、1964年のJournal of Marketing掲載「Defining and Estimating a Trading Area」の2本です。