银行客户信用风险评估项目

银行客户信用风险评估项目

要求:

补全并调试每部分代码,在代码后面附输出结果截图。

说明:

4.5-4.10特征分布,做法相同(第一次)

4.11-4.14连续型数据特征分布,做法相同(第一次)

4.15-4.36 离散型数据和连续型数据的缺失值处理(第二次)

4.37-4.38 数字编码和One-Hot编码(第二次)

5.1-5.7 新增评估指标计算(第三次)

6.1-6.12 风控模型:逻辑回归和随机森林(第三次:逻辑回归;第四次:随机森林)

7.1-7.10 风险评估模型效果评估方法(第四次)

数据集描述:

 

 

3.2 从data.csv文件中读取客户数据.

 

3.3 对数据进行格式转换

import pandas as pd

data= pd.read_csv('data.csv',encoding='gbk')

data = pd.DataFrame(data)

data.head()

输出结果截图:

 

4.1 数据探索分析

 

4.2 查看数据前五行

import pandas as pd

# 使用head()函数查看数据前五行

data_5 = _data.head(5)__

print(data_5)

输出结果截图:

 

4.3 查看数据集的基本情况

 

data.info()

 

4.4 查看数据的基本统计信息

import pandas as pd

# 使用describe()函数查看数据整体的基本统计信息

data_des = _ data.describe()___

print(data_des)

输出结果截图:

 

4.5 是否违约(Default)特征分析

import pandas as pd

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(8,6))

# 绘制柱状图,查看违约关系的取值分布情况

data['Default'].value_counts(dropna=False).plot(kind='bar',rot=40)

# 在柱形上方显示计数

counts = data['Default'].value_counts(dropna=False).values

for index, item in zip([0,1,2], counts):

    plt.text(index, item, item, ha="center", va= "bottom", fontsize=12)

# 设置柱形名称

plt.xticks([0,1,2],['未违约','违约','NaN'])

# 设置x、y轴标签

plt.xlabel('是否违约')

plt.ylabel('客户数量')

# 设置标题以及字体大小

plt.title('违约与未违约数量分布图',size=13)

# 设置中文显示

plt.rcParams['font.sans-serif']=['SimHei']

plt.rcParams['font.family']=['sans-serif']

plt.show()

 

4.6 城市级别(CityId)特征分布

4.6 城市级别(CityId)特征分布
 

import seaborn as sns

import matplotlib.pyplot as plt

import pandas as pd

data= pd.read_csv('data.csv',encoding='gbk')

data = pd.DataFrame(data)

fig,[ax1,ax2] = plt.subplots(1,2,figsize=(16,6))

# 对CityId列的类别设定顺序

data['CityId'] = data['CityId'].astype('category')

data['CityId'] = data['CityId'].cat.set_categories(['一线城市','二线城市','其它'],ordered=True)

# 绘制柱状图,查看不同城市级别在不同是否违约的取值分布情况

sns.countplot(x='CityId',hue='Default',data=data,ax=ax1)

# 将具体的计数值显示在柱形上方

counts=data['Default'].groupby(data['CityId']).value_counts().values

count1 = counts[[0, 2, 4]]

count2 = counts[[1, 3, 5]]

for index, item1, item2 in zip([0,1,2], count1, count2):

    ax1.text(index-0.2, item1 + 0.05, '%.0f' % item1, ha="center", va= "bottom",fontsize=12)

    ax1.text(index+0.2, item2 + 0.05, '%.0f' % item2, ha="center", va= "bottom",fontsize=12)

   

# 绘制柱状图查看违约率分布

cityid_rate = data.groupby('CityId')['Default'].sum() / data.groupby('CityId')['Default'].count()

sns.barplot(x=[0,1,2],y=cityid_rate.values,ax=ax2)

# 将具体的计数值显示在柱形上方

for index, item in zip([0,1,2], cityid_rate):

     ax2.text(index, item, '%.3f' % item, ha="center", va= "bottom",fontsize=12)

       

#设置柱形名称

ax1.set_xticklabels(['一线城市','二线城市','其它'])

ax2.set_xticklabels(['一线城市','二线城市','其它'])

# 设置图例名称

ax1.legend(labels=['未违约','违约'])

# 设置标题以及字体大小

ax1.set_title('不同城市级别下不同违约情况数量分布柱状图',size=13)

ax1.set_title('不同城市级别违约率分布柱状图',size=13)

# 设置x,y轴标签

ax1.set_xlabel('CityId')

ax1.set_ylabel('客户人数')

ax2.set_xlabel('CityId')

ax2.set_ylabel('违约率')

#显示汉语标注

plt.rcParams['font.sans-serif']=['SimHei']

plt.rcParams['font.family']=['sans-serif']

plt.show()

 

4.7 文化程度(education)特征分布

import seaborn as sns

import matplotlib.pyplot as plt

fig,[ax1,ax2] = plt.subplots(1,2,figsize=(16,6))

# 对education列的类别设定顺序

data['education'] = data['education'].astype('category')

data['education'] = data['education'].cat.set_categories(['小学', '初中', '高中', '本科以上'],ordered=True)

# 绘制柱状图,查看不同文化程度(education)在不同是否违约(Default)的取值分布情况

sns.countplot(x='education',hue='Default',data=data,ax=ax1)

# 将具体的计数值显示在柱形上方

counts=data['Default'].groupby(data['education']).value_counts().values

count1 = counts[[0, 2, 4,6]]

count2 = counts[[1, 3, 5,7]]

for index, item1, item2 in zip([0,1,2,3], count1, count2):

    ax1.text(index-0.2, item1 + 0.05, '%.0f' % item1, ha="center", va= "bottom",fontsize=12)

    ax1.text(index+0.2, item2 + 0.05, '%.0f' % item2, ha="center", va= "bottom",fontsize=12)

# 绘制柱状图查看违约率分布

education_rate = data.groupby('education')['Default'].sum() / data.groupby('education')['Default'].count()

sns.barplot(x=[0,1,2,3],y=education_rate.values,ax=ax2)

# 将具体的计数值显示在柱形上方

