逻辑回归模型之购买银行定期模型

首先对于解决实际的商业问题,以下为逻辑回归的数据分析的基本流程

    1. 对于一个实际数据,首先我们应该明确需要预测的目标,确定问题,以及自变量、因变量所代表的含义(围绕业务问题,明确预测目标,从经验与尝试等角度初步确认自变量与因变量)

    2.Exploratory Data Analysis (EDA)

        对于数据集的探索,首先我们应判断自变量因变量之间是够具有相关关系,同时进行相关分析

    3.估计模型参数,建立逻辑回归模型

        对于逻辑回归模型,我们可以通过Cross Validation重复验证模型的准确率。Confusion Matrix 以及 ROC Curve等可以检验此模型的准确性。

    4.利用回归模型进行预测    

逻辑回归之购买银行定期模型


导入数据包

首先第一步我们需要做的是将需要的数据包导入Jupyter Notebook。

numpy提供了数据运算提供了大量的数学函数库。

pandas将用于数据挖掘与数据分析。

matplotlib,seaborn 用于数据可视化,便于在选择自变量时更直观的分析。

读取购买银行定期项目csv文件


对于一个DataFrame来说,我们可读取它的columns的数值

处理数据

1.空值处理

查看每个column里是否有空值:

如果有则把他们删掉

同时也发现在‘Education’这一栏存在basic.4y  basic 6y 与 basic 9y. 我们需要做的是将所有的basic合并为‘Basic’。对于合并来说,我们一般可以使用两种办法

1)使用np.where 将所有basic都替换掉

2)使用label encoder(对于不连续的数字或者文本进行的编号)

使用unique查看我们合并的不重复的值

Exploratory Data Analysis

对于接下来这部分,是数据分析中很重要的一部分。我们需要对数据集进行数据可视化的处理,我们可以查看自变量和因变量之间的关系,根据分析,可以选出对因变量影响最大的自变量。同时,我们也可以得出商业上的一些business insight/recommendation。

首先我们先看一下y值的分布,主要是看有多少个0(没有购买),1(购买了定期存款)

同样,我们也可以使用图形的方法讲y值的分布更好的表示出来

接下来我们可以使用groupby分别查看每个column对y值的影响分布。首先我们来看age是否对购买产生影响:


我们发现购买存款的平均年龄是略高于没有购买的。同时,我们也发现银行联系客户的月份越近,客户更倾向于购买定期存款。令人惊奇的是,当银行雇员联系客户的次数越少,客户越容易购买银行定期。

接着我们可以通过pd.crosstab发现每个单独的自变量对于因变量的影响程度,并且我们可以通过画图表的形式进行数据可视化。


我们
此图在特定的月份上,客户更偏向于购买定期,说明可以推出适当的优惠活动以刺激消费

下图我们可以看出教育对于购买定期的影响也较大,我们可以看出教育程度越大,购买的可能性越大,所以我们可以推测在以后可以像高学历人群投放定点的推广。

同样,数据可视化也可以更直观的显示购买银行定期的人均年龄

特征工程

由于列表内依然存在categorical的非数字形的类别,我们需要在建立模型之前,我们需要将categorical 全部转化为 numerical。对于这样的情况,我们可以使用dummy variable


当我们创建了dummy variable之后,我们需要将原有的重复columns删除。

dummy variable 和label encoding相似,是在特征工程里非常重要的一步。

那么目前我们的数据都存储与data_final 中,可以通过columns.values 查看我们做完特征工程后的每一列的名字

Feature Selection

接下来我们需要选出对于因变量影响最大的18个variable,我们可以通过RFE进行选择。

support_会给出一个true false的list,表明RFE选择出来的最优的18个自变量,ranking_将我们所有的自变量进行了排序,这样我们就可以选择最优的18个自变量放在我们的模型里。现在我们需要做的是将选出的18个自变量以及因变量分别对应的值提取出来。

建立模型

我们使用statsmodels对于我们将要拥有的模型进行一个数据的采集。定义模型,并且拟合模型,查看模型各项数据。

statsmodels可以计算一些特定的值,看看每个自变量的各项系数。

如果P values 小于 0.05说明这个自变量是一个很好的指标,若大于0.05,则反之。

训练数据

使用train_test_split将数据分为30%的test数据,以及0.7的training数据。

接下来,我们将training数据放入我们的模型当中

当我们放入模型后,我们可以使用模型自带的predict,将我们30%的test数据放入模型当中

score可以查看我们这个逻辑回归模型的准确率,此模型准确率达到90%,还不错~

交叉检验

通过交叉检验,做了很多次的Kfold,在这里我们使k = 10,放入模型当中,我们得出了10次的准确率,再求平均值。通过十次检验后,此模型的平均准确率为0.897,说明还不错。

模型评价

当我们做完了模型后,我们需要对模型进行一个测评。在这里我们使用了Confusion Matrix,以及ROC Curve。

首先,我们来看Confusion Matrix的使用

对于这个2*2的matrix,对角线10871,254说明我们都预测成功的数量,而对于另一条对角线,是我们预测失误的情况。

接下来,我们计算confusion matrix的accuracy和fl-score

可以直接使用classification_report直接计算所有的值

我们看出此模型的准确率为0.87

接下来,我们做了一个ROC 曲线,也用来评价模型好坏。

对于roc curve来说,我们输入的是我们的test数据,以及我们模型所预测的y值,ROC 曲线就是蓝色的那一条。对于roc curve来说,越接近于左上角,此模型越优。同样,我们也可以看出auc(area under curve)的值为0.59.我们通过roc的值算出此模型没有特别准确。


那么,这样我们的一个实例分析就结束了~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容