1.二元分类问题
- 失效的线性回归
线性回归需要满足3个基本假设
(1)因变量和自变量之间是线性关系
(2)自变量和干扰项相互独立
(3)没被线性模型捕捉到的干扰项服从正态分布
对于二元分类问题,因变量的值表示一种选择,只有0/1两个值,但模型预测值却是充满实数集的连续变量值,与设定不符
- 窗口效应
假设有自变量集合.他们决定购买衣服对客户i的效用,包括正效用和负效用,将观察到的客户购买行为记为,则表示购买,表示未购买,于是有
进一步假设正效用和负效用和自变量是线性关系。具体地,假设,是模型参数,有
其中,和是相互独立的随机变量,且都服从正态分布。
令,,,可以得到
进一步有
其中,是随机变量的累积分布函数,表示客户购买的比例。这个公式对应的模型叫probit回归,用来解决分类问题
在搭建模型过程中,假设了隐含变量和,这类模型称为隐含变量模型。
由于正态分布的分布函数没有解析表达式,使得probit回归的参数估计比较困难。
- 逻辑分布
逻辑分布可以很好的近似正态分布
标准逻辑分布的概率密度函数为
对应的累积分布函数(S曲线)为
S曲线描述了某一方竞争胜出的概率
逻辑回归模型:
第一个公式表示客户i购买概率的估计,第二个式子以矩阵的形式,将所有客户的购买概率写成一个表达式。其中,表示客户i的特征,是模型参数
称为发生比(odds),表示事件发生和不发生的比例
逻辑回归的假设是:事件发生比的对数为线性模型
- 统计学角度:参数估计之似然函数
被预测量是离散的,取值为1或0,所以的概率分布函数为
之间相互独立,可以推出参数的似然函数
其中,
似然函数两边同时取对数,计算得参数的最大似然为
- 机器学习角度:参数估计之损失函数
交叉熵:两个(离散)概率分布之间的距离。根据机器学领域中的KL散度推导而来,使估计的概率分布距离真实的概率分布最近,等价于让损失函数达到最小值
概率距离型损失函数为
为防止过拟合,常加入1-范数或2-范数惩罚项
- 从概率到选择:参数估计之最终预测
一般情况下,当时,认为客户会购买是合情理的,则最终的模型结果可写成
- 从非线性到线性
逻辑回归在二维空间中的作用就是将非线性问题转换为线性问题,然后用线性回归去解决。
2.模型实现
- 初步分析数据
变量名 | 变量类型 | 说明 |
age | 数值型 | 年龄 |
workclass | 类别型 | 工作类型 |
fnlwgt | 数值型 | 抽样权重 |
education | 类别型 | 学历 |
education_num | 数值型 | 受教育年限 |
martial_status | 类别型 | 婚姻状况 |
occupation | 类别型 | 所在行业 |
relationship | 类别型 | 家庭角色 |
race | 类别型 | 种族 |
sex | 类别型 | 性别 |
capital_gain | 数值型 | 年度投资收益 |
capital_loss | 数值型 | 年度投资损失 |
hours_per_week | 数值型 | 每星期工作时间 |
native_country | 类别型 | 出生国家 |
label | 类别型 | 年收入分类 |
数值型变量可以直接运算,类别型变量不能直接运算
利用统计指标分析数据
(1)利用DataFrame的describe函数,可以得到数据的基本统计信息,如平均值、标准差等。
要全部变量的统计信息:describe(include='all')
(2)交叉报表:一种常见的数据分析方法,可以用来描述两个变量之间的关系(比如这里的“受教育年限”和“年收入”)
归一化以后表示:元素在对应行中的占比
- 搭建模型
(1)用第三方库statsmodels搭建模型
使用statsmodels搭建模型时,“formula”字符串定义模型的形式
formula="label_code~a*age+b*age*education_num+c"
其中,label_code是被预测变量,age以及age*education_num是特征
(2)用统计学方法分析模型参数估值的稳定性
统计分析结果包含参数的估计值和置信区间,用f_test做假设检验
- 理解模型结果
(1)事件发生比:模型参数的意义
称为发生比,记为odds,表示事件发生与不发生的比例
(2)边际效应:变量变动对概率的影响
边际效应:被预测量对这个变量的导数
逻辑回归的边际效应不稳定,线性回归的边际效应恒定。
对于某个变量,先计算数据样本内所有数据点上的边际效应,再计算这些边际效应的均值,作为该变量的边际效应。
get_margeff(at="overall").summary() 可以返回变量的边际效应和对应的置信区间
3.模型效果评估
逻辑回归模型的结果表示事件发生的概率,需要设定恰当的阈值得到二值结果
查准率:
查全率(召回率):
其中,TP表示预测为1且实际为1的部分,FP表示预测为1且实际为0的部分,FN表示预测为0且实际为1的部分
结合两者定义二元分类问题评估指标
调节的取值可以选定合适的阈值
接收者操作特征曲线ROC:将模型的阈值从0到1,把每个阈值对应的预测结果记录在图上
AUC:ROC曲线下的面积,AUC值越大表示模型预测效果越好,可以被看作模型预测正确的概率
4.多元分类问题
- 多元逻辑回归
对于多元分类问题,设置K个隐含变量,参数的似然函数为
- 从二元到多元
对于多元分类,为每一个类别建立一个分类器,将K元分类问题转换成K个二元分类问题
但是这个方案容易遇到非均衡数据集的问题
- 模型实现
第三方算法库scikit-learn和statsmodels都实现了这两种算法,下面以scikit-learn为例
model=LogisticRegression(multi_class=methods[i],solver='sag',max_iter=1000,random_state=42)
5.非均衡数据集
- 准确度悖论
对于非均衡数据集,准确度指标会严重失真,即使ACC很高,预测也不准确
- 一个例子
- 解决方法
通过调整各个类别的比重,解决非均衡数据集的问题