信用评分卡建模:logistic模型

前言

logistic模型是基本线性回归模型的扩展,为了解决其无法对非线性问题分类,进行函数变换得到logistic模型,但logistic模型只能处理二分类问题,softmax在logistic模型的基础上进行改进,可以进行多分类。

1、logistic模型原理

基本线性回归模型公式如下:
f ( x ) = w T x + b f(x)=w^Tx+b f(x)=wTx+b
其中 w T w^T wT是参数向量,x是样本,b为偏置项。
为了得到非线性效果,进行函数变换得到对数线性回归模型:
f ( x ) = ln ⁡ ( w T x + b ) f(x)=\ln(w^Tx+b) f(x)=ln(wTx+b)
以二分类为例,我们想要得到预测结果为0,1的函数,则需要找到一个能把结果映射到0到1范围内的映射函数,同时该映射函数导数性质要好,能构造出损失函数,并通过求导优化参数。sigmoid函数完全满足以上条件,其表达式如下:
s i g m o i d ( x ) = 1 1 + e ( − x ) sigmoid(x)=\frac{1}{1+e^{(-x)}} sigmoid(x)=1+e(x)1
设h(x)=sigmoid(x), 可推出sigmoid()函数有如下导数性质:
h ′ ( x ) = h ( x ) ( 1 − h ( x ) ) h'(x)=h(x)(1-h(x)) h(x)=h(x)(1h(x))
推导过程如下:
( 1 1 + e − x ) ′ = e − x ( 1 + e − x ) 2 = 1 1 + e − x ⋅ e − x 1 + e − x = 1 1 + e ( − x ) ⋅ ( 1 − 1 1 + e − x ) = s i g m o i d ( x ) ( 1 − s i g m o i d ( x ) ) \begin{aligned} (\frac{1}{1+e^{-x}})'&=\frac{e^{-x}}{(1+e^{-x})^2}\\ &=\frac{1}{1+e^{-x}}·\frac{e^{-x}}{1+e^{-x}}\\ &=\frac{1}{1+e^{(-x)}}·(1-\frac{1}{1+e^{-x}})\\ &=sigmoid(x)(1-sigmoid(x)) \end{aligned} (1+ex1)=(1+ex)2ex=1+ex11+exex=1+e(x)1(11+ex1)=sigmoid(x)(1sigmoid(x))

因此Logistic回归模型可以表示如下:
y = 1 1 + e − ( w T x + b ) y=\frac{1}{1+e^{-(w^Tx+b)}} y=1+e(wTx+b)1

P ( y = 1 | x ; w ) = h ( x ) = 1 1 + e − ( w T x + b ) P ( y = 0 | x ; w ) = 1 − h ( x ) = 1 1 + e ( w T x + b ) P(y=1|x;w)=h(x)=\frac{1}{1+e^{-(w^Tx+b)}}\\ P(y=0|x;w)=1-h(x)=\frac{1}{1+e^{(w^Tx+b)}} P(y=1x;w)=h(x)=1+e(wTx+b)1P(y=0x;w)=1h(x)=1+e(wTx+b)1
合并上式可得:
P ( y ∣ x ; w ) = ( h ( x ) ) y ( 1 − h ( x ) ) 1 − y P(y|x;w)=(h(x))^y(1-h(x))^{1-y} P(yx;w)=(h(x))y(1h(x))1y
其中,y取值0或1,构造似然函数如下:
L ( w ) = ∏ i = 1 n P ( y i ∣ x i ; w ) = ∏ i = 1 n ( h ( x i ) ) i y ( 1 − h ( x i ) ) 1 − y i L(w)=\prod^n_{i=1} P(y_i|x_i;w)=\prod^n_{i=1}(h(x_i))^y_i(1-h(x_i))^{1-y_i} L(w)=i=1nP(yixi;w)=i=1n(h(xi))iy(1h(xi))1yi
似然函数取最大既可求得,最优的w值。为了方便求解,对上式加负号并取对数转为求函数的极小值,即可得到交叉熵损失
− l o g ( L ( w ) ) = − ∑ i = 1 n y i log ⁡ ( h ( x i ) ) + ( 1 − y i ) log ⁡ ( 1 − h ( x i ) ) -log(L(w))=-\sum _{i=1}^ny_i\log(h(x_i))+(1-y_i)\log(1-h(x_i)) log(L(w))=i=1nyilog(h(xi))+(1yi)log(1h(xi))
J ( w ) = − l o g ( L ( w ) ) J(w)=-log(L(w)) J(w)=log(L(w)),上式对w求导:
∂ J ( w ) ∂ w = ∂ ( − log ⁡ ( L ( w ) ) ) ∂ w = − ∑ i = 1 n ( y i h ( x i ) − 1 − y i 1 − h ( x i ) ) h ′ ( x i ) \begin{aligned} \frac{\partial J(w)}{\partial w}&=\frac{\partial (-\log(L(w)))}{\partial w}\\ &=-\sum_{i=1}^n(\frac{y_i}{h(x_i)}-\frac{1-y_i}{1-h(x_i)})h'(x_i)\\ \end{aligned} wJ(w)=w(log(L(w)))=i=1n(h(xi)yi1h(xi)1yi)h(xi)
其中, h ′ ( x ) = h ( x ) ( 1 − h ( x ) ) h'(x)=h(x)(1-h(x)) h(x)=h(x)(1h(x)),代入可得:
∂ J ( w ) ∂ w = − ∑ i = 1 n ( y i h ( x i ) − 1 − y i 1 − h ( x i ) ) h ′ ( x i ) = − ∑ i = 1 n ( y i h ( x i ) − 1 − y i 1 − h ( x i ) ) h ( x ) ( 1 − h ( x ) ) ∂ w T x i ∂ w = − ∑ i = 1 n ( y i − h ( x i ) ) x i \begin{aligned} \frac{\partial J(w)}{\partial w}&=-\sum_{i=1}^n(\frac{y_i}{h(x_i)}-\frac{1-y_i}{1-h(x_i)})h'(x_i)\\ &=-\sum_{i=1}^n(\frac{y_i}{h(x_i)}-\frac{1-y_i}{1-h(x_i)})h(x)(1-h(x))\frac{\partial w^Tx_i}{\partial w}\\ &=-\sum_{i=1}^n(y_i-h(x_i))x_i \end{aligned} wJ(w)=i=1n(h(xi)yi1h(xi)1yi)h(xi)=i=1n(h(xi)yi1h(xi)1yi)h(x)(1h(x))wwTxi=i=1n(yih(xi))xi
采用梯度下降法对参数进行更新,经过多次迭代即可求得最优参数w。
w t + 1 = w t − γ ∂ J ( w ) ∂ w w_{t+1}=w_t-\gamma \frac{\partial J(w)}{\partial w} wt+1=wtγwJ(w)
相对于原始的线性模型,Logistic模型通过sigmoid函数映射后,将数据压缩到了0~1之间,因此可以很好的解决异常点分类问题。

