照着R语言和深度学习第三章 “3.6预测房价:一个回归的例子” 做了一遍,用同样的数据又跑了一遍OLS作对比,算是对深度学习多了点理解。
1. 数据
数据来自1970年代中期波士顿,内生变量是郊区房屋的价格中位数,外生变量包括房屋特征、住房所在区域的特征等13个变量。书里没有具体说明数据来源,也没有变量名或者标签,估计是截面数据,否则应该包括年份变量。训练样本404个,测试样本102个。
2. 模型设置
- 层和网络
- 一共三层
- 前两层输出都是64,使用relu激活
- 第三层输出为1,没有定义激活函数(即默认为线性模型)
- 优化器:rmsprop
- 损失:均误方差(MSE,mean squared error,与OLS的目标函数一样)
- 监控目标:平均绝对误差(MAE,mean absolute error)。监控MSE结果应该不会差很多,选择MAE大概是为了和内生变量单位保持一致,比MSE更容易解释。
3. 模型训练
- 因为是小样本,采取了K折验证(K = 4)
- 在每轮训练中
- 迭代次数为100(epochs = 100)
- 迭代次数远高于前两个例子,大概是因为样本量太小
- 每批样本为1 (batch_size = 1)
- 不知道batch_size的设置原则,以及这里为什么设置成1,后面的章节需要注意一下这个问题
- 查了一下,batch_size = 1会影响收敛速度
- 模型跑下来,四折平均MAE为2.8左右,高于书里的2.38
- 迭代次数为100(epochs = 100)
- 按照书里将迭代次数设为500又跑了一次,花了很多时间(10分钟的样子),远高于第三章的前两个例子(上万样本、张量展开后需要1G 空间)
- 精确度表现确实好了一些,但仍然不如书上的数字
- MAE最低点的位置跟书上差不多,都在120次迭代出现
4. 测试
- epochs = 80, batch_size = 16
- MAE是3左右,比书里高了0.5,是个不小的差距
- 试过epochs = 100/120, batch_size = 4/8,MAE也只降到2.8
- 降低batch_size特别影响速度
5. OLS模型
为了保持可比性,也是用训练样本跑的回归,然后使用回归系数对测试样本进行预测,然后计算MAE,结果为3.3,就是说精度比深度学习方法低了10%。
为了省事,没有用K折方法,由于K折验证降低样本量,估计使用K折或者bootstrap会进一步降低精度。
由于不知道自变量的定义,无法采用更有效的模型,比如传统的房价模型会把某几个变量做交叉或者做二次项,这类模型会获得更高的精度,用这些更好的模型作对比会更有意义,毕竟深度学习模型是高度非线性的。曾经用美国的数据跑过,调一下模型可以使R平方从65%提高到80%,那么把精度再提高10%也许不算难事。
6. 结论与若干细节
- 研究问题的影响
住房市场是很成熟的市场,每个变量的影响在交易过程中已经被考虑得很充分,也就是说市场已经给每个变量制定了合理的价格。这些价格的形成来自买家与卖家(也许还有中介)的讨价还价过程,也就是来自人的计算。人在讨价还价时不会做特别复杂的计算,非常可能就是靠大脑中的线性模型计算,比如100平米的房子比50平米贵两倍。这种情况下,OLS和深度学习取得相同的效果是可以理解的。
但这不是说深度学习是多此一举,更好的解释是,如果真实的模型是线性的,那么深度学习这个黑箱最终给出的也是个线性模型。对于更复杂的市场,或许深度学习更有优势。 - 样本量的影响
即便真实的世界定价是非线性的,想从几百个样本当中提取复杂的非线性关系,恐怕也不容易。 - 运行速度
大概是batch_size的影响,深度学习跑得很慢,而OLS基本上是一个命令搞定,回车敲下去,立刻出结果。再一次,样本量如果够大(再大的样本OLS还是非常快),batch_size设置大一些,速度可能不再是个问题,而且还可能获得OLS抓不到的效应。 - 对世界的理解
OLS可以看到每个变量的影响,而且还需要我们思考变量是否内生,以确定因果关系。深度学习目的却只在预测,无法提供对世界的理解。经济学知识(以及其他社会科学知识)和计量经济学方法,对于理解世界来说,仍然不可缺少。好的深度学习模型仍然需要和专业知识合作——至少输入哪些变量、生成哪些新变量还是需要专家来决定吧。
现在我明白了Susan Athey为什么会结论机器学习,或者AI,并不能用来揭示因果关系,只是在模型选择上提供帮助。 - 几个细节问题
(1)为了让模型跑得更快,深度学习通常会把因变量进行标准化变换,每个变量增加1,意味着增加一个标准差。如果是在OLS当中做这种变换,回归系数的解释需要跟着调整。但深度学习并不在意回归系数,只要因变量不做标准化,预测结果的单位是保持不变的。(当然OLS的预测也不会跟着因变量标准化而变化。)
(2)OLS通常要考虑的内生性、样本选择等问题,原因是一旦出现上述问题,对系数的估计会出现不一致——也就是说样本一旦改变,估计结果会发生显著变化。机器学习虽然不考虑这些问题,但通过使用测试样本,可以对估计结果一致性做出反应,也就是说过拟合。或许机器学习方法能够为计量的结果提供一些参考,这个问题就有待计量经济学家去回答了。
Update
(2021.9.23)
TensorFlow for R网站给出了波士顿房价变量说明,所给的代码也比书里更详细,值得读。