首先对于解决实际的商业问题,以下为逻辑回归的数据分析的基本流程:
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可以计算一些特定的值,看看每个自变量的各项系数。
训练数据
使用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的值算出此模型没有特别准确。
那么,这样我们的一个实例分析就结束了~