特征稳定性指标CSI(Characteristic Stability Index)是衡量金融风控模型中单个特征在时间上的稳定性的重要指标。CSI专注于监测和评估模型中关键特征分布的变化情况,以确定这些特征是否在新的数据集上保持了与训练数据集相似的分布。以下是关于CSI的详细解释:
定义
CSI用于量化特征分布的变化,即特征在时间维度上的稳定性。如果一个特征的分布在新数据集上与训练数据集相比发生了显著变化,这表明该特征可能不稳定,可能会对模型的预测性能产生负面影响。
计算方法
CSI的计算通常涉及以下步骤:
-
确定分位数区间:将特征值按照分位数分成若干等宽的区间,通常使用等宽分箱方法。
-
计算频率分布:在训练集和当前数据集上分别计算每个区间内的样本数量或比例。
-
计算CSI值:对于每个区间,计算训练集和当前数据集之间的频率分布差异。具体公式可能因不同的实现而异,但一般形式如下:
[ CSI = \sum_{i=1}^{N} \left| \frac{f_i}{F_i} - 1 \right| ]
其中,( f_i ) 是当前数据集中第 ( i ) 个区间的样本比例,( F_i ) 是训练集中相应区间的样本比例。
重要性
CSI的重要性体现在以下几个方面:
- 模型监控:CSI可以帮助金融机构监控模型的关键特征是否稳定,从而确保模型的预测能力不会因为特征分布的变化而降低。
- 早期预警:如果CSI值显著增加,可能意味着数据或环境发生了变化,需要进一步调查和调整模型。
- 特征优化:通过分析CSI,可以识别哪些特征变得不稳定,从而进行特征的重新选择或调整。
应用
在实际应用中,CSI通常与PSI(Population Stability Index)一起使用,PSI衡量整个模型分数的分布稳定性,而CSI则更细致地关注单个特征分布的变化。通过结合这两个指标,金融机构可以更全面地监控和评估模型的整体稳定性。
总之,CSI是金融风控中一个重要的特征稳定性指标,它有助于金融机构及时发现和应对模型特征分布的变化,保证模型的准确性和可靠性。
import pandas as pd
import numpy as np
import json
# 模拟数据
np.random.seed(0)
data1 = {'feature0':np.random.randn(100),
'feature1':np.random.rand(100),
'feature2':np.random.randint(0,10,size=100)
}
data2 = {'feature0':np.random.randn(50),
'feature1':np.random.rand(50),
'feature2':np.random.randint(0,10,size=50)
}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
def caculate_csi(data1,data2,feature_list):
"""
data1:第一个数据集
data2:第二个数据集
feature_list:需要计算csi的特征列表
return:返回每个特征的csi值,json格式
"""
csi_results = {}
for feature in feature_list:
# 将特征值分箱,等宽分箱
min_val = min(data1[feature].min(),data2[feature].min())
max_val = max(data1[feature].max(),data2[feature].max())
bins = np.linspace(min_val,max_val,num=10)
#计算两个数据集特征分布
hist1,_ = np.histogram(data1[feature],bins=bins)
hist2,_ = np.histogram(data2[feature],bins=bins)
#归一化直方图
hist1_normalized = hist1/hist1.sum()
hist2_normalized = hist2/hist2.sum()
#计算csi
csi_value = 1-np.sum(np.abs(hist1_normalized-hist2_normalized))
csi_results[feature]=csi_value
csi_results_json = json.dumps(csi_results,indent=4)
return csi_results_json
result = caculate_csi(data1,data2,['feature0','feature1','feature2'])
print(result)
result = caculate_csi(data1,data2,['feature0','feature1','feature2'])
print(result)
标签:csi,特征,稳定性,feature,指标,np,CSI,data1
From: https://blog.csdn.net/weixin_37942413/article/details/144111500