函数模型:从数据到可外推的曲线
前面几页把各类函数的性质讲完了,还剩一件事没做:拿函数去描述一件真实发生的事。把一列观测数据换成一条曲线要走五步——读出数据的形状,选定一个模型族,在族内定出参数,检验拟合的好坏,判断这条曲线能外推到多远。数学模型(mathematical model)指的就是这条曲线连同它的适用范围。五步里最容易被跳过的是选族这一步,而它决定了外推时会得到什么答案。参数只在族内挑一条曲线,族选错了,参数再准也没用。
1 · 模型族与增量的形状
选族的第一手依据是相邻数据之间的增量。自变量等距增加时,线性函数的增量是常数,指数函数的增量成等比,对数函数的增量逐步减小但没有上界。幂函数 两样都不占:增量既不等差也不等比,只有相对增量 与 保持固定比例。
| 模型族 | 解析形式 | 增量特征 | 典型场景 |
|---|---|---|---|
| 线性 | 增量为常数 | 匀速运动、固定单价 | |
| 指数 | 增量成等比 | 复利、无约束繁殖 | |
| 幂 | 相对增量成固定比例 | 标度律、开普勒第三定律 | |
| 对数 | 增量递减且无上界 | 感觉强度、信息量 | |
| logistic | 先加速后减速,有上界 | 有资源约束的增长 |
分段函数不在这张表里,因为它不是一个族,而是把定义域切开之后在每一段上各用一个族,见 §4。
2 · 半对数与双对数坐标下的判据
增量特征在数据带噪声时不好读。更实用的判据是换坐标:纵轴改画 、横轴仍画 ,得到的图称为半对数图;两轴都改画对数,得到双对数图。
指数函数在半对数图上是直线,因为 两边取对数给出 ,斜率即 。幂函数在双对数图上是直线, 给出 ,斜率即指数 。选族由此变成一句可目视的话:哪种坐标下的点列最接近一条直线,就选对应的族。
八大行星的轨道数据是这条判据最干净的例子。以天文单位计的半长轴与以年计的公转周期,在双对数坐标下相关系数的绝对值是 0.99999999,拟合出的斜率 1.49971、系数 1.00029,开普勒第三定律 里那个 就是这样从图上量出来的,均方根残差 0.0088 年。
判据也有失效的时候。Carlson 1913 年逐小时记录的酵母培养数据 [3],在三种坐标下的相关系数绝对值分别是 0.9676、0.9101、0.9806,没有一个接近 1,高低次序也说明不了什么。这组数据不属于以上任何一族,它的形状是先加速后饱和的 S 形。判据能排除,不能确认。
3 · 参数的确定与残差
族选定之后,参数由最小二乘给出:让各点的残差(residual,观测值减去模型值)的平方和最小。指数族与幂族的做法是先取对数化成直线,对直线做最小二乘,再把参数回代。
其中有一处容易被略过的差别:线性化之后最小化的对象是 的偏差,而非 的偏差。前者按相对误差配权,小数值的点与大数值的点分量相同;后者按绝对误差配权,大数值的点说了算。两条路径给出不同的曲线。用 1790–1900 这十二个美国人口普查数据拟合指数族,线性化给出 、,在原坐标下直接最小化残差平方和则给出 、。后者的均方根残差是 1.508 百万人,前者 2.944,是它的 1.95 倍;可是在 1790 年这一点上,线性化的预测 4.203 反而比原坐标的 5.275 更贴近实测的 3.929。两条曲线同属指数族、来自同一组数据,外推到 2020 年却给出 2291 与 1503,相差 1.5 倍。
拟合优度常用决定系数 报告,其中 SST 是以 的均值作模型时的残差平方和。 表示逐点精确命中, 表示这个模型不比「一律取均值」更强,负值表示比取均值还差。
越接近 1 只说明模型解释了 的更多变差,不说明族选对了。指数族在 1790–1850 这七个点上的 是 0.99982,logistic 族是 0.99961,两者到小数点后第四位才分出高下,而它们对 2020 年的预测相差 13 倍。拟合优度是内插的指标,与外推能力无关。
4 · 阶梯计价的连续性
阶梯电价、阶梯水价与累进税率都是分段函数模型,共同的规定是:超出某一档上界的那部分量按下一档费率计,已落在低档里的部分不受影响。这条规定不是公平二字的修辞,而是分段函数连续性的直接要求。
设各档上界为 、费率为 。若改成「整笔按所在档费率计」,第 档与第 档的表达式在 处分别取 与 ,差值 就是图象上的一道断口。中国个人所得税的第一档上界是 36000 元、费率 3%,第二档费率 10%,断口高 2520 元:应纳税所得额 36000 元时税后余额 34920.00 元,36001 元时反而只剩 32400.90 元,多赚一元净少 2519.10 元。
按逐段累加的写法则不会出现断口。税率表上印的那一列速算扣除数,正是把逐段累加改写成一次乘法之后剩下的常数,它满足 ,也就是前面各道断口高度的累加。按这条递推算七个档得到 0、2520、16920、31920、52920、85920、181920,与税率表印刷的那一列逐项相同——这一列数字本身就是连续性条件的解。
5 · 有上限的增长与外推的分岔
指数模型的问题写在它自己的形式里: 无界,而现实中的量几乎都受约束。修正的办法是把常数增长率 换成随存量线性下降的 , 逼近容量 时增速趋于零,解出的曲线是logistic 模型 。它在 远小于 时近似指数增长, 趋于无穷时退化为指数模型。这条修正由 Verhulst 在 1838 年提出 [1],Pearl 与 Reed 1920 年用美国人口普查数据做了第一次实拟合 [2]。两族是嵌套的,这一点在拟合上有直接后果。
数据只覆盖加速段时,
根本定不下来。用 1790–1850 这七个普查点扫
,均方根残差随
单调下降:
取观测最大值的 3 倍时是 0.393,12 倍时 0.127,1000 倍时 0.0854,收敛到的正好是指数族拟合的 0.0854。一维搜索必须给上界,而返回的所谓最优
不过是那个上界。fitLogistic 因此带一个 capped 标志:撞上界时如实报出来,免得页面把实现里的搜索范围当成数据给出的容量。
外推的分岔就在此处。同样用 1790–1850 定参数,指数族的均方根残差 0.0854 百万人、,logistic 族 0.126、,指数族甚至略优,两条曲线在数据区间内目视重合。外推到 1910 年(越出数据区间 100%),两族给出 135.3 与 100.5,相差 35%。外推到 2020 年,两族给出 3441 与 265,相差 13 倍,而实测值是 331.4。
把训练数据延长到 1900 年,情形反过来:减速段进入数据后 有了内部极小值,拟合给出 ,logistic 的残差 0.425 已明显优于指数族的 2.944。但这个 同样不该当真。美国人口 1960 年就越过了 188.3 百万,2020 年是 331.4 百万。数据只能定住数据覆盖到的那一段。
可外推多远没有普适答案,但有一条可操作的下限:两族模型在数据区间内的差别小于数据本身的噪声时,它们在区间外的差别得不到任何数据支持。
6 · 参考文献
- Verhulst, P.-F. (1838). Notice sur la loi que la population suit dans son accroissement. Correspondance Mathématique et Physique, 10, 113–121.
- Pearl, R., & Reed, L. J. (1920). On the rate of growth of the population of the United States since 1790 and its mathematical representation. Proceedings of the National Academy of Sciences, 6(6), 275–288.
- Carlson, T. (1913). Über Geschwindigkeit und Größe der Hefevermehrung in Würze. Biochemische Zeitschrift, 57, 313–334.