{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 🎯 Uplift modeling `metrics`\n",
"\n",
"
\n",
"
\n",
" \n",
" \n",
" \n",
"
\n",
" SCIKIT-UPLIFT REPO | \n",
" SCIKIT-UPLIFT DOCS | \n",
" USER GUIDE\n",
"
\n",
""
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"ExecuteTime": {
"end_time": "2021-02-19T20:20:26.539268Z",
"start_time": "2021-02-19T20:20:26.526760Z"
}
},
"outputs": [],
"source": [
"import sys\n",
"\n",
"# install uplift library scikit-uplift and other libraries \n",
"!{sys.executable} -m pip install scikit-uplift dill catboost"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 📝 Load data\n",
"\n",
"We are going to use a `Lenta dataset` from the BigTarget Hackathon hosted in summer 2020 by Lenta and Microsoft.\n",
"\n",
"Lenta is a russian food retailer. \n",
"\n",
"### Data description\n",
"\n",
"✏️ Dataset can be loaded from `sklift.datasets` module using `fetch_lenta` function.\n",
"\n",
"Read more about dataset in the api docs. \n",
"\n",
"This is an uplift modeling dataset containing data about Lenta's customers grociery shopping, marketing campaigns communications as `treatment` and store visits as `target`.\n",
"\n",
"#### ✏️ Major columns:\n",
"\n",
"- `group` - treatment / control flag\n",
"- `response_att` - binary target\n",
"- `CardHolder` - customer id\n",
"- `gender` - customer gender \n",
"- `age` - customer age"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"ExecuteTime": {
"end_time": "2021-02-19T20:20:53.041410Z",
"start_time": "2021-02-19T20:20:31.218625Z"
},
"scrolled": true
},
"outputs": [],
"source": [
"from sklift.datasets import fetch_lenta\n",
"\n",
"# returns sklearn Bunch object\n",
"# with data, target, treatment keys\n",
"# data features (pd.DataFrame), target (pd.Series), treatment (pd.Series) values \n",
"dataset = fetch_lenta()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"ExecuteTime": {
"end_time": "2021-02-19T20:20:53.086524Z",
"start_time": "2021-02-19T20:20:53.044019Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Dataset type: \n",
"\n",
"Dataset features shape: (687029, 193)\n",
"Dataset target shape: (687029,)\n",
"Dataset treatment shape: (687029,)\n"
]
}
],
"source": [
"print(f\"Dataset type: {type(dataset)}\\n\")\n",
"print(f\"Dataset features shape: {dataset.data.shape}\")\n",
"print(f\"Dataset target shape: {dataset.target.shape}\")\n",
"print(f\"Dataset treatment shape: {dataset.treatment.shape}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 📝 EDA"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"ExecuteTime": {
"end_time": "2021-02-19T20:20:53.181597Z",
"start_time": "2021-02-19T20:20:53.100485Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" age | \n",
" cheque_count_12m_g20 | \n",
" cheque_count_12m_g21 | \n",
" cheque_count_12m_g25 | \n",
" cheque_count_12m_g32 | \n",
" cheque_count_12m_g33 | \n",
" cheque_count_12m_g38 | \n",
" cheque_count_12m_g39 | \n",
" cheque_count_12m_g41 | \n",
" cheque_count_12m_g42 | \n",
" ... | \n",
" sale_sum_6m_g24 | \n",
" sale_sum_6m_g25 | \n",
" sale_sum_6m_g26 | \n",
" sale_sum_6m_g32 | \n",
" sale_sum_6m_g33 | \n",
" sale_sum_6m_g44 | \n",
" sale_sum_6m_g54 | \n",
" stdev_days_between_visits_15d | \n",
" stdev_discount_depth_15d | \n",
" stdev_discount_depth_1m | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 47.0 | \n",
" 3.0 | \n",
" 22.0 | \n",
" 19.0 | \n",
" 3.0 | \n",
" 28.0 | \n",
" 8.0 | \n",
" 7.0 | \n",
" 6.0 | \n",
" 1.0 | \n",
" ... | \n",
" 3141.25 | \n",
" 356.67 | \n",
" 237.25 | \n",
" 283.84 | \n",
" 3648.23 | \n",
" 1195.37 | \n",
" 535.42 | \n",
" 1.7078 | \n",
" 0.2798 | \n",
" 0.3008 | \n",
"
\n",
" \n",
" 1 | \n",
" 57.0 | \n",
" 1.0 | \n",
" 0.0 | \n",
" 2.0 | \n",
" 1.0 | \n",
" 1.0 | \n",
" 1.0 | \n",
" 0.0 | \n",
" 1.0 | \n",
" 0.0 | \n",
" ... | \n",
" 113.39 | \n",
" 62.69 | \n",
" 58.71 | \n",
" 87.01 | \n",
" 179.83 | \n",
" 0.00 | \n",
" 122.98 | \n",
" 0.0000 | \n",
" 0.0000 | \n",
" 0.0000 | \n",
"
\n",
" \n",
" 2 | \n",
" 38.0 | \n",
" 7.0 | \n",
" 0.0 | \n",
" 15.0 | \n",
" 4.0 | \n",
" 9.0 | \n",
" 5.0 | \n",
" 9.0 | \n",
" 14.0 | \n",
" 7.0 | \n",
" ... | \n",
" 1239.19 | \n",
" 533.46 | \n",
" 83.37 | \n",
" 593.13 | \n",
" 1217.43 | \n",
" 1336.83 | \n",
" 3709.82 | \n",
" 0.0000 | \n",
" NaN | \n",
" 0.0803 | \n",
"
\n",
" \n",
" 3 | \n",
" 65.0 | \n",
" 6.0 | \n",
" 3.0 | \n",
" 25.0 | \n",
" 2.0 | \n",
" 10.0 | \n",
" 14.0 | \n",
" 11.0 | \n",
" 8.0 | \n",
" 1.0 | \n",
" ... | \n",
" 139.68 | \n",
" 1849.91 | \n",
" 360.40 | \n",
" 175.73 | \n",
" 496.73 | \n",
" 172.58 | \n",
" 1246.21 | \n",
" 0.0000 | \n",
" 0.0000 | \n",
" 0.0000 | \n",
"
\n",
" \n",
" 4 | \n",
" 61.0 | \n",
" 0.0 | \n",
" 1.0 | \n",
" 2.0 | \n",
" 0.0 | \n",
" 2.0 | \n",
" 1.0 | \n",
" 0.0 | \n",
" 3.0 | \n",
" 2.0 | \n",
" ... | \n",
" 226.98 | \n",
" 168.05 | \n",
" 461.37 | \n",
" 0.00 | \n",
" 237.93 | \n",
" 225.51 | \n",
" 995.27 | \n",
" 1.4142 | \n",
" 0.3495 | \n",
" 0.3495 | \n",
"
\n",
" \n",
" 687024 | \n",
" 35.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 4.0 | \n",
" 0.0 | \n",
" 2.0 | \n",
" 0.0 | \n",
" 1.0 | \n",
" 0.0 | \n",
" 3.0 | \n",
" ... | \n",
" 550.09 | \n",
" 669.33 | \n",
" 111.87 | \n",
" 0.00 | \n",
" 330.96 | \n",
" 1173.84 | \n",
" 119.99 | \n",
" 2.6458 | \n",
" 0.3646 | \n",
" 0.3282 | \n",
"
\n",
" \n",
" 687025 | \n",
" 33.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" ... | \n",
" 0.00 | \n",
" 0.00 | \n",
" 0.00 | \n",
" 0.00 | \n",
" 0.00 | \n",
" 0.00 | \n",
" 28.01 | \n",
" 0.0000 | \n",
" 0.0000 | \n",
" 0.0000 | \n",
"
\n",
" \n",
" 687026 | \n",
" 36.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 3.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 1.0 | \n",
" 0.0 | \n",
" ... | \n",
" 0.00 | \n",
" 0.00 | \n",
" 0.00 | \n",
" 0.00 | \n",
" 0.00 | \n",
" 449.01 | \n",
" 0.00 | \n",
" 0.0000 | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" 687027 | \n",
" 37.0 | \n",
" 0.0 | \n",
" 1.0 | \n",
" 2.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 1.0 | \n",
" ... | \n",
" 0.00 | \n",
" 46.72 | \n",
" 0.00 | \n",
" 0.00 | \n",
" 0.00 | \n",
" 0.00 | \n",
" 0.00 | \n",
" 0.0000 | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" 687028 | \n",
" 40.0 | \n",
" 0.0 | \n",
" 1.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 2.0 | \n",
" 0.0 | \n",
" 0.0 | \n",
" 2.0 | \n",
" 2.0 | \n",
" ... | \n",
" 290.01 | \n",
" 0.00 | \n",
" 0.00 | \n",
" 0.00 | \n",
" 228.47 | \n",
" 752.32 | \n",
" 596.86 | \n",
" 0.0000 | \n",
" 0.0000 | \n",
" 0.0000 | \n",
"
\n",
" \n",
"
\n",
"
10 rows × 193 columns
\n",
"
"
],
"text/plain": [
" age cheque_count_12m_g20 cheque_count_12m_g21 \\\n",
"0 47.0 3.0 22.0 \n",
"1 57.0 1.0 0.0 \n",
"2 38.0 7.0 0.0 \n",
"3 65.0 6.0 3.0 \n",
"4 61.0 0.0 1.0 \n",
"687024 35.0 0.0 0.0 \n",
"687025 33.0 0.0 0.0 \n",
"687026 36.0 0.0 0.0 \n",
"687027 37.0 0.0 1.0 \n",
"687028 40.0 0.0 1.0 \n",
"\n",
" cheque_count_12m_g25 cheque_count_12m_g32 cheque_count_12m_g33 \\\n",
"0 19.0 3.0 28.0 \n",
"1 2.0 1.0 1.0 \n",
"2 15.0 4.0 9.0 \n",
"3 25.0 2.0 10.0 \n",
"4 2.0 0.0 2.0 \n",
"687024 4.0 0.0 2.0 \n",
"687025 0.0 0.0 0.0 \n",
"687026 3.0 0.0 0.0 \n",
"687027 2.0 0.0 0.0 \n",
"687028 0.0 0.0 2.0 \n",
"\n",
" cheque_count_12m_g38 cheque_count_12m_g39 cheque_count_12m_g41 \\\n",
"0 8.0 7.0 6.0 \n",
"1 1.0 0.0 1.0 \n",
"2 5.0 9.0 14.0 \n",
"3 14.0 11.0 8.0 \n",
"4 1.0 0.0 3.0 \n",
"687024 0.0 1.0 0.0 \n",
"687025 0.0 0.0 0.0 \n",
"687026 0.0 0.0 1.0 \n",
"687027 0.0 0.0 0.0 \n",
"687028 0.0 0.0 2.0 \n",
"\n",
" cheque_count_12m_g42 ... sale_sum_6m_g24 sale_sum_6m_g25 \\\n",
"0 1.0 ... 3141.25 356.67 \n",
"1 0.0 ... 113.39 62.69 \n",
"2 7.0 ... 1239.19 533.46 \n",
"3 1.0 ... 139.68 1849.91 \n",
"4 2.0 ... 226.98 168.05 \n",
"687024 3.0 ... 550.09 669.33 \n",
"687025 0.0 ... 0.00 0.00 \n",
"687026 0.0 ... 0.00 0.00 \n",
"687027 1.0 ... 0.00 46.72 \n",
"687028 2.0 ... 290.01 0.00 \n",
"\n",
" sale_sum_6m_g26 sale_sum_6m_g32 sale_sum_6m_g33 sale_sum_6m_g44 \\\n",
"0 237.25 283.84 3648.23 1195.37 \n",
"1 58.71 87.01 179.83 0.00 \n",
"2 83.37 593.13 1217.43 1336.83 \n",
"3 360.40 175.73 496.73 172.58 \n",
"4 461.37 0.00 237.93 225.51 \n",
"687024 111.87 0.00 330.96 1173.84 \n",
"687025 0.00 0.00 0.00 0.00 \n",
"687026 0.00 0.00 0.00 449.01 \n",
"687027 0.00 0.00 0.00 0.00 \n",
"687028 0.00 0.00 228.47 752.32 \n",
"\n",
" sale_sum_6m_g54 stdev_days_between_visits_15d \\\n",
"0 535.42 1.7078 \n",
"1 122.98 0.0000 \n",
"2 3709.82 0.0000 \n",
"3 1246.21 0.0000 \n",
"4 995.27 1.4142 \n",
"687024 119.99 2.6458 \n",
"687025 28.01 0.0000 \n",
"687026 0.00 0.0000 \n",
"687027 0.00 0.0000 \n",
"687028 596.86 0.0000 \n",
"\n",
" stdev_discount_depth_15d stdev_discount_depth_1m \n",
"0 0.2798 0.3008 \n",
"1 0.0000 0.0000 \n",
"2 NaN 0.0803 \n",
"3 0.0000 0.0000 \n",
"4 0.3495 0.3495 \n",
"687024 0.3646 0.3282 \n",
"687025 0.0000 0.0000 \n",
"687026 NaN NaN \n",
"687027 NaN NaN \n",
"687028 0.0000 0.0000 \n",
"\n",
"[10 rows x 193 columns]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dataset.data.head().append(dataset.data.tail())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 🤔 target share for `treatment / control` "
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"ExecuteTime": {
"end_time": "2021-02-19T20:20:53.356948Z",
"start_time": "2021-02-19T20:20:53.193956Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" response_att | \n",
" 0 | \n",
" 1 | \n",
"
\n",
" \n",
" group | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" control | \n",
" 0.897421 | \n",
" 0.102579 | \n",
"
\n",
" \n",
" test | \n",
" 0.889874 | \n",
" 0.110126 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
"response_att 0 1\n",
"group \n",
"control 0.897421 0.102579\n",
"test 0.889874 0.110126"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd \n",
"\n",
"pd.crosstab(dataset.treatment, dataset.target, normalize='index')"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"ExecuteTime": {
"end_time": "2021-02-19T20:20:53.427973Z",
"start_time": "2021-02-19T20:20:53.361728Z"
}
},
"outputs": [],
"source": [
"# make treatment binary\n",
"treat_dict = {\n",
" 'test': 1,\n",
" 'control': 0\n",
"}\n",
"\n",
"dataset.treatment = dataset.treatment.map(treat_dict)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"ExecuteTime": {
"end_time": "2021-02-19T20:20:53.545895Z",
"start_time": "2021-02-19T20:20:53.430192Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Ж 433448\n",
"М 243910\n",
"Не определен 9671\n",
"Name: gender, dtype: int64\n"
]
}
],
"source": [
"# fill NaNs in the categorical feature `gender` \n",
"# for CatBoostClassifier\n",
"dataset.data['gender'] = dataset.data['gender'].fillna(value='Не определен')\n",
"\n",
"print(dataset.data['gender'].value_counts(dropna=False))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### ✂️ train test split\n",
"\n",
"- stratify by two columns: treatment and target. \n",
"\n",
"`Intuition:` In a binary classification problem definition we stratify train set by splitting target `0/1` column. In uplift modeling we have two columns instead of one. "
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"ExecuteTime": {
"end_time": "2021-02-19T20:21:03.159534Z",
"start_time": "2021-02-19T20:20:53.548597Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Train shape: (480920, 193)\n",
"Validation shape: (206109, 193)\n"
]
}
],
"source": [
"from sklearn.model_selection import train_test_split\n",
"\n",
"stratify_cols = pd.concat([dataset.treatment, dataset.target], axis=1)\n",
"\n",
"X_train, X_val, trmnt_train, trmnt_val, y_train, y_val = train_test_split(\n",
" dataset.data,\n",
" dataset.treatment,\n",
" dataset.target,\n",
" stratify=stratify_cols,\n",
" test_size=0.3,\n",
" random_state=42\n",
")\n",
"\n",
"print(f\"Train shape: {X_train.shape}\")\n",
"print(f\"Validation shape: {X_val.shape}\")"
]
},
{
"cell_type": "markdown",
"metadata": {
"ExecuteTime": {
"end_time": "2020-06-07T17:47:46.311346Z",
"start_time": "2020-06-07T17:47:46.293688Z"
}
},
"source": [
"# 👾 Class Transformation uplift model\n",
"\n",
"`Class transformation` method is described here \n",
"\n",
"Class transormation method `may` be used in case of treatment unbalanced data. In this case one will get not an uplift score but some *ranking* score still useful for ranking objects."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"ExecuteTime": {
"end_time": "2021-02-19T20:21:03.204975Z",
"start_time": "2021-02-19T20:21:03.165305Z"
}
},
"outputs": [],
"source": [
"from sklift.models import ClassTransformation\n",
"from catboost import CatBoostClassifier\n",
"\n",
"estimator = CatBoostClassifier(verbose=100, \n",
" cat_features=['gender'],\n",
" random_state=42,\n",
" thread_count=1)\n",
"\n",
"ct_model = ClassTransformation(estimator=estimator)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"ExecuteTime": {
"end_time": "2021-02-19T20:37:38.852200Z",
"start_time": "2021-02-19T20:21:03.208181Z"
}
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/Users/macdrive/GoogleDrive/Проекты/Uplift/sklift-env/lib/python3.7/site-packages/ipykernel_launcher.py:4: UserWarning: It is recommended to use this approach on treatment balanced data. Current sample size is unbalanced.\n",
" after removing the cwd from sys.path.\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"Learning rate set to 0.143939\n",
"0:\tlearn: 0.6685632\ttotal: 1.03s\tremaining: 17m 6s\n",
"100:\tlearn: 0.5948982\ttotal: 1m 34s\tremaining: 14m\n",
"200:\tlearn: 0.5907078\ttotal: 3m 16s\tremaining: 13m 3s\n",
"300:\tlearn: 0.5869612\ttotal: 4m 51s\tremaining: 11m 16s\n",
"400:\tlearn: 0.5835421\ttotal: 6m 35s\tremaining: 9m 51s\n",
"500:\tlearn: 0.5801981\ttotal: 8m 31s\tremaining: 8m 29s\n",
"600:\tlearn: 0.5769677\ttotal: 10m 13s\tremaining: 6m 47s\n",
"700:\tlearn: 0.5737862\ttotal: 11m 44s\tremaining: 5m\n",
"800:\tlearn: 0.5706947\ttotal: 13m 37s\tremaining: 3m 23s\n",
"900:\tlearn: 0.5677125\ttotal: 15m 7s\tremaining: 1m 39s\n",
"999:\tlearn: 0.5648426\ttotal: 16m 29s\tremaining: 0us\n"
]
},
{
"data": {
"text/plain": [
"ClassTransformation(estimator=)"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ct_model.fit(\n",
" X=X_train, \n",
" y=y_train, \n",
" treatment=trmnt_train\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Save model"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"ExecuteTime": {
"end_time": "2021-02-19T20:37:38.925679Z",
"start_time": "2021-02-19T20:37:38.857315Z"
}
},
"outputs": [],
"source": [
"import dill\n",
"\n",
"with open(\"model.dill\", 'wb') as f:\n",
" dill.dump(ct_model, f)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Uplift prediction"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"ExecuteTime": {
"end_time": "2021-02-19T20:37:39.642947Z",
"start_time": "2021-02-19T20:37:38.928915Z"
}
},
"outputs": [],
"source": [
"uplift_ct = ct_model.predict(X_val)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 🚀🚀🚀 Uplift metrics"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 🚀 `uplift@k`\n",
"\n",
"- uplift at first k%\n",
"- usually falls between [0; 1] depending on k, model quality and data\n",
"\n",
"\n",
"### `uplift@k` = `target mean at k% in the treatment group` - `target mean at k% in the control group`\n",
"\n",
"___\n",
"\n",
"How to count `uplift@k`:\n",
"\n",
"1. sort by predicted uplift\n",
"2. select first k%\n",
"3. count target mean in the treatment group\n",
"4. count target mean in the control group\n",
"5. substract the mean in the control group from the mean in the treatment group\n",
"\n",
"---\n",
"\n",
"Code parameter options:\n",
"\n",
"- `strategy='overall'` - sort by uplift treatment and control together\n",
"- `strategy='by_group'` - sort by uplift treatment and control separately"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"ExecuteTime": {
"end_time": "2021-02-18T19:36:32.767618Z",
"start_time": "2021-02-18T19:36:32.618887Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"uplift@10%: 0.1467 (sort groups by uplift together)\n",
"uplift@10%: 0.1503 (sort groups by uplift separately)\n"
]
}
],
"source": [
"from sklift.metrics import uplift_at_k\n",
"\n",
"# k = 10%\n",
"k = 0.1 \n",
"\n",
"# strategy='overall' sort by uplift treatment and control together\n",
"uplift_overall = uplift_at_k(y_val, uplift_ct, trmnt_val, strategy='overall', k=k)\n",
"\n",
"# strategy='by_group' sort by uplift treatment and control separately\n",
"uplift_bygroup = uplift_at_k(y_val, uplift_ct, trmnt_val, strategy='by_group', k=k)\n",
"\n",
"\n",
"print(f\"uplift@{k * 100:.0f}%: {uplift_overall:.4f} (sort groups by uplift together)\")\n",
"print(f\"uplift@{k * 100:.0f}%: {uplift_bygroup:.4f} (sort groups by uplift separately)\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 🚀 `uplift_by_percentile` table\n",
"\n",
"Count metrics for each percentile in data in descending order by uplift prediction (by rows):\n",
"\n",
"- `n_treatment` - treatment group size in the one percentile\n",
"- `n_control` - control group size in the one percentile\n",
"- `response_rate_treatment` - target mean in the treatment group in the one percentile\n",
"- `response_rate_control` - target mean in the control group in the one percentile\n",
"- `uplift = response_rate_treatment - response_rate_control` in the one percentile\n",
"\n",
"___\n",
"\n",
"Code parameter options are:\n",
"\n",
"- `strategy='overall'` - sort by uplift treatment and control groups together\n",
"- `strategy='by_group'` - sort by uplift treatment and control groups separately\n",
"- `total=True` - show total metric on full data\n",
"- `std=True` - show metrics std by row "
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"ExecuteTime": {
"end_time": "2021-02-18T19:36:49.986630Z",
"start_time": "2021-02-18T19:36:49.766425Z"
},
"scrolled": false
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" n_treatment | \n",
" n_control | \n",
" response_rate_treatment | \n",
" response_rate_control | \n",
" uplift | \n",
" std_treatment | \n",
" std_control | \n",
" std_uplift | \n",
"
\n",
" \n",
" percentile | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" 0-10 | \n",
" 12715 | \n",
" 7896 | \n",
" 0.366339 | \n",
" 0.219605 | \n",
" 0.146734 | \n",
" 0.004273 | \n",
" 0.004659 | \n",
" 0.006321 | \n",
"
\n",
" \n",
" 10-20 | \n",
" 15560 | \n",
" 5051 | \n",
" 0.214267 | \n",
" 0.197783 | \n",
" 0.016485 | \n",
" 0.003289 | \n",
" 0.005605 | \n",
" 0.006499 | \n",
"
\n",
" \n",
" 20-30 | \n",
" 15683 | \n",
" 4928 | \n",
" 0.149525 | \n",
" 0.130682 | \n",
" 0.018843 | \n",
" 0.002848 | \n",
" 0.004801 | \n",
" 0.005582 | \n",
"
\n",
" \n",
" 30-40 | \n",
" 15675 | \n",
" 4936 | \n",
" 0.111388 | \n",
" 0.098663 | \n",
" 0.012725 | \n",
" 0.002513 | \n",
" 0.004245 | \n",
" 0.004933 | \n",
"
\n",
" \n",
" 40-50 | \n",
" 15798 | \n",
" 4813 | \n",
" 0.082795 | \n",
" 0.077914 | \n",
" 0.004881 | \n",
" 0.002192 | \n",
" 0.003864 | \n",
" 0.004442 | \n",
"
\n",
" \n",
" 50-60 | \n",
" 15776 | \n",
" 4835 | \n",
" 0.062500 | \n",
" 0.057911 | \n",
" 0.004589 | \n",
" 0.001927 | \n",
" 0.003359 | \n",
" 0.003873 | \n",
"
\n",
" \n",
" 60-70 | \n",
" 15768 | \n",
" 4843 | \n",
" 0.051560 | \n",
" 0.050176 | \n",
" 0.001385 | \n",
" 0.001761 | \n",
" 0.003137 | \n",
" 0.003597 | \n",
"
\n",
" \n",
" 70-80 | \n",
" 15793 | \n",
" 4818 | \n",
" 0.042171 | \n",
" 0.034869 | \n",
" 0.007301 | \n",
" 0.001599 | \n",
" 0.002643 | \n",
" 0.003089 | \n",
"
\n",
" \n",
" 80-90 | \n",
" 15884 | \n",
" 4727 | \n",
" 0.035193 | \n",
" 0.031521 | \n",
" 0.003672 | \n",
" 0.001462 | \n",
" 0.002541 | \n",
" 0.002932 | \n",
"
\n",
" \n",
" 90-100 | \n",
" 16116 | \n",
" 4494 | \n",
" 0.039030 | \n",
" 0.041611 | \n",
" -0.002582 | \n",
" 0.001526 | \n",
" 0.002979 | \n",
" 0.003347 | \n",
"
\n",
" \n",
" total | \n",
" 154768 | \n",
" 51341 | \n",
" 0.110126 | \n",
" 0.102569 | \n",
" 0.007557 | \n",
" 0.023390 | \n",
" 0.037832 | \n",
" 0.044615 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" n_treatment n_control response_rate_treatment \\\n",
"percentile \n",
"0-10 12715 7896 0.366339 \n",
"10-20 15560 5051 0.214267 \n",
"20-30 15683 4928 0.149525 \n",
"30-40 15675 4936 0.111388 \n",
"40-50 15798 4813 0.082795 \n",
"50-60 15776 4835 0.062500 \n",
"60-70 15768 4843 0.051560 \n",
"70-80 15793 4818 0.042171 \n",
"80-90 15884 4727 0.035193 \n",
"90-100 16116 4494 0.039030 \n",
"total 154768 51341 0.110126 \n",
"\n",
" response_rate_control uplift std_treatment std_control \\\n",
"percentile \n",
"0-10 0.219605 0.146734 0.004273 0.004659 \n",
"10-20 0.197783 0.016485 0.003289 0.005605 \n",
"20-30 0.130682 0.018843 0.002848 0.004801 \n",
"30-40 0.098663 0.012725 0.002513 0.004245 \n",
"40-50 0.077914 0.004881 0.002192 0.003864 \n",
"50-60 0.057911 0.004589 0.001927 0.003359 \n",
"60-70 0.050176 0.001385 0.001761 0.003137 \n",
"70-80 0.034869 0.007301 0.001599 0.002643 \n",
"80-90 0.031521 0.003672 0.001462 0.002541 \n",
"90-100 0.041611 -0.002582 0.001526 0.002979 \n",
"total 0.102569 0.007557 0.023390 0.037832 \n",
"\n",
" std_uplift \n",
"percentile \n",
"0-10 0.006321 \n",
"10-20 0.006499 \n",
"20-30 0.005582 \n",
"30-40 0.004933 \n",
"40-50 0.004442 \n",
"50-60 0.003873 \n",
"60-70 0.003597 \n",
"70-80 0.003089 \n",
"80-90 0.002932 \n",
"90-100 0.003347 \n",
"total 0.044615 "
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklift.metrics import uplift_by_percentile\n",
"\n",
"uplift_by_percentile(y_val, uplift_ct, trmnt_val, \n",
" strategy='overall', \n",
" total=True, std=True, bins=10)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 🚀 `weighted average uplift `\n",
"\n",
"- counts uplift on full data\n",
"- uses results from `uplift_by_percentile` table\n",
"- result depends on number of bins\n",
"\n",
"### `weighted average uplift` = `sum of uplift by percentile weighted on the treatment group size`\n"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"ExecuteTime": {
"end_time": "2021-02-18T19:36:55.281993Z",
"start_time": "2021-02-18T19:36:55.170863Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"average uplift on full data: 0.0189\n"
]
}
],
"source": [
"from sklift.metrics import weighted_average_uplift\n",
"\n",
"uplift_full_data = weighted_average_uplift(y_val, uplift_ct, trmnt_val, bins=10) \n",
"print(f\"average uplift on full data: {uplift_full_data:.4f}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 🚀 `uplift_by_percentile` plot\n",
"\n",
"- visualize results of `uplift_by_percentile` table\n",
"\n",
"Two ways to plot:\n",
"\n",
"- line plot `kind='line'`\n",
"- bar plot `kind='bar'`\n"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"ExecuteTime": {
"end_time": "2021-02-18T19:37:01.771296Z",
"start_time": "2021-02-18T19:37:00.777556Z"
}
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"