|
"""Script that generates, pickles and stores posterior data""" |
|
|
|
import pickle |
|
|
|
import numpy as np |
|
|
|
import config as cfg |
|
from scripts.posterior import PosteriorGenerator |
|
|
|
np.random.seed(42) |
|
|
|
if __name__ == '__main__': |
|
demo_prices = np.concatenate([np.repeat(10,10), np.repeat(7.5,25), np.repeat(11,15)]) |
|
possible_prices = np.linspace(0,20,100) |
|
|
|
for el in [x/100 for x in range(5,100,5)]: |
|
demo_demands = np.exp( |
|
np.random.normal( |
|
loc=-el*demo_prices+cfg.LATENT_SHAPE, |
|
scale=cfg.LATENT_STDEV, |
|
) |
|
) |
|
ts = PosteriorGenerator(prices=demo_prices, demands=demo_demands) |
|
posterior = ts.calc_posterior(samples=5000) |
|
post_demand_samples = [] |
|
for idx in range(len(posterior)): |
|
elas = posterior.get_values("elas")[idx] |
|
shape = posterior.get_values("shape")[idx] |
|
post_demand_sample = np.exp(elas*possible_prices + shape) |
|
post_demand_samples.append(post_demand_sample) |
|
|
|
with open(f"assets/precalc_results/posterior_{el}.pkl", 'wb') as f: |
|
pickle.dump(post_demand_samples, f) |
|
|