for index, item in zip([0,1,2,3], education_rate):

     ax2.text(index, item, '%.2f' % item, ha="center", va= "bottom",fontsize=12)

       

#设置柱形名称

ax1.set_xticklabels(['本科以上','高中','初中','小学'])

ax2.set_xticklabels(['本科以上','高中','初中','小学'])

# 设置图例名称

ax1.legend(labels=['未违约','违约'])

# 设置标题以及字体大小

ax1.set_title('不同文化程度下不同违约情况数量分布柱状图',size=13)

ax1.set_title('不同城市级别违约率分布柱状图',size=13)

# 设置x,y轴标签

ax1.set_xlabel('education')

ax1.set_ylabel('客户人数')

ax2.set_xlabel('education')

ax2.set_ylabel('违约率')

#显示汉语标注

plt.rcParams['font.sans-serif']=['SimHei']

plt.rcParams['font.family']=['sans-serif']

plt.show()

 

4.8 三要素(threeVerify)特征分布

import seaborn as sns

import matplotlib.pyplot as plt

fig,[ax1,ax2] = plt.subplots(1,2,figsize=(16,6))

# 对threeVerify列的类别设定顺序

data['threeVerify'] = data['threeVerify'].astype('category')

data['threeVerify'] = data['threeVerify'].cat.set_categories(['一致','不一致'],ordered=True)

# 绘制柱状图,查看不同三要素验证情况(threeVerify)在不同是否违约(Default)的取值分布情况

sns.countplot(x='threeVerify',hue='Default',data=data,ax=ax1)

# 将具体的计数值显示在柱形上方

counts=data['Default'].groupby(data['threeVerify']).value_counts().values

count1 = counts[[0, 2]]

count2 = counts[[1, 3]]

for index, item1, item2 in zip([0,1,2,3], count1, count2):

    ax1.text(index-0.2, item1 + 0.05, '%.0f' % item1, ha="center", va= "bottom",fontsize=12)

    ax1.text(index+0.2, item2 + 0.05, '%.0f' % item2, ha="center", va= "bottom",fontsize=12)

# 绘制柱状图查看违约率分布

threeVerify_rate = data.groupby('threeVerify')['Default'].sum() / data.groupby('threeVerify')['Default'].count()

sns.barplot(x=[0,1],y=threeVerify_rate.values,ax=ax2)

# 将具体的计数值显示在柱形上方

for index, item in zip([0,1], threeVerify_rate):

     ax2.text(index, item, '%.2f' % item, ha="center", va= "bottom",fontsize=12)

       

       

#设置柱形名称

ax1.set_xticklabels(['一致','不一致'])

ax2.set_xticklabels(['一致','不一致'])

# 设置图例名称

ax1.legend(labels=['未违约','违约'])

# 设置标题以及字体大小

ax1.set_title('不同三要素下不同是否违约情况数量分布柱状图',size=13)

ax1.set_title('不同城市级别违约率分布柱状图',size=13)

# 设置x,y轴标签

ax1.set_xlabel('threeVerify')

ax1.set_ylabel('客户人数')

ax2.set_xlabel('threeVerify')

ax2.set_ylabel('违约率')

#显示汉语标注

plt.rcParams['font.sans-serif']=['SimHei']

plt.rcParams['font.family']=['sans-serif']

plt.show()

 

4.9 婚姻状况(maritalStatus)特征分布

import seaborn as sns

import matplotlib.pyplot as plt

fig,[ax1,ax2] = plt.subplots(1,2,figsize=(16,6))

# 对maritalStatus列的类别设定顺序

data['maritalStatus'] = data['maritalStatus'].astype('category')

data['maritalStatus'] = data['maritalStatus'].cat.set_categories(['未婚','已婚'],ordered=True)

# 绘制柱状图,查看不同婚姻状况在不同违约情况的取值分布

sns.countplot(x='maritalStatus',hue='Default',data=data,ax=ax1)

# 将具体的计数值显示在柱形上方

counts=data['Default'].groupby(data['maritalStatus']).value_counts().values

count1 = counts[[0, 2]]

count2 = counts[[1, 3]]

for index, item1, item2 in zip([0,1,2,3], count1, count2):

    ax1.text(index-0.2, item1 + 0.05, '%.0f' % item1, ha="center", va= "bottom",fontsize=12)

    ax1.text(index+0.2, item2 + 0.05, '%.0f' % item2, ha="center", va= "bottom",fontsize=12)

# 绘制柱状图查看违约率分布

maritalStatus_rate = data.groupby('maritalStatus')['Default'].sum() / data.groupby('maritalStatus')['Default'].count()

sns.barplot(x=[0,1],y=maritalStatus_rate.values,ax=ax2)

# 将具体的计数值显示在柱形上方

for index, item in zip([0,1], maritalStatus_rate):

     ax2.text(index, item, '%.2f' % item, ha="center", va= "bottom",fontsize=12)

       

#设置柱形名称

ax1.set_xticklabels(['未婚','已婚'])

ax2.set_xticklabels(['未婚','已婚'])

# 设置图例名称

ax1.legend(labels=['未违约','违约'])

# 设置标题以及字体大小

ax1.set_title('不同婚姻状况在不同违约情况数量分布柱状图',size=13)

ax1.set_title('不同婚姻状况违约率分布柱状图',size=13)

# 设置x,y轴标签

ax1.set_xlabel('maritalStatus')

ax1.set_ylabel('客户人数')

ax2.set_xlabel('maritalStatus')

ax2.set_ylabel('违约率')

#显示汉语标注

plt.rcParams['font.sans-serif']=['SimHei']

plt.rcParams['font.family']=['sans-serif']

plt.show()

 

4.10 在网时长(netLength)特征分布

import seaborn as sns

import matplotlib.pyplot as plt

fig,[ax1,ax2] = plt.subplots(1,2,figsize=(16,6))

# 对netLength列的类别设定顺序

data['netLength'] = data['netLength'].astype('category')

data['netLength'] = data['netLength'].cat.set_categories(['0-6个月','6-12个月','12-24个月','24个月以上','无效'],ordered=True)

