模型的 PSI(Population Stability Index)

PSI是一种用于衡量数据集间分布变化的指标,常用于模型稳定性监测。文章介绍了PSI的计算原理、在模型评估中的应用以及如何使用Python自定义函数计算PSI。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PSI(Population Stability Index)是一种用于评估两个数据集或时间点之间的分布变化的指标。它常用于监测模型在不同时间段或不同群体上的稳定性。PSI的计算基于两个分布的累积分布函数(CDF)之间的差异。

在模型监测和评估的背景下,通常将 PSI 用于检测模型在不同时间点或群体上的预测稳定性,尤其是在评估模型在生产环境中的性能变化时。

PSI的计算步骤如下:

  1. 分箱(Binning): 将数据按照预测概率或分数等进行分箱。分箱的目的是为了计算每个箱中的观测数和观测比例。
  2. 计算累积分布函数(CDF): 对于每个数据集或时间点,计算每个箱的累积分布函数,得到累积分布百分比。
  3. 计算PSI: 对于每个箱,计算两个时间点或群体之间的CDF差异,然后将这些差异进行累加,得到总的PSI。

在这里插入图片描述

其中:

  1. N 是分箱的数量。
  2. P1i 是时间点或群体1中第i个箱的累积分布比例。
  3. 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 的计算方法可能因具体业务场景而异,上述示例代码仅提供了一种通用的计算方法。在实际应用中,你可能需要根据具体情况进行调整。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值