保险需求与风险偏好的结构估计:从 CRRA 到逆向选择
消费者为何购买保险?如何从保险选择数据反推风险厌恶系数 $\gamma$ 与风险类型 $\theta$ 的分布?Einav-Finkelstein 框架下的 CRRA 期望效用、混合 Logit 估计、Rothschild-Stiglitz 逆向选择均衡,以及强制保险/补贴的福利分析。
numpy、scipy.optimize.brentq/minimize);理解嵌套求根。01 模型设定:保险需求与 CRRA
消费者初始财富 $w$,面临损失 $L$ 的风险。损失发生概率为风险类型 $\theta$(私人信息,保险公司观测不到)。消费者从一组保险合同 $j$ 中选一个最大化期望效用。
1.1 CRRA 效用函数
$\gamma$ 为相对风险厌恶系数(RRA)。$\gamma=0$ 风险中性;$\gamma=1$ 对数效用;$\gamma>1$ 强风险厌恶。设定理由:CRRA 是宏观/公共财政最常用的偏好形式,跨期平滑与风险厌恶由同一 $\gamma$ 刻画。
1.2 保险合同与期望效用
合同 $j$:保费 $p_j$,赔付比例 $q_j$(损失发生时赔付 $q_j L$,自付 $(1-q_j)L$)。两种自然状态:
$\varepsilon_j$ 为 i.i.d. Gumbel 选择扰动。风险类型 $\theta$ 与风险厌恶 $\gamma$ 均随人异质。
1.3 保险公司定价
关键:$E[q_j L\mid\text{选 }j]$ 依赖于谁选择了 $j$——这正是逆向选择的根源。
02 推导:选择概率、CE 与风险溢价
2.1 保险选择概率(混合 Logit)
由于 $\varepsilon_j$ i.i.d. Gumbel,条件在 $(\theta,\gamma)$ 上,选合同 $j$ 的概率为 Logit:
风险类型与偏好随人异质,因此边缘选择概率要在 $(\theta,\gamma)$ 分布上积分(混合 Logit):
2.2 确定性等价与风险溢价(不跳步)
不买保险时,财富为彩票 $\{w \text{(概率 }1-\theta\text{)},\ w-L \text{(概率 }\theta\text{)}\}$。其期望效用为:
确定性等价 $CE$ 是一笔确定财富,其效用等于该彩票的期望效用:
风险溢价 $\pi$ 是期望损失 $E[L]=\theta L$ 与 CE 之差(即人们为消除风险愿意多付的钱):
风险厌恶者 $\pi>0$:为避免不确定性,愿意付出超过期望损失的保费。$\gamma$ 越大,$\pi$ 越大。这是从保险选择反推 $\gamma$ 的理论基础。
2.3 从保险选择反推 $\gamma$
观测到一个家庭"为全额保险愿意支付的最高保费" $p^*$(即无差异保费,使买保险的效用等于不买):
若知道 $\theta$(来自索赔数据),给定 $w,L$,上式对 $\gamma$ 只有一个未知数,数值求根即可解出每个家庭的 $\hat\gamma$。这就是结构估计"由选择数据反推偏好"的核心。
2.4 Cohen-Einav (2007):风险偏好与风险类型的相关
若 $>0$(高风险更买保险)= 逆向选择;若 $<0$(更风险厌恶的人同时更小心/更低风险)= 有利选择(advantageous selection)。风险偏好 $\gamma$ 与风险类型 $\theta$ 的相关性决定了市场是逆向还是有利选择。
03 逆向选择与定价均衡
3.1 Rothschild-Stiglitz 死亡螺旋
设两种风险类型:高风险 $\theta_H$、低风险 $\theta_L$($\theta_H>\theta_L$),人群中高风险占比 $\phi$。若保险公司只能提供单一混合合同,保费必须等于购买者的期望赔付:
当 $p$ 上升,低风险者发现保险不值而退出购买(因为他们的期望损失低),购买池 $\bar\theta_{\text{buyers}}$ 上升 → $p$ 进一步上升 → 更多低风险退出……这就是逆向选择死亡螺旋。极端情况下只有高风险者留在市场,保费等于 $\theta_H L$,低风险者保障不足。
3.2 社会最优 vs 市场均衡
若能强制所有人按人群平均风险投保(或交叉补贴),则人人都被覆盖,规避了低风险者被挤出的问题,总福利更高。
市场均衡因逆向选择导致部分低风险者无保险、承担无谓风险,$\Delta W>0$ 即为福利损失。
04 求解算法
05 代码 1:保险需求混合 Logit 估计
模拟含风险类型与风险厌恶双重异质性的保险选择,用混合 Logit 估计。已实跑验证。
"""
代码块1:保险需求模型 + 混合Logit估计
U_j = (1-theta)u(w-p_j) + theta u(w-p_j-(1-q_j)L) + eps_j
CRRA u(c)=c^(1-gamma)/(1-gamma);theta 与 gamma 均随人异质
"""
import numpy as np
from scipy.optimize import minimize
from scipy.stats import norm
np.random.seed(20240912)
N, w, L = 2000, 10.0, 1.0
p0, q0 = 0.0, 0.0
p1, q1 = 2.0, 0.8 # 保险合同:保费2,赔付80%
# 真实风险类型 theta ~ Logit-Normal(均值~0.25)
logit_t = norm.ppf(0.25) + 0.8*np.random.randn(N)
theta = 1/(1+np.exp(-logit_t))
# 真实风险厌恶 gamma ~ N(1.5, 0.5^2)
gamma = np.clip(1.5 + 0.5*np.random.randn(N), 0.1, 5)
def crra(c, g):
c = np.clip(c, 1e-8, None)
return np.where(np.abs(g-1)<1e-8, np.log(c), c**(1-g)/(1-g))
def EU(theta_i, g, p, q):
return (1-theta_i)*crra(w-p, g) + theta_i*crra(w-p-(1-q)*L, g)
EU0 = EU(theta, gamma, p0, q0)
EU1 = EU(theta, gamma, p1, q1)
P_buy = 1/(1+np.exp(-0.5*(EU1-EU0))) # 尺度=0.5
buy = (np.random.rand(N) < P_buy).astype(int)
print("总体购买率 =", round(buy.mean(),3))
# 混合Logit估计:在R个gamma draws上积分
def neg_ll(params, t_obs, choice):
g_mean, g_sd = params
if g_sd <= 1e-3: return 1e10
lam, R = 0.5, 30
draws = np.clip(g_mean + g_sd*np.random.randn(R,N), 0.05, 5)
P = np.zeros(N)
for r in range(R):
d0 = EU(t_obs, draws[r], p0, q0)
d1 = EU(t_obs, draws[r], p1, q1)
P += (1/(1+np.exp(-lam*(d1-d0))))/R
P = np.clip(P, 1e-6, 1-1e-6)
return -np.sum(choice*np.log(P)+(1-choice)*np.log(1-P))
res = minimize(neg_ll, [1.0,0.3], args=(theta,buy),
method='Nelder-Mead', options={'maxiter':500})
print("估计 gamma 均值 =", round(res.x[0],3), "(真实 1.5)")
print("估计 gamma 标准差 =", round(res.x[1],3), "(真实 0.5)")
总体购买率约 $0.47$;混合 Logit 估计出正的风险厌恶均值(约 $1.0$,落在 CRRA 合理区间 $1\sim4$)与异质性。注意:从二值购买数据单独识别 $\gamma$ 的绝对量级较弱($\gamma$ 与 Logit 尺度参数部分不可分离),真实研究需保费/保障水平的外生变异(如计划菜单、补贴)来加强识别。
06 代码 2:从选择反推风险偏好 $\gamma$
给定"为全额保险愿付的最高保费" WTP,数值求根恢复 $\gamma$。已实跑验证。
"""
代码块2:从 WTP 反推风险偏好 gamma(确定性等价/风险溢价法)
WTP_i = 为全额保险愿付最高保费;u(w-WTP) = EU_no(gamma)
已知 theta,数值求根解 gamma
"""
import numpy as np
from scipy.optimize import brentq
np.random.seed(20240912)
w, L, N = 10.0, 2.0, 5000
gamma_true = np.random.lognormal(np.log(1.5), 0.3, N)
theta = np.full(N, 0.3)
def crra(c, g):
c = np.clip(c, 1e-8, None)
return c**(1-g)/(1-g)
def max_premium(t, g):
EU_no = (1-t)*crra(w,g) + t*crra(w-L,g)
return brentq(lambda p: crra(w-p,g)-EU_no, 1e-6, w-1e-3)
WTP = np.array([max_premium(theta[i], gamma_true[i]) for i in range(N)])
def recover_gamma(wtp, t):
def eq(g):
if g < 0.01: return 1e6
return crra(w-wtp,g) - ((1-t)*crra(w,g)+t*crra(w-L,g))
return brentq(eq, 0.01, 8.0)
g_hat = np.array([recover_gamma(WTP[i], theta[i]) for i in range(N)])
print("E[L] =", theta[0]*L)
print("真实 gamma 均值 =", round(gamma_true.mean(),3))
print("反推 gamma 均值 =", round(np.nanmean(g_hat),3))
期望损失 $E[L]=0.6$,观测 WTP 均值约 $0.676$,风险溢价约 $0.076$;反推的 $\hat\gamma$ 均值(约 $1.57$)几乎精确等于真实值(约 $1.57$),且风险溢价随 $\gamma$ 单调上升($0.05\to0.11$)。这验证了结构反推的可行性。
07 数据与估计
| 数据类型 | 美国来源 | 中国来源 | 用途 |
|---|---|---|---|
| 保险选择+索赔 | auto/health insurer 行政数据 | 车险/重疾险公司保单+理赔 | 选择、出险($\theta$) |
| 家庭金融/风险态度 | SCF | CHFS、CFPS、CHARLS | 财富 $w$、风险态度 |
| 医保数据 | Medicare claims | 城镇职工/居民医保、新农合 | 健康险逆向选择 |
| 外生保费变异 | 雇主计划菜单、补贴 | 医保报销政策试点、车险费率改革 | 识别 $\gamma$ 与需求弹性 |
估计方法:混合 Logit(风险类型异质性)、结构反推(由选择求 $\gamma$ 分布)、SMM。关键参数:$\gamma$(风险厌恶)、$\theta$(风险类型分布)、$\mathrm{Cov}(\theta,\gamma)$(逆向/有利选择程度)。
08 代码 3:逆向选择均衡与最优保险
Rothschild-Stiglitz 式两类型模型:市场均衡(低风险被挤出)vs 社会最优(强制/补贴)。已实跑验证。
"""
代码块3:逆向选择均衡 + 社会最优反事实(Rothschild-Stiglitz)
两类型:theta_H=0.45, theta_L=0.15;高风险占比 phi=0.35
市场保费 p = 购买者平均风险*L(出清);社会最优 p=人群平均风险*L
"""
import numpy as np
from scipy.optimize import brentq
np.random.seed(20240912)
w, L, gamma = 10.0, 1.0, 2.0
theta_L, theta_H, frac_H = 0.15, 0.45, 0.35
N = 10000
type_H = np.random.rand(N) < frac_H
theta_i = np.where(type_H, theta_H, theta_L)
def crra(c, g):
c = np.clip(c, 1e-8, None); return c**(1-g)/(1-g)
def buys(p, t):
return crra(w-p, gamma) >= (1-t)*crra(w,gamma)+t*crra(w-L,gamma)
# 市场均衡固定点
p = 0.3
for _ in range(200):
b = buys(p, theta_i)
if b.sum()==0: p=np.nan; break
p_new = theta_i[b].mean()*L
if abs(p_new-p)<1e-6: p=p_new; break
p = 0.5*p+0.5*p_new
print("市场均衡保费 p* =", round(p,3))
b_eq = buys(p, theta_i)
print("低风险购买率 =", round(b_eq[~type_H].mean(),3))
print("高风险购买率 =", round(b_eq[type_H].mean(),3))
# 社会最优(强制按人群平均风险)
p_social = (frac_H*theta_H+(1-frac_H)*theta_L)*L
print("社会最优保费 =", round(p_social,3))
print("解读:市场保费被高风险推高,低风险退出 -> 保障不足 -> 福利损失。")
print(" 强制/补贴保险可恢复覆盖、消除该福利损失。")
市场均衡保费 $p^*\approx0.45$($=\theta_H$),低风险购买率为 $0$,高风险购买率为 $1$——典型逆向选择解:低风险被完全挤出,保费停在高风险水平。社会最优保费约 $0.255$(人群平均风险),人人被覆盖。政策含义:强制医保、保费补贴、免赔额设计可纠正这一保障不足;中国城乡居民医保、车险费率市场化都涉及此权衡。
(1) 强制保险/补贴对覆盖率与福利的影响;(2) 逆向选择导致的保障不足与福利损失量化;(3) 风险偏好异质性(有利选择)对市场运行的影响;(4) 最优保险合同设计(免赔额、共保比例、cherry-picking)。
09 论文案例
10 常见错误与陷阱
从二值购买数据中,风险厌恶 $\gamma$ 与极值扰动尺度参数 $\lambda$ 只有乘积可识别。必须有保费/保障水平的外生变异(计划菜单、补贴、费率改革)才能识别 $\gamma$ 的绝对量级,否则只识别排序。
不控制出险概率 $\theta$,把"高风险者更买保险"误当成"更风险厌恶"。必须同时建模 $\theta$ 与 $\gamma$,并用索赔数据分离二者。
购买者风险更高 ≠ 一定是逆向选择。若风险厌恶者同时更谨慎(低 $\theta$),可能出现有利选择。要检验 $\mathrm{Cov}(\theta,\gamma)$,而非只看 $P(\text{买}\mid\text{高风险})$。
保费必须等于实际购买者的期望赔付(Eq.21-12),而非人群平均。用错池体会完全错估均衡(死亡螺旋方向都错)。
$u(c)=c^{1-\gamma}/(1-\gamma)$ 在 $c\le0$ 无定义。保费接近财富时数值爆炸,必须截断财富 $c\ge c_{\min}>0$,否则求根/似然不收敛。
保险不仅改变购买(逆向选择),还改变行为(有保险后更不防损)。结构估计若把道德风险效应误归为风险偏好,会高估 $\gamma$。需同时建模事后道德风险。
方程总清单 / Equation Summary
本页全部方程按出现顺序汇总,共 17 个。
| 编号 | 方程名称 | 核心公式 | 所在节 |
|---|---|---|---|
| Eq.21-01 | CRRA 效用 | $u(c)=c^{1-\gamma}/(1-\gamma)$ | 01.1 |
| Eq.21-02 | 两状态财富 | $w-p_j,\ w-p_j-(1-q_j)L$ | 01.2 |
| Eq.21-03 | 期望效用 | $U_j=(1-\theta)u(w-p_j)+\theta u(w-p_j-(1-q_j)L)+\varepsilon_j$ | 01.2 |
| Eq.21-04 | 成本加成定价 | $p_j=E[q_jL\mid\text{选 }j]+\text{markup}$ | 01.3 |
| Eq.21-05 | 条件选择概率 | $P(j\mid\theta,\gamma)=e^{U_j}/\sum_k e^{U_k}$ | 02.1 |
| Eq.21-06 | 边缘概率(混合Logit) | $P_j=\int P(j\mid\theta,\gamma)dF_\theta dF_\gamma$ | 02.1 |
| Eq.21-07 | 不保险期望效用 | $EU_{\text{no}}=(1-\theta)u(w)+\theta u(w-L)$ | 02.2 |
| Eq.21-08 | 确定性等价 CE | $u(CE)=EU_{\text{no}}$ | 02.2 |
| Eq.21-09 | 风险溢价 | $\pi=(w-\theta L)-CE$ | 02.2 |
| Eq.21-10 | 无差异保费反推 $\gamma$ | $u(w-p^*)=EU_{\text{no}}(\gamma)$ | 02.3 |
| Eq.21-11 | 正相关/有利选择检验 | $\mathrm{Cov}(\text{投保},\text{出险}\mid X)\gtrless0$ | 02.4 |
| Eq.21-12 | 混合保费 | $p=\bar\theta_{\text{buyers}}L$ | 03.1 |
| Eq.21-13 | 社会最优保费 | $p_{social}=[\phi\theta_H+(1-\phi)\theta_L]L$ | 03.2 |
| Eq.21-14 | 福利损失 | $\Delta W=CE_{social}-CE_{market}$ | 03.2 |
| Eq.21-15 | 混合 Logit 似然 | $\ell=\sum_i\log P_{j_i^*}$ | 代码1 |
| Eq.21-16 | 无差异保费求根 | $\mathrm{brentq}(u(w-p)-EU_{no})$ | 代码2 |
| Eq.21-17 | 均衡固定点 | $p^{new}=\bar\theta_{\text{buyers}}L$ | 代码3 |