# 绘制柱状图,查看不同在网时长在不同违约情况的取值分布

sns.countplot(x='netLength',hue='Default',data=data,ax=ax1)

# 将具体的计数值显示在柱形上方

counts=data['Default'].groupby(data['netLength']).value_counts().values

count1 = counts[[0,2,4,6,8]]

count2 = counts[[1,3,5,7,9]]

# 将具体的计数值显示在柱形上方

for index, item1, item2 in zip([0,1,2,3,4], count1, count2):

    ax1.text(index-0.2, item1 + 0.05, '%.0f' % item1, ha="center", va= "bottom",fontsize=12)

    ax1.text(index+0.2, item2 + 0.05, '%.0f' % item2, ha="center", va= "bottom",fontsize=12)

# 绘制柱状图查看违约率分布

netLength_rate = data.groupby('netLength')['Default'].sum() / data.groupby('netLength')['Default'].count()

sns.barplot(x=[0,1,2,3,4],y=netLength_rate.values,ax=ax2)

# 将具体的计数值显示在柱形上方

for index, item in zip([0,1,2,3,4], netLength_rate):

     ax2.text(index, item, '%.2f' % item, ha="center", va= "bottom",fontsize=12)

       

#设置柱形名称

ax1.set_xticklabels(['0-6个月','6-12个月','12-24个月','24个月以上','无效'])

ax2.set_xticklabels(['0-6个月','6-12个月','12-24个月','24个月以上','无效'])

# 设置图例名称

ax1.legend(labels=['未违约','违约'])

# 设置标题以及字体大小

ax1.set_title('不同在网时长在不同违约情况数量分布柱状图',size=13)

ax1.set_title('不同在网时长违约率分布柱状图',size=13)

# 设置x,y轴标签

ax1.set_xlabel('netLength')

ax1.set_ylabel('客户人数')

ax2.set_xlabel('netLength')

ax2.set_ylabel('违约率')

#显示汉语标注

plt.rcParams['font.sans-serif']=['SimHei']

plt.rcParams['font.family']=['sans-serif']

plt.show()

 

4.11 总消费金额(transTotalAmt)的分布

import seaborn as sns

import matplotlib.pyplot as plt

# 建立画布ax1和ax2,及设置图像大小,设置subplots()函数中参数为(1,2)表示两画图呈一行两列

fig, [ax1,ax2] = plt.subplots(1, 2, figsize=(16, 5))

# 在画布ax1中画出总消费金额的核密度图

sns.kdeplot(data['transTotalAmt'],shade=False,ax=ax1)

# 在画布ax2中画出总消费笔数和总消费金额的回归关系图

sns.regplot(x='transTotalAmt',y='transTotalAmt',data=data,ax=ax2)

 

4.12 年龄和开卡时长分布

import seaborn as sns

import matplotlib.pyplot as plt

# 建立画布ax1和ax2,及设置图像大小,设置subplots()函数中参数为(1,2)表示一行两列

fig,[ax1,ax2] = plt.subplots(1,2,figsize=(16,6))

# 在画布ax1中绘制年龄的直方图,颜色为红色

sns.distplot(data['age'],ax=ax1,color='red')

# 在画布ax2中绘制开卡时长的直方图,颜色为默认值

sns.distplot(data['card_age'],ax=ax2)

# 在画布ax1、ax2中设置标题

ax1.set_title('年龄的直方图',size=13)

ax2.set_title('开卡时长的直方图',size=13)

# 显示汉语标注

plt.rcParams['font.sans-serif']=['SimHei']

plt.rcParams['font.family']=['sans-serif']

 

4.13 总取现金额(cashTotalAmt)的分布

import seaborn as sns

import matplotlib.pyplot as plt

# 建立画布ax1和ax2,及设置图像大小,设置subplots()函数中参数为(1,2)表示两画图呈一行两列

fig, [ax1,ax2] = plt.subplots(1, 2, figsize=(16, 5))

# 在画布ax1中画出总取现金额的核密度图

sns.kdeplot(data['cashTotalAmt'],shade=False,ax=ax1)

# 在画布ax2中画出总取现笔数和总取现金额的回归关系图

sns.regplot(x='cashTotalCnt',y='cashTotalAmt',data=data,ax=ax2)

 

4.14 网上消费金额(onlineTransAmt)的分布

import seaborn as sns

import matplotlib.pyplot as plt

# 建立画布ax1和ax2,及设置图像大小,设置subplots()函数中参数为(1,2)表示两画图呈一行两列

fig, [ax1,ax2] = plt.subplots(1, 2, figsize=(16, 5))

# 在画布ax1中画出网上消费金额的核密度估计曲线

sns.kdeplot(data['onlineTransAmt'],shade=False,ax=ax1)

# 在画布ax2中画出网上消费笔数和网上消费金额的回归关系图

sns.regplot(x='onlineTransCnt',y='onlineTransAmt',data=data,ax=ax2)

 

4.15 查看存在缺失值的特征

# 计算特征缺失值个数

na_counts =data.isnull().sum()

# 将na_counts取大于0的部分进行降序排序

missing_value = na_counts[na_counts > 0].sort_values(axis=0,ascending=False)

# 查看存在缺失值的特征

print(missing_value)

 

4.16 离散型特征的缺失值处理

#实训平台的数据经过处理 在这个地方可以直接对数据进行缺失值的处理,但是在jupyter导入数据之后对数据有一个转换过程,所以直接对数据进行缺失值的处理是会报错,通过Series.cat.add_categories 可以对数据添加一个新的类,进而达到对数据缺失值的处理这个目的

import pandas as pd

# 缺失值处理

data.dropna(subset=['Default'],inplace=True)

#filling_columns=['sex','maritalStatus','threeVerify','idVerify','education']

#for column in filling_columns:

    #data[column] = data[column].cat.add_categories('未知')

    #data[column].fillna('未知',inplace=True)

#data['sex'] = data['sex'].cat.add_categories('未知')

data['sex'].fillna('未知', inplace =True)

#data['maritalStatus'] = data['maritalStatus'].cat.add_categories('未知')

