赞
踩
一、风险评估模型的效果评价方法
二、利用AUC评估逻辑回归模型的准确性
- #用metrics.roc_curve()求出 fpr, tpr, threshold
- fpr, tpr, threshold = metrics.roc_curve(y_test,y_predict_best)
-
- #用metrics.auc求出roc_auc的值
- roc_auc = metrics.auc(fpr,tpr)
-
- #将图片大小设为8:6
- fig,ax = plt.subplots(figsize=(8,6))
-
- #将plt.plot里的内容填写完整
- plt.plot(fpr, tpr, label = 'AUC = %0.2f' % roc_auc)
-
- #将图例显示在右下方
- plt.legend(loc = 'lower right')
-
- #画出一条红色对角虚线
- plt.plot([0, 1], [0, 1],'r--')
-
- #设置横纵坐标轴范围
- plt.xlim([-0.01, 1.01])
- plt.ylim([-0.01, 1.01])
-
- #设置横纵名称以及图形名称
- plt.ylabel('True Positive Rate')
- plt.xlabel('False Positive Rate')
- plt.title('Receiver Operating Characteristic Curve')
- plt.show()
-
三、利用AUC评估随机森林模型的准确性
- #用metrics.roc_curve()求出 fpr, tpr, threshold
- fpr, tpr, threshold = metrics.roc_curve(y_test,y_predict_best)
-
- #用metrics.auc求出roc_auc的值
- roc_auc = metrics.auc(fpr,tpr)
-
- #将图片大小设为8:6
- fig,ax = plt.subplots(figsize=(8,6))
-
- #将plt.plot里的内容填写完整
- plt.plot(fpr, tpr, label = 'AUC = %0.2f' % roc_auc)
-
- #将图例显示在右下方
- plt.legend(loc = 'lower right')
-
- #画出一条红色对角虚线
- plt.plot([0, 1], [0, 1],'r--')
-
- #设置横纵坐标轴范围
- plt.xlim([-0.01, 1.01])
- plt.ylim([-0.01, 1.01])
-
- #设置横纵名称以及图形名称
- plt.ylabel('True Positive Rate')
- plt.xlabel('False Positive Rate')
- plt.title('Receiver Operating Characteristic Curve')
- plt.show()
-
四、利用KS值评估逻辑回归模型的准确性
- #用metric.roc_curve()求出 fpr, tpr, threshold
- fpr, tpr, threshold = metrics.roc_curve(y_test, y_predict_best)
- #print(threshold)
- #求出KS值和相应的阈值
- ks = max(abs(tpr-fpr))
- thre = threshold[abs(tpr-fpr).argmax()]
-
- ks = round(ks*100, 2)
- thre = round(thre, 2)
- print('KS值:', ks, '%', '阈值:', thre)
-
- #将图片大小设为8:6
- fig = plt.figure(figsize=(8,6))
- #将plt.plot里的内容填写完整
-
- plt.plot(threshold[::-1], tpr[::-1], lw=1, alpha=1,label='真正率TPR')
- plt.plot(threshold[::-1], fpr[::-1], lw=1, alpha=1,label='假正率FPR')
-
-
- #画出KS值的直线
- ks_tpr = tpr[abs(tpr-fpr).argmax()]
- ks_fpr = fpr[abs(tpr-fpr).argmax()]
- x1 = [thre, thre]
- x2 = [ks_fpr, ks_tpr]
- plt.plot(x1, x2)
-
- #设置横纵名称以及图例
- plt.xlabel('阈值')
- plt.ylabel('真正率TPR/假正率FPR')
- plt.title('KS曲线', fontsize=15)
- plt.legend(loc="upper right")
- plt.grid(axis='x')
-
- # 在图上标注ks值
- plt.annotate('KS值', xy=(0.18, 0.45), xytext=(0.25, 0.43),
- fontsize=20,arrowprops=dict(facecolor='green', shrink=0.01))
五、利用KS值评估随机森林模型准确性(code同上)
六、利用PSI评估逻辑回归模型稳定性
- ## 训练集预测概率
- y_train_probs = lr.predict_proba(x_train)[:,1]
- ## 测试集预测概率
- y_test_probs = lr.predict_proba(x_test)[:,1]
-
- def psi(y_train_probs, y_test_probs):
- ## 设定每组的分点
- bins = np.arange(0, 1.1, 0.1)
-
- ## 将训练集预测概率分组
- y_train_probs_cut = pd.cut(y_train_probs, bins=bins, labels=False)
- ## 计算预期占比
- expect_prop = (pd.Series(y_train_probs_cut).value_counts()/len(y_train_probs)).sort_index()
-
- ## 将测试集预测概率分组
- y_test_probs_cut = pd.cut(y_test_probs, bins=bins, labels=False)
- ## 计算实际占比
- actual_prop = (pd.Series(y_test_probs_cut).value_counts()/len(y_test_probs)).sort_index()
-
- ## 计算PSI
- psi = ((actual_prop-expect_prop)*np.log(actual_prop/expect_prop)).sum
-
- return psi, expect_prop, actual_prop
-
- ## 运行函数得到psi、预期占比和实际占比
- psi, expect_prop, actual_prop = psi(y_train_probs,y_test_probs)
- print('psi=',psi)
-
- ## 创建(12, 8)的绘图框
- fig = plt.figure(figsize=(12, 8))
-
- ## 设置中文字体
- plt.rcParams['font.sans-serif'] = ['SimHei']
- plt.rcParams['axes.unicode_minus'] = False
-
- ## 绘制条形图
- plt.bar(expect_prop.index + 0.2, expect_prop, width=0.4, label='预期占比')
- plt.bar(actual_prop.index - 0.2, actual_prop, width=0.4, label='实际占比')
- plt.legend()
-
- ## 设置轴标签
- plt.xlabel('概率分组', fontsize=12)
- plt.ylabel('样本占比', fontsize=12)
-
- ## 设置轴刻度
- plt.xticks([0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
- ['0-0.1', '0.1-0.2', '0.2-0.3', '0.3-0.4', '0.4-0.5', '0.5-0.6', '0.6-0.7', '0.7-0.8', '0.8-0.9', '0.9-1'])
-
- ## 设置图标题
- plt.title('预期占比与实际占比对比条形图', fontsize=15)
-
- ## 在图上添加文字
- for index, item1, item2 in zip(range(10), expect_prop.values, actual_prop.values):
- plt.text(index+0.2, item1 + 0.01, '%.3f' % item1, ha="center", va= "bottom",fontsize=10)
- plt.text(index-0.2, item2 + 0.01, '%.3f' % item2, ha="center", va= "bottom",fontsize=10)
-
-
七、计算逻辑回归指标重要性
- from sklearn.linear_model import LogisticRegression
- lr_clf = LogisticRegression(penalty='l1',C = 0.6, random_state=55)
- lr_clf.fit(x_train, y_train)
-
- # 查看逻辑回归各项指标系数
- coefficient = lr_clf.coef_
-
- # 取出指标系数,并对其求绝对值
- importance = abs(coefficient)
-
- # 通过图形的方式直观展现前八名的重要指标
- index=data.drop('Default', axis=1).columns
- feature_importance = pd.DataFrame(importance.T, index=index).sort_values(by=0, ascending=True)
-
- # # 查看指标重要度
- print(feature_importance)
-
- # 水平条形图绘制
- feature_importance.tail(8).plot(kind='barh', title='Feature Importances', figsize=(8, 6), legend=False)
- plt.show()
八、计算随机森林的指标重要性
- from sklearn.ensemble import RandomForestClassifier
- rf = RandomForestClassifier(n_estimators = 150, criterion = 'entropy', max_depth = 5, min_samples_split = 2, random_state=12)
- rf.fit(x_train, y_train)
-
- # 查看随机森林各项指标系数
- importance = rf.feature_importances_
-
- # 通过图形的方式直观展现前八名的重要指标
- index=data.drop('Default', axis=1).columns
- feature_importance = pd.DataFrame(importance.T, index=index).sort_values(by=0, ascending=True)
-
- # # 查看指标重要度
- print(feature_importance)
-
- # 水平条形图绘制
- feature_importance.tail(8).plot(kind='barh', title='Feature Importances', figsize=(8, 6), legend=False)
- plt.show()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。