当前位置:   article > 正文

四、大数据实践——模型预测及分析

四、大数据实践——模型预测及分析

一、风险评估模型的效果评价方法

 

二、利用AUC评估逻辑回归模型的准确性

  1. #用metrics.roc_curve()求出 fpr, tpr, threshold
  2. fpr, tpr, threshold = metrics.roc_curve(y_test,y_predict_best)
  3. #用metrics.auc求出roc_auc的值
  4. roc_auc = metrics.auc(fpr,tpr)
  5. #将图片大小设为8:6
  6. fig,ax = plt.subplots(figsize=(8,6))
  7. #将plt.plot里的内容填写完整
  8. plt.plot(fpr, tpr, label = 'AUC = %0.2f' % roc_auc)
  9. #将图例显示在右下方
  10. plt.legend(loc = 'lower right')
  11. #画出一条红色对角虚线
  12. plt.plot([0, 1], [0, 1],'r--')
  13. #设置横纵坐标轴范围
  14. plt.xlim([-0.01, 1.01])
  15. plt.ylim([-0.01, 1.01])
  16. #设置横纵名称以及图形名称
  17. plt.ylabel('True Positive Rate')
  18. plt.xlabel('False Positive Rate')
  19. plt.title('Receiver Operating Characteristic Curve')
  20. plt.show()

三、利用AUC评估随机森林模型的准确性

  1. #用metrics.roc_curve()求出 fpr, tpr, threshold
  2. fpr, tpr, threshold = metrics.roc_curve(y_test,y_predict_best)
  3. #用metrics.auc求出roc_auc的值
  4. roc_auc = metrics.auc(fpr,tpr)
  5. #将图片大小设为8:6
  6. fig,ax = plt.subplots(figsize=(8,6))
  7. #将plt.plot里的内容填写完整
  8. plt.plot(fpr, tpr, label = 'AUC = %0.2f' % roc_auc)
  9. #将图例显示在右下方
  10. plt.legend(loc = 'lower right')
  11. #画出一条红色对角虚线
  12. plt.plot([0, 1], [0, 1],'r--')
  13. #设置横纵坐标轴范围
  14. plt.xlim([-0.01, 1.01])
  15. plt.ylim([-0.01, 1.01])
  16. #设置横纵名称以及图形名称
  17. plt.ylabel('True Positive Rate')
  18. plt.xlabel('False Positive Rate')
  19. plt.title('Receiver Operating Characteristic Curve')
  20. plt.show()

四、利用KS值评估逻辑回归模型的准确性

  1. #用metric.roc_curve()求出 fpr, tpr, threshold
  2. fpr, tpr, threshold = metrics.roc_curve(y_test, y_predict_best)
  3. #print(threshold)
  4. #求出KS值和相应的阈值
  5. ks = max(abs(tpr-fpr))
  6. thre = threshold[abs(tpr-fpr).argmax()]
  7. ks = round(ks*100, 2)
  8. thre = round(thre, 2)
  9. print('KS值:', ks, '%', '阈值:', thre)
  10. #将图片大小设为8:6
  11. fig = plt.figure(figsize=(8,6))
  12. #将plt.plot里的内容填写完整
  13. plt.plot(threshold[::-1], tpr[::-1], lw=1, alpha=1,label='真正率TPR')
  14. plt.plot(threshold[::-1], fpr[::-1], lw=1, alpha=1,label='假正率FPR')
  15. #画出KS值的直线
  16. ks_tpr = tpr[abs(tpr-fpr).argmax()]
  17. ks_fpr = fpr[abs(tpr-fpr).argmax()]
  18. x1 = [thre, thre]
  19. x2 = [ks_fpr, ks_tpr]
  20. plt.plot(x1, x2)
  21. #设置横纵名称以及图例
  22. plt.xlabel('阈值')
  23. plt.ylabel('真正率TPR/假正率FPR')
  24. plt.title('KS曲线', fontsize=15)
  25. plt.legend(loc="upper right")
  26. plt.grid(axis='x')
  27. # 在图上标注ks值
  28. plt.annotate('KS值', xy=(0.18, 0.45), xytext=(0.25, 0.43),
  29. fontsize=20,arrowprops=dict(facecolor='green', shrink=0.01))

 五、利用KS值评估随机森林模型准确性(code同上)

