You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何结合两张联合概率表生成符合分布的模拟数据集?

解决方案:结合两个联合概率表生成模拟数据集

要同时满足表1(教育-薪资)和表2(年龄-薪资)的分布规则生成数据,核心是构建教育、年龄、薪资三者的联合概率分布,通过薪资这个共同变量,用条件概率分解来组合两个表的信息。

第一步:校验边缘分布一致性

先确认两个表的薪资边缘概率无冲突:

  • 表1计算:$10k总概率=0.1+0.3+0.2=0.6;$20k总概率=0.2+0.1+0.1=0.4
  • 表2计算:$10k总概率=0.2+0.2+0.2=0.6;$20k总概率=0.1+0.1+0.2=0.4
    两者完全一致,可直接组合。

第二步:推导条件概率

基于薪资的条件概率是组合的关键:

  1. 教育的条件概率(给定薪资):

    Education\Salary$10,000 (P(ES))$20,000 (P(ES))
    None0.1/0.6 ≈ 0.16670.2/0.4 = 0.5
    Hs0.3/0.6 = 0.50.1/0.4 = 0.25
    College0.2/0.6 ≈ 0.33330.1/0.4 = 0.25
  2. 年龄的条件概率(给定薪资):

    Age\Salary$10,000 (P(AS))$20,000 (P(AS))
    300.2/0.6 ≈ 0.33330.1/0.4 = 0.25
    400.2/0.6 ≈ 0.33330.1/0.4 = 0.25
    500.2/0.6 ≈ 0.33330.2/0.4 = 0.5

第三步:分步抽样逻辑

按以下顺序抽样,确保同时满足两个表的分布:

  1. 先抽薪资:按P(S=$10k)=0.6、P(S=$20k)=0.4的概率抽取
  2. 给定抽到的薪资,按对应教育条件概率抽教育背景
  3. 同样给定抽到的薪资,按对应年龄条件概率抽年龄

代码实现示例(Python)

import numpy as np
import pandas as pd

# 定义概率分布
salary_probs = {"$10,000": 0.6, "$20,000": 0.4}
edu_cond_probs = {
    "$10,000": {"None": 1/6, "Hs": 0.5, "College": 1/3},
    "$20,000": {"None": 0.5, "Hs": 0.25, "College": 0.25}
}
age_cond_probs = {
    "$10,000": {30: 1/3, 40: 1/3, 50: 1/3},
    "$20,000": {30: 0.25, 40: 0.25, 50: 0.5}
}

# 生成模拟数据集函数
def generate_sample(n_samples):
    samples = []
    for _ in range(n_samples):
        # 第一步:抽薪资
        salary = np.random.choice(list(salary_probs.keys()), p=list(salary_probs.values()))
        # 第二步:抽教育背景
        edu = np.random.choice(list(edu_cond_probs[salary].keys()), p=list(edu_cond_probs[salary].values()))
        # 第三步:抽年龄
        age = np.random.choice(list(age_cond_probs[salary].keys()), p=list(age_cond_probs[salary].values()))
        samples.append({"Education": edu, "Age": age, "Salary": salary})
    return pd.DataFrame(samples)

# 生成10000条样本并验证分布
df = generate_sample(10000)

# 验证表1的联合分布
print("教育-薪资联合分布(百分比):")
print(pd.crosstab(df["Education"], df["Salary"], normalize="all") * 100)

# 验证表2的联合分布
print("\n年龄-薪资联合分布(百分比):")
print(pd.crosstab(df["Age"], df["Salary"], normalize="all") * 100)

运行后生成的数据集会近似符合两个联合概率表的规则。

注意事项

如果两个表的薪资边缘概率不一致,需要先调整其中一个表的概率(比如按权重合并),或者明确额外约束条件,否则无法生成同时满足两个分布的数据集。

内容的提问来源于stack exchange,提问作者tech_boy_r_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 23:15:28