{
"cells": [
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": true,
"pycharm": {
"name": "#%%\n"
}
},
"outputs": [],
"source": [
"from typing import Any\n",
"import pandas as pd\n",
"from sklearn.model_selection import train_test_split\n",
"from sklift.datasets import fetch_hillstrom\n",
"from sklift.metrics import uplift_at_k\n",
"from sklift.viz import plot_uplift_preds\n",
"from sklift.models import SoloModel\n",
"from catboost import CatBoostClassifier\n",
"from category_encoders import CatBoostEncoder"
]
},
{
"cell_type": "code",
"execution_count": 2,
"outputs": [],
"source": [
"def get_data() -> tuple[Any, Any, Any]:\n",
"\t# получаем датасет\n",
"\tdataset = fetch_hillstrom(target_col='visit')\n",
"\tdataset, target, treatment = dataset['data'], dataset['target'], dataset['treatment']\n",
"\t# выбираем два сегмента\n",
"\tdataset = dataset[treatment != 'Mens E-Mail']\n",
"\ttarget = target[treatment != 'Mens E-Mail']\n",
"\ttreatment = treatment[treatment != 'Mens E-Mail'].map({\n",
"\t\t'Womens E-Mail': 1,\n",
"\t\t'No E-Mail': 0\n",
"\t})\n",
"\n",
"\treturn dataset, target, treatment"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "code",
"execution_count": 3,
"outputs": [],
"source": [
"data, target, treatment = get_data()"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "code",
"execution_count": 4,
"outputs": [
{
"data": {
"text/plain": " recency history_segment history mens womens zip_code newbie channel\n0 10 2) $100 - $200 142.44 1 0 Surburban 0 Phone\n1 6 3) $200 - $350 329.08 1 1 Rural 1 Web\n2 7 2) $100 - $200 180.65 0 1 Surburban 1 Web\n4 2 1) $0 - $100 45.34 1 0 Urban 0 Web\n5 6 2) $100 - $200 134.83 0 1 Surburban 0 Phone",
"text/html": "
\n\n
\n \n \n | \n recency | \n history_segment | \n history | \n mens | \n womens | \n zip_code | \n newbie | \n channel | \n
\n \n \n \n 0 | \n 10 | \n 2) $100 - $200 | \n 142.44 | \n 1 | \n 0 | \n Surburban | \n 0 | \n Phone | \n
\n \n 1 | \n 6 | \n 3) $200 - $350 | \n 329.08 | \n 1 | \n 1 | \n Rural | \n 1 | \n Web | \n
\n \n 2 | \n 7 | \n 2) $100 - $200 | \n 180.65 | \n 0 | \n 1 | \n Surburban | \n 1 | \n Web | \n
\n \n 4 | \n 2 | \n 1) $0 - $100 | \n 45.34 | \n 1 | \n 0 | \n Urban | \n 0 | \n Web | \n
\n \n 5 | \n 6 | \n 2) $100 - $200 | \n 134.83 | \n 0 | \n 1 | \n Surburban | \n 0 | \n Phone | \n
\n \n
\n
"
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.head()"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "code",
"execution_count": 5,
"outputs": [
{
"data": {
"text/plain": "0 0\n1 0\n2 0\n4 0\n5 1\nName: visit, dtype: int64"
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"target.head()"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "code",
"execution_count": 6,
"outputs": [
{
"data": {
"text/plain": "0 1\n1 0\n2 1\n4 1\n5 1\nName: segment, dtype: int64"
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"treatment.head()"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "code",
"execution_count": 23,
"outputs": [
{
"data": {
"text/plain": "visit 0 1\nsegment \n0 0.893833 0.106167\n1 0.848600 0.151400",
"text/html": "\n\n
\n \n \n visit | \n 0 | \n 1 | \n
\n \n segment | \n | \n | \n
\n \n \n \n 0 | \n 0.893833 | \n 0.106167 | \n
\n \n 1 | \n 0.848600 | \n 0.151400 | \n
\n \n
\n
"
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.crosstab(treatment, target, normalize='index')"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "code",
"execution_count": 50,
"outputs": [
{
"data": {
"text/plain": "1 50.261167\n0 49.738833\nName: newbie, dtype: float64"
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"res = data.newbie.value_counts(normalize=True) * 100\n",
"display(res)"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "code",
"execution_count": 54,
"outputs": [
{
"data": {
"text/plain": "Surburban 19275\nUrban 17098\nRural 6320\nName: zip_code, dtype: int64"
},
"execution_count": 54,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.zip_code.value_counts()"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "code",
"execution_count": 12,
"outputs": [],
"source": [
"X_train, X_val, y_train, y_val, trmnt_train, trmnt_val = train_test_split(\n",
" data, target, treatment, test_size=0.3, random_state=42\n",
")\n",
"\n",
"models_results = {\n",
" 'approach': [],\n",
" 'uplift@30%': []\n",
"}"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "markdown",
"source": [
"## Single model"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
}
},
{
"cell_type": "code",
"execution_count": 13,
"outputs": [
{
"data": {
"text/plain": "",
"image/png": "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JEmSJNVlw1YHMBrbbrttTp8+vdVhSFLbWbRo0R8zc3Kr42g12wlJGpjtRMV2QpIGNlQ70dGJpOnTp7Nw4cJWhyFJbSciftfqGNqB7YQkDcx2omI7IUkDG6qdcGibJEmSJEmS6mIiSZIkSZIkSXUxkSRJkiRJkqS6dPQcSZLGvyeffJJly5bx2GOPtTqUtjRp0iSmTp3KRhtt1OpQJKku3teby3ZCkuozUdunkbQTJpIktbVly5ax+eabM336dCKi1eG0lczkvvvuY9myZXR1dbU6HEmqi/f15rGdkKT6TcT2aaTthEPbJLW1xx57jG222WbC3MyHIyLYZpttJty3JpI6m/f15rGdkKT6TcT2aaTthIkkSW1vIt3Mh8v3RlIn8t7VPL7XklS/iXjPHMk1m0iSJEmSJElSXZwjSVJHmT9/bI83c+bQ2++77z723XdfAO6++2422GADJk+eDMCNN97IxhtvPOxzLliwgI033phXvepVw9pv+vTpLFy4kG233XbY55SkdtXb2zOmx+vqWv/xIoITTzyRz3/+8wCcfvrpPPLII/T0DL7vZZddxgtf+EJe8pKXDGvbSIz0eJttthmPPPLImMQgSRNdz4KesT3ejPUfb+nSpRx44IHccssta/fr6WGzzTbjwx/+8ID7nHfeeSxcuJAvf/nLnH322Tz72c/myCOP5Ne//jWHHXYYEcEll1zCDTfcwBFHHDEm12KPJEkawjbbbMPixYtZvHgxxx57LB/84AfXrG+88casXr162MdcsGABP//5zxsQrSSpHptssgmXXnopf/zjH+ve57LLLuO2224b9raRtBNDHU+SpMEce+yxHHnkkUDVlhx88MH84he/4K677uKb3/zmmJ3HRJIkDdNRRx3Fsccey1577cVHP/pRfvvb37L//vvz8pe/nNe85jX8+te/BmD+/Pnstdde7L777rzhDW/gnnvuYenSpZx99tmcccYZ7LbbbvzkJz9h5cqVvP3tb2ePPfZgjz324Gc/+xlQ9YZ605vexM4778zf/u3fkpmtvGxJGjc23HBD5syZwxlnnPGMbUuXLmWfffZhl112Yd999+X3v/89P//5z7niiiv4yEc+wm677cZvf/vbNfUH2jZjxgxOOOEEuru7OfPMM1m0aBGve93rePnLX85+++3HihUrAPja177GHnvswa677srb3/52Hn300QGPN1g709vbyytf+Ur+6q/+ilNOOaU5b54kqSVmzJjB8ccfz2677cZLX/pSbrzxxmfU6enp4fTTT+fKK6/ki1/8Il/96ld5/etfz8knn8xPfvITdttttwHbvuFyaJskjcCyZcv4+c9/zgYbbMC+++7L2WefzU477cQNN9zA3//933P11Vez9957c/311xMRfP3rX+dzn/scn//85zn22GPX6Z56xBFH8MEPfpC9996b3//+9+y3337cfvvt/NM//RN77703//iP/8j3vvc9zjnnnBZftSSNH8cddxy77LILH/3oR9cpf//738/s2bOZPXs25557Lh/4wAe47LLLeOtb38qBBx7IwQcfvE79V73qVQNue+KJJ1i4cCFPPvkkr3vd67j88suZPHkyF110EZ/4xCc499xzedvb3sZ73vMeAE455RTOOecc3v/+9z/jeIO1M8cffzzvfe97OfLII/nKV77S4HdMktRqjz76KIsXL+baa6/l3e9+9zpD4GodcMAB63zmWLBgAaeffjrf/e53xyQOE0mSNAKHHHIIG2ywAY888gg///nPOeSQQ9Zse/zxx4Eq2fSOd7yDFStW8MQTT9DV1TXgsX70ox+tM4ThoYce4pFHHuHaa6/l0ksvBeAtb3kLW221VQOvSJImluc+97kceeSRnHXWWWy66aZryq+77ro19953vetdz0g01esd73gHAHfccQe33HILb3zjGwF46qmnmDJlCgC33HILp5xyCg888ACPPPII++233zOOM1Q787Of/Yxvf/vba2I96aSTRhSrJKk9DPYEtb7yww8/HIDXvva1PPTQQzzwwAPNCm0dJpIkaQSe85znAPD000+z5ZZbsnjx4mfUef/738+JJ57IW9/6VhYsWDDoJK5PP/00119/PZMmTWpgxJKk/k444QRe9rKXcfTRR4/5sfvaicxk55135rrrrntGnaOOOorLLruMXXfdlfPOO48FCxY8o85Q7QxMzEdVS9J4tc0227Bq1ap1yu6///41X0j3v+e3qg1wjiRJGoXnPve5dHV18V//9V9A9YHhl7/8JQAPPvggO+ywAwDz5s1bs8/mm2/Oww8/vGb9TW96E1/60pfWrPd9WHjta1+7ZlK873//+89oVCRJo7P11ltz6KGHrjN0+FWvehUXXnghABdccAGvec1rgGfeu2sNte1F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\n"
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"sm = SoloModel(CatBoostClassifier(iterations=1000, task_type=\"GPU\", random_state=42, silent=True))\n",
"sm = sm.fit(X_train, y_train, trmnt_train, estimator_fit_params={'cat_features': ['history_segment', 'zip_code', 'channel']})\n",
"\n",
"uplift_sm = sm.predict(X_val)\n",
"\n",
"sm_score = uplift_at_k(y_true=y_val, uplift=uplift_sm, treatment=trmnt_val, strategy='by_group', k=0.3)\n",
"\n",
"models_results['approach'].append('SoloModel')\n",
"models_results['uplift@30%'].append(sm_score)\n",
"\n",
"# Получим условные вероятности выполнения целевого действия при взаимодействии для каждого объекта\n",
"sm_trmnt_preds = sm.trmnt_preds_\n",
"# И условные вероятности выполнения целевого действия без взаимодействия для каждого объекта\n",
"sm_ctrl_preds = sm.ctrl_preds_\n",
"\n",
"# Отрисуем распределения вероятностей и их разность (uplift)\n",
"plot_uplift_preds(trmnt_preds=sm_trmnt_preds, ctrl_preds=sm_ctrl_preds);"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "code",
"execution_count": 14,
"outputs": [
{
"data": {
"text/plain": " feature_name feature_score\n0 newbie 16.159375\n1 history 15.380477\n2 recency 15.057106\n3 womens 12.918455\n4 treatment 12.083391\n5 channel 9.437116\n6 zip_code 9.357430\n7 mens 6.807001\n8 history_segment 2.799648",
"text/html": "\n\n
\n \n \n | \n feature_name | \n feature_score | \n
\n \n \n \n 0 | \n newbie | \n 16.159375 | \n
\n \n 1 | \n history | \n 15.380477 | \n
\n \n 2 | \n recency | \n 15.057106 | \n
\n \n 3 | \n womens | \n 12.918455 | \n
\n \n 4 | \n treatment | \n 12.083391 | \n
\n \n 5 | \n channel | \n 9.437116 | \n
\n \n 6 | \n zip_code | \n 9.357430 | \n
\n \n 7 | \n mens | \n 6.807001 | \n
\n \n 8 | \n history_segment | \n 2.799648 | \n
\n \n
\n
"
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sm_fi = pd.DataFrame({\n",
" 'feature_name': sm.estimator.feature_names_,\n",
" 'feature_score': sm.estimator.feature_importances_\n",
"}).sort_values('feature_score', ascending=False).reset_index(drop=True)\n",
"\n",
"sm_fi"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "markdown",
"source": [
"## Class transform"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
}
},
{
"cell_type": "code",
"execution_count": 15,
"outputs": [],
"source": [
"from sklift.models import ClassTransformation\n",
"\n",
"\n",
"ct = ClassTransformation(CatBoostClassifier(iterations=1000, task_type='GPU', random_state=42, silent=True))\n",
"ct = ct.fit(X_train, y_train, trmnt_train, estimator_fit_params={'cat_features': ['history_segment', 'zip_code', 'channel']})\n",
"\n",
"uplift_ct = ct.predict(X_val)\n",
"\n",
"ct_score = uplift_at_k(y_true=y_val, uplift=uplift_ct, treatment=trmnt_val, strategy='by_group', k=0.3)\n",
"\n",
"models_results['approach'].append('ClassTransformation')\n",
"models_results['uplift@30%'].append(ct_score)"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "markdown",
"source": [
"## Two independent models"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
}
},
{
"cell_type": "code",
"execution_count": 16,
"outputs": [
{
"data": {
"text/plain": "",
"image/png": "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1bHRRhvx9a9/nd/97ne117n44ov55S9/OeJlo6knhtueJEntHH300Rx++OFAVZcceOCB/OQnP+GOO+7gy1/+8rjtx0SSJI3QEUccwdFHH81uu+3Ghz/8YW699VZe97rXscsuu/Dyl7+cX/3qVwAsXLiQ3XbbjZ133plXv/rV3H333SxbtowzzjiDk08+mZ122okf/OAHrFy5kje/+c3suuuu7LrrrvzoRz8CqtZQr33ta9lhhx14xzveQfUwGknSWK2//vosWLCAk08++UnLli1bxl577cWLXvQi9t57b37zm99w9dVXc+mll/KhD32InXbaiVtvvXV1+aGWzZ07l2OPPZY5c+ZwyimncMMNN/DKV76SXXbZhX322Yc777wTgM9//vPsuuuu7Ljjjrz5zW/m4YcfHnJ77eqZpUuX8tKXvpS//Mu/5IQTTujOyZMk9cTcuXN53/vex0477cQLX/hCrr/++ieV6e/v56STTuKyyy7jM5/5DKeffjqvetWrOP744/nBD37ATjvtNGTdN1J2bZOkUVi+fDlXX3016623HnvvvTdnnHEG22+/Pddddx3vfve7ufLKK9lzzz259tpriQi+8IUv8KlPfYpPf/rTHH300Ws1Tz3ssMN4//vfz5577slvfvMb9tlnH26++Wb+/u//nj333JO/+7u/41vf+hZnnXVWj49akiaPY445hhe96EV8+MMfXmv+e97zHubPn8/8+fM5++yzee9738vFF1/M/vvvz3777ceBBx64Vvk99thjyGWPPvooixcv5rHHHuOVr3wll1xyCdOnT+eCCy7gox/9KGeffTZvetObeOc73wnACSecwFlnncV73vOeJ22vXT3zvve9j3e9610cfvjhfO5zn+vwGZMk9drDDz/MjTfeyFVXXcXb3/72tbrAtdp3333XuudYtGgRJ510Et/85jfHJQ4TSZI0CgcddBDrrbceDz30EFdffTUHHXTQ6mV//OMfgSrZdMghh3DnnXfy6KOP0tfXN+S2vve9763VheH3v/89Dz30EFdddRVf//rXAXjDG97AFlts0cEjkqSpZdNNN+Xwww/n1FNP5alPferq+ddcc83qa+/b3va2JyWa6jrkkEMAuOWWW7jpppt4zWteA8Cf/vQnZsyYAcBNN93ECSecwP33389DDz3EPvvs86TtDFfP/OhHP+JrX/va6lg/8pGPjCpWSVIztHuC2sD8t7zlLQC84hWv4Pe//z33339/t0Jbi4kkSRqFpz/96QA88cQTbL755tx4441PKvOe97yH4447jv33359Fixa1HcT1iSee4Nprr2XatGkdjFiSNNixxx7Li1/8Yo488shx3/ZAPZGZ7LDDDlxzzTVPKnPEEUdw8cUXs+OOO/KlL32JRYsWPanMcPUMTM1HVUvSZLXVVltx3333rTXv3nvvXf2F9OBrfq/qAMdIkqQx2HTTTenr6+OrX/0qUN0w/PSnPwXggQceYNtttwXgnHPOWb3OJptswoMPPrj6/Wtf+1o++9nPrn4/cLPwile8YvWgeN/+9refVKlIksZmyy235OCDD16r6/Aee+zB+eefD8B5553Hy1/+cuDJ1+5Wwy173vOex8qVK1cnkh577DF+8YtfAPDggw8yY8YMHnvsMc4777whtzdcPfOyl71srVglSRPbxhtvzIwZM7jyyiuBKon0ne98hz333BOACy64AIAf/vCHbLbZZmy22Wa1tjtcPTUatkiSNKHMm9frCJ7svPPO413vehcf//jHeeyxxzj00EPZcccd6e/v56CDDmKLLbZgr732YunSpQDMmzePAw88kEsuuYTPfvaznHrqqavH6nj88cd5xStewRlnnMGJJ57IW97yFnbYYQf22GMPZs2a1eMjlaTx19fX39P9f+ADH+C0005b/f6zn/0sRx55JP/yL//C9OnT+eIXvwjAoYceyjvf+U5OPfVULrroIp797GevXmfwslYbbrghF110Ee9973t54IEHePzxxzn22GPZYYcd+NjHPsZuu+3G9OnT2W233Vb/kz94e+3qmVNOOYXDDjuMT37ykxxwwAFdOFuSNHX0z+3vyX7PPfdcjjnmGI477jgATjzxxNV1zrRp09h555157LHHOPvss2tv80UvehHrrbceO+64I0cccQTvf//7xxRjTOSnAM2ZMycXL17c6zB6YuHCNdNNvLGWxsvNN9/MX/zFX/Q6jEYb6hxFxA2ZOadHITXGZKonli7tXz3d6xtvaSy8rnef9UR7k6memAj6F/Wvme7RTbrUTtPrp7lz53LSSScxZ874X7pHWk/YtU2SJEmSJEm12LVNktQzEbEMeBD4E/B4Zs6JiC2BC4DZwDLg4My8L6rRBE8B9gUeBo7IzB/3Im5JkiSpm4Z6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\n"
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from sklift.models import TwoModels\n",
"\n",
"\n",
"tm = TwoModels(\n",
" estimator_trmnt=CatBoostClassifier(iterations=1000, task_type='GPU', random_state=42, silent=True),\n",
" estimator_ctrl=CatBoostClassifier(iterations=1000, task_type='GPU', random_state=42, silent=True),\n",
" method='vanilla'\n",
")\n",
"tm = tm.fit(\n",
" X_train, y_train, trmnt_train,\n",
" estimator_trmnt_fit_params={'cat_features': ['history_segment', 'zip_code', 'channel']},\n",
" estimator_ctrl_fit_params={'cat_features': ['history_segment', 'zip_code', 'channel']}\n",
")\n",
"\n",
"uplift_tm = tm.predict(X_val)\n",
"\n",
"tm_score = uplift_at_k(y_true=y_val, uplift=uplift_tm, treatment=trmnt_val, strategy='by_group', k=0.3)\n",
"\n",
"models_results['approach'].append('TwoModels')\n",
"models_results['uplift@30%'].append(tm_score)\n",
"\n",
"plot_uplift_preds(trmnt_preds=tm.trmnt_preds_, ctrl_preds=tm.ctrl_preds_);"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "markdown",
"source": [
"## Two dependend models"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
}
},
{
"cell_type": "code",
"execution_count": 36,
"outputs": [
{
"data": {
"text/plain": "",
"image/png": "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aNEivvnNb3L22Wfz0pe+lOnTp/OHP/yBQw89lIjgkksu4dprr+Xwww9f53rY40mS+tkWW2zBTTfdxE033cQxxxzDRz/60dX7o0aNYtWqVWt8zQULFvDb3/62htJKkvpi/fXX58c//jF//vOf+3zOpZdeyu23377Gx9amnejpeoNZZv4lM7fIzEcb0h7OzL0zc2Jmvr0jiJSV4zLzlZn5D5m5qOGcWZn5qvL6bkP6oszcoZzzwTJnlCQNG8cccwzTp08HqrbkoIMO4sYbb2Tp0qV8//vf75d7GHiSpCY44ogjOOaYY9htt9341Kc+xd13382UKVPYZZddePOb38wf/vAHAObOnctuu+3GTjvtxNvf/nYefPBB7r33Xs4++2xOO+00Jk2axK9+9SuWL1/Oe97zHl7/+tfz+te/nt/85jdA1dtqn332Yfvtt+df/uVf8P2zJPWPkSNHMnPmTE477bQXHbv33nvZa6+9eN3rXsfee+/NH//4R377298yZ84cPvnJTzJp0iTuvvvu1fm7Orbnnnty/PHHM3nyZE4//XRuuOEG3vrWt7LLLruw7777cv/91SJu3/72t3n961/PjjvuyHve8x6efPLJLq/XXTuzZMkS3vCGN/AP//APfP7zn2/OL0+S1BJ77rknH/nIR5g0aRI77LAD11133YvytLW18ZWvfIV58+bx9a9/nbPOOou3ve1tnHDCCfzqV79i0qRJXbZ9a8KhdpLUJO3t7fz2t79lxIgR7L333px99tlMnDiRa6+9lmOPPZarrrqKPfbYg4ULFxIRfOc73+HLX/4yX/3qVznmmGNe0F328MMP56Mf/Sh77LEHf/zjH9l333254447+MIXvsAee+zBv/3bv/Gzn/2Mc889t8W1lqSh47jjjuN1r3sdn/rUp16Q/qEPfYgZM2YwY8YMZs2axYc//GEuvfRSDjjgAN71rndx0EEHvSD/G9/4xi6PPfPMMyxatIhnn32Wt771rVx22WWMGTOGiy66iM997nPMmjWLd7/73Rx99NEAfP7zn+fcc8/lQx/60Iuu110785GPfIQPfOADTJ8+nTPPPLPm35gkqdWefPJJbrrpJq6++mr++Z//+QVD8hrtv//+L/jMsWDBAr7yla/w05/+dJ3LYOBJkprk4IMPZsSIETzxxBP89re/5eCDD1597Omnnwaq4NR73/te7r//fp555hkmTJjQ5bV+8YtfvGBIxWOPPcYTTzzB1VdfzY9//GMA3vnOdzJ69OgaayRJw8smm2zC9OnTOeOMM9hwww1Xp19zzTWrn73vf//7XxSY6qv3vve9ANx5553ceuutvOMd7wDgueeeY+uttwbg1ltv5fOf/zyPPPIITzzxBPvuu++LrtNTO/Ob3/yGH/3oR6vL+ulPf3qtyipJGhi6W2GuI/2www4D4C1veQuPPfYYjzzySLOKtpqBJ0lqkpe97GUA/PWvf2WzzTbjpptuelGeD33oQ3zsYx/jgAMOYMGCBd1OWvvXv/6VhQsXssEGG9RYYklSZ8cffzw777wzRx55ZL9fu6OdyEy23357rrnmmhflOeKII7j00kvZcccdOe+881iwYMGL8vTUzsDwXPpbkoaqLbbYgpUrV74gbcWKFau/wO78zG9FG+AcT5LUZJtssgkTJkzghz/8IVB9wPj9738PwKOPPsrYsWMBmD179upzNt54Yx5//PHV+/vssw/f+MY3Vu93fLh4y1vesnoSwMsvv/xFjZAkad1svvnmHHLIIS8YyvzGN76RCy+8EIALLriAN7/5zcCLn92Nejr2mte8huXLl68OPD377LPcdtttADz++ONsvfXWPPvss1xwwQVdXq+nduZNb3rTC8oqSRrcNtpoI7beemuuuuoqoAo6/fd//zd77LEHABdddBEAv/71r9l0003ZdNNN+3TdntqpNWWPJ0lD3tSprS7Bi11wwQV84AMf4OSTT+bZZ5/l0EMPZccdd6StrY2DDz6Y0aNHs9dee7FkyRIApk6dykEHHcRll13GN77xDc4444zVc42sWrWKt7zlLZx99tmceOKJHHbYYWy//fa88Y1vZNttt21xTSWp/02Y0NbS+3/84x/nm9/85ur9b3zjGxx55JH853/+J2PGjOG7360WTTv00EM5+uijOeOMM7jkkkt45StfufqczscajRo1iksuuYQPf/jDPProo6xatYrjjz+e7bffnpNOOonddtuNMWPGsNtuu63+UND5et21M6effjqHH344X/rSl5g2bVoTfluSNHy07dnWkvuef/75HHfccXzsYx8D4MQTT1zd5mywwQbstNNOPPvss8yaNavP13zd617HiBEj2HHHHTniiCP46Ec/utbli+G24tHkyZNz0aJFvWfswty5z28PxA+y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\n"
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"tm_ctrl = TwoModels(\n",
" estimator_trmnt=CatBoostClassifier(iterations=1000, task_type='GPU', random_state=42, silent=True),\n",
" estimator_ctrl=CatBoostClassifier(iterations=1000, task_type='GPU', random_state=42, silent=True),\n",
" method='ddr_control'\n",
")\n",
"tm_ctrl = tm_ctrl.fit(\n",
" X_train, y_train, trmnt_train,\n",
" estimator_trmnt_fit_params={'cat_features': ['gender']},\n",
" estimator_ctrl_fit_params={'cat_features': ['gender']}\n",
")\n",
"\n",
"uplift_tm_ctrl = tm_ctrl.predict(X_val)\n",
"\n",
"tm_ctrl_score = uplift_at_k(y_true=y_val, uplift=uplift_tm_ctrl, treatment=trmnt_val, strategy='by_group', k=0.3)\n",
"\n",
"models_results['approach'].append('TwoModels_ddr_control')\n",
"models_results['uplift@30%'].append(tm_ctrl_score)\n",
"\n",
"plot_uplift_preds(trmnt_preds=tm_ctrl.trmnt_preds_, ctrl_preds=tm_ctrl.ctrl_preds_);"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "code",
"execution_count": 47,
"outputs": [
{
"data": {
"text/plain": " 0 1 2 3 4 5 6 \\\n0 0.116088 0.269822 0.049340 0.038516 0.143292 0.047044 0.018165 \n1 0.045442 0.041342 -0.018277 0.012866 0.028861 0.007020 -0.001542 \n\n 7 8 9 ... 206099 206100 206101 206102 \\\n0 0.086771 0.137409 0.029504 ... 0.191889 0.044686 0.069574 0.170429 \n1 0.047911 -0.013122 -0.004837 ... 0.076940 -0.005309 0.033985 -0.097014 \n\n 206103 206104 206105 206106 206107 206108 \n0 0.384708 0.022230 0.020183 0.043997 0.283808 0.053526 \n1 -0.093607 0.002797 0.000479 0.014596 -0.098411 0.024334 \n\n[2 rows x 206109 columns]",
"text/html": "\n\n
\n \n \n | \n 0 | \n 1 | \n 2 | \n 3 | \n 4 | \n 5 | \n 6 | \n 7 | \n 8 | \n 9 | \n ... | \n 206099 | \n 206100 | \n 206101 | \n 206102 | \n 206103 | \n 206104 | \n 206105 | \n 206106 | \n 206107 | \n 206108 | \n
\n \n \n \n 0 | \n 0.116088 | \n 0.269822 | \n 0.049340 | \n 0.038516 | \n 0.143292 | \n 0.047044 | \n 0.018165 | \n 0.086771 | \n 0.137409 | \n 0.029504 | \n ... | \n 0.191889 | \n 0.044686 | \n 0.069574 | \n 0.170429 | \n 0.384708 | \n 0.022230 | \n 0.020183 | \n 0.043997 | \n 0.283808 | \n 0.053526 | \n
\n \n 1 | \n 0.045442 | \n 0.041342 | \n -0.018277 | \n 0.012866 | \n 0.028861 | \n 0.007020 | \n -0.001542 | \n 0.047911 | \n -0.013122 | \n -0.004837 | \n ... | \n 0.076940 | \n -0.005309 | \n 0.033985 | \n -0.097014 | \n -0.093607 | \n 0.002797 | \n 0.000479 | \n 0.014596 | \n -0.098411 | \n 0.024334 | \n
\n \n
\n
2 rows × 206109 columns
\n
"
},
"execution_count": 47,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.DataFrame([tm_ctrl.trmnt_preds_, uplift_tm_ctrl])"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "markdown",
"source": [
"## Results"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%% md\n"
}
}
},
{
"cell_type": "code",
"execution_count": 37,
"outputs": [
{
"data": {
"text/plain": " approach uplift@30%\n3 ClassTransformation 0.031702\n4 TwoModels 0.016004\n1 SoloModel 0.013953\n2 SoloModel 0.013411\n5 TwoModels_ddr_control 0.011537\n0 SoloModel 0.006042",
"text/html": "\n\n
\n \n \n | \n approach | \n uplift@30% | \n
\n \n \n \n 3 | \n ClassTransformation | \n 0.031702 | \n
\n \n 4 | \n TwoModels | \n 0.016004 | \n
\n \n 1 | \n SoloModel | \n 0.013953 | \n
\n \n 2 | \n SoloModel | \n 0.013411 | \n
\n \n 5 | \n TwoModels_ddr_control | \n 0.011537 | \n
\n \n 0 | \n SoloModel | \n 0.006042 | \n
\n \n
\n
"
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.DataFrame(data=models_results).sort_values('uplift@30%', ascending=False)"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n"
}
}
},
{
"cell_type": "code",
"execution_count": 39,
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\HardWorkingStation\\PyProjects\\uplift_lab\\venv\\lib\\site-packages\\numpy\\core\\fromnumeric.py:3156: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray.\n",
" return asarray(a).ndim\n"
]
},
{
"data": {
"text/plain": "