You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何为决策树模型的观测样本设置差异化权重

Python树类模型按保单存续期加权的实现方案

完全可以实现,主流Python树模型库都原生支持样本加权能力,不需要修改模型底层的分裂、计算逻辑。

核心原理

树模型的样本加权逻辑非常直接:训练过程中计算节点分裂的信息增益/基尼系数/平方误差、计算叶节点输出值时,会按照你传入的权重给每个样本的贡献做加权,权重越高的样本对模型规则生成的影响越大,完全匹配你“长存续期保单优先级更高”的需求。
你只需要提前把每份保单对应的权重计算好——最简单的方式就是直接用保单存续天数作为权重,也可以根据业务需求做缩放调整,训练时把权重数组传入模型即可。

具体调用方法

以下是Python生态最常用的树模型的加权实现,覆盖单决策树和各类集成树:

  • scikit-learn 单决策树/随机森林/GBDT
    所有树类估计器的fit()方法都自带sample_weight参数,直接传入和样本等长的权重数组即可,示例代码:

    from sklearn.tree import DecisionTreeClassifier
    import pandas as pd
    import numpy as np
    
    # df为你的保单数据集,X为模型输入特征,y为预测目标,duration列存储每份保单的存续天数
    X = df.drop(columns=['is_churn', 'duration'])
    y = df['is_churn']
    
    # 权重计算:直接用存续天数,若极差过大可做对数/归一化缩放
    # 例:归一化到0.1~10区间,避免极值样本过度影响模型
    min_dur, max_dur = df['duration'].min(), df['duration'].max()
    sample_weight = (df['duration'] - min_dur) / (max_dur - min_dur) * 9.9 + 0.1
    
    # 初始化并训练模型,传入样本权重
    clf = DecisionTreeClassifier(max_depth=5, random_state=42)
    clf.fit(X, y, sample_weight=sample_weight)
    

    随机森林、梯度提升树的调用逻辑完全一致,都是在fit()阶段传入sample_weight即可。

  • 主流GBDT类实现(XGBoost/LightGBM/CatBoost)
    三类工业界常用的树集成模型全部原生支持样本权重:

    • XGBoost:构造DMatrix时传入weight=sample_weight,或直接在fit()方法中传入sample_weight=sample_weight
    • LightGBM:构造Dataset时传入weight=sample_weight即可
    • CatBoost:在fit()方法中传入sample_weight=sample_weight参数

注意事项

  • 不要混淆权重和特征:存续天数作为权重是用来调整模型对样本的重视程度,不要直接把它和普通输入特征混为一谈,二者作用逻辑完全不同。
  • 权重缩放建议:如果你的保单存续天数极差非常大(比如最短1天,最长超过10年),建议先对存续天数做对数变换或者区间归一化,避免极少数超长存续期的样本过度主导模型分裂规则,具体缩放范围可以根据验证集效果调整。
  • 验证集加权:如果训练时用了早停机制,验证集也要按照完全相同的规则计算权重传入,否则早停的评估指标会出现偏差。

内容的提问来源于stack exchange,提问作者Christina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 23:21:44