data['maritalStatus'].fillna('未知', inplace =True)

#data['threeVerify'] = data['threeVerify'].cat.add_categories('未知')

data['threeVerify'].fillna('未知', inplace =True)

#data['idVerify'] = data['idVerify'].cat.add_categories('未知')

data['idVerify'].fillna('未知', inplace =True)

#data['education'] = data['education'].cat.add_categories('未知')

data['education'].fillna('未知', inplace =True)

# 查看存在缺失值的特征

na_counts = data.isnull().sum()

missing_value = na_counts[na_counts > 0].sort_values(ascending = False)

print(missing_value)

 

4.17 离散型特征的异常值处理

import pandas as pd

# 异常值处理,将isCrime值为“2”的地方改为“0”。

data['isCrime']=data['isCrime'].replace(2,0)

# 查看处理后的数据情况

print(data['isCrime'].value_counts())

 

4.18 查看连续性特征的取值

# 所有连续型特征列名已保存在continuous_columns中

continuous_columns = ['age','cashTotalAmt','cashTotalCnt','monthCardLargeAmt','onlineTransAmt','onlineTransCnt','publicPayAmt','publicPayCnt','transTotalAmt','transTotalCnt','transCnt_non_null_months','transAmt_mean','transAmt_non_null_months','cashCnt_mean','cashCnt_non_null_months','cashAmt_mean','cashAmt_non_null_months','card_age']

# 查看数据各连续型特征的最小值

data_con_min = data[continuous_columns].min()

print(data_con_min)

 

4.19 网上消费金额(onlineTransAmt)异常值检测

# 从原始数据中筛选出网上消费金额小于0时,网上消费金额和网上消费笔数这两列

online_trans =data[data['onlineTransAmt']<0][['onlineTransAmt','onlineTransCnt']]

print(online_trans).

 

4.20 网上消费金额(onlineTransAmt)异常值处理

# 将网上消费笔数为0时的网上消费金额皆修改为0

data.loc[data['onlineTransCnt']==0,'onlineTransAmt']=0

# 查看修正后网上消费笔数为0时,网上消费金额与网上消费笔数

online_after = data[data["onlineTransCnt"]  == 0 ][["onlineTransAmt","onlineTransCnt"]]

print(online_after)

 

4.21 网上消费金额(onlineTransAmt)盒图绘制

import seaborn as sns

import matplotlib.pyplot as plt

fig,ax = plt.subplots(figsize=(8,6))

# 绘制盒图查看网上消费金额数据分布

sns.boxplot(x=data['onlineTransAmt'],orient='v')

plt.title('onlineTransAmt distribution')

 

4.22 网上消费金额(onlineTransAmt)异常值处理

# 筛选出网上消费金额在2千万以下的数据样本,更新data

data = data[data['onlineTransAmt']<2.0e+07]

print(data.head())

 

 

4.23 公共事业缴费金额(publicPayAmt)异常值检测

# 从原始数据中筛选出公共事业缴费金额小于0时,公共事业缴费笔数和公共事业缴费金额这两列

public_pay =data[data['publicPayAmt']<0][['publicPayCnt','publicPayAmt']]

print(public_pay)

 

4.24 公共事业缴费金额(publicPayAmt)异常值处理

# 将公共事业缴费笔数为0时的公共事业缴费金额皆修改为0(直接在原始数据上进行修改)

data.loc[data['publicPayCnt']==0,'publicPayAmt']=0

# 查看修正后的,公共事业缴费笔数为0时的公共事业缴费金额与公共事业缴费笔数

public_after = data[data["publicPayCnt"]  ==  0][["publicPayAmt","publicPayCnt"]]

print(public_after)

 

4.25 公共事业缴费金额(publicPayAmt)盒图绘制

import seaborn as sns

import matplotlib.pyplot as plt

fig,ax = plt.subplots(figsize=(8,6))

# 绘制盒图查看公共事业缴费金额数据分布。

sns.boxplot(x=data['publicPayAmt'],orient='v')

plt.title('publicPayAmt distribution')

 

4.26 公共事业缴费金额(publicPayAmt)异常值处理

# 筛选出公共事业缴费金额小于-400万的样本数据

public_pay = data[data['publicPayAmt']<-4.0e+06]

print(public_pay[['publicPayCnt','publicPayAmt']])

 

4.27 总消费金额(transTotalAmt)异常值检测

# 从原始数据中筛选出总消费笔数等于0时,总消费笔数,总消费金额这两列

transTotal = transTotal =data[data['transTotalAmt']==0][['transTotalCnt','transTotalAmt']]

print(transTotal)

 

4.28 总消费金额(transTotalAmt)盒图绘制

import seaborn as sns

import matplotlib.pyplot as plt

fig,ax = plt.subplots(figsize=(8,6))

# 绘制盒图,查看总消费金额数据分布。

sns.boxplot(x=data['transTotalAmt'],orient='v')

plt.title('transTotalAmt   distribution')

 

4.29 总消费金额(transTotalAmt)异常值处理

# 筛选出总消费金额大于1000万的样本数据

transTotal  = data[data['transTotalAmt']>10000000]

print(transTotal[['transTotalAmt','transTotalCnt','onlineTransAmt','onlineTransCnt','monthCardLargeAmt']])

 

4.30 总取现金额(cashTotalAmt)异常值检测

# 筛选出总取现笔数为0时,总取现笔数,总取现金额这两列

cashTotal =data[data['cashTotalAmt']==0][['cashTotalCnt','cashTotalAmt']]

print(cashTotal)

 

4.31 总取现金额(cashTotalAmt)盒图绘制

import seaborn as sns

import matplotlib.pyplot as plt

fig,ax = plt.subplots(figsize=(8,6))

# 绘制盒图,查看总取现金额数据分布。

sns.boxplot(x=data['cashTotalAmt'],orient='v')

plt.title('cashTotalAmt distribution')

 

4.32 总取现金额(cashTotalAmt)异常值处理

# 筛选出总取现金额大于50万的样本数据。

cashTotal  = data[data['cashTotalAmt']>500000]

print(cashTotal)

 

4.33 月最大消费金额(monthCardLargeAmt)盒图绘制

import seaborn as sns

import matplotlib.pyplot as plt

fig,ax = plt.subplots(figsize=(8,6))

# 绘制盒图,查看月最大消费金额数据分布

sns.boxplot(x=data['monthCardLargeAmt'],orient='v')

plt.title('monthCardLargeAmt distribution')

 

4.34 月最大消费金额(monthCardLargeAmt)异常值处理

# 筛选出月最大消费金额大于200万的数据

monthCard = data[data['monthCardLargeAmt']>2000000]

print(monthCard)

 

4.35 总消费笔数(transTotalCnt)盒图绘制

import seaborn as sns

import matplotlib.pyplot as plt

fig,ax = plt.subplots(figsize=(8,6))

# 绘制盒图,查看总消费笔数数据分布

sns.boxplot(x=data['transTotalCnt'],orient='v')

plt.title('transTotalCnt distribution')

 

4.36 总消费笔数(transTotalCnt)异常值处理

# 从data中筛选总消费笔数小于6000的值,赋值给data

data = data[data['transTotalCnt']<6000]

print(data.head())

 

4.37 数字编码

import numpy as np

import pandas as pd

data["maritalStatus"] = data["maritalStatus"].map({"未知":0,"未婚":1,"已婚":2})

data['education']=data["education"].map({"未知":0,"小学":1,"初中":2,"高中":3,"本科以上":4})

data['idVerify']=data["idVerify"].map({"未知":0,"一致":1,"不一致":2})

data['threeVerify']=data["threeVerify"].map({"未知":0,"小学":1,"初中":2,"高中":3,"本科以上":4})

data["netLength"] = data["netLength"].map({"无效":0,"0-6个月":1,"6-12个月":2,"12-24个月":3,"24个月以上":4})

data["sex"] =data["sex"].map({"未知":0,"男":1,"女":2})

data["CityId"] =data["CityId"].map({"一线城市":1,"二线城市":2,"其他":3})

print(data.head())

 

4.38 One-Hot编码

import numpy as np

import pandas as pd

data = pd.get_dummies(data=data,columns=['maritalStatus','education','idVerify','threeVerify','Han','netLength','sex','CityId'],prefix_sep='_')

print(data.columns)

 

5.1 建立信用评估指标体系

5.2 年消费总额指标计算

# 计算客户年消费总额。

trans_total =data["transCnt_mean"]*data["transAmt_mean"]

# 将计算结果保留到小数点后六位。

trans_total =round(trans_total,6)

# 将结果加在data数据集中的最后一列,并将此列命名为trans_total。

data['trans_total'] =trans_total

print(data['trans_total'].head(20))

 

5.3 年取现总额指标计算

# 计算客户年取现总额。

total_withdraw =data["cashCnt_mean"]*data["cashCnt_mean"]

# 将计算结果保留到小数点后六位。

total_withdraw =round(total_withdraw,6)

# 将结果加在data数据集的最后一列,并将此列命名为total_withdraw。

data['total_withdraw'] =total_withdraw

print(data['total_withdraw'].head(20))

5.4 平均每笔取现金额指标计算

import numpy as np

# 计算客户的平均每笔取现金额。

avg_per_withdraw =data["cashTotalAmt"]/data["cashTotalCnt"]

# 将所有的inf和NaN变为0。

avg_per_withdraw=avg_per_withdraw.replace({np.nan:0,np.inf:0})

# 将计算结果保留到小数点后六位。

avg_per_withdraw =round(avg_per_withdraw,6)

# 将结果加在data数据集的最后一列,并将此列命名为avg_per_withdraw。

data['avg_per_withdraw'] =avg_per_withdraw

print(data['avg_per_withdraw'].head(20))

5.5 网上平均每笔消费额指标计算

import numpy as np

# 请计算客户的网上平均每笔消费额。

avg_per_online_spend =data["onlineTransAmt"]/data["onlineTransCnt"]

# 将所有的inf和NaN变为0。

avg_per_online_spend=avg_per_online_spend.replace({np.nan:0,np.inf:0})

# 将计算结果保留到小数点后六位。

avg_per_online_spend =round(avg_per_online_spend,6)

# 将结果加在data数据集的最后一列,并将此列命名为avg_per_online_spend。

data['avg_per_online_spend'] =avg_per_online_spend

print(data['avg_per_online_spend'].head(20))

 

5.6 公共事业平均每笔缴费额指标计算

import numpy as np

# 请计算客户的公共事业平均每笔缴费额。

avg_per_public_spend =data["publicPayAmt"]/data["publicPayCnt"]

# 将所有的inf和NaN变为0。

avg_per_public_spend=avg_per_public_spend.replace({np.nan:0,np.inf:0})

# 将计算结果保留到小数点后六位。

avg_per_public_spend =round(avg_per_public_spend,6)

# 将结果加在data数据集的最后一列,并将此列命名为avg_per_public_spend。

data['avg_per_public_spend'] =avg_per_public_spend

print(data['avg_per_public_spend'].head(20))

 

5.7 不良记录指标计算

#请计算客户的不良记录分数。

bad_record =data['inCourt']+data['isCrime']+data['isBlackList']

#将计算结果加在data数据集的最后一列,并将此列命名为bad_record。

data['bad_record'] =bad_record

print(data['bad_record'].head(20))

 

6.1 构建风控模型流程

6.2 分层采样简介

6.3 训练集和测试集划分

from sklearn.model_selection import train_test_split

# 筛选data中的Default列的值,赋予变量y

y = data['Default'].values

# 筛选除去Default列的其他列的值,赋予变量x

x = data.drop(['Default'], axis=1).values

# 使用train_test_split方法,将x,y划分训练集和测试集

x_train, x_test, y_train, y_test = train_test_split(x,y,test_size=0.2,random_state=33,stratify=y)

# 查看划分后的x_train与x_test的长度

len_x_train = len(x_train)

len_x_test = len(x_test)

print('x_train length: %d, x_test length: %d'%(len_x_train,len_x_test))

