有没有一种方法可以将概率分配给随机数生成器中的样本?

时间:2019-11-15 07:24:04

标签: python

我有一个包含每月总计的财务数据集。我知道每种方法的真实世界平均值。

我正在尝试使用Python构建一些虚拟交易数据。我不希望虚拟交易数据是完全随机的。我想围绕我拥有的现实世界平均水平进行建模。

例如-如果从真实数据中得出,每月总利润为1000美元,总交易次数为5,则每笔交易的平均利润为200美元。 我想创建虚拟交易,以现实世界中200美元的平均水平为模型。 这就是我的方法:

import pandas as pd
from random import gauss

bucket = []

for _ in range(5):
    value = [int(gauss(200,50))]
    bucket += value

transactions = pd.DataFrame({ 'Amount' : bucket})

现在,对我来说,挑战在于我也必须随机分配标识符。

例如,据我所知,共有三个买家。我们称它们为A,B和C。 这三个完成了这5笔交易,我想在创建虚拟交易数据时随机分配它们。但是,我也知道,与B和C相比,A很有可能进行更多的交易。为了使我的虚拟数据接近现实生活中的场景,我想在我的虚拟交易数据中为这些购买者的出现率分配概率。 / p>

假设我想要这样:

A:外观为60% B:外观20% C:出现率20%

我该如何实现?

1 个答案:

答案 0 :(得分:0)

您要问的不是概率。您希望A有100%的机会有60%的购买机会。对于同一输入,将一个dict作为输入,每个用户都有购买的可能性。然后创建一个基于这些概率的列表,并从列表中随机选择一个买家。如下所示:

import random

#Buy percentages of the users
buy_percentage = {'A': 0.6, 'B': 0.2, 'C': 0.2}

#no of purchases
base = 100

buy_list = list()
for buyer, percentage in buy_percentage.items():
    buy_user = [buyer for _ in range(0, int(percentage*base))]
    buy_list.extend(buy_user)

for _ in range(0,base):
    #Randomly gets a buyer but makes sure that your ratio is maintained
    buyer = random.choice(buy_list)

    #your code to get buying price goes below

更新:

或者,可以使用以下链接中给出的答案。我认为这种解决方案更好。
A weighted version of random.choice