写一篇博客总结一下对这个话题的探索过程。

首先说明:以下内容是基于一个主要从事传统实证研究的社科视角,因此在表述和理解上可能更偏向于基础概念和一般性解释。本文并不涉及机器学习领域的前沿技术或复杂的数学推导,旨在提供对该话题的概述和基础理解,方便非技术背景的读者理解机器学习中的基本概念。这篇文章解决我最关心的部分:

  • 机器学习到底是干嘛的?(拜托!看了很多网上的介绍感觉还是不懂诶!不同学科的机器学习不是一个玩意吧!)
  • 机器学习的方法是不是大部分和计量经济学差不多??ML 也有回归,计量也有回归,它们有啥区别吗?(我之前都是用 Stata ,不会要我全部再学一遍吧,不可能啦!)
  • 有人要我用随机森林去预测 30 年后的房价,这现实吗??(好了,算法可以不会,喜剧效果要先拉起来。)

诶?怎么正事一件没说,贫嘴瞎扯已经写满 600 字。

为什么要学习大数据和机器学习方法

机器学习在人工智能领域占据基础与核心地位,学习它们可以帮助在实证研究的研究视角(选题)、研究数据和研究方法三个维度实现创新。

社会科学研究中,数据来源越来越丰富,文本、图像、音频、视频、遥感等大数据(Big Data)都成为社会科学研究者的重要数据来源。值得注意的是,大数据并不仅仅指数据量大。数据的概念已经超越了传统认知中的数字(1、2、3、4),在互联网化的今天,衣食住行等生产生活领域都成为了大数据的来源。具体来源包括但不限于:网络检索、网络留言、网络购物、交通、征税记录、专利文本。

数据形式已不再局限于结构化的传统数据,还包括文本、图像、音频、视频、卫星照片等多样化形式。这些数据普遍具有高维度、数据稀疏等特征,这使得传统经济学分析工具往往难以胜任相关分析工作。

机器学习的目的?

随着大数据的普及,擅长于处理这种非结构化大数据的机器学习方法也成为社会科学家工具箱的重要组成(Varian,2014;Grimmer,2015;Mullainathan and Spiess,2017;Athey,2018;Athey and Imbens,2019;洪永淼和汪寿阳,2021)。
根据 Varian(2014),数据分析的四大任务:Summarization、Estimation、Hypothesis testing、Prediction。机器学习方法的主要目的就在于对包括非结构化数据在内的大数据进行降维、分类和预测等(Ghoddusi et al.,2019)。

机器学习文献

机器学习领域代表性综述包括:Varian(2014)、Grimmer(2015)、Mullainathan and Spiess(2017)、Athey(2018)、Athey and Imbens(2019)、Ghoddusi et al.(2019)、Storm et al.(2019)、黄乃静和于明哲(2018)、王芳等(2020)。
代表性教科书包括:Hastie et al.(2017)、James et al.(2013)、Burkov(2019)、陈强(2021)

机器学习与传统计量经济学的比较

讲个笑话:一个计量经济学家和一个机器学习专家碰面了...

计量经济学家:“这个系数显著吗?有没有遗漏变量?到底是X导致了Y,还是Y导致了X?”机器学习专家白了他一眼:“管它因果关系呢,能预测准就行!新数据来了,我的模型还好使吗?要不要再加点惩罚项?”

好吧,我编不下去了,但这两个领域的差异确实很有意思。总而言之,机器学习的重点是预测与泛化。

相比于计量经济学重点关注参数估计因果推断,机器学习与传统计量经济学的区别不仅在于方法的不同(虽然实际上很多方法是重叠的。我反复确认了!),更重要的是关注点的差异。

例如,传统社会科学实证更关心无偏性。为了实现无偏估计,在不知道也无法获得数据的真实分布的情况下,最佳策略往往是建立一个非常复杂的模型,以尽可能实现一致估计。但这种情形下,模型通常会“过度拟合”样本数据,从而导致在样本以外的数据无效(Yarkoni and Westfall,2017)。相比之下,机器学习更加注重模型的预测能力和结论的泛化性(generalize)。

