「数据挖掘入门系列」数据挖掘模型之分类和预测 - 逻辑回归
拿电商行业举例,经常会遇到以下问题:
- 如果基于商品的历史销售情况,以及节假日、气候、竞争对手等影响因素,对商品的销量进行趋势预测?
- 如何预测未来一段时间哪些客户会流失,哪些客户可能会成为VIP用户?
- 如果预测一种新商品的销售量,以及哪种类型的客户会比较喜欢?
除此之外,运营部门需要通过数据分析来了解具有某些特征的客户的消费习惯,管理人员希望了解下一个月的销售收入等,这些都是分类与预测的日志。
分类和预测是预测问题的两种主要类型。
- 分类主要是预测分类标号(离散值)
- 预测主要是建立连续值函数模型
挖掘模型实现流程
- 准备训练集、测试集
- 构建模型
- 进行分类或者预测
常见分类与预测算法
1、回归分析
回归分析是确定预测值与其他边变量之间的依赖关系最常见的统计学方法。包括:
- 线性回归模型
- 非线性回归模型
- Logicstic逻辑回归模型
- 岭回归模型
- 主成分回归模型
- 偏最小二乘回归模型
- …
2、决策树
决策树采用自顶向下的递归方式,在内部节点进行属性值比较,并根据不同的属性值从该节点向下分支,最终得到的叶节点就是学习划分的类。
3、人工神经网络
人工神经网络是一种模仿大脑神经网络结构和功能建立的信息处理系统,表示神经网络的输入与输出变量之间关系的模型。
4、贝叶斯网络
贝叶斯网络是不确定知识表达和推理领域最有效的理论模型之一
5、支持向量机
支持向量机是一种通过某种非线性映射,把低维的非线性可分为转化为高维的线性可分,在高维空间进行线性分析的算法
以下我们重点讲解逻辑回归模型、决策树模型、BP神经网络模型来展开讲解。
逻辑回归模型
简介
逻辑回归属于规律性非线性回归,分为二分类和多分类的回归模型。对于二分类的逻辑回归,因变量y只有「是、否」两种取值,记为1和0。
假设在自变量x1, x2, …, xp作用下,y取 是 的概率是p,取否的概率是 1 - p。研究的是当y取是发生的概率p与自变量x1、x2、….、xp的关系。
逻辑回归建模步骤
- 根据分析需求设置指标变量(因变量和自变量)
- 收集数据
- 将收集到的数据进行预处理(筛选、清洗)
- 估计回归系数
- 进行模型检验
- 模型应用
举例
某个银行想要在降低贷款拖欠率的数据进行逻辑回归建模。示例数据如下所示:
数据文件已经上传到百度网盘:https://pan.baidu.com/s/1pgNeFH4gwz90bL0MPASzkg
我们接下来将使用Scikit-learn来对上述数据进行逻辑回归分析。
特征选取
Python的scikit-learn的feature_selection库可以进行特征的选择。其中比较简单的有F检验(通过f_regission来给出各个特征的F值和p值,从而可以筛选变量(选择F值大的、或者p值小的特征)),其次有递归特征消除(RFE)和稳定性选择(SS)等比较新的方法。这里使用了:稳定性选择方法中的随机逻辑回归进行特征筛选,然后利用筛选后的特征建立逻辑回归模型,输出平均正确率。
参考代码
#-*- coding: utf-8 -*- # 1. 导入pandas读取数据 import pandas as pd data = pd.read_excel('bankloan.xls') # 2. 获取数据 # 2.1 获取前8列数据,并转换为矩阵 x = data.iloc[:, :8].as_matrix() # 2.2 获取二分类数据 y = data.iloc[:,8].as_matrix() # 3. 导入机器学习库 from sklearn.linear_model import RandomizedLogisticRegression as RLR # 4. 建立随机逻辑回归模型,用于特征筛选 rlr = RLR() # 4.1 训练模型 rlr.fit(x, y) # 4.2 获取特征筛选结果 validFeatureBoolean = rlr.get_support() print validFeatureBoolean # 找到有效的特征值 validFeatures = [] for i in range(0, len(validFeatureBoolean)): if validFeatureBoolean[i]: validFeatures.append(data.columns[i]) print u'通过随机逻辑回归模型筛选特征结束...' print ','.join(validFeatures) # 将有效特征值转换为矩阵 # print data[validFeatures] x = data[validFeatures].values # print x # 5. 建立逻辑回归模型 from sklearn.linear_model import LogisticRegression as LR lr = LR() # 训练模型 lr.fit(x, y) print u'逻辑回归模型训练结束' print u'模型的平均正确率为:%s' % lr.score(x, y)
运行后可以发现通过RLR模型筛选后的特征为:
工龄,地址,负债率,信用卡负债
其他特征被过滤掉了,模型的平均正确率为:0.8142857142857143
逻辑回归本质上还是一种线性模型。筛选出来的特征并不一定就跟结果没有关系,只是它们之间有可能是非线性关系。在真实应用中,还是要根据问题的实际背景对筛选结果进行分析。对于非线性关系的特征筛选方法有决策树、神经网络等