From 01a5188d74ef5ae54d73d892036e5187a158b396 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A1=B0=ED=95=B4=EC=B0=BD?= Date: Fri, 28 Nov 2025 23:31:40 +0900 Subject: [PATCH 1/4] add: overview --- book/_toc.yml | 3 ++- book/prescriptive_analytics/overview.md | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 book/prescriptive_analytics/overview.md diff --git a/book/_toc.yml b/book/_toc.yml index 4c35a3e..beb9836 100644 --- a/book/_toc.yml +++ b/book/_toc.yml @@ -23,4 +23,5 @@ parts: sections: - file: cate_and_policy/parametric_cate.ipynb - file: cate_and_policy/nonparametric_cate.ipynb - - file: cate_and_policy/policy_learning.ipynb \ No newline at end of file + - file: cate_and_policy/policy_learning.ipynb + - file: prescriptive_analytics/overview.md \ No newline at end of file diff --git a/book/prescriptive_analytics/overview.md b/book/prescriptive_analytics/overview.md new file mode 100644 index 0000000..8bcc007 --- /dev/null +++ b/book/prescriptive_analytics/overview.md @@ -0,0 +1,5 @@ +# Prescriptive Analytics + +- Prescriptive Analytics는 데이터를 활용해 최적의 의사결정을 도출하는 분석 방식입니다. +- 접근 방식은 크게 **Prediction + Optimization**, **Causal Inference + Optimization** 으로 나눌 수 있습니다. +- 이 섹션에서는 **Causal Inference + Optimization** 에 집중하여, 개입의 인과효과(CATE)를 기반으로 **가장 효율적인 정책·전략을 선택하는 방법**을 다룹니다. From 88ffc8168767cd0825add97db53f5912d3e1d919 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A1=B0=ED=95=B4=EC=B0=BD?= Date: Sun, 7 Dec 2025 20:44:34 +0900 Subject: [PATCH 2/4] update: duality r-learner --- book/_toc.yml | 4 +- ...rning_for_effectiveness_optimization.ipynb | 1344 +++++++++++++++++ 2 files changed, 1347 insertions(+), 1 deletion(-) create mode 100644 book/prescriptive_analytics/heterogeneous_causal_learning_for_effectiveness_optimization.ipynb diff --git a/book/_toc.yml b/book/_toc.yml index 04c86ca..4b59776 100644 --- a/book/_toc.yml +++ b/book/_toc.yml @@ -24,4 +24,6 @@ parts: - file: scm/backdoor_criterion.ipynb - file: scm/frontdoor_criterion.ipynb - file: scm/causal_discovery.ipynb - - file: prescriptive_analytics/overview.md \ No newline at end of file + - file: prescriptive_analytics/overview.md + sections: + - file: prescriptive_analytics/heterogeneous_causal_learning_for_effectiveness_optimization.ipynb \ No newline at end of file diff --git a/book/prescriptive_analytics/heterogeneous_causal_learning_for_effectiveness_optimization.ipynb b/book/prescriptive_analytics/heterogeneous_causal_learning_for_effectiveness_optimization.ipynb new file mode 100644 index 0000000..c5b0644 --- /dev/null +++ b/book/prescriptive_analytics/heterogeneous_causal_learning_for_effectiveness_optimization.ipynb @@ -0,0 +1,1344 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "d6b70f64", + "metadata": {}, + "source": [ + "# Heterogeneous Causal Learning for Effectiveness Optimization" + ] + }, + { + "cell_type": "markdown", + "id": "b841ee2c", + "metadata": {}, + "source": [ + "- 기존 uplift 모델은 이질적 처치 효과를 추정할 수 있지만, 비용 대비 이익을 충분히 반영하지 못합니다.\n", + "\n", + "- 마케팅처럼 예산이 제한된 환경에서는, 비용을 고려하면서 효과를 최대화하는 처치 효과 최적화(treatment effect optimization) 접근이 필요합니다.\n", + "\n", + "- 이를 위해 다음 알고리즘들을 활용합니다.\n", + " - Duality R-learner\n", + " - Direct Ranking Model (DRM)\n", + " - Constrained Ranking Models" + ] + }, + { + "cell_type": "markdown", + "id": "21447276", + "metadata": {}, + "source": [ + "## Setup" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "0f91658c", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[33mWARNING: There was an error checking the latest version of pip.\u001b[0m\u001b[33m\n", + "\u001b[0mNote: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "%pip -q install scikit-uplift" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "9114f7da", + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "\n", + "from sklearn.model_selection import train_test_split\n", + "from sklearn.linear_model import Ridge, LogisticRegression\n", + "from sklearn.metrics import r2_score, roc_auc_score\n", + "\n", + "from sklift.datasets import fetch_hillstrom\n", + "\n", + "import matplotlib.pyplot as plt\n", + "\n", + "RANDOM_STATE = 42\n", + "pd.set_option(\"display.max_columns\", 50)\n", + "\n", + "import warnings\n", + "warnings.filterwarnings(\"ignore\")\n" + ] + }, + { + "cell_type": "markdown", + "id": "57cbb979", + "metadata": {}, + "source": [ + "### Hillstrom E-mail Test Dataset\n", + "\n", + "Kevin Hillstrom E-mail Test Dataset을 사용합니다. \n", + "이 데이터는 e-mail 마케팅 A/B/n 테스트 로그입니다.\n", + "\n", + "- **Treatment**: ${T}$\n", + " - `Mens E-Mail`, `Womens E-Mail` $\\Rightarrow$ ${T = 1}$ (이메일 발송)\n", + " - `No E-Mail` $\\Rightarrow$ ${T = 0}$ (대조군)\n", + "\n", + "- **Gain outcome**: ${Y^r}$\n", + " - 2주간 지출 금액 `spend`\n", + " - “이메일을 보내면 spend가 얼마나 증가하는가?” 가 관심\n", + "\n", + "- **Cost outcome**: ${Y^c}$\n", + " - 이메일 발송 1회당 비용을 1 단위로 단순화\n", + " - 따라서 $Y^c = T \\in \\{0,1\\}$\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "b2b3d7a2", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "data shape: (64000, 8)\n", + "\n", + "spend (target) describe:\n", + "count 64000.000000\n", + "mean 1.050908\n", + "std 15.036448\n", + "min 0.000000\n", + "25% 0.000000\n", + "50% 0.000000\n", + "75% 0.000000\n", + "max 499.000000\n", + "Name: spend, dtype: float64\n", + "\n", + "segment (treatment_raw) 분포:\n", + "segment\n", + "Womens E-Mail 0.334172\n", + "Mens E-Mail 0.332922\n", + "No E-Mail 0.332906\n", + "Name: proportion, dtype: float64\n" + ] + }, + { + "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", + "
recencyhistory_segmenthistorymenswomenszip_codenewbiechannel
0102) $100 - $200142.4410Surburban0Phone
163) $200 - $350329.0811Rural1Web
272) $100 - $200180.6501Surburban1Web
395) $500 - $750675.8310Rural1Web
421) $0 - $10045.3410Urban0Web
\n", + "
" + ], + "text/plain": [ + " recency history_segment history mens womens zip_code newbie channel\n", + "0 10 2) $100 - $200 142.44 1 0 Surburban 0 Phone\n", + "1 6 3) $200 - $350 329.08 1 1 Rural 1 Web\n", + "2 7 2) $100 - $200 180.65 0 1 Surburban 1 Web\n", + "3 9 5) $500 - $750 675.83 1 0 Rural 1 Web\n", + "4 2 1) $0 - $100 45.34 1 0 Urban 0 Web" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dataset = fetch_hillstrom(target_col=\"spend\", return_X_y_t=False)\n", + "\n", + "data = dataset.data.copy() # X (features, 아직 전처리 전)\n", + "y_gain = dataset.target.copy() # Y^r = spend\n", + "treatment_raw = dataset.treatment.copy() # 'Mens E-Mail', 'Womens E-Mail', 'No E-Mail'\n", + "\n", + "print(\"data shape:\", data.shape)\n", + "print(\"\\nspend (target) describe:\")\n", + "print(y_gain.describe())\n", + "\n", + "print(\"\\nsegment (treatment_raw) 분포:\")\n", + "print(treatment_raw.value_counts(normalize=True))\n", + "\n", + "data.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "2ff956f2", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Treatment 비율 (T=1): 0.66709375\n", + "\n", + "Y_gain (spend) 요약:\n", + "count 64000.000000\n", + "mean 1.050908\n", + "std 15.036448\n", + "min 0.000000\n", + "25% 0.000000\n", + "50% 0.000000\n", + "75% 0.000000\n", + "max 499.000000\n", + "Name: spend, dtype: float64\n", + "\n", + "Y_cost 분포:\n", + "segment\n", + "1.0 0.667094\n", + "0.0 0.332906\n", + "Name: proportion, dtype: float64\n" + ] + } + ], + "source": [ + "T = (treatment_raw != \"No E-Mail\").astype(int) # 이메일 받았으면 1, 아니면 0\n", + "\n", + "Y_gain = y_gain.astype(float) # spend (float)\n", + "Y_cost = T.astype(float) # 이메일 발송 비용 (0/1)\n", + "\n", + "print(\"Treatment 비율 (T=1):\", T.mean())\n", + "print(\"\\nY_gain (spend) 요약:\")\n", + "print(pd.Series(Y_gain).describe())\n", + "\n", + "print(\"\\nY_cost 분포:\")\n", + "print(pd.Series(Y_cost).value_counts(normalize=True).rename(\"proportion\"))\n" + ] + }, + { + "cell_type": "markdown", + "id": "bfdbc4fd", + "metadata": {}, + "source": [ + "### Feature 전처리\n", + "\n", + "Hillstrom의 주요 feature 예시:\n", + "\n", + "- `recency`, `history`, `mens`, `womens`, `newbie` 등: 숫자/0-1 변수\n", + "- `history_segment`, `zip_code`, `channel`: 범주형\n", + "\n", + "R-learner / Propensity 모델에 넣기 위해\n", + "\n", + "- 숫자형 컬럼은 그대로 사용하고,\n", + "- 범주형 컬럼(`history_segment`, `zip_code`, `channel`)은 one-hot 인코딩으로 변환합니다.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "e286adf5", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "원본 feature columns:\n", + "['recency', 'history_segment', 'history', 'mens', 'womens', 'zip_code', 'newbie', 'channel']\n", + "\n", + "Numeric columns:\n", + "['recency', 'history', 'mens', 'womens', 'newbie']\n", + "\n", + "Categorical columns (one-hot 대상):\n", + "['history_segment', 'zip_code', 'channel']\n", + "\n", + "전처리 후 feature shape: (64000, 15)\n", + "전처리된 feature columns:\n", + "Index(['recency', 'history', 'mens', 'womens', 'newbie',\n", + " 'history_segment_2) $100 - $200', 'history_segment_3) $200 - $350',\n", + " 'history_segment_4) $350 - $500', 'history_segment_5) $500 - $750',\n", + " 'history_segment_6) $750 - $1,000', 'history_segment_7) $1,000 +',\n", + " 'zip_code_Surburban', 'zip_code_Urban', 'channel_Phone', 'channel_Web'],\n", + " dtype='object')\n" + ] + } + ], + "source": [ + "print(\"원본 feature columns:\")\n", + "print(data.columns.tolist())\n", + "\n", + "# one-hot 대상 범주형 컬럼\n", + "categorical_cols = [\"history_segment\", \"zip_code\", \"channel\"]\n", + "\n", + "# 나머지는 숫자/0-1 컬럼으로 그대로 사용\n", + "numeric_cols = [c for c in data.columns if c not in categorical_cols]\n", + "\n", + "print(\"\\nNumeric columns:\")\n", + "print(numeric_cols)\n", + "print(\"\\nCategorical columns (one-hot 대상):\")\n", + "print(categorical_cols)\n", + "\n", + "# one-hot 인코딩\n", + "X_cat = pd.get_dummies(data[categorical_cols], drop_first=True)\n", + "X_num = data[numeric_cols].reset_index(drop=True)\n", + "\n", + "X_df = pd.concat([X_num, X_cat], axis=1)\n", + "\n", + "print(\"\\n전처리 후 feature shape:\", X_df.shape)\n", + "print(\"전처리된 feature columns:\")\n", + "print(X_df.columns)\n", + "\n", + "# numpy array로 변환\n", + "X = X_df.values.astype(np.float32)\n" + ] + }, + { + "cell_type": "markdown", + "id": "eeb08865", + "metadata": {}, + "source": [ + "데이터 세트는 각각 60%, 20%, 20%의 비율로 학습, 검증 및 테스트 세트의 3부분으로 나뉩니다." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "3d964183", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train shape: (38400, 15)\n", + "Val shape: (12800, 15)\n", + "Test shape: (12800, 15)\n", + "\n", + "Treatment 비율 (Train/Val/Test):\n", + "Train: 0.6670833333333334\n", + "Val : 0.667109375\n", + "Test : 0.667109375\n" + ] + } + ], + "source": [ + "# Train / Validation / Test 분할\n", + "X_train_val, X_test, T_train_val, T_test, Yg_train_val, Yg_test, Yc_train_val, Yc_test = train_test_split(\n", + " X, T, Y_gain, Y_cost,\n", + " test_size=0.2,\n", + " random_state=RANDOM_STATE,\n", + " stratify=T,\n", + ")\n", + "\n", + "X_train, X_val, T_train, T_val, Yg_train, Yg_val, Yc_train, Yc_val = train_test_split(\n", + " X_train_val, T_train_val, Yg_train_val, Yc_train_val,\n", + " test_size=0.25, # 0.25 * 0.8 = 0.2\n", + " random_state=RANDOM_STATE,\n", + " stratify=T_train_val,\n", + ")\n", + "\n", + "print(\"Train shape:\", X_train.shape)\n", + "print(\"Val shape:\", X_val.shape)\n", + "print(\"Test shape:\", X_test.shape)\n", + "\n", + "print(\"\\nTreatment 비율 (Train/Val/Test):\")\n", + "print(\"Train:\", T_train.mean())\n", + "print(\"Val :\", T_val.mean())\n", + "print(\"Test :\", T_test.mean())\n" + ] + }, + { + "cell_type": "markdown", + "id": "576b8d00", + "metadata": {}, + "source": [ + "## Duality R-learner\n", + "\n", + "Duality R-learner는 다음 두 단계를 결합한 방식입니다.\n", + "\n", + "1. R-learner로 Gain/Cost CATE 추정\n", + " - $\\tau_r(x)$: gain uplift (예: spend uplift)\n", + " - $\\tau_c(x)$: cost uplift (예: 이메일 발송 비용 증가량)\n", + "\n", + "2. 예산 제약(budget constraint)을 듀얼 형태로 최적화\n", + " - 라그랑지 승수 $\\lambda$ 를 학습하여 최적 정책을 찾습니다.\n", + "\n", + "우리가 풀고 싶은 문제는 다음과 같습니다.\n", + "\n", + "- 예산 $B$ 하에서\n", + "\n", + " $$\n", + " \\max_{z_i \\in \\{0,1\\}} \\sum_i \\tau_r(x^{(i)}) z_i\n", + " \\quad \\text{s.t.} \\quad\n", + " \\sum_i \\tau_c(x^{(i)}) z_i \\le B\n", + " $$\n", + " \n", + "- $z_i = 1$ 이면 고객 $i$ 에게 이메일 발송, $z_i = 0$ 이면 미발송\n", + "\n", + "Duality R-learner 핵심 단계:\n", + "\n", + "1. Nuisance models: $m_r(x)$, $e(x)$ 학습 \n", + "2. Gain / Cost R-learner: $\\tau_r(x)$, $\\tau_c(x)$ 추정 \n", + "3. Duality: $\\lambda$ 를 gradient ascent 로 최적화 \n", + "4. 정책 생성: $s(x) = \\tau_r(x) - \\lambda^* \\tau_c(x)$\n", + "5. Cost Curve / AUCC 로 정책 성능 평가 " + ] + }, + { + "cell_type": "markdown", + "id": "5d9e213b", + "metadata": {}, + "source": [ + "### 1. Nuisance Models: $m_r(x)$ 와 $e(x)$\n", + "\n", + "R-learner는 아래 식을 기반으로 합니다.\n", + "\n", + "$$\n", + "Y - m^*(X)\n", + "= (T - e^*(X))\\,\\tau^*(X) + \\epsilon\n", + "$$\n", + "\n", + "여기서 \n", + "- $m^*(X) = \\mathbb{E}[Y \\mid X]$: outcome 평균 \n", + "- $e^*(X) = \\mathbb{P}(T=1 \\mid X)$: propensity score \n", + "\n", + "Gain outcome에 대한 nuisance 모델은 다음과 같이 구성합니다.\n", + "\n", + "- $m_r(x)$: Ridge 회귀 \n", + "- $e(x)$: Logistic 회귀 \n", + "\n", + "Cost outcome은 $Y^c = T$ 이므로\n", + "$m_c(x) = e(x)$" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "3e718594", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "== m_r(x) 성능 (R^2: spend 회귀) ==\n", + "Train R^2: 0.0011321804124860835\n", + "Val R^2: 0.0006200906912602333\n", + "\n", + "예측값 분포 (Val):\n", + "count 12800.000000\n", + "mean 0.998539\n", + "std 0.499257\n", + "min -4.757108\n", + "25% 0.690851\n", + "50% 0.961950\n", + "75% 1.234435\n", + "max 4.417754\n", + "dtype: float64\n" + ] + } + ], + "source": [ + "# Gain outcome 평균 모델 m_r(x): Ridge 회귀\n", + "m_r = Ridge(alpha=1.0, random_state=RANDOM_STATE)\n", + "m_r.fit(X_train, Yg_train)\n", + "\n", + "Yg_pred_train = m_r.predict(X_train)\n", + "Yg_pred_val = m_r.predict(X_val)\n", + "\n", + "r2_train = r2_score(Yg_train, Yg_pred_train)\n", + "r2_val = r2_score(Yg_val, Yg_pred_val)\n", + "\n", + "print(\"== m_r(x) 성능 (R^2: spend 회귀) ==\")\n", + "print(\"Train R^2:\", r2_train)\n", + "print(\"Val R^2:\", r2_val)\n", + "\n", + "print(\"\\n예측값 분포 (Val):\")\n", + "print(pd.Series(Yg_pred_val).describe())\n" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "1aa8d52b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "== e(x) 성능 (AUC: treatment 모델) ==\n", + "Train AUC: 0.5117265124259399\n", + "Val AUC: 0.49799591470904553\n", + "\n", + "Propensity e(x) range:\n", + "Train: 0.633101626124968 → 0.8026040280233658\n", + "Val : 0.6331449838328645 → 0.8183494704982611\n" + ] + } + ], + "source": [ + "# Propensity model e(x) = P(T=1 | X): Logistic 회귀\n", + "propensity = LogisticRegression(\n", + " penalty=\"l2\",\n", + " C=1.0,\n", + " solver=\"lbfgs\",\n", + " max_iter=1000,\n", + " n_jobs=-1,\n", + ")\n", + "\n", + "propensity.fit(X_train, T_train)\n", + "\n", + "e_train = propensity.predict_proba(X_train)[:, 1]\n", + "e_val = propensity.predict_proba(X_val)[:, 1]\n", + "e_test = propensity.predict_proba(X_test)[:, 1]\n", + "\n", + "auc_train_e = roc_auc_score(T_train, e_train)\n", + "auc_val_e = roc_auc_score(T_val, e_val)\n", + "\n", + "print(\"== e(x) 성능 (AUC: treatment 모델) ==\")\n", + "print(\"Train AUC:\", auc_train_e)\n", + "print(\"Val AUC:\", auc_val_e)\n", + "\n", + "print(\"\\nPropensity e(x) range:\")\n", + "print(\"Train:\", e_train.min(), \"→\", e_train.max())\n", + "print(\"Val :\", e_val.min(), \"→\", e_val.max())\n" + ] + }, + { + "cell_type": "markdown", + "id": "a2b17bd8", + "metadata": {}, + "source": [ + "여기서 얻은 ${e(x)}$ 는 이후에\n", + "\n", + "- Gain R-learner에서 ${T - e(x)}$ 항을 만들 때,\n", + "- Cost R-learner에서 ${m_c(x)}$ 로도 재사용합니다. " + ] + }, + { + "cell_type": "markdown", + "id": "06b5558e", + "metadata": {}, + "source": [ + "### 2. Gain R-learner: $\\tau_r(x)$\n", + "\n", + "Gain outcome $Y^r$ 에 대해 R-learner 구조는 다음과 같습니다.\n", + "\n", + "$$\n", + "Y^r - m_r(X)\n", + "= (T - e(X))\\,\\tau_r(X) + \\epsilon\n", + "$$\n", + "\n", + "선형 모델 $\\tau_r(x) = w_r^\\top x$ 를 사용하면 학습 절차는 다음과 같습니다.\n", + "\n", + "1. 잔차 계산 \n", + "\n", + " $$\n", + " r^Y = Y^r - \\hat m_r(X), \\quad r^T = T - \\hat e(X)\n", + " $$\n", + "\n", + "2. 행별 스케일링 \n", + "\n", + " $$\n", + " Z = X \\odot r^T\n", + " $$\n", + "\n", + "3. 회귀 \n", + "\n", + " $$\n", + " r^Y \\approx Z w_r\n", + " $$\n", + "\n", + "4. 최종 CATE \n", + "\n", + " $$\n", + " \\hat\\tau_r(x) = w_r^\\top x\n", + " $$" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "28eb5e7c", + "metadata": {}, + "outputs": [], + "source": [ + "def fit_r_learner_linear(\n", + " X_tr, X_val,\n", + " T_tr, T_val,\n", + " Y_tr, Y_val,\n", + " m_tr, m_val,\n", + " e_tr, e_val,\n", + " alpha=1.0,\n", + " name=\"R-learner\",\n", + "):\n", + " \"\"\"\n", + " 선형 τ(x) = w^T x 를 R-learner 방식으로 학습.\n", + " - X_tr, X_val: feature 행렬\n", + " - T_tr, T_val: treatment (0/1)\n", + " - Y_tr, Y_val: outcome\n", + " - m_tr, m_val: m(x) = E[Y|X] 예측값\n", + " - e_tr, e_val: e(x) = P(T=1|X) 예측값\n", + " \"\"\"\n", + " X_tr = np.asarray(X_tr)\n", + " X_val = np.asarray(X_val)\n", + " T_tr = np.asarray(T_tr).astype(float)\n", + " T_val = np.asarray(T_val).astype(float)\n", + " Y_tr = np.asarray(Y_tr).astype(float)\n", + " Y_val = np.asarray(Y_val).astype(float)\n", + " m_tr = np.asarray(m_tr).astype(float)\n", + " m_val = np.asarray(m_val).astype(float)\n", + " e_tr = np.asarray(e_tr).astype(float)\n", + " e_val = np.asarray(e_val).astype(float)\n", + "\n", + " # residuals\n", + " rY_tr = Y_tr - m_tr\n", + " rT_tr = T_tr - e_tr\n", + "\n", + " # Z = X * rT (각 행을 rT로 스케일링)\n", + " Z_tr = X_tr * rT_tr.reshape(-1, 1)\n", + "\n", + " # 회귀: rY ~ Z\n", + " tau_model = Ridge(alpha=alpha, fit_intercept=False, random_state=RANDOM_STATE)\n", + " tau_model.fit(Z_tr, rY_tr)\n", + "\n", + " # τ_hat(x) = w^T x\n", + " tau_tr = tau_model.predict(X_tr)\n", + " tau_val = tau_model.predict(X_val)\n", + "\n", + " print(f\"== {name} 요약 ==\")\n", + " print(\"Train τ_hat summary:\")\n", + " print(pd.Series(tau_tr).describe())\n", + " print(\"\\nVal τ_hat summary:\")\n", + " print(pd.Series(tau_val).describe())\n", + "\n", + " return tau_model, tau_tr, tau_val\n" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "03fc2e68", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "== Gain R-learner τ_r(x) 요약 ==\n", + "Train τ_hat summary:\n", + "count 38400.000000\n", + "mean 0.562616\n", + "std 0.454530\n", + "min -2.669276\n", + "25% 0.265676\n", + "50% 0.528041\n", + "75% 0.837171\n", + "max 1.976344\n", + "dtype: float64\n", + "\n", + "Val τ_hat summary:\n", + "count 12800.000000\n", + "mean 0.567048\n", + "std 0.453703\n", + "min -3.313805\n", + "25% 0.272715\n", + "50% 0.530470\n", + "75% 0.836859\n", + "max 1.944813\n", + "dtype: float64\n" + ] + } + ], + "source": [ + "# m_r(x) 예측값\n", + "m_r_train = m_r.predict(X_train)\n", + "m_r_val = m_r.predict(X_val)\n", + "\n", + "tau_r_model, tau_r_train, tau_r_val = fit_r_learner_linear(\n", + " X_tr=X_train,\n", + " X_val=X_val,\n", + " T_tr=T_train,\n", + " T_val=T_val,\n", + " Y_tr=Yg_train,\n", + " Y_val=Yg_val,\n", + " m_tr=m_r_train,\n", + " m_val=m_r_val,\n", + " e_tr=e_train,\n", + " e_val=e_val,\n", + " alpha=1.0,\n", + " name=\"Gain R-learner τ_r(x)\",\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "e8ae0ccd", + "metadata": {}, + "source": [ + "### 3. Cost R-learner: $\\tau_c(x)$\n", + "\n", + "Cost outcome은 $Y^c = T$ 이므로 \n", + "nuisance model은 이미\n", + "\n", + "$$m_c(x) = e(x)$$\n", + "\n", + "입니다.\n", + "\n", + "Cost R-learner 식은\n", + "\n", + "$$\n", + "Y^c - m_c(X)\n", + "= (T - e(X))\\,\\tau_c(X)\n", + "$$\n", + "\n", + "Gain과 동일한 R-learner 구조로 $\\tau_c(x)$ 를 학습합니다." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "f40867a2", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "== Cost R-learner τ_c(x) 요약 ==\n", + "Train τ_hat summary:\n", + "count 38400.000000\n", + "mean 0.974710\n", + "std 0.156975\n", + "min 0.429515\n", + "25% 0.894193\n", + "50% 0.978889\n", + "75% 1.046973\n", + "max 2.098633\n", + "dtype: float64\n", + "\n", + "Val τ_hat summary:\n", + "count 12800.000000\n", + "mean 0.974875\n", + "std 0.157403\n", + "min 0.424263\n", + "25% 0.894096\n", + "50% 0.979144\n", + "75% 1.046372\n", + "max 2.265868\n", + "dtype: float64\n" + ] + } + ], + "source": [ + "# Cost outcome 평균 m_c(x)는 e(x)를 그대로 사용\n", + "m_c_train = e_train\n", + "m_c_val = e_val\n", + "\n", + "tau_c_model, tau_c_train, tau_c_val = fit_r_learner_linear(\n", + " X_tr=X_train,\n", + " X_val=X_val,\n", + " T_tr=T_train,\n", + " T_val=T_val,\n", + " Y_tr=Yc_train,\n", + " Y_val=Yc_val,\n", + " m_tr=m_c_train,\n", + " m_val=m_c_val,\n", + " e_tr=e_train,\n", + " e_val=e_val,\n", + " alpha=1.0,\n", + " name=\"Cost R-learner τ_c(x)\",\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "48f3ae13", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "== τ_r(x) 요약 ==\n", + "[Train]\n", + "count 38400.000000\n", + "mean 0.562616\n", + "std 0.454530\n", + "min -2.669276\n", + "25% 0.265676\n", + "50% 0.528041\n", + "75% 0.837171\n", + "max 1.976344\n", + "dtype: float64\n", + "\n", + "[Val]\n", + "count 12800.000000\n", + "mean 0.567048\n", + "std 0.453703\n", + "min -3.313805\n", + "25% 0.272715\n", + "50% 0.530470\n", + "75% 0.836859\n", + "max 1.944813\n", + "dtype: float64\n", + "\n", + "[Test]\n", + "count 12800.000000\n", + "mean 0.568442\n", + "std 0.450854\n", + "min -2.486865\n", + "25% 0.268170\n", + "50% 0.534959\n", + "75% 0.841292\n", + "max 1.970332\n", + "dtype: float64\n", + "\n", + "== τ_c(x) 요약 ==\n", + "[Train]\n", + "count 38400.000000\n", + "mean 0.974710\n", + "std 0.156975\n", + "min 0.429515\n", + "25% 0.894193\n", + "50% 0.978889\n", + "75% 1.046973\n", + "max 2.098633\n", + "dtype: float64\n", + "\n", + "[Val]\n", + "count 12800.000000\n", + "mean 0.974875\n", + "std 0.157403\n", + "min 0.424263\n", + "25% 0.894096\n", + "50% 0.979144\n", + "75% 1.046372\n", + "max 2.265868\n", + "dtype: float64\n", + "\n", + "[Test]\n", + "count 12800.000000\n", + "mean 0.975139\n", + "std 0.155813\n", + "min 0.436810\n", + "25% 0.895776\n", + "50% 0.978849\n", + "75% 1.045682\n", + "max 1.803177\n", + "dtype: float64\n" + ] + } + ], + "source": [ + "# Test set CATE 예측\n", + "tau_r_test = tau_r_model.predict(X_test)\n", + "tau_c_test = tau_c_model.predict(X_test)\n", + "\n", + "print(\"== τ_r(x) 요약 ==\")\n", + "print(\"[Train]\")\n", + "print(pd.Series(tau_r_train).describe())\n", + "print(\"\\n[Val]\")\n", + "print(pd.Series(tau_r_val).describe())\n", + "print(\"\\n[Test]\")\n", + "print(pd.Series(tau_r_test).describe())\n", + "\n", + "print(\"\\n== τ_c(x) 요약 ==\")\n", + "print(\"[Train]\")\n", + "print(pd.Series(tau_c_train).describe())\n", + "print(\"\\n[Val]\")\n", + "print(pd.Series(tau_c_val).describe())\n", + "print(\"\\n[Test]\")\n", + "print(pd.Series(tau_c_test).describe())\n" + ] + }, + { + "cell_type": "markdown", + "id": "e6e387a2", + "metadata": {}, + "source": [ + "### 4. Duality: 예산 제약 하에서 라그랑지안 기반 $\\lambda$ 최적화\n", + "\n", + "우리가 풀고자 하는 문제는 다음과 같습니다.\n", + "\n", + "$$\n", + "\\begin{aligned}\n", + "\\max_{z_i \\in \\{0,1\\}} &\\quad \\sum_i \\tau_r(x^{(i)}) z_i \\\\\n", + "\\text{s.t.} &\\quad \\sum_i \\tau_c(x^{(i)}) z_i \\le B.\n", + "\\end{aligned}\n", + "$$\n", + "\n", + "여기서 $z_i = 1$ 은 고객 $i$를 타겟팅하는 경우이며, $B$는 전체 예산입니다. \n", + "이 제약을 다루기 위해 라그랑지 승수 $\\lambda \\ge 0$ 를 도입하면 라그랑지안은\n", + "\n", + "$$\n", + "L(z,\\lambda)\n", + "= -\\sum_i \\tau_r(x^{(i)}) z_i\n", + "+ \\lambda\\left(\\sum_i \\tau_c(x^{(i)}) z_i - B\\right)\n", + "$$\n", + "\n", + "으로 표현됩니다.\n", + "\n", + "고정된 $\\lambda$ 아래에서 고객 $i$의 효율성 점수는 다음과 같습니다.\n", + "\n", + "$$\n", + "s_i(\\lambda) = \\tau_r(x^{(i)}) - \\lambda\\, \\tau_c(x^{(i)}).\n", + "$$\n", + "\n", + "점수가 양수이면 타겟팅하는 것이 유리하므로 \n", + "$s_i(\\lambda) \\ge 0$ 이면 $z_i = 1$, 음수이면 $z_i = 0$ 을 선택합니다. \n", + "즉, $\\lambda$가 주어지면 단순히 $s_i(\\lambda)$가 양수인 고객만 선택하면 됩니다.\n", + "\n", + "듀얼 목적함수의 기울기는\n", + "\n", + "$$\n", + "\\frac{\\partial g}{\\partial \\lambda}\n", + "\\approx \\sum_i z_i \\tau_c(x^{(i)}) - B\n", + "$$\n", + "\n", + "으로 근사할 수 있고, 이에 따른 gradient ascent 업데이트는\n", + "\n", + "$$\n", + "\\lambda \\leftarrow \\bigl[\\lambda + \\eta(\\text{cost\\_used} - B)\\bigr]_+\n", + "$$\n", + "\n", + "로 진행됩니다. 여기서 $[\\cdot]_+$ 는 $\\lambda$가 음수가 되지 않도록 하는 projection입니다.\n", + "\n", + "예산을 초과하면 $(\\text{cost\\_used} > B)$ $\\lambda$는 증가하여 비용 효과를 더 강하게 억제하고, \n", + "예산보다 적게 사용하면 $\\lambda$는 감소하여 더 많은 고객이 선택될 수 있도록 조정됩니다.\n", + "\n", + "Train 데이터에서 양의 Cost CATE 합을 기반으로 예산 $B$를 설정하고, \n", + "위 규칙을 반복 적용하여 최종 $\\lambda^*$와 정책을 학습합니다." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "5fe3e686", + "metadata": {}, + "outputs": [], + "source": [ + "def duality_learn_lambda(\n", + " tau_r,\n", + " tau_c,\n", + " budget_fraction=0.3,\n", + " lr=1e-5,\n", + " n_iter=200,\n", + " verbose_every=20,\n", + "):\n", + " \"\"\"\n", + " τ_r, τ_c 가 주어졌을 때 Duality gradient ascent로 λ 학습.\n", + " - budget_fraction: 전체 양의 cost effect 합 중 몇 %를 예산으로 둘지\n", + " \"\"\"\n", + " tau_r = np.asarray(tau_r).astype(float)\n", + " tau_c = np.asarray(tau_c).astype(float)\n", + "\n", + " # 양의 cost effect만 예산 계산에 사용\n", + " tau_c_pos = np.clip(tau_c, a_min=0.0, a_max=None)\n", + " total_pos_cost = tau_c_pos.sum()\n", + " B = budget_fraction * total_pos_cost\n", + "\n", + " lam = 0.0\n", + "\n", + " for it in range(n_iter + 1):\n", + " # effectiveness score\n", + " s = tau_r - lam * tau_c\n", + "\n", + " # z_i: 선택 여부 (s_i >= 0 이면 선택)\n", + " z = (s >= 0).astype(float)\n", + "\n", + " cost_used = (tau_c_pos * z).sum()\n", + " gain_used = (np.clip(tau_r, 0.0, None) * z).sum()\n", + "\n", + " # ∂g/∂λ ≈ cost_used - B\n", + " grad = cost_used - B\n", + "\n", + " # gradient ascent (λ >= 0 유지)\n", + " lam = max(0.0, lam + lr * grad)\n", + "\n", + " if it % verbose_every == 0:\n", + " sel_ratio = z.mean()\n", + " print(\n", + " f\"[iter {it:03d}] λ={lam:.6f}, \"\n", + " f\"cost_used={cost_used:.4f}, gain_used={gain_used:.4f}, \"\n", + " f\"grad={grad:.4f}, selected={sel_ratio:.3f}\"\n", + " )\n", + "\n", + " print(\"\\n최종 λ*:\", lam)\n", + " print(\"총 양의 cost effect 합:\", total_pos_cost)\n", + " print(f\"예산 B (fraction={budget_fraction}):\", B)\n", + " return lam, B\n" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "233a6a45", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[iter 000] λ=0.228487, cost_used=34077.3618, gain_used=22363.6067, grad=22848.7019, selected=0.907\n", + "[iter 020] λ=0.784009, cost_used=11251.8179, gain_used=12501.7237, grad=23.1579, selected=0.298\n", + "[iter 040] λ=0.784586, cost_used=11228.2803, gain_used=12483.2661, grad=-0.3797, selected=0.297\n", + "[iter 060] λ=0.784587, cost_used=11228.2803, gain_used=12483.2661, grad=-0.3797, selected=0.297\n", + "[iter 080] λ=0.784587, cost_used=11228.2803, gain_used=12483.2661, grad=-0.3797, selected=0.297\n", + "[iter 100] λ=0.784587, cost_used=11228.2803, gain_used=12483.2661, grad=-0.3797, selected=0.297\n", + "[iter 120] λ=0.784588, cost_used=11228.2803, gain_used=12483.2661, grad=-0.3797, selected=0.297\n", + "[iter 140] λ=0.784588, cost_used=11229.1281, gain_used=12483.9314, grad=0.4682, selected=0.297\n", + "[iter 160] λ=0.784588, cost_used=11229.1281, gain_used=12483.9314, grad=0.4682, selected=0.297\n", + "[iter 180] λ=0.784589, cost_used=11229.1281, gain_used=12483.9314, grad=0.4682, selected=0.297\n", + "[iter 200] λ=0.784589, cost_used=11229.1281, gain_used=12483.9314, grad=0.4682, selected=0.297\n", + "\n", + "최종 λ*: 0.7845891317539325\n", + "총 양의 cost effect 합: 37428.86642372066\n", + "예산 B (fraction=0.3): 11228.659927116198\n" + ] + } + ], + "source": [ + "lambda_star, B = duality_learn_lambda(\n", + " tau_r=tau_r_train,\n", + " tau_c=tau_c_train,\n", + " budget_fraction=0.3,\n", + " lr=1e-5,\n", + " n_iter=200,\n", + " verbose_every=20,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "a54ac8cf", + "metadata": {}, + "outputs": [], + "source": [ + "def selection_summary(tau_r, tau_c, lam, name=\"\"):\n", + " tau_r = np.asarray(tau_r).astype(float)\n", + " tau_c = np.asarray(tau_c).astype(float)\n", + "\n", + " s = tau_r - lam * tau_c\n", + " z = (s >= 0).astype(float)\n", + "\n", + " gain_pos = np.clip(tau_r, 0.0, None)\n", + " cost_pos = np.clip(tau_c, 0.0, None)\n", + "\n", + " gain_used = (gain_pos * z).sum()\n", + " cost_used = (cost_pos * z).sum()\n", + " sel_ratio = z.mean()\n", + "\n", + " ratio = gain_used / cost_used if cost_used > 0 else np.nan\n", + "\n", + " print(f\"\\n== Selection summary ({name}) ==\")\n", + " print(f\"λ = {lam:.6f}\")\n", + " print(f\"선택 비율: {sel_ratio:.3f} ({z.sum():.0f} / {len(z)})\")\n", + " print(f\"총 gain (∑ τ_r^+ z): {gain_used:.4f}\")\n", + " print(f\"총 cost (∑ τ_c^+ z): {cost_used:.4f}\")\n", + " print(f\"gain / cost 비율: {ratio:.4f}\")\n", + "\n", + " return {\n", + " \"lambda\": lam,\n", + " \"selected_ratio\": sel_ratio,\n", + " \"gain_used\": gain_used,\n", + " \"cost_used\": cost_used,\n", + " \"gain_per_cost\": ratio,\n", + " }\n" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "6947da6a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "== Selection summary (Train) ==\n", + "λ = 0.784589\n", + "선택 비율: 0.297 (11420 / 38400)\n", + "총 gain (∑ τ_r^+ z): 12483.2661\n", + "총 cost (∑ τ_c^+ z): 11228.2803\n", + "gain / cost 비율: 1.1118\n", + "\n", + "== Selection summary (Val) ==\n", + "λ = 0.784589\n", + "선택 비율: 0.293 (3753 / 12800)\n", + "총 gain (∑ τ_r^+ z): 4124.4445\n", + "총 cost (∑ τ_c^+ z): 3685.4466\n", + "gain / cost 비율: 1.1191\n", + "\n", + "== Selection summary (Test) ==\n", + "λ = 0.784589\n", + "선택 비율: 0.302 (3862 / 12800)\n", + "총 gain (∑ τ_r^+ z): 4210.7541\n", + "총 cost (∑ τ_c^+ z): 3794.4139\n", + "gain / cost 비율: 1.1097\n" + ] + } + ], + "source": [ + "_ = selection_summary(tau_r_train, tau_c_train, lambda_star, name=\"Train\")\n", + "_ = selection_summary(tau_r_val, tau_c_val, lambda_star, name=\"Val\")\n", + "_ = selection_summary(tau_r_test, tau_c_test, lambda_star, name=\"Test\")\n" + ] + }, + { + "cell_type": "markdown", + "id": "6ec8b309", + "metadata": {}, + "source": [ + "### 5. Cost Curve & AUCC\n", + "\n", + "Cost Curve 와 그 면적(AUCC, Area Under Cost Curve)로 비용 대비 uplift 모델을 평가합니다.\n", + "\n", + "Test 셋에서:\n", + "\n", + "1. Duality 점수 ${s(x) = \\tau_r(x) - \\lambda^* \\tau_c(x)}$ 기준으로 내림차순 정렬\n", + "2. 정렬된 순서대로\n", + " - ${\\tau_r^+(x) = \\max(\\tau_r(x), 0)}$\n", + " - ${\\tau_c^+(x) = \\max(\\tau_c(x), 0)}$\n", + " 의 누적합 계산\n", + "3. 누적 cost/gain 을 각각 최종값으로 나누어 ${[0,1]}$ 범위로 정규화\n", + "4. $(0,0)$ 에서 $(1,1)$ 까지 이어지는 곡선을 Cost Curve 로 사용\n", + "5. 수치 적분으로 AUCC 계산:\n", + " $$\n", + " \\text{AUCC} = \\int_0^1 \\text{gain}(x)\\,dx\n", + " $$\n", + "\n", + "비교를 위해 랜덤 ranking 의 Cost Curve 와 AUCC 도 함께 계산합니다.\n", + "\n", + "- AUCC ${\\approx 0.5}$: 랜덤에 가까운 정책\n", + "- AUCC ${>} 0.5$: 효율적인 고객부터 잘 고르는 정책\n" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "56c9cc3e", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "== Test set Cost Curve (τ 기반) ==\n", + "max_cost: 12481.778185597159\n", + "max_gain: 7511.766716461641\n", + "Normalized AUCC: 0.6946670819574676\n" + ] + } + ], + "source": [ + "# Duality R-learner 기반 effectiveness score (Test set)\n", + "s_test = tau_r_test - lambda_star * tau_c_test\n", + "\n", + "# score 기준 내림차순 정렬\n", + "order = np.argsort(-s_test)\n", + "tau_r_sorted = np.clip(tau_r_test[order], 0.0, None) # gain은 양수 부분만\n", + "tau_c_sorted = np.clip(tau_c_test[order], 0.0, None) # cost도 양수 부분만\n", + "\n", + "# 누적 cost / gain\n", + "cum_cost = np.cumsum(tau_c_sorted)\n", + "cum_gain = np.cumsum(tau_r_sorted)\n", + "\n", + "# 0 지점 포함\n", + "cum_cost = np.insert(cum_cost, 0, 0.0)\n", + "cum_gain = np.insert(cum_gain, 0, 0.0)\n", + "\n", + "# 정규화\n", + "max_cost = cum_cost[-1]\n", + "max_gain = cum_gain[-1]\n", + "\n", + "x = cum_cost / max_cost\n", + "y = cum_gain / max_gain\n", + "\n", + "# AUCC 계산\n", + "aucc = np.trapz(y, x)\n", + "\n", + "print(\"== Test set Cost Curve (τ 기반) ==\")\n", + "print(\"max_cost:\", max_cost)\n", + "print(\"max_gain:\", max_gain)\n", + "print(\"Normalized AUCC:\", aucc)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "3b6badd9", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Random ranking AUCC: 0.5006872435398204\n" + ] + }, + { + "data": { + "image/png": "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yWG9mwbrPTdHR0f+3RNZOAZO+eRyiIiIQFxc3D0/X04mkg+CeaJKDuvdNFjvucmPperVq6sAiogsEwOnPAxBk4+PD1xdXYsc/MiJJCsrC/b29gycShDr3TRY73cm1w0PD0e1atX4909koRg45emeMwRNFSpUuKcK5YnENFjvrPfSQHLMSPAkP54cHBxMXRwiMgIODs/BMKZJWpqIiIrK0EUnP8KIyDIxcMoHxyYR0b3gdweR5WPgRERERFRIDJzonowYMQL9+vXLvt2pUyf873//KzW1WdrKU5xOnz4NX19fNXOTSk5GRgYCAgKwb98+VjuRFTNp4PTPP/+gT58+qFy5smriXrly5X8+Z8uWLWjWrBmcnJxQs2ZNfPfddyVSVnMIZKQO5SKDUitWrIhu3bphwYIFaraPsS1fvhxvvfVW9m05wcyZM6fY35dM9Z44caLKk2WtJk+ejBdffDHfxSjr1q2r/jZkdmheBR2T6dOno0mTJrnuk+fLawQGBqr9yeKX8re6cePGXNsdPHgQjz/+uArknJ2dUatWLYwaNQpnzpy55/f366+/qvch+2vYsCFWr179n89JT0/H66+/Dn9/f1Veea/y2c85fvHNN99EjRo11H4bN26MtWvX3lEPhs+a4SLlyDl+afz48Zg0adI9vzciMn8mDZySk5PVF9i8efMKtf3FixfRq1cvdO7cGYcOHVItCk8//TT+/vtvo5fVHPTo0UNNhb506RLWrFmj6unll19G79691SwfYypfvnyhVpW+n/d14cIFzJ49G19++SWmTZuG0tACYSwFJV+9cuUK/vrrLxVQ5rV9+3akpqbi0Ucfxffff3/Pry2fn+DgYGzatAkffvghjh49qoIM+Ty98MIL2dtJOVq3bq2Clp9++gknT55U/3p6euKNN964p9feuXMnBg0ahKeeekoFZdKqKZdjx47d9XkDBgxQQd23336rWuR+/vln1KlTJ/vxKVOmqM/Np59+ihMnTuDZZ5/Fww8/rF4jp/r166vPmuEidZrTkCFD1H3Hjx+/p/dHRBZAKyWkKCtWrLjrNhMnTtTq16+f676BAwdq3bt3L/TrxMfHq9eSf/NKTU3VTpw4of69V3q9XsvIyFD/lqThw4drffv2veP+jRs3qvf79ddfq9sXL15Utw8ePJi9TWxsrLpv8+bN6nZWVpb25JNPagEB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cE9PTzU6v7gHhxu6GiV5p4+PD8c4lSDWu2mw3k2Hdc96tyZ6I59bixIbcPQyERERUSExcCIiIiIqJAZORERERIXEwImIiIiokBg4ERERERUSAyciIiKiQmLgRERERFRIDJyIiIiIComBExEREVEhMXAiIiIiKiQGTkRERETmsshvSTMszSfr0hhrPZ3ExEQ4OztzrboSxHo3Dda76bDuWe/WRG/kc6shJijM8r1WFzhJxYuqVauauihERERUymIEWez3bmy0woRXFha13rhxA2XKlIGNjY1RolYJyq5evfqfKywT693c8fPOurc2/MxbZr1LKCRBU+XKlf+zRcvqWpykQqpUqWL015EDy8Cp5LHeTYP1bjqse9a7NfEw4rn1v1qaDDg4nIiIiKiQGDgRERERFRIDp2Lm5OSEadOmqX+p5LDeTYP1bjqse9a7NXEqRedWqxscTkRERHSv2OJEREREVEgMnIiIiIgKiYETERERUSExcLoH8+bNQ0BAgEr9HhISgj179tx1+19//RV169ZV2zds2BCrV6++l5e1ekWp96+//hrt27dHuXLl1CU0NPQ/jxMVz+fdYMmSJSrJbL9+/Vi1JVT3cXFxeOGFF1CpUiU1iLZ27dr8vimBep8zZw7q1KkDFxcXlaRx7NixSEtLu5eXtlr//PMP+vTpoxJQyvfGypUr//M5W7ZsQbNmzdRnvWbNmvjuu+9KpKySLZOKYMmSJZqjo6O2YMEC7fjx49qoUaO0smXLajdv3sx3+x07dmh2dnbaBx98oJ04cUKbMmWK5uDgoB09epT1bsR6Hzx4sDZv3jzt4MGD2smTJ7URI0Zonp6e2rVr11jvRqx3g4sXL2p+fn5a+/bttb59+7LOS6Du09PTtebNm2sPPvigtn37dnUMtmzZoh06dIj1b8R6X7Rokebk5KT+lTr/+++/tUqVKmljx45lvRfB6tWrtddff11bvny5TFjTVqxYcdftL1y4oLm6umrjxo1T59ZPP/1UnWvXrl2rGRsDpyJq2bKl9sILL2Tf1ul0WuXKlbWZM2fmu/2AAQO0Xr165bovJCREGz169L0cL6tV1HrPKysrSytTpoz2/fffG7GUlude6l3quk2bNto333yjDR8+nIFTCdX9559/rgUGBmoZGRn3+pJ0D/Uu23bp0iXXfXIyb9u2LevzHhUmcJo4caJW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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# 랜덤 베이스라인 Cost Curve\n", + "rng = np.random.default_rng(RANDOM_STATE)\n", + "perm = rng.permutation(len(tau_r_test))\n", + "\n", + "tau_r_rand = np.clip(tau_r_test[perm], 0.0, None)\n", + "tau_c_rand = np.clip(tau_c_test[perm], 0.0, None)\n", + "\n", + "cum_cost_rand = np.cumsum(tau_c_rand)\n", + "cum_gain_rand = np.cumsum(tau_r_rand)\n", + "\n", + "cum_cost_rand = np.insert(cum_cost_rand, 0, 0.0)\n", + "cum_gain_rand = np.insert(cum_gain_rand, 0, 0.0)\n", + "\n", + "x_rand = cum_cost_rand / cum_cost_rand[-1]\n", + "y_rand = cum_gain_rand / cum_gain_rand[-1]\n", + "\n", + "aucc_rand = np.trapz(y_rand, x_rand)\n", + "print(\"Random ranking AUCC:\", aucc_rand)\n", + "\n", + "# 플롯\n", + "plt.figure(figsize=(6, 5))\n", + "plt.plot(x, y, label=f\"Duality R-learner (AUCC={aucc:.3f})\")\n", + "plt.plot(x_rand, y_rand, linestyle=\"--\", label=f\"Random (AUCC={aucc_rand:.3f})\")\n", + "plt.plot([0, 1], [0, 1], alpha=0.4, linewidth=1, label=\"y=x reference\")\n", + "\n", + "plt.xlabel(\"Cumulative cost / max\")\n", + "plt.ylabel(\"Cumulative gain / max\")\n", + "plt.title(\"Cost curve on Test set (τ-based)\")\n", + "plt.legend()\n", + "plt.grid(alpha=0.3)\n", + "plt.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "965eecec", + "metadata": {}, + "outputs": [], + "source": [ + " " + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.14" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From 8ee2699f7e179d5f0f83e42557e26ddbaabb0ce4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A1=B0=ED=95=B4=EC=B0=BD?= Date: Sun, 14 Dec 2025 17:49:30 +0900 Subject: [PATCH 3/4] fix: dataset and aucc logic --- ...rning_for_effectiveness_optimization.ipynb | 1225 +++++++++-------- book/prescriptive_analytics/overview.md | 4 +- 2 files changed, 652 insertions(+), 577 deletions(-) diff --git a/book/prescriptive_analytics/heterogeneous_causal_learning_for_effectiveness_optimization.ipynb b/book/prescriptive_analytics/heterogeneous_causal_learning_for_effectiveness_optimization.ipynb index c5b0644..0082571 100644 --- a/book/prescriptive_analytics/heterogeneous_causal_learning_for_effectiveness_optimization.ipynb +++ b/book/prescriptive_analytics/heterogeneous_causal_learning_for_effectiveness_optimization.ipynb @@ -47,24 +47,69 @@ } ], "source": [ - "%pip -q install scikit-uplift" + "%pip -q install fractional-uplift" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 1, "id": "9114f7da", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "

🌲 Try YDF, the successor of\n", + " TensorFlow\n", + " Decision Forests using the same algorithms but with more features and faster\n", + " training!\n", + "

\n", + "
\n", + "
\n", + " \n", + " Old code

\n", + "
\n",
+       "import tensorflow_decision_forests as tfdf\n",
+       "\n",
+       "tf_ds = tfdf.keras.pd_dataframe_to_tf_dataset(ds, label=\"l\")\n",
+       "model = tfdf.keras.RandomForestModel(label=\"l\")\n",
+       "model.fit(tf_ds)\n",
+       "
\n", + "
\n", + "
\n", + "
\n", + " \n", + " New code

\n", + "
\n",
+       "import ydf\n",
+       "\n",
+       "model = ydf.RandomForestLearner(label=\"l\").train(ds)\n",
+       "
\n", + "
\n", + "
\n", + "

(Learn more in the migration\n", + " guide)

\n" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "import numpy as np\n", "import pandas as pd\n", "\n", - "from sklearn.model_selection import train_test_split\n", "from sklearn.linear_model import Ridge, LogisticRegression\n", "from sklearn.metrics import r2_score, roc_auc_score\n", "\n", - "from sklift.datasets import fetch_hillstrom\n", + "import fractional_uplift as fr \n", "\n", "import matplotlib.pyplot as plt\n", "\n", @@ -80,27 +125,33 @@ "id": "57cbb979", "metadata": {}, "source": [ - "### Hillstrom E-mail Test Dataset\n", + "### CriteoWithSyntheticCostAndSpend Dataset\n", "\n", - "Kevin Hillstrom E-mail Test Dataset을 사용합니다. \n", - "이 데이터는 e-mail 마케팅 A/B/n 테스트 로그입니다.\n", "\n", - "- **Treatment**: ${T}$\n", - " - `Mens E-Mail`, `Womens E-Mail` $\\Rightarrow$ ${T = 1}$ (이메일 발송)\n", - " - `No E-Mail` $\\Rightarrow$ ${T = 0}$ (대조군)\n", + "- CriteoWithSyntheticCostAndSpend 데이터는\n", + " - treatment: 광고 노출 여부 (0/1)\n", + " - spend: 고객이 발생시킨 매출(이익)\n", + " - cost: 해당 고객에게 treatment를 줬을 때 발생한 고객별 비용\n", "\n", - "- **Gain outcome**: ${Y^r}$\n", - " - 2주간 지출 금액 `spend`\n", - " - “이메일을 보내면 spend가 얼마나 증가하는가?” 가 관심\n", + " 을 모두 포함하므로, 비용까지 고려한 처치 최적화 실험에 적합합니다. \n", "\n", - "- **Cost outcome**: ${Y^c}$\n", - " - 이메일 발송 1회당 비용을 1 단위로 단순화\n", - " - 따라서 $Y^c = T \\in \\{0,1\\}$\n" + "- 세 가지 DataFrame으로 구성\n", + " - `train_data`\n", + " - `distill_data` (여기서는 validation 역할로 사용)\n", + " - `test_data`\n", + "\n", + "- 주요 컬럼\n", + " - `treatment`: 광고/프로모션 노출 여부 (0/1)\n", + " - `spend`: 사용자가 발생시킨 매출(이익) → Gain outcome: $(Y^r)$\n", + " - `cost`: 해당 고객에게 treatment를 줄 때 들어간 비용 → Cost outcome: $(Y^c)$\n", + " - `treatment_propensity`: 실험에서 treatment에 할당될 확률\n", + " - `sample_weight`: 샘플 가중치\n", + " - `criteo.features`: feature 컬럼 이름 리스트 (문자열 리스트)" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 2, "id": "b2b3d7a2", "metadata": {}, "outputs": [ @@ -108,25 +159,13 @@ "name": "stdout", "output_type": "stream", "text": [ - "data shape: (64000, 8)\n", + "Train shape: (72053, 19)\n", + "Val shape: (17774, 19)\n", + "Test shape: (20333, 19)\n", "\n", - "spend (target) describe:\n", - "count 64000.000000\n", - "mean 1.050908\n", - "std 15.036448\n", - "min 0.000000\n", - "25% 0.000000\n", - "50% 0.000000\n", - "75% 0.000000\n", - "max 499.000000\n", - "Name: spend, dtype: float64\n", + "Feature columns: ['f0', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'f10', 'f11']\n", "\n", - "segment (treatment_raw) 분포:\n", - "segment\n", - "Womens E-Mail 0.334172\n", - "Mens E-Mail 0.332922\n", - "No E-Mail 0.332906\n", - "Name: proportion, dtype: float64\n" + "Train head:\n" ] }, { @@ -150,150 +189,234 @@ " \n", " \n", " \n", - " recency\n", - " history_segment\n", - " history\n", - " mens\n", - " womens\n", - " zip_code\n", - " newbie\n", - " channel\n", + " f0\n", + " f1\n", + " f2\n", + " f3\n", + " f4\n", + " f5\n", + " f6\n", + " f7\n", + " f8\n", + " f9\n", + " f10\n", + " f11\n", + " treatment\n", + " conversion\n", + " treatment_propensity\n", + " cost_percentage\n", + " spend\n", + " cost\n", + " sample_weight\n", " \n", " \n", " \n", " \n", - " 0\n", - " 10\n", - " 2) $100 - $200\n", - " 142.44\n", + " 44\n", + " 12.616365\n", + " 10.059654\n", + " 8.964588\n", + " 4.679882\n", + " 10.280525\n", + " 4.115453\n", + " 0.294443\n", + " 4.833815\n", + " 3.955396\n", + " 13.190056\n", + " 5.300375\n", + " -0.168679\n", " 1\n", " 0\n", - " Surburban\n", - " 0\n", - " Phone\n", + " 0.85\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 100.0\n", " \n", " \n", - " 1\n", - " 6\n", - " 3) $200 - $350\n", - " 329.08\n", - " 1\n", + " 187\n", + " 12.616365\n", + " 10.059654\n", + " 8.904597\n", + " 4.679882\n", + " 10.280525\n", + " 4.115453\n", + " 0.294443\n", + " 4.833815\n", + " 3.955396\n", + " 13.190056\n", + " 5.300375\n", + " -0.168679\n", " 1\n", - " Rural\n", - " 1\n", - " Web\n", + " 0\n", + " 0.85\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 100.0\n", " \n", " \n", - " 2\n", - " 7\n", - " 2) $100 - $200\n", - " 180.65\n", - " 0\n", + " 484\n", + " 22.377238\n", + " 10.059654\n", + " 8.214383\n", + " 4.679882\n", + " 10.280525\n", + " 4.115453\n", + " -2.411115\n", + " 4.833815\n", + " 3.971858\n", + " 13.190056\n", + " 5.300375\n", + " -0.168679\n", " 1\n", - " Surburban\n", - " 1\n", - " Web\n", + " 0\n", + " 0.85\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 100.0\n", " \n", " \n", - " 3\n", - " 9\n", - " 5) $500 - $750\n", - " 675.83\n", + " 528\n", + " 12.616365\n", + " 10.059654\n", + " 8.350682\n", + " 4.679882\n", + " 10.280525\n", + " 4.115453\n", + " 0.294443\n", + " 4.833815\n", + " 3.955396\n", + " 16.226044\n", + " 5.300375\n", + " -0.168679\n", " 1\n", " 0\n", - " Rural\n", - " 1\n", - " Web\n", + " 0.85\n", + " 0.000000\n", + " 0.000000\n", + " 0.000000\n", + " 100.0\n", " \n", " \n", - " 4\n", - " 2\n", - " 1) $0 - $100\n", - " 45.34\n", + " 1108\n", + " 14.617627\n", + " 10.059654\n", + " 8.489929\n", + " 3.907662\n", + " 13.253813\n", + " 4.115453\n", + " -2.411115\n", + " 4.833815\n", + " 3.809530\n", + " 42.176324\n", + " 5.737292\n", + " -0.560340\n", " 1\n", - " 0\n", - " Urban\n", - " 0\n", - " Web\n", + " 1\n", + " 0.85\n", + " 0.090777\n", + " 36.459294\n", + " 3.309655\n", + " 1.0\n", " \n", " \n", "\n", "" ], "text/plain": [ - " recency history_segment history mens womens zip_code newbie channel\n", - "0 10 2) $100 - $200 142.44 1 0 Surburban 0 Phone\n", - "1 6 3) $200 - $350 329.08 1 1 Rural 1 Web\n", - "2 7 2) $100 - $200 180.65 0 1 Surburban 1 Web\n", - "3 9 5) $500 - $750 675.83 1 0 Rural 1 Web\n", - "4 2 1) $0 - $100 45.34 1 0 Urban 0 Web" + " f0 f1 f2 f3 f4 f5 f6 \\\n", + "44 12.616365 10.059654 8.964588 4.679882 10.280525 4.115453 0.294443 \n", + "187 12.616365 10.059654 8.904597 4.679882 10.280525 4.115453 0.294443 \n", + "484 22.377238 10.059654 8.214383 4.679882 10.280525 4.115453 -2.411115 \n", + "528 12.616365 10.059654 8.350682 4.679882 10.280525 4.115453 0.294443 \n", + "1108 14.617627 10.059654 8.489929 3.907662 13.253813 4.115453 -2.411115 \n", + "\n", + " f7 f8 f9 f10 f11 treatment \\\n", + "44 4.833815 3.955396 13.190056 5.300375 -0.168679 1 \n", + "187 4.833815 3.955396 13.190056 5.300375 -0.168679 1 \n", + "484 4.833815 3.971858 13.190056 5.300375 -0.168679 1 \n", + "528 4.833815 3.955396 16.226044 5.300375 -0.168679 1 \n", + "1108 4.833815 3.809530 42.176324 5.737292 -0.560340 1 \n", + "\n", + " conversion treatment_propensity cost_percentage spend cost \\\n", + "44 0 0.85 0.000000 0.000000 0.000000 \n", + "187 0 0.85 0.000000 0.000000 0.000000 \n", + "484 0 0.85 0.000000 0.000000 0.000000 \n", + "528 0 0.85 0.000000 0.000000 0.000000 \n", + "1108 1 0.85 0.090777 36.459294 3.309655 \n", + "\n", + " sample_weight \n", + "44 100.0 \n", + "187 100.0 \n", + "484 100.0 \n", + "528 100.0 \n", + "1108 1.0 " ] }, - "execution_count": 11, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "dataset = fetch_hillstrom(target_col=\"spend\", return_X_y_t=False)\n", + "criteo = fr.example_data.CriteoWithSyntheticCostAndSpend.load()\n", "\n", - "data = dataset.data.copy() # X (features, 아직 전처리 전)\n", - "y_gain = dataset.target.copy() # Y^r = spend\n", - "treatment_raw = dataset.treatment.copy() # 'Mens E-Mail', 'Womens E-Mail', 'No E-Mail'\n", + "train_df = criteo.train_data.copy()\n", + "val_df = criteo.distill_data.copy() # distill_data를 validation 데이터로 사용\n", + "test_df = criteo.test_data.copy()\n", + "features = criteo.features # feature column 리스트\n", "\n", - "print(\"data shape:\", data.shape)\n", - "print(\"\\nspend (target) describe:\")\n", - "print(y_gain.describe())\n", + "print(\"Train shape:\", train_df.shape)\n", + "print(\"Val shape:\", val_df.shape)\n", + "print(\"Test shape:\", test_df.shape)\n", + "print(\"\\nFeature columns:\", features)\n", "\n", - "print(\"\\nsegment (treatment_raw) 분포:\")\n", - "print(treatment_raw.value_counts(normalize=True))\n", - "\n", - "data.head()" + "print(\"\\nTrain head:\")\n", + "train_df.head()\n" ] }, { "cell_type": "code", - "execution_count": 12, - "id": "2ff956f2", + "execution_count": 3, + "id": "5c9e7a68", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Treatment 비율 (T=1): 0.66709375\n", - "\n", - "Y_gain (spend) 요약:\n", - "count 64000.000000\n", - "mean 1.050908\n", - "std 15.036448\n", + "treatment 비율: 0.8611161228540103\n", + "spend describe:\n", + "count 72053.000000\n", + "mean 7.638117\n", + "std 15.380174\n", "min 0.000000\n", "25% 0.000000\n", "50% 0.000000\n", "75% 0.000000\n", - "max 499.000000\n", + "max 172.747528\n", "Name: spend, dtype: float64\n", - "\n", - "Y_cost 분포:\n", - "segment\n", - "1.0 0.667094\n", - "0.0 0.332906\n", - "Name: proportion, dtype: float64\n" + "cost describe:\n", + "count 72053.000000\n", + "mean 2.558094\n", + "std 7.596816\n", + "min 0.000000\n", + "25% 0.000000\n", + "50% 0.000000\n", + "75% 0.000000\n", + "max 63.162000\n", + "Name: cost, dtype: float64\n" ] } ], "source": [ - "T = (treatment_raw != \"No E-Mail\").astype(int) # 이메일 받았으면 1, 아니면 0\n", - "\n", - "Y_gain = y_gain.astype(float) # spend (float)\n", - "Y_cost = T.astype(float) # 이메일 발송 비용 (0/1)\n", - "\n", - "print(\"Treatment 비율 (T=1):\", T.mean())\n", - "print(\"\\nY_gain (spend) 요약:\")\n", - "print(pd.Series(Y_gain).describe())\n", - "\n", - "print(\"\\nY_cost 분포:\")\n", - "print(pd.Series(Y_cost).value_counts(normalize=True).rename(\"proportion\"))\n" + "print(\"treatment 비율:\", train_df[\"treatment\"].mean())\n", + "print(\"spend describe:\")\n", + "print(train_df[\"spend\"].describe())\n", + "print(\"cost describe:\")\n", + "print(train_df[\"cost\"].describe())" ] }, { @@ -301,22 +424,25 @@ "id": "bfdbc4fd", "metadata": {}, "source": [ - "### Feature 전처리\n", - "\n", - "Hillstrom의 주요 feature 예시:\n", + "### Feature 행렬 & 타겟 정의\n", "\n", - "- `recency`, `history`, `mens`, `womens`, `newbie` 등: 숫자/0-1 변수\n", - "- `history_segment`, `zip_code`, `channel`: 범주형\n", + "- $X$: `features` 컬럼들\n", + "- $T$: `treatment` (0/1)\n", + "- $Y^r$: `spend` (gain)\n", + "- $Y^c$: `cost` (cost)\n", "\n", - "R-learner / Propensity 모델에 넣기 위해\n", + "여기서는:\n", "\n", - "- 숫자형 컬럼은 그대로 사용하고,\n", - "- 범주형 컬럼(`history_segment`, `zip_code`, `channel`)은 one-hot 인코딩으로 변환합니다.\n" + "- 데이터셋이 이미 `train / distill / test`로 나뉘어 있으므로,\n", + " - `train_df` → train\n", + " - `val_df` → validation\n", + " - `test_df` → test\n", + " 로 그대로 사용합니다.\n" ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 4, "id": "e286adf5", "metadata": {}, "outputs": [ @@ -324,108 +450,32 @@ "name": "stdout", "output_type": "stream", "text": [ - "원본 feature columns:\n", - "['recency', 'history_segment', 'history', 'mens', 'womens', 'zip_code', 'newbie', 'channel']\n", - "\n", - "Numeric columns:\n", - "['recency', 'history', 'mens', 'womens', 'newbie']\n", - "\n", - "Categorical columns (one-hot 대상):\n", - "['history_segment', 'zip_code', 'channel']\n", - "\n", - "전처리 후 feature shape: (64000, 15)\n", - "전처리된 feature columns:\n", - "Index(['recency', 'history', 'mens', 'womens', 'newbie',\n", - " 'history_segment_2) $100 - $200', 'history_segment_3) $200 - $350',\n", - " 'history_segment_4) $350 - $500', 'history_segment_5) $500 - $750',\n", - " 'history_segment_6) $750 - $1,000', 'history_segment_7) $1,000 +',\n", - " 'zip_code_Surburban', 'zip_code_Urban', 'channel_Phone', 'channel_Web'],\n", - " dtype='object')\n" + "X_train shape: (72053, 12)\n", + "X_val shape: (17774, 12)\n", + "X_test shape: (20333, 12)\n" ] } ], "source": [ - "print(\"원본 feature columns:\")\n", - "print(data.columns.tolist())\n", - "\n", - "# one-hot 대상 범주형 컬럼\n", - "categorical_cols = [\"history_segment\", \"zip_code\", \"channel\"]\n", - "\n", - "# 나머지는 숫자/0-1 컬럼으로 그대로 사용\n", - "numeric_cols = [c for c in data.columns if c not in categorical_cols]\n", + "X_train = train_df[features].values.astype(np.float32)\n", + "X_val = val_df[features].values.astype(np.float32)\n", + "X_test = test_df[features].values.astype(np.float32)\n", "\n", - "print(\"\\nNumeric columns:\")\n", - "print(numeric_cols)\n", - "print(\"\\nCategorical columns (one-hot 대상):\")\n", - "print(categorical_cols)\n", + "T_train = train_df[\"treatment\"].values.astype(int)\n", + "T_val = val_df[\"treatment\"].values.astype(int)\n", + "T_test = test_df[\"treatment\"].values.astype(int)\n", "\n", - "# one-hot 인코딩\n", - "X_cat = pd.get_dummies(data[categorical_cols], drop_first=True)\n", - "X_num = data[numeric_cols].reset_index(drop=True)\n", + "Yg_train = train_df[\"spend\"].values.astype(float) # gain\n", + "Yg_val = val_df[\"spend\"].values.astype(float)\n", + "Yg_test = test_df[\"spend\"].values.astype(float)\n", "\n", - "X_df = pd.concat([X_num, X_cat], axis=1)\n", + "Yc_train = train_df[\"cost\"].values.astype(float) # cost\n", + "Yc_val = val_df[\"cost\"].values.astype(float)\n", + "Yc_test = test_df[\"cost\"].values.astype(float)\n", "\n", - "print(\"\\n전처리 후 feature shape:\", X_df.shape)\n", - "print(\"전처리된 feature columns:\")\n", - "print(X_df.columns)\n", - "\n", - "# numpy array로 변환\n", - "X = X_df.values.astype(np.float32)\n" - ] - }, - { - "cell_type": "markdown", - "id": "eeb08865", - "metadata": {}, - "source": [ - "데이터 세트는 각각 60%, 20%, 20%의 비율로 학습, 검증 및 테스트 세트의 3부분으로 나뉩니다." - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "3d964183", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Train shape: (38400, 15)\n", - "Val shape: (12800, 15)\n", - "Test shape: (12800, 15)\n", - "\n", - "Treatment 비율 (Train/Val/Test):\n", - "Train: 0.6670833333333334\n", - "Val : 0.667109375\n", - "Test : 0.667109375\n" - ] - } - ], - "source": [ - "# Train / Validation / Test 분할\n", - "X_train_val, X_test, T_train_val, T_test, Yg_train_val, Yg_test, Yc_train_val, Yc_test = train_test_split(\n", - " X, T, Y_gain, Y_cost,\n", - " test_size=0.2,\n", - " random_state=RANDOM_STATE,\n", - " stratify=T,\n", - ")\n", - "\n", - "X_train, X_val, T_train, T_val, Yg_train, Yg_val, Yc_train, Yc_val = train_test_split(\n", - " X_train_val, T_train_val, Yg_train_val, Yc_train_val,\n", - " test_size=0.25, # 0.25 * 0.8 = 0.2\n", - " random_state=RANDOM_STATE,\n", - " stratify=T_train_val,\n", - ")\n", - "\n", - "print(\"Train shape:\", X_train.shape)\n", - "print(\"Val shape:\", X_val.shape)\n", - "print(\"Test shape:\", X_test.shape)\n", - "\n", - "print(\"\\nTreatment 비율 (Train/Val/Test):\")\n", - "print(\"Train:\", T_train.mean())\n", - "print(\"Val :\", T_val.mean())\n", - "print(\"Test :\", T_test.mean())\n" + "print(\"X_train shape:\", X_train.shape)\n", + "print(\"X_val shape:\", X_val.shape)\n", + "print(\"X_test shape:\", X_test.shape)" ] }, { @@ -438,8 +488,8 @@ "Duality R-learner는 다음 두 단계를 결합한 방식입니다.\n", "\n", "1. R-learner로 Gain/Cost CATE 추정\n", - " - $\\tau_r(x)$: gain uplift (예: spend uplift)\n", - " - $\\tau_c(x)$: cost uplift (예: 이메일 발송 비용 증가량)\n", + " - $\\tau_r(x)$: gain uplift\n", + " - $\\tau_c(x)$: cost uplift\n", "\n", "2. 예산 제약(budget constraint)을 듀얼 형태로 최적화\n", " - 라그랑지 승수 $\\lambda$ 를 학습하여 최적 정책을 찾습니다.\n", @@ -453,8 +503,8 @@ " \\quad \\text{s.t.} \\quad\n", " \\sum_i \\tau_c(x^{(i)}) z_i \\le B\n", " $$\n", - " \n", - "- $z_i = 1$ 이면 고객 $i$ 에게 이메일 발송, $z_i = 0$ 이면 미발송\n", + "\n", + "- $z_i = 1$ 이면 고객 $i$ 에게 프로모션/광고를 집행, $z_i = 0$ 이면 미집행\n", "\n", "Duality R-learner 핵심 단계:\n", "\n", @@ -462,7 +512,7 @@ "2. Gain / Cost R-learner: $\\tau_r(x)$, $\\tau_c(x)$ 추정 \n", "3. Duality: $\\lambda$ 를 gradient ascent 로 최적화 \n", "4. 정책 생성: $s(x) = \\tau_r(x) - \\lambda^* \\tau_c(x)$\n", - "5. Cost Curve / AUCC 로 정책 성능 평가 " + "5. Cost Curve / AUCC 로 정책 성능 평가 \n" ] }, { @@ -480,21 +530,26 @@ "$$\n", "\n", "여기서 \n", - "- $m^*(X) = \\mathbb{E}[Y \\mid X]$: outcome 평균 \n", + "\n", + "- $m^*(X) = \\mathbb{E}[Y \\mid X]$: outcome 평균 모델 \n", "- $e^*(X) = \\mathbb{P}(T=1 \\mid X)$: propensity score \n", "\n", - "Gain outcome에 대한 nuisance 모델은 다음과 같이 구성합니다.\n", + "Criteo 셋에서는 gain과 cost가 모두 연속값이므로 \n", + "각각 독립적인 회귀모델을 쓰는 것이 자연스럽습니다.\n", "\n", - "- $m_r(x)$: Ridge 회귀 \n", - "- $e(x)$: Logistic 회귀 \n", + "- Gain outcome $Y^r = \\texttt{spend}$\n", + " - $m_r(x) = \\mathbb{E}[Y^r\\mid X=x]$: Ridge 회귀\n", "\n", - "Cost outcome은 $Y^c = T$ 이므로\n", - "$m_c(x) = e(x)$" + "- Cost outcome $Y^c = \\texttt{cost}$\n", + " - $m_c(x) = \\mathbb{E}[Y^c\\mid X=x]$: Ridge 회귀\n", + "\n", + "- Treatment model\n", + " - $e(x) = \\mathbb{P}(T=1\\mid X=x)$: Logistic 회귀" ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 7, "id": "3e718594", "metadata": {}, "outputs": [ @@ -503,18 +558,18 @@ "output_type": "stream", "text": [ "== m_r(x) 성능 (R^2: spend 회귀) ==\n", - "Train R^2: 0.0011321804124860835\n", - "Val R^2: 0.0006200906912602333\n", + "Train R^2: 0.5991714831471346\n", + "Val R^2: 0.6034863154274288\n", "\n", "예측값 분포 (Val):\n", - "count 12800.000000\n", - "mean 0.998539\n", - "std 0.499257\n", - "min -4.757108\n", - "25% 0.690851\n", - "50% 0.961950\n", - "75% 1.234435\n", - "max 4.417754\n", + "count 17774.000000\n", + "mean 7.529438\n", + "std 11.912387\n", + "min -5.214262\n", + "25% -0.278099\n", + "50% 1.335855\n", + "75% 12.749807\n", + "max 81.783020\n", "dtype: float64\n" ] } @@ -527,20 +582,66 @@ "Yg_pred_train = m_r.predict(X_train)\n", "Yg_pred_val = m_r.predict(X_val)\n", "\n", - "r2_train = r2_score(Yg_train, Yg_pred_train)\n", - "r2_val = r2_score(Yg_val, Yg_pred_val)\n", + "r2_train_mr = r2_score(Yg_train, Yg_pred_train)\n", + "r2_val_mr = r2_score(Yg_val, Yg_pred_val)\n", "\n", "print(\"== m_r(x) 성능 (R^2: spend 회귀) ==\")\n", - "print(\"Train R^2:\", r2_train)\n", - "print(\"Val R^2:\", r2_val)\n", + "print(\"Train R^2:\", r2_train_mr)\n", + "print(\"Val R^2:\", r2_val_mr)\n", "\n", "print(\"\\n예측값 분포 (Val):\")\n", - "print(pd.Series(Yg_pred_val).describe())\n" + "print(pd.Series(Yg_pred_val).describe())" ] }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 8, + "id": "083c0aa5", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "== m_c(x) 성능 (R^2: cost 회귀) ==\n", + "Train R^2: 0.2841092845226817\n", + "Val R^2: 0.29156262859724946\n", + "\n", + "예측값 분포 (Val):\n", + "count 17774.000000\n", + "mean 2.524266\n", + "std 4.070278\n", + "min -24.999222\n", + "25% -0.114549\n", + "50% 0.894167\n", + "75% 4.298206\n", + "max 23.168346\n", + "dtype: float64\n" + ] + } + ], + "source": [ + "# Cost outcome 평균 모델 m_c(x): Ridge 회귀 (cost 전용 모델)\n", + "m_c = Ridge(alpha=1.0, random_state=RANDOM_STATE)\n", + "m_c.fit(X_train, Yc_train)\n", + "\n", + "Yc_pred_train = m_c.predict(X_train)\n", + "Yc_pred_val = m_c.predict(X_val)\n", + "\n", + "r2_train_mc = r2_score(Yc_train, Yc_pred_train)\n", + "r2_val_mc = r2_score(Yc_val, Yc_pred_val)\n", + "\n", + "print(\"== m_c(x) 성능 (R^2: cost 회귀) ==\")\n", + "print(\"Train R^2:\", r2_train_mc)\n", + "print(\"Val R^2:\", r2_val_mc)\n", + "\n", + "print(\"\\n예측값 분포 (Val):\")\n", + "print(pd.Series(Yc_pred_val).describe())" + ] + }, + { + "cell_type": "code", + "execution_count": 9, "id": "1aa8d52b", "metadata": {}, "outputs": [ @@ -549,12 +650,12 @@ "output_type": "stream", "text": [ "== e(x) 성능 (AUC: treatment 모델) ==\n", - "Train AUC: 0.5117265124259399\n", - "Val AUC: 0.49799591470904553\n", + "Train AUC: 0.5432668234321524\n", + "Val AUC: 0.5470811168626702\n", "\n", "Propensity e(x) range:\n", - "Train: 0.633101626124968 → 0.8026040280233658\n", - "Val : 0.6331449838328645 → 0.8183494704982611\n" + "Train: 0.8259820462034405 → 0.9497856673846461\n", + "Val : 0.8258405409868536 → 0.9441271638409029\n" ] } ], @@ -583,18 +684,7 @@ "\n", "print(\"\\nPropensity e(x) range:\")\n", "print(\"Train:\", e_train.min(), \"→\", e_train.max())\n", - "print(\"Val :\", e_val.min(), \"→\", e_val.max())\n" - ] - }, - { - "cell_type": "markdown", - "id": "a2b17bd8", - "metadata": {}, - "source": [ - "여기서 얻은 ${e(x)}$ 는 이후에\n", - "\n", - "- Gain R-learner에서 ${T - e(x)}$ 항을 만들 때,\n", - "- Cost R-learner에서 ${m_c(x)}$ 로도 재사용합니다. " + "print(\"Val :\", e_val.min(), \"→\", e_val.max())" ] }, { @@ -602,45 +692,44 @@ "id": "06b5558e", "metadata": {}, "source": [ - "### 2. Gain R-learner: $\\tau_r(x)$\n", + "### 2. R-learner: Gain / Cost CATE 추정\n", "\n", "Gain outcome $Y^r$ 에 대해 R-learner 구조는 다음과 같습니다.\n", "\n", "$$\n", - "Y^r - m_r(X)\n", - "= (T - e(X))\\,\\tau_r(X) + \\epsilon\n", + "Y - m(X) = (T - e(X))\\,\\tau(X) + \\epsilon\n", "$$\n", "\n", - "선형 모델 $\\tau_r(x) = w_r^\\top x$ 를 사용하면 학습 절차는 다음과 같습니다.\n", - "\n", - "1. 잔차 계산 \n", + "선형 모델 $\\tau(x) = w^\\top x$ 를 쓰면:\n", "\n", + "1. **잔차 계산**\n", " $$\n", - " r^Y = Y^r - \\hat m_r(X), \\quad r^T = T - \\hat e(X)\n", + " r^Y = Y - \\hat m(X), \\quad r^T = T - \\hat e(X)\n", " $$\n", - "\n", - "2. 행별 스케일링 \n", - "\n", + "2. **행 단위 스케일링**\n", " $$\n", " Z = X \\odot r^T\n", " $$\n", - "\n", - "3. 회귀 \n", - "\n", + "3. **회귀**\n", + " $$\n", + " r^Y \\approx Z w\n", + " $$\n", + "4. **최종 CATE**\n", " $$\n", - " r^Y \\approx Z w_r\n", + " \\hat\\tau(x) = w^\\top x\n", " $$\n", "\n", - "4. 최종 CATE \n", + "이를 공통 함수로 구현하고,\n", "\n", - " $$\n", - " \\hat\\tau_r(x) = w_r^\\top x\n", - " $$" + "- Gain R-learner: $Y = Y^r$, $m = m_r$\n", + "- Cost R-learner: $Y = Y^c$, $m = m_c$\n", + "\n", + "로 각각 학습합니다." ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 10, "id": "28eb5e7c", "metadata": {}, "outputs": [], @@ -658,7 +747,7 @@ " 선형 τ(x) = w^T x 를 R-learner 방식으로 학습.\n", " - X_tr, X_val: feature 행렬\n", " - T_tr, T_val: treatment (0/1)\n", - " - Y_tr, Y_val: outcome\n", + " - Y_tr, Y_val: outcome (gain or cost)\n", " - m_tr, m_val: m(x) = E[Y|X] 예측값\n", " - e_tr, e_val: e(x) = P(T=1|X) 예측값\n", " \"\"\"\n", @@ -694,12 +783,12 @@ " print(\"\\nVal τ_hat summary:\")\n", " print(pd.Series(tau_val).describe())\n", "\n", - " return tau_model, tau_tr, tau_val\n" + " return tau_model, tau_tr, tau_val" ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 11, "id": "03fc2e68", "metadata": {}, "outputs": [ @@ -709,31 +798,31 @@ "text": [ "== Gain R-learner τ_r(x) 요약 ==\n", "Train τ_hat summary:\n", - "count 38400.000000\n", - "mean 0.562616\n", - "std 0.454530\n", - "min -2.669276\n", - "25% 0.265676\n", - "50% 0.528041\n", - "75% 0.837171\n", - "max 1.976344\n", + "count 72053.000000\n", + "mean 0.869965\n", + "std 4.075175\n", + "min -16.366707\n", + "25% -0.214938\n", + "50% 0.119879\n", + "75% 1.240913\n", + "max 74.068790\n", "dtype: float64\n", "\n", "Val τ_hat summary:\n", - "count 12800.000000\n", - "mean 0.567048\n", - "std 0.453703\n", - "min -3.313805\n", - "25% 0.272715\n", - "50% 0.530470\n", - "75% 0.836859\n", - "max 1.944813\n", + "count 17774.000000\n", + "mean 0.847950\n", + "std 4.047337\n", + "min -13.205720\n", + "25% -0.215324\n", + "50% 0.116316\n", + "75% 1.209327\n", + "max 66.496148\n", "dtype: float64\n" ] } ], "source": [ - "# m_r(x) 예측값\n", + "# Gain R-learner: τ_r(x)\n", "m_r_train = m_r.predict(X_train)\n", "m_r_val = m_r.predict(X_val)\n", "\n", @@ -750,37 +839,13 @@ " e_val=e_val,\n", " alpha=1.0,\n", " name=\"Gain R-learner τ_r(x)\",\n", - ")\n" - ] - }, - { - "cell_type": "markdown", - "id": "e8ae0ccd", - "metadata": {}, - "source": [ - "### 3. Cost R-learner: $\\tau_c(x)$\n", - "\n", - "Cost outcome은 $Y^c = T$ 이므로 \n", - "nuisance model은 이미\n", - "\n", - "$$m_c(x) = e(x)$$\n", - "\n", - "입니다.\n", - "\n", - "Cost R-learner 식은\n", - "\n", - "$$\n", - "Y^c - m_c(X)\n", - "= (T - e(X))\\,\\tau_c(X)\n", - "$$\n", - "\n", - "Gain과 동일한 R-learner 구조로 $\\tau_c(x)$ 를 학습합니다." + ")" ] }, { "cell_type": "code", - "execution_count": 21, - "id": "f40867a2", + "execution_count": 12, + "id": "554cb0c4", "metadata": {}, "outputs": [ { @@ -789,33 +854,33 @@ "text": [ "== Cost R-learner τ_c(x) 요약 ==\n", "Train τ_hat summary:\n", - "count 38400.000000\n", - "mean 0.974710\n", - "std 0.156975\n", - "min 0.429515\n", - "25% 0.894193\n", - "50% 0.978889\n", - "75% 1.046973\n", - "max 2.098633\n", + "count 72053.000000\n", + "mean 2.873521\n", + "std 4.356113\n", + "min -18.526381\n", + "25% -0.005015\n", + "50% 0.903932\n", + "75% 4.806126\n", + "max 29.188446\n", "dtype: float64\n", "\n", "Val τ_hat summary:\n", - "count 12800.000000\n", - "mean 0.974875\n", - "std 0.157403\n", - "min 0.424263\n", - "25% 0.894096\n", - "50% 0.979144\n", - "75% 1.046372\n", - "max 2.265868\n", + "count 17774.000000\n", + "mean 2.838168\n", + "std 4.375784\n", + "min -28.228684\n", + "25% -0.024353\n", + "50% 0.862495\n", + "75% 4.697582\n", + "max 26.297773\n", "dtype: float64\n" ] } ], "source": [ - "# Cost outcome 평균 m_c(x)는 e(x)를 그대로 사용\n", - "m_c_train = e_train\n", - "m_c_val = e_val\n", + "# Cost R-learner: τ_c(x)\n", + "m_c_train = m_c.predict(X_train)\n", + "m_c_val = m_c.predict(X_val)\n", "\n", "tau_c_model, tau_c_train, tau_c_val = fit_r_learner_linear(\n", " X_tr=X_train,\n", @@ -830,13 +895,13 @@ " e_val=e_val,\n", " alpha=1.0,\n", " name=\"Cost R-learner τ_c(x)\",\n", - ")\n" + ")" ] }, { "cell_type": "code", - "execution_count": 22, - "id": "48f3ae13", + "execution_count": 13, + "id": "01798a5e", "metadata": {}, "outputs": [ { @@ -845,70 +910,70 @@ "text": [ "== τ_r(x) 요약 ==\n", "[Train]\n", - "count 38400.000000\n", - "mean 0.562616\n", - "std 0.454530\n", - "min -2.669276\n", - "25% 0.265676\n", - "50% 0.528041\n", - "75% 0.837171\n", - "max 1.976344\n", + "count 72053.000000\n", + "mean 0.869965\n", + "std 4.075175\n", + "min -16.366707\n", + "25% -0.214938\n", + "50% 0.119879\n", + "75% 1.240913\n", + "max 74.068790\n", "dtype: float64\n", "\n", "[Val]\n", - "count 12800.000000\n", - "mean 0.567048\n", - "std 0.453703\n", - "min -3.313805\n", - "25% 0.272715\n", - "50% 0.530470\n", - "75% 0.836859\n", - "max 1.944813\n", + "count 17774.000000\n", + "mean 0.847950\n", + "std 4.047337\n", + "min -13.205720\n", + "25% -0.215324\n", + "50% 0.116316\n", + "75% 1.209327\n", + "max 66.496148\n", "dtype: float64\n", "\n", "[Test]\n", - "count 12800.000000\n", - "mean 0.568442\n", - "std 0.450854\n", - "min -2.486865\n", - "25% 0.268170\n", - "50% 0.534959\n", - "75% 0.841292\n", - "max 1.970332\n", + "count 20333.000000\n", + "mean 2.168109\n", + "std 7.207469\n", + "min -13.727579\n", + "25% -1.233063\n", + "50% 0.928363\n", + "75% 3.340883\n", + "max 76.512638\n", "dtype: float64\n", "\n", "== τ_c(x) 요약 ==\n", "[Train]\n", - "count 38400.000000\n", - "mean 0.974710\n", - "std 0.156975\n", - "min 0.429515\n", - "25% 0.894193\n", - "50% 0.978889\n", - "75% 1.046973\n", - "max 2.098633\n", + "count 72053.000000\n", + "mean 2.873521\n", + "std 4.356113\n", + "min -18.526381\n", + "25% -0.005015\n", + "50% 0.903932\n", + "75% 4.806126\n", + "max 29.188446\n", "dtype: float64\n", "\n", "[Val]\n", - "count 12800.000000\n", - "mean 0.974875\n", - "std 0.157403\n", - "min 0.424263\n", - "25% 0.894096\n", - "50% 0.979144\n", - "75% 1.046372\n", - "max 2.265868\n", + "count 17774.000000\n", + "mean 2.838168\n", + "std 4.375784\n", + "min -28.228684\n", + "25% -0.024353\n", + "50% 0.862495\n", + "75% 4.697582\n", + "max 26.297773\n", "dtype: float64\n", "\n", "[Test]\n", - "count 12800.000000\n", - "mean 0.975139\n", - "std 0.155813\n", - "min 0.436810\n", - "25% 0.895776\n", - "50% 0.978849\n", - "75% 1.045682\n", - "max 1.803177\n", + "count 20333.000000\n", + "mean 8.090442\n", + "std 4.941765\n", + "min -17.154167\n", + "25% 4.801457\n", + "50% 7.960261\n", + "75% 11.408073\n", + "max 26.761067\n", "dtype: float64\n" ] } @@ -940,63 +1005,57 @@ "id": "e6e387a2", "metadata": {}, "source": [ - "### 4. Duality: 예산 제약 하에서 라그랑지안 기반 $\\lambda$ 최적화\n", + "### 3. Duality: 예산 제약 하에서 $\\lambda$ 최적화\n", "\n", - "우리가 풀고자 하는 문제는 다음과 같습니다.\n", + "목표는 다음과 같습니다.\n", "\n", "$$\n", "\\begin{aligned}\n", - "\\max_{z_i \\in \\{0,1\\}} &\\quad \\sum_i \\tau_r(x^{(i)}) z_i \\\\\n", - "\\text{s.t.} &\\quad \\sum_i \\tau_c(x^{(i)}) z_i \\le B.\n", + "\\max_{z_i \\in \\{0,1\\}}\\quad & \\sum_i \\tau_r(x^{(i)}) z_i \\\\\n", + "\\text{s.t.}\\quad & \\sum_i \\tau_c(x^{(i)}) z_i \\le B\n", "\\end{aligned}\n", "$$\n", "\n", - "여기서 $z_i = 1$ 은 고객 $i$를 타겟팅하는 경우이며, $B$는 전체 예산입니다. \n", - "이 제약을 다루기 위해 라그랑지 승수 $\\lambda \\ge 0$ 를 도입하면 라그랑지안은\n", + "- $z_i = 1$: 고객 $i$ 타깃 (프로모션 발송)\n", + "- $B$: 사용할 수 있는 총 비용 예산\n", + "\n", + "이를 위해 라그랑지 승수 $\\lambda \\ge 0$ 를 도입합니다.\n", "\n", "$$\n", - "L(z,\\lambda)\n", + "L(z, \\lambda)\n", "= -\\sum_i \\tau_r(x^{(i)}) z_i\n", - "+ \\lambda\\left(\\sum_i \\tau_c(x^{(i)}) z_i - B\\right)\n", + " + \\lambda\\left(\\sum_i \\tau_c(x^{(i)}) z_i - B\\right)\n", "$$\n", "\n", - "으로 표현됩니다.\n", - "\n", - "고정된 $\\lambda$ 아래에서 고객 $i$의 효율성 점수는 다음과 같습니다.\n", + "고정된 $\\lambda$ 에 대해:\n", "\n", "$$\n", - "s_i(\\lambda) = \\tau_r(x^{(i)}) - \\lambda\\, \\tau_c(x^{(i)}).\n", + "s_i(\\lambda) = \\tau_r(x^{(i)}) - \\lambda\\, \\tau_c(x^{(i)})\n", "$$\n", "\n", - "점수가 양수이면 타겟팅하는 것이 유리하므로 \n", - "$s_i(\\lambda) \\ge 0$ 이면 $z_i = 1$, 음수이면 $z_i = 0$ 을 선택합니다. \n", - "즉, $\\lambda$가 주어지면 단순히 $s_i(\\lambda)$가 양수인 고객만 선택하면 됩니다.\n", + "- $s_i(\\lambda) \\ge 0$ 이면 $z_i = 1$ (타깃)\n", + "- $s_i(\\lambda) < 0$ 이면 $z_i = 0$ (비타깃)\n", "\n", - "듀얼 목적함수의 기울기는\n", + "듀얼 목적함수 기울기는\n", "\n", "$$\n", "\\frac{\\partial g}{\\partial \\lambda}\n", - "\\approx \\sum_i z_i \\tau_c(x^{(i)}) - B\n", + "\\approx \\underbrace{\\sum_i z_i\\,\\tau_c^+(x^{(i)})}_{\\text{cost\\_used}} - B\n", "$$\n", "\n", - "으로 근사할 수 있고, 이에 따른 gradient ascent 업데이트는\n", + "이며, gradient ascent 업데이트는\n", "\n", "$$\n", - "\\lambda \\leftarrow \\bigl[\\lambda + \\eta(\\text{cost\\_used} - B)\\bigr]_+\n", + "\\lambda \\leftarrow [\\lambda + \\eta(\\text{cost\\_used} - B)]_+\n", "$$\n", "\n", - "로 진행됩니다. 여기서 $[\\cdot]_+$ 는 $\\lambda$가 음수가 되지 않도록 하는 projection입니다.\n", - "\n", - "예산을 초과하면 $(\\text{cost\\_used} > B)$ $\\lambda$는 증가하여 비용 효과를 더 강하게 억제하고, \n", - "예산보다 적게 사용하면 $\\lambda$는 감소하여 더 많은 고객이 선택될 수 있도록 조정됩니다.\n", - "\n", - "Train 데이터에서 양의 Cost CATE 합을 기반으로 예산 $B$를 설정하고, \n", - "위 규칙을 반복 적용하여 최종 $\\lambda^*$와 정책을 학습합니다." + "- 예산 초과($\\text{cost\\_used} > B$) → $\\lambda$ 증가 → cost가 큰 고객 penalize\n", + "- 예산 미만($\\text{cost\\_used} < B$) → $\\lambda$ 감소 → 더 많은 고객 선택 허용" ] }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 14, "id": "5fe3e686", "metadata": {}, "outputs": [], @@ -1025,7 +1084,7 @@ "\n", " for it in range(n_iter + 1):\n", " # effectiveness score\n", - " s = tau_r - lam * tau_c\n", + " s = tau_r - lam * tau_c_pos\n", "\n", " # z_i: 선택 여부 (s_i >= 0 이면 선택)\n", " z = (s >= 0).astype(float)\n", @@ -1050,12 +1109,12 @@ " print(\"\\n최종 λ*:\", lam)\n", " print(\"총 양의 cost effect 합:\", total_pos_cost)\n", " print(f\"예산 B (fraction={budget_fraction}):\", B)\n", - " return lam, B\n" + " return lam, B" ] }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 16, "id": "233a6a45", "metadata": {}, "outputs": [ @@ -1063,29 +1122,30 @@ "name": "stdout", "output_type": "stream", "text": [ - "[iter 000] λ=0.228487, cost_used=34077.3618, gain_used=22363.6067, grad=22848.7019, selected=0.907\n", - "[iter 020] λ=0.784009, cost_used=11251.8179, gain_used=12501.7237, grad=23.1579, selected=0.298\n", - "[iter 040] λ=0.784586, cost_used=11228.2803, gain_used=12483.2661, grad=-0.3797, selected=0.297\n", - "[iter 060] λ=0.784587, cost_used=11228.2803, gain_used=12483.2661, grad=-0.3797, selected=0.297\n", - "[iter 080] λ=0.784587, cost_used=11228.2803, gain_used=12483.2661, grad=-0.3797, selected=0.297\n", - "[iter 100] λ=0.784587, cost_used=11228.2803, gain_used=12483.2661, grad=-0.3797, selected=0.297\n", - "[iter 120] λ=0.784588, cost_used=11228.2803, gain_used=12483.2661, grad=-0.3797, selected=0.297\n", - "[iter 140] λ=0.784588, cost_used=11229.1281, gain_used=12483.9314, grad=0.4682, selected=0.297\n", - "[iter 160] λ=0.784588, cost_used=11229.1281, gain_used=12483.9314, grad=0.4682, selected=0.297\n", - "[iter 180] λ=0.784589, cost_used=11229.1281, gain_used=12483.9314, grad=0.4682, selected=0.297\n", - "[iter 200] λ=0.784589, cost_used=11229.1281, gain_used=12483.9314, grad=0.4682, selected=0.297\n", + "[iter 000] λ=0.873750, cost_used=153674.7514, gain_used=95695.1631, grad=87375.0116, selected=0.571\n", + "[iter 020] λ=0.228848, cost_used=27172.5443, gain_used=61222.1379, grad=-39127.1955, selected=0.150\n", + "[iter 040] λ=0.229153, cost_used=27165.0076, gain_used=61217.4623, grad=-39134.7322, selected=0.150\n", + "[iter 060] λ=0.229200, cost_used=27164.1299, gain_used=61216.9177, grad=-39135.6099, selected=0.150\n", + "[iter 080] λ=0.229252, cost_used=27149.2112, gain_used=61207.6592, grad=-39150.5286, selected=0.150\n", + "[iter 100] λ=0.229233, cost_used=27149.2112, gain_used=61207.6592, grad=-39150.5286, selected=0.150\n", + "[iter 120] λ=0.229137, cost_used=27165.0076, gain_used=61217.4623, grad=-39134.7322, selected=0.150\n", + "[iter 140] λ=0.229207, cost_used=27164.1299, gain_used=61216.9177, grad=-39135.6099, selected=0.150\n", + "[iter 160] λ=0.229252, cost_used=27149.2112, gain_used=61207.6592, grad=-39150.5286, selected=0.150\n", + "[iter 180] λ=0.229143, cost_used=27165.0076, gain_used=61217.4623, grad=-39134.7322, selected=0.150\n", + "[iter 200] λ=0.229180, cost_used=27164.1299, gain_used=61216.9177, grad=-39135.6099, selected=0.150\n", "\n", - "최종 λ*: 0.7845891317539325\n", - "총 양의 cost effect 합: 37428.86642372066\n", - "예산 B (fraction=0.3): 11228.659927116198\n" + "최종 λ*: 0.22917953894026566\n", + "총 양의 cost effect 합: 220999.1326870586\n", + "예산 B (fraction=0.3): 66299.73980611758\n" ] } ], "source": [ - "lambda_star, B = duality_learn_lambda(\n", + "# Train 데이터에서 λ* 학습\n", + "lambda_star, B_train = duality_learn_lambda(\n", " tau_r=tau_r_train,\n", " tau_c=tau_c_train,\n", - " budget_fraction=0.3,\n", + " budget_fraction=0.3, # 전체 양의 cost uplift 중 30%를 예산으로\n", " lr=1e-5,\n", " n_iter=200,\n", " verbose_every=20,\n", @@ -1094,16 +1154,16 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 18, "id": "a54ac8cf", "metadata": {}, "outputs": [], "source": [ "def selection_summary(tau_r, tau_c, lam, name=\"\"):\n", " tau_r = np.asarray(tau_r).astype(float)\n", - " tau_c = np.asarray(tau_c).astype(float)\n", + " tau_c_pos = np.clip(tau_c, a_min=0.0, a_max=None)\n", "\n", - " s = tau_r - lam * tau_c\n", + " s = tau_r - lam * tau_c_pos\n", " z = (s >= 0).astype(float)\n", "\n", " gain_pos = np.clip(tau_r, 0.0, None)\n", @@ -1128,12 +1188,12 @@ " \"gain_used\": gain_used,\n", " \"cost_used\": cost_used,\n", " \"gain_per_cost\": ratio,\n", - " }\n" + " }" ] }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 19, "id": "6947da6a", "metadata": {}, "outputs": [ @@ -1143,32 +1203,32 @@ "text": [ "\n", "== Selection summary (Train) ==\n", - "λ = 0.784589\n", - "선택 비율: 0.297 (11420 / 38400)\n", - "총 gain (∑ τ_r^+ z): 12483.2661\n", - "총 cost (∑ τ_c^+ z): 11228.2803\n", - "gain / cost 비율: 1.1118\n", + "λ = 0.229180\n", + "선택 비율: 0.448 (32281 / 72053)\n", + "총 gain (∑ τ_r^+ z): 89986.7776\n", + "총 cost (∑ τ_c^+ z): 105798.3648\n", + "gain / cost 비율: 0.8505\n", "\n", "== Selection summary (Val) ==\n", - "λ = 0.784589\n", - "선택 비율: 0.293 (3753 / 12800)\n", - "총 gain (∑ τ_r^+ z): 4124.4445\n", - "총 cost (∑ τ_c^+ z): 3685.4466\n", - "gain / cost 비율: 1.1191\n", + "λ = 0.229180\n", + "선택 비율: 0.443 (7877 / 17774)\n", + "총 gain (∑ τ_r^+ z): 21768.6841\n", + "총 cost (∑ τ_c^+ z): 25771.2861\n", + "gain / cost 비율: 0.8447\n", "\n", "== Selection summary (Test) ==\n", - "λ = 0.784589\n", - "선택 비율: 0.302 (3862 / 12800)\n", - "총 gain (∑ τ_r^+ z): 4210.7541\n", - "총 cost (∑ τ_c^+ z): 3794.4139\n", - "gain / cost 비율: 1.1097\n" + "λ = 0.229180\n", + "선택 비율: 0.410 (8345 / 20333)\n", + "총 gain (∑ τ_r^+ z): 60981.3120\n", + "총 cost (∑ τ_c^+ z): 55160.2068\n", + "gain / cost 비율: 1.1055\n" ] } ], "source": [ "_ = selection_summary(tau_r_train, tau_c_train, lambda_star, name=\"Train\")\n", "_ = selection_summary(tau_r_val, tau_c_val, lambda_star, name=\"Val\")\n", - "_ = selection_summary(tau_r_test, tau_c_test, lambda_star, name=\"Test\")\n" + "_ = selection_summary(tau_r_test, tau_c_test, lambda_star, name=\"Test\")" ] }, { @@ -1176,98 +1236,142 @@ "id": "6ec8b309", "metadata": {}, "source": [ - "### 5. Cost Curve & AUCC\n", + "### 4. Cost Curve & AUCC (Test set 평가)\n", + "\n", + "Test 셋에서 정책의 성능을 Incremental Cost 대비 Incremental Gain 곡선으로 평가합니다.\n", + "\n", + "1. **Effectiveness score로 정렬** \n", "\n", - "Cost Curve 와 그 면적(AUCC, Area Under Cost Curve)로 비용 대비 uplift 모델을 평가합니다.\n", + " Duality R-learner의 점수는\n", + " $$\n", + " s(x)=\\tau_r(x)-\\lambda^*\\tau_c(x)\n", + " $$\n", + " 로 정의하며, 이를 기준으로 샘플을 내림차순으로 정렬합니다.\n", "\n", - "Test 셋에서:\n", + "2. **상위 \\(k\\)명(prefix)에서 ATE 추정** \n", "\n", - "1. Duality 점수 ${s(x) = \\tau_r(x) - \\lambda^* \\tau_c(x)}$ 기준으로 내림차순 정렬\n", - "2. 정렬된 순서대로\n", - " - ${\\tau_r^+(x) = \\max(\\tau_r(x), 0)}$\n", - " - ${\\tau_c^+(x) = \\max(\\tau_c(x), 0)}$\n", - " 의 누적합 계산\n", - "3. 누적 cost/gain 을 각각 최종값으로 나누어 ${[0,1]}$ 범위로 정규화\n", - "4. $(0,0)$ 에서 $(1,1)$ 까지 이어지는 곡선을 Cost Curve 로 사용\n", - "5. 수치 적분으로 AUCC 계산:\n", + " 정렬된 상위 \\(k\\)개 집단에서 관측 결과 \\(Y\\)를 사용해 gain과 cost에 대한 ATE를 계산합니다:\n", " $$\n", - " \\text{AUCC} = \\int_0^1 \\text{gain}(x)\\,dx\n", + " \\widehat{ATE}_g(k)=\\mathbb{E}[Y_g\\mid T=1]-\\mathbb{E}[Y_g\\mid T=0],\\quad\n", + " \\widehat{ATE}_c(k)=\\mathbb{E}[Y_c\\mid T=1]-\\mathbb{E}[Y_c\\mid T=0].\n", " $$\n", "\n", - "비교를 위해 랜덤 ranking 의 Cost Curve 와 AUCC 도 함께 계산합니다.\n", + "3. **총 증분 gain/cost 계산** \n", + " 상위 \\(k\\) 집단에서 실제 처치된 샘플 수 \\(n_t(k)\\)를 곱해,\n", + " $$\n", + " \\Delta G(k)=n_t(k)\\cdot \\widehat{ATE}_g(k),\\quad\n", + " \\Delta C(k)=n_t(k)\\cdot \\widehat{ATE}_c(k)\n", + " $$\n", + " 를 각 점으로 사용합니다.\n", "\n", - "- AUCC ${\\approx 0.5}$: 랜덤에 가까운 정책\n", - "- AUCC ${>} 0.5$: 효율적인 고객부터 잘 고르는 정책\n" + "4. **정규화 및 Cost Curve 구성** \n", + " \\((0,0)\\)을 포함한 $(\\Delta C(k), \\Delta G(k))$를 정규화하여\n", + " $$\n", + " x(k)=\\frac{\\Delta C(k)}{C_{\\text{norm}}},\\quad\n", + " y(k)=\\frac{\\Delta G(k)}{G_{\\text{norm}}}\n", + " $$\n", + " 로 변환하고, 이를 이은 곡선을 Cost Curve로 정의합니다. \n", + " 정규화 기준은 전체 집단을 기본으로 사용하되, 전원 처리 시 증분 gain이 0 이하인 경우에는\n", + " **양수 구간의 최대값(max-positive)**을 사용하여 비교 가능하게 합니다.\n", + "\n", + "5. **AUCC 계산** \n", + " Cost Curve 아래 면적을 수치 적분으로 계산합니다:\n", + " $$\n", + " \\text{AUCC}=\\int_0^1 y(x)\\,dx.\n", + " $$\n" ] }, { "cell_type": "code", - "execution_count": 27, - "id": "56c9cc3e", + "execution_count": 33, + "id": "6039a560", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "== Test set Cost Curve (τ 기반) ==\n", - "max_cost: 12481.778185597159\n", - "max_gain: 7511.766716461641\n", - "Normalized AUCC: 0.6946670819574676\n" - ] - } - ], + "outputs": [], "source": [ - "# Duality R-learner 기반 effectiveness score (Test set)\n", - "s_test = tau_r_test - lambda_star * tau_c_test\n", - "\n", - "# score 기준 내림차순 정렬\n", - "order = np.argsort(-s_test)\n", - "tau_r_sorted = np.clip(tau_r_test[order], 0.0, None) # gain은 양수 부분만\n", - "tau_c_sorted = np.clip(tau_c_test[order], 0.0, None) # cost도 양수 부분만\n", - "\n", - "# 누적 cost / gain\n", - "cum_cost = np.cumsum(tau_c_sorted)\n", - "cum_gain = np.cumsum(tau_r_sorted)\n", - "\n", - "# 0 지점 포함\n", - "cum_cost = np.insert(cum_cost, 0, 0.0)\n", - "cum_gain = np.insert(cum_gain, 0, 0.0)\n", - "\n", - "# 정규화\n", - "max_cost = cum_cost[-1]\n", - "max_gain = cum_gain[-1]\n", - "\n", - "x = cum_cost / max_cost\n", - "y = cum_gain / max_gain\n", - "\n", - "# AUCC 계산\n", - "aucc = np.trapz(y, x)\n", - "\n", - "print(\"== Test set Cost Curve (τ 기반) ==\")\n", - "print(\"max_cost:\", max_cost)\n", - "print(\"max_gain:\", max_gain)\n", - "print(\"Normalized AUCC:\", aucc)\n" + "def cost_curve_aucc(scores, Yg, Yc, T, n_points=80):\n", + " \"\"\"\n", + " Paper-style Y-based Cost Curve:\n", + " - sort by score desc\n", + " - for each prefix top-k:\n", + " ATE_gain = mean(Yg|T=1) - mean(Yg|T=0)\n", + " ATE_cost = mean(Yc|T=1) - mean(Yc|T=0)\n", + " ΔGain(k) = n_treat * ATE_gain\n", + " ΔCost(k) = n_treat * ATE_cost\n", + " - normalize (rightmost if possible else max-positive)\n", + " - AUCC = ∫ y dx\n", + " \"\"\"\n", + " scores = np.asarray(scores, float)\n", + " Yg = np.asarray(Yg, float)\n", + " Yc = np.asarray(Yc, float)\n", + " T = np.asarray(T, int)\n", + "\n", + " order = np.argsort(-scores)\n", + " Yg, Yc, T = Yg[order], Yc[order], T[order]\n", + "\n", + " N = len(T)\n", + " ks = np.linspace(1, N, n_points, dtype=int)\n", + "\n", + " inc_g, inc_c = [0.0], [0.0] # include (0,0)\n", + " for k in ks:\n", + " T_k, Yg_k, Yc_k = T[:k], Yg[:k], Yc[:k]\n", + " mt, mc = (T_k == 1), (T_k == 0)\n", + "\n", + " if mt.sum() == 0 or mc.sum() == 0:\n", + " inc_g.append(0.0); inc_c.append(0.0); continue\n", + "\n", + " ate_g = Yg_k[mt].mean() - Yg_k[mc].mean()\n", + " ate_c = Yc_k[mt].mean() - Yc_k[mc].mean()\n", + " n_t = mt.sum()\n", + "\n", + " inc_g.append(ate_g * n_t)\n", + " inc_c.append(ate_c * n_t)\n", + "\n", + " inc_g = np.maximum(np.asarray(inc_g, float), 0.0)\n", + " inc_c = np.asarray(inc_c, float)\n", + "\n", + " max_g, max_c = inc_g[-1], inc_c[-1]\n", + " if max_g <= 0 or max_c <= 0:\n", + " max_g = inc_g[inc_g > 0].max() if np.any(inc_g > 0) else 1.0\n", + " max_c = inc_c[inc_c > 0].max() if np.any(inc_c > 0) else 1.0\n", + "\n", + " x = inc_c / max_c\n", + " y = inc_g / max_g\n", + "\n", + " si = np.argsort(x)\n", + " aucc = np.trapz(y[si], x[si])\n", + " return x, y, aucc\n", + "\n", + "def plot_cost_curve(x, y, aucc, title=\"Cost Curve (Paper-style, Y-based)\", label=\"Model\"):\n", + " plt.figure(figsize=(7, 6))\n", + " plt.plot(x, y, label=f\"{label} (AUCC={aucc:.3f})\")\n", + " plt.plot([0, 1], [0, 1], alpha=0.35, linewidth=1, label=\"y=x benchmark\")\n", + " plt.xlabel(\"Incremental cost (normalized)\")\n", + " plt.ylabel(\"Incremental gain (normalized)\")\n", + " plt.title(title)\n", + " plt.grid(alpha=0.3)\n", + " plt.legend()\n", + " plt.tight_layout()\n", + " plt.show()" ] }, { "cell_type": "code", - "execution_count": 28, - "id": "3b6badd9", + "execution_count": 34, + "id": "2b41ea6a", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Random ranking AUCC: 0.5006872435398204\n" + "Duality AUCC: 0.6649279978825946\n" ] }, { "data": { - "image/png": "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yWG9mwbrPTdHR0f+3RNZOAZO+eRyiIiIQFxc3D0/X04mkg+CeaJKDuvdNFjvucmPperVq6sAiogsEwOnPAxBk4+PD1xdXYsc/MiJJCsrC/b29gycShDr3TRY73cm1w0PD0e1atX4909koRg45emeMwRNFSpUuKcK5YnENFjvrPfSQHLMSPAkP54cHBxMXRwiMgIODs/BMKZJWpqIiIrK0EUnP8KIyDIxcMoHxyYR0b3gdweR5WPgRERERFRIDJzonowYMQL9+vXLvt2pUyf873//KzW1WdrKU5xOnz4NX19fNXOTSk5GRgYCAgKwb98+VjuRFTNp4PTPP/+gT58+qFy5smriXrly5X8+Z8uWLWjWrBmcnJxQs2ZNfPfddyVSVnMIZKQO5SKDUitWrIhu3bphwYIFaraPsS1fvhxvvfVW9m05wcyZM6fY35dM9Z44caLKk2WtJk+ejBdffDHfxSjr1q2r/jZkdmheBR2T6dOno0mTJrnuk+fLawQGBqr9yeKX8re6cePGXNsdPHgQjz/+uArknJ2dUatWLYwaNQpnzpy55/f366+/qvch+2vYsCFWr179n89JT0/H66+/Dn9/f1Veea/y2c85fvHNN99EjRo11H4bN26MtWvX3lEPhs+a4SLlyDl+afz48Zg0adI9vzciMn8mDZySk5PVF9i8efMKtf3FixfRq1cvdO7cGYcOHVItCk8//TT+/vtvo5fVHPTo0UNNhb506RLWrFmj6unll19G79691SwfYypfvnyhVpW+n/d14cIFzJ49G19++SWmTZuG0tACYSwFJV+9cuUK/vrrLxVQ5rV9+3akpqbi0Ucfxffff3/Pry2fn+DgYGzatAkffvghjh49qoIM+Ty98MIL2dtJOVq3bq2Clp9++gknT55U/3p6euKNN964p9feuXMnBg0ahKeeekoFZdKqKZdjx47d9XkDBgxQQd23336rWuR+/vln1KlTJ/vxKVOmqM/Np59+ihMnTuDZZ5/Fww8/rF4jp/r166vPmuEidZrTkCFD1H3Hjx+/p/dHRBZAKyWkKCtWrLjrNhMnTtTq16+f676BAwdq3bt3L/TrxMfHq9eSf/NKTU3VTpw4of69V3q9XsvIyFD/lqThw4drffv2veP+jRs3qvf79ddfq9sXL15Utw8ePJi9TWxsrLpv8+bN6nZWVpb25JNPagEB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cE9PTzU6v7gHhxu6GiV5p4+PD8c4lSDWu2mw3k2Hdc96tyZ6I59bixIbcPQyERERUSExcCIiIiIqJAZORERERIXEwImIiIiokBg4ERERERUSAyciIiKiQmLgRERERFRIDJyIiIiIComBExEREVEhMXAiIiIiKiQGTkRERETmsshvSTMszSfr0hhrPZ3ExEQ4OztzrboSxHo3Dda76bDuWe/WRG/kc6shJijM8r1WFzhJxYuqVauauihERERUymIEWez3bmy0woRXFha13rhxA2XKlIGNjY1RolYJyq5evfqfKywT693c8fPOurc2/MxbZr1LKCRBU+XKlf+zRcvqWpykQqpUqWL015EDy8Cp5LHeTYP1bjqse9a7NfEw4rn1v1qaDDg4nIiIiKiQGDgRERERFRIDp2Lm5OSEadOmqX+p5LDeTYP1bjqse9a7NXEqRedWqxscTkRERHSv2OJEREREVEgMnIiIiIgKiYETERERUSExcLoH8+bNQ0BAgEr9HhISgj179tx1+19//RV169ZV2zds2BCrV6++l5e1ekWp96+//hrt27dHuXLl1CU0NPQ/jxMVz+fdYMmSJSrJbL9+/Vi1JVT3cXFxeOGFF1CpUiU1iLZ27dr8vimBep8zZw7q1KkDFxcXlaRx7NixSEtLu5eXtlr//PMP+vTpoxJQyvfGypUr//M5W7ZsQbNmzdRnvWbNmvjuu+9KpKySLZOKYMmSJZqjo6O2YMEC7fjx49qoUaO0smXLajdv3sx3+x07dmh2dnbaBx98oJ04cUKbMmWK5uDgoB09epT1bsR6Hzx4sDZv3jzt4MGD2smTJ7URI0Zonp6e2rVr11jvRqx3g4sXL2p+fn5a+/bttb59+7LOS6Du09PTtebNm2sPPvigtn37dnUMtmzZoh06dIj1b8R6X7Rokebk5KT+lTr/+++/tUqVKmljx45lvRfB6tWrtddff11bvny5TFjTVqxYcdftL1y4oLm6umrjxo1T59ZPP/1UnWvXrl2rGRsDpyJq2bKl9sILL2Tf1ul0WuXKlbWZM2fmu/2AAQO0Xr165bovJCREGz169L0cL6tV1HrPKysrSytTpoz2/fffG7GUlude6l3quk2bNto333yjDR8+nIFTCdX9559/rgUGBmoZGRn3+pJ0D/Uu23bp0iXXfXIyb9u2LevzHhUmcJo4caJW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", + "image/png": "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fbKlVI3cf+DAgUf147Z5BfuB9BWAV5ApiPWwfGMGIiIi0qfp/U2TXb/syMWlb61BakGl1kOyGZoHsl999ZUqKj137lxs3rwZgwcPxvTp01UHibasXr0as2bNwvXXX48tW7bg/PPPV5t0trF5hibg4AYgd7spjSDuFMClfYXPiUifli1bprpRlZaWal7ia8iQIbAlMoHx0ksvaT0MIpsnlQueu2ggfNxdVK7smS+vwLsrUjk7awuB7Pz58zFnzhxce+216NevH9588014eXnh/fffb/P+L7/8Ms444wzVlrFv37544oknMGzYMLz66quwZc5NtUDqMqDsIBAzyrSwi00OiIiIqB1mjozF73dOxISewahrNODJn/dwdlbrqgX19fXYtGlTq0420sN32rRpWLNmTZs/I7cf2RZQZnC/++472KruqEB08RogIgJIPBXwCtR6SEREmr73t7cNLxH9Laq7Jz6+bhS+3HAQT/28p3l29s7TemFITHeL7SqjwYCK8kpMCw21ucOhaSBbWFiIpqamo9r8ydd79+5t82dyc3PbvL/c3pa6ujq1mZWXl6tLg8GgNkvzaSjCeKedaHDqA4PUh3XxkCe3+PNS15G/E2kNaI2/Fz3sB/OmBx9//LH64Juenq46ZpnHfcEFF8DX11d9vyPkfWn48OF45513cPnll6vbFixYgGuuuQYbN25UZ5WOZH7OlStX4sEHH8T+/fvVKX55jAEDBjTfz/x9eZzg4GCVMvXMM8/A29tbfT8hIUGdvUpOTsY333yDgIAAPPTQQ/jHP/7R/BhZWVm499578fvvv6v3PTlrJWerZO2BeRzyOz/66KMoKSnBmWeeibffflvtCzF58mQ1JmdnZ3U/CTblrJf8rrfddpt6Xnm/feWVV9TPCnkPlzEsXbpUvQ/Hxsbipptuwu233948LjnjJqkVI0aMwOuvvw53d3ekpqY27x/z2N599111tk2eZ+rUqW3uR7387bX83az1/42t4nto15s5IhrjewThgYU7sDK5CM/+2nbM1JW6e7pg46B4WENHXi92X0dW/iOYN2/eUbcXFBSgtrbW4s/v7OaFSu845PgORH6xBNGmQJr0Q15QZWVl6j8kOWPgqKSFquyLxsZGtemBBKwSUP3www+45JJLVK6q5N///PPPapGo/B4SQM6YMeOEC1IlmOvRoweee+45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", "text/plain": [ - "
" + "
" ] }, "metadata": {}, @@ -1275,49 +1379,20 @@ } ], "source": [ - "# 랜덤 베이스라인 Cost Curve\n", - "rng = np.random.default_rng(RANDOM_STATE)\n", - "perm = rng.permutation(len(tau_r_test))\n", - "\n", - "tau_r_rand = np.clip(tau_r_test[perm], 0.0, None)\n", - "tau_c_rand = np.clip(tau_c_test[perm], 0.0, None)\n", - "\n", - "cum_cost_rand = np.cumsum(tau_c_rand)\n", - "cum_gain_rand = np.cumsum(tau_r_rand)\n", - "\n", - "cum_cost_rand = np.insert(cum_cost_rand, 0, 0.0)\n", - "cum_gain_rand = np.insert(cum_gain_rand, 0, 0.0)\n", - "\n", - "x_rand = cum_cost_rand / cum_cost_rand[-1]\n", - "y_rand = cum_gain_rand / cum_gain_rand[-1]\n", - "\n", - "aucc_rand = np.trapz(y_rand, x_rand)\n", - "print(\"Random ranking AUCC:\", aucc_rand)\n", - "\n", - "# 플롯\n", - "plt.figure(figsize=(6, 5))\n", - "plt.plot(x, y, label=f\"Duality R-learner (AUCC={aucc:.3f})\")\n", - "plt.plot(x_rand, y_rand, linestyle=\"--\", label=f\"Random (AUCC={aucc_rand:.3f})\")\n", - "plt.plot([0, 1], [0, 1], alpha=0.4, linewidth=1, label=\"y=x reference\")\n", - "\n", - "plt.xlabel(\"Cumulative cost / max\")\n", - "plt.ylabel(\"Cumulative gain / max\")\n", - "plt.title(\"Cost curve on Test set (τ-based)\")\n", - "plt.legend()\n", - "plt.grid(alpha=0.3)\n", - "plt.tight_layout()\n", - "plt.show()\n" + "scores_duality = tau_r_test - lambda_star * tau_c_test\n", + "x, y, aucc = cost_curve_aucc(scores_duality, Yg_test, Yc_test, T_test, n_points=80)\n", + "\n", + "print(\"Duality AUCC:\", aucc)\n", + "plot_cost_curve(x, y, aucc, title=\"Cost Curve on Test set\", label=\"Duality\")" ] }, { "cell_type": "code", "execution_count": null, - "id": "965eecec", + "id": "d36a48d4", "metadata": {}, "outputs": [], - "source": [ - " " - ] + "source": [] } ], "metadata": { diff --git a/book/prescriptive_analytics/overview.md b/book/prescriptive_analytics/overview.md index 8bcc007..ad8685a 100644 --- a/book/prescriptive_analytics/overview.md +++ b/book/prescriptive_analytics/overview.md @@ -1,5 +1,5 @@ # Prescriptive Analytics - Prescriptive Analytics는 데이터를 활용해 최적의 의사결정을 도출하는 분석 방식입니다. -- 접근 방식은 크게 **Prediction + Optimization**, **Causal Inference + Optimization** 으로 나눌 수 있습니다. -- 이 섹션에서는 **Causal Inference + Optimization** 에 집중하여, 개입의 인과효과(CATE)를 기반으로 **가장 효율적인 정책·전략을 선택하는 방법**을 다룹니다. +- 접근 방식은 크게 Prediction + Optimization, Causal Inference + Optimization 으로 나눌 수 있습니다. +- 이 섹션에서는 Causal Inference + Optimization 에 집중하여, 개입의 인과효과(CATE)를 기반으로 가장 효율적인 정책·전략을 선택하는 방법을 다룹니다. \ No newline at end of file From 43c7906bd6bb2b18c172bddfc22e6fa340b5a93f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A1=B0=ED=95=B4=EC=B0=BD?= Date: Sat, 20 Dec 2025 02:21:55 +0900 Subject: [PATCH 4/4] fix: train/val/test split and stabilize duality AUCC evaluation --- ...rning_for_effectiveness_optimization.ipynb | 897 ++++++------------ 1 file changed, 314 insertions(+), 583 deletions(-) diff --git a/book/prescriptive_analytics/heterogeneous_causal_learning_for_effectiveness_optimization.ipynb b/book/prescriptive_analytics/heterogeneous_causal_learning_for_effectiveness_optimization.ipynb index 0082571..c7f6f34 100644 --- a/book/prescriptive_analytics/heterogeneous_causal_learning_for_effectiveness_optimization.ipynb +++ b/book/prescriptive_analytics/heterogeneous_causal_learning_for_effectiveness_optimization.ipynb @@ -52,62 +52,17 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 503, "id": "9114f7da", "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - "

🌲 Try YDF, the successor of\n", - " TensorFlow\n", - " Decision Forests using the same algorithms but with more features and faster\n", - " training!\n", - "

\n", - "
\n", - "
\n", - " \n", - " Old code

\n", - "
\n",
-       "import tensorflow_decision_forests as tfdf\n",
-       "\n",
-       "tf_ds = tfdf.keras.pd_dataframe_to_tf_dataset(ds, label=\"l\")\n",
-       "model = tfdf.keras.RandomForestModel(label=\"l\")\n",
-       "model.fit(tf_ds)\n",
-       "
\n", - "
\n", - "
\n", - "
\n", - " \n", - " New code

\n", - "
\n",
-       "import ydf\n",
-       "\n",
-       "model = ydf.RandomForestLearner(label=\"l\").train(ds)\n",
-       "
\n", - "
\n", - "
\n", - "

(Learn more in the migration\n", - " guide)

\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "\n", - "from sklearn.linear_model import Ridge, LogisticRegression\n", + "from sklearn.linear_model import Ridge\n", "from sklearn.metrics import r2_score, roc_auc_score\n", + "from sklearn.model_selection import train_test_split\n", "\n", "import fractional_uplift as fr \n", "\n", @@ -135,314 +90,52 @@ "\n", " 을 모두 포함하므로, 비용까지 고려한 처치 최적화 실험에 적합합니다. \n", "\n", - "- 세 가지 DataFrame으로 구성\n", - " - `train_data`\n", - " - `distill_data` (여기서는 validation 역할로 사용)\n", - " - `test_data`\n", - "\n", - "- 주요 컬럼\n", + "- 주요 컬럼:\n", " - `treatment`: 광고/프로모션 노출 여부 (0/1)\n", " - `spend`: 사용자가 발생시킨 매출(이익) → Gain outcome: $(Y^r)$\n", " - `cost`: 해당 고객에게 treatment를 줄 때 들어간 비용 → Cost outcome: $(Y^c)$\n", " - `treatment_propensity`: 실험에서 treatment에 할당될 확률\n", " - `sample_weight`: 샘플 가중치\n", - " - `criteo.features`: feature 컬럼 이름 리스트 (문자열 리스트)" + " - `criteo.features`: feature 컬럼 이름 리스트 (문자열 리스트)\n", + "\n", + "- Train/Val/Test split:\n", + " \n", + " `train_data`를 train / validation / test 로 분리하여 사용합니다.\n", + " " ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 638, "id": "b2b3d7a2", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Train shape: (72053, 19)\n", - "Val shape: (17774, 19)\n", - "Test shape: (20333, 19)\n", - "\n", - "Feature columns: ['f0', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'f10', 'f11']\n", - "\n", - "Train head:\n" - ] - }, - { - "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", - " \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", - "
f0f1f2f3f4f5f6f7f8f9f10f11treatmentconversiontreatment_propensitycost_percentagespendcostsample_weight
4412.61636510.0596548.9645884.67988210.2805254.1154530.2944434.8338153.95539613.1900565.300375-0.168679100.850.0000000.0000000.000000100.0
18712.61636510.0596548.9045974.67988210.2805254.1154530.2944434.8338153.95539613.1900565.300375-0.168679100.850.0000000.0000000.000000100.0
48422.37723810.0596548.2143834.67988210.2805254.115453-2.4111154.8338153.97185813.1900565.300375-0.168679100.850.0000000.0000000.000000100.0
52812.61636510.0596548.3506824.67988210.2805254.1154530.2944434.8338153.95539616.2260445.300375-0.168679100.850.0000000.0000000.000000100.0
110814.61762710.0596548.4899293.90766213.2538134.115453-2.4111154.8338153.80953042.1763245.737292-0.560340110.850.09077736.4592943.3096551.0
\n", - "
" - ], - "text/plain": [ - " f0 f1 f2 f3 f4 f5 f6 \\\n", - "44 12.616365 10.059654 8.964588 4.679882 10.280525 4.115453 0.294443 \n", - "187 12.616365 10.059654 8.904597 4.679882 10.280525 4.115453 0.294443 \n", - "484 22.377238 10.059654 8.214383 4.679882 10.280525 4.115453 -2.411115 \n", - "528 12.616365 10.059654 8.350682 4.679882 10.280525 4.115453 0.294443 \n", - "1108 14.617627 10.059654 8.489929 3.907662 13.253813 4.115453 -2.411115 \n", - "\n", - " f7 f8 f9 f10 f11 treatment \\\n", - "44 4.833815 3.955396 13.190056 5.300375 -0.168679 1 \n", - "187 4.833815 3.955396 13.190056 5.300375 -0.168679 1 \n", - "484 4.833815 3.971858 13.190056 5.300375 -0.168679 1 \n", - "528 4.833815 3.955396 16.226044 5.300375 -0.168679 1 \n", - "1108 4.833815 3.809530 42.176324 5.737292 -0.560340 1 \n", - "\n", - " conversion treatment_propensity cost_percentage spend cost \\\n", - "44 0 0.85 0.000000 0.000000 0.000000 \n", - "187 0 0.85 0.000000 0.000000 0.000000 \n", - "484 0 0.85 0.000000 0.000000 0.000000 \n", - "528 0 0.85 0.000000 0.000000 0.000000 \n", - "1108 1 0.85 0.090777 36.459294 3.309655 \n", - "\n", - " sample_weight \n", - "44 100.0 \n", - "187 100.0 \n", - "484 100.0 \n", - "528 100.0 \n", - "1108 1.0 " - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - } - ], + "outputs": [], "source": [ "criteo = fr.example_data.CriteoWithSyntheticCostAndSpend.load()\n", "\n", - "train_df = criteo.train_data.copy()\n", - "val_df = criteo.distill_data.copy() # distill_data를 validation 데이터로 사용\n", - "test_df = criteo.test_data.copy()\n", - "features = criteo.features # feature column 리스트\n", - "\n", - "print(\"Train shape:\", train_df.shape)\n", - "print(\"Val shape:\", val_df.shape)\n", - "print(\"Test shape:\", test_df.shape)\n", - "print(\"\\nFeature columns:\", features)\n", + "df_all = criteo.train_data.copy()\n", + "features = criteo.features\n", "\n", - "print(\"\\nTrain head:\")\n", - "train_df.head()\n" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "5c9e7a68", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "treatment 비율: 0.8611161228540103\n", - "spend describe:\n", - "count 72053.000000\n", - "mean 7.638117\n", - "std 15.380174\n", - "min 0.000000\n", - "25% 0.000000\n", - "50% 0.000000\n", - "75% 0.000000\n", - "max 172.747528\n", - "Name: spend, dtype: float64\n", - "cost describe:\n", - "count 72053.000000\n", - "mean 2.558094\n", - "std 7.596816\n", - "min 0.000000\n", - "25% 0.000000\n", - "50% 0.000000\n", - "75% 0.000000\n", - "max 63.162000\n", - "Name: cost, dtype: float64\n" - ] - } - ], - "source": [ - "print(\"treatment 비율:\", train_df[\"treatment\"].mean())\n", - "print(\"spend describe:\")\n", - "print(train_df[\"spend\"].describe())\n", - "print(\"cost describe:\")\n", - "print(train_df[\"cost\"].describe())" - ] - }, - { - "cell_type": "markdown", - "id": "bfdbc4fd", - "metadata": {}, - "source": [ - "### Feature 행렬 & 타겟 정의\n", - "\n", - "- $X$: `features` 컬럼들\n", - "- $T$: `treatment` (0/1)\n", - "- $Y^r$: `spend` (gain)\n", - "- $Y^c$: `cost` (cost)\n", - "\n", - "여기서는:\n", + "# 1) train vs temp(=val+test)\n", + "train_df, temp_df = train_test_split(\n", + " df_all,\n", + " test_size=0.4, # val 0.2 + test 0.2\n", + " random_state=RANDOM_STATE,\n", + " stratify=df_all[\"treatment\"],\n", + ")\n", "\n", - "- 데이터셋이 이미 `train / distill / test`로 나뉘어 있으므로,\n", - " - `train_df` → train\n", - " - `val_df` → validation\n", - " - `test_df` → test\n", - " 로 그대로 사용합니다.\n" + "# 2) temp를 val vs test\n", + "val_df, test_df = train_test_split(\n", + " temp_df,\n", + " test_size=0.5, # temp의 절반 = 0.2\n", + " random_state=RANDOM_STATE,\n", + " stratify=temp_df[\"treatment\"],\n", + ")" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 652, "id": "e286adf5", "metadata": {}, "outputs": [ @@ -450,9 +143,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "X_train shape: (72053, 12)\n", - "X_val shape: (17774, 12)\n", - "X_test shape: (20333, 12)\n" + "X_train shape: (43231, 12)\n", + "X_val shape: (14411, 12)\n", + "X_test shape: (14411, 12)\n" ] } ], @@ -473,6 +166,10 @@ "Yc_val = val_df[\"cost\"].values.astype(float)\n", "Yc_test = test_df[\"cost\"].values.astype(float)\n", "\n", + "W_train = train_df[\"sample_weight\"].values.astype(float)\n", + "W_val = val_df[\"sample_weight\"].values.astype(float)\n", + "W_test = test_df[\"sample_weight\"].values.astype(float)\n", + "\n", "print(\"X_train shape:\", X_train.shape)\n", "print(\"X_val shape:\", X_val.shape)\n", "print(\"X_test shape:\", X_test.shape)" @@ -533,23 +230,18 @@ "\n", "- $m^*(X) = \\mathbb{E}[Y \\mid X]$: outcome 평균 모델 \n", "- $e^*(X) = \\mathbb{P}(T=1 \\mid X)$: propensity score \n", - "\n", - "Criteo 셋에서는 gain과 cost가 모두 연속값이므로 \n", - "각각 독립적인 회귀모델을 쓰는 것이 자연스럽습니다.\n", + " > propensity score는 treatment_propensity 컬럼을 그대로 사용합니다.\n", "\n", "- Gain outcome $Y^r = \\texttt{spend}$\n", " - $m_r(x) = \\mathbb{E}[Y^r\\mid X=x]$: Ridge 회귀\n", "\n", "- Cost outcome $Y^c = \\texttt{cost}$\n", - " - $m_c(x) = \\mathbb{E}[Y^c\\mid X=x]$: Ridge 회귀\n", - "\n", - "- Treatment model\n", - " - $e(x) = \\mathbb{P}(T=1\\mid X=x)$: Logistic 회귀" + " - $m_c(x) = \\mathbb{E}[Y^c\\mid X=x]$: Ridge 회귀" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 620, "id": "3e718594", "metadata": {}, "outputs": [ @@ -558,18 +250,18 @@ "output_type": "stream", "text": [ "== m_r(x) 성능 (R^2: spend 회귀) ==\n", - "Train R^2: 0.5991714831471346\n", - "Val R^2: 0.6034863154274288\n", + "Train R^2: 0.5937760649833947\n", + "Val R^2: 0.6185973626734869\n", "\n", "예측값 분포 (Val):\n", - "count 17774.000000\n", - "mean 7.529438\n", - "std 11.912387\n", - "min -5.214262\n", - "25% -0.278099\n", - "50% 1.335855\n", - "75% 12.749807\n", - "max 81.783020\n", + "count 14411.000000\n", + "mean 7.721704\n", + "std 11.980173\n", + "min -5.330875\n", + "25% -0.231392\n", + "50% 1.539356\n", + "75% 12.941192\n", + "max 80.358582\n", "dtype: float64\n" ] } @@ -595,7 +287,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 621, "id": "083c0aa5", "metadata": {}, "outputs": [ @@ -604,18 +296,18 @@ "output_type": "stream", "text": [ "== m_c(x) 성능 (R^2: cost 회귀) ==\n", - "Train R^2: 0.2841092845226817\n", - "Val R^2: 0.29156262859724946\n", + "Train R^2: 0.2921035090257208\n", + "Val R^2: 0.27535410112615455\n", "\n", "예측값 분포 (Val):\n", - "count 17774.000000\n", - "mean 2.524266\n", - "std 4.070278\n", - "min -24.999222\n", - "25% -0.114549\n", - "50% 0.894167\n", - "75% 4.298206\n", - "max 23.168346\n", + "count 14411.000000\n", + "mean 2.570728\n", + "std 4.126056\n", + "min -19.284588\n", + "25% -0.116940\n", + "50% 0.918125\n", + "75% 4.393160\n", + "max 24.175064\n", "dtype: float64\n" ] } @@ -641,7 +333,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 622, "id": "1aa8d52b", "metadata": {}, "outputs": [ @@ -650,30 +342,19 @@ "output_type": "stream", "text": [ "== e(x) 성능 (AUC: treatment 모델) ==\n", - "Train AUC: 0.5432668234321524\n", - "Val AUC: 0.5470811168626702\n", + "Train AUC: 0.5\n", + "Val AUC: 0.5\n", "\n", "Propensity e(x) range:\n", - "Train: 0.8259820462034405 → 0.9497856673846461\n", - "Val : 0.8258405409868536 → 0.9441271638409029\n" + "Train: 0.8500001287591226 → 0.8500001287591226\n", + "Val : 0.8500001287591226 → 0.8500001287591226\n" ] } ], "source": [ - "# Propensity model e(x) = P(T=1 | X): Logistic 회귀\n", - "propensity = LogisticRegression(\n", - " penalty=\"l2\",\n", - " C=1.0,\n", - " solver=\"lbfgs\",\n", - " max_iter=1000,\n", - " n_jobs=-1,\n", - ")\n", - "\n", - "propensity.fit(X_train, T_train)\n", - "\n", - "e_train = propensity.predict_proba(X_train)[:, 1]\n", - "e_val = propensity.predict_proba(X_val)[:, 1]\n", - "e_test = propensity.predict_proba(X_test)[:, 1]\n", + "e_train = train_df[\"treatment_propensity\"].values.astype(float)\n", + "e_val = val_df[\"treatment_propensity\"].values.astype(float)\n", + "e_test = test_df[\"treatment_propensity\"].values.astype(float)\n", "\n", "auc_train_e = roc_auc_score(T_train, e_train)\n", "auc_val_e = roc_auc_score(T_val, e_val)\n", @@ -729,7 +410,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 623, "id": "28eb5e7c", "metadata": {}, "outputs": [], @@ -742,53 +423,61 @@ " e_tr, e_val,\n", " alpha=1.0,\n", " name=\"R-learner\",\n", + " rt_clip=1e-6,\n", "):\n", " \"\"\"\n", " 선형 τ(x) = w^T x 를 R-learner 방식으로 학습.\n", - " - X_tr, X_val: feature 행렬\n", - " - T_tr, T_val: treatment (0/1)\n", - " - Y_tr, Y_val: outcome (gain or cost)\n", - " - m_tr, m_val: m(x) = E[Y|X] 예측값\n", - " - e_tr, e_val: e(x) = P(T=1|X) 예측값\n", + " rY = (T - e(X)) * τ(X) + ε 를 이용해 w를 추정한다.\n", " \"\"\"\n", - " X_tr = np.asarray(X_tr)\n", - " X_val = np.asarray(X_val)\n", - " T_tr = np.asarray(T_tr).astype(float)\n", - " T_val = np.asarray(T_val).astype(float)\n", - " Y_tr = np.asarray(Y_tr).astype(float)\n", - " Y_val = np.asarray(Y_val).astype(float)\n", - " m_tr = np.asarray(m_tr).astype(float)\n", - " m_val = np.asarray(m_val).astype(float)\n", - " e_tr = np.asarray(e_tr).astype(float)\n", - " e_val = np.asarray(e_val).astype(float)\n", + " X_tr = np.asarray(X_tr, dtype=float)\n", + " X_val = np.asarray(X_val, dtype=float)\n", + " T_tr = np.asarray(T_tr, dtype=float)\n", + " T_val = np.asarray(T_val, dtype=float)\n", + " Y_tr = np.asarray(Y_tr, dtype=float)\n", + " Y_val = np.asarray(Y_val, dtype=float)\n", + " m_tr = np.asarray(m_tr, dtype=float)\n", + " m_val = np.asarray(m_val, dtype=float)\n", + " e_tr = np.asarray(e_tr, dtype=float)\n", + " e_val = np.asarray(e_val, dtype=float)\n", "\n", " # residuals\n", " rY_tr = Y_tr - m_tr\n", " rT_tr = T_tr - e_tr\n", "\n", - " # Z = X * rT (각 행을 rT로 스케일링)\n", + " # rT가 너무 작은 경우 클리핑\n", + " rT_tr = np.where(np.abs(rT_tr) < rt_clip, np.sign(rT_tr) * rt_clip, rT_tr)\n", + "\n", + " # Z = X * rT\n", " Z_tr = X_tr * rT_tr.reshape(-1, 1)\n", "\n", - " # 회귀: rY ~ Z\n", + " # fit\n", " tau_model = Ridge(alpha=alpha, fit_intercept=False, random_state=RANDOM_STATE)\n", " tau_model.fit(Z_tr, rY_tr)\n", "\n", " # τ_hat(x) = w^T x\n", - " tau_tr = tau_model.predict(X_tr)\n", - " tau_val = tau_model.predict(X_val)\n", + " w = tau_model.coef_.reshape(-1)\n", + " tau_tr = X_tr @ w\n", + " tau_val = X_val @ w\n", + "\n", + " # val에서 rY를 얼마나 설명하는지 확인\n", + " rY_val = Y_val - m_val\n", + " rT_val = T_val - e_val\n", + " pred_rY_val = rT_val * tau_val\n", + " mse_val = np.mean((rY_val - pred_rY_val) ** 2)\n", "\n", " print(f\"== {name} 요약 ==\")\n", " print(\"Train τ_hat summary:\")\n", " print(pd.Series(tau_tr).describe())\n", " print(\"\\nVal τ_hat summary:\")\n", " print(pd.Series(tau_val).describe())\n", + " print(f\"\\nVal check: MSE(rY, rT*tau) = {mse_val:.6f}\")\n", "\n", - " return tau_model, tau_tr, tau_val" + " return tau_model, tau_tr, tau_val\n" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 624, "id": "03fc2e68", "metadata": {}, "outputs": [ @@ -798,26 +487,28 @@ "text": [ "== Gain R-learner τ_r(x) 요약 ==\n", "Train τ_hat summary:\n", - "count 72053.000000\n", - "mean 0.869965\n", - "std 4.075175\n", - "min -16.366707\n", - "25% -0.214938\n", - "50% 0.119879\n", - "75% 1.240913\n", - "max 74.068790\n", + "count 43231.000000\n", + "mean 0.744968\n", + "std 4.095001\n", + "min -14.967210\n", + "25% -0.467654\n", + "50% 0.084019\n", + "75% 1.151731\n", + "max 75.742621\n", "dtype: float64\n", "\n", "Val τ_hat summary:\n", - "count 17774.000000\n", - "mean 0.847950\n", - "std 4.047337\n", - "min -13.205720\n", - "25% -0.215324\n", - "50% 0.116316\n", - "75% 1.209327\n", - "max 66.496148\n", - "dtype: float64\n" + "count 14411.000000\n", + "mean 0.805699\n", + "std 4.339214\n", + "min -13.043869\n", + "25% -0.465580\n", + "50% 0.088950\n", + "75% 1.189868\n", + "max 70.995090\n", + "dtype: float64\n", + "\n", + "Val check: MSE(rY, rT*tau) = 91.237132\n" ] } ], @@ -844,7 +535,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 625, "id": "554cb0c4", "metadata": {}, "outputs": [ @@ -854,26 +545,28 @@ "text": [ "== Cost R-learner τ_c(x) 요약 ==\n", "Train τ_hat summary:\n", - "count 72053.000000\n", - "mean 2.873521\n", - "std 4.356113\n", - "min -18.526381\n", - "25% -0.005015\n", - "50% 0.903932\n", - "75% 4.806126\n", - "max 29.188446\n", + "count 43231.000000\n", + "mean 2.810444\n", + "std 4.418757\n", + "min -19.332760\n", + "25% -0.070645\n", + "50% 0.982358\n", + "75% 4.749005\n", + "max 26.477165\n", "dtype: float64\n", "\n", "Val τ_hat summary:\n", - "count 17774.000000\n", - "mean 2.838168\n", - "std 4.375784\n", - "min -28.228684\n", - "25% -0.024353\n", - "50% 0.862495\n", - "75% 4.697582\n", - "max 26.297773\n", - "dtype: float64\n" + "count 14411.000000\n", + "mean 2.817899\n", + "std 4.431292\n", + "min -20.013473\n", + "25% -0.087577\n", + "50% 1.023093\n", + "75% 4.772627\n", + "max 25.653274\n", + "dtype: float64\n", + "\n", + "Val check: MSE(rY, rT*tau) = 40.727902\n" ] } ], @@ -900,7 +593,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 626, "id": "01798a5e", "metadata": {}, "outputs": [ @@ -910,78 +603,78 @@ "text": [ "== τ_r(x) 요약 ==\n", "[Train]\n", - "count 72053.000000\n", - "mean 0.869965\n", - "std 4.075175\n", - "min -16.366707\n", - "25% -0.214938\n", - "50% 0.119879\n", - "75% 1.240913\n", - "max 74.068790\n", + "count 43231.000000\n", + "mean 0.744968\n", + "std 4.095001\n", + "min -14.967210\n", + "25% -0.467654\n", + "50% 0.084019\n", + "75% 1.151731\n", + "max 75.742621\n", "dtype: float64\n", "\n", "[Val]\n", - "count 17774.000000\n", - "mean 0.847950\n", - "std 4.047337\n", - "min -13.205720\n", - "25% -0.215324\n", - "50% 0.116316\n", - "75% 1.209327\n", - "max 66.496148\n", + "count 14411.000000\n", + "mean 0.805699\n", + "std 4.339214\n", + "min -13.043869\n", + "25% -0.465580\n", + "50% 0.088950\n", + "75% 1.189868\n", + "max 70.995090\n", "dtype: float64\n", "\n", "[Test]\n", - "count 20333.000000\n", - "mean 2.168109\n", - "std 7.207469\n", - "min -13.727579\n", - "25% -1.233063\n", - "50% 0.928363\n", - "75% 3.340883\n", - "max 76.512638\n", + "count 14411.000000\n", + "mean 0.713794\n", + "std 4.158598\n", + "min -14.772031\n", + "25% -0.479206\n", + "50% 0.054279\n", + "75% 1.114829\n", + "max 61.358405\n", "dtype: float64\n", "\n", "== τ_c(x) 요약 ==\n", "[Train]\n", - "count 72053.000000\n", - "mean 2.873521\n", - "std 4.356113\n", - "min -18.526381\n", - "25% -0.005015\n", - "50% 0.903932\n", - "75% 4.806126\n", - "max 29.188446\n", + "count 43231.000000\n", + "mean 2.810444\n", + "std 4.418757\n", + "min -19.332760\n", + "25% -0.070645\n", + "50% 0.982358\n", + "75% 4.749005\n", + "max 26.477165\n", "dtype: float64\n", "\n", "[Val]\n", - "count 17774.000000\n", - "mean 2.838168\n", - "std 4.375784\n", - "min -28.228684\n", - "25% -0.024353\n", - "50% 0.862495\n", - "75% 4.697582\n", - "max 26.297773\n", + "count 14411.000000\n", + "mean 2.817899\n", + "std 4.431292\n", + "min -20.013473\n", + "25% -0.087577\n", + "50% 1.023093\n", + "75% 4.772627\n", + "max 25.653274\n", "dtype: float64\n", "\n", "[Test]\n", - "count 20333.000000\n", - "mean 8.090442\n", - "std 4.941765\n", - "min -17.154167\n", - "25% 4.801457\n", - "50% 7.960261\n", - "75% 11.408073\n", - "max 26.761067\n", + "count 14411.000000\n", + "mean 2.739378\n", + "std 4.419076\n", + "min -20.425985\n", + "25% -0.102309\n", + "50% 0.915572\n", + "75% 4.637743\n", + "max 28.992231\n", "dtype: float64\n" ] } ], "source": [ "# Test set CATE 예측\n", - "tau_r_test = tau_r_model.predict(X_test)\n", - "tau_c_test = tau_c_model.predict(X_test)\n", + "tau_r_test = X_test @ tau_r_model.coef_.reshape(-1)\n", + "tau_c_test = X_test @ tau_c_model.coef_.reshape(-1)\n", "\n", "print(\"== τ_r(x) 요약 ==\")\n", "print(\"[Train]\")\n", @@ -1055,7 +748,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "id": "5fe3e686", "metadata": {}, "outputs": [], @@ -1067,6 +760,7 @@ " lr=1e-5,\n", " n_iter=200,\n", " verbose_every=20,\n", + " scale=1e4\n", "):\n", " \"\"\"\n", " τ_r, τ_c 가 주어졌을 때 Duality gradient ascent로 λ 학습.\n", @@ -1096,7 +790,8 @@ " grad = cost_used - B\n", "\n", " # gradient ascent (λ >= 0 유지)\n", - " lam = max(0.0, lam + lr * grad)\n", + " lr_eff = lr * scale / (total_pos_cost + 1e-12)\n", + " lam = max(0.0, lam + lr_eff * grad)\n", "\n", " if it % verbose_every == 0:\n", " sel_ratio = z.mean()\n", @@ -1114,7 +809,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 628, "id": "233a6a45", "metadata": {}, "outputs": [ @@ -1122,21 +817,21 @@ "name": "stdout", "output_type": "stream", "text": [ - "[iter 000] λ=0.873750, cost_used=153674.7514, gain_used=95695.1631, grad=87375.0116, selected=0.571\n", - "[iter 020] λ=0.228848, cost_used=27172.5443, gain_used=61222.1379, grad=-39127.1955, selected=0.150\n", - "[iter 040] λ=0.229153, cost_used=27165.0076, gain_used=61217.4623, grad=-39134.7322, selected=0.150\n", - "[iter 060] λ=0.229200, cost_used=27164.1299, gain_used=61216.9177, grad=-39135.6099, selected=0.150\n", - "[iter 080] λ=0.229252, cost_used=27149.2112, gain_used=61207.6592, grad=-39150.5286, selected=0.150\n", - "[iter 100] λ=0.229233, cost_used=27149.2112, gain_used=61207.6592, grad=-39150.5286, selected=0.150\n", - "[iter 120] λ=0.229137, cost_used=27165.0076, gain_used=61217.4623, grad=-39134.7322, selected=0.150\n", - "[iter 140] λ=0.229207, cost_used=27164.1299, gain_used=61216.9177, grad=-39135.6099, selected=0.150\n", - "[iter 160] λ=0.229252, cost_used=27149.2112, gain_used=61207.6592, grad=-39150.5286, selected=0.150\n", - "[iter 180] λ=0.229143, cost_used=27165.0076, gain_used=61217.4623, grad=-39134.7322, selected=0.150\n", - "[iter 200] λ=0.229180, cost_used=27164.1299, gain_used=61216.9177, grad=-39135.6099, selected=0.150\n", + "[iter 000] λ=0.036519, cost_used=88238.3493, gain_used=56003.9532, grad=48442.7285, selected=0.530\n", + "[iter 020] λ=0.324064, cost_used=46207.1315, gain_used=49466.9730, grad=6411.5107, selected=0.363\n", + "[iter 040] λ=0.366826, cost_used=40887.6177, gain_used=47644.3566, grad=1091.9968, selected=0.333\n", + "[iter 060] λ=0.374218, cost_used=39912.3018, gain_used=47282.8494, grad=116.6809, selected=0.327\n", + "[iter 080] λ=0.374977, cost_used=39803.9172, gain_used=47242.2461, grad=8.2964, selected=0.326\n", + "[iter 100] λ=0.375001, cost_used=39795.3574, gain_used=47239.0362, grad=-0.2634, selected=0.326\n", + "[iter 120] λ=0.375001, cost_used=39795.3574, gain_used=47239.0362, grad=-0.2634, selected=0.326\n", + "[iter 140] λ=0.375002, cost_used=39795.3574, gain_used=47239.0362, grad=-0.2634, selected=0.326\n", + "[iter 160] λ=0.375002, cost_used=39795.3574, gain_used=47239.0362, grad=-0.2634, selected=0.326\n", + "[iter 180] λ=0.375003, cost_used=39795.3574, gain_used=47239.0362, grad=-0.2634, selected=0.326\n", + "[iter 200] λ=0.375003, cost_used=39801.2137, gain_used=47241.2323, grad=5.5929, selected=0.326\n", "\n", - "최종 λ*: 0.22917953894026566\n", - "총 양의 cost effect 합: 220999.1326870586\n", - "예산 B (fraction=0.3): 66299.73980611758\n" + "최종 λ*: 0.3750031632094995\n", + "총 양의 cost effect 합: 132652.0694261761\n", + "예산 B (fraction=0.3): 39795.62082785283\n" ] } ], @@ -1149,51 +844,43 @@ " lr=1e-5,\n", " n_iter=200,\n", " verbose_every=20,\n", + " scale=1e4\n", ")" ] }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 642, "id": "a54ac8cf", "metadata": {}, "outputs": [], "source": [ "def selection_summary(tau_r, tau_c, lam, name=\"\"):\n", - " tau_r = np.asarray(tau_r).astype(float)\n", - " tau_c_pos = np.clip(tau_c, a_min=0.0, a_max=None)\n", + " tau_r = np.asarray(tau_r, float)\n", + " tau_c = np.asarray(tau_c, float)\n", + " tau_c_pos = np.clip(tau_c, 0.0, None)\n", "\n", " s = tau_r - lam * tau_c_pos\n", " z = (s >= 0).astype(float)\n", "\n", - " gain_pos = np.clip(tau_r, 0.0, None)\n", - " cost_pos = np.clip(tau_c, 0.0, None)\n", - "\n", - " gain_used = (gain_pos * z).sum()\n", - " cost_used = (cost_pos * z).sum()\n", + " gain_used = (tau_r * z).sum()\n", + " cost_used = (tau_c_pos * z).sum()\n", " sel_ratio = z.mean()\n", - "\n", " ratio = gain_used / cost_used if cost_used > 0 else np.nan\n", "\n", " print(f\"\\n== Selection summary ({name}) ==\")\n", " print(f\"λ = {lam:.6f}\")\n", " print(f\"선택 비율: {sel_ratio:.3f} ({z.sum():.0f} / {len(z)})\")\n", - " print(f\"총 gain (∑ τ_r^+ z): {gain_used:.4f}\")\n", + " print(f\"총 gain (∑ τ_r z): {gain_used:.4f}\")\n", " print(f\"총 cost (∑ τ_c^+ z): {cost_used:.4f}\")\n", " print(f\"gain / cost 비율: {ratio:.4f}\")\n", "\n", - " return {\n", - " \"lambda\": lam,\n", - " \"selected_ratio\": sel_ratio,\n", - " \"gain_used\": gain_used,\n", - " \"cost_used\": cost_used,\n", - " \"gain_per_cost\": ratio,\n", - " }" + " return {\"lambda\": lam, \"selected_ratio\": sel_ratio, \"gain_used\": gain_used, \"cost_used\": cost_used, \"gain_per_cost\": ratio}\n" ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 643, "id": "6947da6a", "metadata": {}, "outputs": [ @@ -1203,25 +890,25 @@ "text": [ "\n", "== Selection summary (Train) ==\n", - "λ = 0.229180\n", - "선택 비율: 0.448 (32281 / 72053)\n", - "총 gain (∑ τ_r^+ z): 89986.7776\n", - "총 cost (∑ τ_c^+ z): 105798.3648\n", - "gain / cost 비율: 0.8505\n", + "λ = 0.375003\n", + "선택 비율: 0.326 (14100 / 43231)\n", + "총 gain (∑ τ_r z): 47239.0362\n", + "총 cost (∑ τ_c^+ z): 39795.3574\n", + "gain / cost 비율: 1.1870\n", "\n", "== Selection summary (Val) ==\n", - "λ = 0.229180\n", - "선택 비율: 0.443 (7877 / 17774)\n", - "총 gain (∑ τ_r^+ z): 21768.6841\n", - "총 cost (∑ τ_c^+ z): 25771.2861\n", - "gain / cost 비율: 0.8447\n", + "λ = 0.375003\n", + "선택 비율: 0.328 (4733 / 14411)\n", + "총 gain (∑ τ_r z): 16722.9333\n", + "총 cost (∑ τ_c^+ z): 13560.8063\n", + "gain / cost 비율: 1.2332\n", "\n", "== Selection summary (Test) ==\n", - "λ = 0.229180\n", - "선택 비율: 0.410 (8345 / 20333)\n", - "총 gain (∑ τ_r^+ z): 60981.3120\n", - "총 cost (∑ τ_c^+ z): 55160.2068\n", - "gain / cost 비율: 1.1055\n" + "λ = 0.375003\n", + "선택 비율: 0.323 (4656 / 14411)\n", + "총 gain (∑ τ_r z): 15984.1864\n", + "총 cost (∑ τ_c^+ z): 12859.2200\n", + "gain / cost 비율: 1.2430\n" ] } ], @@ -1283,65 +970,75 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 654, "id": "6039a560", "metadata": {}, "outputs": [], "source": [ - "def cost_curve_aucc(scores, Yg, Yc, T, n_points=80):\n", - " \"\"\"\n", - " Paper-style Y-based Cost Curve:\n", - " - sort by score desc\n", - " - for each prefix top-k:\n", - " ATE_gain = mean(Yg|T=1) - mean(Yg|T=0)\n", - " ATE_cost = mean(Yc|T=1) - mean(Yc|T=0)\n", - " ΔGain(k) = n_treat * ATE_gain\n", - " ΔCost(k) = n_treat * ATE_cost\n", - " - normalize (rightmost if possible else max-positive)\n", - " - AUCC = ∫ y dx\n", - " \"\"\"\n", + "def cost_curve_aucc(scores, Yg, Yc, T, W=None, n_points=80, clip_negative_gain=False):\n", " scores = np.asarray(scores, float)\n", " Yg = np.asarray(Yg, float)\n", " Yc = np.asarray(Yc, float)\n", " T = np.asarray(T, int)\n", + " if W is None:\n", + " W = np.ones_like(T, dtype=float)\n", + " else:\n", + " W = np.asarray(W, float)\n", "\n", " order = np.argsort(-scores)\n", - " Yg, Yc, T = Yg[order], Yc[order], T[order]\n", + " Yg, Yc, T, W = Yg[order], Yc[order], T[order], W[order]\n", "\n", " N = len(T)\n", " ks = np.linspace(1, N, n_points, dtype=int)\n", "\n", - " inc_g, inc_c = [0.0], [0.0] # include (0,0)\n", + " def wmean(y, w):\n", + " return (y * w).sum() / (w.sum() + 1e-12)\n", + "\n", + " inc_g, inc_c = [0.0], [0.0]\n", " for k in ks:\n", - " T_k, Yg_k, Yc_k = T[:k], Yg[:k], Yc[:k]\n", + " T_k, Yg_k, Yc_k, W_k = T[:k], Yg[:k], Yc[:k], W[:k]\n", " mt, mc = (T_k == 1), (T_k == 0)\n", "\n", " if mt.sum() == 0 or mc.sum() == 0:\n", " inc_g.append(0.0); inc_c.append(0.0); continue\n", "\n", - " ate_g = Yg_k[mt].mean() - Yg_k[mc].mean()\n", - " ate_c = Yc_k[mt].mean() - Yc_k[mc].mean()\n", - " n_t = mt.sum()\n", + " ate_g = wmean(Yg_k[mt], W_k[mt]) - wmean(Yg_k[mc], W_k[mc])\n", + " ate_c = wmean(Yc_k[mt], W_k[mt]) - wmean(Yc_k[mc], W_k[mc])\n", + "\n", + " \n", + " w_t = W_k[mt].sum()\n", + " inc_g.append(ate_g * w_t)\n", + " inc_c.append(ate_c * w_t)\n", "\n", - " inc_g.append(ate_g * n_t)\n", - " inc_c.append(ate_c * n_t)\n", + " inc_g = np.asarray(inc_g, float)\n", + " if clip_negative_gain:\n", + " inc_g = np.maximum(inc_g, 0.0)\n", "\n", - " inc_g = np.maximum(np.asarray(inc_g, float), 0.0)\n", - " inc_c = np.asarray(inc_c, float)\n", + " # cost는 음수면 0으로 (안전)\n", + " inc_c = np.maximum(np.asarray(inc_c, float), 0.0)\n", "\n", " max_g, max_c = inc_g[-1], inc_c[-1]\n", - " if max_g <= 0 or max_c <= 0:\n", - " max_g = inc_g[inc_g > 0].max() if np.any(inc_g > 0) else 1.0\n", - " max_c = inc_c[inc_c > 0].max() if np.any(inc_c > 0) else 1.0\n", + " if max_g == 0:\n", + " max_g = np.max(np.abs(inc_g)) if np.max(np.abs(inc_g)) > 0 else 1.0\n", + " if max_c == 0:\n", + " max_c = np.max(inc_c) if np.max(inc_c) > 0 else 1.0\n", "\n", " x = inc_c / max_c\n", " y = inc_g / max_g\n", "\n", - " si = np.argsort(x)\n", - " aucc = np.trapz(y[si], x[si])\n", - " return x, y, aucc\n", - "\n", - "def plot_cost_curve(x, y, aucc, title=\"Cost Curve (Paper-style, Y-based)\", label=\"Model\"):\n", + " x = np.maximum.accumulate(x)\n", + " aucc = np.trapz(y, x)\n", + " return x, y, aucc\n" + ] + }, + { + "cell_type": "code", + "execution_count": 655, + "id": "a60166d5", + "metadata": {}, + "outputs": [], + "source": [ + "def plot_cost_curve(x, y, aucc, title=\"Cost Curve\", label=\"Model\"):\n", " plt.figure(figsize=(7, 6))\n", " plt.plot(x, y, label=f\"{label} (AUCC={aucc:.3f})\")\n", " plt.plot([0, 1], [0, 1], alpha=0.35, linewidth=1, label=\"y=x benchmark\")\n", @@ -1356,7 +1053,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 656, "id": "2b41ea6a", "metadata": {}, "outputs": [ @@ -1364,12 +1061,12 @@ "name": "stdout", "output_type": "stream", "text": [ - "Duality AUCC: 0.6649279978825946\n" + "Duality AUCC: 0.6109516208594291\n" ] }, { "data": { - "image/png": "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fbKlVI3cf+DAgUf147Z5BfuB9BWAV5ApiPWwfGMGIiIi0qfp/U2TXb/syMWlb61BakGl1kOyGZoHsl999ZUqKj137lxs3rwZgwcPxvTp01UHibasXr0as2bNwvXXX48tW7bg/PPPV5t0trF5hibg4AYgd7spjSDuFMClfYXPiUifli1bprpRlZaWal7ia8iQIbAlMoHx0ksvaT0MIpsnlQueu2ggfNxdVK7smS+vwLsrUjk7awuB7Pz58zFnzhxce+216NevH9588014eXnh/fffb/P+L7/8Ms444wzVlrFv37544oknMGzYMLz66quwZc5NtUDqMqDsIBAzyrSwi00OiIiIqB1mjozF73dOxISewahrNODJn/dwdlbrqgX19fXYtGlTq0420sN32rRpWLNmTZs/I7cf2RZQZnC/++472KruqEB08RogIgJIPBXwCtR6SEREmr73t7cNLxH9Laq7Jz6+bhS+3HAQT/28p3l29s7TemFITHeL7SqjwYCK8kpMCw21ucOhaSBbWFiIpqamo9r8ydd79+5t82dyc3PbvL/c3pa6ujq1mZWXl6tLg8GgNkvzaSjCeKedaHDqA4PUh3XxkCe3+PNS15G/E2kNaI2/Fz3sB/OmBx9//LH64Juenq46ZpnHfcEFF8DX11d9vyPkfWn48OF45513cPnll6vbFixYgGuuuQYbN25UZ5WOZH7OlStX4sEHH8T+/fvVKX55jAEDBjTfz/x9eZzg4GCVMvXMM8/A29tbfT8hIUGdvUpOTsY333yDgIAAPPTQQ/jHP/7R/BhZWVm499578fvvv6v3PTlrJWerZO2BeRzyOz/66KMoKSnBmWeeibffflvtCzF58mQ1JmdnZ3U/CTblrJf8rrfddpt6Xnm/feWVV9TPCnkPlzEsXbpUvQ/Hxsbipptuwu233948LjnjJqkVI0aMwOuvvw53d3ekpqY27x/z2N599111tk2eZ+rUqW3uR7387bX83az1/42t4nto15s5IhrjewThgYU7sDK5CM/+2nbM1JW6e7pg46B4WENHXi92X0dW/iOYN2/eUbcXFBSgtrbW4s/v7OaFSu845PgORH6xBNGmQJr0Q15QZWVl6j8kOWPgqKSFquyLxsZGtemBBKwSUP3www+45JJLVK6q5N///PPPapGo/B4SQM6YMeOEC1IlmOvRoweee+45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", + "image/png": "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qHQCSxAbEhLSKT8dDIL0j314fF5eXup/CWblc8M0AyIi6kqc7NWMJSdWRmKJqG0sn5fOyCknIiJqDwayrWAuK1Hb8fNCRERaYSBLRERERLrEQJY6ZNasWTj//PObbk+YMAF33HGHVY5mUVGRyr9MS0uzyuvT8V122WV47rnneIiIiMgmMZC1o8BSTvHKRWp7RkRE4LTTTsPbb7+tyn9Z29KlS/HYY4813U5MTMSiRYs65bWfeOIJTJs2Tb3m0aZOnaomGG3YsOGY+44XXL/77ruqZFRz5eXlePDBB9GrVy94enqqclJTpkxR70sme1kcPHgQV199NWJjY+Hh4YGkpCRcfvnl2LhxY4ff38qVKzFkyBD1et26dVPt+zvSpmeffRY9evRQz4uJiVHHySInJwdXXHGFul/qF7d2HHbt2oWLLrpIHVf5uWmtvx566CH1umVlZR1+f0RERNbCQNaOnHHGGSqAkZHL77//HhMnTsTtt9+Oc845R5UAs6bg4GD4+fl1+utKeae33noL11577TH3ZWRkYPXq1bj11ltVwN5RUqli9OjReP/993H//fdj8+bN+PXXXzF9+nTcd999TUGcBKtDhw7F/v378dprr2H37t34/PPPVfB79913d2jfhw8fxtlnn636auvWrSrgvO666/DDDz+c8HnSr2+++aYKZvfu3YuvvvoKw4cPb7q/rq4OYWFhKhAdOHDgcY9tcnIynn76aRW4t6Zfv35ISUnBhx9+2KH3R0REZFUmB1NWVibDa+r/o9XU1Jh2796t/u8sRqPRVF9fr/63ppkzZ5qmTZt2zPbly5er9/vGG2+o24cPH1a3t2zZ0vSYkpIStW3FihXqdmNjo+maa64xJSYmmjw9PU09evQwLVq06IT7Gz9+vOn2229vui6v1/xSWVlp8vPzM3366actXufzzz83eXt7m8rLy1t9X/L4sLCwVu975JFHTJdddplpz549poCAAFN1dXWL+5u3qbl33nlHPd7ipptuMvn4+Jiys7OPeWxFRYXqv7q6OlPfvn1NQ4cONRkMhmMeJ8ewI+677z71us1Nnz7dNHXq1OM+R35GXV1dTXv37m3TPo53HJpLSEgw/fvf/271vvnz55vGjh173Oda43PTmaS/cnJyWu030gf2ob6x//TP0MW/R08Uqx2NI7J/H+ijur5Rk0vzU9odNWnS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iHTJFQ7GZDKp/8vLy7tkf0ajERUVFfD09ISzM7836BH7UN/Yf/rHPtQ39p/+Gbs4lrHEaJaY7UQcLpCVjhBxcXFaN4WIiIiIThCzBQQE4EScTG0Jd+3sW8WRI0fg5+cHJyenLvlWIUFzZmYm/P39rb4/6nzsQ31j/+kf+1Df2H/6V97FsYyEphLERkdH/+0IsMONyMoBiY2N7fL9SsczkNU39qG+sf/0j32ob+w//fPvwljm70ZiLZi0SURERES6xECWiIiIiHSJgayVeXh4YN68eep/0if2ob6x//SPfahv7D/987DhWMbhJnsRERERkX3giCwRERER6RIDWSIiIiLSJQayRERERKRLDGQ7wUsvvYTExES1dNuIESOwfv36Ez7+008/Ra9evdTj+/fvj++++64zmkFd1IdvvPEGxo0bh6CgIHWZMmXK3/Y52dZn0GLx4sVqYZTzzz+fXaSzPiwtLcUtt9yCqKgoNQGlR48e/F2qo/5btGgRevbsCS8vL1Vo/84770RtbW2XtZf+8uuvv+Lcc89Viw/I78MvvvgCf2flypUYMmSI+ux169YN7777LjQjk72o4xYvXmxyd3c3vf3226Zdu3aZrr/+elNgYKApLy+v1cf/8ccfJhcXF9OCBQtMu3fvNj300EMmNzc3044dO9gNOunDK664wvTSSy+ZtmzZYtqzZ49p1qxZpoCAAFNWVlaXt53a338Whw8fNsXExJjGjRtnmjZtGg+ljvqwrq7ONGzYMNNZZ51l+v3331Vfrly50rR169Yubzu1v/8++ugjk4eHh/pf+u6HH34wRUVFme68804eTg189913pgcffNC0dOlSmfxv+vzzz0/4+EOHDpm8vb1Nd911l4pjXnjhBRXXLFu2zKQFBrInafjw4aZbbrml6bbBYDBFR0ebnnrqqVYff+mll5rOPvvsFttGjBhhuvHGG0+2KdRFfXi0xsZGk5+fn+m9995jH+ik/6TPRo8ebXrzzTdNM2fOZCCrsz585ZVXTMnJyab6+voubCV1Vv/JYydNmtRimwRFY8aM4UHWGNoQyN53332mvn37ttg2ffp009SpU01aYGrBSaivr8emTZvUqeXmS+DK7TVr1rT6HNne/PFi6tSpx3082V4fHq26uhoNDQ0IDg62YkupM/vv0UcfRXh4OK699loeWB324VdffYVRo0ap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", "text/plain": [ "
" ] @@ -1379,17 +1076,51 @@ } ], "source": [ - "scores_duality = tau_r_test - lambda_star * tau_c_test\n", - "x, y, aucc = cost_curve_aucc(scores_duality, Yg_test, Yc_test, T_test, n_points=80)\n", + "tau_c_test_pos = np.clip(tau_c_test, 0.0, None)\n", + "scores_duality = tau_r_test - lambda_star * tau_c_test_pos\n", + "x, y, aucc = cost_curve_aucc(scores_duality, Yg_test, Yc_test, T_test, W=W_test, n_points=80)\n", + "\n", "\n", "print(\"Duality AUCC:\", aucc)\n", "plot_cost_curve(x, y, aucc, title=\"Cost Curve on Test set\", label=\"Duality\")" ] }, + { + "cell_type": "code", + "execution_count": 651, + "id": "1d1e4af1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "train cost_used: 39795.357426534225 selected: 0.32615484258980826\n", + "val cost_used: 13560.806268071696 selected: 0.3284296717785025\n", + "test cost_used: 12859.22000170533 selected: 0.32308653112205954\n", + "B_train: 39795.62082785283\n" + ] + } + ], + "source": [ + "def cost_used_under_policy(tau_r, tau_c, lam):\n", + " tc = np.clip(tau_c, 0.0, None)\n", + " s = tau_r - lam * tc\n", + " z = (s >= 0).astype(float)\n", + " return (tc * z).sum(), z.mean()\n", + "\n", + "for name, tr, tc in [(\"train\", tau_r_train, tau_c_train),\n", + " (\"val\", tau_r_val, tau_c_val),\n", + " (\"test\", tau_r_test, tau_c_test)]:\n", + " c, sel = cost_used_under_policy(tr, tc, lambda_star)\n", + " print(name, \"cost_used:\", c, \"selected:\", sel)\n", + "print(\"B_train:\", B_train)\n" + ] + }, { "cell_type": "code", "execution_count": null, - "id": "d36a48d4", + "id": "220d5e1f", "metadata": {}, "outputs": [], "source": []