过拟合与正则项

为了防止模型过拟合,可以通过添加正则项的方式解决该问题,常用的正则项有:L1正则,L2正则,或结合L1和L2正则的弹性网。
添加L1正则的损失函数如下:
J ( w ) = − ∑ i = 1 n y i log ⁡ ( h ( x i ) ) + ( 1 − y i ) log ⁡ ( 1 − h ( x i ) ) + λ ∑ i = 1 d ∣ w i ∣ J(w)=-\sum _{i=1}^ny_i\log(h(x_i))+(1-y_i)\log(1-h(x_i))+\lambda \sum _{i=1}^d|w_i| J(w)=i=1nyilog(h(xi))+(1yi)log(1h(xi))+λi=1dwi
添加L2正则的损失函数如下:
J ( w ) = − ∑ i = 1 n y i log ⁡ ( h ( x i ) ) + ( 1 − y i ) log ⁡ ( 1 − h ( x i ) ) + λ ∑ i = 1 d w i 2 J(w)=-\sum _{i=1}^ny_i\log(h(x_i))+(1-y_i)\log(1-h(x_i))+\lambda \sum _{i=1}^dw_i^2 J(w)=i=1nyilog(h(xi))+(1yi)log(1h(xi))+λi=1dwi2
添加弹性网Elastic net后的损失函数如下:
J ( w ) = − ∑ i = 1 n y i log ⁡ ( h ( x i ) ) + ( 1 − y i ) log ⁡ ( 1 − h ( x i ) ) + λ ( ρ ∑ i = 1 d ∣ w i ∣ + ( 1 − ρ ) ∑ i = 1 d w i 2 ) J(w)=-\sum _{i=1}^ny_i\log(h(x_i))+(1-y_i)\log(1-h(x_i))+\lambda (\rho \sum _{i=1}^d|w_i|+(1-\rho)\sum _{i=1}^dw_i^2) J(w)=i=1nyilog(h(xi))+(1yi)log(1h(xi))+λ(ρi=1dwi+(1ρ)i=1dwi2)
其中,n为样本数,d为属性或特征数。 λ > 0 \lambda>0 λ>0 0 < ρ < 1 0<\rho<1 0<ρ<1。第一部分为经验风险(原损失函数),第二部分为结构风险(正则项)。

2、LR模型为什么不用MSE做损失函数?

  • w w w 的值稍微大些或稍微小写的时候, h i h_{i} hi 很容易趋近于1或0,造成 ∂ m s e ∂ w \frac{\partial mse}{\partial w} wmse会很小,导致 w w w 学不到东西.
  • m s e mse mse损失函数的极小值点特别多,与特征维度的平方成正相关,这对初始化 w 就有很大的要求
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 Python 信用评分建模过程的代码示例: ```python import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.metrics import confusion_matrix, classification_report # 读入数据 data = pd.read_csv("credit_data.csv") # 数据清洗 data = data.dropna() # 特征工程 data['age'] = data['age'].apply(lambda x: abs(x)) # 处理异常值 data['income'] = np.log(data['income']) # 对收入进行对数变换 data['payment_delay_monthly'] = data.loc[:, 'pay_jan':'pay_dec'].sum(axis=1) # 计算每月延迟付款总数 data = data.drop(['pay_jan', 'pay_feb', 'pay_mar', 'pay_apr', 'pay_may', 'pay_jun', 'pay_jul', 'pay_aug', 'pay_sep', 'pay_oct', 'pay_nov', 'pay_dec'], axis=1) # 特征选择 X = data.drop(['default'], axis=1) y = data['default'] # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0) # 建立模型 logreg = LogisticRegression() logreg.fit(X_train, y_train) # 预测及评估 y_pred = logreg.predict(X_test) print(confusion_matrix(y_test, y_pred)) print(classification_report(y_test, y_pred)) ``` 上述代码中,首先读入了一个名为 `credit_data.csv` 的数据集。然后对数据进行了清洗和特征工程处理,包括处理异常值、对收入进行对数变换、计算每月延迟付款总数等。接着进行特征选择,将 `default` 列作为标签,其余列作为特征。然后使用 `train_test_split` 将数据集划分为训练集和测试集。最后使用 `LogisticRegression` 模型进行建模,并对结果进行预测和评估。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值