简介:雪湖资本发布的《瑞幸咖啡投资研究报告》(2022年11月,54页)是一份面向投资者、分析师及关注中概消费赛道人士的深度投研资料。报告围绕瑞幸咖啡的浴火重生,系统拆解其商业重塑路径:饮料化咖啡如何扩大市场规模、直营与加盟结合的模式如何提升扩张效率、盈利门店如何带来经营杠杆,并明确给出目标市值与股价预测。风险因素部分同样完整,涵盖行业竞争加剧、疫情红利消退等不确定性。文件包为单个PDF文件,大小2.42MB,便于直接阅读和检索;已有137人学习。通过这份报告,读者不仅能梳理瑞幸的护城河和单店经济模型,还能学习其复兴过程中的关键决策与财务测算思路,形成从商业模式、财务预测到风险判断的闭环分析能力,为独立评估咖啡赛道公司提供参考。
1. 《雪湖资本-瑞幸咖啡投资研究报告(中)-2022.11-54页》到底在讲什么:一份想说服你长期看多的投研拆解
这份PDF被转到我手上时,群里已经在讨论它是不是又一个“咖啡信仰充值包”。文件名里信息很足:发布方是对冲基金背景的团队,标的是从造假风波里爬出来的连锁咖啡品牌,时间是2022年11月,恰好卡在当年三季报之后。它要回答的问题不复杂:这家公司能不能从“恢复增长”走到“稳定盈利”,以及什么价格才算有安全边际。这篇文章不替你复述那54页内容,而是把这类看多研报的骨架拆开,给你一套能照着复现的单店模型测算模板,再讲清楚哪些参数最容易被乐观假设带偏。适合两类人:想认真评估这家公司基本面的人,以及想把这套方法迁移到其他连锁业态的从业者。
2. 研报分析的骨架:咖啡连锁的四层递进,从行业空间到单店模型
我拿到一份这类报告,习惯不是先翻结论页,而是先看它怎么搭结构。头部机构的行业研报高度模板化,但模板本身恰恰是信息:先讲赛道空间,再讲单店模型,然后讲扩张路径,最后给利润预测与估值。四层结构层层递进,每一层都在为下一层提供输入。如果你读到的报告跳过了其中某层,比如直接给你利润预测却不给单店假设,那这份报告的透明度就要打问号。
这套框架之所以被反复使用,是因为连锁消费的利润预测本质上是一个乘法结构:利润等于门店数量乘以单店利润,再乘以公司层面的费用率。任何一个因子的微小偏差,在乘法结构里都会被逐层放大。所以读报告的第一步不是判断结论对不对,而是把每一层的假设原文摘出来,单独验证。
2.1 行业空间测算:为何所有连锁消费报告都从人均杯数讲起
行业空间是估值天花板。常见做法是先给一个总量公式:市场容量等于目标人口乘以咖啡渗透率,再乘以年人均消费杯数与单杯价格。四类参数里,人口是相对确定的,渗透率有调研数据支撑,单杯价格可观测,唯一需要拍脑袋的是“人均杯数增速”。这一层的核心矛盾在于:渗透率提升的叙事很难被证伪,但它决定了五年后门店总数的上限。
我一般会做两件事。第一,把报告里引用的市场容量数字拆成上述四个因子,看哪个因子贡献了最多的增长。第二,用城市层级做交叉验证:一线城市咖啡渗透率已经很高,增长主要靠杯数提升;下沉市场的杯数很低,增长主要靠门店渗透。如果一份报告只用全国平均渗透率讲故事,那它对区域差异的敏感度就偏弱,五年预测的置信度要下调。
2.2 单店经济模型:把一杯咖啡拆成收入与成本的九个参数
单店模型是整个报告的承重墙。门店拆解的逻辑是:单店收入等于日均销量乘以客单价再乘以营业天数,单店利润则是从这个收入里依次扣掉原材料、人工、租金、水电杂费和折旧。九个参数里,日均销量和租金占比是最大的两个变量。销量决定收入上限,租金决定成本刚性,这两个参数一旦偏离真实值,单店利润会被成倍拉偏。
成熟标的的单店模型通常落在以下区间,仅供参考,不构成任何投资建议:
| 参数 | 含义 | 常见健康区间 | 需要警惕的信号 |
|---|---|---|---|
| 日均销量 | 每天出杯数 | 400-600杯 | 外卖占比过高导致忙而不赚 |
| 客单价 | 实际到手均价 | 14-18元 | 促销期均价下探超过10% |
| 原材料占比 | 原料成本/收入 | 40%-48% | 占比持续上行说明提价能力弱 |
| 租金占收入 | 月租/月收入 | 低于20% | 商场店续约时普遍涨租15%起 |
| 回本周期 | 总投资/单店月净利 | 8-18个月 | 超过24个月基本不能碰 |
单店模型的输出不只是单店利润,还有一个关键中间变量:现金回本周期。这个指标能把“账面盈利”和“真实可复制”区分开。回本周期短,意味着加盟商有动力持续开店,扩张不需要太多自有资金;回本周期长,加盟商就会躺平,门店网络增长一定会放缓。
2.3 自营与加盟的报表口径:扩张速度取决于哪种现金流
连锁咖啡普遍采用自营加加盟并行的结构,但两种模式对报表的影响完全不同。自营门店的收入全额确认,收入规模大、毛利率薄、资本开支重;加盟门店的终端收入不进报表,公司确认的是向加盟商销售原料、设备和收取加盟费对应的供应链收入,毛利率高、收入规模小。行业报道和研报里常用的“终端销售规模”是GMV口径,和财报收入往往是两倍以上的差距。
读报告的判断点是:扩张预测里如果把加盟门店按自营门店的单店收入去算,收入预测就会系统性虚高。反过来,如果只看财报收入不看GMV,又会低估品牌对加盟体系的控盘能力。正确做法是把两类门店拆开建模,自营看收入与利润,加盟看供应链毛利与门店增速之间的领先滞后关系。
2.4 利润预测与估值锚点:乘法结构如何把乐观吹大三倍
利润预测是整个报告的终点。它的结构是:公司净利润等于自营门店利润加加盟供应链利润,再减去总部费用与税费。总部费用包含研发、管理和营销,在扩张期通常会增长,但不少报告假设总部费用增速远低于收入增速,这一条本质上在赌规模效应可以持续释放。规模效应确实存在,但它不是线性的:门店密度达到某个水平后,管理半径和品控成本会重新抬头。
估值锚点随之而来。报告给出的目标价通常是基于几年后的预期利润乘以一个目标市盈率,再贴现回来。这里的弹性非常大:门店数多预测一成,单店利润多预测一成,市盈率多给五倍,三者叠加后的目标价可能比中性假设高出百分之三四十。所以不要只记住目标价,要把目标价拆回门店数、单店利润和市盈率三个输入,分别问一句“这个数是否激进”。
3. 把研报观点变成能复现的测算表:用 Python 重建门店扩张与利润模型
读完结构之后,下一步是动手把报告里的观点变成自己的测算表。我习惯用 Python 做这件事,原因很简单:门店扩张是多年度的循环计算,Excel 也能做,但参数改起来没有脚本方便,敏感性分析更是要重复操作。下面这套代码不针对任何特定公司,参数全部用演示值,你可以把财报或研报里读到的数字直接替换进去。
3.1 输入数据准备:四张指标卡的字段与口径
动手写代码前,先把输入整理成四张表:门店数据、单店模型参数、扩张计划、费用率假设。门店数据要区分自营和加盟的期末数量、全年净增数量;单店模型参数需要日均销量、客单价、原材料占比、月租金、月人工、月水电;扩张计划按年度给出自营与加盟各自的新增门店数;费用率假设单独记录总部费用占收入的比重。口径统一为年度,避免混入季度数据。
# 四张指标卡:演示数据,替换为标的公司最新披露值 store_data = { "self_owned": 6000, # 自营门店期初数 "franchise": 3000, # 加盟门店期初数 } unit_model = { "daily_cups": 500, # 日均销量(杯) "price": 15.5, # 客单价(元) "material_ratio": 0.45, # 原材料成本占收入比 "rent": 22000, # 月租金(元) "labor": 32000, # 月人工与社保(元) "other": 9000, # 水电、杂费等(元) } expansion_plan = { "self_owned_new": [900, 1000, 1100, 1200, 1200], # 五年自营净增 "franchise_new": [1200, 1100, 1000, 900, 800], # 五年加盟净增 } overhead_ratio = 0.12 # 总部费用占收入比例这里需要特别说明“净增”和“新开”的区别。净增是期末减期初的门店数,已经扣除了关店。扩张计划应该用净增而不是新开,因为连锁业态每年都有一定比例的门店关闭,如果只按新开数预测,收入会高估。演示数据里自营净增逐年走高,加盟净增逐年回落,代表模型假设品牌逐步从加盟扩张转向自营深耕,这是一种常见的战略叙事,不是固定规则。
3.2 单店月度利润测算:先算 EBITDA 再谈净利
单店模型直接从指标卡里读取参数,先算收入,再扣变动成本和固定成本,得到单店月度EBITDA。注意这里刻意不直接算净利润,因为折旧和税费在门店层面经常由不同主体承担:自营门店的折旧在公司报表里,加盟门店的折旧由加盟商承担。先把EBITDA算清楚,后面做公司和门店的分拆才不会打架。
def store_monthly_ebitda(m, days=30): revenue = m["daily_cups"] * m["price"] * days material = revenue * m["material_ratio"] gross_profit = revenue - material ebitda = gross_profit - m["rent"] - m["labor"] - m["other"] return revenue, ebitda rev, ebitda = store_monthly_ebitda(unit_model) print(f"单店月收入: {rev:,.0f} 元") print(f"单店月EBITDA: {ebitda:,.0f} 元")逻辑上这个函数做了三件事:先用量价乘出月收入,再用原材料占比算毛利,最后把租金、人工、水电作为固定成本一次扣掉。参数里最容易翻车的是租金:一线城市核心商圈和下沉市场社区店的月租金可以差出三四倍,用平均值做单店模型没有意义。所以这个函数更适合用来做分层测算,比如把门店分成商圈店、写字楼店、社区店三档,分别给参数,而不是只跑一个全国平均。
如果运行结果里单店月EBITDA接近零,说明日均销量或租金参数有一个偏离了健康区间。不要急着改参数让结果好看,而是回头检查:报告里引用的单店数据是开业满一年的成熟店,还是包含大量新店的加权平均?新店有爬坡期,前三个月销量普遍低两到三成,单店模型如果直接用稳态参数,会高估短期利润。
3.3 五年门店扩张预测:自营看资本开支,加盟看供应链毛利
有了单店EBITDA,接下来把门店扩张和收入预测连起来。这里的关键是自营和加盟分开算:自营门店用终端收入乘以单店数量得到报表收入,加盟门店只贡献供应链收入,通常是加盟商向公司采购原料产生的毛利。演示代码里用“单店年供应链收入”这个参数来简化加盟端。
def forecast_years(store, unit, plan, years=5): rows = [] self_owned = store["self_owned"] franchise = store["franchise"] annual_rev = 0 # 单店年收入与单店年供应链收入(演示值) rev_per_self = 1800000 # 自营单店年收入 supply_rev_per_fran = 120000 # 加盟单店年供应链收入 for y in range(years): self_owned += plan["self_owned_new"][y] franchise += plan["franchise_new"][y] self_rev = self_owned * rev_per_self fran_rev = franchise * supply_rev_per_fran total_rev = self_rev + fran_rev annual_rev += total_rev # 演示用累计,实际可按年输出 rows.append([y + 1, self_owned, franchise, total_rev]) return rows for row in forecast_years(store_data, unit_model, expansion_plan): print(f"第{row[0]}年: 自营{row[1]}家 加盟{row[2]}家 收入合计{row[3]:,.0f}元")这段代码里,自营单店年收入与加盟单店年供应链收入之间大概有十几倍的差距,这是因为两者的确认范围本来就不是一回事。报告中如果要验证收入预测,最直接的办法是把测算结果和公司披露的季度收入做对照。预测模型建好之后,至少要做一次“回看校验”:用模型跑最近三年,拿实际收入去撞模型输出,误差超过百分之十就必须回头检查参数。
3.4 三变量敏感性测试:哪些参数的坑不能踩
模型跑完第一版之后,不要直接去看结果,而是做敏感性测试。最常见的做法是对日均销量、客单价、租金三个最不确定的变量各给一组悲观和乐观值,观察利润或收入的变化幅度。三个变量里,日均销量的不确定性最高,因为它受季节、促销、竞争店开业影响,波动范围可以到正负两成。客单价相对稳定,但促销期的实际均价会明显下移。租金则是一年一签的重定价变量,续约涨租在核心商圈几乎是必然事件。
敏感性的意义在于定位“承重参数”。如果收入或利润对某个参数特别敏感,那这份研报的结论就在很大程度上依赖这个参数的成立,你后续跟踪财报时就要优先盯它。不要一次性同时改所有参数,否则你分不清是哪个假设在推着结论走。三变量分别跑一遍,再挑两个最敏感的组合跑一次极端场景,基本就能看到这份预测的韧性边界。
4. 读看多研报必须绕开的五个坑:乐观假设、报表口径与幸存者偏差
研报读得多了,你会发现看多报告最常见的特征不是数据造假,而是选择性呈现。数据是真的,但边界条件常常被模糊处理。以下是这类研报里高频出现的五类坑,每一条我都踩过,写出来供你对照。
4.1 现象:净利率预测比公司历史峰值高出一截
不少看多报告预测的净利率会比公司过去三年的历史峰值高出两三个百分点。表面原因是规模效应释放,实际上模型通常做了两个隐藏假设:一是总部费用增速远低于收入增速,二是补贴和促销费用大幅收缩。这两个假设在逻辑上存在互斥关系,因为补贴收缩会直接影响销量增长,而销量增长又是收入增速的来源。
解决的办法很简单:把报告的净利率预测拆回费用率。看总部费用占收入的比例从当前值下降到预测值的路径,如果下降速度超过每年一个百分点,就要找依据。费用率的改善通常是台阶式的,而不是线性的,指望每年平滑下滑往往过于理想。
4.2 现象:同店增速假设与宏观消费数据对不上
有些报告给的同店销售增速长期维持在百分之八以上,但同期社会消费品零售中的餐饮收入增速只有个位数。同店增速本质上是价格与销量的乘积,如果客单价没有明显提升,同店增速就只能靠销量拉动,而销量增长必然受制于商圈人流和消费频次。研报里很少解释“同店增长从哪里来”,默认顾客消费频次会自然提升。
我习惯把同店增速和社会餐饮零售额增速放在同一张图里看。如果报告的假设长期高于宏观数据,就需要一个额外的催化剂说明,比如新品驱动、门店改造、外卖占比提升。没有具体驱动因素的同店假设,本质上是在赌消费升级,这种赌注在扩张期很难被证伪,但一旦宏观走弱,回撤会非常快。
4.3 现象:加盟与自营混合口径下的收入虚高
部分报告讲收入规模时用的是GMV口径,也就是所有门店的终端销售额,而公司财报收入只有自营收入加加盟供应链收入。两个口径之间的差距可能达到销售额的三成甚至更多。当报告正文强调“突破多少家门店”“销售规模达到多少亿”时,要特别警惕是否混用了口径。
检查方法:把报告中引用的收入与公司财报收入做一次比值计算。如果比值接近一比一,说明只看自营;如果明显大于一,就是包含了加盟终端流水。加盟占比越高的品牌,这个口径差异越大。看多逻辑如果建立在GMV增速上,那你至少要确认利润增长是否跟得上,GMV本身不产生报表利润。
4.4 现象:把管理层指引当成研报必然结论
管理层在业绩会上的指引通常偏保守,但在品牌向上周期里,指引会被市场理解成下限。于是研报经常做的一步是:在管理层指引基础上再上浮一定比例,当作自己的中性预测。问题是,管理层的指引有其自身立场,它既要给市场信心,又不愿承担超预期落空的责任,这个折中的结果未必是真实经营状态的映射。
我的处理方法是给三类数据分权重:已实现的财报数据权重最高,月度经营数据次之,管理层指引只能作为参考下限。报告中如果出现“我们预计超过公司此前指引”这类表述,要去看它给出的额外增长来源是什么。没有具体来源的超额预测,情绪成分多于分析成分。
4.5 现象:只看中篇,忽略系列研报之间的假设修正
标题里的“中”字提示这是一份系列报告。系列报告最有价值的信息往往不是本期的结论,而是相对上期修正了什么。如果上期预测的门店数被下调,但收入预测反而上调,意味着单店收入假设变得更强;如果收入预测没变但利润预测上调,意味着费用率或毛利率假设被修正。系列之间的差异能直接告诉你报告团队自己认为哪些地方此前看错了。
拿到一份中篇报告,先找它和上篇或下篇交集的预测指标,做一个简单的差值表。修正方向与幅度比本期结论重要得多,因为本期的结论已经在价格里反映,而修正方向代表增量信息。忽略这个对比,等于把最有价值的半页纸扔掉了。
5. 方法论迁移:用单店模型给连锁消费标的做体检
这套从咖啡研报里拆出来的框架,不只是用来读报告。我后来做其他连锁消费标的评估时,几乎原样把它迁移过去了。餐饮、茶饮、烘焙、便利店,单店模型的核心变量大同小异,无非是把客单价换成对应品类,把原材料占比换成该行业的食材或进货成本占比。真正需要改的是判断标准,不同业态的合理回本周期和租金占比差异很大。
5.1 第一步:判断这生意赚单店的钱还是扩张的钱
连锁生意分两种:单店利润很厚,但门店数量天花板明显,比如高端正餐;单店利润一般,但门店网络可以无限加密,比如咖啡和茶饮。前者的价值核心在单店模型的利润率,后者的价值核心在扩张速度与供应链效率。如果一个标的单店利润一般,门店增速也在放缓,那它两个钱都赚不到,直接淘汰。
评估时我会算一个“扩张效率”指标:最近两年净增门店数除以同期资本开支或加盟相关收入增速。净增门店很多但资本开支消耗巨大,说明自营扩张在烧钱换规模;净增门店很多但供应链收入增速跟不上,说明加盟商可能没有从公司采购全部原料,品牌对品质的控盘力存疑。
5.2 用“现金流拐点”淘汰伪成长门店网络
门店网络的质量要看现金流,而不是会计利润。有一个我经常用的观察方法:把累计净增门店数画一条曲线,同时把单店模型里的回本周期叠加进去。当净增门店数持续高于“回本周期内可以消化”的数量时,说明大量新店还在爬坡期,利润表上的收入增长带着较多水分。等到新增门店数量放缓而收入增速没有同步下滑,说明老店同店增长在扛大梁,这才是现金流的真实拐点。
很多标的在扩张期讲的故事是门店数增长,但在现金流拐点出现之前,扩张的每一家店都在占用资金。看多研报通常会把注意力放在收入曲线的前半段,你要自己把现金流的后半段画出来。回本周期越长,这个拐点来得越晚,中间的风险敞口越大。
5.3 一张检查清单与三个一票否决信号
把前面所有分析项收敛成一张检查表,方便对新标的快速打分。这份表我一般用在正式建模之前,先把不合格的排除掉,避免在垃圾标的上浪费时间。
| 检查项 | 验证方式 | 通过标准 |
|---|---|---|
| 单店回本周期 | 模型测算 | 自营低于24个月,加盟低于18个月 |
| 同店增速来源 | 财报拆解 | 有明确驱动因素,不只是宏观叙事 |
| 扩张口径 | 财报与GMV对比 | 口径混用程度低,增速可解释 |
| 现金流拐点 | 净增门店与回本周期对比 | 增速放缓时收入未同步恶化 |
| 管理层指引依赖度 | 历史指引兑现率 | 过去两年指引偏差在10%以内 |
三个一票否决信号分别是:单店模型在悲观参数下EBITDA转负;加盟收入增速连续三个季度低于门店增速;门店净增数量连续两个季度为负而利润预测还在上行。三者的共同点是模型输出与实际经营数据方向背离,出现任何一个,都不该继续在预测模型上花时间。
5.4 三个推翻看多研报的关键信号
同店增速连续两个季度低于研报隐含水平时,看多逻辑的第一根支柱就断了。门店扩张预测可以因为开店节奏延后而自动下调,但同店增速是单店模型的底座,底座下滑不是延后能解决的。第二个信号是租金成本占比上升,通常出现在续约节点或新店选址下沉能力不足时,这直接侵蚀单店模型的利润率。第三个信号是加盟供应链收入占加盟门店总数比例下降,说明加盟商开始寻找外部货源,品牌对网络的控盘力在松动。
这三个信号有一个共同点:都可以从季度财报里直接观察到,不需要额外调研。所以读研报不是终点,把研报结论转成可跟踪的季度指标并建立预警线,才是这套方法完整落地的方式。
6. 验证一份看多研报的终局:把每一条核心结论写成可证伪条件
拿到一份看多研报,我最后一定会做一件容易被人忽略的事:把它的核心结论转换成“如果错了,会看到什么信号”的清单。研报不会自己写这些,因为它们的目标是说服,而我的目标是验证。转换完成之后,这份54页的报告在我手里就缩成了半页纸的观察指标,后续每个季度只需要花十分钟核对。
| 研报核心论点 | 可观察数据 | 证伪条件 |
|---|---|---|
| 门店扩张加速 | 季度净增门店数 | 连续两季度净增低于预测的八成 |
| 单店收入提升 | 单店月均收入 | 连续两季度单店收入同比下滑 |
| 毛利率改善 | 季度毛利率 | 低于研报隐含水平两个百分点 |
| 总部费用摊薄 | 费用率 | 费用率连续两季度不降反升 |
| 加盟体系健康 | 供应链收入与门店数比值 | 比值连续三季度下降 |
我自己的习惯是把这个清单存在手机备忘录里,每个季度财报发布当天拿出来逐项核对,并且只记录实际值和预测值的差值,不做解释。半年之后回看,哪些研报在讲事实,哪些在讲愿望,差距非常清楚。这个方法帮我避开过不止一个看起来逻辑自洽的成长故事,也希望帮到你。
本文还有配套的精品资源,点击获取