{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# han_aids_2good.py\n",
    "\n",
    "한치록·김덕파(2018) 맥주 수요체계(AIDS) 축소재현 — 국산 vs 수입 2재화, 종가세기 2006~2019\n",
    " 자료: 국세청 주세신고(맥주) 국산/수입 출고량·과세표준(종가세=신고 출고금액)\n",
    " 방법: LA-AIDS 지출몫 방정식(Stone 물가지수), 동차성 부과 → Marshallian 자체/교차/지출 탄력성\n",
    " 주의: 연 14obs·집계 → 정밀도 낮음. 논문의 제품·용기별(수입프리미엄/국산코어…) 큰 탄력성은 스캐너 필요.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# -*- coding: utf-8 -*-\n",
    "\"\"\"한치록·김덕파(2018) 맥주 수요체계(AIDS) 축소재현 — 국산 vs 수입 2재화, 종가세기 2006~2019\n",
    " 자료: 국세청 주세신고(맥주) 국산/수입 출고량·과세표준(종가세=신고 출고금액)\n",
    " 방법: LA-AIDS 지출몫 방정식(Stone 물가지수), 동차성 부과 → Marshallian 자체/교차/지출 탄력성\n",
    " 주의: 연 14obs·집계 → 정밀도 낮음. 논문의 제품·용기별(수입프리미엄/국산코어…) 큰 탄력성은 스캐너 필요.\n",
    "\"\"\"\n",
    "import sys,io,json; sys.stdout=io.TextIOWrapper(sys.stdout.buffer,encoding='utf-8')\n",
    "import numpy as np, pandas as pd, statsmodels.formula.api as smf\n",
    "B='C:/Temp/주류세/공개데이터'\n",
    "g=pd.read_csv(B+'/국세청_국세통계/주세신고_주종별_제조수입_2006_2025.csv')\n",
    "g['값']=pd.to_numeric(g['값'].astype(str).str.replace(',',''),errors='coerce')\n",
    "def piv(ind):\n",
    "    p=g[(g.주종=='맥주')&(g.지표==ind)].pivot_table(index='연도',columns='구분',values='값')\n",
    "    return p\n",
    "vol=piv('출고량'); tax=piv('과세표준_종가세')   # tax=과세표준(≈신고 출고금액, 백만원 단위 가정)\n",
    "d=pd.DataFrame(index=vol.index)\n",
    "d['q_imp']=vol['수입분']; d['q_dom']=vol['합계']-vol['수입분']\n",
    "d['x_imp']=tax['수입분']; d['x_dom']=tax['합계']-tax['수입분']     # 매출(지출)\n",
    "d=d.dropna()\n",
    "d=d[(d.index>=2006)&(d.index<=2019)]\n",
    "d['p_imp']=d.x_imp/d.q_imp; d['p_dom']=d.x_dom/d.q_dom            # 단가=매출/물량\n",
    "d['X']=d.x_imp+d.x_dom\n",
    "d['w_imp']=d.x_imp/d.X; d['w_dom']=d.x_dom/d.X\n",
    "# CPI 맥주로 실질화(선택) — 지출 실질화용\n",
    "cpi=pd.read_csv(B+'/한국은행_ECOS/CPI_품목별_소주맥주_200601_202512.csv')\n",
    "cb=cpi[cpi.품목=='맥주'].copy(); cb['yr']=cb.시점//100; cyr=cb.groupby('yr').값.mean()\n",
    "d['cpi']=d.index.map(cyr)\n",
    "# Stone 물가지수 lnP* = Σ w_i ln p_i\n",
    "d['lnP']=d.w_imp*np.log(d.p_imp)+d.w_dom*np.log(d.p_dom)\n",
    "d['ln_XP']=np.log(d.X/d.cpi)                     # 실질 총지출(맥주)\n",
    "d['ln_rel']=np.log(d.p_imp/d.p_dom)              # 상대가격(동차성 부과)\n",
    "d['t']=d.index-2006\n",
    "print('===== 기초 (맥주 국산/수입, 2006~2019) =====')\n",
    "print(d[['q_imp','q_dom','p_imp','p_dom','w_imp']].round(3).to_string())\n",
    "print(f'\\n수입 지출몫 w_imp: {d.w_imp.iloc[0]:.3f}(2006) → {d.w_imp.iloc[-1]:.3f}(2019)')\n",
    "print(f'상대가격 p_imp/p_dom: {(d.p_imp/d.p_dom).iloc[0]:.2f} → {(d.p_imp/d.p_dom).iloc[-1]:.2f}')\n",
    "\n",
    "def aids(df, use_trend):\n",
    "    f='w_imp ~ ln_rel + ln_XP' + (' + t' if use_trend else '')\n",
    "    m=smf.ols(f,data=df).fit(cov_type='HC1')\n",
    "    g_ii=m.params['ln_rel']          # γ_imp,imp (동차성: γ_imp,dom=-γ)\n",
    "    b_i =m.params['ln_XP']           # β_imp\n",
    "    wi=df.w_imp.mean(); wd=df.w_dom.mean()\n",
    "    # Marshallian (LA-AIDS): e_ij=-δ_ij+(γ_ij-β_i w_j)/w_i\n",
    "    e_ii=-1+(g_ii - b_i*wi)/wi\n",
    "    e_id= 0+(-g_ii - b_i*wd)/wi\n",
    "    # 국산(adding-up): β_dom=-β_imp, γ_dom,dom=γ, γ_dom,imp=-γ\n",
    "    e_dd=-1+(g_ii - (-b_i)*wd)/wd\n",
    "    e_di= 0+(-g_ii - (-b_i)*wi)/wd\n",
    "    eta_i=1+b_i/wi; eta_d=1+(-b_i)/wd\n",
    "    return m,dict(gamma=g_ii,beta=b_i,e_imp_imp=e_ii,e_imp_dom=e_id,e_dom_dom=e_dd,e_dom_imp=e_di,eta_imp=eta_i,eta_dom=eta_d,wi=wi,wd=wd)\n",
    "\n",
    "for lab,tr in [('추세 미통제',False),('추세(연도) 통제',True)]:\n",
    "    m,r=aids(d,tr)\n",
    "    print(f'\\n===== AIDS [{lab}] (R²={m.rsquared:.2f}) =====')\n",
    "    print(f'  γ(ln상대가)={r[\"gamma\"]:+.3f}(t={m.tvalues[\"ln_rel\"]:.2f})  β(ln실질지출)={r[\"beta\"]:+.3f}(t={m.tvalues[\"ln_XP\"]:.2f})')\n",
    "    print(f'  [자체가격탄력성] 수입 e={r[\"e_imp_imp\"]:+.2f} | 국산 e={r[\"e_dom_dom\"]:+.2f}')\n",
    "    print(f'  [교차가격탄력성] 수입수요의 국산가격탄력성(국산가↑→수입) {r[\"e_imp_dom\"]:+.2f} · 국산수요의 수입가격탄력성(수입가↑→국산) {r[\"e_dom_imp\"]:+.2f}')\n",
    "    print(f'  [지출탄력성] 수입 {r[\"eta_imp\"]:+.2f} | 국산 {r[\"eta_dom\"]:+.2f}   (평균몫 수입 {r[\"wi\"]:.2f}/국산 {r[\"wd\"]:.2f})')\n",
    "    if tr: OUT=r; OUT['R2']=m.rsquared; OUT['t_gamma']=float(m.tvalues['ln_rel']); OUT['t_beta']=float(m.tvalues['ln_XP'])\n",
    "\n",
    "print('\\n[원논문(한치록·김덕파 2018) 대조] 자체가격탄력성: 수입프리미엄 -4.8~-6.0, 국산코어 -1.8~-1.9')\n",
    "print(' → 본 축소재현은 수입<->국산 2군 집계·연간이라 절댓값은 작으나, 수입이 국산보다 더 탄력적이면 정성 일치')\n",
    "json.dump({k:(round(v,3) if isinstance(v,float) else v) for k,v in OUT.items()},\n",
    "          open(B+'/문헌/han2018_aids_2good.json','w',encoding='utf-8'),ensure_ascii=False,indent=2)\n",
    "d.round(4).to_csv(B+'/문헌/han2018_aids_data.csv',encoding='utf-8-sig')\n",
    "print('\\n저장: 문헌/han2018_aids_2good.json, han2018_aids_data.csv')\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "name": "python",
   "version": "3.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}