# 查看分层采样后的训练集中违约客户人数的占比

train_ratio = y_train.sum()/len(y_train)

print(train_ratio)

# 查看分层采样后的测试集中违约客户人数的占比

test_ratio = y_test.sum()/len(y_test)

print(test_ratio)

 

6.4 使用逻辑回归建立风险评估模型

from sklearn.linear_model import LogisticRegression

# 调用模型,新建模型对象

lr =LogisticRegression()

# 带入训练集x_train, y_train进行训练

lr.fit(x_train, y_train)

# 对训练好的lr模型调用predict方法,带入测试集x_test进行预测

y_predict = lr.predict(x_test)

# 查看模型预测结果

print(y_predict[:10])

print(len(y_predict))

 

6.5 逻辑回归风控模型效果评估

from sklearn.metrics import roc_auc_score

y_predict_proba = lr.predict_proba(x_test)

# 查看概率估计前十行

print(y_predict_proba[:10])

# 取目标分数为正类(1)的概率估计

y_predict = y_predict_proba[:,1]

# 利用roc_auc_score查看模型效果

test_auc = roc_auc_score(y_test,y_predict)

print('逻辑回归模型 test_auc:',test_auc)

 

6.6 逻辑回归参数调优

from sklearn.metrics import roc_auc_score

from sklearn.linear_model import LogisticRegression

# 建立一个LogisticRegression对象,命名为lr

lr =LogisticRegression(penalty='l2',C=0.6,class_weight='balanced')

# 对lr对象调用fit方法,带入训练集x_train, y_train进行训练

lr.fit(x_train, y_train)

# 对训练好的lr模型调用predict_proba方法

y_predict =lr.predict_proba(x_test)[:,1]

# 调用roc_auc_score方法

test_auc = roc_auc_score(y_test,y_predict)

print('逻辑回归模型test auc:')

print(test_auc)

 

6.7 使用标准化提升逻辑回归模型效果

continuous_columns = ['age','cashTotalAmt','cashTotalCnt','monthCardLargeAmt','onlineTransAmt','onlineTransCnt','publicPayAmt','publicPayCnt','transTotalAmt','transTotalCnt','transCnt_non_null_months','transAmt_mean','transAmt_non_null_months','cashCnt_mean','cashCnt_non_null_months','cashAmt_mean','cashAmt_non_null_months','card_age', 'trans_total','total_withdraw', 'avg_per_withdraw','avg_per_online_spend', 'avg_per_public_spend', 'bad_record','transCnt_mean','noTransWeekPre']

# 对data中所有连续型的列进行Z-score标准化

data[continuous_columns]=data[continuous_columns].apply(lambda x:(x-x.mean())/x.std())

# 查看标准化后的数据的均值和标准差,以cashAmt_mean为例

print('cashAmt_mean标准化后的均值:',data['cashAmt_mean'].mean())

print('cashAmt_mean标准化后的标准差:',data['cashAmt_mean'].std())

# 查看标准化后对模型的效果提升

y = data['Default'].values

x = data.drop(['Default'], axis=1).values

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2,random_state = 33,stratify=y)

from sklearn.metrics import roc_auc_score

from sklearn.linear_model import LogisticRegression

lr = LogisticRegression(penalty='l2',C=0.6,class_weight='balanced')

lr.fit(x_train, y_train)

# 查看模型预测结果

y_predict = lr.predict_proba(x_test)[:,1]

auc_score =roc_auc_score(y_test,y_predict)

print('score:',auc_score)

 

6.8 使用离散化提升逻辑回归模型效果

continuous_columns = ['age','cashTotalAmt','cashTotalCnt','monthCardLargeAmt','onlineTransAmt','onlineTransCnt','publicPayAmt','publicPayCnt','transTotalAmt','transTotalCnt','transCnt_non_null_months','transAmt_mean','transAmt_non_null_months','cashCnt_mean','cashCnt_non_null_months','cashAmt_mean','cashAmt_non_null_months','card_age', 'trans_total','total_withdraw', 'avg_per_withdraw','avg_per_online_spend', 'avg_per_public_spend', 'bad_record','transCnt_mean','noTransWeekPre']

# 对data中数值连续型的列进行等频离散化,将每一列都离散为5个组。

data[continuous_columns]=data[continuous_columns].apply(lambda x:pd.qcut(x,q=5,duplicates='drop'))

# 查看离散化后的数据

print(data.head())

# 查看离散化后对模型的效果提升

# 先对各离散组进行One-Hot处理

data=pd.get_dummies(data)

y = data['Default'].values

x = data.drop(['Default'], axis=1).values

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2,random_state = 33,stratify=y)

from sklearn.linear_model import LogisticRegression

from sklearn.metrics import roc_auc_score

lr = LogisticRegression(penalty='l2',C=0.6,class_weight='balanced')

lr.fit(x_train, y_train)

# 查看模型预测结果

y_predict = lr.predict_proba(x_test)[:,1]

score_auc = roc_auc_score(y_test,y_predict)

print('score:',score_auc)

 

6.9 使用随机森林建立风险评估模型

from sklearn.ensemble import RandomForestClassifier

from sklearn.metrics import roc_auc_score

rf_clf = RandomForestClassifier()

rf_clf.fit(x_train,y_train)

y_predict = rf_clf.predict_proba(x_test)[:,1]

# 查看模型效果

test_auc = roc_auc_score(y_test,y_predict)

print ("AUC Score (Test): %f" % test_auc)

 

6.10 随机森林决策树数目参数调优

from sklearn.ensemble import RandomForestClassifier

from sklearn.metrics import roc_auc_score

# 尝试设置参数n_estimators

rf_clf1 =  RandomForestClassifier(n_estimators=100,random_state=33)

rf_clf1.fit(x_train, y_train)

y_predict1 = rf_clf1.predict_proba(x_test)[:,1]

# 查看模型效果

test_auc = roc_auc_score(y_test,y_predict1)

print ("AUC Score (Test): %f" % test_auc)

 

6.11 随机森林参数调优

from sklearn.ensemble import RandomForestClassifier

