移位直方图分档时的小泄漏

Small Leak on Shifting Histogram Binning

提问人:C. Nielsen 提问时间:7/28/2023 更新时间:7/29/2023 访问量:24

问:

尝试将一些代码放在一起,用于根据简单的百分比分箱直方图分析降级的正态分布,并可以选择将百分比分箱移到非 P50 零值附近。

我将一个可重现的示例归结为以下代码:

import random
import numpy as np
import pandas as pd
from numpy.random import normal

# --- Defines year 1 p50 distribution ---
p50 = 100000
hedge = -0.10        #percent
uncertainty = 0     #percent
sd = p50 * uncertainty / 100
first_year = normal(p50, sd, 10000)

# --- Establishes multi-year distributions on true p50 ---
years = 10
deg = 0.1
yearly_dist = np.zeros((years, 10000))
for i in range(0, years):
    for j in range(0, 10000):
        yearly_dist[i][j] = random.choice(first_year) * (1 - deg / 100) ** i

# --- Generates bins for each percentage delta from hedged p50 ---
hedge_p50 = p50 * (1 + hedge / 100)
bin_size = hedge_p50 * 0.01
bins = np.zeros(101)
bins[100] = 1e+15
for i in range(1, 100):
    bins[i] = hedge_p50 - (50 - i) * bin_size - hedge_p50/200

# --- Calculates totals in each percentage bin for each year ---
yearly_df = pd.DataFrame()
for i in range(0, years):
    deg_value = (1 - deg/100) ** i
    deg_bins = bins * deg_value
    deg_bins[100] = 1e+15
    hist, bin_edges = np.histogram(yearly_dist[i], bins=deg_bins, density=True)
    yearly_df[i] = np.multiply((hist * bin_size), (deg_bins[0:100] + bin_size / 2))

以上内容的快速总结:

  1. 从真实的 p50 值生成 10,000 个样本
  2. 每年生成 10,000 个可降解的添加样品(数据待分析)
  3. 根据对冲值和 p50 值创建 1% 直方图箱
  4. 将项目符号 2 中的数据装箱到在 3 中创建的直方图图箱中
  5. 根据原始 p50 计算每个百分比箱中的加权总计

这符合预期,只是每个yearly_df的总和不等于原始 p50 值。最容易在第一年看到,因为退化的影响没有显现出来。

yearly_df[0].sum()
Out[1]: 99900.0

很明显,最终计算生成yearly_df的东西有一个与箱子大小随对冲变化相关的小错误,但对我来说如何纠正这一点并不明显。期望的结果是,无论退化或对冲价值如何,上述yearly_df的总和始终等于原始 p50 总数(+/- 50% 的边缘箱可能除外,它们的大小不规则,我不希望在正常使用下出现数据)。对这里的更正有什么想法吗?

Python 直方图 分箱

评论

0赞 C. Nielsen 7/28/2023
偏差的大小也非常不规则:在 -5% 到 5% 的对冲值之间,它显示为 -10 * 对冲^2 除此之外,它在符号和幅度上都有些随机振荡(例如,20 对冲低于 400,而 -15 高于 300)
0赞 C. Nielsen 7/29/2023
另外值得注意的是,即使在校正了 bin 尺寸以进行降级后,偏差也会随着退化而增加(在上面的代码中没有完成)

答:

0赞 C. Nielsen 7/29/2023 #1

想通了——主要是我是个白痴。

直方图的基本限制是,考虑到将连续函数转换为离散概率,它具有不精确度量。随着对冲箱的移动,能够计算出精确的值本质上是不可能的。

这种差异是由于包含分布中略小于该分布中的“真实值”的完全概率的 bin 的中位数。因此,对于上述内容,包含 100,000 的 bin 的中位数为 99,990,因此在重建值时,它将使用此值进行估计。

对于我的用例,这是一个可以接受的不精确性,因此问题在我的脑海中得到了解决。