我们可以通过线性回归的例子来理解这一差异:

  • 线性回归:Yi=β0+β1X1i++βkXki+εiY_{i}=\beta_{0}+ \beta_{1}X_{1i}+ \dots +\beta_{k} X_{ki} + \varepsilon_{i}
  • 参数估计:Yi^=β0^+β1^X1i+β2^X2i++βki^Xki\hat{Y_{i}} = \hat{\beta_{0}}+ \hat{\beta_{1}} X_{1i} +\hat{\beta_{2}} X_{2i} + \dots +\hat{\beta_{ki}}X_{ki}
  • 基于以下公式的最小化:(YYi^)2\sum(Y-\hat{Y_{i}})^2

在估计好参数后,对于全新的 XXYi^\hat{Y_{i}} 就是其预测值。关键差异在于:计量经济学关注的是参数估计 β^\hat{\beta},而机器学习关注的是预测值 Y^\hat{Y}

传统计量重心在于 β^\hat{\beta} 而非 Y^\hat{Y},虽然对于我们所分析的样本,我们实现了 (YYi^)2\sum(Y-\hat{Y_{i}})^2 的最小化(这是OLS的定义),但对于全新的 XinXkn+1X_{in} \dots X_{kn+1},上述最小化是否依然成立?

问题的关键在于,这个预测是否准确,我们几乎不进行验证。

因果关系与预测的权衡

现代经济学实证分析的核心是讨论因果关系。虽然讨论清楚某个解释变量 X 对 Y 的影响是否具有因果性是可能的,但要讨论清楚所有因素对 Y 的因果影响则不太现实。就现代经济学实证主流方法而言,“xx影响因素研究”是一个非常差的论文选题(希望我今年不要再看到“保险风险管控研究”这样的论文标题了,根本就不构成一个问题啊我的朋友😭)。而机器学习的核心在于算法在新数据中的泛化能力(预测)。

虽然因果关系十分重要,但不能过分迷信因果关系而忽视相关关系的价值。Kleinberg et al.(2015)提出了两个典型案例来说明这一点:

  1. 政策制定者面临干旱时,需要决定是否跳祈雨舞(rain dance)以增加下雨概率
  2. 一个人出门前考虑是否带伞,通过观察他人是否带伞来推测是否会下雨

对于第一个问题,确实需要明确祈雨舞与下雨之间是否存在因果关系(不然政策制定者可能真的组织大家去跳舞...);而对于第二个问题,仅需关注预测的准确性即可

假设 YY(下雨)为结果变量,其可能依赖于一组变量和 X0X_{0},决策者需要就行动进行决策(是否带伞、是否跳祈雨舞),以最大化收益 π(X0,Y)\pi (X_{0},Y)

π(X0,Y)X0=πX0+πYYX0\frac{\partial \pi(X_{0},Y)}{\partial X_{0}} = \frac{\partial \pi}{\partial X_{0}} + \frac{\partial \pi }{\partial Y} \frac{\partial Y}{\partial X_{0}}

预测下雨对带伞决策很重要,是因为带伞的收益依赖于是否下雨。这种依赖关系在政策制定中很常见。

进行预测时,相关关系往往就足够了,并不一定需要因果关系。例如:

  • 看到街上有人带伞可以预测可能下雨,但带伞显然不会导致下雨
  • 蛤蟆乱叫可能预示地震来临,但地震不是由蛤蟆乱叫导致的

重要的是,我们不能因为这些现象之间缺乏因果关系,就忽视它们在预测中的价值。

机器学习基本概念

机器学习也称 “统计学习”(Statistical Learning),由此可知主要使用统计方法;而计量经济学也大量使用统计学方法。机器学习的从业者被高大上地称为 “数据科学家”(data scientist),同时,机器学习还有一个称呼:人工智能(AI)。

ML or AI?
ML or AI?

机器学习的不同视角

