Download the Jupyter Notebook for this section: parallel.ipynb

Parallel Processing Example

[1]:
import pyblp
import pandas as pd

pyblp.options.digits = 2
pyblp.options.verbose = False
pyblp.__version__
[1]:
'1.1.0'

In this example, we’ll use parallel processing to compute elasticities market-by-market for a simple Logit problem configured with some of the fake cereal data from Nevo (2000a).

[2]:
product_data = pd.read_csv(pyblp.data.NEVO_PRODUCTS_LOCATION)
formulation = pyblp.Formulation('0 + prices', absorb='C(product_ids)')
problem = pyblp.Problem(formulation, product_data)
results = problem.solve()
results
[2]:
Problem Results Summary:
==========================================
GMM   Objective  Clipped  Weighting Matrix
Step    Value    Shares   Condition Number
----  ---------  -------  ----------------
 2    +1.9E+02      0         +5.7E+07
==========================================

Cumulative Statistics:
========================
Computation   Objective
   Time      Evaluations
-----------  -----------
 00:00:00         2
========================

Beta Estimates (Robust SEs in Parentheses):
==========
  prices
----------
 -3.0E+01
(+1.0E+00)
==========
[3]:
pyblp.options.verbose = True
with pyblp.parallel(2):
    elasticities = results.compute_elasticities()
Starting a pool of 2 processes ...
Started the process pool after 00:00:00.
Computing elasticities with respect to prices ...
Finished after 00:00:03.

Terminating the pool of 2 processes ...
Terminated the process pool after 00:00:00.

Solving a Logit problem does not require market-by-market computation, so parallelization does not change its estimation procedure. Although elasticity computation does happen market-by-market, this problem is very small, so in this small example there are no gains from parallelization.

If the problem were much larger, running Problem.solve and ProblemResults.compute_elasticities under the with statement could substantially speed up estimation and elasticity computation.