{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# replicate_han2018.py\n",
    "\n",
    "한치록·김덕파(2018) 「주세 과세체계 개편의 경제적 효과 분석: 가정용 맥주를 중심으로」 재현\n",
    " 원 논문 구성:\n",
    "  2장 출고가격↔소비자가격 관계  → [재현A] 카스 출고가(세후) → CPI 맥주(가정) 전가\n",
    "  3장 맥주 수요함수(AIDS/QUAIDS, 제품·용기별 스캐너) → [재현B] 집계 맥주 탄력성 + [재현C] 국산/수입 대체\n",
    "      (원 논문 핵심인 3제품×용기 AIDS는 닐슨/칸타 스캐너 필요 → 협회 확보 후 완전재현)\n",
    "  4장 산업연관(2014 IO표) → [설계] 최신 2020 실측표로 유발효과 갱신(별도)\n",
    " 원 논문 결과(참고): 자체가격탄력성 수입프리미엄 -4.8~-6.0, 국산코어 -1.8~-1.9, 국산프리미엄 -0.2~-1.0\n",
    "                    교차: 국산가격1%↑→수입판매 +3.1~3.7%, 수입가격1%↑→국산판매 +1.0~1.4% (수입이 더 탄력적)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# -*- coding: utf-8 -*-\n",
    "\"\"\"한치록·김덕파(2018) 「주세 과세체계 개편의 경제적 효과 분석: 가정용 맥주를 중심으로」 재현\n",
    " 원 논문 구성:\n",
    "  2장 출고가격↔소비자가격 관계  → [재현A] 카스 출고가(세후) → CPI 맥주(가정) 전가\n",
    "  3장 맥주 수요함수(AIDS/QUAIDS, 제품·용기별 스캐너) → [재현B] 집계 맥주 탄력성 + [재현C] 국산/수입 대체\n",
    "      (원 논문 핵심인 3제품×용기 AIDS는 닐슨/칸타 스캐너 필요 → 협회 확보 후 완전재현)\n",
    "  4장 산업연관(2014 IO표) → [설계] 최신 2020 실측표로 유발효과 갱신(별도)\n",
    " 원 논문 결과(참고): 자체가격탄력성 수입프리미엄 -4.8~-6.0, 국산코어 -1.8~-1.9, 국산프리미엄 -0.2~-1.0\n",
    "                    교차: 국산가격1%↑→수입판매 +3.1~3.7%, 수입가격1%↑→국산판매 +1.0~1.4% (수입이 더 탄력적)\n",
    "\"\"\"\n",
    "import sys, io, json\n",
    "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",
    "\n",
    "def num(s): return pd.to_numeric(pd.Series(s).astype(str).str.replace(',','',regex=False),errors='coerce')\n",
    "\n",
    "# ================= 재현A: 2장 출고가→소비자가 전가 (카스 → CPI 맥주 가정) =================\n",
    "print('===== [재현A] 2장 출고가격→소비자가격 전가 (국산코어=카스) =====')\n",
    "cass=pd.read_csv(B+'/DART/cass_monthly.csv')\n",
    "cass['ym']=cass.year*100+cass.month\n",
    "cpi=pd.read_csv(B+'/한국은행_ECOS/CPI_품목별_소주맥주_200601_202512.csv')\n",
    "cpi_b=cpi[cpi.품목=='맥주'][['시점','값']].rename(columns={'시점':'ym','값':'cpi_beer'})\n",
    "m=pd.merge(cass[['ym','year','month','price500','cost','juse','edu']], cpi_b, on='ym', how='inner').sort_values('ym')\n",
    "m['tax']=m.juse+m.edu\n",
    "m['ln_ship']=np.log(m.price500); m['ln_cpi']=np.log(m.cpi_beer)\n",
    "m['d_ln_ship']=m.ln_ship.diff(); m['d_ln_cpi']=m.ln_cpi.diff()\n",
    "m=m.dropna(subset=['d_ln_ship','d_ln_cpi'])\n",
    "# 전가: 소비자물가 변화가 출고가 변화에 반응하는 탄력 (누적: 당월+시차)\n",
    "m['d_ln_ship_l1']=m.d_ln_ship.shift(1)\n",
    "r1=smf.ols('d_ln_cpi ~ d_ln_ship', data=m).fit(cov_type='HC1')\n",
    "r2=smf.ols('d_ln_cpi ~ d_ln_ship + d_ln_ship_l1', data=m.dropna()).fit(cov_type='HC1')\n",
    "pt_cum=r2.params['d_ln_ship']+r2.params['d_ln_ship_l1']\n",
    "print(f'출고가→소비자가 전가(당월) 탄력 = {r1.params[\"d_ln_ship\"]:.3f} (t={r1.tvalues[\"d_ln_ship\"]:.2f})')\n",
    "print(f'출고가→소비자가 전가(당월+1개월 누적) = {pt_cum:.3f}')\n",
    "print(f'해석: 출고가 1% 변화 → 가정용 맥주 CPI {r1.params[\"d_ln_ship\"]:.2f}% (동행), 누적 {pt_cum:.2f}%')\n",
    "\n",
    "# ================= 재현B: 3장 집계 맥주 수요함수 (연간, 국세 출고량 + 물가) =================\n",
    "print('\\n===== [재현B] 3장 맥주 수요함수 — 집계 자체가격탄력성 (연간) =====')\n",
    "g=pd.read_csv(B+'/국세청_국세통계/주세신고_주종별_제조수입_2006_2025.csv')\n",
    "g['값']=num(g['값'])\n",
    "bt=g[(g.주종=='맥주')&(g.지표=='출고량')].pivot_table(index='연도',columns='구분',values='값')\n",
    "bt['국산']=bt['합계']-bt['수입분']; bt['수입']=bt['수입분']\n",
    "bt=bt.reset_index().rename(columns={'합계':'전체'})\n",
    "# 연 CPI 맥주(가정) 평균\n",
    "cpi_b['yr']=(cpi_b.ym//100); cy=cpi_b.groupby('yr').cpi_beer.mean().reset_index().rename(columns={'yr':'연도'})\n",
    "# 국내 실질 프록시 소득: 사용 안 하고 추세로 통제(간이)\n",
    "d=pd.merge(bt,cy,on='연도',how='inner')\n",
    "d=d[(d.연도>=2006)&(d.연도<=2024)].copy()\n",
    "d['ln_q']=np.log(d['전체']); d['ln_p']=np.log(d.cpi_beer); d['t']=d.연도-2006\n",
    "mB1=smf.ols('ln_q ~ ln_p', data=d).fit(cov_type='HC1')\n",
    "mB2=smf.ols('ln_q ~ ln_p + t', data=d).fit(cov_type='HC1')\n",
    "print(f'(무통제)   ε_맥주전체 = {mB1.params[\"ln_p\"]:+.2f} (t={mB1.tvalues[\"ln_p\"]:.2f})')\n",
    "print(f'(추세통제) ε_맥주전체 = {mB2.params[\"ln_p\"]:+.2f} (t={mB2.tvalues[\"ln_p\"]:.2f})')\n",
    "print('  ※ 원 논문 국산코어 자체가격탄력성 -1.8~-1.9(수요체계). 집계·단일식은 대체효과 미포함→절댓값 작음.')\n",
    "\n",
    "# ================= 재현C: 3장 국산 vs 수입 대체 (핵심 정성결과) =================\n",
    "print('\\n===== [재현C] 3장 국산/수입 맥주 — 점유율·대체 (종량세 2020 자연실험) =====')\n",
    "bt['수입점유율']=bt['수입']/bt['전체']*100\n",
    "sh=bt[['연도','전체','국산','수입','수입점유율']]\n",
    "sh=sh[(sh.연도>=2013)&(sh.연도<=2024)]\n",
    "print(sh.round(1).to_string(index=False))\n",
    "pre=sh[(sh.연도>=2017)&(sh.연도<=2019)].수입점유율.mean()\n",
    "post=sh[(sh.연도>=2021)&(sh.연도<=2023)].수입점유율.mean()\n",
    "print(f'\\n수입맥주 점유율: 종량세 前(2017-19) {pre:.1f}% → 後(2021-23) {post:.1f}%  (변화 {post-pre:+.1f}%p)')\n",
    "print('  해석: 종량세(2020)로 종가세 하 수입맥주 과세 우위가 해소 → 논문 예측(국산/수입 불공정 시정 시 국산 유리)과 부합' if post<pre\n",
    "      else '  주의: 수입 점유율이 하락하지 않음 → 코로나·수입다변화 등 교란 점검 필요')\n",
    "\n",
    "# 저장\n",
    "out=dict(\n",
    "  passthrough_ship_to_cpi=round(float(r1.params['d_ln_ship']),3),\n",
    "  passthrough_cum=round(float(pt_cum),3),\n",
    "  beer_elast_notrend=round(float(mB1.params['ln_p']),3),\n",
    "  beer_elast_trend=round(float(mB2.params['ln_p']),3),\n",
    "  import_share_pre=round(float(pre),2), import_share_post=round(float(post),2),\n",
    "  paper_ref=dict(수입프리미엄=\"-4.8~-6.0\",국산코어=\"-1.8~-1.9\",국산프리미엄=\"-0.2~-1.0\")\n",
    ")\n",
    "json.dump(out,open(B+'/문헌/han2018_replication.json','w',encoding='utf-8'),ensure_ascii=False,indent=2)\n",
    "sh.round(2).to_csv(B+'/문헌/han2018_import_share.csv',index=False,encoding='utf-8-sig')\n",
    "print('\\n저장: 문헌/han2018_replication.json, han2018_import_share.csv')\n",
    "print(json.dumps(out,ensure_ascii=False))\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "name": "python",
   "version": "3.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}