1.定义问题:
在银行业发展的上百年的历史中,它推动了整个经济社会的不断发展,无论是对于社会发展还是自身成长都取得了很大的成就。但是用户出现还贷违约的风险是银行运营中资金的最大风险。过去银行的贷款可以通过调查借贷人的明显资产总数,如房产、车、企业等,然后按比例折算给借贷人放款。如今借贷需求大量出现,银行如何降低借钱的风险。我们可以使用逻辑回归算法,从大量的历史个人数据,找出有那些关键特征数据可能影响用户违约。
2.准备数据:
我们得到的原始数据,可能是这样的。
经过对原始数据进行分析,发现教育和地址都是中文数值,这样的数值不能适应逻辑,回归算法无法预测是否与教育和地址有关。我们需要对这两类数据进行特殊的编码,如:学历由低到高采用阿拉伯数值代替教育背景。地址可以由全国各个省市的人均可支配收入进行由高到低的排列。(这样的编码方式可能不是最优,但是在同一次分析中相同属性必须采用同一种编码规则。将文本数据规范化是预处理中最需要做的)
预处理之后的数据如下:
用于计算的数据全部为数值类型。这样的数据就可以套用逻辑回归算法,找出违约用户可能与那些属性紧密相关。
3.分析方法:
逻辑回归算法不同于线性回归算法,后者一般是找出两者数据可能存在的线性关系y=ax+b并且尽量精确a和b的值。逻辑回归算法数据不是线性相关的,我们可以使用事件发生的几率来表示事件发生与不发生的比值,假设发生的概率是p(取值在0~1范围),那么发生的几率是p/(1-p),取值0~正无穷大,几率越大,发生的可能性越大。将其设为数学模型就是logit函数:
那么logit函数图如下:
对于客户违约预测,通过过往历史数据,找出用户是否违约关系很紧密的属性。假设用户违约,同时他们的银行负载几率都是特别高,就可以发现用户是否会违约与银行负载几率关系紧密。
代码如下:
# coding=utf-8
#逻辑回归,自动建模importpandasaspd
#初始化参数filename ='data/bankloan.xls'
data = pd.read_excel(filename)
x = data.iloc[:,:8].as_matrix()#8个属性y = data.iloc[:,8].as_matrix()#第九列结果标签
#导入逻辑回归模型fromsklearn.linear_modelimportLogisticRegressionasLR
fromsklearn.linear_modelimportRandomizedLogisticRegressionasRLR
#建立随机逻辑回归模型,筛选变量rlr = RLR()
#训练模型rlr.fit(x,y)
#获取特征筛选结果,也可以通过.scores_方法获取各个特征的分数rlr.get_support()
print(u'通过随机逻辑回归模型筛选特征结束。')
print(u'有效特征为:%s'%','.join(data.columns[rlr.get_support()]))
#筛选好特征x =data[data.columns[rlr.get_support()]].as_matrix()
#建立逻辑回归模型lr = LR()
#用筛选后的特征数据来训练模型lr.fit(x,y)
print(u'逻辑回归模型训练结束。')
#给出模型的平均正确率,本例为81.4%print(u'模型的平均正确率为:%s'%
lr.score(x,y))
4.结论:
该段代码输出:用户是否违约与工龄、地址、负债率、信用卡负债关联特别高。并且根据历史数据计算出关联性的可信度81.4%。
通过这个模型的计算与分析,银行在对新借贷用户是否放款的问题上,可以对用户的工作工龄,用户居住地址,用户负载率和过往信用卡负债情况进行深入调查,然后决定放贷情况。