在使用toad的时候没有看到这个model如何保存模型和读取模型,最后在根据结果进行评分的模块,所以就写一写。
栗子:
加载所需model
import pandas as pd
import numpy as np
import toad as td
import scorecardpy as sc
from sklearn.datasets import load_iris
导入iris数据并处理成dataframe格式:
df = pd.DataFrame(iris.data, columns=iris.feature_names)
# 添加目标列
df['target'] = iris.target
df['target_names'] = iris.target_names[df['target']]
#去除不必要feature
feature_list = list(df)
feature_list.remove('target_names')
#筛选有用特征
train_selected, dropped = td.selection.select(df[feature_list],target = 'target', empty = 0.5, iv = 0.05, corr = 0.9, return_drop=True)
woe转化:
# 初始化
transer = td.transform.WOETransformer()
# combiner.transform() & transer.fit_transform() 转化训练数据,并去掉target列
train_woe = transer.fit_transform(c.transform(train_selected), train_selected['target'], exclude=['target'])
# 将woe转化后的数据做逐步回归
final_data = td.selection.stepwise(train_woe,target = 'target', estimator='ols', direction = 'both', criterion = 'aic')
col = list(final_data.drop(['target'],axis=1).columns)
模型训练:
card = td.ScoreCard(
combiner = c,
transer = transer,
#class_weight = 'balanced',
#C=0.1,
#base_score = 600,
#base_odds = 35 ,
#pdo = 60,
#rate = 2
)
card.fit(final_data[col], final_data['target'])
结果保存、读取:
#结果保存
np.save('iris_test',card.export(to_frame=True))
#结果读取
card_load = np.load('iris_test.npy',allow_pickle=True)
#对columns进行修改 因为要用scorecard的model来读取toad的评分卡
scard = pd.DataFrame(card_load,columns=['variable','bin','points'])
#修饰一下toad评分卡的格式
scard['bin'] = scard['bin'].apply(lambda x: x.replace('~',','))
scard['bin'] = scard['bin'].apply(lambda x: x.replace(' ',''))
构建数据进行评分
#构建数据
aa = [[3.3,3.3,3.3]]
test_data = pd.DataFrame(aa,columns=['sepal width (cm)','sepal length (cm)','petal width (cm)'])
#评分
sc.scorecard_ply(test_data,scard)
评分卡以及评分结果