from sklearn.metrics import roc_auc_score

import matplotlib.pyplot as plt

# 定义存储AUC分数的数组

scores_train=[]

scores_test=[]

# 定义存储n_estimators取值的数组

estimators=[]

# 设置n_estimators在100-210中每隔20取一个数值

for i in range(100,210,20):

        estimators.append(i)

        rf = RandomForestClassifier(n_estimators=i, random_state=12)

        rf.fit(x_train,y_train)

        y_predict = rf.predict_proba(x_test)[:,1]

        scores_test.append(roc_auc_score(y_test,y_predict))

# 查看我们使用的n_estimators取值

print("estimators =", estimators)

# 查看以上模型中在测试集最好的评分

print("best_scores_test =",max(scores_test))

# 画出n_estimators与AUC的图形

fig,ax = plt.subplots()

# 设置x y坐标名称

ax.set_xlabel('estimators')

ax.set_ylabel('AUC分数')

plt.plot(estimators,scores_test, label='测试集')

#显示汉语标注

plt.rcParams['font.sans-serif']=['SimHei']

plt.rcParams['font.family']=['sans-serif']

# 设置图例

plt.legend(loc="lower right")

plt.show()

 

6.12 使用网格搜索进行随机森林参数调优

from sklearn.model_selection import GridSearchCV

from sklearn.ensemble import RandomForestClassifier

from sklearn.metrics import roc_auc_score

rf = RandomForestClassifier()

# 设置需要调试的参数

tuned_parameters ={'n_estimators':[180,190],'max_depth':[8,10]}

# 调用网格搜索函数

rf_clf =GridSearchCV(rf,tuned_parameters,scoring='roc_auc',n_jobs=2,cv=5)

rf_clf.fit(x_train, y_train)

y_predict =rf_clf.predict_proba(x_test)[:,1]

test_auc = roc_auc_score(y_test,y_predict)

print ('随机森林模型test AUC:')

print (test_auc)

 

7.1 风险评估模型效果评价方法

7.2 利用ROC_AUC评估逻辑回归模型准确性

#用metrics.roc_curve()求出 fpr, tpr, threshold

from sklearn.metrics import roc_curve, auc

fpr, tpr, threshold = roc_curve(y_test,y_predict)

#用metrics.auc求出roc_auc的值

roc_auc = 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()

 

7.3 利用ROC_AUC评估随机森林模型准确性

#用metrics.roc_curve()求出 fpr, tpr, threshold

from sklearn.metrics import roc_curve, auc

fpr, tpr, threshold =roc_curve(y_test,y_predict)

#用metrics.auc求出roc_auc的值

roc_auc =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()

 

7.4 利用KS值评估逻辑回归模型准确性

#用metric.roc_curve()求出 fpr, tpr, threshold

from sklearn.metrics import roc_curve

fpr, tpr, threshold = roc_curve(y_test, y_predict)

#求出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))

 

7.5 利用KS值评估随机森林模型准确性

#用metric.roc_curve()求出 fpr, tpr, threshold

from sklearn.metrics import roc_curve

fpr, tpr, threshold = roc_curve(y_test, y_predict)

#求出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.26, 0.45), xytext=(0.30, 0.43),

             fontsize=20,arrowprops=dict(facecolor='green', shrink=0.01))

 

7.6 利用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(_____, _____)

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)

 

7.7 利用PSI评估随机森林模型稳定性

## 训练集预测概率

y_train_probs = rf_clf.predict_proba(x_train)[:,1]

## 测试集预测概率

y_test_probs = rf_clf.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=', round(psi, 3))

## 创建(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)

 

7.8 计算逻辑回归的指标重要性

from sklearn.linear_model import LogisticRegression

lr_clf = LogisticRegression(penalty='l2',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()

 

 

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

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()

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/67630.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT漫谈(三)

AIGC(AI Generated Content)指的是使用人工智能技术生成的内容,包括文字、图像、视频等多种形式。通过机器学习、深度学习等技术,AI系统可以学习和模仿人类的创作风格和思维模式,自动生成大量高质量的内容。AIGC被视为继用户生成内容(UGC)和专业生成内容(PGC)之后的下…

科大讯飞星火认知大模型怎么样?

“鉴于SparkDesk服务目前处于内部用户体验阶段&#xff0c;所有与SparkDesk相关的交互内容、技术参数等信息均被视为保密信息。您了解并同意&#xff0c;且有责任对这些保密信息严格保密&#xff0c;您不得以任何方式&#xff08;包括但不限于截图、录屏、拍照等&#xff09;披…

科大讯飞发布星火认知大模型

5月6日&#xff0c;讯飞正式发布星火&#xff0c;寓意&#xff1a;星星之火 可以燎原。 发布会之后&#xff0c;市场也给出了非常积极的回应&#xff0c;周一股价直接涨停。 相对于百度&#xff0c;发布文心一言的时候&#xff0c;股价一边掉了10%&#xff0c;成绩还是非常亮眼…

IBM打响用AI取代人类岗位的第一枪,约7800人被永久淘汰

夕小瑶科技说 分享来源 | 量子位 “这不是演习&#xff0c;AI让人失业来真的了&#xff01;”就在这个劳动节假期&#xff0c;科技巨头IBM宣布&#xff1a;暂缓可以被AI取代的岗位的招聘&#xff0c;约7800人将被永久淘汰。 尽管“我们要被AI取代”的唬人消息不是第一次出现了&…

有了这些 AI 工具,健康和财富兼得「GitHub 热点速览」

作者&#xff1a;HelloGitHub-小鱼干 新的一周&#xff0c;又有什么新的 AI 应用呢&#xff1f;在 AI 专场&#xff0c;这次是文本生语音和双语对话模型&#xff0c;前者能解决你的语音问题&#xff0c;后者则是清华开源的模型&#xff0c;能让你搞个自己的类 ChatGPT 对话助手…

无法启动程序,拒绝访问解决方法

出现上面错误&#xff0c;我的情况是这样的&#xff0c;解决方案中有3个项目&#xff0c;运行的时候出现这个问题&#xff0c; 解决方法就是把需要运行出结果的那个项目右击设置为启动项目。

远程服务器不允许匿名登录,匿名远程访问COM+应用时被拒绝访问的问题

匿名远程访问COM应用时被拒绝访问的问题 08/28/2011 3 minutes to read In this article 有个客户在一个Win2k3的域下建立了一个COM应用服务器&#xff0c;而客户端是一个工作组机器。 为了重现这个场景&#xff0c;我们按照以下的方式&#xff0c;允许以匿名的方式访问调用COM…

5 分钟搞懂 BFF

随着微服务架构越来越复杂&#xff0c;前端需要和越来越多的后端服务交互&#xff0c;为了解决前端的复杂性问题&#xff0c;提出了 BFF 架构。原文: What is a BFF? And how to build one? 现在谁还会构建单体服务&#xff1f;微服务才是正确的选择&#xff01;但这不是一个…

仿58同城地方门户本地生活小程序源码

仿58同城地方门户本地生活小程序源码 PHP仿58同城小程序 微信分类信息平台 地方门户本地生活 完整源码带后台,后台基于微擎&#xff08;非Thinkphp&#xff09;开发&#xff0c;不懂微擎的请不要下载&#xff0c;内涵详细安装教程文档 同城小程序微信扫码 模板消息如何设置&a…

最新开源家政预约服务小程序源码系统,完整前后端+搭建教程

全新好用的完全开源家政预约服务小程序源码系统&#xff0c;带完整前后端搭建教程&#xff0c;功能强大&#xff01; 完全开源的家政上门预约服务小程序源码系统是一款专业家政门到门预约服务应用小程序&#xff0c;源码下载地址&#xff1a;春哥技术博客&#xff0c;完全开源可…

【2022-11-26】JS逆向之北京百姓网

提示&#xff1a;文章仅供参考&#xff0c;禁止用于非法途径&#xff01; 文章目录 前言一、页面分析二、验证码识别三、验证码获取四、总结 前言 目标网站&#xff1a;https://beijing.baixing.com/zhengzu/?page40 一、页面分析 清除cookie&#xff0c;重新刷新网页&#…

好客php在线客服源码搭建教程可对接网页/小程序/微信公众号等

当你的网站做大以后肯定少不了会添加自己的联系方式&#xff0c;像很多大的网站其实在首页在线客服。今天这个源码可以满足你。 我在网上也找了很多&#xff0c;终于找到了源码&#xff0c;看到很多拿着别人的辛苦成果出来收费真够恶心的。 站点设置 首先下载源码解压到宝塔…

圈子论坛社区小程序,交友,博客,社交,陌生人社交,即时聊天 前后端开源PHP

圈子论坛社区系统&#xff0c;含完整的后台PHP系统。功能&#xff1a;小程序授权登陆&#xff0c;H5和APP&#xff0c;手机号登陆&#xff0c;发帖&#xff0c;建圈子、发活动。圈主可置顶推荐帖子&#xff0c;关注、粉丝、点赞等。可作为圈子贴吧、小红书等自媒体。 一款全开…

destoon7.0仿百姓网整站+带移动端

destoon7.0分类信息网站模板_仿百姓58行业网站源码 DT收录友好PC移动端利于SEO优化&#xff0c;测试完整无错&#xff0c;兼容主流浏览器。 模板不包括测试数据。页面简洁简单&#xff0c;容易管理&#xff0c;destoon7.0内核都可以使用&#xff01; destoondt7分类信息模板&…

家政上门预约服务小程序源码+前端后端

简介&#xff1a; 家政上门预约服务小程序源码是一款专业家政门到门预约服务应用小程序&#xff0c;可以打造一个专属的品牌中心&#xff0c;不仅营造了一种沉浸式的客户体验&#xff0c;而且能够将专业的维修项目、维修人员进行「美图秀秀」式地呈现&#xff0c;服务信息一览…

同城上门家政保洁预约维修服务小程序保姆月嫂派单洗车预约系统小程序

同城家政V3是河北清兮网络科技有限公司开发的一款同城家政平台&#xff0c;主要包含上门做饭、上门按摩、家政保洁、家政维修、上门洗车、保姆月嫂、快递跑腿、开锁换锁等服务&#xff0c;可以解决本地生活类店铺实现互联网转化&#xff0c;实现更高效的工作效率。 主要功能介绍…

在百姓网的交流

结束了对 VeryCD 的参观&#xff0c;下午来到百姓网做交流。 百姓网的办公室位于上海交大园区内&#xff0c;安静而且便利。从一些办公室布置的一些细小之处能看出来这是个很注重细节的团队&#xff0c;另外&#xff0c;办公室的墙上贴着的大幅的网站核心代码&#xff0c;手写的…

大数据信息资料采集:58同城赶集百姓网分类网二手物品信息采集

大数据信息资料采集:58同城赶集百姓网分类网二手物品信息采集 数据采集满足多种业务场景&#xff1a;适合产品、运营、销售、数据分析、政府机关、电商从业者、学术研究等多种身份职业。 舆情监控&#xff1a;全方位监测公开信息&#xff0c;抢先获取舆论趋势。 市场分析&…

微信社区小程序/h5/圈子论坛贴吧交友/博客/社交/陌生人社交/宠物/话题/私域/同城

小程序/app/H5多端圈子社区论坛系统,交友/博客/社交/陌生人社交,即时聊天,私域话题,社区论坛圈子,信息引流小程序源码,广场/微校园/微小区/微同城/ 圈子论坛社区系统&#xff0c;含完整的后台系统。thinkPHPuniapp 全开源 功能&#xff1a; 小程序授权登陆&#xff0c;H5和APP&…

百姓网上怎么引流?百姓网如何发帖引流?百姓网如何推广?

百姓网是成立比较久的网站了&#xff0c;属于国内领先的分类信息平台&#xff0c;相信很多人都有所耳闻。百姓网最大的特点就是摆脱了商家和顾客的交易模式&#xff0c;进行的是百姓与百姓之间自己的交易。主要是通过约定上门看货然后再决定要不要购买。与其卖家永无止境的砍价…