使用scorecardpy加载模型后调用scorecard_ply报UnboundLocalError的解决方法
解决scorecardpy模型保存加载后调用scorecard_ply报错的问题
问题原因
np.save()/np.load() 不适合保存scorecardpy生成的card模型。该模型是包含DataFrame等复杂结构的字典,numpy的序列化方式会丢失部分元数据或结构信息,导致加载后的模型缺失card_df关键字段,触发报错。
解决方法
方法1:使用pickle保存/加载模型(推荐)
pickle是Python原生序列化工具,能完整保留复杂对象的结构,完美适配scorecardpy的card模型:
- 保存模型:
import pickle # 假设你的card模型变量名为card_model with open('card_model.pkl', 'wb') as f: pickle.dump(card_model, f)
- 加载模型:
import pickle with open('card_model.pkl', 'rb') as f: loaded_card_model = pickle.load(f)
- 调用生成评分:
import scorecardpy as sc score = sc.scorecard_ply(test_data, loaded_card_model)
方法2:手动补全缺失字段(仅应急用)
如果已经用np.save保存了模型,可通过以下方式临时修复:
- 重新训练模型,提取原始模型中的
card_df字段 - 给加载后的模型字典补充该字段:
import numpy as np loaded_model = np.load('card_model.npy', allow_pickle=True).item() # 假设重新训练的原始模型为original_card_model loaded_model['card_df'] = original_card_model['card_df'] # 调用评分 score = sc.scorecard_ply(test_data, loaded_model)
此方法依赖原始训练模型,局限性大,仅作为应急方案。
内容的提问来源于stack exchange,提问作者zjh1001
相关产品推荐
相关产品推荐

