多元非线性回归的灵敏度分析
即使跳出统计、计量的领域，到了数据挖掘、人工智能的领域，线性回归模型也是打好基础的重中之重。
按照数据截取的方向划分，有三类:
横截面数据(cross section data)
时间序列(time series)
两者混合的面板数据(panel data)也叫纵面数据(longitudinal section data)
线性回归，一般研究的都是横截面数据(简称截面数据)，数据挖掘、人工智能重点模型大都也都是选择截面数据。
第二、三、八等章均是主要从统计的回归模型或者说计量经济学的模型角度来讨论的。
回归模型偏向对数值型变量的估值，而挖掘模型更偏向判别离散结果，如这个图片中的数字是0-9中的哪一个。正文一，建立回归模型的方法论
步骤名称 说明
1 理论或假说的陈述 凯恩斯设想:边际消费倾向
2 数学模型的设定 准确的确定性的模型: Y
3 回归模型(或计量经济学模型)的设定 非确定性模型-随机变量(误差项): Y
模型设置错误会产生选择性偏误
4 获得数据 自然科学来自于实验、社会科学来自于非实验
5 模型的估计 运用统计回归分析方法
6 模型的检验 统计学检验:拟合优度、显著性
计量经济学检验:误差项的正态性 、序列相关，异方差，多重共线性等
7 预测或预报 结构分析，经济预测，政策评价，检验与发展经济理论
8 利用模型做出决策 根据结果给定建议或方案
备注1:预测检验的具体检验方法为:
利用扩大了的样本重新估计模型参数的新估计值，与原来估计值比较，并检验二者差异的显著性;
将模型用于样本以外预测，将预测值与实际观测值进行比较，并检验二者差异的显著性
备注2:结构分析的方法:
弹性分析，某一变量的相对变化引起的另一变量的相对变化，即变量的变化率之比，比率关系
乘数分析，某一变量的绝对变化引起的另一变量的绝对变化，即变量的变化之比，倍数关系
比较静力分析，经济系统不同平衡位置之间的联系
二，一元线性回归模型 1，总体回归函数(1) 总体回归函数 (又叫条件期望函数)
表示，给定 X
该函数关系f()的形式是一个重要问题，一般依照某种理论假设或实际经验等给出。
备注:回归、回归方程、回归函数、回归模型不加以区分，均代表相同意思。
(2) 当f()为一元线性假设时，总体回归函数如下:
(3) 对于线性的解释
线性举例 非线性举例
对变量为线性 Y
对参数为线性 Y
(4) 误差项
我们可以得到，样本值与总体回归函数的差值
将其理解为两个组成部分
如果这些没有包括进模型的变量，与X不相关，且对于模型起不到决定性作用，那么上述方程没有什么问题;如果相反，则会出现omitted variables bias的情况
把等式两边取条件期望
2，样本回归函数
通过样本数据，样本回归模型的结果如下:
加入随机形式的表达如下:
所以，我们能够得到
β_0 β 0 的估计量
β_1 β 1 的估计量
μ_i μ i 的估计量，表示样本与总体的差异
每次总体抽样的结果不一样，得到的样本回归函数也不同，那如何能够让样本回归函数尽可能的趋近于总体回归函数呢三，一元线性模型的估计量 最经典的线性回归模型的估计方法是普通最小二乘 (Ordinary Least Squares, OLS)估计方法，除此之外还有 极大似然 (Maximum Likelihood)估计方法，对于一般线性回归模型，二者得到的结果是相同的。
备注:以上方法的估计量实际是点估计，与点估计对应的，还有区间估计，但是区间估计需要有概率分布的信息。
根据之前的说明，我们知道，当用样本来估计总体时，将产生误差项
OLS的思想即是求得回归参数的估计量，使得 ∑
目标函数最小
求目标函数极小值的过程:
等式1,同时除n变换
(其中， y
另外根据等式2，得
即，残差 μ
\hat{μ} μ ^ 与 X
2，最小二乘回归的基本假定
假设 假设说明 解释
解释变量假设 确定性假设 X是固定值、非随机变量 保证模型可建的基本假设-因为模型是条件期望即条件回归
非完全共线性假设 共线性导致解释变量冗余 完全共线性导致求解不唯一，部分共线性导致求解不稳定
与残差不相关 c
β_1 β 1 求偏导数为零求得
随机残差项假设 零均值假设 E( μ
同方差假设 var( μ
σ^2 σ 2 也成立
序列不相关 var( μ
正态性假设 μ
3，估计量的均值与方差
如果对总体数据进行 中心化处理 ，即 x
由于X是固定变量， 令
线性的)
又因为数据做了中心化处理，所以 ∑
无偏性的)
因为假设残差不自相关 E
4，高斯-马尔可夫定理
在上述给定的经典线性回归模型的假定下，OLS的估计量是BLUE的，即 最佳线性无偏估计量 (best linear unbiased estimatior,BLUE):
线性的:参数线性
无偏性:期望值等于真实值
有效性:最小方差的无偏估计量
5，最大似然估计
除上述假设外，若残差项再服从独立且正态分布 N
ML估计的残差方差是有偏的，但是在大样本的情况下，趋于一致性。
所以ML又叫大样本方法，并且ML除了线性模型，也可以对非线性模型进行估值。
有 μ
μ μ 的线性组合服从的分布不变，
所以， Y
定义目标函数L
L^* L ∗ 求极大值，即是等价于对 ∑
代入均值，我们可得
总平方和为
由于等式3，知
总平方和(TSS) = 回归平方和(ESS) + 残差平方和(RSS)
我们定义拟合优度(又叫判定系数)为:
注意1:对于截距项是零的回归模型，OLS目标函数只能得到一个偏导数方程，无法推论出 ∑
即过原点的回归模型来说，拟合优度 R
注意2:要避免进入 R
2，残差项的正态性假设
我们假定残差项:正态且独立分布，即μ~ N
根据中心极限定理，大部分情况都会符合正态分布
如果假设成立， β
理论分布比较简单
3，方程的显著性检验-F检验(方差分析)
为了验证方程的显著性，我们通过对总体平方和的分解，来构造方差分析中的F统计量。
平方和 自由度 均方 F统计量
由于F统计量可以写成拟合优度的表达式: F
所以，F检验实际上也是对拟合优度 R
注意:本章假设回归模型为 Y
如果参数的设置是由 β
4，变量的显著性检验-t检验
对每个变量进行显著性判断，通过构造t统计量进行推断
值得注意的是，对于多元回归模型，拟合优度需要修正:
调整后的拟合优度:
k为包括截距项的估计参数的个数
1，计量经济学基础，古扎拉蒂
建立多元性回归模型时，为了保证回归模型具有优良的解释能力和预测效果，应首先注意 自变量的选择，其准则是:(1)自变量对因变量必须有显著的影响，并呈密切的线性相关 ;(2)自变量与因变量之间的线性相关必须是真实的，而不是形式上的;
3.回归方程的显著性检验 回归方程的显著性检验，即检验整个回归方程的显著性，或者说评价所有自变量与因变量的线性关系是否密切。
对 二元线性回归 而言，可用下列公式计算:其中，
多重共线性是指在多元线性回归方程中，自变量之间有较强的线性关系，这种关系若超过了因变量与自变量的线性关系，则回归模型的稳定性受到破坏，回归系数估计不准确。
三、公路客、货运输量多元线性回归预测方法的实施步骤
影响公路客货运输量的因素很多，主要包括以下一些因素:
(2)货运量影响因素
2.建立经验线性回归方程利用最小二乘法原理寻求使误差平方和达到撮小的经验线性回归方程: y--预测的客、货运量
g--各主要影响因数
资料整理主要包括下列内容:
(2)对不可靠资料加以核实调整.对查明原因的异常值加以修正。
4.多元线性回归模型的参数估计
此项工作的目的在于判定估计值是否满意、可靠。
通常，在公路客、货运量预测中应采用的统计检验是:拟合度检验
参数估计值的标准差 检验估计值的标准差是衡量估计值与真实参数值的离差的一种量度。
6.最优回归方程的确定
从数理统计的原理来讲，应挑选方程的剩余均方和S·E较小为好.但作为经济预'删还必须尽量考虑到方程中的影响因素更切合实际和其未来值更易把握的原则来综合考虑。
7.模型的实际预测检验
(2)把估计出来的模型用于样本以外某一时间的实际预测，并将这个预测值与实际的观察值作一比较，然后检验其差异的显著性。
8.模型的应用
(1)进行结构分析，研究影响该地区的公路客、货运输量的主耍因素和各影响因素影响程度的大小，进一步探讨该地区公路运输经济理论。
(2)预测该地区今后年份的公路客、货运输量的变化，以便为 公路运输市场 、公路运输政策及公路运辅建设 项目投资 作出正确决策提供理论依据。
x 1 --国民收入
2.经调查分析、影响某地区旅客运输量的因素为:
x 3 --社会总产值
x 4 --人口
x 6 --国民生产总值
x 7 --公路通车里程
经计算得客运量和旅客周转量的经验线性回归方程如下:
Z--旅客周转量
各自变量问的相关系数表如下:
3.经调查分析，影响某地区货运周转量的因素为:
x 3 --基建投资额
x 6 --国民总产值
x 7 --社会商品零售总额
x 8 --相邻地、市工农业总产值的平均值
线性回归、逻辑回归 统计学习=机器学习，即根据指标找到最优超参数，确定模型。
1.1 简单线性回归 方法:最小似然估计import pandas as pd import numpy as np import os import matplotlib . pyplot as plt #可视化 import statsmodels . api as sm from statsmodels . formula . api import ols #线性回归
exp = raw [ raw [ 'avg_exp' ] . notnull ( ) ] . copy ( ) . iloc [ : , 2 : ] . drop ( 'age2' , axis = 1 ) #去除平均支出为0的客户，去除前两列和 exp
exp . describe ( include = 'all' ) exp . plot ( 'Income' , 'avg_exp' , kind = 'scatter' ) #两个连续变量->散点图 ‘scatter’ plt . show ( )
lm_s = ols ( 'avg_exp ~ Income' , data = exp ) . fit ( ) #拟合平均支出与收入的线性关系 lm_s . summary ( )
产生预测值
在原始数据集上得到预测值和残差
predict() 预测
resid 残差=实际值-预测值
在待预测数据集上得到预测值 ->对未开卡人做预测，如果未来开卡的消费支出值
1.2 多元线性回归 定义拟合模型lm_m = ols ( 'avg_exp ~ Age + Income + dist_home_val + dist_avg_income' , data = exp ) . fit ( ) lm_m . summary ( )
向前法、向后法、逐步法
多元线性回归假设 :使得模型满足某些假设
对x和y之间的关系的假设:
2. *解释变量X和扰动项不存在线性关系 (根据理论或常识判断，无法检验)
(如果存在线性关系，应将与X相关的尽量多的变量纳入模型中)
3. 解释变量之间不存在线性关系 (膨胀系数)
对y、€的假设:
5. 随机误差项方差恒为σ^2
6. 误差是独立的 (异方差检验、DW检验)
线性回归诊断 :检验模型与假设是否一致，不一致调整至一致
首先画图，用散点图和残差图检查假设
残差中是否有离群值;
残差散点图是否和某个解释变量X有曲线关系(抛物线)
残差离散程度是否和某个解释变量有关
非线性关系:加入X的高阶形式，一般加X2已经足够了
自相关:时间序列数据，周期性波动，加入Y的一阶滞后项进行回归
exp [ 'pred' ] = anal . predict ( exp ) #查看残差图 exp [ 'resid' ] = anal . resid
exp . plot ( 'pred' , 'resid' , kind = 'scatter' ) #p=βr ‘income’和‘pred’结果一样 plt . show ( )
#散点图呈喇叭状，异方差，下一步优化应取对数
ana1 = ols ( 'avg_exp ~ Income' , exp ) . fit ( ) #拟合模型 ana1 . summary ( )
将lny放入模型
exp [ 'Income_ln' ] = np . log ( exp [ 'Income' ] #对X取对数 ana3 = ols ( 'avg_exp_ln ~ Income_ln' , exp ) . fit ( ) exp [ 'Pred' ] = ana3 . predict ( exp ) exp [ 'resid' ] = ana3 . resid
模型解释的越符合常理，R^2越高
强影响点的统计量:学生化残差 = 残差 / 标准误差
强影响点的识别:
样本量为几百，|SR| >2 为相对大的影响点
样本量为几千，|SR| >3 为相对大的影响点
异常值一般只去一次
exp [ 'resid_t' ] = ( exp [ 'resid' ] - exp [ 'resid' ] . mean ( ) ) / exp [ 'resid' ] . std ( ) #学生化残差 exp [ abs ( exp [ 'resid_t' ] ) > 2 ] #样本量为几百，认为大于2为强影响点 exp2 = exp [ abs ( exp [ 'resid_t' ] ) <= 2 ] . copy ( ) #去除异常值 ana4 = ols ( 'avg_exp_ln ~ Income_ln' , exp2 ) . fit ( ) exp2 [ 'Pred' ] = ana4 . predict ( exp2 ) exp2 [ 'resid' ] = ana4 . resid
exp2 . plot ( 'Income' , 'resid' , kind = 'scatter' ) plt . show ( ) ana4 . rsquared #查看R^2值 0.49397191385172456
多重共线性分析
方差膨胀因子:Vif指标
方差膨胀因子>10表示某变量的多重共线性严重
#增加变量 exp2 [ 'dist_home_val_ln' ] = np . log ( exp2 [ 'dist_home_val' ] ) exp2 [ 'dist_avg_income_ln' ] = np . log ( exp2 [ 'dist_avg_income' ] ) ana5 = ols ( '''avg_exp_ln ~ Age + Income_ln +
dist_home_val_ln + dist_avg_income_ln''' , exp2 ) . fit ( ) ana5 . summary ( ) #多重共线性分析 def vif ( df , col_i ) : #定义vif cols = list ( df . columns ) cols . remove ( col_i ) cols_noti = cols
#将Vif大于10的剔除，剔除不显著的，删除即可。
建立线性模型流程:
初始分析:X、Y的分布，正态/右偏
变量选择:X、Y之间的关系，保留显著的关系
验证模型假定:散点图、经验假定X、Y之间的具体函数关系
多重共线性与强影响点诊断与分析
满足要求，得到模型
2 逻辑回归 Odds Ratio(优势比):一个事件在一个组发生的可能性相对于在另一个组的大小Odds(优势):事件发生的概率与不发生概率之比，值域[0,∞)
#Odds Ratio将概率范围扩大至∞
Logit是Odds的自然对数，logit(Pi)=事件发生概率的logit
i表示所有案例，观测值
Pi在第i个案例中一个事件发生的概率
2.2 模型评估 决策类模型评估--混淆矩阵
设置阈值->真实值和预测值做交叉表，即混淆矩阵
灵敏度Sensitivity(覆盖率)=A/(A+B)，重要
命中率Precision=A/(A+C)，预测违约的人中真的违约的人数
特异度Specificity(负的覆盖率)=D/(C+D)
ROC曲线 (SAS的输出结果)
模型预测的三种结果:一致对(√)、不一致对、相等对(50%√)
一致对表:
statmodels不提供一致对表，可用ROC曲线下面积(AUC)代表，AUC就是C统计量
随机抽样，建立训练集与测试集
train = accepts . sample ( frac = 0.7 , random_state = 1234 ) . copy ( ) #抽样70%，初始值1234随意设置 test = accepts [ ~ accepts . index . isin ( train . index ) ] . copy ( ) #找出没在的train内的样本 print ( ' 训练集样本量: %i 
 测试集样本量: %i' % ( len ( train ) , len ( test ) ) )
lg = smf . glm ( 'bad_ind ~ age_oldest_tr' , data = train , family = sm . families . Binomial ( sm . families . links . logit ) ) . fit ( ) #Binomial伯努利分布，0-1分布 lg . summary ( )
计算混淆矩阵指标 acc = sum ( test [ 'prediction' ] == test [ 'bad_ind' ] ) / np . float ( len ( test ) ) print ( 'The accurancy is %.2f' % acc ) #The accurancy is 0.77 #ROC曲线 import sklearn . metrics as metrics
注意: 如果我们将回归模型(regression model)的连续输出进行离散化，虽然看起来得到了有限个离散类别，但其本质还是回归模型，只是对输出做了特殊处理 2 . 分类模型: 给定一个新的输入特征, 推断它所对应的类别(大多数情况是二分类如: + 1 , - 1 ，也可以基于二分类扩展出多分类), 也就是使用y=sign(g(x))来推断任一输入x所对应的类别.
注意: 模型的输出结果类别是有限的
0x3:典型线性回归和线性分类算法 1. 典型线性回归算法 1. Linear Regression: 输出一个标量 wx+ b，这个值是连续值，所以可以用来处理回归问题 2 . SVR(Support Vector Regression):输出 wx+ b，即某个样本点到分类面的距离，是连续值，所以是回归模型 3 . Naive Bayes用于分类: 预测结果y是离散的类别，所以得到离散的 p(y| x)，给定 x ，输出每个类上的概率 4 . 前馈神经网络(如 CNN 系列)用于回归: 最后一层有m个神经元，每个神经元输出一个标量，m个神经元的输出可以看做向量 v，然后全部连到一个输出神经元上，则这个神经元输出 wv+b，是一个连续值，可以处理回归问题，和 Linear Regression 思想一样
2. 典型线性分类算法 1. Logistic Regression(逻辑斯蒂回归):把 Linear Regression的 wx+b 通过 sigmoid 函数映射到( 0 , 1 )上，并划分一个阈值，大于阈值的分为一类，小于等于分为另一类，可以用来处理二分类问题 2 . SVM(Support Vector Machine): 把SVR得到的距离用 sign(·) 函数进行离散化处理，距离为正(在超平面一侧)的样本点是一类，为负的是另一类，所以是分类模型 3 . Naive Bayes用于分类: 对最大后验预测结果p(y|x)求期望 ΣyP(y| x)(即得到概率密度)，就得到连续值 4 . 前馈神经网络(如 CNN 系列)用于分类: m个神经元最后连接到 N 个神经元，就有 N 组w值不同的 wv+b，同理可以归一化(比如用 softmax )变成 N个类上的概率，然后取概率最大的那一类作为N分类的预测结果
我们本文重点讨论线性函数相关问题，关于非线性函数问题放在文章的最末尾简单讨论 0x1:线性相关性分析 - 线性回归的原理基础 线性回归分析(Linear Regression Analysis)是确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法线性回归分析法是以相关性原理为基础的.相关性原理是预测学中的基本原理之一
这种函数是一个或多个 (即多元线性回归可以看成是很多个一元线性回归的线性组合) 称为 回归系数的模型参数的线性组合
这里面积、地段、层数、周边配套就是自变量;房价就是因变量。
线性回归要做的是就是找到一个数学公式能相对较完美地把所有自变量组合(加减乘除)起来，得到的结果和房价接近。
这里的所谓“数学公式”就是一个线性模型
接下来我们用一个例子来思考如何去解决一个现实中常见的问题，在一开始我们先不涉及最小二乘法、损失函数、牛顿法、梯度下降这些概念，我们只是单纯地去思考和解决问题 1. 问题描述 比方说有一个公司，每月的广告费用和销售额，如下表所示如果我们把广告费和销售额画在二维坐标内，就能够得到一个散点图，如果想探索广告费和销售额的关系，就可以利用一元线性回归做出一条拟合直线
很自然地，我们需要引入一个"标准"来评价模型参数空间中，哪一个是最好的，这就是经验损失函数(注意区别于结构损失函数)
损失函数其 - 残差平方和(又称误差平方和，SSE，Sum of Squaresfor Error)
直观上，我们把我们预测的线性函数对每一个X的回归值(回归函数上的Y值)和真实值进行相减，为了防止负值的出现加上平方，得到一个平方和，最后对比所有的模型参数，谁的平方和最小，谁就是最佳的回归函数
这个方法被称为 最小二乘法
线性回归问题中使用最小二乘法求解全局最优解
上面提到的残差平方和，就是最小二乘法用于评估当前损失函数的方法，我在线性回归中所谈到的最小二乘是指侠义的最小二乘方法，它是一种闭式解的参数求解方法，通过对所有输入样本的残差平方和公式求解最小误差条件下的极值(导数为0)，一步获得全局最优解
那么实际值与回归值的差异，就是除了广告费之外其他无数因素共同作用的结果，是不能用回归线来解释的
这就反回来启发我们，应该用一个更加切近真实情况的损失评估标准 来评估我们的回归线，为了引入这个新的损失评估标准，我们先来引入一个新的误差函数
实际上也就是方差
回归平方和( SSR，Sum of Squares forRegression) :因变量的回归值(直线上的Y值) 与其均值(给定点的Y值平均)的差的平方和，即，它是由于自变量x的变化引起的y的变化，反映了y的总偏差中由于x与y之间的线性关系引起的y的变化部分，是可以由回归直线来解释的
继续上面的例子，如果我们的数据集是下图所示
为了定量说明这个问题，我们需要引入 相关系数R
这就告诉我们，如果遇到这种情况，即我们用线性回归发现无法很好地拟合我们的训练样本，这个时候其实是有两种可能
我们在建模之前，就需要先对我们的业务场景进行充分的了解，根据实际业务场景中数据的规律选择合适的拟合模型
在这种复杂问题的拟合中，我们要用到多元线性函数
对于 组观测值 ，其方程组形式为: 即
= + 即: 其中
( 1 ) 自变量对因变量必须有显著的影响，并呈密切的线性相关(相关系数R值较大);
这里举一个例子来说明，也许在训练集中，天气的情况和你这个月的收入正好呈现强正相关，但这也许只是样本量不足带来的一种假象，事实上是不符合真实规律的;
( 3 ) 自变量之间应具有一定的互斥性，即自变量之间的相关程度不应高于自变量与因变量之因的相关程度，这条准则意思是特征自变量之间最好不要存在太多的冗余关系，当出现冗余时可以考虑降维处理(例如PCA);
( 4 ) 自变量应具有完整的统计数据，其预测值容易确定
在回归方程中若漏掉对Y影响显著的自变量，那么建立的回归式用于预测时将会产生较大的偏差。