信用卡客户消费预测的例子
信用卡部门拥有客户的个人信息和信用卡支出信息。这些数据存放在“CREDITCARD_EXP”表中。Acc 字段表示是否有开卡,目前尚有一些客户注册后没有开卡,部门业务人员希望能够预测其开卡后的消费情况
import pandas as pd
creditcard= pd.read_csv(r'creditcard_exp.csv', skipinitialspace=True)
我们想研究客户的收入对他是否开卡有没有影响,给定分类变量(是否开卡),看连续变量(收入)的均值是否有差异即可
creditcard['Income'].groupby(creditcard['Acc']).describe()
Out[5]:
count mean std ... 50% 75% max
Acc ...
0 30.0 3.149333 1.406482 ... 2.905000 3.807500 8.40000
1 70.0 7.424706 3.077986 ... 6.443525 8.494237 16.90015
# - 第一步:方差齐次检验
# In[12]:
from scipy import stats
Suc0 = creditcard[creditcard['Acc'] == 0]['Income']
Suc1 = creditcard[creditcard['Acc'] == 1]['Income']
leveneTestRes = stats.levene(Suc0, Suc1, center='median')
print('w-value=%6.4f, p-value=%6.4f' %leveneTestRes)
# - 第二步:T-test
# In[13]: 实际上做不做方差齐性的F检验并不能对结论造成影响 equal_var 为 True 和 False 都一样
stats.stats.ttest_ind(Suc0, Suc1, equal_var=False)
Out[8]: Ttest_indResult(statistic=-9.529516968736448, pvalue=1.3263066753296544e-15)
stats.stats.ttest_ind(Suc0, Suc1, equal_var=True)
Out[9]: Ttest_indResult(statistic=-7.2734332066230225, pvalue=8.690094133636065e-11)
这里我们的假设H0:μ0 = μ1,H1:μ0 != μ1,H1 为备择假设,α 取 5%,t = ( ( X1_ - X0_ ) - ( μ1 - μ0 ) ) / S_( X1_ - X0_ ),然后再用 t 求出 p_value,注意 S_X1_ - S_X0_ 和 S_( X1_ - X0_ ) 是不同的
这里做方差齐性的F检验
当F 约等于 1,假设 H0 成立 ,F 远大于 1,假设 H1 成立
但实际上做不做方差齐性的F检验并不能对结论造成影响,所以一般都不会用
研究两个连续变量之间的关系,比如年收入越高,开卡后的月均支出是否越高?
明显第四幅图表示这两个变量没关系
相关关系是一种不完全确定的随机关系,当一个或几个变量的数值被确定后,与之相应的另一个变量的值虽然不能确定,但是仍按照某种依赖关系在一定的范围内变化。简单相关分析是研究两个变量之间相关关系的方法
三种常用相关系数:
- PEARSON相关系数:参数方法、连续变量之间的相关
- SPEARMAN相关系数:非参方法、又称秩相关系数
- KENDALL相关系数:非参方法,序数变量之间的相关系数
Pearson 相关系数的计算
creditcard.plot(x='Income', y='avg_exp', kind='scatter')
像线性关系 ,有点发散,画直方图的话,应该是右偏的
#当发现散点图有发散的趋势时,首先需要对Y取对数,而且还应该尝试对X也取对数
creditcard.plot(x='Income', y='avg_exp_ln', kind='scatter')
不发散了
相关系数 0.63489,还挺高的,中度相关
creditcard[['avg_exp_ln', 'Income']].corr(method='pearson')
Out[13]:
avg_exp_ln Income
avg_exp_ln 1.00000 0.63489
Income 0.63489 1.00000
相关系数一般不需要作检验,因为即使相关系数不大,只要样本量足够大,p 值也是显著的,所以就直接看线性相关程度
当变量比较少的时候,如几十个,可以直接放入线性回归的,但当变量比较多的时候,比如好几百个,上百个变量的时候,逐步回归法就失效了,几十个变量还可以。变量多了,我们就要把每个变量 x 和 y 分别作检验,留下相关的、显著的变量去建模