车险预测项目梳理项目背景简述目标收益评估指标简介好处代码项目节奏项目准备阶段(约1-2周)数据探索和预处理阶段(约2-3周)数据挖掘和特征工程(约1-2周)模型选择和开发阶段(约2-4周)模型评估和优化阶段(约2-4周)部署和上线阶段(约1-2周)复盘总结(约1周)项目难点&挑战数据字段信息脱敏,无法从domain expertise推导特征重要性数据类别极度不平衡,正负样本数量差异极大(26:1)缺失值、异常值在风控项目中的处理方案处理缺失值处理异常值基数过高的特征编码如何编码?存在数据泄露问题,如何优化?数据清洗+特征工程+模型预测pipeline管道实现方案设计未来动作
利用历史数据来构建预测模型,以预测驾驶员未来可能发生保险索赔的概率。
通过分析驾驶员的个人信息、驾驶历史、车辆特征等因素,预测驾驶员发生保险索赔的概率和可能的索赔成本。
优化保费定价:
准确的车险预测能够帮助保险公司更精确地评估每位驾驶员的风险,并根据其个人的风险特征和历史数据来定价保费。例如,如果预测模型准确预测到某位驾驶员的索赔风险较低,保险公司可以根据这一预测结果为该驾驶员提供更低的保费,以吸引客户。
如果驾驶员的风险无法准确量化,保险公司可能会采用一般化的保费定价策略,导致不同风险程度的驾驶员被收取相同的保费。这将对低风险驾驶员不公平,因为他们可能支付过高的保费。例如,一个具有良好驾驶记录和较低索赔风险的驾驶员可能会被错误地定价为高风险驾驶员,从而导致其支付不必要的高额保费。
提高精确理赔:
通过准确预测车险索赔的发生概率和成本,保险公司可以更好地为客户提供精确的理赔服务。例如,如果预测模型能够预测到某位驾驶员的索赔风险较高,保险公司可以提前做好准备并更迅速地响应索赔请求,提供更及时和准确的理赔服务,增强客户的满意度和忠诚度。
缺乏准确量化驾驶员风险的情况下,保险公司可能会面临潜在的亏损风险。如果高风险驾驶员被错误地定价为低风险,他们可能购买保险产品并引发频繁的索赔。这将对保险公司的经济状况产生不利影响。例如,一个高风险驾驶员如果被错误地定价为低风险并购买了保险,保险公司可能需要支付高额索
优化风险管理:
准确的车险预测可以帮助保险公司更好地了解和管理风险。通过分析驾驶员的历史数据和风险特征,保险公司可以识别高风险驾驶员,并采取相应的措施来减少风险。例如,如果预测模型准确预测到某位驾驶员的索赔风险较高,保险公司可以提供驾驶培训或安全驾驶建议,以降低事故发生的可能性,从而降低索赔频率和成本。
没有准确量化驾驶员的风险,保险公司很难对风险进行有效的控制和管理。驾驶员的风险特征和历史数据是评估风险和制定风险管理策略的重要依据。如果无法准确量化风险,保险公司将面临风险控制困难,无法精确预测和管理保险索赔的频率和成本。
提升客户体验:
准确的车险预测可以帮助保险公司提供更个性化、定制化的保险产品和服务,从而提升客户体验。通过了解每位驾驶员的风险特征和需求,保险公司可以为他们提供更合适的保险方案和优惠政策。例如,如果预测模型准确预测到某位驾驶员的索赔风险较低,保险公司可以为其提供定制化的保险计划,以满足其个性化的需求,并提供更好的客户服务和支持。
没有准确量化驾驶员的风险,保险公司难以为客户提供个性化的保险方案。每个驾驶员的风险特征不同,他们的保险需求和风险承受能力也会有所不同。例如,某个驾驶员可能需要更全面的保险覆盖,而另一个驾驶员可能只需要基本的保险保障。没有准确量化驾驶员的风险,保险公司难以满足客户的个性化需求,导致客户无法获得最适合他们的保险产品。
Normalized Gini Coefficient 标准化基尼系数
维基百科:https://en.wikipedia.org/wiki/Gini_coefficient
基尼系数(英语:Gini coefficient),是20世纪初意大利学者科拉多·基尼根据洛伦兹曲线所定义的判断年收入分配公平程度的指标,是比例数值,在0和1之间。
当评估车险预测模型的性能时,使用标准化基尼系数作为指标。在计算标准化基尼系数之前,我们需要了解以下几个概念:
Gini系数:Gini系数衡量了模型预测结果的准确性和排序能力。它的取值范围从0到0.5,其中0表示随机猜测,0.5表示完美预测。
标准化Gini系数: 范围是0到1
预测排序:在评分过程中,模型对所有观察值进行排序,将预测值从大到小排列。
累积比例:评分算法计算累积正类观察值的比例,即正类观察值在排序后的前缀中的比例。
标准化Gini系数 = 2* AUC-ROC - 1
不受类别不平衡影响:标准化基尼系数可以在类别不平衡的情况下进行准确的评估,而不会被少数类别的样本数量影响。
在标准化基尼系数的计算中,首先通过观测值的排序,将预测结果转化为基尼系数。然后,将实际基尼系数除以理论最大基尼系数,从而得到标准化基尼系数。
类别不平衡可能导致正负样本数量差异较大,但基尼系数的计算过程中,并不涉及预测结果的绝对值。相反,基尼系数的计算仅依赖于样本的排序顺序。因此,无论类别的分布如何,标准化基尼系数都会对模型的排序能力进行准确的评估。
这使得标准化基尼系数成为一种适用于类别不平衡数据集的评估指标。它可以更好地反映模型在不同类别上的性能,而不会被类别数量的差异所影响。
强调排序能力:标准化基尼系数对于排序能力的评估更为准确,能够反映出模型在预测概率上的排序性能,有利于在车险预测中进行风险评估和客户排序。
易于解释和比较:标准化基尼系数的取值范围在0到1之间,可以直观地理解为模型的性能水平,且不同模型的标准化基尼系数可以进行比较,有助于选择最佳模型。
常用的二分类任务指标还包括:
准确率(Accuracy):正确预测的样本数量占总样本数量的比例。
精确率(Precision):预测为正例的样本中实际为正例的比例。
召回率(Recall):实际为正例的样本中被预测为正例的比例。
F1-score:综合考虑精确率和召回率的指标,取两者的调和平均值。
AUC-ROC:基于真正例率和假正例率的曲线下面积,衡量分类器在不同阈值下的性能。
x
1def gini(actual, pred):
2 assert (len(actual) == len(pred)) # 确保实际值和预测值的长度相等
3 all = np.asarray(np.c_[actual, pred, np.arange(len(actual))], dtype=np.float) # 创建一个数组,包含实际值、预测值和索引
4 all = all[np.lexsort((all[:, 2], -1 * all[:, 1]))] # 根据预测值对数组进行排序
5 totalLosses = all[:, 0].sum() # 计算所有实际值的总和
6 giniSum = all[:, 0].cumsum().sum() / totalLosses # 计算基尼系数的分子部分
7
8 giniSum -= (len(actual) + 1) / 2. # 减去一个理论上的值
9 return giniSum / len(actual) # 计算基尼系数的值
10
11
12def gini_normalized(actual, pred):
13 return gini(actual, pred) / gini(actual, actual) # 计算标准化基尼系数的值
明确项目目标、收益和范围。
收集和整理相关数据集。
确定数据清洗和预处理的需求。
分析业务需求和问题定义。
元数据分析方案设计和架构搭建
不平衡数据处理方案
对数据进行探索性分析,了解数据特征和分布。
处理缺失值、异常值和重复值等数据质量问题。
探究客户风险视角下的缺失值、异常值处理方案
特征编码和转换
特征构建和衍生
特征选择和降维
特征重要性评估
特征离散化
合理划分训练集、验证集和测试集。
选择适合车险预测的机器学习或统计模型。
进行模型训练和调优,使用训练集和验证集进行模型评估和选择。
考虑模型的解释性、计算效率和预测准确度等指标。
尝试不同的算法和模型组合。
使用测试集评估模型的性能,包括标准化基尼系数和其他常见的评估指标。
分析模型的误差和不确定性,并进行优化和改进。
考虑特征选择、模型融合和集成学习等技术来提升预测性能。
部署训练好的模型到生产环境中,进行实际的预测和风险评估。
监控模型的性能和稳定性,及时进行调整和更新。
针对用户反馈和实际应用情况,进行模型的迭代和改进。
分享项目中获得的经验教训和可借鉴的最佳实践。
展望未来工作和改进的方向,提出进一步的研究和发展建议。
通过元数据分析框架来对特征的属性进行拆解和分析归纳,尤其在无法从领域专业知识推导特征重要性的情况下。
变量类型:分析特征的变量类型,如数值型、类别型、文本型等。不同类型的特征可能需要采用不同的处理方式和建模方法。
数据类型:分析特征的数据类型,如整数、浮点数、日期等。不同数据类型的特征可能需要进行不同的数据转换和预处理。
缺失值占比:分析特征中缺失值的比例,了解每个特征缺失值的情况。可以根据缺失值的程度决定是否需要进行填充或删除处理。
Cardinality(基数):分析特征的基数,即不同取值的数量。基数较高的特征可能对模型的预测能力有较大影响,而基数较低的特征可能对模型的预测能力有限。
元数据框架搭建的收益:
提供特征属性信息:元数据分析框架可以提供特征的基本属性信息,包括变量类型、数据类型、缺失值占比、基数等。这些信息可以帮助数据科学家和分析师更好地理解和处理数据,为后续的特征工程和建模提供指导。
指导特征选择和构建:通过分析特征的元数据,可以识别出具有高基数或高缺失值占比的特征,或者发现特征之间的相关性。这些信息可以用于指导特征选择的过程,帮助选择最具预测能力和稳定性的特征,提高模型的性能和鲁棒性。
发现数据质量问题:元数据分析框架可以帮助发现数据中的异常情况和数据质量问题,如异常值、数据偏斜、数据类型错误等。通过及时发现和处理这些问题,可以提高模型的准确性和稳定性。
支持数据治理和合规性:元数据分析框架有助于数据治理和合规性的实施。通过对数据属性的分析和记录,可以更好地管理数据的来源、变化和用途,确保数据的质量和可追溯性,同时满足数据隐私和安全的合规要求。
提高团队协作效率:元数据分析框架可以作为团队共享和沟通的工具,帮助数据科学家、分析师和开发人员更好地理解和利用数据。团队成员可以根据元数据信息进行更加有效的数据探索、特征工程和模型开发,减少沟通和理解上的误差。
不平衡数据方案梳理、可行性验证以及效果比对
过采样(Oversampling):
随机复制少数类样本,增加其数量。
RandomOverSampler
SMOTE
ADASYN
欠采样(Undersampling):
随机删除多数类样本,减少其数量。
RandomUnderSampler
TomekLinks
EditedNearestNeighbours
RepeatedEditedNearestNeighbours
AllKNN
ClusterCentroids
类别权重调整(Class Weighting):
给予少数类样本更高的权重,平衡其影响。
在模型训练中调整样本类别权重。
阈值移动(Threshold Moving):
调整分类阈值,使得更容易预测少数类样本。
降低分类器的阈值,使得更多样本被预测为少数类。
数据合成(Data Augmentation):
对少数类样本进行扩增,生成更多的样本。
可以使用图像处理技术、文本生成技术等方法进行数据合成。
集成方法(Ensemble Methods):
使用多个分类器组合的方式进行预测。
可以使用Bagging、Boosting等集成学习算法。
异常检测(Anomaly Detection):
检测和移除多数类中的异常样本。
异常检测算法可以帮助减少多数类样本的影响。
基于代价敏感学习(Cost-Sensitive Learning):
考虑错误分类的代价,使得模型更关注少数类样本。
调整模型损失函数或代价矩阵,使得少数类的错误分类代价更高。
结论:
分别尝试随机重采样和基于模型的合成方法,并完成方案效果比对,由于数据维度、数据量级过大,使用SMOTE、ADASYN等合成方法耗时过长,TomekLinks、ENN等基于近邻的欠采样方法计算效率也过低,从而
短期:
选择从多数类别中随机删除一些样本,以减少数据量。这样可以减少计算和内存开销,并且可以更快地完成数据处理和模型训练。
杂交方法:先随机过采样再随机欠采样,降低模型过拟合的可能性
长期:使用并行计算技术,如多线程或分布式计算、数据分块处理(Chunking),将数据处理和合成方法应用于多个计算资源上,从而提高处理速度。通过充分利用计算资源的并行性,可以减少耗时。
尝试使用对imbalanced data更鲁棒的算法模型,例如XGBoost,并完成关键参数的优化迭代
scale_pos_weight: 用于设置正例(少数类别)与负例(多数类别)的权重比例。通常情况下,scale_pos_weight
的取值可以设置为负例样本数目除以正例样本数目的比值,以便平衡类别权重。较高的scale_pos_weight
将增加少数类别的重要性。
subsample: 子样本采样比例参数,用于控制每轮迭代中随机选择的样本比例。较小的subsample
值可以增加少数类别样本的比例,从而在训练中更多地关注少数类别。默认值为1,表示使用全部样本。
max_delta_step: 调整样本权重的参数,用于限制每棵树权重的调整幅度。较小的max_delta_step
值可以降低权重调整的速度,有助于处理不平衡数据集。
objective: XGBoost支持多种目标函数,可以根据具体问题选择适当的目标函数来处理不平衡数据。例如,使用logistic目标函数(binary:logistic)或排名目标函数(rank:pairwise)。
在风控项目中,特别是车险预测项目中,缺失值和异常值的处理需要考虑不同的角度和策略。传统的处理方法可能不适用于这种特定情况,因为缺失值和异常值可能包含有价值的信息,能够反映用户的异常风险存在。以下我们尝试的优化方案:
特征衍生:对于含有缺失值的特征,可以通过衍生新的特征来捕捉缺失值的信息。例如,可以创建一个二进制指示变量来表示该特征是否存在缺失值,以此作为一个重要的特征进行建模。
缺失值填充:而不是简单地删除缺失值,可以采用合适的填充策略来填补缺失值。填充方法可以根据特征的类型和分布进行选择
单变量填充
简单快速,不需要考虑其他特征的影响,但可能会引入偏差,因为仅依赖于单个特征的信息。
对于数值型特征,可以使用均值、中位数或其他统计量来填充缺失值。这些统计量可以基于整个特征的数据分布或特定分组(如相似样本)的数据分布进行计算。
对于分类型特征,可以使用众数或其他频率较高的值来填充缺失值。
多变量填充
考虑了其他特征之间的关系,能够更准确地填补缺失值。然而,该方法可能更加复杂和计算密集,需要对参考特征的选择和建模方法进行谨慎考虑。
回归模型填充:(使用随机森林regressor对高度相关变量进行填充,进行缺失值预测,模型分数前后对比有大概5%的提升)
使用线性回归、岭回归、随机森林等回归模型来建立特征之间的关系,并预测缺失值。
可以根据特征的相关性、特征重要性等选择参考特征,利用已有的特征值进行建模和预测。
KNN(K-最近邻)填充:(尝试了,太慢,数据量太大,不适合基于近邻的填充方法)
基于特征之间的相似性,使用KNN算法来找到与缺失样本最相似的样本,并将其特征值用于填充缺失值。
需要定义相似性度量指标(如欧氏距离、余弦相似度等)和K值(最近邻的数量)。
未来优化动作:
矩阵分解填充:
利用矩阵分解技术(如奇异值分解、主成分分析等)将数据集拆解为低秩矩阵的乘积,利用已有的特征值进行预测并填充缺失值。
可以通过优化算法(如梯度下降)来求解矩阵分解的参数。
多重插补(Multiple Imputation):
基于随机模拟的方法,通过生成多个完整的数据集来填补缺失值,并进行多次分析和预测。
可以使用方法如马尔可夫链蒙特卡洛(MCMC)和期望最大化(EM)来进行多重插补。
结合领域知识的填充:
基于领域专家的知识和经验,利用特征之间的逻辑关系、业务规则等进行缺失值的估计和填充。
这种方法常用于特定领域的数据处理,需要对数据和领域有较深的理解。
基于统计方法的异常值检测:使用统计学方法如Z-Score或箱线图方法来检测车险数据中数值型变量的异常值,例如:车辆保险金额超出均值加减几倍标准差的观测值可能被视为异常。
基于业务规则的异常值检测:根据车险领域的专业知识和业务规则定义异常值,例如:对于车辆保险索赔金额,如果超过预设的阈值或超出车辆类型的合理范围,可以将其视为异常。
基于机器学习的异常值检测:利用机器学习算法学习车险数据的正常模式,并识别偏离正常模式的异常观测值。例如:使用孤立森林或单类支持向量机等算法来检测车险数据中的异常保险索赔案例。
基数较高的特征可以考虑使用目标编码(Target Encoding),也称为类别均值编码(Mean Encoding)。目标编码是一种编码方法,通过使用目标变量的统计信息来代替原始的类别值。
保留了类别信息:目标编码利用了目标变量的统计信息,通过计算每个类别对应的目标变量的均值(或其他统计量),将其作为编码值。这样可以在一定程度上保留了类别的信息,有助于模型学习到类别与目标之间的关系。
解决了高基数带来的维度灾难:对于高基数的特征,直接使用原始的类别值可能导致维度爆炸,增加模型的复杂度和计算成本。目标编码将高基数特征转换为低维度的编码值,有效减少了特征空间的大小,简化了模型的训练和预测过程。
捕捉了类别与目标的关联性:通过使用目标变量的统计信息,目标编码能够更好地捕捉不同类别对目标的影响。特别是在分类问题中,目标编码可以提供每个类别对应的目标变量的平均值,反映了不同类别的潜在风险或者概率分布,有助于模型学习到类别之间的差异。
适用于多种模型:目标编码是一种通用的编码方法,适用于多种机器学习模型,特别是基于树的模型如决策树、随机森林和梯度提升树。这是因为目标编码生成的编码值是连续的,能够与树模型中的分裂点进行比较和划分。
存在数据泄露问题,如何优化?
目标编码(Target Encoding)在应用过程中可能存在数据泄露问题,即使用了目标变量的信息来编码特征,可能会将训练数据中的目标变量信息泄露到了验证集或测试集中。这会导致模型在验证集或测试集上表现良好,但在实际应用中性能下降。
我们通过交叉验证、添加噪声、滞后编码、特征组合和稳定性选择等方法,减少目标编码中的数据泄露问题,提高模型的泛化能力和性能。
核心代码
xxxxxxxxxx
1def add_noise(series, noise_level):
2 return series * (1 + noise_level * np.random.randn(len(series)))
3
4def target_encode(trn_series=None,
5 tst_series=None,
6 target=None,
7 min_samples_leaf=1,
8 smoothing=1,
9 noise_level=0):
10 """
11 trn_series : training categorical feature as a pd.Series
12 tst_series : test categorical feature as a pd.Series
13 target : target data as a pd.Series
14 min_samples_leaf (int) : minimum samples to take category average into account
15 smoothing (int) : smoothing effect to balance categorical average vs prior
16 """
17 assert len(trn_series) == len(target)
18 assert trn_series.name == tst_series.name
19 temp = pd.concat([trn_series, target], axis=1)
20 # 集散这一列关于target的group mean
21 averages = temp.groupby(by=trn_series.name)[target.name].agg(["mean", "count"])
22 # 平滑
23 smoothing = 1 / (1 + np.exp(-(averages["count"] - min_samples_leaf) / smoothing))
24 # 计算所有target的mean
25 prior = target.mean()
26 # The bigger the count the less full_avg is taken into account
27 # 如果某一类别的值的个数特别多,比如104这一类就有21255行,那么我们就要削减其关于target的mean的权值。
28 averages[target.name] = prior * (1 - smoothing) + averages["mean"] * smoothing
29 averages.drop(["mean", "count"], axis=1, inplace=True)
30
31 # 分别对train和test计算mean
32 ft_trn_series = pd.merge(
33 trn_series.to_frame(trn_series.name),
34 averages.reset_index().rename(columns={'index': target.name, target.name: 'average'}),
35 on=trn_series.name,
36 how='left')['average'].rename(trn_series.name + '_mean').fillna(prior)
37
38 ft_trn_series.index = trn_series.index
39 ft_tst_series = pd.merge(
40 tst_series.to_frame(tst_series.name),
41 averages.reset_index().rename(columns={'index': target.name, target.name: 'average'}),
42 on=tst_series.name,
43 how='left')['average'].rename(trn_series.name + '_mean').fillna(prior)
44
45 ft_tst_series.index = tst_series.index
46 return add_noise(ft_trn_series, noise_level), add_noise(ft_tst_series, noise_level)
添加噪声函数:在add_noise
函数中,对传入的series
进行乘法操作,乘以一个随机生成的噪声值。这个噪声值是通过np.random.randn(len(series))
生成的服从标准正态分布的随机数。通过乘法操作,噪声值会在一定程度上扰动原始的特征值,使得编码过程中的计算结果具有一定的随机性,从而减少数据泄露的风险。
目标编码平滑化:在target_encode
函数中,通过平滑化操作来减少对目标变量的依赖性,从而进一步降低数据泄露的可能性。具体来说,通过计算每个类别的样本数量(count
)和目标变量的均值(mean
),然后应用平滑化公式:smoothing = 1 / (1 + np.exp(-(averages["count"] - min_samples_leaf) / smoothing))
,得到平滑化系数。这个平滑化系数会在后续的编码计算中起到调节的作用,使得编码结果对目标变量的依赖程度适度平滑。
添加噪声到编码结果:在对训练集和测试集进行目标编码后,通过调用add_noise
函数,将噪声添加到编码结果中。这样做的目的是增加编码结果的随机性,进一步减少对目标变量的依赖性,降低数据泄露的风险。
综上,通过添加噪声和平滑化操作,该代码在目标编码过程中优化了数据泄露问题。添加的噪声使得编码结果具有一定的随机性,减少了对目标变量的直接依赖性,而平滑化操作则通过调节编码结果的依赖程度,进一步降低了数据泄露的可能性。这样可以提高模型的泛化能力和性能,减少过拟合的风险。
xxxxxxxxxx
1191min_samples_leaf:100
2smoothing:10
3noise_level:0.01
4----------------------------------------------------------------------------------------------------
5编码前 编码后 前后变化
6ps_ind_02_cat : 0.508104 ± 0.000422 | 0.509742 ± 0.001206 | 0.001637
7ps_ind_04_cat : 0.512504 ± 0.000825 | 0.513386 ± 0.001310 | 0.000883
8ps_ind_05_cat : 0.519149 ± 0.000840 | 0.533966 ± 0.001542 | 0.014816
9ps_car_01_cat : 0.527362 ± 0.000694 | 0.551605 ± 0.000460 | 0.024243
10ps_car_02_cat : 0.532023 ± 0.000185 | 0.532053 ± 0.000973 | 0.000030
11ps_car_03_cat : 0.539585 ± 0.001345 | 0.539638 ± 0.001187 | 0.000053
12ps_car_04_cat : 0.537897 ± 0.000764 | 0.536857 ± 0.001752 | -0.001041
13ps_car_05_cat : 0.531300 ± 0.001056 | 0.530510 ± 0.001477 | -0.000790
14ps_car_06_cat : 0.517316 ± 0.000678 | 0.541549 ± 0.000743 | 0.024233
15ps_car_07_cat : 0.523654 ± 0.000581 | 0.521251 ± 0.000937 | -0.002404
16ps_car_08_cat : 0.520030 ± 0.000615 | 0.519090 ± 0.001844 | -0.000940
17ps_car_09_cat : 0.503266 ± 0.000354 | 0.524970 ± 0.001469 | 0.021704
18ps_car_10_cat : 0.500290 ± 0.000241 | 0.500176 ± 0.001463 | -0.000114
19ps_car_11_cat : 0.511271 ± 0.001293 | 0.576248 ± 0.001761 | 0.064977
元数据框架:构建元数据分析框架,对特征进行分类归纳和拆解,为后续的数据质检、数据清洗、特征选择和构建提供有效帮助,提高团队协作效率
数据清洗:风控视角梳理缺失值、异常值对于用户风险的影响,针对性给出基于模型的缺失值填充方案(MICE/单变量填充)和异常值检测方案,为后续特征构造提供指导性建议
编码:通过目标编码结合添加噪声和平滑化操作,解决高基数特征使用传统独热编码造成的维度爆炸和信息泄露的问题
离散化:根据连续特征分布特点设计有监督特征离散化方案,增加模型的迭代速度,计算结果方便存储,易扩展,增加稳定性
转换:在对原始特征进行处理和转换,提取更有价值的信息,包括特征缩放、标准化、归一化等,以改善模型性能和提高预测能力。
增强:使用多项式特征构造方法进行特征交互和合并,结合domain expertise完成特征构造,以捕捉数据中的隐藏模式和关联性,提供更具预测能力和解释性的特征表示,从而增强模型的表达能力和预测准确度。
筛选:通过SHAP、树型模型等方法计算特征重要度、对60+特征进行评估和筛选,选择对目标变量预测有重要影响、相关性强且具有解释性的特征,以提高模型效果和降低过拟合的风险。
建模:使用XGBoost进行建模预测,集成前置特征工程、参数调节、交叉验证和模型评估指标计算等环节,最终10折交叉验证平均score线下最优达到:0.286
数据质量改进:优化数据采集和清洗过程,减少数据缺失和异常,提高数据质量。改进数据收集方法,加强数据验证和清洗流程,减少数据质量问题对模型的影响。
特征扩展和更新:引入更多相关特征、衍生特征和外部数据,提高模型的表达能力和预测准确度。 整合车辆行驶数据、天气数据等外部数据,构建更丰富的特征集。
特征选择和筛选:通过移除所有计算特征(calc features)来简化模型输入,减少冗余和噪声特征的影响。 示例:使用特征选择方法(如LightGBM)来识别和保留对目标变量有最强相关性的特征。
模型集成和优化:尝试不同的模型集成方法,如集成多个模型、堆叠模型等,以提高预测性能和稳定性。训练和集成多个模型,如XGBoost、LightGBM和神经网络(NN),通过加权平均或投票机制获得最终预测结果。
实时预测和决策:建立实时预测和决策系统,及时更新模型预测结果,支持实时风险评估和决策制定。开发实时监测系统,定期更新预测模型,提供实时车险风险评估和个性化保险方案。
模型解释和可解释性提升:通过解释性技术和方法,提高模型的可解释性,增加业务用户对预测结果的理解和信任。 应用SHAP值、特征重要性等技术,解释模型的预测过程和关键影响因素。