不同的学科对于机器学习有着不同的理解。

  • 数学系的机器学习:泛函分析(functional analysis),甚至 Reproducing Kernel Hilbert Space(再生核希尔伯特空间)
  • 计算机的机器学习:各种算法(algorithm)的实现,甚至连线性回归的 OLS 问题也要用 “梯度下降法”(Gradient Descent)进行求解
  • 社会科学中的机器学习:机器学习的思想与应用。

机器学习与计量经济学的术语差异

机器学习与计量经济学在描述相同概念时使用了不同的术语:

  • “自变量” 或 “解释变量”,但机器学习则称为 “表征” 或 “特征”(Features)。
  • “因变量” 或 “被解释变量”,而机器学习则称为“响应”(Response)。
  • 数据为 “观测值”(Observation),而机器学习则直接称为 “案例”(Example)
  • 对于我们计量经济学的“模型”,他们一律称之为为“算法”。

机器学习的基本任务类型

机器学习算法主要分为两大类:有监督学习和无监督学习。有监督学习又可进一步分为:分类与回归。

  • 定性问题:分类,输出为离散的类别标签
  • 定量问题:回归,预测连续型变量

机器学习的基本原理

训练集和测试集

为了检验、提高泛化能力,机器学习将数据分成训练集和测试集:

graph LR
    A[表示
Representation] --> B[训练
Training/Learning] --> C[测试
Testing/Predicting/Inference]
  1. 表示 (Representation)

    • 将数据对象进行特征(feature)化表示
  2. 训练 (Training/Learning)

    • 给定一个数据样本集,从中学习出规律(模型)
    • 目标:该规律不仅适用于训练数据,也适用于未知数据(称为泛化能力)
  3. 测试 (Testing/Predicting/Inference)

    • 对于一个新的数据样本,利用学到的模型进行预测

在实操中,特别是需要调参时,样本也可能被分成三份:训练集、验证集(用于调参)和测试集。

从计量经济学视角看机器学习,可以表达为:

  • 目标:给定一个未知函数 f(xi,β)f(x_i,\beta),通过训练数据 (yi,xi)i=1,...,n(y_i,x_i)_{i=1,...,n} 来学习未知函数 f(xi,β)f(x_i,\beta)
  • 其中,β\beta 为未知参数(甚至不存在,非参估计)

具体而言:

  • 根据训练数据,找到一个函数 yi^=f(xi,β^)\hat{y_i}=f(x_i,\hat{\beta})
  • 使得所做的预测 yi^\hat{y_i} 与实际的 yy “差距”最小
  • 在测试集中验证函数表现

过拟合与欠拟合

在监督学习中,我们的目的是在训练数据中构建模型,然后能够对没见过的新数据做出准确预测。如果一个模型能够对没见过的数据做出准确预测,我们就说,它能够从训练集范化(generalize) 到测试集。

以进行图形识别的机器学习为例,假设你在训练一个识别猫的模型:

挑选出猫的图片
挑选出猫的图片

模型需要从图片中提取特征:腿长、鼻子大小、耳朵大小等等(这就是计量中的解释变量,机器学习中的特征)

这个过程中存在两种常见问题:过拟合(over-fitting)和欠拟合(under-fitting)。

过拟合

假如训练样本中的所有训练图片都是特定的猫品种,那么经过多次迭代训练之后,模型可能会过度学习该品种的特征,在训练集中表现得很好,基本上该猫身上的所有特点都涵括进去,甚至猫的颜色都囊括了。

但这将可能导致无法识别其他品种的猫。如,训练数据全是英短:圆脸、肥嘟嘟、银渐层,然后你拿个加菲猫测试,那么很有可能模型最后输出的结果就是:这不是猫。是噬元兽

这就是过拟合:模型把训练数据学得太死了,以至于看到新东西就懵了。像期末考试前背答案的我,考到新题型直接傻眼。

欠拟合

但是,如果仅用“体型中大、四肢中长”等过于笼统的特征,可能连基本的猫科动物识别都无法完成。

