평균 효용 극대화 이론(Expected Utility Maximization Theory)은, 경제학(Economics)에서 자주 언급되는 썰 (Theory) 중에 하나입니다. 이론 응용의 핵심은, 불확실한 결과값 (random variable)이 주어졌을 때 그 결과값으로부터 얻는 정량적 효용(quantitative utility)의 기대값 E[u(x)]E[u(x)]을 계산하고, 위험 회피 성향 계수 (risk aversion)에 따라 그 효용의 기대값과 동일한 효용을 만들어 내는 확실한 결과값 (certainty equivalent)’을 산출하는 것입니다. 그래서 다음과 같은 내용을 구현해 보겠습니다.

  • 효용함수 u(x)u(x)는 대표적인 형태 중 하나인 CRRA(Constant Relative Risk Aversion) 함수 사용
  • 주어진 확률분포 (pi)(p_i)와 결과값 (xi)(x_i)에 대한 효용의 기댓값 E[u(x)]E[u(x)] 계산
  • Risk premium (위험 프리미엄) 계산: 확률적 상황과 확실한 상황의 차이

Definition

  • xx is an observed random variable
  • CRRA 효용함수: u(x)={x1ρ1ρ,ρ1ln(x),ρ=1u(x) = \begin{cases} \frac{x^{1-\rho}}{1-\rho}, & \rho \neq 1 \\ \ln(x), & \rho = 1 \end{cases}
  • 기대효용( Expected Utility ): E[u(x)]=i=1npiu(xi)E[u(x)] = \sum_{i=1}^{n} p_i \cdot u(x_i)
  • CE (Certainty Equivalent): CE=u1(E[u(x)])CE = u^{-1}(E[u(x)])
  • 위험프리미엄 (Risk Premium): π=E[x]CE\pi = E[x] - CE

python
import numpy as np

# 확률과 결과값
probabilities = [0.5, 0.5]
outcomes = [100, 200]

# 일반 효용함수 예시 (제곱근)
def utility_function(x):
    return np.sqrt(x)

# CRRA(Constant Relative Risk Aversion) 효용함수
def crra(x, rho=2):
    x = np.array(x, dtype=float)
    if rho == 1:
        return np.log(x)
    else:
        return (x**(1 - rho)) / (1 - rho)

# CRRA 역함수: 기대효용 → 확실한 가치(CE)
def ce_crra(x, rho=2):
    eu = crra(x, rho).mean()
    if rho == 1:
        return np.exp(eu)
    else:
        return ((1 - rho) * eu) ** (1 / (1 - rho))

# 기대효용 계산
def expected_utility(outcomes, probabilities, utility_function):
    return np.sum([
        utility_function(outcome) * probability
        for outcome, probability in zip(outcomes, probabilities)
    ])

# 위험 프리미엄 계산
def risk_premium(outcomes, probabilities, utility_function):
    expected_value = np.sum([
        outcome * probability
        for outcome, probability in zip(outcomes, probabilities)
    ])
    certainty_equivalent = utility_function(
        expected_utility(outcomes, probabilities, utility_function)
    )
    return expected_value - certainty_equivalent

# 실행 예시
expected_util = expected_utility(outcomes, probabilities, utility_function)
risk_prem = risk_premium(outcomes, probabilities, utility_function)

print("Expected Utility:", expected_util)
print("Risk Premium:", risk_prem)