建模分析的步骤
1 确定需求,提取数据
2 数据预处理(异常值,缺失值)
3 特征选择
4 对离散数据编码(哑变量,虚拟变量)
3 拆分训练集,测试集
4 选择并训练模型(多个备选模型)
5 模型评估
6 保存模型
7 投入生产
数据预处理
1 异常值
离散型(定性): value_counts(),unique() 方法: 改为缺失
连续型(定量): 箱型图原则(1.5IQR),3西格玛(3倍标准差) 方法:改为缺失,盖帽法
2 缺失值
1. 小于15%可以补充
2. 15% `50% : 离散化为多取值 , 缺失值自成一类.
3. 大于50%: 离散化为二值,填写和未填写
补充缺失值方法:
离散型(定性): 众数,模型预测补充(分类器),临近插值(KNN)
连续型(定量): 均值,中位数,模型预测补充(回归),临近插值
3 判断是否要标准化并进行标准化(标准化方式 Z , 0-1)
1. 聚类 2. KNN 3.失衡数据 过采样smote
自变量(特征)的选择
直接选择法
1 自变量为分类型,如果某一取值90%以上,不考虑此变量
2 自变量为数值型,如果此组数据离散程度小,就没有差异性,不考虑此变量
单元选择法(单变量选择)
如果因变量为数值型,自变量的选择:
方差分析:H0:无影响(u1=u2=…,无差异) p< α(α自定,多数为0.05)时 进入模型
相关系数(x为数值型,自由度多时,相关小于0.3的也可能相关) : H0: 相关系数为0,两变量不相关
协方差(x为数值型):H0: 协方差为0,两变量不相关
如果因变量为分类型,自变量的选择:
列联分析_独立性检验(卡方检验):(X为离散型) H0:独立(无影响)
信息熵 (X为离散型)-( 小好) #无p值,无经验解释, 只能排序选择
gini指数 (X为离散型)-( 小好) #无p值,无经验解释, 只能排序选择
IV信息价值(X为离散型)-(大好) #无P值,大于0.02表示对Y有影响
X为连续型:
1.离散后用以上方式( 若离散的不好,就可能失去一个特征)
2.方差分析
分类器(因变量分类型):
KNN, 朴素贝叶斯,决策树(ID3,C4.5,Cart),随机森林,逻辑回归,SVM(支持向量机),xgboost,gbdt,adaboost,stacking
KNN (K近邻)
注意: 因为计算的是距离为了不让某个特征起到决定性作用所以一定要进行标准化
原理:
1 找到与要预测的记录最近的K个
2 对K个记录的分类的众数,以此众数为预测结果
朴素贝叶斯
在特征条件独立的基础上计算逆概率(贝叶斯)
比较适合做二分类
贝叶斯公式里的概念(先验,后验,似然,证据)
1.多项式 (特征都为离散的,数据不能为负) 先验概率为0时解决办法(拉普拉斯平滑)
2.高斯(特征为正态分布)
3.伯努利(特征为二项分布)
优点:简单,概率问题, 效果好些
缺点:特征很难完全相互独立
决策树
ID3原理(通过信息熵来度量信息的不纯度,信息增益大的为跟节点或分支节点)
1,计算整个数据集信息熵(期望信息)-》 -sum(先验概率*log2(先验概率))
2,计算各特征信息熵(期望信息),与数据集信息熵求差值(信息增益)
3,信息增益最大的为跟节点或分支节点
4,循环2,3直到所有记录归类完,达到指定的树深度或其他的预剪枝条件为止。
优点: 规则特别清晰, 只用少数特征
缺点: 只能计算离散型, 信息增益偏向于分类多的特征,多叉并有log运算速度慢
C4.5原理(通过信息熵来度量信息的不纯度,信息增益比大的为跟节点或分支节点)
1,计算整个数据集信息熵(期望信息) -sum(先验概率*log2(先验概率))
2,计算各特征信息熵(期望信息),与数据集信息熵求差值(信息增益)
计算各特征分裂信息,求信息增益比= 信息增益/分裂信息
如果为连续数据,先排序,求其分隔点(临近两个数的均值),分隔成<= 和 > 两组数据
并对其每个分隔点求其信息增益比,选信息增益比最大的分隔点为最佳分割点。
与其他特征的信息增益比进行比较,确定根节点或分支节点
3,信息增益比最大的为跟节点或分支节点
4,循环2,3直到所有记录归类完,达到指定的树深度或其他的预剪枝条件为止。
优点: 规则特别清晰, 只用少数特征
缺点: 偏向于分隔不均的(少数部分数据纯度大),多叉并有log运算速度慢
cart分类树原理(通过Gini指数来度量信息的不纯度,Gini指数最小为跟节点或分支节点,Gini取值范围0~1
创建的是二叉树,预测时速度快)
1,计算各特征Gini指数,选择最小特征为根节点或分支节点
1) 如果为连续数据,先排序,求其分隔点(临近两个数的均值),分隔成<= 和 > 两组数据
并对其每个分隔点求其Gini指数,选Gini指数最小的分隔点为最佳分割点。
与其他特征的Gini指数进行比较,确定根节点或分支节点
2) 如果分类特征取值个数大于2的,分组成值1,非值1计算Gini指数,选择Gini指数最小的分组方式。
2,Gini指数最小的为跟节点或分支节点
3,循环1,2直到所有记录归类完,达到指定的树深度或其他的预剪枝条件为止。
优点: 规则特别清晰, 只用少数特征,速度快
缺点: 过拟合
决策树优缺点
优点:规则特别清晰, 只用少数特征,特征重要性,适合多分类
缺点: 过拟合(受极值影响)
决策树容易发生过拟合——采取剪枝处理
预剪枝
1,minsplit 最小分裂数
2, maxdepth 最大深度
3, minbucket 叶子节点最小样本数
后剪枝
REP:错误率降低剪枝(剪枝过度。)
PEP:悲观错误剪枝法是根据剪枝前后的错误率来判定子树的修剪(剪枝过度)
CCP:代价复杂度剪枝 (常用,模型cp值)
逻辑回归
模型:h(x) = exp(y)/(1+exp(y)) = 1/(1+exp(-y))
损失函数: L(x) = h(x) ^yi * (1-h(x))^(1-yi)
目标函数——(实现算法,最大似然法–对数似然)
Odds: 比值 p/(1-p)
Or: exp(回归系数) odds1/odds2
比较适合做二分类
优点: 解释性强(特征前的系数 OR)
缺点: 容易受极值影响
svm
原理(最小距离最大的一条线或面)
1 所有样本点到直线或面的距离
2 找到最小的距离
3 循环1-2步,找到最大距离的直线或面做为分割线
svm有三宝:间隔 对偶 核函数(核技巧)
线性可分 硬间隔目标函数
软间隔目标函数——引入松弛变量和惩罚因子
线性不可分(核函数——高斯核——多项式核)
优点:精准
缺点:维度灾难,矩阵运算占空间
分类器模型的评估指标
1 准确率 混淆矩阵对角线相加除以总数(TP+TN)/(TP+FN+FP+TN)
2 精准率(差准率)TP/(TP+FP) =A 和 #在所有预测为真的样本中,实际为真的占比
3 召回率(覆盖率,查全率) TP/(FN+TP) =CR #在所有实际为真的样本中,预测为真的占比
预测
1 0
真 1 TP FN
实 0 FP TN
3 F1 或 F 值 2精准率召回率/(召回率+精准率)
4 AUC(ROC 曲线下的面积,X轴 为 1-FPR=1 - FP/(FP+TN) ,Y轴 为 TPR = TP/(FN+TP))
AUC = 1 完美
AUC >0.85 优秀
0.7
4 KS max(TPR-FPR)
5 Roc 曲线,做二分类时,可以通过ROC 曲线调最优阈值
数值型预测: (cart分类回归树,线性回归,岭回归_Ridge,lasso)
cart回归树原理(用Y取值离散情况小的)
1.计算每个变量的误差平方和
1 分类型 sum(每个叶子的误差平方和开方)
2 连续型 排序,分隔,计算各分隔点的误差平方和,选择最小误差平方和的分隔点
2,叶子节点的值为包含的样本点的均值
优点:规则特别清晰, 只用少数特征,特征重要性
缺点:过拟合,Y的值个数受叶子个数限制
线性回归
模型:y=a+b1x1+b2bx2...
损失函数:sum((y^-y)^2)
目标函数:min sum((y^-y)^2)
解决目标函数方法: 最小二乘法, 梯度下降, 矩阵计算
优点:解释性好,选择特征
缺点:多重共线性,受极值影响,对因变量有正态性要求。
lasso回归的
模型: y=a+b1x1+b2bx2...
损失函数:sum((y^-y)^2) + alpha *sum(|偏回归系数|)
目标函数 min sum((y^-y)^2) + alpha *|偏回归系数|
解决目标函数方法: 最小二乘法, 梯度下降, 矩阵计算
优点:解释性好,去掉不显著特征(系数为0)
缺点:多重共线性,受极值影响,对因变量有正态性要求
岭回归
模型: y=a+b1x1+b2bx2...
损失函数:sum((y^-y)^2) + alpha * sum(偏回归系数^2)
目标函数: min sum((y^-y)^2) + alpha * sum(偏回归系数^2)
解决目标函数方法:最小二乘法, 梯度小将,矩阵计算
优点:解释性好,消除了多重共线性(系数接近于0)
缺点:受极值影响,对因变量有正态性要求
数值型预测评估指标
PPE10>80% 误差范围小于10% 的记录在80%以上
误差:(y^-y) /y<=10% 算对,
对的概率在80%以上
R^2= SSR/SST= 1-SSE/SST
集成算法典型的三类模型
1 Bagging(并行):训练多个分类器取平均值,众数。 典型的代表就是随机森林
2 Boosting(串行):从弱学习器开始加强,通过加权来进行训练
3 Stacking:聚合多个分类或回归模型(第一层弱学习器的输出作为最终学习器的输入)
随机森林(分类,回归)
数据输入双重随机性(使得每棵树构造是有差异的)
1 记录随机 可重复的抽样
2 特征随机(特征数的1/3,特征数的开方)
数据输出
平均法 (回归预测)
投票法_众数 (分类预测)
优点 :抗过拟合, 稳定, 不需要降维, 输出特征重要性
缺点: 计算成本更高
损失函数:
t是树的叶节点,Nt表示该叶节点的样本数量,Ht(T)表示结点t上的信息熵,所以右边第一项相当于对决策树的所有叶节点求熵,并以每个叶节点包含的样本数量为权重
T表示树的叶节点个数,即表示树的复杂度,a为参数,相当于a越大,叶节点的个数对损失函数的影响越大 AdaBoost “Adaptive Boosting(自适应增强) ——(分类,回归)
有两类权重:
1记录权重
Wmi为上一次迭代的权重,αm为上次迭代函数的权重,yi为真实标签,Gm(Xi)为上一次迭代的结果,记得计算完一定要归一化。
2.弱分类器权重: 1/2*ln((1-错误率)/错误率)
错误率 = 错分记录的权重之和
算法输出
回归问题:
记录权重
第一次迭代为1/N
第二次迭代:最大误差
相对误差:
记录权重为
Wki为上次迭代的记录权重,αki为上次迭代的相对误差
误差率:
学习器权重
算法输出
优点 :
Xgboost(分类 ,回归)
优点 :
正则化项防止过拟合
xgboost不仅使用到了一阶导数,还使用二阶导数,损失更精确,还可以自定义损失
XGBoost的并行优化,XGBoost的并行是在特征粒度上的
可以有缺失值
支持列抽样,不仅能降低过拟合,还能减少计算
缺点:
Stacking
优点:
1、 采用交叉验证方法构造,稳健性强;
2、 可以结合多个模型判断结果,进行次级训练,效果好;
缺点:
1、构造复杂,难以得到相应规则,商用上难以解释。
聚类: K_means 系统聚类(合并,分裂),
聚类注意事项: 因为计算距离要消除量纲(每一列数据的差异不要太大)
划分法
K-means
K-means 原理:
1,确定K个簇,并随机选择K个中心点
2,遍历所有样本点与K个中心点的距离并且划分
3,对第二步的结果,计算平均值,并作为簇的中心点
4,重复2,3步,直到最后两遍结果相同或达到指定的迭代次数
K-means 的优点
速度快,容易理解
K-means 的缺点
1, K 数不好确定(肘点法则,CH指标 ,轮廓系数)
2, 只能对连续型变量进行聚类
3,平均值容易受极值影响
4,起始随机K个中心点影响聚类结果
5,比较适合于球型簇
层次法(系统聚类):
合并agnes,分裂diana
合并的原理:
1 把每个样本作为单独的一个簇
2 根据准则将簇进行合并
3 直到到不能合并 或 达到指定的簇数
准则: 簇与簇的距离
1 最远的两个样本点的距离作为两个簇的距离
2 最近的两个样本点的距离作为两个簇的距离
3 所有样本点的平均距离作为两个簇的距离
分裂的原理
1 把所有样本点作为一个簇
2 找到簇直径最大的簇进行分裂(簇直径——簇中最远两个样本点的距离)
3 在簇中找到平均距离最大的样本点作为新簇
4 从旧簇中找到离新簇近旧簇远所有的样本点( 样本点到簇的距离_最远,最近,平均 )
5 重复2,3,4 直到每个样本点为一个簇 或 达到指定的簇数
缺点: 速度慢
优点: 每次结果都一样
聚类调优(选择最优簇数)
通过图——主观选择最优簇数
1,冰柱图(白柱子从高到低(2——多))
2,谱系图(切线)
通过指标(肘点法则,CH指标, 轮廓系数)
1. 肘点法则:SSE(簇内差异)——越小越好
SSE=sum_簇(sum_样本(x-簇中心点)^2)
2. CH指标: VRC=MSA(簇间差异)/MSE(簇内差异)=F ----越大越好
3. 轮廓系数: Si=(bi-ai)/max(bi,ai) ——越大越好
bi: 分离度,样本点与其他簇平均距离的最小值
ai: 凝聚度,样本点与簇内其他元素的平均距离
对每个样本的si 平均值
密度聚类(SCAN):
重要参数: 半径 , 数量 (刻画单位面积内)
优点:每次结果一样,可以发现不规则形状,发现异常点 速度中等
聚类缺点:
(聚类处理的数据量有限)
无监督模型还有一个缺点就是不学习,每次都要重新算
样本点距离
1, 连续型
欧氏距离 sqrt(sum_特征(xi-yi)^2)
曼哈顿 sum_特征(abs(xi-yi))
2. 二值型
table(x=c(1,0,1,1,0,1),y=c(1,1,0,0,1,0))
a,b,c,d来自于混淆矩阵
对称 SMC=(b+c)/(a+b+c+d)
非对称 JC=(b+c)/(a+b+c)
非对称: 数量差异大,关心程度有差异
3. 多值型
1 简单匹配
d(x,y) = (d-u)/d
d: 特征数 ,u:特征取值相同的个数
2 转化为二值型(通常用JC)
4. 混合型(daisy)
1,连续型数据 0-1 标准化
2,多值型数据二值化
d(x,y)=sum(距离*重要程度)/sum(重要程度)
距离 = abs(xi-yi)
重要程度
关联规则(apriori)推荐算法:找最大频繁项集的过程
支持度:商品的重要性(商品在订单中出现的概率)sum(A)
最小支持度:只有支持度大于指定的最小支持度叫频繁项集
可信度:商品之间的关联强度(P(商品B|商品A)) conf(A->B)
最小可信度:只有可信度大于指定的最小可信度叫强关联频繁项集
提升度:是否为有效的强关联频繁项集( conf(A->B)/sup(B))
提升度>1 为有效的强关联频繁项集
注意:Apriori 包并没有对提升度>1进行过滤,
协同过滤(itemCF, userCF)
itemCF:
A对X的喜欢程度-》A对Y的喜好 * X 与Y的同现矩阵 + A对Z的喜好 * X与Z的同现矩阵 +....
A对Y的喜好(与业务结合)
userCF
A对X的喜欢程度-》B对X的喜好 * A与B的相似度 + C对X的喜好 * A与C的相似度. + ..
用户的相似度 根据对 X,Y,Z 的喜好程度计算
用户的相似度计算 = 1/(1+ d(A,B))
冷启动问题(半结构化问题):
#评分卡模型 分数Y= A + B*ln(odds)
#参与评分卡的指标在15个左右
#步骤
#1 用ols,RF,DT, lasso, xgboost 找出显著影响的指标
#2 显著影响的指标多于15,计算各指标的IV,选择IV高的15个
IV=(p(好)-p(坏))*WOE
#用证据权重(WOE)标识每个指标的具体取值
WOE = ln(p/(1-p)) = ln(p(好)/p(坏)) =ln[(具体取值中好用户数/好用户数的总数)/(具体取值中坏用户数/坏用户数的总数)]
#WOE 编码(进行平滑————解决0的问题)
#1 分类型数据 直接计算WOE
#2 数值型数据 先分箱,再计算WOE
用WOE编码映射原数据代入LR,获得特征系数
#解评分卡模型
#1 计算初始的odds = 好用户数的总数/坏用户数的总数,并且估计初始分数
#得方程 初始分数 = A + Bln(初始的odds)
#2 指定odds 变化对分数的影响(odds翻一倍,分数加40分)
#得方程 初始分数+40 = A + Bln(初始的odds*2)
因为ln(odds) = 逻辑回归的a+bx
分数=A+B*(a+bx)=A+Ba+Bbx
真正的基本分数 = A + B*a
各指标每个取值的得分= B * b * WOE值
各指标每个取值的得分就是我们的评分字典