diff --git a/book/ate/propensity_score_and_dml.ipynb b/book/ate/propensity_score_and_dml.ipynb index c2e7639..4aa819e 100644 --- a/book/ate/propensity_score_and_dml.ipynb +++ b/book/ate/propensity_score_and_dml.ipynb @@ -11,9 +11,2650 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "- Matching\n", - "- IPW, AIPW, Doubly Robust Estimator\n", - "- Double Machine Learning (비모수 버전의 Regression 처럼 활용 가능)" + "- IPW, AIPW, Doubly Robust Estimator" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### **Propensity Score 추정**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "출처: https://matheusfacure.github.io/python-causality-handbook/11-Propensity-Score.html" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "IPW와 AIPW, Doubly Robust 모두 Propensity Score를 활용한 개념들이기 때문에 먼저 Propensity Score부터 간단하게 구해보겠습니다." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import warnings\n", + "warnings.filterwarnings('ignore')\n", + "\n", + "import pandas as pd\n", + "import numpy as np\n", + "from causalinference import CausalModel" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
schoolidinterventionachievement_scoresuccess_expectethnicitygenderfrst_in_familyschool_urbanicityschool_mindsetschool_achievementschool_ethnic_minorityschool_povertyschool_size
2597311.48082851201-0.4629450.652608-0.515202-0.1698490.173954
3435760-0.9872775131140.3345440.648586-1.3109270.224077-0.426757
996340-0.15234052210-2.2896360.1907970.875012-0.7248010.761781
44886700.358336614104-1.1153371.0530890.3157550.0545861.862187
26371611.36092064101-0.5389751.433826-0.033161-0.9822741.591641
\n", + "
" + ], + "text/plain": [ + " schoolid intervention achievement_score success_expect ethnicity \\\n", + "259 73 1 1.480828 5 1 \n", + "3435 76 0 -0.987277 5 13 \n", + "9963 4 0 -0.152340 5 2 \n", + "4488 67 0 0.358336 6 14 \n", + "2637 16 1 1.360920 6 4 \n", + "\n", + " gender frst_in_family school_urbanicity school_mindset \\\n", + "259 2 0 1 -0.462945 \n", + "3435 1 1 4 0.334544 \n", + "9963 2 1 0 -2.289636 \n", + "4488 1 0 4 -1.115337 \n", + "2637 1 0 1 -0.538975 \n", + "\n", + " school_achievement school_ethnic_minority school_poverty school_size \n", + "259 0.652608 -0.515202 -0.169849 0.173954 \n", + "3435 0.648586 -1.310927 0.224077 -0.426757 \n", + "9963 0.190797 0.875012 -0.724801 0.761781 \n", + "4488 1.053089 0.315755 0.054586 1.862187 \n", + "2637 1.433826 -0.033161 -0.982274 1.591641 " + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data = pd.read_csv(\"../data/matheus_data/learning_mindset.csv\")\n", + "data.sample(5, random_state=5)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Propensity Score 계산" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "categ = [\"ethnicity\", \"gender\", \"school_urbanicity\"]\n", + "cont = [\"school_mindset\", \"school_achievement\", \"school_ethnic_minority\", \"school_poverty\", \"school_size\"]\n", + "\n", + "data_with_categ = pd.concat([\n", + " data.drop(columns=categ), \n", + " pd.get_dummies(data[categ], columns=categ, drop_first=False)\n", + "], axis=1)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.linear_model import LogisticRegression\n", + "\n", + "T = 'intervention'\n", + "Y = 'achievement_score'\n", + "X = data_with_categ.columns.drop(['schoolid', T, Y])\n", + "\n", + "ps_model = LogisticRegression(C=1e6).fit(data_with_categ[X], data_with_categ[T])\n", + "\n", + "data_ps = data.assign(propensity_score=ps_model.predict_proba(data_with_categ[X])[:, 1])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## **IPW 및 ATE 추정**" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "from sklearn.linear_model import LogisticRegression, Ridge\n", + "from causallib.estimation.standardization import Standardization\n", + "from causallib.estimation.ipw import IPW\n", + "from causallib.estimation.doubly_robust import AIPW" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 1) IPW로 가상(Pseudo) 모집단 생성 \n", + "\n", + "표본의 각 개체에 IPW 적용 \n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Original Sample Size 10391\n", + "Treated Population Sample Size 10387.611324207002\n", + "Untreated(Control) Population Sample Size 10391.506162305861\n" + ] + } + ], + "source": [ + "weight_t = 1/data_ps.query(\"intervention==1\")[\"propensity_score\"]\n", + "weight_nt = 1/(1-data_ps.query(\"intervention==0\")[\"propensity_score\"])\n", + "print(\"Original Sample Size\", data.shape[0])\n", + "print(\"Treated Population Sample Size\", sum(weight_t))\n", + "print(\"Untreated(Control) Population Sample Size\", sum(weight_nt))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### 2) ATE 추정\n", + "\n", + "이제 Pseudo 집단에서의 Treat그룹과 Control그룹 각각의 Average Potential Outcome을 구하고, 이를 토대로 ATE를 추정합니다." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Y1: 0.25981027799629486\n", + "Y0: -0.12903052783749974\n", + "ATE 0.38884080583379527\n" + ] + } + ], + "source": [ + "weight = ((data_ps[\"intervention\"]-data_ps[\"propensity_score\"]) /\n", + " (data_ps[\"propensity_score\"]*(1-data_ps[\"propensity_score\"])))\n", + "\n", + "y1_ipw = sum(data_ps.query(\"intervention==1\")[\"achievement_score\"]*weight_t) / len(data)\n", + "y0_ipw = sum(data_ps.query(\"intervention==0\")[\"achievement_score\"]*weight_nt) / len(data)\n", + "\n", + "ate_ipw = y1_ipw - y0_ipw\n", + "#ate = np.mean(weight * data_ps[\"achievement_score\"]) -> 이렇게도 ATE 계산 가능\n", + "\n", + "print(\"Y1:\", y1_ipw)\n", + "print(\"Y0:\", y0_ipw)\n", + "print(\"ATE\", np.mean(weight * data_ps[\"achievement_score\"]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**결과 해석**: \n", + "1. Treatment 받은 개인이 Treatment 받지 않은 동료보다 achievement_score가 0.38 표준편차 더 크다. (achievement_score는 표준화된 결과이기 때문에 표준 편차의 차이로 해석)\n", + "2. 아무도 Treatment 받지 않은 경우 일반적인 성취 수준이 현재보다 0.12 표준편차 더 낮다.\n", + "3. 모든 사람이 Treatment(세미나)를 받았다면 일반적인 성취 수준이 0.25 표준편차 더 높음." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "또한 ate를 나타내는 하나의 코드가 더 있다. \n", + "위의 코드에 주석처리한 부분을 그대로 실행해보면 똑같은 결과를 얻을 수 있는 것을 알 수 있다." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "두 결과값이 같은 이유는 Matheus Facure(출처)의 책에서 자세히 설명되어 있다. \n", + "(참고: $ \\mathrm{ATE}=\\mathbb{E}\\!\\left[\\, Y\\,\\dfrac{T-e(X)}{e(X)\\,\\bigl(1-e(X)\\bigr)} \\right] $)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## **Doubly Robust Estimator & AIPW**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "출처: https://causallib.readthedocs.io/en/latest/causallib.estimation.doubly_robust.html?highlight=doubly" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.model_selection import KFold\n", + "from causallib.estimation.ipw import IPW\n", + "from causallib.estimation.doubly_robust import AIPW\n", + "from causallib.estimation.standardization import Standardization\n", + "from sklearn.linear_model import LogisticRegression, LinearRegression, Ridge" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "Y = data[\"achievement_score\"]\n", + "T = data[\"intervention\"]\n", + "X = pd.get_dummies(\n", + " data[[\"school_mindset\",\"school_achievement\",\"school_ethnic_minority\",\n", + " \"school_poverty\",\"school_size\",\"ethnicity\",\"gender\",\"school_urbanicity\"]],\n", + " drop_first=False\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "DR Estimator는 결과모형과 IPW값이 모두 필요함 \n", + "- Y값(achievement_score)을 Ridge로 예측(L2 패널티 부여) \n", + "- IPW: 로지스틱 회귀 사용" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "outcome_model = Standardization(learner=Ridge(alpha=1.0))\n", + "weight_model = IPW(learner=LogisticRegression(max_iter=1000),\n", + " clip_min=0.01, clip_max=0.99, use_stabilized=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Propensity Score를 구할 때 max_iter을 충분히 큰 숫자(1000)으로 설정해 수치 최적화가 수렴할 수 있도록 설정합니다. \n", + "또한 클리핑을 사용하여 $ \\hat{e} $가 [0.01, 0.99]에서만 존재하도록 극단 가중치를 완화합니다 (use_stabilized = True). " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### AIPW 추정" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "위에서 구한 PS와 IPW를 활용하여 AIPW를 구합니다." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
AIPW(_doc_link_module=sklearn, _doc_link_template=https://scikit-learn.org/1.5/modules/generated/{estimator_module}.{estimator_name}.html, _doc_link_url_param_generator=None, outcome_covariates=None, outcome_model=Standardization(_doc_link_module=sklearn, _doc_link_template=https://scikit-learn.org/1.5/modules/generated/{estimator_module}.{estimator_name}.html, _doc_link_url_param_generator=None, encode_treatment=False, predict_proba=False,\n",
+       "                learner=Ridge()), overlap_weighting=False, predict_proba=False, weight_covariates=None,\n",
+       "     weight_model=IPW(_doc_link_module=sklearn, _doc_link_template=https://scikit-learn.org/1.5/modules/generated/{estimator_module}.{estimator_name}.html, _doc_link_url_param_generator=None, clip_max=0.99, clip_min=0.01, use_stabilized=True, verbose=False,\n",
+       "    learner=LogisticRegression(max_iter=1000)))
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ], + "text/plain": [ + "AIPW(_doc_link_module=sklearn, _doc_link_template=https://scikit-learn.org/1.5/modules/generated/{estimator_module}.{estimator_name}.html, _doc_link_url_param_generator=None, outcome_covariates=None, outcome_model=Standardization(_doc_link_module=sklearn, _doc_link_template=https://scikit-learn.org/1.5/modules/generated/{estimator_module}.{estimator_name}.html, _doc_link_url_param_generator=None, encode_treatment=False, predict_proba=False,\n", + " learner=Ridge()), overlap_weighting=False, predict_proba=False, weight_covariates=None,\n", + " weight_model=IPW(_doc_link_module=sklearn, _doc_link_template=https://scikit-learn.org/1.5/modules/generated/{estimator_module}.{estimator_name}.html, _doc_link_url_param_generator=None, clip_max=0.99, clip_min=0.01, use_stabilized=True, verbose=False,\n", + " learner=LogisticRegression(max_iter=1000)))" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dr = AIPW(outcome_model=outcome_model, weight_model=weight_model, overlap_weighting=False)\n", + "dr.fit(X, T, Y)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "μ1 (A=1): 0.30329930792804977\n", + "μ0 (A=0): -0.1471130386820095\n", + "ATE (DR, vanilla): 0.45041234661005924\n" + ] + } + ], + "source": [ + "pop_outcomes = dr.estimate_population_outcome(X, T, Y)\n", + "mu1_aipw, mu0_aipw = pop_outcomes[1], pop_outcomes[0]\n", + "ate_aipw = dr.estimate_effect(mu1_aipw, mu0_aipw, agg=\"population\")[\"diff\"]\n", + "print(\"μ1 (A=1):\", mu1_aipw)\n", + "print(\"μ0 (A=0):\", mu0_aipw)\n", + "print(\"ATE (DR, vanilla):\", ate_aipw)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**결과 해석**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "결과 해석은 IPW에서와 마찬가지로 생각하면 됩니다. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "위에서 구한 AIPW는 Propensity Score의 Overlap이 충분히 확보되었을 때는 좋은 결과를 나타냅니다. \n", + "하지만 Overlap 구간이 불안정할 때는 Overlap-weighting = True이라는 기능을 활용해도 좋습니다." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
AIPW(_doc_link_module=sklearn, _doc_link_template=https://scikit-learn.org/1.5/modules/generated/{estimator_module}.{estimator_name}.html, _doc_link_url_param_generator=None, outcome_covariates=None, outcome_model=Standardization(_doc_link_module=sklearn, _doc_link_template=https://scikit-learn.org/1.5/modules/generated/{estimator_module}.{estimator_name}.html, _doc_link_url_param_generator=None, encode_treatment=False, predict_proba=False,\n",
+       "                learner=Ridge()), overlap_weighting=True, predict_proba=False, weight_covariates=None,\n",
+       "     weight_model=IPW(_doc_link_module=sklearn, _doc_link_template=https://scikit-learn.org/1.5/modules/generated/{estimator_module}.{estimator_name}.html, _doc_link_url_param_generator=None, clip_max=0.99, clip_min=0.01, use_stabilized=True, verbose=False,\n",
+       "    learner=LogisticRegression(max_iter=1000)))
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" + ], + "text/plain": [ + "AIPW(_doc_link_module=sklearn, _doc_link_template=https://scikit-learn.org/1.5/modules/generated/{estimator_module}.{estimator_name}.html, _doc_link_url_param_generator=None, outcome_covariates=None, outcome_model=Standardization(_doc_link_module=sklearn, _doc_link_template=https://scikit-learn.org/1.5/modules/generated/{estimator_module}.{estimator_name}.html, _doc_link_url_param_generator=None, encode_treatment=False, predict_proba=False,\n", + " learner=Ridge()), overlap_weighting=True, predict_proba=False, weight_covariates=None,\n", + " weight_model=IPW(_doc_link_module=sklearn, _doc_link_template=https://scikit-learn.org/1.5/modules/generated/{estimator_module}.{estimator_name}.html, _doc_link_url_param_generator=None, clip_max=0.99, clip_min=0.01, use_stabilized=True, verbose=False,\n", + " learner=LogisticRegression(max_iter=1000)))" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dr_overlap = AIPW(outcome_model=outcome_model,\n", + " weight_model=weight_model,\n", + " overlap_weighting=True)\n", + "dr_overlap.fit(X, T, Y)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " ATE(DR, overlap-weighting): 0.3467411782171299\n" + ] + } + ], + "source": [ + "pop_outcomes_ov = dr_overlap.estimate_population_outcome(X, T, Y)\n", + "ate_ov = dr_overlap.estimate_effect(pop_outcomes_ov[1], pop_outcomes_ov[0],\n", + " agg=\"population\")[\"diff\"]\n", + "print(\" ATE(DR, overlap-weighting):\", ate_ov)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Summary" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + " estimator μ1 μ0 ATE\n", + "0 IPW (manual) 0.259810 -0.129031 0.388841\n", + "1 AIPW (vanilla) 0.303299 -0.147113 0.450412\n", + "2 AIPW (overlap) NaN NaN 0.346741\n" + ] + } + ], + "source": [ + "results = pd.DataFrame([\n", + " [\"IPW (manual)\", y1_ipw, y0_ipw, ate_ipw],\n", + " [\"AIPW (vanilla)\", mu1_aipw, mu0_aipw, ate_aipw],\n", + " [\"AIPW (overlap)\", np.nan, np.nan, ate_ov]\n", + "], columns=[\"estimator\", \"μ1\", \"μ0\", \"ATE\"])\n", + "print(results)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "위에서 사용한 방법에 따라 ATE 값이 다르게 나타나는 것을 알 수 있습니다. \n", + " \n", + "하지만 Overlap-Weighting 옵션을 사용한 경우에는 ATE가 아닌 ATO를 추정한 것이고 둘을 직접 비교하는 것은 맞지 않을 수 있습니다. \n", + " \n", + "분석의 목적이 ATE를 추정하는 것인지 ATO를 추정하는 것인지 확인한 후 적절히 사용하면 됩니다. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## **Robustness Check의 흐름**\n", + "\n", + "각각의 수치에 대한 검증은 필수입니다. \n", + "어떤 수치가 더 Robust하게 추정이 된 걸까요? \n", + "\n", + "Yang et al., 2019, Gastrointest Endosc 및 Austin, 2021, Statistic in Medicine 논문을 참고하여 IPW에 대한 Robustness Check을 진행해보도록 하겠습니다. \n", + "순서는 다음과 같습니다.\n", + "\n", + "1) **IPW 가중 전, 후 |SMD| 변화 확인**\n", + "\n", + "2) **Propensity Score의 Overlap 확인**\n", + "\n", + "3) **IPW 가중 이후 ESS 및 VIF 확인**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "먼저 IPW로 구한 ATE의 신빙성을 테스트 해보겠습니다." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "출처: https://causallib.readthedocs.io/en/latest/causallib.evaluation.plots.plots.html" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "from causallib.evaluation.plots.plots import plot_propensity_score_distribution\n", + "from causallib.evaluation import evaluate" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### IPW 가중 전, 후 |SMD| 변화 확인" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "res = evaluate(weight_model, X, T, Y, cv=\"auto\")\n", + "res.plot_covariate_balance(kind=\"love\", phase=\"valid\", thresh=0.1)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Weighted이후에 |SMD|가 더 줄어든 것을 보았을 때, Weighted 이후 밸런스가 개선되었음을 확인할 수 있습니다. \n", + "|SMD| < 0.1 이 목표" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Propensity Score Overlap\n", + "아래는 처음에 Logistic Regression으로 추정한 Propensity Score의 Distribution을 나타낸 것입니다." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjIAAAHHCAYAAACle7JuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABJuUlEQVR4nO3deVyU5f7/8fdIMoBsirigKJi7KVqUopVyslw6LUdLUyvcT6WZGp2jLSKaYWWlpWlaga1mttjJytQ0T4ZmmWXqUVFcWlyyBBFFhev3Rz/m68jiDMzADL6ej8c8HnNf93Xf9+eae2Q+Xvd1X7fFGGMEAADghapVdgAAAABlRSIDAAC8FokMAADwWiQyAADAa5HIAAAAr0UiAwAAvBaJDAAA8FokMgAAwGuRyAAAAK9FIgPA5aKiojR48ODKDqNY3bp1U7du3SrkWBaLRZMnT7YtT548WRaLRb///nuFHN+TzwPgKiQygIukpaXJYrHYXn5+fmrevLlGjx6tQ4cOVXZ4lWrbtm2aPHmy9u7d69L9Dh482O4zDwwMVJMmTXTbbbfpvffeU0FBgUuO8/XXX2vy5Mk6duyYS/bnSp4cG1ARLqnsAICqZsqUKYqOjtapU6f01Vdfae7cufrkk0/0008/KSAgoLLDqxA7duxQtWr/9/+kbdu2KTk5Wd26dVNUVJRLj2W1WvXyyy9Lkk6ePKl9+/bpP//5j2677TZ169ZNS5cuVXBwsK3+559/7vQxvv76ayUnJ2vw4MEKDQ11eLuTJ0/qkkvc+2e2tNjOPw9AVUQiA7hYr169FBsbK0kaPny4wsLC9Oyzz2rp0qUaMGBAsducOHFCNWrUqMgw3cpqtVbYsS655BLdeeeddmWPP/64pk+frokTJ2rEiBF65513bOt8fX3dGk9BQYFOnz4tPz8/+fn5ufVYF1KR5wGoLKTqgJv97W9/kyRlZmZK+utySGBgoHbv3q3evXsrKChIgwYNkvRXQvPggw8qMjJSVqtVLVq00IwZM3T+Q+otFotGjx6tN998Uy1atJCfn5+uuOIKrV27tsjxf/nlFw0dOlR169aV1WpVmzZt9Oqrr9rVWbNmjSwWixYvXqxp06apYcOG8vPz03XXXaeMjAy7urt27VLfvn1Vr149+fn5qWHDhrrjjjuUlZVlq3Pu2Iy0tDTdfvvtkqT4+HjbZaA1a9YoISFBtWvX1pkzZ4rEfcMNN6hFixbOfNR2JkyYoBtuuEHvvvuudu7caSsvbozMCy+8oDZt2iggIEA1a9ZUbGys3nrrLUl/jWt56KGHJEnR0dG2+Asvk517Ltq0aSOr1arPPvvMtu7cMTKFfv/9d/Xr10/BwcEKCwvTAw88oFOnTtnW7927VxaLRWlpaUW2PXefF4qtuDEye/bs0e23365atWopICBAnTp10rJly+zqOPN9ACobPTKAm+3evVuSFBYWZis7e/asevTooauvvlozZsxQQECAjDG6+eabtXr1ag0bNkzt27fX8uXL9dBDD+mXX37Rc889Z7ffL7/8Uu+8847GjBkjq9WqF198UT179tQ333yjyy67TJJ06NAhderUyfZjGx4erk8//VTDhg1Tdna2xo4da7fP6dOnq1q1akpMTFRWVpaeeuopDRo0SBs2bJAknT59Wj169FBeXp7uv/9+1atXT7/88os+/vhjHTt2TCEhIUXaf+2112rMmDF6/vnn9fDDD6tVq1aSpFatWumuu+7Sa6+9puXLl+vvf/+7bZuDBw/qiy++UFJSUrk++7vuukuff/65VqxYoebNmxdbZ8GCBRozZoxuu+02W0Lx448/asOGDRo4cKD69OmjnTt36u2339Zzzz2n2rVrS5LCw8Nt+/jiiy+0ePFijR49WrVr177g5bN+/fopKipKKSkpWr9+vZ5//nn9+eefeu2115xqnyOxnevQoUPq3LmzcnNzNWbMGIWFhWnhwoW6+eabtWTJEv3jH/+wq3+h7wPgEQwAl0hNTTWSzMqVK82RI0fMgQMHzKJFi0xYWJjx9/c3P//8szHGmISEBCPJTJgwwW77Dz/80Egyjz/+uF35bbfdZiwWi8nIyLCVSTKSzLfffmsr27dvn/Hz8zP/+Mc/bGXDhg0z9evXN7///rvdPu+44w4TEhJicnNzjTHGrF692kgyrVq1Mnl5ebZ6s2bNMpLMli1bjDHGfP/990aSeffdd0v9LBo3bmwSEhJsy++++66RZFavXm1XLz8/3zRs2ND079/frvzZZ581FovF7Nmzp9TjJCQkmBo1apS4vjDecePG2cq6du1qunbtalu+5ZZbTJs2bUo9ztNPP20kmczMzCLrJJlq1aqZrVu3FrsuKSnJtpyUlGQkmZtvvtmu3n333WckmR9++MEYY0xmZqaRZFJTUy+4z9JiO/88jB071kgy//3vf21lx48fN9HR0SYqKsrk5+cbYxz/PgCegEtLgIt1795d4eHhioyM1B133KHAwEB98MEHatCggV29e++91275k08+kY+Pj8aMGWNX/uCDD8oYo08//dSuPC4uTldccYVtuVGjRrrlllu0fPly5efnyxij9957TzfddJOMMfr9999trx49eigrK0ubNm2y2+eQIUPsxpBcc801kv66HCHJ1uOyfPly5ebmluXjsVOtWjUNGjRIH330kY4fP24rf/PNN9W5c2dFR0eXa/+BgYGSZLfv84WGhurnn3/Wxo0by3ycrl27qnXr1g7XHzVqlN3y/fffL+mv74A7ffLJJ7rqqqt09dVX28oCAwM1cuRI7d27V9u2bbOrf6HvA+AJSGQAF5szZ45WrFih1atXa9u2bdqzZ4969OhhV+eSSy5Rw4YN7cr27duniIgIBQUF2ZUXXorZt2+fXXmzZs2KHLt58+bKzc3VkSNHdOTIER07dkzz589XeHi43WvIkCGSpMOHD9tt36hRI7vlmjVrSpL+/PNPSX+Nwxg/frxefvll1a5dWz169NCcOXPsxsc46+6779bJkyf1wQcfSPrrTpvvvvtOd911V5n3WSgnJ0eSinym5/r3v/+twMBAXXXVVWrWrJlGjRqldevWOXUcZxOu88/dpZdeqmrVqrn89vTz7du3r9hxRyV9xy70fQA8AYkM4GJXXXWVunfvrm7duqlVq1bF3v5qtVrdflts4Rwqd955p1asWFHsq0uXLnbb+Pj4FLsvc85g42eeeUY//vijHn74YZ08eVJjxoxRmzZt9PPPP5cpztatW+uKK67QG2+8IUl644035Ovrq379+pVpf+f66aefJElNmzYtsU6rVq20Y8cOLVq0SFdffbXee+89XX311U6Nz/H39y9XnBaLpdTlQvn5+eU6jrMc+T4AlY3BvoCHaNy4sVauXKnjx4/b9SD873//s60/165du4rsY+fOnQoICLAN9gwKClJ+fr66d+/u0ljbtm2rtm3b6tFHH9XXX3+tLl26aN68eXr88ceLrV/SD3Ohu+++W+PHj9dvv/2mt956SzfeeKPtf//l8frrr8tisej6668vtV6NGjXUv39/9e/fX6dPn1afPn00bdo0TZw4UX5+fheM31m7du2y68XJyMhQQUGB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3XnnnQoPD1fXrl1VUFCghg0b6t1331VYWJi+/vprjRw5UvXr11e/fv2UmJio7du3Kzs7W6mpqZKkWrVq6ddff5UkJSUlaebMmWrUqJGGDh2qgQMHKigoSLNmzVJAQID69eunSZMmae7cuZKkN998U5MmTdLs2bPVoUMHff/99xoxYoRq1KihhIQEWzsfeeQRzZgxQ82aNdMjjzyiAQMGKCMjQ507d9bMmTM1adIk7dixQ5IUGBhY7Gf13//+V7169Sr183zppZc0aNCgYtelp6ere/fudmU9evTQ2LFjS91neZHIAPAoJY23cHZcBCBJISEh8vX1VUBAgOrVq1dk/ZQpU3T99ddLkvLy8vTEE09o5cqViouLkyQ1adJEX331lV566SV17dpV1atXV3Jysm376Ohopaena/HixerXr58CAwPl7++vvLy8Yo+XmJioHj16SJIeeOABDRgwQKtWrVKXLl0kScOGDVNaWpqtflJSkp555hn16dPHdrxt27bppZdesktkEhMTdeONN0qSkpOT1aZNG2VkZKhly5YKCQmRxWIpNp5zxcbGavPmzaXWqVu3bonrDh48WGR93bp1lZ2drZMnT9omwHM1EhkAwEUrNjbW9j4jI0O5ubm2xKbQ6dOn1aFDB9vynDlz9Oqrr2r//v06efKkTp8+rfbt2zt0vHbt2tneF/7ot23b1q6scNr+EydOaPfu3Ro2bJhGjBhhq3P27FmFhISUuN/C6f4PHz6sli1bOhSX9NdMu02bNnW4vqcgkQEAXLRq1Khhe5+TkyNJWrZsmRo0aGBXz2q1SpIWLVqkxMREPfPMM4qLi1NQUJCefvppbdiwwaHjVa9e3fa+cDK488sKCgrs4lmwYIE6duxot5/zp/Mvbr+F+3FUeS8t1atXT4cOHbIrO3TokIKDg93WGyORyAAAqjhfX1/l5+dfsF7r1q1ltVq1f/9+de3atdg669atU+fOnXXffffZynbv3l2m411I3bp1FRERoT179pSYPDjC0XjKe2kpLi5On3zyiV3ZihUrbJfp3IVEBgBQpUVFRWnDhg3au3evAgMDVatWrWLrBQUFKTExUePGjVNBQYGuvvpqZWVlad26dQoODlZCQoKaNWum1157TcuXL1d0dLRef/11bdy4UdHR0XbHW758uXbs2KGwsLAil4GckZycrDFjxigkJEQ9e/ZUXl6evv32W/35558aP368w+3PycnRqlWrFBMTo4CAgGKfl1XeS0v33HOPZs+erX/9618aOnSovvjiCy1evFjLli0r8z4dwe3XAIAqLTExUT4+PmrdurXCw8O1f//+EutOnTpVjz32mFJSUtSqVSv17NlTy5YtsyUq//znP9WnTx/1799fHTt21NGjR+16ZyRpxIgRatGihWJjYxUeHq5169aVOfbhw4fr5ZdfVmpqqtq2bauuXbsqLS3NLnG6kM6dO+uee+5R//79FR4erqeeeqrM8ZQmOjpay5Yt04oVKxQTE6NnnnlGL7/8sm1ws7tYjDHGrUeoZNnZ2QoJCVFWVpaCg4MrOxwAF8BdS57r1KlTyszMVHR0tPz8/Co7HFQBpX2nHP39pkcGAAB4LRIZAADgtUhkAACA1yKRAQAAXotEBgAAeC3mkQHgHVanFF8eP7Fi4wDgUeiRAQAAXotEBgAAeC0SGQAA4LVIZAAAgNdisC8AoHxKGojtLk4O8O7WrZvat2+vmTNnuiee8wwePFjHjh3Thx9+WCHHu5C0tDSNHTtWx44dc+txfvvtNz344IP69ttvlZGRoTFjxlTIZ06PDADgomeM0dmzZys7DK+Wl5en8PBwPfroo4qJiamw45LIAACqrMGDB+vLL7/UrFmzZLFYZLFYtHfvXq1Zs0YWi0WffvqprrjiClmtVn311VcqKChQSkqKoqOj5e/vr5iYGC1ZssS2v/z8fA0bNsy2vkWLFpo1a5Zt/eTJk7Vw4UItXbrUdrw1a9Zo7969slgsWrx4sa655hr5+/vryiuv1M6dO7Vx40bFxsYqMDBQvXr10pEjR+za8PLLL6tVq1by8/NTy5Yt9eKLL9rWFe73/fffV3x8vAICAhQTE6P09HRJ0po1azRkyBBlZWXZ4pk8ebJbPuuoqCjNmjVLd999t0JCQtxyjOJwaQkAUGXNmjVLO3fu1GWXXaYpU6ZIksLDw7V3715J0oQJEzRjxgw1adJENWvWVEpKit544w3NmzdPzZo109q1a3XnnXcqPDxcXbt2VUFBgRo2bKh3331XYWFh+vrrrzVy5EjVr19f/fr1U2JiorZv367s7GylpqZKkmrVqqVff/1VkpSUlKSZM2eqUaNGGjp0qAYOHKigoCDNmjVLAQEB6tevnyZNmqS5c+dKkt58801NmjRJs2fPVocOHfT9999rxIgRqlGjhhISEmztfOSRRzRjxgw1a9ZMjzzyiAYMGKCMjAx17txZM2fO1KRJk7Rjxw5JUmBgYLGf1X//+1/16tWr1M/zpZde0qBBg8p+QtyARAYAUGWFhITI19dXAQEBqlevXpH1U6ZM0fXXXy/pr0sjTzzxhFauXKm4uDhJUpMmTfTVV1/ppZdeUteuXVW9enUlJyfbto+OjlZ6eroWL16sfv36KTAwUP7+/srLyyv2eImJierRo4ck6YEHHtCAAQO0atUqdenSRZI0bNgwpaWl2eonJSXpmWeeUZ8+fWzH27Ztm1566SW7RCYxMVE33nijJCk5OVlt2rRRRkaGWrZsqZCQEFkslmLjOVdsbKw2b95cap26deuWur4ykMgAAC5asbGxtvcZGRnKzc21JTaFTp8+rQ4dOtiW58yZo1dffVX79+/XyZMndfr0abVv396h47Vr1872vjApaNu2rV3Z4cOHJUknTpzQ7t27NWzYMI0YMcJW5+zZs0Uu3Zy73/r160uSDh8+rJYtWzoUlyT5+/uradOmDtf3FCQyAICLVo0aNWzvc3JyJEnLli1TgwYN7OpZrVZJ0qJFi5SYmKhnnnlGcXFxCgoK0tNPP60NGzY4dLzq1avb3lsslmLLCgoK7OJZsGCBOnbsaLcfHx+fC+63cD+O4tISAAAeyNfXV/n5+Res17p1a1mtVu3fv19du3Ytts66devUuXNn3Xfffbay3bt3l+l4F1K3bl1FRERoz5495UoeHI2HS0tlsHbtWj399NP67rvv9Ntvv+mDDz7QrbfealtvjFFSUpIWLFigY8eOqUuXLpo7d66aNWtWeUEDcI0S5x7pW6FhoOqLiorShg0btHfvXgUGBqpWrVrF1gsKClJiYqLGjRungoICXX311crKytK6desUHByshIQENWvWTK+99pqWL1+u6Ohovf7669q4caOio6Ptjrd8+XLt2LFDYWFh5bqDJzk5WWPGjFFISIh69uypvLw8ffvtt/rzzz81fvx4h9ufk5OjVatWKSYmRgEBAQoICChSzxWXlgoToZycHB05ckSbN2+Wr6+vWrduXa79lqZSb78+ceKEYmJiNGfOnGLXP/XUU3r++ec1b948bdiwQTVq1FCPHj106tSpCo4UQGVL33O02BdwIYmJifLx8VHr1q0VHh6u/fv3l1h3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aBwA4GpO98i88MILWrBggR555BH5+PjYymNjY7VlyxaXBgcAAFAapxOZzMxMdejQoUi51WrViRMnXBIUAACAI5xOZKKjo7V58+Yi5Z999platWrlipgAAAAc4vQYmfHjx2vUqFE6deqUjDH65ptv9PbbbyslJUUvv/yyO2IEAAAoltOJzPDhw+Xv769HH31Uubm5GjhwoCIiIjRr1izdcccd7ogRAACgWE4nMpI0aNAgDRo0SLm5ucrJyVGdOnVcHRcAAMAFlSmRKRQQEKCAgABXxQIAnmd1SvHl8RMrNg4AxXIokenQoYMsFotDO9y0aVO5AgIAAHCUQ4nMrbfeant/6tQpvfjii2rdurXi4uIkSevXr9fWrVt13333uSVIAACA4jiUyCQlJdneDx8+XGPGjNHUqVOL1Dlw4IBrowMAACiF0/PIvPvuu7r77ruLlN9555167733XBIUAACAI5xOZPz9/bVu3boi5evWrZOfn59LggIAAHCE03ctjR07Vvfee682bdqkq666SpK0YcMGvfrqq3rsscdcHiAAVHncGQWUmdOJzIQJE9SkSRPNmjVLb7zxhiSpVatWSk1NVb9+/VweIAAAQEmcvrQkSf369dO6dev0xx9/6I8//tC6devclsT88ssvuvPOOxUWFiZ/f3+1bdtW3377rVuOBQAAvEu5JsRztz///FNdunRRfHy8Pv30U4WHh2vXrl2qWbNmZYcGAAA8gEcnMk8++aQiIyOVmppqK4uOjq7EiADP9tyKncWWd6rgOACgopTp0lJF+eijjxQbG6vbb79dderUUYcOHbRgwYJSt8nLy1N2drbdCwAAVE0encjs2bNHc+fOVbNmzbR8+XLde++9GjNmjBYuXFjiNikpKQoJCbG9IiMjKzBiAABQkZxOZFavXu2OOIpVUFCgyy+/XE888YQ6dOigkSNHasSIEZo3b16J20ycOFFZWVm2F7MNAwBQdTmdyPTs2VOXXnqpHn/8cbcnCfXr11fr1q3tylq1aqX9+/eXuI3ValVwcLDdCwAAVE1OJzK//PKLRo8erSVLlqhJkybq0aOHFi9erNOnT7s8uC5dumjHjh12ZTt37lTjxo1dfiwAAOB9nE5kateurXHjxmnz5s3asGGDmjdvrvvuu08REREaM2aMfvjhB5cFN27cOK1fv15PPPGEMjIy9NZbb2n+/PkaNWqUy44BAKVJ33O02BcAz1Cuwb6XX365Jk6cqNGjRysnJ0evvvqqrrjiCl1zzTXaunVruYO78sor9cEHH+jtt9/WZZddpqlTp2rmzJkaNGhQufcNAAC8X5kSmTNnzmjJkiXq3bu3GjdurOXLl2v27Nk6dOiQMjIy1LhxY91+++0uCfDvf/+7tmzZolOnTmn79u0aMWKES/YLAAC8n9MT4t1///16++23ZYzRXXfdpaeeekqXXXaZbX2NGjU0Y8YMRUREuDRQAP+npInvAOBi43Qis23bNr3wwgvq06ePrFZrsXVq165dobdpA4CnKG38TJxKeMo1gDJz+tJSUlKSbr/99iJJzNmzZ7V27VpJ0iWXXKKuXbu6JkIAAIASON0jEx8fr99++0116tSxK8/KylJ8fLzy8/NdFhwAXNRWl9CDEz+xYuMAPJjTPTLGGFksliLlR48eVY0aNVwSFAAAgCMc7pHp06ePJMlisWjw4MF2l5by8/P1448/qnPnzq6PEAAAoAQOJzIhISGS/uqRCQoKkr+/v22dr6+vOnXqxK3RAACgQjmcyKSmpkqSoqKilJiYyGUkoAoo6TbuThUcBwCUldODfZOSktwRBwAAgNMcSmQuv/xyrVq1SjVr1lSHDh2KHexbaNOmTS4LDgAAoDQOJTK33HKLbXDvrbfe6s54AFSgTvvnV3YIAFAuDiUy515O4tISAADwFOV6+jUAAEBlcqhHpmbNmqWOiznXH3/8Ua6AAAAAHOVQIjNz5kw3hwEAAOA8hxKZhIQEd8cBAADgNIcSmezsbAUHB9vel6awHgAAgLs5PEam8InXoaGhxY6XKXyYJE+/BnBRKOnJ1AAqlEOJzBdffKFatWpJklavXu3WgAAAABzlUCLTtWvXYt8DAABUJqeftSRJf/75p1555RVt375dktS6dWsNGTLE1msDAFVd+p6jlR0CAJVhQry1a9cqKipKzz//vP7880/9+eefev755xUdHa21a9e6I0YAAIBiOd0jM2rUKPXv319z586Vj4+PJCk/P1/33XefRo0apS1btrg8SACoCkrqxYlrElbBkQBVh9M9MhkZGXrwwQdtSYwk+fj4aPz48crIyHBpcAAAAKVxOpG5/PLLbWNjzrV9+3bFxMS4JCgAAABHOHRp6ccff7S9HzNmjB544AFlZGSoU6dOkqT169drzpw5mj59unuiBAAAKIZDiUz79u1lsVhkjLGV/etf/ypSb+DAgerfv7/rogMAACiFQ4lMZmamu+MAAABwmkOJTOPGjd0dBwAAgNPKNCGeJG3btk379+/X6dOn7cpvvvnmcgcFAADgCKcTmT179ugf//iHtmzZYjdupvBBkjw0EgBco8R5Z+IrOBDAgzl9+/UDDzyg6OhoHT58WAEBAdq6davWrl2r2NhYrVmzxg0hAgAAFM/pHpn09HR98cUXql27tqpVq6Zq1arp6quvVkpKisaMGaPvv//eHXECAAAU4XSPTH5+voKCgiRJtWvX1q+//irprwHBO3bscG10AAAApXC6R+ayyy7TDz/8oOjoaHXs2FFPPfWUfH19NX/+fDVp0sQdMQIAABTL6UTm0Ucf1YkTJyRJU6ZM0d///nddc801CgsL0zvvvOPyAAEAAEridCLTo0cP2/umTZvqf//7n/744w/VrFnTducSAABARSjzPDKSdODAAUlSZGSkS4IBAABwhtODfc+ePavHHntMISEhioqKUlRUlEJCQvToo4/qzJkz7ogRAACgWE73yNx///16//339dRTTykuLk7SX7dkT548WUePHtXcuXNdHiQAAEBxnE5k3nrrLS1atEi9evWylbVr106RkZEaMGAAiQxQiTrtn1/ZIQBAhXL60pLValVUVFSR8ujoaPn6+roiJgAAAIc4nciMHj1aU6dOVV5enq0sLy9P06ZN0+jRo10aHAAAQGkcurTUp08fu+WVK1eqYcOGiomJkST98MMPOn36tK677jrXRwgAAFAChxKZkJAQu+W+ffvaLXP7NQAAqAwOJTKpqanujgMAAMBpZZ4Q78iRI7aHRLZo0ULh4eEuCwq42Dy3Ymex5eOub17BkQCAd3F6sO+JEyc0dOhQ1a9fX9dee62uvfZaRUREaNiwYcrNzXVHjAAAAMVyOpEZP368vvzyS/3nP//RsWPHdOzYMS1dulRffvmlHnzwQXfECAAAUCynLy299957WrJkibp162Yr6927t/z9/dWvXz8mxAMAABXG6R6Z3Nxc1a1bt0h5nTp1uLQEAAAqlNOJTFxcnJKSknTq1Clb2cmTJ5WcnGx79hIAAEBFcPrS0syZM9WzZ88iE+L5+flp+fLlLg8QAACgJE73yLRt21a7du1SSkqK2rdvr/bt22v69OnatWuX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W9W3b19FRUXJYrFo5syZRepMnjxZFovF7tWyZUs3tuDCnGnjggULdM0116hmzZqqWbOmunfvXqS+MUaTJk1S/fr15e/vr+7du2vXrl3ubkapXN3GwYMHFzmPPXv2dHczSuVMG99//33FxsYqNDRUNWrUUPv27fX666/b1fH28+hIG739PJ5r0aJFslgstklHC3n7eTxXSW30xPMoOdfOtLS0Im3w8/Ozq+OJ59KlDFxu0aJFxtfX17z66qtm69atZsSIESY0NNQcOnSo2PrffPONSUxMNG+//bapV6+eee6554rUSUpKMm3atDG//fab7XXkyBE3t6RkzrZx4MCBZs6cOeb7778327dvN4MHDzYhISHm559/ttWZPn26CQkJMR9++KH54YcfzM0332yio6PNyZMnK6pZdtzRxoSEBNOzZ0+78/jHH39UVJOKcLaNq1evNu+//77Ztm2bycjIMDNnzjQ+Pj7ms88+s9Xx9vPoSBu9/TwWyszMNA0aNDDXXHONueWWW+zWeft5LFRaGz3tPBrjfDtTU1NNcHCwXRsOHjxoV8fTzqWrkci4wVVXXWVGjRplW87PzzcREREmJSXlgts2bty4xEQmJibGhVGWT3naaIwxZ8+eNUFBQWbhwoXGGGMKCgpMvXr1zNNPP22rc+zYMWO1Ws3bb7/t2uAd5Oo2GvPXH87z/5hWpvK20RhjOnToYB599FFjTNU8j8bYt9GYqnEez549azp37mxefvnlIu2pKuextDYa43nn0Rjn25mammpCQkJK3J8nnktX49KSi50+fVrfffedunfvbiurVq2aunfvrvT09HLte9euXYqIiFCTJk00aNAg7d+/v7zhlokr2pibm6szZ86oVq1akqTMzEwdPHjQbp8hISHq2LFjuT+3snBHGwutWbNGderUUYsWLXTvvffq6NGjLo3dUeVtozFGq1at0o4dO3TttddKqnrnsbg2FvL28zhlyhTVqVNHw4YNK7KuqpzH0tpYyFPOo1T2dubk5Khx48aKjIzULbfcoq1bt9rWedq5dAevmNnXm/z+++/Kz88v8giFunXr6n//+1+Z99uxY0elpaWpRYsW+u2335ScnKxrrrlGP/30k4KCgsobtlNc0cZ///vfioiIsP3jOnjwoG0f5++zcF1FckcbJalnz57q06ePoqOjtXv3bj388MPq1auX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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_propensity_score_distribution(\n", + " propensity=data_ps['propensity_score'],\n", + " treatment=data_ps['intervention'],\n", + " reflect=False,\n", + " kde=False,\n", + " norm_hist=True,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "하지만 이는 하나의 데이터에 적합 및 예측을 동시에 하기 때문에 Overlap이 실제보다 좋아보일 수 있습니다." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "그렇다면 OOF 폴드 예측으로 얻은 PS 분포를 그려봅시다. \n", + "(cv = None -> 단일 적합, cv = \"auto\" -> 교차검증)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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+4UXubtwxES6/Ht7vrp162rXrl2Fll/sMwZ4AkZkgDLitttuU15enl566SW75TNmzJDFYlGPHj3slqekpNjNcfn111+1fPly3XrrrfLy8pKXl5f69Omj999/3zYycb5jx445XWNmZqbOnTtnt6xFixaqUKGCcnNzL/q6gmvkXOzqs/3795fFYtGjjz6qffv2FbouTHFMnTpVn332mfr161fkYbgCx48ft3vu7e2tZs2ayRhjOy38cvU7a86cOXbPZ8+eLUm233FgYKCqVq1a6HT6l19+udC2nKnttttu01dffaWUlBTbslOnTmn+/PmqV6+eU/N8gLKCERmgjLjjjjsUGxurCRMmaP/+/YqKitJnn32m5cuXa/To0brmmmvs2l977bXq1q2b3enXkpSQkGBrM3XqVK1bt07t2rXT8OHD1axZM/3555/69ttvtWbNGv35559O1fj5559r5MiRuueee9SoUSOdO3dOb7zxhi00XUyrVq3k5eWl5557ThkZGbJarbrppptUrVo1SX+fLty9e3e99957Cg4O1u233+5wTefOnbMdljp9+rQOHDigjz76SD/88INiY2M1f/78S77+1ltvVXh4uDp27Kjq1atr586deumll3T77bfbRsYKJlVPmDBB9957rypVqqQ77rij2BcxTEtLU8+ePdW9e3elpKTozTff1IABAxQVFWVrM2zYME2dOlXDhg1TdHS0Nm7caHc9nALO1DZu3Di988476tGjh0aNGqWQkBAtXLhQaWlpev/997kKMDxTaZ4yBZQnBadfb9u27ZLtLnXK8MmTJ82YMWNMRESEqVSpkmnYsKF54YUXTH5+vl07SWbEiBHmzTffNA0bNjRWq9W0bt260OnNxhiTnp5uRowYYWrXrm0qVapkwsPDzc0332zmz59va1Nwuu2Fp1VfeBrwvn37zJAhQ8w111xjfHx8TEhIiImNjTVr1qyxe92Fp/0aY8yCBQtM/fr1jZeXV5GnYi9ZssRIMg8++OAl3j17BaeyFzz8/PxMvXr1TJ8+fczSpUttpxOf78LTr1955RVz4403mtDQUGO1Ws0111xjHn/8cZORkWH3uqefftrUrFnTVKhQwe5054LfRVF0kdOvd+zYYe6++24TEBBgqlSpYkaOHGlycnLsXpudnW2GDh1qgoKCTEBAgOnbt685evRooW1eqrai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+e6778zOnTtNXFycCQoKMr/99putTWpqqgkJCTGPP/64+fbbb01qaqpZvnz5RbdZ0tzR5+HDh5trrrnGrFu3zqSlpZlXXnnFeHl5meXLl5dUty7J2T6vW7fOfPDBB2bHjh0mNTXVzJw503h5eZmVK1fa2kydOtUEBQWZZcuWme+//9707NnTREZGmpycnJLq1iW5us8nTpwwXbt2Ne+++6755ZdfTEpKimnbtq1p06ZNSXbrotzxOy7wwQcfmKioKBMREWFmzJjh5p44zh19Lm/fX470ubx9fxVIS0szNWvWNDfccIO588477da5+/uLIFOC2rZta0aMGGF7npeXZyIiIkxiYqJDrz937pwJCAgwCxcutC3r16+fue+++1xeq6u4o8/Nmzc3U6ZMsWt33XXXmQkTJrim6Ct0pX02xpjWrVubJ5980hhjTH5+vgkPDzcvvPCCbf2JEyeM1Wo177zzjusKvwKu7nNRvvrqKyPJHDhw4IpqdQV39fe3334zNWvWND/99JOpW7dumQoy7uhzef/+MqZwn8vj99e5c+dMhw4dzKuvvmoGDx5sF2RK4vuLQ0sl5MyZM/rmm2/UtWtX27IKFSqoa9euSklJcWgb2dnZOnv2rEJCQiT9fd+pFStWqFGjRurWrZuqVaumdu3aadmyZe7ogtPc0WdJ6tChgz766CP9/vvvMsZo3bp12r17t2699VaX98FZV9pnY4zWrl2rXbt26cYbb5QkpaWl6ciRI3bbDAoKUrt27Rx+H93JHX0uSkZGhiwWS6nfO81d/c3Pz9f999+vxx9/XM2bN3dL7cXljj6X9++vi/2ey+P315QpU1StWjUNHTq00LqS+P4iyJSQP/74Q3l5eYVurVC9enUdOXLEoW3861//UkREhO0DcfToUWVlZWnq1Knq3r27PvvsM911113q3bu3NmzY4PI+OMsdfZak2bNnq1mzZqpVq5a8vb3VvXt3zZkz55J/BEtKcfuckZEhf39/eXt76/bbb9fs2bN1yy23SJLtdVfyPrqTO/p8odOnT+tf//qX+vfvX+o34nNXf5977jlVrFhRo0aNclvtxeWOPpfX76/L/Z7L2/fXl19+qddee00LFiwocn1JfH95xC0KIE2dOlWLFy/W+vXr5ePjI+nv/9FI0p133qkxY8ZIklq1aqXNmzdr3rx56ty5c6nV6wpF9Vn6+4tgy5Yt+uijj1S3bl1t3LhRI0aMKBR4PElAQIC2b9+urKwsrV27VvHx8apfv766dOlS2qW5jaN9Pnv2rPr27StjjObOnVs6xbrApfr7zTffaNasWfr2229lsVhKu1SXuVSfy+v31+U+1+Xp++vkyZO6//77tWDBAlWtWrXU6iDIlJCqVavKy8tL6enpdsvT09MVHh5+yddOmzZNU6dO1Zo1a9SyZUu7bVasWFHNmjWza9+0aVN9+eWXriu+mNzR55ycHD3xxBP68MMPdfvtt0uSWrZsqe3bt2vatGml/kVQ3D5XqFBBDRo0kPT3l/nOnTuVmJioLl262F6Xnp6uGjVq2G2zVatWru+Ek9zR5wIFIebAgQP6/PPPS300RnJPf7/44gsdPXpUderUsbXPy8vTY489ppkzZ2r//v1u6Yuj3NHn8vr9dak+l7fvr71792r//v264447bMsKAmrFihW1a9euEvn+4tBSCfH29labNm20du1a27L8/HytXbtWMTExF33d888/r6efflorV65UdHR0oW1ef/312rVrl93y3bt3q27duq7tQDG4o89nz57V2bNnVaGC/UfXy8vL9g+oNBW3zxfKz89Xbm6uJCkyMlLh4eF228zMzNTWrVud2qa7uKPP0v+FmD179mjNmjUKDQ11ad3F5Y7+3n///frhhx+0fft22yMiIkKPP/64Vq1a5fI+OMsdfS6v318XOr/P5e37q0mTJvrxxx/tPrc9e/ZUbGystm/frtq1a5fM95dLpgzDIYsXLzZWq9UkJyebHTt2mAcffNAEBwebI0eOGGOMuf/++824ceNs7adOnWq8vb3N0qVLzeHDh22PkydP2tp88MEHplKlSmb+/Plmz549Zvbs2cbLy8t88cUXJd6/orijz507dzbNmzc369atM/v27TNJSUnGx8fHvPzyyyXev6I42+d///vf5rPPPjN79+41O3bsMNOmTTMVK1Y0CxYssLWZOnWqCQ4ONsuXLzc//PCDufPOO8vc6deu7POZM2dMz549Ta1atcz27dvtPgu5ubml0sfzueN3fKGydtaSO/pc3r6/HOlzefv+utCFZy0Z4/7vL4JMCZs9e7apU6eO8fb2Nm3btjVbtmyxrevcubMZPHiw7XndunWNpEKPSZMm2W3ztddeMw0aNDA+Pj4mKirKLFu2rIR64xhX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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "res.plot_weight_distribution(phase=\"valid\", reflect=False, norm_hist=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "OOF로 검증해도 Propensity Score의 Overlap 및 Positivity가 양호한 것을 확인" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### IPW 가중치 분포 및 유효표본수(ESS)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ESS = 10354.68 (N = 10391) -> VIF = 1.0035\n" + ] + } + ], + "source": [ + "w = weight_model.compute_weights(X, T)\n", + "ESS = (w.sum()**2) / (w**2).sum()\n", + "N = len(w)\n", + "VIF = N / ESS\n", + "\n", + "print(f\"ESS = {ESS:.2f} (N = {N}) -> VIF = {VIF:.4f}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0.5, 1.0, 'IPW weights (log y)')" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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2r0aJzEx0T0ptrCwULW1tdecb+Ln56fExETl5+dLkj755BOdPXtWy5Ytk2VZKiwslHR1NGX06NHq27evpKuXJkJCQnTHHXfozJkz7ldcXJx69+7d5Mqhetu3b9fgwYN1zz33uNuCgoIaLNf9pt69ezcYFQgICFBCQoKOHTvW4neTpJCQEEnSO++8o3/84x/X3P+bzp49qxtuuOGa++3fv1+nTp3SD3/4QwUFBbnbp0+frpEjRyo3N1fS1Um7H330kebPn6/evXu790tKStKYMWOueR4/Pz99//vf1x/+8AedP3/e3b5hwwYlJiZq2LBhDfavr/3MmTPXPDZgF4QToJP97ne/07vvvqtdu3bp6NGj+vjjjxUXF+fe7nA4lJiY6J5bsmfPHg0cONC9kuSb4aT+n62ZDDtp0iQVFxfr4sWLKigo0KBBg3TbbbcpJibGfWln9+7dmjRpkvszn376qSorKzVw4EANGDCgwevChQs6depUs+f74osvNHz4cDkcjgbtza2IGTJkSKN9b7jhhkZzW5oybNgwOZ1OvfTSSwoNDVVKSopcLtc155vUsyzrmvt88cUXktRozockjRw50r29/p9Nfc/WrgaaP3++Ll686F5SfuTIERUXF2vevHnN1v7PfQfYWTdvFwD4mttvv12hoaEt7jNx4kT98Y9/1EcffeSeb1IvMTFRjz32mMrLy7V7925FRETopptuuuZ56+eyFBYWqqCgwB1CJk2apIKCAh0+fFinT59uEE7q6uo0cOBAbdiwocljDhgwoDVfuVX8/f2bbG9NcJCuTvBdsGCBfv/732vHjh16+OGHlZmZqb1792rIkCHNfq5///6tCkCdKTo6WnFxcXrjjTc0f/58vfHGGwoICGhyRVF97df6dwqwE0ZOAAN9834ne/bsabASJy4uToGBgdq1a5c+/PDDFlfpfFNCQoICAgJUUFDQIJzcfvvt+vDDD5WXl+d+X2/48OE6e/asJkyYoOTk5EavmJiYZs9344036rPPPmsULo4ePdq6TmjCtUYHxowZoxUrVig/P18FBQUqLy9XTk5Oi58ZOXKke6VUS+onzB45cqTRtiNHjri31/+zqe/pyXefP3++3n//ff3973/Xxo0bNX369CYvP9XXfuutt7b62IDpCCeAgcaOHaugoCBt2LBB5eXlDUZOAgMDddttt8nlcqm6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GIVwAgAAjOKVB/9dj/p7rFRVVXXI8etq/tEhxwUAdA2e/P54+pvSkcfuiBractxr3StNkhxWa/YyyN/+9jdFRkZ6uwwAANAGZWVlGjJkSIv72C6c1NXV6cSJE+rTp48cDkez+1VVVSkyMlJlZWUKDg7uxAp9B33cOejnzkE/dw76uXOY2M+WZen8+fOKiIiQn1/Ls0psd1nHz8/vmonrm4KDg435w3RV9HHnoJ87B/3cOejnzmFaP7f2wb1MiAUAAEYhnAAAAKN02XASGBioVatWKTAw0NuldFn0ceegnzsH/dw56OfOYfd+tt2EWAAA0LV12ZETAABgT4QTAABgFMIJAAAwCuEEAAAYhXACAACMYutw4nK5FBUVpaCgII0bN0779u1rcf/s7GyNGDFCPXr0UGRkpB599FF9/fXXnVStPXnSx5cvX9bPfvYzDR8+XEFBQYqJidH27ds7sVp7ys/P14wZMxQRESGHw6Ft27Zd8zO7du3SbbfdpsDAQN18881av359h9dpd57289///nd973vf07e+9S35+fnpxz/+cafUaXee9vPWrVt1xx13aMCAAQoODtb48eP1zjvvdE6xNuVpH+/evVsTJkxQ//791aNHD40cOVL/+Z//2TnFtpFtw8nmzZvldDq1atUqHThwQDExMUpJSdGpU6ea3H/jxo1atmyZVq1apU8++UT//d//rc2bN+snP/lJJ1duH5728YoVK/T888/rN7/5jUpLS7VkyRLNnDlTBw8e7OTK7aW6uloxMTFyuVyt2v/48eOaPn26pkyZopKSEv34xz/WQw89xH/Qr8HTfq6pqdGAAQO0YsUKxcTEdHB1XYen/Zyfn6877rhDf/7zn1VcXKwpU6ZoxowZ/HejBZ72ca9evZSRkaH8/Hx98sknWrFihVasWKEXXnihgyu9DpZNJSQkWOnp6e73tbW1VkREhJWZmdnk/unp6dbUqVMbtDmdTmvChAkdWqededrHgwYNsp599tkGbbNmzbK+//3vd2idXYkk66233mpxn6VLl1qjRo1q0DZ79mwrJSWlAyvrWlrTz9+UlJRkPfLIIx1WT1flaT/Xi46OttasWdP+BXVBbe3jmTNnWnPnzm3/gtqJLUdOLl26pOLiYiUnJ7vb/Pz8lJycrMLCwiY/k5iYqOLiYvdliWPHjunPf/6z7r777k6p2W7a0sc1NTUKCgpq0NajRw/t3r27Q2v1NYWFhQ3+LpKUkpLS7N8FsJO6ujqdP39e/fr183YpXdbBgwf1wQcfKCkpydulNMt2TyWWpDNnzqi2tlZhYWEN2sPCwnT48OEmP/O9731PZ86c0cSJE2VZlq5cuaIlS5ZwWacZbenjlJQUZWVl6fbbb9fw4cOVl5enrVu3qra2tjNK9hknT55s8u9SVVWlixcvqkePHl6qDLh+v/71r3XhwgU9+OCD3i6lyxkyZIhOnz6tK1euaPXq1XrooYe8XVKzbDly0ha7du3SL37xCz333HM6cOCAtm7dqtzcXD355JPeLq3LWLdunW655RaNHDlSAQEBysjIUFpamvz8fOZfMwDXYePGjVqzZo3efPNNDRw40NvldDkFBQXav3+/cnJylJ2drU2bNnm7pGbZcuQkNDRU/v7+qqioaNBeUVGh8PDwJj/zxBNPaN68ee6kOGbMGFVXV2vRokX66U9/yg/oP2lLHw8YMEDbtm3T119/rbNnzyoiIkLLli3TTTfd1Bkl+4zw8PAm/y7BwcGMmsC2fvvb3+qhhx7Sli1bGl22RPsYNmyYpKu/fxUVFVq9erXmzJnj5aqaZstf5ICAAMXFxSkvL8/dVldXp7y8PI0fP77Jz/zjH/9oFED8/f0lSRbPPmykLX1cLygoSIMHD9aVK1f0u9/9Tt/97nc7ulyfMn78+AZ/F0l69913r/l3AUy1adMmpaWladOmTZo+fbq3y/EJdXV1qqmp8XYZzbLlyIkkOZ1OpaamauzYsUpISFB2draqq6uVlpYmSZo/f74GDx6szMxMSdKMGTOUlZWlb3/72xo3bpyOHj2qJ554QjNmzHCHFDTkaR9/+OGHKi8vV2xsrMrLy7V69WrV1dVp6dKl3vwaxrtw4YKOHj3qfn/8+HGVlJSoX79+Gjp0qJYvX67y8nK99tprkqQlS5bo2Wef1dKlS/WDH/xA77//vt58803l5uZ66yvYgqf9LEklJSXuz54+fVolJSUKCAhQdHR0Z5dvG57288aNG5Wamqp169Zp3LhxOnnypKSrk+lDQkK88h1M52kfu1wuDR06VCNHjpR0dfn2r3/9az388MNeqb9VvL1c6Hr85je/sYYOHWoFBARYCQkJ1t69e93bkpKSrNTUVPf7y5cvW6tXr7aGDx9uBQUFWZGRkdYPf/hD69y5c51fuI140se7du2ybr31ViswMNDq37+/NW/ePKu8vNwLVdvLzp07LUmNXvV9m5qaaiUlJTX6TGxsrBUQEGDddNNN1iuvvNLpddtNW/q5qf1vvPHGTq/dTjzt56SkpBb3R2Oe9vEzzzxjjRo1yurZs6cVHBxsffvb37aee+45q7a21jtfoBUclsU1DQAAYA5bzjkBAABdF+EEAAAYhXACAACMQjgBAABGIZwAAACjEE4AAIBRCCcAAMAohBMAAGAUwgkAADAK4QQAABiFcAIAAIzyf8ptxPLBGmukAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(); plt.hist(w, bins=40); plt.yscale('log'); plt.title('IPW weights (log y)')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "결과 해석\n", + "1) ESS와 N수가 거의 비슷한 것을 확인할 수 있음(VIF ≈ 1) -> 가중치가 고르게 퍼져있다\n", + "2) 히스토그램이 1 주변에 모여있고(= 가중치 과도하게 쏠리지 않음), 꼬리 부분도 완만(= 극단 가중치 거의 없음)\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "다만 VIF와 Propensity Score Overlap이 정량적으로 얼마나 되어야 한다 라는 지표는 찾을 수 없었습니다. \n", + "\n", + "\n", + "데이터 및 분석의 맥락에 따라 다르게 지정하되, propensity score의 overlap이 약하다면 위에서 진행한 clipping 등의 방법을 적용해보면 좋습니다. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[참고자료]\n", + "- Yang, Jeff Y., et al. \"Propensity score methods to control for confounding in observational cohort studies: a statistical primer and application to endoscopy research.\" Gastrointestinal endoscopy 90.3 (2019): 360-369.\n", + "\n", + "- Austin, Peter C. \"Informing power and sample size calculations when using inverse probability of treatment weighting using the propensity score.\" Statistics in Medicine 40.27 (2021): 6150-6163.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## **Double/Debiased Machine Learning (비모수 버전의 Regression 처럼 활용 가능)**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "코드 및 데이터 참조 출처: https://matheusfacure.github.io/python-causality-handbook/22-Debiased-Orthogonal-Machine-Learning.html" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "DML은 ATE와 CATE와 같은 인과적 모수를 구하는 하나의 프레임입니다. \n", + "\n", + "간략하게 소개하자면, DML은 복잡한 보조모형은 머신러닝으로 학습하고, 직교화(Neyman 점수)와 교차적합으로 bias를 상쇄해 ATE·CATE 같은 인과모수를 정규성으로 안정적으로 추정하는 프레임워크입니다. \n", + "이를 통해 인과 매개변수의 추정 절차와 성가신 매개변수의 추정 절차를 분리할 수 있는 Frisch-Waugh-Lovell의 장점을 그대로 지닌 방법입니다.\n", + "\n", + "코드와 함께 더 자세하게 알아보기 위해 계량경제학에서 자주 사용하는 데이터셋 중 하나인 **아이스크림 판매 데이터셋**을 활용해보겠습니다. \n" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "from lightgbm import LGBMRegressor\n", + "from sklearn.model_selection import cross_val_predict\n", + "import seaborn as sns" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
tempweekdaycostpricesales
017.361.55.6173
125.430.34.9196
223.351.57.6207
326.910.35.3241
420.211.07.2227
\n", + "
" + ], + "text/plain": [ + " temp weekday cost price sales\n", + "0 17.3 6 1.5 5.6 173\n", + "1 25.4 3 0.3 4.9 196\n", + "2 23.3 5 1.5 7.6 207\n", + "3 26.9 1 0.3 5.3 241\n", + "4 20.2 1 1.0 7.2 227" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "test = pd.read_csv(\"../data/matheus_data/ice_cream_sales_rnd.csv\")\n", + "train = pd.read_csv(\"../data/matheus_data/ice_cream_sales.csv\")\n", + "train.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### **Frisch-Waugh-Lovell 응용 DML**" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "y = \"sales\"\n", + "T = \"price\"\n", + "X = [\"temp\", \"weekday\", \"cost\"]\n", + "\n", + "debias_m = LGBMRegressor(max_depth=3, verbosity=-1)\n", + "denoise_m = LGBMRegressor(max_depth=3, verbosity=-1)\n", + "\n", + "train_pred = train.assign(price_res = train[T] - cross_val_predict(debias_m, train[X], train[T], cv=5),\n", + " sales_res = train[y] - cross_val_predict(denoise_m, train[X], train[y], cv=5))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "위의 코드는 FWL(Frisch-Waugh-Lovell) 정리($Y_i - \\mathbb{E}[Y_i\\mid X_i] = \\tau\\,(T_i - \\mathbb{E}[T_i\\mid X_i]) + \\varepsilon$)에서 $ \\mathbb{E}[Y_i\\mid X_i] $ 와 $\\mathbb{E}[T_i\\mid X_i] $를 머신러닝을 사용하여 추정합니다. \n", + "\n", + "이를 통해 Y와 T의 잔차를 추정할 때 교호작용(변수 간의 Interaction)과 비선형성을 모델링할 수 있고, 동시에 FWL 스타일의 직교화를 유지할 수 있게끔 합니다. \n", + "\n", + "그렇다면 변수명을 debias_m, 그리고 denoise_m이라고 지정한 이유는 무엇일까요? \n", + "\n", + "- **debias_m** \n", + " : FWL 정리의 식에서 $T - M_t( = \\tilde{T})$부분으로, X의 모든 교란 편향이 모델에 의해 제거된 부분입니다.($M_t := \\mathbb{E}[T_i\\mid X_i]$를 머신러닝으로 추정한 모델) \n", + " 즉, $\\tilde{T}$는 X에 직교하는, X로 인한 bias를 없앤 값입니다. \n", + "\n", + "- **denoise_m** \n", + " :FWL 식에서 $Y - M_y(= \\tilde{Y})$부분으로, Y에서 분산을 제거하는 부분입니다.($M_y := \\mathbb{E}[Y_i\\mid X_i]$를 머신러닝으로 추정한 모델) \n", + " 즉, $\\tilde{Y}$는 X로 인한 모든 분산이 제거된 값입니다.\n", + "\n", + "또한 debias_m과 denoise_m값을 추정할 때 K-Fold 방식을 사용하여 머신러닝의 고질적인 과적합 문제를 방지합니다." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "위에서 구한 모델을 활용하여 최종 ATE를 구해봅시다." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + "\n", + "\n", + " \n", + "\n", + "\n", + " \n", + "\n", + "
coef std err t P>|t| [0.025 0.975]
Intercept 0.0106 0.072 0.148 0.883 -0.131 0.152
price_res -3.9228 0.071 -54.962 0.000 -4.063 -3.783
" + ], + "text/latex": [ + "\\begin{center}\n", + "\\begin{tabular}{lcccccc}\n", + "\\toprule\n", + " & \\textbf{coef} & \\textbf{std err} & \\textbf{t} & \\textbf{P$> |$t$|$} & \\textbf{[0.025} & \\textbf{0.975]} \\\\\n", + "\\midrule\n", + "\\textbf{Intercept} & 0.0106 & 0.072 & 0.148 & 0.883 & -0.131 & 0.152 \\\\\n", + "\\textbf{price\\_res} & -3.9228 & 0.071 & -54.962 & 0.000 & -4.063 & -3.783 \\\\\n", + "\\bottomrule\n", + "\\end{tabular}\n", + "\\end{center}" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import statsmodels.formula.api as smf\n", + "\n", + "final_model = smf.ols(formula='sales_res ~ price_res', data=train_pred).fit()\n", + "final_model.summary().tables[1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "지금 구한 코드는 DML의 debias_m, denoise_m을 반영해서 sales와 price간의 음의 인과관계(가격이 오르면 sales가 떨어진다)를 잘 구한 모습입니다. \n", + "\n", + "하지만 debias_m, denoise_m을 반영하지 않고, 즉 다른 교란변수(X)의 영향을 제어하지 않고 OLS를 돌리면 어떻게 될까요?" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "\n", + " \n", + "\n", + "\n", + " \n", + "\n", + "\n", + " \n", + "\n", + "
coef std err t P>|t| [0.025 0.975]
Intercept 192.9679 1.013 190.414 0.000 190.981 194.954
price 1.2294 0.162 7.575 0.000 0.911 1.547
" + ], + "text/latex": [ + "\\begin{center}\n", + "\\begin{tabular}{lcccccc}\n", + "\\toprule\n", + " & \\textbf{coef} & \\textbf{std err} & \\textbf{t} & \\textbf{P$> |$t$|$} & \\textbf{[0.025} & \\textbf{0.975]} \\\\\n", + "\\midrule\n", + "\\textbf{Intercept} & 192.9679 & 1.013 & 190.414 & 0.000 & 190.981 & 194.954 \\\\\n", + "\\textbf{price} & 1.2294 & 0.162 & 7.575 & 0.000 & 0.911 & 1.547 \\\\\n", + "\\bottomrule\n", + "\\end{tabular}\n", + "\\end{center}" + ], + "text/plain": [ + "" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "final_model = smf.ols(formula='sales ~ price', data=train_pred).fit()\n", + "final_model.summary().tables[1]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "이렇듯 **가격이 오르면 sales가 오른다는 이상한 인과관계**를 추정하게 됩니다. \n", + "\n", + "여기서 볼 수 있듯이 인과관계 추정을 위해서는 교란변수를 잘 컨트롤하는 것이 중요합니다." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "지금까지 DML을 활용해서 ATE를 구해보았습니다. \n", + " \n", + "그렇다면 DML을 활용해서 CATE를 구하는 방법은 무엇일까요?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### **DML 응용 CATE 계산**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "CATE를 구하기 위해서는 ATE와 동일한 식을 사용하지만, 거기에 T잔차와 다른 공변량과의 상호작용($\\pmb{\\beta}_2 \\pmb{X_i} \\tilde{T_i}$)텀을 추가하도록 할 것입니다. \n", + "\n", + "즉, $\\tilde{Y_i} = \\alpha + \\beta_1 \\tilde{T_i} + \\pmb{\\beta}_2 \\pmb{X_i} \\tilde{T_i} + \\epsilon_i$라는 식을 추정한다면 CATE 값을 얻을 수 있습니다." + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [], + "source": [ + "final_model_cate = smf.ols(formula='sales_res ~ price_res * (temp + C(weekday) + cost)', data=train_pred).fit()\n", + "\n", + "cate_test = test.assign(cate=final_model_cate.predict(test.assign(price_res=1))\n", + " - final_model_cate.predict(test.assign(price_res=0)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "price_res * (temp + C(weekday) + cost)라는 T와 다른 공변량 간의 상호작용 텀을 넣어 CATE를 추정할 수 있도록 구성했습니다." + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def elast(data, y, t):\n", + " return (np.sum((data[t] - data[t].mean())*(data[y] - data[y].mean())) /\n", + " np.sum((data[t] - data[t].mean())**2))\n", + "\n", + "def cumulative_gain(dataset, prediction, y, t, min_periods=30, steps=100):\n", + " size = dataset.shape[0]\n", + " ordered_df = dataset.sort_values(prediction, ascending=False).reset_index(drop=True)\n", + " n_rows = list(range(min_periods, size, size // steps)) + [size]\n", + " return np.array([elast(ordered_df.head(rows), y, t) * (rows/size) for rows in n_rows])\n", + "\n", + "gain_curve_test = cumulative_gain(cate_test, \"cate\", y=y, t=T)\n", + "plt.plot(gain_curve_test, color=\"C0\", label=\"Test\")\n", + "plt.plot([0, 100], [0, elast(test, y, T)], linestyle=\"--\", color=\"black\", label=\"Baseline\")\n", + "plt.legend();\n", + "plt.title(\"R-Learner\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "위의 곡선에서 볼 수 있듯이 최종 선형 모델을 사용한 DML 절차는 훌륭한 성능을 나타냅니다.\n", + "\n", + "참고로, DML을 활용하여 CATE를 구하는 방법이 R-Learner라고 불리는 메타 학습자의 하나의 종류입니다." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### **Non Parametric Double/Debiased ML**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "하지만 위에서 우리는 중간에 머신러닝을 사용하긴 했지만, 최종 ATE/CATE를 구할 때는 OLS, 즉 선형 모델을 사용한 것을 볼 수 있습니다. \n", + "결국 우리는 아직 Y와 T간의 비선형성을 잡을 수 없는 한계가 있었습니다. \n", + "\n", + "우리는 위에서 추정한 식의 변형을 통해 비선형성까지 머신러닝이 학습할 수 있게 코드를 짤 수 있습니다. \n", + "식의 변형에 대해서는 다음의 링크를 참고해주세요. https://matheusfacure.github.io/python-causality-handbook/22-Debiased-Orthogonal-Machine-Learning.html " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "우리는 코드를 통해 Y와 T간의 비선형성을 잡을 수 있는 방법에 대해 알아보겠습니다. \n", + "식의 변형은 다소 복잡할 수 있지만, 코드로 구현하면 간단합니다. " + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "model_final= LGBMRegressor(max_depth=3)\n", + "\n", + "# create the weights\n", + "w= train_pred[\"price_res\"]** 2\n", + "\n", + "# create the transformed target\n", + "y_star= (train_pred[\"sales_res\"]/ train_pred[\"price_res\"])\n", + "\n", + "# use a weighted regression ML model to predict the target with the weights.\n", + "model_final.fit(X=train[X], y=y_star, sample_weight=w);" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "위의 기계학습 모델은 기존의 식을 변형해 가중치 w($\\tilde{T}_i^2$)와 y_star($\\frac{\\tilde{Y}_i}{\\tilde{T}_i}$) 텀을 추가해서 \n", + "X값을 Y값에 학습시키기만 해도 Y와 T의 비선형성을 포함하는 최종 CATE 값을 구할 수 있다는 장점이 있습니다." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "이제 테스트 데이터셋을 사용하여 이 비모수적 버전을 이전에 사용한 선형 버전과 비교해 보겠습니다. \n", + "\n", + "먼저 개별 처치 효과를 추정합니다." + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [], + "source": [ + "cate_test_non_param = test.assign(cate=model_final.predict(test[X]))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "다음으로, 비모수 누적 탄성 곡선을 모수(선형) 버전의 이중/직교 기계학습에서 얻은 곡선과 나란히 플롯을 그릴 수 있습니다." + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "gain_curve_test_non_param = cumulative_gain(cate_test_non_param, \"cate\", y=y, t=T)\n", + "plt.plot(gain_curve_test_non_param, color=\"C0\", label=\"Non-Parametric\")\n", + "plt.plot(gain_curve_test, color=\"C1\", label=\"Parametric\")\n", + "plt.plot([0, 100], [0, elast(test, y, T)], linestyle=\"--\", color=\"black\", label=\"Baseline\")\n", + "plt.legend();\n", + "plt.title(\"R-Learner\");" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Caution!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "하지만 Non-Parametric으로 결과를 구할 경우 해석에 주의할 점이 있습니다.\n", + "\n", + "Non-Parametric은 최종 CATE에서도 비선형 관계를 잡아낼 수 있다는 장점이 있지만, **국소 선형 근사치**만을 찾는 것이기 때문에 \n", + "\n", + "해당 처치 수준 또는 처치 주변에서만 그 결과를 해석해야하고, 그 범위를 벗어났을 때에는 우리가 구한 결과값이 다르게 해석되어야 합니다. \n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "즉, T가 0일 때의 $\\tau(X_i)$값과 T가 60일 때의 $\\tau(X_i)$값은 다르게 추정되므로, T가 0일 때의 $\\tau(X_i)$값으로 T가 60일 때에도 그대로 적용해서 해석을 하면 안됩니다." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "그럼 아래에서는 더욱 다양한 DML 응용 방법 및 모델을 알아보도록 하겠습니다." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### **DML 모델(1) Partially linear models (PLM)**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "PLM의 기본 아이디어는 처치 효과는 선형(상수 계수 θ) 로 두고, 공변량 효과는 비모수/머신러닝 $g_0(X)$로 흡수해버리는 것입니다. \n", + "위에서 FWL개념에서 언급한 것과 동일하게 고차원의 X를 ML로 유연하게 처리하면서도 $θ_0$에 대해 표준 오류 및 신뢰구간을 잘 뽑아낼 수 있습니다.\n", + "\n", + "이 방법은 처치가 연속적이거나(Ex. 가격, 광고비, 용량 등) 처치가 이진이더라도 ATE만 알고 싶을 때 사용하기 좋습니다.\n", + "\n", + "PLM은 크게 두 종류로 나눌 수 있습니다. \n", + "Instrumental Variable 설정 여부에 따라 Partially Linear Regressor(PLR)과 Partially Linear IV Regressor(PLIV)로 나눠서 각각의 코드를 살펴보도록 하겠습니다." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### **(1) Partially Linear Regressor(PLR)**" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "PLR은 위에서 FWL개념을 DML에 적용시키면서 했던 방법이랑 거의 동일한 Flow로 흘러갑니다. \n", + "수식으로 정리하자면 아래와 같습니다.\n", + "\n", + "$Y=Dθ_0​+g_0​(X)+ζ$, $E[ζ|X, D] = 0$ \n", + "$D = m_0(X) + V$, $E[V|X] = 0$\n", + "\n", + "- $θ_0$: ATE\n", + "- $g_0(X)$ = E[Y|X]: Y의 X로 인한 부분(denoise_m에 해당)\n", + "- $m_0(X)$ = E[D|X]를 학습: D의 X로 인한 부분(debias_m에 해당)\n", + "- ζ: Error term\n", + "\n", + "다만 위에서는 모든 과정을 수작업으로 했지만, 이번에는 doubleML에서 제공하는 모듈을 써서 같은 과정을 조금 더 엄격하게 진행해보도록 하겠습니다." + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "import doubleml as dml\n", + "from doubleml.datasets import fetch_401K\n", + "from sklearn.pipeline import make_pipeline\n", + "from sklearn.preprocessing import StandardScaler\n", + "from sklearn.linear_model import LassoCV, LogisticRegressionCV" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "DoubleML 사이트(https://docs.doubleml.org/stable/guide/models.html#partially-linear-models-plm) 에 나와있는 데이터를 사용해 코드를 짜보도록 하겠습니다." + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
nifanet_tfatwageincfsizeeducdbmarrtwoearne401p401pirahown
00.00.04500.0476765.0280000001
16215.01015.022390.03628452.01160000001
20.0-2000.0-2000.0373300.06121000000
315000.015000.0155000.05852590.02160110001
40.00.058000.03221804.01110000001
\n", + "
" + ], + "text/plain": [ + " nifa net_tfa tw age inc fsize educ db marr twoearn \\\n", + "0 0.0 0.0 4500.0 47 6765.0 2 8 0 0 0 \n", + "1 6215.0 1015.0 22390.0 36 28452.0 1 16 0 0 0 \n", + "2 0.0 -2000.0 -2000.0 37 3300.0 6 12 1 0 0 \n", + "3 15000.0 15000.0 155000.0 58 52590.0 2 16 0 1 1 \n", + "4 0.0 0.0 58000.0 32 21804.0 1 11 0 0 0 \n", + "\n", + " e401 p401 pira hown \n", + "0 0 0 0 1 \n", + "1 0 0 0 1 \n", + "2 0 0 0 0 \n", + "3 0 0 0 1 \n", + "4 0 0 0 1 " + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data = fetch_401K(return_type='DataFrame')\n", + "features = ['age','inc','educ','fsize','marr','twoearn','db','pira','hown']\n", + "data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": {}, + "outputs": [], + "source": [ + "dml_data = dml.DoubleMLData(data, y_col='net_tfa', d_cols='e401', x_cols=features)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- Y: net_tfa(순자산) \n", + "- d_cols: e401(적격성) \n", + "- Features: [age: '나이',inc: '소득',educ: '교육',fsize: '가구원 수',marr: '결혼여부',twoearn: '맞벌이 가구 여부',db: '확정급여형(Defined Benefit) 연금 보유 여부',pira: 'IRA(개인퇴직계좌) 보유 여부)',hown: '주택 보유 여부']" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [], + "source": [ + "ml_g = make_pipeline(StandardScaler(), LassoCV(cv=5, max_iter=10000))\n", + "ml_m = make_pipeline(StandardScaler(),\n", + " LogisticRegressionCV(cv=5, penalty='l1', solver='liblinear', max_iter=1000, random_state=42))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- **ml_g**: $g_0(X)$의 추정치 $\\hat{g_0}(X)$ \n", + " -> StandardScaler: Lasso의 L1규제가 변수 스케일에 민감하므로 표준화를 통해 공정하게 패널티 부여 \n", + " -> LassoCV: 많은/상관된 X에서도 변수선택 + 규제로 과적합을 줄이며 5-fold CV로 𝜆를 자동 선택\n", + " \n", + "- **ml_m**: $m_0(X)$의 추정치 $\\hat{m}(X)$\n", + " -> 여기서 D는 이진이므로 $m_0(X)$ = E[D|X] = P(D = 1|X) \n", + " -> L1 Logistic CV: P(D = 1|X)를 추정하기 위해 Logistic 사용 " + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [], + "source": [ + "kf = KFold(n_splits=5, shuffle=True, random_state=123)\n", + "folds = list(kf.split(data[features], data['net_tfa']))" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
coefstd errtP>|t|2.5 %97.5 %
e4016229.1351881461.6940094.2615860.000023364.2675749094.002802
\n", + "
" + ], + "text/plain": [ + " coef std err t P>|t| 2.5 % 97.5 %\n", + "e401 6229.135188 1461.694009 4.261586 0.00002 3364.267574 9094.002802" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dml_plr = dml.DoubleMLPLR(dml_data, ml_l=ml_g, ml_m=ml_m, n_folds=5)\n", + "dml_plr.fit()\n", + "dml_plr.summary" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "머신러닝의 고질적인 과적합 문제를 해결하기 위해 n_folds = 3으로 OOF를 진행해서 최종 ATE를 구합니다. \n", + "여기서도 마찬가지로 $g_0(X)$과 $m_0(X)$는 머신러닝으로 추정하지만, 최종 ATE 추정 단계에서는 선형회귀분석을 사용합니다." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "참고로 위의 FWL 응용 DML방식에서 사용한 수작업 코드 시의 결과와 비교해도 ATE값이 크게 다르지 않게 나오는 것을 확인할 수 있습니다.(95% CI에 겹침)" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "=== Residual OLS (ATE) ===\n", + "==============================================================================\n", + " coef std err t P>|t| [0.025 0.975]\n", + "------------------------------------------------------------------------------\n", + "Intercept 106.2167 563.412 0.189 0.850 -998.186 1210.620\n", + "e401_res 5863.0088 1252.451 4.681 0.000 3407.949 8318.068\n", + "==============================================================================\n", + "Diff (Resid OLS - DoubleML): -366.1264082597454\n" + ] + } + ], + "source": [ + "from sklearn.base import clone\n", + "import statsmodels.formula.api as smf\n", + "\n", + "y, d = 'net_tfa', 'e401'\n", + "\n", + "def oof_predict(pipe, Xdf, ysr, folds, proba=False):\n", + " \"\"\"Same-fold OOF 예측 (각 폴드에서 clone 해서 학습/예측).\"\"\"\n", + " oof = np.empty(len(ysr))\n", + " for tr, te in folds:\n", + " p = clone(pipe)\n", + " p.fit(Xdf.iloc[tr], ysr.iloc[tr])\n", + " oof[te] = (p.predict_proba(Xdf.iloc[te])[:, 1] if proba else p.predict(Xdf.iloc[te]))\n", + " return oof\n", + "\n", + "# OOF 예측: g_hat(X)=E[Y|X], m_hat(X)=P(D=1|X)\n", + "g_hat_oof = oof_predict(ml_g, data[features], data[y], folds, proba=False) # LassoCV 파이프라인\n", + "m_hat_oof = oof_predict(ml_m, data[features], data[d], folds, proba=True) # LogisticCV 파이프라인\n", + "\n", + "\n", + "# 잔차 컬럼 만들고 OLS\n", + "train_pred = data.assign(\n", + " **{f\"{d}_res\": data[d] - m_hat_oof,\n", + " f\"{y}_res\": data[y] - g_hat_oof}\n", + ")\n", + "\n", + "final_model = smf.ols(formula=f'{y}_res ~ {d}_res', data=train_pred).fit()\n", + "print(\"=== Residual OLS (ATE) ===\")\n", + "print(final_model.summary().tables[1])\n", + "\n", + "# DoubleML과 차이 확인\n", + "print(\"Diff (Resid OLS - DoubleML):\", final_model.params[f'{d}_res'] - dml_plr.coef[0])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "즉, 좀 더 간단하게 DoubleML이 제공하는 코드를 사용해도 상관없으므로 편하신 방법을 선택하시면 됩니다." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### **(2) Partially Linear IV Regressor(PLIV)**" ] }, { @@ -33,7 +2674,7 @@ ], "metadata": { "kernelspec": { - "display_name": "base", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -47,9 +2688,9 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.7" + "version": "3.9.6" } }, "nbformat": 4, - "nbformat_minor": 2 + "nbformat_minor": 4 }