在金融行业中,Excel 最重要的工作就是做模型对各类指标进行估算,在(投行常说的「模型」(model) 是什么东西? - 何明科的回答)中有许多交代。主要的模型包括但不限于:
- 偏会计或财务:财务三张报表的历史及预测
- 偏项目投资或管理:NPV/IRR 等模型
- 偏股权或债券投资:市场规模预测、投资价值预测(DCF 及 Comparable 等等)、针对各种股权的回报预测等
- 偏交易方面:针对各类金融产品(FX、衍生品等等)的模型估算和执行策略等
因此本文紧紧围绕在金融行业内的财务模型来解释各种技巧,简单将其分为技法和心法两类。简单介绍三个技法而着墨在心法,因为技法让人在道路上跑得更快,而只有心法让人能跑在正确的道路上。
技法 1:掌握快捷键
如同程序员崇尚用 VIM 甚至极致到用“hjkl”来代替"↓↖↑↗",金融行业在使用 Excel 的过程中,把双手牢牢放在键盘上翻飞才是正确姿势。这就需要熟知各类快捷键,详见(Excel 键盘操作技巧? - 何明科的回答),里面提到的都是金融建模中最常用的快捷键,满足七八成的实战。另外高效的学习方法是遇到重复发生的操作然后去掌握和记忆快捷键,在实践中学习,而不是先死记硬背然后再实践。
检验金融建模中使用 Excel 快捷键水平高低的重要标准是:能否脱离鼠标而手不离键盘。不过鼠标却是绕不过的。
技法 2:掌握初中高级各类函数及 Excel 自带的工具
初级一些的函数有 Sum/Average/Sumproduct/If 等,完成基础的四则运算和逻辑运算。复杂一些之后,就需要使用 VLookup/HLookup 这类标准的查找函数来匹配数据,再复杂一些就需要花式查找( Match/Offset/ Indirect/Address 等)。查找完之后,就涉及到统计计算,于是 Sumif 或者 Sumifs 的需求就来了。然而这还不是效率的极值点,当繁衍出类似于数据库的“Select…Where…Group By…”等多重复杂条件的需求,于是就不得不引入了数组函数。
Excel 上面还提供了许多金融财务的专业函数(比如:IRR/NPV/PMV/PV/FV 等),使用的时候一定要把参数和输出搞清楚,一些关键点模糊绝对就是产生错误的结果,比如:NPV 或 IRR 计算时候的起始点选取。
另外,Excel 还提供各类工具:
- 数据清洗工具:分割和去重等等
- 数据分析工具:排序、筛选、数据透视表等
- 统计工具:ANOVA、各类检验及多元线性回归等等
- 求解工具:Solver
技法 3:掌握 Macro 和 VBA
已经厚颜无耻地推广 VBA 多次,它们绝对是提升效率和完成复杂运算的利器(曾经使用 VBA 来完成蒙特卡洛模拟),这里不多说,详细的答案参考(Excel 到底有多厉害? - 何明科的回答)。
这里就简单举例一枚给不愿跳转的同学。一般的 Financial Model 都是根据假设计算结果,而在为某顶级手机品牌服务的过程中,却遭遇了逆向需求。本来是根据地面销售人员的一定服务水平,计算所需要的销售人员数量;结果在项目过程中,总部已经确定好销售人数,转而要求根据人数确定服务水平。然而,服务水平不是一个单变量,是由零售店的覆盖率、销售拜访频率、拜访中的服务深度等多重因素来决定的,同时还可以根据一线至五线城市来变化。于是只好再次祭出 VBA,先根据常规思路建立好 Financial Model,得出人数的初步结果。然后写 VBA,根据不同的情景、不同的优先级以及不同的权重来调节零售店的覆盖率、销售拜访频率、拜访中的服务深度等多因素,同时设定这几大因素的可接受范围,逐步逼近销售人数的预设值。
高攀一下,是不是有点深度学习的梯度下降法的味道?
心法:掌握构建财务模型的框架和基本原则
做 Financial Model 的基本思想其实和编程非常类似,比如著名而老套的 MVC: 整个 Financial Model 的逻辑被分成三层, Model(负责数据),View(负责呈现)和 Controller(负责业务逻辑),理想状态下其中一层的改动不会影响到另一层。我在做大部分 Financial Model 的时候基本就是按照 MVC 的框架来要求自己的。
Financial Model 搭建的过程就如同修建高楼一层层往上累加模块
- 常数 / 核心数据 / 假设数据部分,包括:商业常数(汇率及税率等)、历史数据(过去的财报以及市场规模的历史数据)、认为靠谱而不能改动的预测数据、核心假设(比如假定宏观经济按照 6-7% 来增长)等等。这些数据略等于 C 语言的 h 文件部分,动一发而动全身,所以要单独对待。如同程序一样,Excel 的函数中是不能出现 hard-code 的数字,所以如果一个财务模型中出现“=2*3.14*r”,基本是可以打回去重做的。
- Scenario 场景,包括:模型中需要经常调节的重要输入参数(比如:市场渗透率、Exit PE ratio 等)。这些参数最好剥离出来成为一个单独的界面,可以比较方便的控制和调整,为之后的 Sensitivity Analysis 做准备,甚至可能遇到在上文中提到的类似于用梯度下降法寻求最优值的情况。
- 基础模型。这一步的核心就是做出预测的三张财务报表,最令人痛苦的是配平。可以使用各类复杂函数(Indirect/Offset/VLookup 等)来进行配平而不会出错,而且复用性极高。
- 进阶模型。基于历史及预测的三张报表,做一些更复杂的财务分析或者估值预测,包括:DCF、Comparable、敏感性分析等等。
- 呈现。把用户(包括老板或者客户)最关心的产出放出来,用最友好的界面展现出来。当然做得极致些,可以把调整 Scenario 以及重要参数的界面也放出来,方便用户 Manipulate Data(其实翻译成中文更有趣一些:猥亵数据)以便得到最满意的结果。
下图是曾经奋战过的一个 Financial Model,基本涵盖了上述的逻辑和构建过程,供大家参考。
...更多文章请到数据冰山 - 知乎专栏
...更多回答请看何明科的主页