六、利用PSI评估逻辑回归模型稳定性

  1. ## 训练集预测概率
  2. y_train_probs = lr.predict_proba(x_train)[:,1]
  3. ## 测试集预测概率
  4. y_test_probs = lr.predict_proba(x_test)[:,1]
  5. def psi(y_train_probs, y_test_probs):
  6. ## 设定每组的分点
  7. bins = np.arange(0, 1.1, 0.1)
  8. ## 将训练集预测概率分组
  9. y_train_probs_cut = pd.cut(y_train_probs, bins=bins, labels=False)
  10. ## 计算预期占比
  11. expect_prop = (pd.Series(y_train_probs_cut).value_counts()/len(y_train_probs)).sort_index()
  12. ## 将测试集预测概率分组
  13. y_test_probs_cut = pd.cut(y_test_probs, bins=bins, labels=False)
  14. ## 计算实际占比
  15. actual_prop = (pd.Series(y_test_probs_cut).value_counts()/len(y_test_probs)).sort_index()
  16. ## 计算PSI
  17. psi = ((actual_prop-expect_prop)*np.log(actual_prop/expect_prop)).sum
  18. return psi, expect_prop, actual_prop
  19. ## 运行函数得到psi、预期占比和实际占比
  20. psi, expect_prop, actual_prop = psi(y_train_probs,y_test_probs)
  21. print('psi=',psi)
  22. ## 创建(12, 8)的绘图框
  23. fig = plt.figure(figsize=(12, 8))
  24. ## 设置中文字体
  25. plt.rcParams['font.sans-serif'] = ['SimHei']
  26. plt.rcParams['axes.unicode_minus'] = False
  27. ## 绘制条形图
  28. plt.bar(expect_prop.index + 0.2, expect_prop, width=0.4, label='预期占比')
  29. plt.bar(actual_prop.index - 0.2, actual_prop, width=0.4, label='实际占比')
  30. plt.legend()
  31. ## 设置轴标签
  32. plt.xlabel('概率分组', fontsize=12)
  33. plt.ylabel('样本占比', fontsize=12)
  34. ## 设置轴刻度
  35. plt.xticks([0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
  36. ['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'])
  37. ## 设置图标题
  38. plt.title('预期占比与实际占比对比条形图', fontsize=15)
  39. ## 在图上添加文字
  40. for index, item1, item2 in zip(range(10), expect_prop.values, actual_prop.values):
  41. plt.text(index+0.2, item1 + 0.01, '%.3f' % item1, ha="center", va= "bottom",fontsize=10)
  42. plt.text(index-0.2, item2 + 0.01, '%.3f' % item2, ha="center", va= "bottom",fontsize=10)

七、计算逻辑回归指标重要性

 

 

  1. from sklearn.linear_model import LogisticRegression
  2. lr_clf = LogisticRegression(penalty='l1',C = 0.6, random_state=55)
  3. lr_clf.fit(x_train, y_train)
  4. # 查看逻辑回归各项指标系数
  5. coefficient = lr_clf.coef_
  6. # 取出指标系数,并对其求绝对值
  7. importance = abs(coefficient)
  8. # 通过图形的方式直观展现前八名的重要指标
  9. index=data.drop('Default', axis=1).columns
  10. feature_importance = pd.DataFrame(importance.T, index=index).sort_values(by=0, ascending=True)
  11. # # 查看指标重要度
  12. print(feature_importance)
  13. # 水平条形图绘制
  14. feature_importance.tail(8).plot(kind='barh', title='Feature Importances', figsize=(8, 6), legend=False)
  15. plt.show()

 八、计算随机森林的指标重要性

  1. from sklearn.ensemble import RandomForestClassifier
  2. rf = RandomForestClassifier(n_estimators = 150, criterion = 'entropy', max_depth = 5, min_samples_split = 2, random_state=12)
  3. rf.fit(x_train, y_train)
  4. # 查看随机森林各项指标系数
  5. importance = rf.feature_importances_
  6. # 通过图形的方式直观展现前八名的重要指标
  7. index=data.drop('Default', axis=1).columns
  8. feature_importance = pd.DataFrame(importance.T, index=index).sort_values(by=0, ascending=True)
  9. # # 查看指标重要度
  10. print(feature_importance)
  11. # 水平条形图绘制
  12. feature_importance.tail(8).plot(kind='barh', title='Feature Importances', figsize=(8, 6), legend=False)
  13. plt.show()

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/621536
推荐阅读
相关标签
  

闽ICP备14008679号