大数据文摘出品
编译:杨威、夏雅薇
如果你经常逛商场,就会发现一个奇怪的现象:像Target,沃尔玛、JCPenney和Kohl、汉堡王和麦当劳,这一类存在竞争关系的商店,总是在附近开店,并且通常开在彼此步行距离范围之内。
这个现象让人惊讶。为什么这些商场不在远离竞争对手的地方开店以减少竞争呢?
支撑这一切的是一个神奇的博弈论法则——霍特林法则,一起了解一下!
霍特林法则和商店选址
霍特林法则属于经典博弈论范畴,用于模拟公司选址在何处以及为何选址所处的位置。
详细了解它之前,让我们先来玩一个小游戏。
玩法如下:
海滩上有2个竞争对手(为了数学上的简单性,假设一个从-1到1的线性空间);
他们销售相同的产品(即客户在竞争对手之间没有偏好,所以可以排除价格因素。注意这也意味着“市场份额”也取决于他们选择的位置);
他们的“商店”可以选址在沿着海滩的任何地方;
游戏重复进行。
玩家的目标是获得最大的市场份额(或获取海滩面积大的玩家获胜)。
热狗摊儿选址!
接下来,游戏开始。
在下图中,我们看到两个热狗摊儿,每个都从海滩的两端开始,分别控制着一半的海滩热狗市场。
最初,两家供应商在海滩上均拥有1个单位的市场份额。
然而,突然有个增加市场份额的机会!如果Red hot dog供应商移动到0标记,它的市场便从-1到0的份额扩大了0到0.5,而Blue供应商保留0.5到1(见下文)。
红色供应商移动到0,它获得额外0.5海滩。
有些令人惊讶的是,最佳解决方案是让每个热狗供应商准确地位于中间位置,因为他们可以进入最大的市场,而无需让竞争对手重新选择定位并从中获取市场份额。
这个结果是位置游戏里的纳什均衡,并且是Hotelling定律的解决方案 ——竞争对手彼此靠近以最大化市场份额。如果你对这个结果背后的更多游戏理论/数学感兴趣,我强烈推荐关注Presh Talwalkar的网站:Mind Your Decisions。
最佳解决方案是两个竞争对手位置相同
现实生活中的霍特林法则——超市选址
在现实生活中同样有很多霍特林定律的例子。
麦当劳和汉堡王-或者肯德基和必胜客
全食超市和喬氏超市
加油站(想想同一个交叉路口有多少加油站)
政治 - 想想“中间竞争”的概念
零售超市选址是其中一个很有趣的例子,其以极低的利润销售几乎相同的产品。
为了了解这些商店如何选址,我收集了所有关美国主要连锁零售超市Target、Walmart、JCPenney和Kohl在美国的地理位置数据。以下是数据样本:
就商店数量而言,我们的数据显示如下:
首先让我们将所有的地理定位绘制到同一个地图上。
太神奇了!我们看到商店的密集度可能与人口密度相对应,这是我们纯粹基于市场需求的预期。
最有趣的是:与其他零售商相比,沃尔玛在该国农村地区的拥有更多零售店。
获得城市信息
为了控制人口密度,让我们选择人口相对密集的城市位置,看看我们是否得到了城市层面的聚类。下面我们看到丹佛都市区:
看看Target和沃尔玛,我们可以看到一些紧密聚集在一起的商店:
这些地图肯定表明霍特林法则在起作用。计算了商店之间的距离后,丹佛地区最近的Target和沃尔玛之间的平均距离仅为2.09英里。
另一个有趣的点:Target一直呆在沃尔玛附近,反之亦然。
距离Target最近的沃尔玛平均距离酒店有13.7英里,距离沃尔玛最近的目标地平均18英里。
以下是迈阿密地区的Target和沃尔玛分布点:
结论
在对零售商如何选址进行建模时,显然运用了霍特林法则。很明显,这仅仅是一个模型,所以它没有考虑搬迁成本(将一个街区的Target商店转移到一个街区将非常昂贵),定价差异,品牌忠诚度和许多其他变量。然而,它确实在一定程度上很好地说明了竞争对手通常彼此非常接近的原因。
为了进一步的分析其他因素,包括人口普查数据,商店之间的驾驶时间和人口密度可能会产生更说服力的结果。我们将在下次呈现给大家!
from bokeh.io import push_notebook, show, output_notebook, output_file
from bokeh.plotting import figure, save
from bokeh.models import ColumnDataSource, Circle, HoverTool, ImageURL
from bokeh.tile_providers import get_provider, CARTODBPOSITRON
# create colors for each stores location
cmap = { "Target": "#e80018", "Walmart": "#007EC6", "Kohls": "#222", "JCPenney": "#38934c",}
source1 = ColumnDataSource(data=dict( x=df['coords_x'], y=df['coords_y'], storename=df['store'], color=[cmap[x] for x in df.store]))
hover1 = HoverTool(tooltips=[ ("Store Name", "@storename")])
p1 = figure(x_range=(-14400000, -7500000), y_range=(3650000, 5200000),
x_axis_type="mercator", y_axis_type="mercator",
plot_width=1000,
tools=[hover1, 'pan', 'wheel_zoom','save'])
p1.add_tile(CARTODBPOSITRON)
p1.circle(x='x', y='y', source=source1, size=6,
line_color="color", fill_color='color', fill_alpha=0.35)
相关报道:
https://towardsdatascience.com/too-close-for-comfort-57d58cec3740
实习/全职编辑记者招聘ing
加入我们,亲身体验一家专业科技媒体采写的每个细节,在最有前景的行业,和一群遍布全球最优秀的人一起成长。坐标北京·清华东门,在大数据文摘主页对话页回复“招聘”了解详情。简历请直接发送至zz@bigdatadigest.cn
志愿者介绍
后台回复“志愿者”加入我们