您当前的位置: 首页 > 

静静喜欢大白

暂无认证

  • 1浏览

    0关注

    521博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【day1-金融比赛任务1之代码示例】

静静喜欢大白 发布时间:2020-09-16 18:31:38 ,浏览量:1

目录

1.具体案例执行(参考某位大佬)

前期数据处理

评价指标计算

【混淆矩阵】

【准确率】

【精确率】

【召回率】

【F1 score】

【P-R曲线】

【ROC】

【AUC】

2.在训练集上获取坏账率

3.官方代码执行

1.pycharm平台项目创建

2.数据存储和读取

2.1查看样例数据

2.2查看训练+测试数据

2.3 分类指标评价计算示例

1.具体案例执行(参考某位大佬)

该栗子是利用iris数据集进行小测试的

前期数据处理

导入包sklearn+数据加载+数据读取(输入X+标签y)+逻辑回归函数拟合+模型预测值y_hat

 

from sklearn.linear_model import LogisticRegression

from sklearn.datasets import load_iris

# 加载iris数据集

iris = load_iris()

#输入+标签

X,y = iris.data,iris.target

#用逻辑回归函数进行拟合

lr_clf = LogisticRegression(random_state=1)

lr_clf.fit(X,y)

#模型预测值

y_hat = lr_clf.predict(X)
评价指标计算 【混淆矩阵】
#混淆矩阵

from sklearn.metrics import confusion_matrix

print(confusion_matrix(y,y_hat))

【打印输出】

【真实输出】

【准确率】
#准确率

from sklearn.metrics import accuracy_score

score = accuracy_score(y,y_hat)

print(accuracy_score(y,y_hat,normalize=False),int(150 * score))

【精确率】
#精确率(average参数选了三种模式)

from sklearn.metrics import precision_score # 必须要为二分类

print(precision_score(y, y_hat,average=None))



print(precision_score(y,y_hat, average='macro'))

import numpy as np

print(np.mean(precision_score(y, y_hat,average=None)))# 等同于 macro模 式



print(precision_score(y,y_hat, average='micro'))

【召回率】
#召回率

from sklearn.metrics import recall_score

print(recall_score(y, y_hat, average=None))

【F1 score】
#F1 score

from sklearn.metrics import f1_score

print(f1_score(y, y_hat, average=None))

【P-R曲线】

 #此处的栗子只是展示,不是数据集的

from sklearn.metrics import precision_recall_curve

y_true = np.array([0, 0, 1, 1])

y_scores = np.array([0.1, 0.4, 0.35, 0.8])

precision, recall, thresholds = precision_recall_curve(y_true, y_scores)

print(precision,recall,thresholds)#不分开的话就是在一行

【额外补充】

y_score = lr_clf.decision_function(X) # 打印出样本的置信度

print(y_score)

from sklearn.metrics import average_precision_score

y_true = np.array([0, 0, 1, 1])

y_scores = np.array([0.1, 0.4, 0.35, 0.8])

print(average_precision_score(y_true, y_scores))

  【额外补充PR示例】

#额外示例-使用线性SVC

from sklearn.datasets import make_classification

from sklearn.svm import LinearSVC

from sklearn.model_selection import train_test_split

from sklearn.metrics import plot_precision_recall_curve#导入这个就可以为图自动添加一些信息(横坐标+纵坐标+图例-值(这个值是自动取了约数,小数点后两位)名称),另外打印图时语句更简洁

import matplotlib.pyplot as plt

from sklearn.metrics import average_precision_score



X,y = make_classification(n_samples=200, n_features=20,n_informative=2, n_classes=2,shuffle=True)

print(X.shape, y.shape)



X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3, shuffle=False)



svc = LinearSVC(random_state=2)

svc.fit(X_train,y_train)



y_score = svc.decision_function(X_test)   # 搞懂这个是啥意思

average_precision = average_precision_score(y_test, y_score)



print('Average precision-recall score: {0:0.2f}'.format(

      average_precision))



disp = plot_precision_recall_curve(svc,X_test, y_test)



disp.ax_.set_title('2-class Precision-Recall curve:AP={0:0.2f}'.format(average_precision))#添加标题,并将上面计算的平均精度展示在这里

plt.show()#不可省

其中图的各种信息自动添加的

【ROC】
#ROC,基于前面的线性SVC示例

from sklearn.metrics import roc_auc_score,roc_curve

print(roc_auc_score(y_test,y_score,average=None))

fpr,tpr,thresholds = roc_curve(y_test, y_score)



from sklearn.metrics import plot_roc_curve

plot_roc_curve(svc,X_test,y_test,drop_intermediate=False)

plt.show()

【AUC】
#AUC,基于前面ROC做出的

from sklearn.metrics import auc

print(auc(fpr,tpr))

2.在训练集上获取坏账率

应用一个业务概念,所谓贷款等级指贷款申请前风险模型评分。那么只要模型还靠谱,其结果就有一定区分度。 于是我们使用变量:subGrade,贷款等级之子级

参考:https://github.com/IvanaXu/TianChiProj/tree/master/TestRisk?spm=5176.12282029.0.0.44f75dc2JWFLCL

import pandas as pd

import numpy as np



#dt =  "/Users/ivan/Desktop/ALL/Data/TestRisk"

#dtrai = pd.read_csv(f"{dt}/train.csv")

dtrai = pd.read_csv('finance/train.csv')

#dtest = pd.read_csv(f"{dt}/testA.csv")

dtest = pd.read_csv('finance/testA.csv')



dtrai["req"] = dtrai.subGrade

dtest["req"] = dtest.subGrade



print(pd.value_counts(dtrai.isDefault))



_ = pd.crosstab(dtrai.req, dtrai.isDefault)

_["yp"] = _[0]/(_[0]+_[1])

_.reset_index(inplace=True)

_.sort_values(by="yp", inplace=True)

print(_[["req", "yp"]])



_r = pd.merge(dtest[["id", "req"]], _[["req", "yp"]], on="req", how="left")

_r["isDefault"] = [round(_,6) for _ in _r["yp"]]

_r.sort_values(by="id", inplace=True)

#_r[["id", "isDefault"]].to_csv(f"{dt}/outs/submit.csv", index=None)

#[["id", "isDefault"]].to_save('finance/submit.csv', index=None)#此句不对,不晓得怎么保存

print(_r[["id", "isDefault"]].head())
3.官方代码执行 1.pycharm平台项目创建

创建项目FinancialRiskControlGame-虚拟环境-安装包pandas,发现安装后出现了一些额外的第三方包,如numpy,因为下面评价指标会用到这个包,就省去了安装

 

2.数据存储和读取

创建数据路径并存放,然后对三个数据集进行读取查看等

2.1查看样例数据

【代码】

import pandas as pd

#----查看样例

path = 'finance/sample_submit.csv'

sample_data = pd.read_csv(path)

print(sample_data.shape)

#sample_data.head()

print(sample_data.head())

       【head函数】

              Pycharm运行时默认读取到的是前五行,关于属性,是默认读取的是前五列+后五列

     【遇到问题:pycharm中pandas读取csv运行head方法无显示结果?】

       解决:pycharm或是一般的ide都是把输出到系统的标准流中,如果要在ide中显示得用print方法打印在ide中,所以应该是print(data.head())

        参考:https://www.zhihu.com/question/318903567

【修改后输出结果】

2.2查看训练+测试数据

【代码】

train = pd.read_csv('finance/train.csv')

testA = pd.read_csv('finance/testA.csv')

print('Train data shape:',train.shape)

print('TestA data shape:',testA.shape)

print(train.head())#默认输出的也是前五行

print(testA.head())

【运行结果】

【训练集补充查看】

#---选择训练集类别属性观察

class_data = train.select_dtypes(include=['object'])

print(class_data.head(5))#只观察前五行

#---选择训练集数值属性观察

numeric_data = train.select_dtypes(include=["number"])

print(numeric_data.head(5))

2.3 分类指标评价计算示例

评价指标计算的是模型预测的值y_pred和真实值y_true之间的一个关系值。评价指标用的都是sklearn包里的各种函数,因此需要使用此第三方包。在导入包时,发现有下划线-红线出现,因此需要安装sklearn包。

【安装包sklearn】

        安装的全名是:scikit-learn/sklearn(之前直接安装后者行不通,但是现在可以了)

              使用:可以直接from sklearn.metrics import xxx,然后直接输出xxx(y_true, y_pred),或者from sklearn import metrics,然后print时使用metrics.xxx(y_true, y_pred)

 

 

【代码1-混淆矩阵指标计算】

from sklearn.metrics import confusion_matrix

#---计算混淆矩阵

y_pred = [0, 1, 0, 1]

y_true = [0, 1, 1, 0]

print('混淆矩阵:\n',confusion_matrix(y_true, y_pred))

【运行结果】

 

【代码2-准确率指标计算】

#---计算准确率

from sklearn.metrics import accuracy_score

y_pred = [0, 1, 0, 1]

y_true = [0, 1, 1, 0]

print('ACC:',accuracy_score(y_true, y_pred))

【运行结果】

【代码3-精确率、召回率、F1指标计算】

#---计算精确率、召回率、F1

from sklearn import metrics

y_pred = [0, 1, 0, 1]

y_true = [0, 1, 1, 0]

print('Precision',metrics.precision_score(y_true, y_pred))

print('Recall',metrics.recall_score(y_true, y_pred))

print('F1-score:',metrics.f1_score(y_true, y_pred))

【运行结果】

【代码4-计算P-R曲线指标+绘图】

       【安装并导入包-matplotlib】

              【遇到问题1-import matplotlib.pyplot as plt报错AttributeError: module 'sip' has no attribute 'setapi'】

                     解决:降级,此包版本有问题

                     参考:https://www.cnblogs.com/vilogy/p/13507706.html

【包降级成功】

  【遇到问题2-plt没有画图】

       解决:最后添加一行:plt.show()

       Plot使用参考:https://blog.csdn.net/zhbaodong/article/details/81749160

#---计算P-R指标并绘图

import matplotlib.pyplot as plt

from sklearn.metrics import precision_recall_curve

y_pred = [0, 1, 1, 0, 1, 1, 0, 1, 1, 1]

y_true = [0, 1, 1, 0, 1, 0, 1, 1, 0, 1]

precision, recall, thresholds = precision_recall_curve(y_true, y_pred)

#plt.title('PR Curve')#给图加标题,默认在二维坐标图正上方

#plt.ylabel('Recall')#设置纵坐标名称

#plt.xlabel('Precisionl')#横坐标名称

plt.plot(precision, recall)#绘图-画的是recall和precision之间的关系图,其中默认横坐标是precision、纵坐标是recall;默认图颜色是蓝色;默认绘图直线

plt.show()#加上图才会显示

【运行结果】

【代码5-计算ROC指标+绘图】

#--- ROC曲线

from sklearn.metrics import roc_curve

y_pred = [0, 1, 1, 0, 1, 1, 0, 1, 1, 1]

y_true = [0, 1, 1, 0, 1, 0, 1, 1, 0, 1]

FPR,TPR,thresholds=roc_curve(y_true, y_pred)

plt.title('ROC')#加标题

plt.plot(FPR, TPR,'b')#画FPR和TPR之间的关系图,并指定蓝色

plt.plot([0,1],[0,1],'r--')#画直线(指定了横纵坐标轴范围),并指定红色

plt.ylabel('TPR')#设置纵坐标名称

plt.xlabel('FPR')#横坐标
plt.show()#加上图才会显示

【代码6-AUC指标计算】

       【安装包-numpy】

              在安装pandas时已经默认安装了,因此此步可省

#---计算AUC指标

import numpy as np

from sklearn.metrics import roc_auc_score

y_true = np.array([0, 0, 1, 1])

y_scores = np.array([0.1, 0.4, 0.35, 0.8])

print('AUC socre:',roc_auc_score(y_true, y_scores))

【代码7-KS指标计算】

#--- 计算KS指标值 在实际操作时往往使用ROC曲线配合求出KS值

from sklearn.metrics import roc_curve

y_pred = [0, 1, 1, 0, 1, 1, 0, 1, 1, 1]

y_true = [0, 1, 1, 0, 1, 0, 1, 1, 1, 1]

FPR,TPR,thresholds=roc_curve(y_true, y_pred)

KS=abs(FPR-TPR).max()# 计算 KS 曲线

print('KS值:',KS)

关注
打赏
1510642601
查看更多评论
立即登录/注册

微信扫码登录

0.5308s