如何将预测数据Age列统计值映射到训练数据的Age_bin分箱列
实现方案
- 第一步:提取训练集分箱边界参数
必须复用训练集的分箱边界,禁止在预测集重新计算分箱,避免区间规则不匹配。
如果你在训练集生成分箱时还保留代码,直接添加retbins=True参数获取边界:
如果你已经生成了训练集的Age_bin但没存边界,可以从现有列的区间值提取:import pandas as pd # 训练集生成分箱时同步返回边界 train_df['Age_bin'], bin_edges = pd.cut( train_df['Age'], bins=5, # 替换为你实际使用的分箱数量/自定义边界列表 retbins=True, include_lowest=True # 和你之前分箱的参数保持一致 )# 提取所有区间的左右边界后去重排序 bin_edges = sorted( {x.left for x in train_df['Age_bin'].unique()} | {x.right for x in train_df['Age_bin'].unique()} ) - 第二步:对预测集Age列应用完全相同的分箱逻辑
test_df['Age_bin'] = pd.cut( test_df['Age'], bins=bin_edges, include_lowest=True # 必须和训练集分箱参数一致 ) - 第三步:将训练集的分箱计数映射到预测集
# 生成训练集分箱对应计数的映射字典 bin_count_map = train_df['Age_bin'].value_counts().to_dict() # 映射到预测集 test_df['Age_bin_count'] = test_df['Age_bin'].map(bin_count_map) # 可选:预测集存在超出训练集年龄范围的样本时,填充计数为0 test_df['Age_bin_count'] = test_df['Age_bin_count'].fillna(0).astype(int)
注意事项:分箱时的
right(是否左开右闭)、include_lowest(是否包含左边界最小值)等参数必须和训练集生成分箱时的参数完全一致,避免边界样本的分箱结果不匹配。
内容的提问来源于stack exchange,提问作者self.Fool
相关产品推荐
相关产品推荐

