diff --git a/alternative/category_mix_uplift/analysis.ipynb b/alternative/category_mix_uplift/analysis.ipynb index 56e6d71..18b2dd0 100644 --- a/alternative/category_mix_uplift/analysis.ipynb +++ b/alternative/category_mix_uplift/analysis.ipynb @@ -13,8 +13,15 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, + "execution_count": 1, + "metadata": { + "execution": { + "iopub.execute_input": "2025-12-12T19:34:48.794887Z", + "iopub.status.busy": "2025-12-12T19:34:48.794342Z", + "iopub.status.idle": "2025-12-12T19:34:55.568140Z", + "shell.execute_reply": "2025-12-12T19:34:55.565812Z" + } + }, "outputs": [], "source": [ "import sqlite3\n", @@ -30,6 +37,7 @@ "from sklearn.pipeline import Pipeline\n", "from sklearn.linear_model import LogisticRegression\n", "from sklearn.metrics import roc_auc_score\n", + "from sklearn.impute import SimpleImputer\n", "\n", "sns.set_theme(style=\"whitegrid\")\n", "plt.rcParams[\"figure.figsize\"] = (10, 5)\n", @@ -48,9 +56,214 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 2, + "metadata": { + "execution": { + "iopub.execute_input": "2025-12-12T19:34:55.575403Z", + "iopub.status.busy": "2025-12-12T19:34:55.574914Z", + "iopub.status.idle": "2025-12-12T19:34:58.188645Z", + "shell.execute_reply": "2025-12-12T19:34:58.187063Z" + } + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
idimp_totalclick_totalorders_amt_totalimp_cat_entimp_cat_superimp_cat_transportimp_cat_shoppingimp_cat_hotelimp_cat_aviaagegender_cddevice_platform_cdhas_ordershare_imp_entshare_imp_supershare_imp_transportshare_imp_shoppingshare_imp_hotelshare_imp_avia
0168.017.0013.017.010.014.012258.0MAndroid00.1911760.2500000.1470590.2058820.1764710.029412
12116.023.0314.014.025.015.0341454.0MAndroid10.1206900.1206900.2155170.1293100.2931030.120690
23293.037.0246.031.084.071.0253670.0FAndroid10.1569970.1058020.2866890.2423210.0853240.122867
3457.015.009.011.06.011.061443.0FAndroid00.1578950.1929820.1052630.1929820.1052630.245614
4543.016.013.08.06.08.071146.0MAndroid10.0697670.1860470.1395350.1860470.1627910.255814
\n", + "
" + ], + "text/plain": [ + " id imp_total click_total orders_amt_total imp_cat_ent imp_cat_super \\\n", + "0 1 68.0 17.0 0 13.0 17.0 \n", + "1 2 116.0 23.0 3 14.0 14.0 \n", + "2 3 293.0 37.0 2 46.0 31.0 \n", + "3 4 57.0 15.0 0 9.0 11.0 \n", + "4 5 43.0 16.0 1 3.0 8.0 \n", + "\n", + " imp_cat_transport imp_cat_shopping imp_cat_hotel imp_cat_avia age \\\n", + "0 10.0 14.0 12 2 58.0 \n", + "1 25.0 15.0 34 14 54.0 \n", + "2 84.0 71.0 25 36 70.0 \n", + "3 6.0 11.0 6 14 43.0 \n", + "4 6.0 8.0 7 11 46.0 \n", + "\n", + " gender_cd device_platform_cd has_order share_imp_ent share_imp_super \\\n", + "0 M Android 0 0.191176 0.250000 \n", + "1 M Android 1 0.120690 0.120690 \n", + "2 F Android 1 0.156997 0.105802 \n", + "3 F Android 0 0.157895 0.192982 \n", + "4 M Android 1 0.069767 0.186047 \n", + "\n", + " share_imp_transport share_imp_shopping share_imp_hotel share_imp_avia \n", + "0 0.147059 0.205882 0.176471 0.029412 \n", + "1 0.215517 0.129310 0.293103 0.120690 \n", + "2 0.286689 0.242321 0.085324 0.122867 \n", + "3 0.105263 0.192982 0.105263 0.245614 \n", + "4 0.139535 0.186047 0.162791 0.255814 " + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "cats = [\"ent\", \"super\", \"transport\", \"shopping\", \"hotel\", \"avia\"]\n", "for cols, name in [\n", @@ -65,22 +278,23 @@ "df[\"imp_total\"] = df[\"active_imp_total\"] + df[\"passive_imp_total\"]\n", "df[\"click_total\"] = df[\"active_click_total\"] + df[\"passive_click_total\"]\n", "\n", - "agg_dict = {\n", - " \"imp_total\": \"sum\",\n", - " \"click_total\": \"sum\",\n", - " \"orders_amt_total\": \"sum\",\n", - " \"age\": \"median\",\n", - " \"gender_cd\": lambda s: s.mode().iat[0],\n", - " \"device_platform_cd\": lambda s: s.mode().iat[0],\n", - "}\n", + "cat_cols = []\n", "for c in cats:\n", - " agg_dict[f\"active_imp_{c}\"] = (f\"active_imp_{c}\", \"sum\")\n", - " agg_dict[f\"passive_imp_{c}\"] = (f\"passive_imp_{c}\", \"sum\")\n", + " df[f\"imp_cat_{c}\"] = df[f\"active_imp_{c}\"] + df[f\"passive_imp_{c}\"]\n", + " cat_cols.append(f\"imp_cat_{c}\")\n", + "\n", + "client = df.groupby(\"id\").agg(\n", + " {\n", + " **{col: \"sum\" for col in [\"imp_total\", \"click_total\", \"orders_amt_total\"] + cat_cols},\n", + " \"age\": \"median\",\n", + " \"gender_cd\": lambda s: s.mode().iat[0],\n", + " \"device_platform_cd\": lambda s: s.mode().iat[0],\n", + " }\n", + ").reset_index()\n", "\n", - "client = df.groupby(\"id\").agg(agg_dict).reset_index()\n", "client[\"has_order\"] = (client[\"orders_amt_total\"] > 0).astype(int)\n", "for c in cats:\n", - " client[f\"share_imp_{c}\"] = eda.safe_divide(client[f\"active_imp_{c}\"] + client[f\"passive_imp_{c}\"], client[\"imp_total\"])\n", + " client[f\"share_imp_{c}\"] = eda.safe_divide(client[f\"imp_cat_{c}\"], client[\"imp_total\"])\n", "\n", "client.head()\n" ] @@ -94,9 +308,121 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 3, + "metadata": { + "execution": { + "iopub.execute_input": "2025-12-12T19:34:58.290489Z", + "iopub.status.busy": "2025-12-12T19:34:58.290200Z", + "iopub.status.idle": "2025-12-12T19:34:58.652384Z", + "shell.execute_reply": "2025-12-12T19:34:58.650453Z" + } + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/tmp/ipykernel_1067833/2853593271.py:2: FutureWarning: The default of observed=False is deprecated and will be changed to True in a future version of pandas. Pass observed=False to retain current behavior or observed=True to adopt the future default and silence this warning.\n", + " rate = client.groupby(bins)[\"has_order\"].mean().reset_index()\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABKAAAAGACAYAAACazRotAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAA0GtJREFUeJzs3Xl4TNcfBvB3ZjKTfbKQhGyySVCCWGNL7EXtS1Gqam9qrbaorfZS1dqK0mopSu1aWlr79mvRWmpLImQhIpF1MpnJzP39EbkyEpF9It7P83hi7j33zrnJme2dc79XIgiCACIiIiIiIiIiolIiNXYHiIiIiIiIiIioYmMARUREREREREREpYoBFBERERERERERlSoGUEREREREREREVKoYQBERERERERERUaliAEVERERERERERKWKARQREREREREREZUqBlBERERERERERFSqGEAREREREREREVGpYgBFRERERERERESligEUERERERERERGVKhNjd4CIiKgwDh06hPHjx+e5rnr16jhw4EAZ94iIqPRcvHgRp0+fxpAhQ6BUKo3dHSIioiJjAEVERC+l0aNHw8vLS7y9Zs0aI/aGiKh0XLp0CStXrkTPnj0ZQBER0UuNARQREb2UmjVrhiZNmoi3f/75Zzx+/NiIPSIiIiIioudhDSgiInqpaLVaAIBUWrCXsMjISIwbNw6NGzdG3bp10a9fPxw7dizPtlOmTIGfn1+ufytWrDBod+jQIfTq1Qv169c3aLdhw4Z8+7Jr1y74+fkhKipKXHb79m00atQIo0aNQmZmpkH7wYMH59mfXbt2GbQZPHiwwXaXL18W2z5r79696NWrF/z9/dG4cWNMnDgR9+/fz3W/b7zxRq5tN2zYYND/Nm3a5Nm/7H9t2rQRt1WpVFi0aBGCgoJQu3ZtdOzYERs2bIAgCAb3kXP7mjVromXLlpgxYwaSk5Pz/d3mPL4+ffqgbt26aNSoEd566y2cOnUq321WrFiBzp07o379+ggICEC/fv1w5MgRgzZ///03xo0bh+DgYNSuXRtBQUFYsGAB1Gq1QbspU6YYHHd2n2rUqIF169aJy27cuIEpU6agbdu2qFOnDpo3b46pU6fmClG3bNmCbt26oUGDBqhXrx66deuGHTt25DqGs2fPYuDAgahXrx4aNmyIMWPGICwsLNdx+vn5ITAw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b6HVauHi4oLRo0dj5MiRJXUILx2NVoedR0Ox/2Q40tK1sDSX443mnuja0gt37ydDLwABfo7oGeyNutUdCjW9joiIiIiIiIgIKGcBFAB4e3tj48aN+bbZtGnTC/eTV5tRo0Zh1KhRRe1ahaPWZGLn0VBs+/2muCwtXYufjtwCAEwcEACFXAaPqiwsTkRERERERERFx/OoXmEyqRT7T4bnue7A6TvwdLZh+ERERERERERExcYA6hWWptYiLV2b97p0LVTqvNcRERERERERERUGA6hXmKWZHJbPuYqdpbkcFma8wh0RERERERERFR8DqFeYTq9Ht5Zeea7r1tILOr2+jHtERERERERERBVRuStCTmXHTGGCPm2qAwD25bgKXreWXujTpjoUcpmRe0hEREREREREFQEDqFecQi5Dr9Y+6NvWF6mqDFhZmEKn1zN8IiIiIiIiIqISw1PwCGYKE2g1asREhkOrUcNMwVySiIiIiIiIiEoOAygSqdVqY3eBiIiIiIiIiCogBlBERERERERERFSqJIIgCMbuxMvs4sWLEAQBCoXC2F0pFkEQoNVqIZfLIZFIjN0deklw3FBRcNxQYXHMUFFw3FBRcNxQUXDcUFFUlHGj0WggkUgQEBDwwrYs9lNML/NAyUkikbz0IRqVPY4bKgqOGyosjhkqCo4bKgqOGyoKjhsqiooybiQSSYFzEc6AIiIiIiIiIiKiUsUaUEREREREREREVKoYQBERERERERERUaliAEVERERERERERKWKARQREREREREREZUqBlBERERERERERFSqGEAREREREREREVGpYgBFRERERERERESligEUERERERERERGVKgZQRERERERERERUqhhAERERERERERFRqWIARUREREREREREpYoBFBERERERERERlSoGUPRSyczMNHYX6CWl1+uN3QUiqiCuXbuGhIQEY3eDXjIcN1QUHDdUFHfu3IFOpzN2N4hyYQBFL42PP/4YP/30EwRBMHZX6CVz7do1fPHFF4iNjTV2V6icO3LkCM6ePQsAfK6hPH388cfo3bs3fv/9d2RkZBi7O/SS4LihouC4oaKYOnUqOnXqJL6fIcoWHx+P/v3749SpU0brg0TgO2wq55KSktCtWzfExsbC3NwcX375JYKCgozdLXpJ7NixAzNmzIBCocDo0aPx7rvvwszMzNjd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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "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", + "
share_imp_enthas_order
0(-0.001, 0.0508]0.440191
1(0.0508, 0.0833]0.517177
2(0.0833, 0.109]0.534192
3(0.109, 0.135]0.555661
4(0.135, 0.161]0.590513
5(0.161, 0.192]0.602649
6(0.192, 0.241]0.609542
7(0.241, 0.6]0.670192
\n", + "
" + ], + "text/plain": [ + " share_imp_ent has_order\n", + "0 (-0.001, 0.0508] 0.440191\n", + "1 (0.0508, 0.0833] 0.517177\n", + "2 (0.0833, 0.109] 0.534192\n", + "3 (0.109, 0.135] 0.555661\n", + "4 (0.135, 0.161] 0.590513\n", + "5 (0.161, 0.192] 0.602649\n", + "6 (0.192, 0.241] 0.609542\n", + "7 (0.241, 0.6] 0.670192" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "bins = pd.qcut(client[\"share_imp_ent\"], 8, duplicates=\"drop\")\n", "rate = client.groupby(bins)[\"has_order\"].mean().reset_index()\n", @@ -120,9 +446,38 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "execution_count": 4, + "metadata": { + "execution": { + "iopub.execute_input": "2025-12-12T19:34:58.656262Z", + "iopub.status.busy": "2025-12-12T19:34:58.655938Z", + "iopub.status.idle": "2025-12-12T19:34:58.792732Z", + "shell.execute_reply": "2025-12-12T19:34:58.791212Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(0.6390716662864897,\n", + " num__imp_total 0.350725\n", + " cat__device_platform_cd_Android 0.266848\n", + " num__share_imp_ent 0.222672\n", + " cat__device_platform_cd_iPadOS -0.169334\n", + " num__share_imp_avia -0.164523\n", + " num__share_imp_super -0.160224\n", + " num__share_imp_transport 0.154995\n", + " num__share_imp_hotel -0.124555\n", + " num__age -0.070436\n", + " cat__gender_cd_F 0.050009\n", + " dtype: float64)" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "X = client[[f\"share_imp_{c}\" for c in cats] + [\"imp_total\", \"age\", \"gender_cd\", \"device_platform_cd\"]]\n", "y = client[\"has_order\"]\n", @@ -135,7 +490,7 @@ "\n", "pre = ColumnTransformer(\n", " [\n", - " (\"num\", Pipeline([(\"scaler\", StandardScaler())]), numeric_cols),\n", + " (\"num\", Pipeline([(\"imputer\", SimpleImputer(strategy=\"median\")), (\"scaler\", StandardScaler())]), numeric_cols),\n", " (\"cat\", OneHotEncoder(handle_unknown=\"ignore\"), cat_cols),\n", " ]\n", ")\n", @@ -169,8 +524,16 @@ "name": "python3" }, "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", "name": "python", - "version": "3.13" + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.13.5" } }, "nbformat": 4, diff --git a/alternative/category_mix_uplift/eda_utils.py b/alternative/category_mix_uplift/eda_utils.py new file mode 100644 index 0000000..802a6d8 --- /dev/null +++ b/alternative/category_mix_uplift/eda_utils.py @@ -0,0 +1,154 @@ +from __future__ import annotations + +from pathlib import Path +from typing import Dict, Iterable, List + +import numpy as np +import pandas as pd + +# Paths and column groups +DATA_PATH = Path("dataset/ds.csv") +CATEGORIES: List[str] = ["ent", "super", "transport", "shopping", "hotel", "avia"] + +ACTIVE_IMP_COLS = [f"active_imp_{c}" for c in CATEGORIES] +PASSIVE_IMP_COLS = [f"passive_imp_{c}" for c in CATEGORIES] +ACTIVE_CLICK_COLS = [f"active_click_{c}" for c in CATEGORIES] +PASSIVE_CLICK_COLS = [f"passive_click_{c}" for c in CATEGORIES] +ORDER_COLS = [f"orders_amt_{c}" for c in CATEGORIES] + +NUMERIC_COLS = ( + ACTIVE_IMP_COLS + + PASSIVE_IMP_COLS + + ACTIVE_CLICK_COLS + + PASSIVE_CLICK_COLS + + ORDER_COLS + + ["age"] +) +CAT_COLS = ["gender_cd", "device_platform_cd"] + + +def safe_divide(numerator: pd.Series | float, denominator: pd.Series | float) -> pd.Series: + """Divide with protection against zero (works for Series and scalars).""" + if isinstance(denominator, pd.Series): + denom = denominator.replace(0, np.nan) + else: + denom = np.nan if float(denominator) == 0 else denominator + return numerator / denom + + +def normalize_gender(series: pd.Series) -> pd.Series: + cleaned = series.fillna("UNKNOWN").astype(str).str.strip().str.upper() + mapping = {"M": "M", "MALE": "M", "F": "F", "FEMALE": "F"} + return cleaned.map(mapping).fillna("UNKNOWN") + + +def normalize_device(series: pd.Series) -> pd.Series: + cleaned = series.fillna("unknown").astype(str).str.strip() + lowered = cleaned.str.lower().str.replace(" ", "").str.replace("_", "") + mapping = {"android": "Android", "ios": "iOS", "ipados": "iPadOS", "ipad": "iPadOS"} + mapped = lowered.map(mapping) + fallback = cleaned.str.title() + return mapped.fillna(fallback) + + +def add_age_group(df: pd.DataFrame) -> pd.DataFrame: + bins = [0, 25, 35, 45, 55, np.inf] + labels = ["<25", "25-34", "35-44", "45-54", "55+"] + df["age_group"] = pd.cut(df["age"], bins=bins, labels=labels, right=False) + return df + + +def add_totals(df: pd.DataFrame) -> pd.DataFrame: + df["active_imp_total"] = df[ACTIVE_IMP_COLS].sum(axis=1) + df["passive_imp_total"] = df[PASSIVE_IMP_COLS].sum(axis=1) + df["active_click_total"] = df[ACTIVE_CLICK_COLS].sum(axis=1) + df["passive_click_total"] = df[PASSIVE_CLICK_COLS].sum(axis=1) + df["orders_amt_total"] = df[ORDER_COLS].sum(axis=1) + df["click_total"] = df["active_click_total"] + df["passive_click_total"] + df["imp_total"] = df["active_imp_total"] + df["passive_imp_total"] + df["active_ctr"] = safe_divide(df["active_click_total"], df["active_imp_total"]) + df["passive_ctr"] = safe_divide(df["passive_click_total"], df["passive_imp_total"]) + df["ctr_all"] = safe_divide(df["click_total"], df["imp_total"]) + df["cr_click2order"] = safe_divide(df["orders_amt_total"], df["click_total"]) + df["cr_imp2order"] = safe_divide(df["orders_amt_total"], df["imp_total"]) + return df + + +def add_flags(df: pd.DataFrame) -> pd.DataFrame: + df["has_active_comm"] = (df[ACTIVE_IMP_COLS + ACTIVE_CLICK_COLS].sum(axis=1) > 0).astype(int) + df["has_passive_comm"] = (df[PASSIVE_IMP_COLS + PASSIVE_CLICK_COLS].sum(axis=1) > 0).astype(int) + df["has_any_order"] = (df[ORDER_COLS].sum(axis=1) > 0).astype(int) + df["order_categories_count"] = (df[ORDER_COLS] > 0).sum(axis=1) + return df + + +def load_data(path: Path | str = DATA_PATH) -> pd.DataFrame: + df = pd.read_csv(path) + df["business_dt"] = pd.to_datetime(df["business_dt"]) + df["gender_cd"] = normalize_gender(df["gender_cd"]) + df["device_platform_cd"] = normalize_device(df["device_platform_cd"]) + df = add_age_group(df) + df = add_totals(df) + df = add_flags(df) + return df + + +def describe_zero_share(df: pd.DataFrame, cols: Iterable[str]) -> pd.DataFrame: + stats = [] + for col in cols: + series = df[col] + stats.append( + { + "col": col, + "count": series.count(), + "mean": series.mean(), + "median": series.median(), + "std": series.std(), + "min": series.min(), + "q25": series.quantile(0.25), + "q75": series.quantile(0.75), + "max": series.max(), + "share_zero": (series == 0).mean(), + "p95": series.quantile(0.95), + "p99": series.quantile(0.99), + } + ) + return pd.DataFrame(stats) + + +def build_daily(df: pd.DataFrame) -> pd.DataFrame: + agg_cols = ACTIVE_IMP_COLS + PASSIVE_IMP_COLS + ACTIVE_CLICK_COLS + PASSIVE_CLICK_COLS + ORDER_COLS + daily = df.groupby("business_dt")[agg_cols].sum().reset_index() + daily = add_totals(daily) + daily["day_of_week"] = daily["business_dt"].dt.day_name() + return daily + + +def build_client(df: pd.DataFrame) -> pd.DataFrame: + agg_spec: Dict[str, str] = {col: "sum" for col in ACTIVE_IMP_COLS + PASSIVE_IMP_COLS + ACTIVE_CLICK_COLS + PASSIVE_CLICK_COLS + ORDER_COLS} + meta_spec: Dict[str, str | callable] = { + "age": "median", + "gender_cd": lambda s: s.mode().iat[0] if not s.mode().empty else "UNKNOWN", + "age_group": lambda s: s.mode().iat[0] if not s.mode().empty else np.nan, + "device_platform_cd": lambda s: s.mode().iat[0] if not s.mode().empty else "Other", + } + agg_spec.update(meta_spec) + client = df.groupby("id").agg(agg_spec).reset_index() + contact_days = df.groupby("id")["business_dt"].nunique().rename("contact_days") + imp_day = df.copy() + imp_day["imp_day_total"] = imp_day[ACTIVE_IMP_COLS + PASSIVE_IMP_COLS].sum(axis=1) + max_imp_day = imp_day.groupby("id")["imp_day_total"].max().rename("max_impressions_per_day") + client = add_totals(client) + client = add_flags(client) + client = client.merge(contact_days, on="id", how="left") + client = client.merge(max_imp_day, on="id", how="left") + client = add_contact_density(client) + return client + + +def add_contact_density(df: pd.DataFrame) -> pd.DataFrame: + # contact_days must already be present + if "contact_days" in df.columns: + df["avg_impressions_per_contact_day"] = safe_divide(df["imp_total"], df["contact_days"]) + return df + return df diff --git a/alternative/contact_frequency_orders/analysis.ipynb b/alternative/contact_frequency_orders/analysis.ipynb index f464a77..16188a0 100644 --- a/alternative/contact_frequency_orders/analysis.ipynb +++ b/alternative/contact_frequency_orders/analysis.ipynb @@ -9,21 +9,155 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-12-12T19:27:14.925005Z", + "start_time": "2025-12-12T19:27:13.730791Z" + } + }, "source": [ "import sqlite3\nfrom pathlib import Path\nimport sys\nimport numpy as np\nimport pandas as pd\nimport seaborn as sns\nimport matplotlib.pyplot as plt\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.preprocessing import StandardScaler, OneHotEncoder\nfrom sklearn.compose import ColumnTransformer\nfrom sklearn.pipeline import Pipeline\nfrom sklearn.linear_model import LogisticRegression\nfrom sklearn.metrics import roc_auc_score\n\nsns.set_theme(style=\"whitegrid\")\nplt.rcParams[\"figure.figsize\"] = (10, 5)\n\nproject_root = Path.cwd().resolve()\nwhile not (project_root / \"preanalysis\").exists() and project_root.parent != project_root:\n project_root = project_root.parent\nsys.path.append(str(project_root / \"preanalysis\"))\nimport eda_utils as eda\n\ndb_path = project_root / \"dataset\" / \"ds.sqlite\"\nconn = sqlite3.connect(db_path)\ndf = pd.read_sql_query(\"select * from communications\", conn, parse_dates=[\"business_dt\"])\nconn.close()\n" - ] + ], + "outputs": [], + "execution_count": 1 }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-12-12T19:27:15.582784Z", + "start_time": "2025-12-12T19:27:14.934830Z" + } + }, "source": [ "for cols, name in [\n (eda.ACTIVE_IMP_COLS, \"active_imp_total\"),\n (eda.PASSIVE_IMP_COLS, \"passive_imp_total\"),\n (eda.ACTIVE_CLICK_COLS, \"active_click_total\"),\n (eda.PASSIVE_CLICK_COLS, \"passive_click_total\"),\n (eda.ORDER_COLS, \"orders_amt_total\"),\n]:\n df[name] = df[cols].sum(axis=1)\n\ndf[\"imp_total\"] = df[\"active_imp_total\"] + df[\"passive_imp_total\"]\ndf[\"click_total\"] = df[\"active_click_total\"] + df[\"passive_click_total\"]\n\ncontact_days = df.groupby(\"id\")[\"business_dt\"].nunique().rename(\"contact_days\")\nclient = df.groupby(\"id\").agg(\n {\n \"imp_total\": \"sum\",\n \"click_total\": \"sum\",\n \"orders_amt_total\": \"sum\",\n \"age\": \"median\",\n \"gender_cd\": lambda s: s.mode().iat[0],\n \"device_platform_cd\": lambda s: s.mode().iat[0],\n }\n).reset_index().merge(contact_days, on=\"id\", how=\"left\")\n\nclient[\"clicks_per_day\"] = eda.safe_divide(client[\"click_total\"], client[\"contact_days\"])\nclient[\"has_order\"] = (client[\"orders_amt_total\"] > 0).astype(int)\nclient.head()\n" - ] + ], + "outputs": [ + { + "data": { + "text/plain": [ + " id imp_total click_total orders_amt_total age gender_cd \\\n", + "0 1 68.0 17.0 0 58.0 M \n", + "1 2 116.0 23.0 3 54.0 M \n", + "2 3 293.0 37.0 2 70.0 F \n", + "3 4 57.0 15.0 0 43.0 F \n", + "4 5 43.0 16.0 1 46.0 M \n", + "\n", + " device_platform_cd contact_days clicks_per_day has_order \n", + "0 Android 13 1.307692 0 \n", + "1 Android 15 1.533333 1 \n", + "2 Android 31 1.193548 1 \n", + "3 Android 12 1.250000 0 \n", + "4 Android 10 1.600000 1 " + ], + "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", + "
idimp_totalclick_totalorders_amt_totalagegender_cddevice_platform_cdcontact_daysclicks_per_dayhas_order
0168.017.0058.0MAndroid131.3076920
12116.023.0354.0MAndroid151.5333331
23293.037.0270.0FAndroid311.1935481
3457.015.0043.0FAndroid121.2500000
4543.016.0146.0MAndroid101.6000001
\n", + "
" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 2 }, { "cell_type": "markdown", @@ -34,12 +168,125 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-12-12T19:27:15.715340Z", + "start_time": "2025-12-12T19:27:15.610539Z" + } + }, "source": [ "bins = pd.qcut(client[\"clicks_per_day\"], 8, duplicates=\"drop\")\norder_rate = client.groupby(bins)[\"has_order\"].mean().reset_index()\norder_rate[\"clicks_per_day\"] = order_rate[\"clicks_per_day\"].astype(str)\nplt.figure(figsize=(12, 4))\nsns.lineplot(data=order_rate, x=\"clicks_per_day\", y=\"has_order\", marker=\"o\")\nplt.xticks(rotation=40)\nplt.title(\"Доля клиентов с заказом vs клики на контактный день\")\nplt.tight_layout()\nplt.show()\norder_rate\n" - ] + ], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/var/folders/mx/y1qcnthj1154ngqj00r8gz480000gn/T/ipykernel_83535/2771825794.py:2: FutureWarning: The default of observed=False is deprecated and will be changed to True in a future version of pandas. Pass observed=False to retain current behavior or observed=True to adopt the future default and silence this warning.\n", + " order_rate = client.groupby(bins)[\"has_order\"].mean().reset_index()\n" + ] + }, + { + "data": { + "text/plain": [ + "
" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAABKAAAAGACAYAAACazRotAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAoTZJREFUeJzt3QV4nFXaxvEnSaN1T92FKnRrUFoKRRcr7iwui0txWGCxRRdZnOIOH1LcipdSKNBSd6Hujdt8133aM51MkzRJozP/33XlSjIzSSaTk1fu9znPiQkEAgEDAAAAAAAAKklsZX1jAAAAAAAAgAAKAAAAAAAAlY4KKAAAAAAAAFQqAigAAAAAAABUKgIoAAAAAAAAVCoCKAAAAAAAAFQqAigAAAAAAABUKgIoAAAAAAAAVCoCKAAAAAAAAFQqAigAAAAAAABUKgIoAECVu+aaa6xHjx5Fvuk+AEDN9sILL9i5555rq1evtpkzZ9rAgQNt3bp11f20AAA1WJ3qfgIAgOjUvHlze+SRRwrdduGFF1bb8wEAlN6RRx5p77zzju25554WExNj559/vjVp0oSXEABQLAIoAECVy8/Pt5SUFNt1110L3Z6QkMBfAwBqgXr16tnbb79tixYtch/rogIAACVhCh4AoMrl5eVZUlJSqR67cOFCu/jii23YsGEusDrllFPs119/LfSYffbZp8jpfLrd09eccMIJtttuuxX7mHATJ050j9F7mT17tu277752/PHHBx9T3FRCPc/Qxzz88MPBzwOBgPseun3p0qXB23/55Rc7+eSTrX///jZ48GC7+uqrC01p+b//+7/tvsb//n7qYnHPR2/eRx995KoX9Frodb3pppts48aNwfv1XEO/rl+/fnb44Yfb999/X+LfKicnx/773//aqFGj3NcccsghrkKiJBMmTHDPRX/bv//97/b5558Xun/SpEl25pln2qBBg6xPnz7ud9XzKygocPfrtdBz1GsjK1eutNGjR9vw4cNL/T38a6Kfr+eh56O/RagffvjBTjzxRPvb3/5mQ4YMsSuuuMKWL1++3d9Gb3oOof7zn/9sNyZCrVixwnbZZRd76aWXCt2uv33v3r3tueeeCz6HY4891v3d9Luo4mTevHnFvraleW1K878TOr68yy+/vND/hh8z3ocffuie43333bfd85Ds7Gw3TkK/ZkfP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70tO3Bo69WttAwidAAAAgMgKoC699FJLSUmxSZMm2RVXXGEnnniiu33q1Kl2xhln2Pnnn1/RzxMAEGWh04yF61yVk0KntYVCpzo2eGulk0KnxPi4an2uAAAAACopgIqJibFzzz3XvYV67bXXyvPtAACwfIVOC9ZuqXSauszWbcoOviopSXVscO9U27Nfa9utRwvXWBwAAABA7VHuBhkrV6500+9ycnKCtxUUFFhmZqb98ssv9sADD1TUcwQA1GJJSUklhk7T56+17//4yyZMXW7rN28Lneom1bEhfVq5Sqfduje3+DqETgAAAEBUBVCffPKJXXnllZaXl+eqofxqRP7jzp07V+yzBADUOlk5eRafkGSt2na2+IRE97kag+fnF9i0BQqdlrnQaUNo6JQcb0NU6dS/te1K6AQAAABEdwD1+OOPW+/eve1f//qXvfzyy5afn29nn322ffPNN3b//ffbddddV/HPFABQa+Tk5tvb4+fauO/mW3pmrguWDh3e2UaP6GK3PD3BZixcH3xsveR4G7q10ql/N1U6xVbrcwcAAABQQwKoBQsW2H333We9evWyIUOG2NixY61Lly7ubc2aNS6gGjZsWMU/WwBAjZeVnWdvfz3XXvtsVvA2hVD6PFAQsCP37mYPvf6bC5327N/G+nVrZnXiCJ0AAACASFauACo2NtYaNmzoPu7QoYPNnz/f9X/S7SNGjLB33nmnop8nAKAaZefm28bN2bYhLds2bn3bkJaz9X22u29jWo7lFxTYvZeMcJVPRfnghwX2ws0H2As3H0joBAAAAESRcgVQ6vE0efJkGzRokPtYjchnzpzpKqI2bdpUqDE5AKDmUfPvzekhAVLw/dbbXKC05XPdnpmdV6rv2yG1vgujVPFUFN2emZVnDeslVvBvBAAAACDiAqjjjz/e9X/KyMiwyy67zIYOHWrXXnutHX300fbSSy+5/lAAgKqjhSAUEm2pRsoJq1QKCZa23rYpPccCgbL9DE2Ta1QvwRrWT3QBUqN6/n2Ce6+3Jg2SrEnDZNfzqagQSrenJMVX3C8OAAAAIHIDqGOOOcZVOS1dutR9fuutt9o555xjt99+u7Vp08auv/76in6eABB1cvMKbFO6r0YqOlQK3rY523LyCsr8M+qnJFij+gnWqF6SNayn94khAVNCoaApJalOcLXTkmi1u8OGd7ZX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6PXXX7e7776b7Q7K7Ndff3X7LbY7KCv2WSivjz/+2J0EHnXUUfb888/bu+++a3l5ebygKNG0adNc9dPll19uTZo0ccfJv//+O68admjTpk02Z84cu/76623EiBH2yiuv2Ndff21VKSYQCASq9CciKqik75BDDrGCggJr1qyZXX311fbdd9+5Sqhu3bpV99NDDZeTk2NpaWlup6qKBAWZN954ox1xxBGWkpJS3U8PNdjmzZstPT3dbXeuueYatjsolSeffNLOOeccW7t2rTVt2pTtDspE25yMjAxr3rw5YwdlonGj8aOxo4snChIefPBBN3sgJiaGVxPb+de//mWNGzd2F0vq1q3rqp80Zjp37myXXHKJdejQgVcNJcrPz7e4uDh34e2xxx5z51w33XST9erVy6oCFVCoUKtWrbKjjz7a/vOf/9jcuXOtZcuWFhsba1deeaV17drVLr30UipZUCT1PtBJoAKnr776yoVPctppp9lxxx1n9957r33//fdcGcR2NmzYYJ988ol9+eWXbhuUmprqdqy6Msh2BzvaZ+233372f//3fy74ZruD0tJUKVWtaLujk0CdELLPQmmoolvVuqr0ViWLwifRsbIqEnQiqNuB8P3V3//+dzd21qxZ47Y7svfee9vxxx/veqaqim7jxo28cChE40UXZa+44goXYKrnnPztb3+zE044wYXd//3vf2316tVWFQigUGEmTZrkDuR1EKa3pKQkd7sGtU4INeB1gK8dLOXFCG+Ed+ihh7ppDDoRvPbaa91UGO+WW26xXXfd1VVCTZ48mRcPQb/99purtlRwqW2LtjO//PKL2+60bt2a7Q5K3GcdeOCBNnDgQBdgJiQkBK8Mst1BaU4GFRJcd911tnjxYqtTp45lZ2czdlAiTZPS8c4HH3zgTvhuuOEG++KLL9x9umB75513ugpehVBLlizh1YSj4xr1Re3Tp48LmzRWROdVotv2339/+/nnn+2FF14I7seAWbNm2eGHH+4qLVu0aOGm/ao1jqf+c5phopBKF/ur4hydAAoVQmHBKaecYueee66rYmnQoIEtXLjQ3adpeNK9e3e79dZb3c739ttv55WHo7JPbQiPPPJIFyKo6figQYO2u/qnhnmqarnvvvvcvHdAK2zq4F0HXmri+r///c9d1dEqZl6XLl3Y7mA7CrK1z1KFpU74PAWX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hRsKgqZOnWr33nuv5eXllfh16enpdsIJJ7iAZsyYMdayZUsbO3asnXHGGS5g6tixY6HHK9R69NFH7bbbbrMjjjjC3aavW7t2rd1yyy1Wr149e++991ygpWl+Q4cOLdPvcfPNN9tee+3lwpxff/3VHnnkEcvIyHA/Q5544gl74IEHXDB07bXX2owZM9xjly9fbnfccUfw+/zyyy+WmJjoAix9fVxcXKl+/ksvvWT//ve/XYA1YsQImzBhgt14442FHjNz5kwXJB144IHuuSjkGzdunHuunTt3duHY0Ucf7X6XRYsWWYcOHdzX6Tmqj5T+VgAAIHIRQAEAgIi0adMme+GFF1wo44OaPfbYw1avXu0qdUqikOmvv/5y71XVJKoaGj16tPva0ADq1VdftXvuucduvfVWF7B4P//8s11wwQW27777us8HDx5sjRo1soSEhDL/Lr1793bBmSgAUnikYO388893QY/Cr+OOO85uuOEG95g999zT/Sx9rvCtW7du7nYFb3qeZel15b+/Kqauu+664PdPS0tzVVGhAZReX70WsbFbiuwV+n311VcuYFIAdcghh9hdd93lwriLL77YPUYf161b11WnAQCAyEUABQAAItLvv//uApf999+/0O0+pAldAS+cqozatm0bDJ8kOTnZPv3000KPGz9+vE2fPt0GDhxoxx57bKH7hgwZ4qqQdP/w4cNdBZMqoMpDwVcoTYVTuKYpgQqIsrKy3HS30MoufS4//PBDMIBSKFXWRuvz5893lVx77713ods1rTE0gNJz1Ft2drYtWLDAVTmpEktVZLm5ue4x9evXd3+P999/PxhAKeRTuJWUlFTm1wUAANQeBFAAACAibdiwwb1v0qRJub62adOmO3zctGnTXL+lr7/+2lX6+NBHNA3t8ccft48//tgFV6oKUoWQKpDatGlTpuejKYCh/O+0cePGYH+lc845p8ivVS8rT5VGZaWfIY0bNy50e/PmzQt9rhBM0/RU0aQgTAGeemfVqVOnUM8tVYkpgNJ0QE0BXLhwof3nP/8p8/MCAAC1CwEUAACISA0aNAg2A1cPIk/NsxcvXuyqcuLj44v8WlXqqAF4uMmTJ1vDhg2tS5cu7nNNe1OPJ/WL0ntNs1O/J/89NPVPb6oi+vLLL91UNj3uySefLNPvsn79+kKfqyJJFJKp4kg0RS+8N5U0a9bMdoYPnvzPDA/4vNtvv90Fbf/9739d0JaSkuJuVxP3UHqN2rdvb5988okL5fS3YQVCAAAiH6vgAQCAiKTV2hQwaZpcKDUTv/zyy0tswK0pdUuWLLE5c+YEb1PQc9FFF9lbb71VqAooJibGNdZes2aN3Xfffe529Y/SlDuFLKKQ5eyzz3bBTFGrx+3IF198UehzBT2aEqhV8fSm33PlypVutT3/psqj+++/v8ggrSwUarVq1Sr4u3jhr6umLWraoXpe+fDpzz//dAFg6Ip9er2OPPJI9zupasw3bQcAAJGNCigAABCRNE3t1FNPteeee841/lblzR9//OGahl911VXbhTqhFJC8+OKLrsm3ehWpCkg9l1Q1deKJJ273+J49e7oV4hRuHXrooa5huXotaVU8NetWxY/CmG+++cbOPffcMv8umsanaieFWmpu/vLLL9tll13mgh69nXXWWfbggw+6n6UQSGGUPlfYo+e2M/Q9rrzySrviiitc/yytcqf+WnodwwM/PU/drgoxNSV/7LHH3NdnZmZu9/qqP5YcfvjhO/X8AABA7UAABQAAIpamvym4UbPsp59+2vUluvHGG+34448vMYDSNLqXXnrJ7r77btfXSBU8miamEKpdu3ZFfo2qo1QlpJDm3XfftUceecRVICkI0hQ6VRFdeOGFxfZqKskll1zigqfXX3/dfZ+bbrrJTfvzLr30UleN9corr7jfU9MENfVNlV6aCriztHqdpstpCqF6PHXv3t31stL396655hoX0GkKXk5OjnutFeDNnTvXVTqpGbmvOlNPKwVjmh4Y3t8KAABEpphAaFdIAAAA1BiaPjdq1Ci78847XdVQpFCFllbVe+ihh9yUPQAAEPmogAIAAKhiqgba0TVATV2rTPr5eh47oqqlinouM2bMcM3Y1cNKvaVCVw0EAACRjQAKAACgip122mluSl1J2rRp46b8VZZ33nnHrr322h0+Ts9BfaUqghq5P/vss27anaYnalofAACIDkzBAwAAqGLz58+39PT0Eh+jxuk9evSotOegvlSlWSGvU6dOricWAADAziCAAgAAAAAAQKWi7hkAAAAAAACVigAKAAAAAAAAlYoACgAAAAAAAJWKAAoAAAAAAACVigAKAAAAAAAAlYoACgAAAAAAAJWKAAoAAAAAAACVigAKAAAAAAAAVpn+Hw3DXDk362itAAAAAElFTkSuQmCC" + }, + "metadata": {}, + "output_type": "display_data", + "jetTransient": { + "display_id": null + } + }, + { + "data": { + "text/plain": [ + " clicks_per_day has_order\n", + "0 (0.999, 1.167] 0.436207\n", + "1 (1.167, 1.238] 0.506410\n", + "2 (1.238, 1.308] 0.519022\n", + "3 (1.308, 1.375] 0.567515\n", + "4 (1.375, 1.444] 0.581489\n", + "5 (1.444, 1.538] 0.625693\n", + "6 (1.538, 1.667] 0.638397\n", + "7 (1.667, 3.788] 0.658058" + ], + "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", + "
clicks_per_dayhas_order
0(0.999, 1.167]0.436207
1(1.167, 1.238]0.506410
2(1.238, 1.308]0.519022
3(1.308, 1.375]0.567515
4(1.375, 1.444]0.581489
5(1.444, 1.538]0.625693
6(1.538, 1.667]0.638397
7(1.667, 3.788]0.658058
\n", + "
" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 3 }, { "cell_type": "markdown", @@ -50,12 +297,37 @@ }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], + "metadata": { + "ExecuteTime": { + "end_time": "2025-12-12T19:27:15.821206Z", + "start_time": "2025-12-12T19:27:15.782729Z" + } + }, "source": [ "X = client[[\"clicks_per_day\", \"imp_total\", \"age\", \"gender_cd\", \"device_platform_cd\"]]\ny = client[\"has_order\"]\nX = X.copy()\nX[\"gender_cd\"] = eda.normalize_gender(X[\"gender_cd\"])\nX[\"device_platform_cd\"] = eda.normalize_device(X[\"device_platform_cd\"])\n\nnumeric_cols = [\"clicks_per_day\", \"imp_total\", \"age\"]\ncat_cols = [\"gender_cd\", \"device_platform_cd\"]\n\npre = ColumnTransformer(\n [\n (\"num\", Pipeline([(\"scaler\", StandardScaler())]), numeric_cols),\n (\"cat\", OneHotEncoder(handle_unknown=\"ignore\"), cat_cols),\n ]\n)\n\nmodel = Pipeline([(\"pre\", pre), (\"clf\", LogisticRegression(max_iter=1000))])\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)\nmodel.fit(X_train, y_train)\nproba = model.predict_proba(X_test)[:, 1]\nauc = roc_auc_score(y_test, proba)\ncoef = model.named_steps[\"clf\"].coef_[0]\nfeatures = model.named_steps[\"pre\"].get_feature_names_out()\ncoef_series = pd.Series(coef, index=features).sort_values(key=abs, ascending=False)\nauc, coef_series.head(10)\n" - ] + ], + "outputs": [ + { + "data": { + "text/plain": [ + "(0.6421189310592901,\n", + " num__imp_total 0.398823\n", + " num__clicks_per_day 0.278830\n", + " cat__device_platform_cd_Android 0.193290\n", + " num__age -0.093555\n", + " cat__gender_cd_M 0.073771\n", + " cat__device_platform_cd_iPadOS -0.064613\n", + " cat__gender_cd_F 0.047759\n", + " cat__device_platform_cd_iOS -0.007148\n", + " dtype: float64)" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "execution_count": 4 }, { "cell_type": "markdown", diff --git a/alternative/contact_frequency_orders/eda_utils.py b/alternative/contact_frequency_orders/eda_utils.py new file mode 100644 index 0000000..802a6d8 --- /dev/null +++ b/alternative/contact_frequency_orders/eda_utils.py @@ -0,0 +1,154 @@ +from __future__ import annotations + +from pathlib import Path +from typing import Dict, Iterable, List + +import numpy as np +import pandas as pd + +# Paths and column groups +DATA_PATH = Path("dataset/ds.csv") +CATEGORIES: List[str] = ["ent", "super", "transport", "shopping", "hotel", "avia"] + +ACTIVE_IMP_COLS = [f"active_imp_{c}" for c in CATEGORIES] +PASSIVE_IMP_COLS = [f"passive_imp_{c}" for c in CATEGORIES] +ACTIVE_CLICK_COLS = [f"active_click_{c}" for c in CATEGORIES] +PASSIVE_CLICK_COLS = [f"passive_click_{c}" for c in CATEGORIES] +ORDER_COLS = [f"orders_amt_{c}" for c in CATEGORIES] + +NUMERIC_COLS = ( + ACTIVE_IMP_COLS + + PASSIVE_IMP_COLS + + ACTIVE_CLICK_COLS + + PASSIVE_CLICK_COLS + + ORDER_COLS + + ["age"] +) +CAT_COLS = ["gender_cd", "device_platform_cd"] + + +def safe_divide(numerator: pd.Series | float, denominator: pd.Series | float) -> pd.Series: + """Divide with protection against zero (works for Series and scalars).""" + if isinstance(denominator, pd.Series): + denom = denominator.replace(0, np.nan) + else: + denom = np.nan if float(denominator) == 0 else denominator + return numerator / denom + + +def normalize_gender(series: pd.Series) -> pd.Series: + cleaned = series.fillna("UNKNOWN").astype(str).str.strip().str.upper() + mapping = {"M": "M", "MALE": "M", "F": "F", "FEMALE": "F"} + return cleaned.map(mapping).fillna("UNKNOWN") + + +def normalize_device(series: pd.Series) -> pd.Series: + cleaned = series.fillna("unknown").astype(str).str.strip() + lowered = cleaned.str.lower().str.replace(" ", "").str.replace("_", "") + mapping = {"android": "Android", "ios": "iOS", "ipados": "iPadOS", "ipad": "iPadOS"} + mapped = lowered.map(mapping) + fallback = cleaned.str.title() + return mapped.fillna(fallback) + + +def add_age_group(df: pd.DataFrame) -> pd.DataFrame: + bins = [0, 25, 35, 45, 55, np.inf] + labels = ["<25", "25-34", "35-44", "45-54", "55+"] + df["age_group"] = pd.cut(df["age"], bins=bins, labels=labels, right=False) + return df + + +def add_totals(df: pd.DataFrame) -> pd.DataFrame: + df["active_imp_total"] = df[ACTIVE_IMP_COLS].sum(axis=1) + df["passive_imp_total"] = df[PASSIVE_IMP_COLS].sum(axis=1) + df["active_click_total"] = df[ACTIVE_CLICK_COLS].sum(axis=1) + df["passive_click_total"] = df[PASSIVE_CLICK_COLS].sum(axis=1) + df["orders_amt_total"] = df[ORDER_COLS].sum(axis=1) + df["click_total"] = df["active_click_total"] + df["passive_click_total"] + df["imp_total"] = df["active_imp_total"] + df["passive_imp_total"] + df["active_ctr"] = safe_divide(df["active_click_total"], df["active_imp_total"]) + df["passive_ctr"] = safe_divide(df["passive_click_total"], df["passive_imp_total"]) + df["ctr_all"] = safe_divide(df["click_total"], df["imp_total"]) + df["cr_click2order"] = safe_divide(df["orders_amt_total"], df["click_total"]) + df["cr_imp2order"] = safe_divide(df["orders_amt_total"], df["imp_total"]) + return df + + +def add_flags(df: pd.DataFrame) -> pd.DataFrame: + df["has_active_comm"] = (df[ACTIVE_IMP_COLS + ACTIVE_CLICK_COLS].sum(axis=1) > 0).astype(int) + df["has_passive_comm"] = (df[PASSIVE_IMP_COLS + PASSIVE_CLICK_COLS].sum(axis=1) > 0).astype(int) + df["has_any_order"] = (df[ORDER_COLS].sum(axis=1) > 0).astype(int) + df["order_categories_count"] = (df[ORDER_COLS] > 0).sum(axis=1) + return df + + +def load_data(path: Path | str = DATA_PATH) -> pd.DataFrame: + df = pd.read_csv(path) + df["business_dt"] = pd.to_datetime(df["business_dt"]) + df["gender_cd"] = normalize_gender(df["gender_cd"]) + df["device_platform_cd"] = normalize_device(df["device_platform_cd"]) + df = add_age_group(df) + df = add_totals(df) + df = add_flags(df) + return df + + +def describe_zero_share(df: pd.DataFrame, cols: Iterable[str]) -> pd.DataFrame: + stats = [] + for col in cols: + series = df[col] + stats.append( + { + "col": col, + "count": series.count(), + "mean": series.mean(), + "median": series.median(), + "std": series.std(), + "min": series.min(), + "q25": series.quantile(0.25), + "q75": series.quantile(0.75), + "max": series.max(), + "share_zero": (series == 0).mean(), + "p95": series.quantile(0.95), + "p99": series.quantile(0.99), + } + ) + return pd.DataFrame(stats) + + +def build_daily(df: pd.DataFrame) -> pd.DataFrame: + agg_cols = ACTIVE_IMP_COLS + PASSIVE_IMP_COLS + ACTIVE_CLICK_COLS + PASSIVE_CLICK_COLS + ORDER_COLS + daily = df.groupby("business_dt")[agg_cols].sum().reset_index() + daily = add_totals(daily) + daily["day_of_week"] = daily["business_dt"].dt.day_name() + return daily + + +def build_client(df: pd.DataFrame) -> pd.DataFrame: + agg_spec: Dict[str, str] = {col: "sum" for col in ACTIVE_IMP_COLS + PASSIVE_IMP_COLS + ACTIVE_CLICK_COLS + PASSIVE_CLICK_COLS + ORDER_COLS} + meta_spec: Dict[str, str | callable] = { + "age": "median", + "gender_cd": lambda s: s.mode().iat[0] if not s.mode().empty else "UNKNOWN", + "age_group": lambda s: s.mode().iat[0] if not s.mode().empty else np.nan, + "device_platform_cd": lambda s: s.mode().iat[0] if not s.mode().empty else "Other", + } + agg_spec.update(meta_spec) + client = df.groupby("id").agg(agg_spec).reset_index() + contact_days = df.groupby("id")["business_dt"].nunique().rename("contact_days") + imp_day = df.copy() + imp_day["imp_day_total"] = imp_day[ACTIVE_IMP_COLS + PASSIVE_IMP_COLS].sum(axis=1) + max_imp_day = imp_day.groupby("id")["imp_day_total"].max().rename("max_impressions_per_day") + client = add_totals(client) + client = add_flags(client) + client = client.merge(contact_days, on="id", how="left") + client = client.merge(max_imp_day, on="id", how="left") + client = add_contact_density(client) + return client + + +def add_contact_density(df: pd.DataFrame) -> pd.DataFrame: + # contact_days must already be present + if "contact_days" in df.columns: + df["avg_impressions_per_contact_day"] = safe_divide(df["imp_total"], df["contact_days"]) + return df + return df diff --git a/alternative/device_orders/analysis.ipynb b/alternative/device_orders/analysis.ipynb index 9bb5790..2cd3930 100644 --- a/alternative/device_orders/analysis.ipynb +++ b/alternative/device_orders/analysis.ipynb @@ -14,7 +14,6 @@ }, { "cell_type": "code", - "execution_count": 1, "id": "8c8f09b1", "metadata": { "execution": { @@ -22,9 +21,12 @@ "iopub.status.busy": "2025-12-12T19:12:03.874144Z", "iopub.status.idle": "2025-12-12T19:12:10.515786Z", "shell.execute_reply": "2025-12-12T19:12:10.513552Z" + }, + "ExecuteTime": { + "end_time": "2025-12-12T19:27:18.761737Z", + "start_time": "2025-12-12T19:27:17.400625Z" } }, - "outputs": [], "source": [ "import sqlite3\n", "from pathlib import Path\n", @@ -54,11 +56,12 @@ "conn = sqlite3.connect(db_path)\n", "df = pd.read_sql_query(\"select * from communications\", conn, parse_dates=[\"business_dt\"])\n", "conn.close()\n" - ] + ], + "outputs": [], + "execution_count": 1 }, { "cell_type": "code", - "execution_count": 2, "id": "67ed5210", "metadata": { "execution": { @@ -66,11 +69,73 @@ "iopub.status.busy": "2025-12-12T19:12:10.521072Z", "iopub.status.idle": "2025-12-12T19:12:13.018480Z", "shell.execute_reply": "2025-12-12T19:12:13.016893Z" + }, + "ExecuteTime": { + "end_time": "2025-12-12T19:27:19.344169Z", + "start_time": "2025-12-12T19:27:18.770497Z" } }, + "source": [ + "for cols, name in [\n", + " (eda.ACTIVE_IMP_COLS, \"active_imp_total\"),\n", + " (eda.PASSIVE_IMP_COLS, \"passive_imp_total\"),\n", + " (eda.ACTIVE_CLICK_COLS, \"active_click_total\"),\n", + " (eda.PASSIVE_CLICK_COLS, \"passive_click_total\"),\n", + " (eda.ORDER_COLS, \"orders_amt_total\"),\n", + "]:\n", + " df[name] = df[cols].sum(axis=1)\n", + "\n", + "df[\"imp_total\"] = df[\"active_imp_total\"] + df[\"passive_imp_total\"]\n", + "df[\"click_total\"] = df[\"active_click_total\"] + df[\"passive_click_total\"]\n", + "\n", + "client = df.groupby(\"id\").agg(\n", + " {\n", + " \"active_imp_total\": \"sum\",\n", + " \"passive_imp_total\": \"sum\",\n", + " \"active_click_total\": \"sum\",\n", + " \"passive_click_total\": \"sum\",\n", + " \"orders_amt_total\": \"sum\",\n", + " \"imp_total\": \"sum\",\n", + " \"click_total\": \"sum\",\n", + " \"age\": \"median\",\n", + " \"gender_cd\": lambda s: s.mode().iat[0],\n", + " \"device_platform_cd\": lambda s: s.mode().iat[0],\n", + " }\n", + ")\n", + "\n", + "client[\"has_order\"] = (client[\"orders_amt_total\"] > 0).astype(int)\n", + "client[\"ctr_all\"] = eda.safe_divide(client[\"click_total\"], client[\"imp_total\"])\n", + "client[\"cr_click2order\"] = eda.safe_divide(client[\"orders_amt_total\"], client[\"click_total\"])\n", + "client.head()\n" + ], "outputs": [ { "data": { + "text/plain": [ + " active_imp_total passive_imp_total active_click_total \\\n", + "id \n", + "1 33.0 35.0 14.0 \n", + "2 27.0 89.0 19.0 \n", + "3 57.0 236.0 37.0 \n", + "4 20.0 37.0 14.0 \n", + "5 23.0 20.0 13.0 \n", + "\n", + " passive_click_total orders_amt_total imp_total click_total age \\\n", + "id \n", + "1 3.0 0 68.0 17.0 58.0 \n", + "2 4.0 3 116.0 23.0 54.0 \n", + "3 0.0 2 293.0 37.0 70.0 \n", + "4 1.0 0 57.0 15.0 43.0 \n", + "5 3.0 1 43.0 16.0 46.0 \n", + "\n", + " gender_cd device_platform_cd has_order ctr_all cr_click2order \n", + "id \n", + "1 M Android 0 0.250000 0.000000 \n", + "2 M Android 1 0.198276 0.130435 \n", + "3 F Android 1 0.126280 0.054054 \n", + "4 F Android 0 0.263158 0.000000 \n", + "5 M Android 1 0.372093 0.062500 " + ], "text/html": [ "
\n", "