猫科动物:其体型中、大,躯体均匀,四肢中长,趾行性。头大而圆,吻部较短。
猫科动物:其体型中、大,躯体均匀,四肢中长,趾行性。头大而圆,吻部较短。

欠拟合指的是模型在训练和预测时表现都不好的情况。一个欠拟合的机器学习模型不是一个良好的模型,并且由于在训练数据上表现不好,这是显然的。

欠拟合通常不被讨论,因为给定一个评估模型表现的指标的情况下,欠拟合很容易被发现(猫都识别不全)。矫正方法是继续学习并且试着更换机器学习算法。

过拟合是机器学习中的一个重要问题

过拟合与欠拟合:回归
过拟合与欠拟合:回归

过拟合是机器学习中的一个重要问题!

  • 当某个模型过度的学习训练数据中的细节和噪音,以至于模型在新的数据上表现很差,我们称发生了过拟合。
  • 这意味着训练数据中的噪音或者随机波动也被当做概念被模型学习了。而问题就在于这些概念不适用于新的数据,从而导致模型泛化性能的变差。
  • 造成过拟合的原因可以粗略归结为:模型过于复杂,参数过多。

模型的复杂度和参数数量的确是导致过拟合的常见因素,但这种关系并非绝对。研究观察表明,模型性能与参数数量可能呈现 U 型关系:在参数数量较少时,增加参数可能确实导致性能下降,但当参数数量特别多时,模型性能可能反而有所提升。(参考:吴恩达 CS229 Lecture)

一切为了泛化:正则化

为了克服最小二乘法的过度拟合和泛化能力差的问题,可以对 OLS 的回归参数添加一个惩罚项,这个思路称为正则化(Regularization)。

Ridge 回归和 Lasso 回归是正则化的两种常见形式。具体而言,在目标函数(损失函数)上加上如下的惩罚项:

  • 岭回归(Ridge Regression) 使用 L2L_2 范数:

    i(yiXiTβ)2+λβ22\sum_{i} \left(y_i - X_i^T \beta\right)^2 + \lambda \|\beta\|_2^2

  • Lasso 回归(Lasso Regression) 使用 L1L_1 范数:

    i(yiXiTβ)2+λβ1\sum_{i} \left(y_i - X_i^T \beta\right)^2 + \lambda \|\beta\|_1

这种思路通过牺牲无偏性,提高泛化能力。可以证明,对于某个合适的参数 λ\lambda,正则化后的模型泛化能力优于 OLS 回归。参数 λ\lambda 可以通过交叉验证等方式确定。

一切为了泛化:集成算法

为了更好预测,机器学习什么事都干得出来,甚至会放弃可解释性。比如,不用全样本回归(分类),而是对原始样本、特征进行多次随机抽样,进行 N 次分类或回归,再通过平均或投票得出最终结果。这就是所谓“集成算法”,其中代表性算法为随机森林。

所以别让我预测 30 年后的房价了行不行?。

一切为了泛化:深度学习

为了提高泛化能力,机器学习算法还可以对算法进行多层嵌套,此即为所谓深度学习算法,其中代表性算法为神经网络。

机器学习主要算法

  • 经典回归算法:OLS 回归、岭回归、Lasso 回归
  • 经典分类算法: logit 回归、 K 近邻、朴素贝叶斯、决策树、支持向量机
  • 集成算法:随机森林、梯度下降树、xgboost
  • 深度学习算法:BP 神经网络、卷积神经网络、循环神经网络
  • 无监督学习算法:聚类算法、主成分分析算法、LDA主题算法
  • 自然语言处理:TFIDF、Word2vec 词嵌入、Bert 预处理模型

机器学习实现要点:Python 示例

Stata 让不懂计量的人跑回归,Python 让不懂机器学习的人跑算法。

主流编程软件都有现成的机器学习模块可以直接调用,不用自己去编写。因此实现一个机器学习的关键在于获得数据、定义特征(解释变量、X),即特征工程。

