PSI(Population Stability Index)是一种用于评估两个数据集或时间点之间的分布变化的指标。它常用于监测模型在不同时间段或不同群体上的稳定性。PSI的计算基于两个分布的累积分布函数(CDF)之间的差异。
在模型监测和评估的背景下,通常将 PSI 用于检测模型在不同时间点或群体上的预测稳定性,尤其是在评估模型在生产环境中的性能变化时。
PSI的计算步骤如下:
其中:
N
是分箱的数量。P1i
是时间点或群体1中第i个箱的累积分布比例。P0i
是时间点或群体0中第i个箱的累积分布比例。PSI的值越大,表示两个时间点或群体之间的分布变化越大,模型在不同时间点或群体上的预测稳定性越差。通常,PSI的阈值可以根据具体问题的要求和业务场景来确定。
在 scikit-learn
中,目前并没有专门用于计算 Population Stability Index (PSI) 的内置函数。计算 PSI 通常需要自定义代码,以下是一个简单的 Python 示例代码,用于计算两个分布之间的 PSI 值:
import numpy as np
from scipy.stats import norm
def calculate_psi(expected, actual, bins=10):
# 分箱
expected_bins = np.histogram(expected, bins=bins)[0]
actual_bins = np.histogram(actual, bins=bins)[0]
# 计算累积分布函数(CDF)
expected_cdf = np.cumsum(expected_bins) / np.sum(expected_bins)
actual_cdf = np.cumsum(actual_bins) / np.sum(actual_bins)
# 计算 PSI
psi = np.sum((actual_cdf - expected_cdf) * np.log(actual_cdf / expected_cdf))
return psi
# 示例用法
expected_distribution = np.random.normal(0, 1, 1000)
actual_distribution = np.random.normal(0.2, 1.2, 1000)
psi_value = calculate_psi(expected_distribution, actual_distribution)
print("PSI:", psi_value)
上述代码中,calculate_psi
函数接受两个分布(expected 和 actual),并计算它们之间的 PSI 值。你可以根据实际情况调整分箱数量(bins 参数),以满足你的需求。
请注意,PSI 的计算方法可能因具体业务场景而异,上述示例代码仅提供了一种通用的计算方法。在实际应用中,你可能需要根据具体情况进行调整。