1603 字

结构模型中约束最优化的使用——纪念 Che-Lin Su - 慧航 - 专栏

经济 - 数学与动态; 慧航; 知乎专栏; 文献笔记; 最估化; 结构模型; 贝尔曼方程;

原文地址https://zhuanlan.zhihu.com/p/20146048

这篇文章是之前在 Che-lin Su 在经济学上有哪些突出的研究成果? - 慧航的回答里面承诺过的。在这里我将介绍一下已逝的经济学家 Che-Lin Su 最重要的一篇文章,《Constrained optimization approaches to estimation of structural models》。 这篇文章很短,正文只有 16 页,然而任何优秀的论文都不是以页数论英雄的。

在计算结构式模型的估计(structural estimation)的时候,计算的复杂度通常很大,而这种难度经常是由于各种不动点迭代(fixed-point iteration)造成的。典型的例子比如:

  1. 动态规划中求解 policy function
  2. 求解一个 game 的 Nash equilibrium
  3. 求解一个一般均衡
  4. BLP 中通过市场份额倒推产品特征的效用

在这些例子里面都涉及到不动点的迭代。然而,考虑到当我们估计这个模型的时候,为了计算极大似然、广义矩估计,我们必须给定一个参数,做一次不动点迭代,然后计算目标函数值,再给定新的参数,再做不动点迭代,然后计算目标函数值。这个过程不停重复,最终最优化算法会收敛到最优点。

然而这个过程是非常非常耗费时间的:本身不动点迭代就是非常耗费时间的,更何况外面还套着一层最优化的迭代。因而这种结构模型一般运算时间都非常的长。

怎么办呢?Che-Lin Su 想出了一个办法:根本不需要进行不动点迭代,把他看成是一个最优化的约束就好了。而约束最优化是运筹学里面早就很成熟的方法。

数学上的描述就是,给定参数\(\theta\)、内生变量\(\sigma\),而给定参数,模型可以通过一阶条件、贝尔曼方程、市场均衡条件等计算出内生变量。假设这两个变量之间存在如下关系:

\[h(\theta,\sigma)=0\]

进而,我们观察到的数据为\(X=\{x,d\}\),其中\(x\)为外生变量,\(d\)为内生变量。

在此之前的做法一般为不动点的迭代,即 NFXP(nested fixed-point)方法,即给定参数\(\theta\),求解\(\hat{\sigma}\),然后计算极大似然函数:

\[\hat{\theta}=\arg\max_{\theta} \frac{1}{M}L(\theta,\hat{\sigma}(\theta);X)\]

注意这里\(\hat{\sigma}\)涉及到不动点迭代,再加上外面的最优化的迭代,迭代套迭代。

而 Che-Lin Su 提出,实际上没必要这么麻烦,只要把不动点迭代的部分作为最优化的约束就好了:

\[\begin{equation} \left\{ \begin{aligned} & \max_{(\theta,\sigma)}\; \frac{1}{M}L(\theta,\sigma;X)\\ & \begin{aligned} s.t.\;\; & h(\theta, \sigma)=0 \end{aligned} \end{aligned} \right. \end{equation}\]

这样,虽然最优化的维数增加了,然而节省了不动点迭代的时间。而 Su 证明了,以上的两种方法都是等价的。

在这篇文章中,Su 还给出了一个 dynamic discrete choice 模型的例子。

考虑一个公共汽车公司正在考虑要不要更新汽车引擎的决策问题。其决策是一个离散变量,d=1为更换,d=0为不更换。公司在某一期的效用函数为:

\[u(x,d,\varepsilon;\theta_1,RC)=\nu(x,d;\theta_1,RC)+\varepsilon(d)\]

\[ \nu(x,d;\theta_1,RC)=\left\{ \begin{aligned} -c(x;\theta_1),\;\text{if}\,d=0\\ -RC-c(0;\theta_1),\;\text{if}\,d=1 \end{aligned} \right. \]

其中\(x\)为里程数,\(RC\)为更换引擎的成本,\(c\)为给定里程数汽车的运营成本,\(\theta\)为参数。

公司的决策并非静态的,实际上公司必须考虑其决策对未来的影响,或者说公司应该考虑是这一期换,还是下一期换?因而公司的决策是一个动态的最优化:

\[\max_{d_t,d_{t+1},d_{t+2},\dotsc}\mathbb{E}\left[\sum^\infty_{\tau=t}\beta^{\tau-t}u(x_\tau,d_\tau,\varepsilon_\tau;\theta_1,RC)\right]\]

而根据动态规划的方法,可以通过以上效用函数定义值函数(value function),进而得到贝尔曼方程(Bellman equation):

\[\mathrm{EV}(x,d)=\nu(x,d;\theta_1,RC)+\varepsilon(d)+\beta\int_{x^\prime}\mathrm{EV}(x^\prime)p_3(x^\prime+x,d;\theta_3)\,\mathrm{d}x^\prime\]

这个贝尔曼方程是公司决策的核心,当更换引擎的\(\mathrm{EV}\)大于不更换引擎的\(\mathrm{EV}\),公司就会选择更换引擎。

而当我们看到数据,需要估计其中的参数时,逻辑是这样的:首先,给定一个参数的猜测,解出贝尔曼方程,得到公司的决策,再将这个预测的决策跟实际的决策比,如果足够接近,那么参数就对了,否则,按照一定规则,给出参数的新的猜测,继续比。

然而,这里面每一次给出新的参数,都要重新计算一次贝尔曼方程,而传统上贝尔曼方程是通过 value function iteration 的方法得到的,本质上就是一个不动点的迭代,速度较慢。而使用 Su 的方法,以上的贝尔曼方程可以不用每次给定新参数就迭代计算,而是将其看成是最优化的一个约束。这样,虽然最优化的参数变多了,但是却节省了每一步不动点迭代的时间。

最后,再次为这位年轻有为的经济学家哀悼。