2.4 模型选择过程
在模型选择过程中,首先按照任务目标的要求和数据特点提出多个可能的模型,然后对这些模型进行详细分析,并选择具有较好区分效果的算法模型进行参数优化。自变量和因变量中的字段值大部分为分类类型,这种特点决定了比较适合应用分类算法,而分类算法种类较多,如果每种算法都进行验证,工作量较大,一般先采用自动分类技术筛选几类算法,然后再逐步确认。
模型选择要符合业务应用场景,很多人认为模型只要做到可预测就是一个好的模型,不符合业务需求,再好的模型也没有意义。在实践中,如果在业务上要求模型具有较强的可解释性,就不适合应用类似神经网络等黑箱模型,最好采用像逻辑回归、岭回归、决策树等可量化解释的模型,结果可量化且可验证。
模型的预测能力是指其泛化能力,在新的独立测试样本上的预测能力,多数情况下,随着模型复杂度的增加,其在训练集上的泛化能力增强,但在测试集上测试误差变大,甚至会出现过拟合现象,而模型选择阶段的主要目标是获得泛化能力最好,同时也是最稳定的模型。预测能力的评估除了从统计的角度验证外,还要从业务的角度进行验证,确认其在商业问题上的支撑力度。
在模型选择和评价过程中,一般将数据分为训练集、验证集、测试集3个不相交的集合,也可以将训练集和验证集合为训练集。总之,训练集和验证集是为了做模型选择,测试集是做模型评价,其中测试集是独立的。当然,如果反复使用同一个测试集进行模型验证,也容易将其转化为验证集,产生过拟合,所以在实践中可将测试集分为多个独立的集合。
模型选择的核心思想是从众多可选模型中选择最佳的模型。例如,使用重复抽样对训练集进行划分,构建多个训练集和验证集,然后分别计算其近似测试误差,代表方法为交叉验证(Cross Validation,CV)和自助法(Bootstrap),这类方法需要较多的计算时间。另外,也可以基于似然来建立单一训练集误差和测试误差之间的关系,由于更加直接,所以计算速度更快,但结果可能不及理论预期,代表方法有AIC、BIC等。随着目前计算机处理能力的大幅提升,还是推荐使用简单可靠的CV法或GCV法来做模型选择。
图2.6是移动房车险投保情况分析流程,其中包括3部分:数据预处理、模型筛选与选择、模型优化。数据预处理在前面已经分析过,这里主要讨论模型的选择,在数据挖掘过程中,很难一次性确定哪个模型效果较好,所以模型的选择变得尤为关键。
图2.6 移动房车险投保情况分析流程
如果软件具有自动算法选择功能,可以用它来初选几种算法,然后查看各模型的结果,并对其进行评估。一般情况下,自动算法并不能完全代替人工选择,需人工干预使模型可选范围逐渐缩小,最后选择一种或少数几种算法进行优化和比较。此外,如果数据分析工具未提供自动算法选择功能,可以根据数据特点以及分析问题初步选择几个模型进行测试,一方面可对数据特征进一步加深理解,另一方面也可作为“试金石”逐步扩展应用其他类别的算法。总之,算法的选择过程是一个不断地尝试、失败、再尝试的过程,最终发现数据中的规律。
2.4.1 算法初选
很多数据分析软件中都具有自动算法选择的模块,用于帮助用户以默认模型参数值来运行所有模型,然后按照某一评估准则筛选较好的模型,减少人工操作。在理想情况下,可快速定位合适的模型。
本例应用IBM SPSS Modeler中的自动分类模型对算法进行粗略选择,如图2.7所示,对数据集进行初步分析,取得效果较好的5个分类模型,然后再基于分类模型独立分析,这样可以极大减少模型匹配和人工选择的时间,从而快速发现最佳的几个模型,有的放矢地进一步深入分析。
图2.7 自动分类模型属性配置
在“模型”选项卡中设置模型数量为5个,在“专家”选项卡中选中所有的模型类型,可对模型参数进行修改,本例中使用默认的参数值。
运行后得到的自动分类模型筛选结果如图2.8所示,其中CHAID树、QUEST、CART、类神经网络、逻辑回归总体精确性较高。在模型列表中双击某一行的图形可查看因变量的分布情况,双击模型列表中的某一行可以查看模型的详情。
图2.8 自动分类模型筛选结果
双击QUEST和CART模型时,发现其采用了返回固定值的方式来提高精确率,即将所有分类判断均返回0值(不投保移动房车险)作为结果,在不投保的样本比例较高时,这样操作当然也可以达到较高的精确率,但是没有实际的应用价值,所以在后续分析中将上述两种模型滤除。
在“图形”选项卡中可看出移动房车险投保比例较少,将鼠标悬浮在柱状图看到只有348条,占总数的5.9%,如图2.9所示,其模型的分布情况与样本中目标变量的分布一致,说明模型本身没有实质的预测,即平均精确率全部来源于未投保样本的贡献(全部预测为未投保即可实现)。从预测变量的重要性中可以看出社会阶层、工作熟练程度、工作类别、教育程度、是否单身等重要性较高,但是这些变量之间的差异化并不明显。
图2.9 自动分类模型预测变量重要性
为了进一步验证自动分类器初选出的各个模型的效果,下面详细评估各模型的结果,并比较数据降维的效果。其中,为了比较降维对模型结果的影响,相应地选择CHAID树模型,比较降维前后的模型结果。同时,鉴于在逻辑回归模型中,不显著变量易对结果产生一定的影响,将逻辑回归的输入变量使用降维后的变量。
2.4.2 算法验证
依据模型的结果不仅可以看到各项指标是否达到要求,还要将结果与实际业务领域知识进行结合分析,以确认模型的应用价值,否则只注重单一的某几项结果指标,很可能出现过拟合的问题。
本例通过自动分类模型得出CHAID树的效果较好,所以单独分析CHAID树模型,其属性配置如图2.10所示,首先选择降维后的36个重要自变量作为输入,在“构建选项”中使用默认选项,即构建新模型且以构建单个树为目标,然后以降维前的85个变量作为自变量输入,比较降维前后对预测结果准确性的影响。
图2.10 CHAID树模型参数设置
运行模型后得到的结果如图2.11所示,展开所有层次可以看到模型中定义的分支全部为指向0,即为投保移动房车险,说明模型并没有明确在何种情况下某一家庭会投保移动房车险,这种情况下模型的应用效果将不理想。
图2.11 CHAID树模型结果
运行模型后使用测试数据作为模型的验证数据,用它来替换模型训练过程中的样本输入,即将eval.xlsx输入连接到生成的模型中,并在模型后连接“分析”节点,选中“重合矩阵”“绩效评估”“评估度量”“置信度图”作为输出指标,如图2.12所示。
图2.12 CHAID树模型分析参数配置
运行分析节点得到分类评价指标的结果,如图2.13所示,可以看到其正确率达到94.05%,AUC和Gini系数这两个指标的结果也较好。此外,使用36维自变量的指标与之相比仅仅在2.0以上的折叠准确性上略有差别,为0.981,说明变量降维后对CHAID模型的准确性结果影响不大,降维后的结果具有一定的代表性。
图2.13 CHAID树模型分类效果评估
如果仅看模型的准确率指标,模型的分类效果很好,但是我们发现CHAID树与QUEST、CART的问题类似,在分类过程中主要是返回0值样本的值,其分类的准确性与样本中因变量为0值的比例是一致的,观察模型的评估结果可以发现移动房车险数量的符合矩阵中并没有出现值为1时的预测值,说明在预测过程中模型对于投保这一险种的预测结果全部为0,即不投保移动房车险,明显不符合实际业务,所以无论是否使用降维操作,这个模型也不具有应用价值。
片面看重模型中的准确性等直接指标往往易被其欺骗,即使通过了样本的测试,在实际应用中也难以有效应用,这个家庭会投保移动房车险吗?系统并不需要任何运算,只要回答“不会”就会达到94%的准确率,但是这样的模型明显没有实际意义。
将自动算法选择的CHAID模型淘汰后,继续分析验证逻辑回归模型,对降维后的样本应用逻辑回归模型,移动房车险投保作为因变量,由于逻辑回归模型中不显著,自变量对模型的准确率影响较小,将其排除,使用降维后的36维字段作为自变量。与CHAID模型类似,逻辑回归模型的整体准确率较高,但是召回率极低,模型出现了过拟合的情况,可以预见其在实际应用中效果不好,所以逻辑回归模型也无法直接在保险公司中实际使用。
下面接着分析验证类神经网络算法的结果,模型准确率为93.05%,具有较好的分类效果,但是与逻辑回归类似,其AUC和Gini系数指标表现一般。其中召回率为0,说明直接应用模型时基本上没有实际意义。
综上,上述几种模型均未通过验证,比较几种模型未通过验证的原因,发现在分析过程中样本集存在严重的不平衡问题,导致算法“投机取巧”几乎不做分析,直接返回多样本记录对应的结果值,使各种分类算法在实际应用中均失效,虽然具有较高的整体准确性,却无法应用于实际企业运营中,这种情况在现实生活中非常多,如疾病预测、流失客户预警、欺诈检测、垃圾电话或邮件检测等,处理不平衡数据集是目前数据分析领域比较热门的问题之一,对其进行评价的指标主要是以ROC曲线来进行评价,而ROC曲线没有给出具体的参数值,所以采用ROC曲线下方的面积来评价,即采用AUC指标。
2.4.3 算法优化
不同模型选择和验证为常规选择方法,大多数业务均可进行上述操作,但是数据集的特点不一,且分析任务的准确性要求具有个性化,需要对模型进一步优化,以达到实际应用的需要。模型优化的方法主要从业务和建模技术等思路上进行优化,前者要对业务和数据特征有深入的理解,后者则主要靠的是挖掘技巧。
从前面的分析中可以看出,上述算法均不能直接应用于实际的业务中,需要对算法选择过程进行优化。由于样本存在不平衡,所以并非优化算法的准确率,而是AUC这一指标,也可应用召回率对模型结果进行比较。
对分析流程重新优化后的结果如图2.14所示,对逻辑回归和CHAID进行了模型参数改进。经过分析,发现数据降维使模型降低了准确性,所以在新的流程中不再使用“特征选择”,直接将分区数据应用到模型中。由于SPSS Modeler中的“平衡”节点每次运行都会随机产生新的样本记录,结果并不固定,容易对模型结果产生干扰,所以平衡后的样本集导出到Excel文件,然后再从Excel中读取出来,只要运行一次,就生成一个平衡后的数据源,此数据源(balance.xlsx)作为新流程的输入,样本数据不再变化。
图2.14 平衡节点参数配置
2.4.4 平衡数据集
现实中目标变量的样本分布经常出现已经失真的情况,至少有一个类别的样本数量占比小于20%,实际上很多类别的占比甚至低于5%,如信用卡诈骗、疾病检测等,而数据挖掘却要从中找出小概率的样本来,要实现可靠的数据结果,需要根据样本数据的特点正确平衡数据,平衡之后有助于建立能够真正解决业务问题的模型。另外,数据平衡之后还要监控其变化,因为随着时间的推移,样本的结构可以发生变化,需要定期进行调整,以保持模型的准确性。
数据挖掘中的“平衡”类似于统计学中的加权,为了使分类中的样本比例更加合理,常用的样本平衡包括基于采样的方法、对正负样本采用不同的代价函数、使用集成的方法等,假如正样本数量远远小于负样本数量,那么可以采用这些方法进行平衡。
基于采样的方式,对正样本过采样或对负样本进行欠采样,也可混合方式,即增加正样本的同时减少负例数量,这种方式最简单,只是调整样本集就可以达到平衡。由于过采样是通过复制的方式实现的,其不足之处是会使变量的方差比实际的小。当然,过采样不会丢失样本,包括样本的误差。而欠采样一般采用随机删除样本的方式,容易去掉样本的重要特征,且其方差比实际值要高。R语言和Scikit-learn均有相应的工具方法可以用于调整样本的权重值。在采样方式选择中,如果正负样本数均较少,使用过采样,如果正负样本数均足够多,采用下采样或混合方式。
在模型损失函数中调整惩罚项的权重,增加正样本的权重,减少负样本权重,这种方法的难点要根据实际情况来设置权重值,在实际应用中一般让各个分类的加权损失值近似相等,但是由于矩阵是稀疏的,这一方法在实际应用中效果不是很好。
集成的方式,应用SMOTE、Boosting、Bagging等。SMOTE是Synthetic Minority Oversampling Technique的缩写,即合成少数类过采样技术,其思想是在正例中创造出一些新的样本,其缺点是只能生成某一范围内的样本,不能创造超出少数类样本之外的新样本,且容易增加类间重叠的可能性。而Boosting和Bagging算法主要是集成多个弱分类器得到更合理的边界,实现更好的分类效果,Boosting更关注被错分的样本。需注意的是,Boosting的重采样并非是样本,而是样本的分布,经过迭代使被分错的样本逐渐划分到下一次的训练集,优点是简单,也不用担心出现过拟合,缺点是噪声点和异常点敏感,因为每天迭代噪声样本的权重都会被放大,由于其迭代时无法并行计算,所以运行速度较慢。
统一分类的方法,将少数类样本统一成多数类中,将分类划分问题转化为异常检测,这种方法重点不在于捕捉类间的差别,而是为其中的一类进行建模,然后将少数类作为异常样本进行检测,采用这一方法的前提是训练集中数据质量较高,如果其本身含有较多噪声数据,容易产生较大误差。
上述几种方法在实际应用中效果评价很关键,评估时无论采有何种方法进行训练,最终要使用实际分布的测试集进行检验。另外,不能使用准确率这一指标,应该使用ROC曲线、准确度召回曲线、利润收益曲线等方式对结果进行可视化,或者使用AUC、召回率、F1分值等指标定量评估,不要迷信分值,而要专注于少数类的分类正确率。
图2.15 平衡节点参数配置
考虑到样本数据中未投保移动房车险的记录占比为94%,所以在之前的模型选择中其结果虽然准确率较高,但是AUC值和召回率的分值并不高,在IBM SPSS Modeler中的可使用“平衡”节点对样本记录进行随机采样,如图2.15所示,将未投保移动房车险的记录数降为原来的20%,大约为总记录数的18%,而投保记录数量并不一定需要与未投保样本数据平均分布,所以只升为原来的2倍,其记录数量与未投保数量大体一致,约为12%。因子设置过程中要依据实际业务情况来设置,没有固定规则,但是要避免过多地复制少数类样本,或对多数类样本过度欠采样。
经过平衡后,再次使用自动分类模型进行算法探索,但在算法排序规则中选择AUC作为评价指标,即曲线下的面积越大,其模型排名越靠前,结果如图2.16所示,前5个模型依次为逻辑回归、类神经网络、CHAID、QUEST、CART,虽然以曲线下的面积作为评价标准,但各模型的总体精确性也呈现依次降低的顺序,说明各模型未被样本数据“欺骗”,从“图形”选项卡中的结果也可以看出,对投保移动房车险的预测总体精确性高于60%,AUC值最高为0.779,具有一定的应用价值。
图2.16 平衡节点参数配置
经过逻辑回归模型运算,得到如图2.17(a)所示的分析结果,AUC值较低,Gini值也较低,可以看到模型的分类能力提高了,模型的召回率和AUC指标值也提高了,说明模型的应用价值有所提高。
图2.17 分类平衡后的模型结果
CHAID的模型正确率为72.05%,AUC和Gini系数分别为0.673和0.346,相较于逻辑回归均有一定提高,从移动房车险的符合矩阵中也可以看到对于投保的预测正确比例要超过预测错误比例,说明CHAID模型更具有应用价值。
2.4.5 修改模型参数
模型参数在一定程度上依赖于样本的特点和模型的原理,在决策树模型中遇到不平衡样本可以使用增强稳定性Boosting或Bagging技术进行改进,像逻辑回归算法可使用前进法或后退法逐步剔除非显著性变量来改进模型,而支持向量机(SVM)模型中可以修改惩罚参数L2等来调优。大多数情况下,参数调优的过程是反复渐进式的,很难一蹴而就。
1.逻辑回归模型参数调优
为了进一步提高算法的AUC等指标,通过改进模型参数来继续优化模型,在逻辑回归模型中可选择“多项式”或“二项式”,数据集的目标变量有多个分类时选择前者,只有两种类别时选择后者,本例中理论上可选二项式,但是模型结果改进效果有限。
比较选择“进入法”“前进法”“步进法”等方法后的模型结果,看是否改进,其中进入法并不对输入变量做选择,全部用于模型,前进法或步进法则是先生成一个简单模型,然后逐渐增加输入变量,直到新加入的变量不再提高模型的准确性为止,向后法则相反,先由所有输入变量生成模型,然后逐渐移除对模型影响最小的输入变量,直到无法删除输入变量为止,从而生成模型,本例中使用前进法来优化模型。
除此之外,通过对模型的输入变量手工过滤来提高性能,先对变量进行一次逻辑回归,然后将其中不显著的自变量(p>0.05)剔除,重新进行逻辑回归,这样可以使模型的准确率和AUC均有明显提升,但剔除较多变量后模型的伪R方值略有下降。
本例对“房产数”“同居占比”等自变量进行剔除后得到如图2.18所示的结果,可以看到,准确率从未调整参数前的69.53%提高到75.15%,且AUC的值从0.605提高到0.676,改进程度较大。
图2.18 逻辑回归模型参数改进后的结果
2.CHAID模型参数调优
Bagging和Boosting都是用来提高模型准确率的方法,其中Bagging是Bootstrap Aggregating的一种,根据均匀概率分布从数据集中有放回地抽样提取样本,形成多个训练集,然后得到多个训练集预测结果,并对结果采用投票的方式处理分类问题,采用平均的方法处理回归问题。Boosting是通过不断调整训练失败的样本较大权重,即根据错误率来取样,通常比Bagging方法具有更高的准确率,当然,也有可能会引起过拟合。
在SPSS Modeler中可以使用这些技术的模型有神经网络、CHAID、QUEST、CART、线性回归等,在对数据特征未深入理解的情况下,可分别测试并比较Boosting和Bagging两种选项的结果,选择结果较优的选项。
本例对CHAID模型使用Bagging技术进行优化,并选择“似然比”作为类别目标的卡方,成分模型的数量设为10,得到较优的结果如图2.19所示,可以看到模型的准确率提高到78.77%,AUC和Gini系数指标分别为0.691和0.383,综合来看,模型的改进程度较大。
图2.19 CHAID模型参数改进后的结果
需要注意的是,应用Bagging或Boosting选项后,模型的计算量会大幅增加,是原来的N倍(成分模型的数量,默认为10)。所以,训练集样本数较多时,训练时间明显变长,特别是Boosting方法,因为它的预测函数是串行生成的,不支持并行训练。