独立的肉夹馍 · 数据挖掘专题 GEO数据下载 - ...· 1 周前 · |
飞翔的投影仪 · System.IO.IOException无 ...· 6 天前 · |
爱逃课的剪刀 · numpy通用函数运算时有nan值,返回默认 ...· 6 天前 · |
道上混的椅子 · maven与tomcat有区别吗 - CSDN文库· 5 天前 · |
帅气的闹钟 · qt高精度10ms定时器 - CSDN文库· 1 月前 · |
坚韧的竹笋 · protobuf_MODULE_COMPAT ...· 2 月前 · |
文雅的海龟 · openlayers绘制自定义点线面样式,带 ...· 4 月前 · |
重感情的葡萄酒 · Vue项目项字典值变量添加键值对_51CTO ...· 1 年前 · |
酷酷的牙膏 · 使用RailWay部署Halo ...· 1 年前 · |
好久不见,小编最近待业在家,如果各位有互金的坑,可以帮小编介绍一下哈。
大家知道,开发模型的时候,特征的预测力及稳定性很重要,而预测力和稳定性的衡量指标也有很多。
先说怎么判断特征稳定性,特征稳定性主要包括客群是否发生变化以及风险点是否发生变化。一般客群发生变化会去看时间维度上的特征分布或者分箱的PSI,如果时间维度的特征分布不稳定或者PSI的值过大,那么这个特征也是不稳定的。风险点发生变化主要体现在比如测试集或验证集map了学习集的分箱后计算的的woe和学习集趋势不同,那么这样的特征也是不能用的。
然后是特征的预测力衡量,预测力衡量的指标有很多,小编今天主要介绍的缺失率和单值率。
以下是进行数据探索和计算缺失率单值率的代码:
首先是数据探索:
def EDA(df):
'''
df为输入数据集,本函数主要用于数据探索
'''
res = []
nrows = len(df) # 行数
# for col in df.columns:
for col in df.columns:#
x = df[col] # series
na= x.isnull().sum() # 每个series的空值个数
nunique = x.nunique() # 每个特征的单一值个数
missRate = na*1.0/nrows # 缺失率
#分别处理数值型特征和字符型特征
# if is_number_type(x):
if x.dtypes != 'object':
# 计算分位数
q = stats.scoreatpercentile(x.dropna(),[1,10,25,50,75,90,100])
iqr = q[4]-q[2]
iqrlow = q[2]-1.5*iqr
iqrupp = q[4]+1.5*iqr
r = (col,'Number',nrows,na,nunique,missRate,q[0],q[1],q[2],q[3],q[4],q[5],q[6],
x.mean(),x.std(),(x
(x==0).sum(),(x>0).sum(),(xiqrupp).sum(),
np.nan,np.nan,np.nan,np.nan)
res.append(r)
else:
cnts = x.value_counts()
top = cnts.index[0]
tail = cnts.index[-1]
toprate = cnts[0]*1.0/nrows
tailrate = cnts[-1]*1.0/nrows
r = (col,'Char',np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,
np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,np.nan,
np.nan,
top,toprate,tail,tailrate)
res.append(r)
col1= ['Name','Type','N','Nmiss','Nunique','Missrate','Q1','Q10','Q25',
'Q50','Q75','Q90','Q100','Avg','Std','NNeg','Nzero',
'Npos','Noutl','Noutu','top','toprate','tail','tailrate']
print('done')
eda_stat = pd.DataFrame(res,columns = col1).sort_values(by = 'Type')
return eda_stat
以上是查看特征分布的函数
def pct_check(df,cutoff_pct,cutoff_miss,ignore=[]):
'''
检查百分比
'''
cols=[]
for col in df.columns:
if col in ignore:
continue
pct = df[col].value_counts()*1.0/len(df)
missrate =1-(df[col].count()*1.0/len(df))
if (len(pct[pct>=cutoff_pct])>0)or (missrate>=cutoff_miss):
cols.append(col)
return cols
这个找出符合单值率集缺失率阈值的特征。
谢谢大家~
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2023 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
扫码关注腾讯云开发者
领取腾讯云代金券