计量经济学使用的结构化数据,机器学习往往应用在非结构化数据当中。

但其实真正的工作量在数据处理上,反正我现在已经习惯了,项目时间 95% 花在数据处理,5%花在调包上。

调包侠现身说法:Python 实现 Lasso 回归的基本步骤代码

演示数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import numpy as np    
import pandas as pd
from sklearn import datasets, linear_model
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt

path="修改为你的路径/"
data= pd.read_csv(path+"ccpp.csv", encoding='utf8', header=0)

# 指定数据中的特征变量和响应变量
X = data[['AT', 'V', 'AP', 'RH']]
y = data[['PE']]

# train test split
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)
#指定一个正则化参数,此处我们将正则化参数设定为2
from sklearn.linear_model import Lasso
lasso =Lasso(alpha=2)

#用Lasso模型进行拟合,并打印Lasso模型的得分、参数估计值和常数项
lasso.fit(X_train, y_train)

print(lasso.score(X_train, y_train))
print(lasso.coef_)
print(lasso.intercept_)
Python 里的 Lasso 回归
Python 里的 Lasso 回归

接下来是调参,通过循环、对比,能找到泛化能力最强的参数。因为要调参,样本可以拆分成训练集、验证集和测试集:

Parameter Tuning
Parameter Tuning

特殊数据类型的处理

  • 文本数据的向量化表达:通过分词和独热编码转换为向量,需要注意维度灾难问题。

例如,原始文本库 ΨΨ 由两条帖子组成。第一条的内容是“明天涨停。后天涨停没戏。”第二条是“玛丽有个小绵羊。”

分词后得 “明天、涨停、后天、没戏、玛丽、有、个、小、绵羊”九个不同词语,即 𝑁=9𝑁=9

用独热法则“明天”用向量 [1,0,0,0,0,0,0,0,0][1,0,0,0,0,0,0,0,0] 表示,“涨停”为 [0,1,0,0,0,0,0,0,0][0,1,0,0, 0,0,0,0,0],以此类推。于是第一个帖子可用向量 [1,2,1,1,0,0,0,0,0][1,2,1,1,0,0,0,0,0] 表示,第二个帖子即 [0,0,0,0,1,1,1,1,1][0,0,0,0,1,1,1,1,1]

  • 图像数据的向量化表达:将像素转换成矩阵(进而转换成向量)

机器学习应用与启示

机器学习的优势

  • 处理高维数据,筛选变量(识别混淆变量,挑选工具变量)
  • 处理非结构化数据
  • 处理非线性关系
  • 注重检验泛化性能(预测准确性)
  • 异质性估计
  • 数据驱动(模型设定)

机器学习的应用

  • 数据挖掘
  • 计算机视觉
  • 自然语言处理
  • 生物特征识别
  • 搜索引擎
  • 医学诊断
  • 检测信用卡欺诈
  • 证券市场分析
  • DNA序列测序
  • 语音和手写识别
  • 战略游戏
  • 机器人

我们能用机器学习做什么?

  • 预测(公司破产概率、经济是否衰退)
  • 数据生成(文本中的情绪、从姓名推测性别)
  • 因果识别(构造反事实结果、异质性检验)

机器学习对经济学实证的启示

即便不做机器学习,我们计量经济学使用者也可以从机器学习理念当中学习到一些启发:

  • 更加重视样本的代表性
  • 回归方程不是包含控制变量越多就越好
  • 更加重视因果关系的异质性检验
  • 如果样本量允许,可以考虑采用机器学习的办法,将样本分成训练集和测试集(或采取交叉验证的办法),以检验拟合的稳健性。
  • 随机抽样,回归1000次,求平均或者求分布(一次随机可控试验得到的结论到底有多可靠呢)

working

©   开心地使用 Stellar 主题 ✧ 星际地球 读取运行时……

收集了 11 颗星星 ✧ 共 7.8w 颗星尘,

Umami Analytics Enabled | 站点更新日志