一、BLP模型介绍
BLP模型是以Berry、Levinsohn和Pakes三位学者的姓氏命名的经济学模型。该模型主要应用于市场行为分析、竞争政策制定等领域。BLP模型的基本思想是,消费者是有理的,他们会根据价格、质量等因素来决定是否购买商品。针对不同的消费者和商品组合,构建了一个大规模离散选择模型(demand side),再根据厂商的生产成本,构建了一个大规模离散选择模型(supply side),通过求解这两个模型,可以得到市场的均衡价格和数量。
二、BLP模型构建
1、市场需求模型(demand side)
import numpy as np import pandas as pd import scipy.stats from scipy.optimize import minimize from scipy.sparse import diags from scipy.linalg import inv from scipy.sparse.linalg import inv as sparse_inv class BLPModel: def __init__(self): self.product_df = None self.alpha = None self.beta = None self.xi = None self.rho = None self.S = None self.d = None self.Z = None self.price = None self.market_share = None def utility(self, beta, xi, product_df): return np.dot(product_df, beta) + xi def market_share(self, alpha, p, xi, rho, demand_df): delta = self.utility(self.beta, xi, self.product_df) non_diag_element = -scipy.stats.norm.ppf(demand_df['market_share']) diag_element = np.multiply(rho ** (demand_df['market_id'] - 1), demand_df['market_size']) Omega = diags([diag_element], [0], shape = (len(self.product_df), len(self.product_df))).toarray() S = np.dot(np.dot(scipy.linalg.sqrtm(Omega), self.S), scipy.linalg.sqrtm(Omega)) v = alpha + np.dot(self.Z, self.delta) + non_diag_element D = np.dot(np.dot(self.Z, S), self.Z.T) return scipy.linalg.inv(np.identity(len(demand_df)) - np.dot(np.dot(D, Z), S)) def loglikelihood(self, alpha, beta, xi, rho, demand_df): p = self.price market_share = self.market_share(alpha, p, xi, rho, demand_df) pass def fit(self, product_df, demand_df, alpha0, beta0, xi0, rho0): self.product_df = product_df self.alpha = alpha0 self.beta = beta0 self.xi = xi0 self.rho = rho0 self.S = np.cov(product_df.T) self.d = np.zeros(len(product_df)) self.Z = np.ones((len(demand_df), len(alpha0) + len(product_df))) minimize_fun = lambda x: -self.loglikelihood(x[0], x[1:len(self.beta) + 1], x[len(self.beta) + 1:len(self.beta) + 1 + len(self.xi)], x[-1], demand_df) x0 = np.concatenate([self.alpha, self.beta, self.xi, np.array([self.rho])]) minimize_result = minimize(minimize_fun, x0) self.alpha = minimize_result.x[0] self.beta = minimize_result.x[1:len(self.beta) + 1] self.xi = minimize_result.x[len(self.beta) + 1:len(self.beta) + 1 + len(self.xi)] self.rho = minimize_result.x[-1] def predict(self, price): pass
2、市场供给模型(supply side)
class Producer: def __init__(self, product_list, cost_list): self.product_list = product_list self.cost_list = cost_list def profit(self, price_list): revenue_list = np.multiply(price_list, self.product_list) cost_list = np.multiply(self.cost_list, self.product_list) profit_list = np.subtract(revenue_list, cost_list) return np.sum(profit_list) def marginal_cost(self, price_list): revenue_list = np.multiply(price_list, self.product_list) return np.add(revenue_list, (-1 * self.cost_list))
三、BLP模型应用举例
1、以汽车市场为例
假设市场上有N家汽车制造商,每家制造商都会生产M种车型。我们假设市场上的所有汽车都是同质的,但它们的品质存在差异。假设市场上有K个属性(价格、油耗、安全性、舒适度等等),而每辆汽车的这些属性都是不同的。在这个基础上,我们构建市场需求模型和市场供给模型,以求解市场均衡价格和数量。
2、以电视机市场为例
类似地,我们可以将BLP模型应用于电视机市场。假设市场上有N家电视机制造商,每家制造商都会生产M种型号电视机。市场需求模型和市场供给模型的构建方式和汽车市场相似,只不过属性不同。假设市场上有K个属性(尺寸、分辨率、价格等等),而每个型号电视机的这些属性都是不同的。
最新评论