{
"cells": [
{
"cell_type": "markdown",
"id": "b62313a3",
"metadata": {},
"source": [
"# Платформа и вероятность заказа\n",
"\n",
"**Вопрос:** даёт ли платформа (Android vs iOS) прирост заказа при одинаковом объёме коммуникаций?\n",
"\n",
"**Гипотеза:** при контроле показов/кликов Android-клиенты конвертируются выше."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "8c8f09b1",
"metadata": {
"execution": {
"iopub.execute_input": "2025-12-12T19:12:03.874747Z",
"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"
}
},
"outputs": [],
"source": [
"import sqlite3\n",
"from pathlib import Path\n",
"import sys\n",
"import numpy as np\n",
"import pandas as pd\n",
"import seaborn as sns\n",
"import matplotlib.pyplot as plt\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.preprocessing import StandardScaler, OneHotEncoder\n",
"from sklearn.compose import ColumnTransformer\n",
"from sklearn.pipeline import Pipeline\n",
"from sklearn.linear_model import LogisticRegression\n",
"from sklearn.metrics import roc_auc_score\n",
"\n",
"sns.set_theme(style=\"whitegrid\")\n",
"plt.rcParams[\"figure.figsize\"] = (10, 5)\n",
"\n",
"project_root = Path.cwd().resolve()\n",
"while not (project_root / \"preanalysis\").exists() and project_root.parent != project_root:\n",
" project_root = project_root.parent\n",
" project_root = project_root.parent\n",
"sys.path.append(str(project_root / \"preanalysis\"))\n",
"import eda_utils as eda\n",
"\n",
"db_path = project_root / \"dataset\" / \"ds.sqlite\"\n",
"conn = sqlite3.connect(db_path)\n",
"df = pd.read_sql_query(\"select * from communications\", conn, parse_dates=[\"business_dt\"])\n",
"conn.close()\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "67ed5210",
"metadata": {
"execution": {
"iopub.execute_input": "2025-12-12T19:12:10.521535Z",
"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"
}
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" active_imp_total | \n",
" passive_imp_total | \n",
" active_click_total | \n",
" passive_click_total | \n",
" orders_amt_total | \n",
" imp_total | \n",
" click_total | \n",
" age | \n",
" gender_cd | \n",
" device_platform_cd | \n",
" has_order | \n",
" ctr_all | \n",
" cr_click2order | \n",
"
\n",
" \n",
" | id | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
" | \n",
"
\n",
" \n",
" \n",
" \n",
" | 1 | \n",
" 33.0 | \n",
" 35.0 | \n",
" 14.0 | \n",
" 3.0 | \n",
" 0 | \n",
" 68.0 | \n",
" 17.0 | \n",
" 58.0 | \n",
" M | \n",
" Android | \n",
" 0 | \n",
" 0.250000 | \n",
" 0.000000 | \n",
"
\n",
" \n",
" | 2 | \n",
" 27.0 | \n",
" 89.0 | \n",
" 19.0 | \n",
" 4.0 | \n",
" 3 | \n",
" 116.0 | \n",
" 23.0 | \n",
" 54.0 | \n",
" M | \n",
" Android | \n",
" 1 | \n",
" 0.198276 | \n",
" 0.130435 | \n",
"
\n",
" \n",
" | 3 | \n",
" 57.0 | \n",
" 236.0 | \n",
" 37.0 | \n",
" 0.0 | \n",
" 2 | \n",
" 293.0 | \n",
" 37.0 | \n",
" 70.0 | \n",
" F | \n",
" Android | \n",
" 1 | \n",
" 0.126280 | \n",
" 0.054054 | \n",
"
\n",
" \n",
" | 4 | \n",
" 20.0 | \n",
" 37.0 | \n",
" 14.0 | \n",
" 1.0 | \n",
" 0 | \n",
" 57.0 | \n",
" 15.0 | \n",
" 43.0 | \n",
" F | \n",
" Android | \n",
" 0 | \n",
" 0.263158 | \n",
" 0.000000 | \n",
"
\n",
" \n",
" | 5 | \n",
" 23.0 | \n",
" 20.0 | \n",
" 13.0 | \n",
" 3.0 | \n",
" 1 | \n",
" 43.0 | \n",
" 16.0 | \n",
" 46.0 | \n",
" M | \n",
" Android | \n",
" 1 | \n",
" 0.372093 | \n",
" 0.062500 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"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 "
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"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"
]
},
{
"cell_type": "markdown",
"id": "ee977b3f",
"metadata": {},
"source": [
"## Заказы по платформам"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "3cb9ed5d",
"metadata": {
"execution": {
"iopub.execute_input": "2025-12-12T19:12:13.024492Z",
"iopub.status.busy": "2025-12-12T19:12:13.024166Z",
"iopub.status.idle": "2025-12-12T19:12:13.288887Z",
"shell.execute_reply": "2025-12-12T19:12:13.287256Z"
}
},
"outputs": [
{
"data": {
"image/png": "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vXtt6mZ9FnFxcVqwYIHOnz9vPRN+8uRJ7du3T48++qhKly5tbVOzZk01b95c33//vV1s3bp10w8//KBTp05Junx2OjAwUNWqVbvm+5QXf/zxh86cOaM+ffqoaNGi1vL7779fvr6+OU4ldISZ78yV7/358+eVkJCg++67T2lpaYqNjc3T/nbs2CFJNmfks65aZf1XkoKDg+Xp6Wmtv337dmVkZOjxxx+3GRs9evRQyZIl7T63IkWKqFevXtbXHh4e6tWrl86cOWM3Xtq0aSMXFxd98803ki5Pv/vvv//0wAMP5PpeXGscSjdu7ADOgilMwC3ixIkTKlKkiKkE4sSJE3Y/pCVZp9icOHFCfn5+1vLk5GR5enrm2mdgYKAWL16sCRMm6IknnlDJkiVNz8/P8tJLL+m3335T0aJFbeZdXy05OVmVKlUy3e9nn32mgwcP6r333tO6detstv3zzz8yDEMdOnTItu3V06diY2Ov+aPdrLi4OFWoUEElS5a0Ka9Ro4Z1+5XmzZtns56kZcuWeu6553Ldx9GjR+Xq6mrtM6927NihwYMHS5JKliypqKgoBQYGWrefOHFCUVFR+uabb5SYmGjT9vz58zavU1NTNWjQIJ0+fdrmR/2Vzp07p5iYGK1fv15nzpyx2ZacnGzz+p9//rH++HN3d9drr71mfX3ixAlJUvXq1e32UaNGDW3dulWpqak247pmzZq69957tWbNGj3xxBP69NNPFRERof/++y+ntydfcovN19dXv/zyS4HuTzL3HT5w4IDee+897dy50+6zu/q9v5Z///1X7u7u1/z3yMXFRRUqVLCuN8p6b668k5x0OTG466677L4TFSpUsDuurB/tcXFxNmO1SJEi6tKli1atWqVOnTpp1apV6tChg933T8rbOJRu3NgBnAUJBHCLOHz4sKpUqZLtegFHnTp1SpUrV861TufOnfXnn39q0aJF+vjjj/O1n71792rmzJkaP368Xn31VX300Uc5xpPb3P0rpaena/r06erWrVu2P9gsFotcXFw0Z84cubm52W2/+sdJ5cqV7ea4b9y4Md/HnBcPP/ywHnnkEVksFh07dkwzZ85URESEFixYYOpqQn4EBAToww8/VGJioj777DO99NJLuuOOOxQQEKDMzEwNGDBAiYmJ1jUrnp6eio+P1+jRo2WxWGz6Onv2rDw9PTV79mxFRkbqgw8+0NNPP21TZ8SIEdq1a5cGDRqkWrVqydPTUxaLRU888YTdwvJKlSrpww8/VEpKir799ltNnDhRd955p9q0aZPv4+3WrZuWLl2qevXq6fTp0woNDdWHH36Y7/6cwblz55SRkaHy5cvnWCcpKUn9+vVTyZIlNXz4cFWtWlVFixbV3r17NXXqVLvP8lrS09PzVP9GrRPo1q2bHn30UcXGxmrjxo2aOXNmtvXyMg6v7PtWGztATkgggFtAenq69u3bp3bt2pmqX6lSJR0+fNiuPGuawpVn9zMyMnT06FG1bNky1z5dXV314osv6u+//9bx48f12muv6fTp03r++edNH8ebb76ptm3bys3NTREREfrkk0/Uo0cPmzr//fefUlJS7M5Q5mTp0qVKSEjQsGHDst2etQi3SpUq2SYYV/P09FTz5s1tyq6+s4tZlStX1o4dO3T+/Hmbs6BZn8PVSdtdd91ls+9SpUrp2Wef1W+//aYGDRpku4+qVavKYrHo0KFDqlWrVp5jLFOmjHWfHTt2VKdOnTRv3jy99957+vvvv/XPP//o7bff1iOPPGJts23btmz7Kl68uObMmaMaNWooPDxcs2fPVmhoqPXqSGJionbs2KFhw4bZJBb//PNPjv1lxda+fXvFxcVp5syZatOmjXUM5zTOy5Qpk+0Z+YceekiTJ0/WhAkT1LFjx2zPTjvqytiuvpp1+PDhPF1dMyNrSmJuV6F++ukn61n3xo0bW8uvvDNaXpQvX14ZGRk6e/ZsjlMRpcvTC0+dOmWdFpd17LGxsbrrrrus9dLT03X8+HG7797JkyftriRljZfsTnpk3cVsxIgRKlOmjJo1a6affvrJpk5ex2GWGzF2AGfBGgjgFvD5558rPT3d9NSa1q1ba/fu3dq1a5e1LDU1VStWrFDlypV1zz33WMu//vprXbhwQc2aNbtmv4sWLdLOnTs1ZcoUNW/e3GauvBlZazLuv/9+de7cWVOmTNHp06dt6nzxxReSZCqelJQUzZ49W+Hh4Tmefe3QoYPc3NwUExNjd2bRMIzr+gyNVq1aKTMzU0uWLLEpz7qi0KpVq1zbZ90qNbezve3atZOrq6tmzJhhdxY5pzOpObl48aJSU1Ot+8uao35lP4Zh5HjlyMfHx/oj9plnntEdd9yhV155xdo+uytAkrRw4cJrxpaZmamkpCRrbBUqVFCtWrW0Zs0am6l0f//9t7Zt26bWrVtn20/p0qXVtm1b7d+/X926dbvmfvOjbt26Klu2rJYvX27z2X3//fc6dOiQ7r///gLd3/r16+Xu7p7tnZKyZPdZpqena+nSpfnaZ9Z3+crb/u7evdvmv9LlKXIpKSnW+s2bN5e7u7sWLVpkE8vKlSuVnJxs97ldunTJ5upfenq6Pv74Y/n4+KhOnTrZxtatWzft379fXbt2zfbKXX7H4Y0YO4Cz4AoEcBNLTU3V4sWLNWPGDLm5uckwDK1du9amzunTp5Wamqq1a9cqODhY5cqV05AhQ/TFF19o8ODBCgsLk7e3t9asWaPjx48rOjparq6uSktLU1RUlJYtW6YGDRpcc8rQgQMHNGXKFD399NM2iyTz6+WXX9YDDzyg8ePHa/r06Tp9+rSioqK0cuVKde7c2dSc/r1796pMmTLWOfzZqVq1qkaMGKFp06YpLi5O7dq1U4kSJXT8+HFt3rxZPXv21KBBgxw+nuyEhISoadOmevfddxUXFyd/f39t27ZNX3/9tcLDw1W1alWb+vv379fatWtlGIaOHTumRYsW6Y477lDdunVz3Mfdd9+toUOHaubMmXrsscfUoUMHeXh4aM+ePapQoYKeffbZbNslJydr8ODBatmypSpUqKDExEStXbtWp06dUpcuXSRdnqdetWpVvf3224qPj1fJkiX15Zdfmlr7UqxYMY0fP179+/fX0qVL1bdvX5UsWVKNGzfW3LlzlZGRoYoVK2rbtm3ZngXv27evmjRpokqVKiklJUVffvml/vzzT+vtRqXLtxoePHiwevXqpe7du1tv41qqVCm7qVNXmjRpksaOHWtqPVF+uLu767nnntOYMWPUr18/de7c2Xob18qVK6t///4Fsp9//vlH0dHRWrdunYYMGZLrGfEGDRrI29tbo0ePVlhYmFxcXKxjLT+aNWumBg0aaPz48YqLi5Obm5v1OR1fffWVXF1ddccdd2jevHmqUqWKOnfuLOlykhkREaGYmBg98cQTCgkJ0eHDh7V06VIFBARYx16WChUqaM6cOYqLi1O1atW0fv167du3T+PHj7e53euVevbsqU6dOqlUqVLZbs/LOLza9R47gLMggQBuYgkJCZo2bZr19dixY3Os+8ILL+ijjz5SuXLlVK5cOS1fvlxTpkzR4sWLdfHiRfn7+2v27NnWs59JSUnasGGDevbsqeHDh+f6gLr09HQ9++yzqlu3rs09/R1RtmxZjRkzRi+++KK++eYblS5dWjt37tRTTz2Vp30MHTr0mlMJhgwZomrVqmnBggWaMWOGJOmOO+5QcHCw3cPPCpKrq6tmzZqlqKgorV+/XqtXr1blypX1wgsvaODAgXb1N23apE2bNsnFxUXlypVT06ZNNWLECOtzJXLyzDPPqEqVKlq8eLHeffddFS9eXP7+/nr44YdzbOPh4aE777xTK1as0JkzZ+Tl5aV77rlHs2fPtq4xcHd31+zZs/Xmm2/q/fffV9GiRdW+fXv17ds3176zBAUFqWvXrnrnnXfUrl07VaxYUdOmTdP48eO1dOlSGYah4OBgzZkzx24K3b333qvPPvtMJ0+elKenp6pVq2Y3lap58+aaO3euoqKiFBUVpSJFiqhx48Z6/vnnbabHXK1YsWI2d+G5Hrp27apixYppzpw5mjp1qjw9PdWuXTs9//zzDt3J7Ep79+7V33//rZdfftnuTl9XK1OmjGbPnq23335b7733nry8vNSlSxcFBQXlK4F2cXFRTEyMXn75Zc2fP19+fn566aWX9Mwzz2jo0KHavn27Vq5cqVq1amnixIk27/ewYcPk4+OjxYsXa+LEifL29lbPnj01atQou6TA29tbkyZN0ptvvqkVK1aoXLlyGjt2rPV5F9kxc7MJs+Pwajdi7ADOwMXI7+kFAIXu+PHjatu2rT766CM1bdrU4XoAcL3s2bNH3bt318SJE9W1a1eH+wsLC9PZs2ft7qwG4PpjDQQAAAAA00gggJuYp6enHnroIZUrV65A6gEAAFwLayCAm5iPj4+mTp1aYPUAAACuhTUQAAAAAExjChMAAAAA00ggAAAAAJjGGogc7Nq1S4Zh5PggGgAAAOBWkZGRIRcXFzVo0OCadUkgcmAYRr6fwAkAAADcTPLyu5cEIgdZVx4CAgIKORIAAADg+tqzZ4/puk63BuLQoUMaMGCAAgMDFRwcrMmTJys9Pd1U2/j4eL344otq1qyZ6tWrp9DQUH322WfXOWIAAADg9uFUVyASExMVHh6uatWqKTo6WvHx8Zo0aZIuXLigsWPH5tr25MmT6tWrl6pXr67x48erZMmSOnDggOnkAwAAAMC1OVUCsXz5cqWkpCgmJkalS5eWJGVmZmrcuHGKiIhQxYoVc2w7ZcoU3XHHHZo7d67c3NwkSUFBQTcibAAAAOC24VRTmLZs2aKgoCBr8iBJoaGhslgs2rZtW47tzp8/rw0bNuixxx6zJg8AAAAACp5TJRCxsbHy9fW1KfPy8lL58uUVGxubY7u9e/cqIyNDRYoUUb9+/VSnTh0FBwdrypQpysjIuN5hAwAAALcNp5rClJSUJC8vL7tyb29vJSYm5tju9OnTkqRXXnlFPXv21NNPP63du3crKipKrq6uevbZZ/MVj2EYSk1NzVdbAAAA4GZhGIZcXFxM1XWqBCK/LBaLJKl58+YaPXq0JKlZs2ZKSUnR/PnzFRkZqWLFiuW534yMDO3bt69AYwUAAACckYeHh6l6TpVAeHl5KTk52a48MTFR3t7eubaTLicNVwoKCtLs2bN15MgR+fv75zked3d33XPPPXluBwAAANxMDh48aLquUyUQvr6+dmsdkpOTderUKbu1EVe61o/8ixcv5iseFxcXeXp65qstAAAAcLMwO31JcrJF1K1atdL27duVlJRkLdu4caNcXV0VHBycY7vKlSvLz89P27dvtynfvn27ihUrxlUEAAAAoIA4VQLRu3dvlShRQpGRkdq6datWrVqlyZMnq3fv3jbPgAgPD1f79u1t2o4cOVLffPONJkyYoG3btmn27NmaP3+++vfvz1UEAAAAoIA41RQmb29vLVy4UOPHj1dkZKRKlCih7t27a+TIkTb1LBaLMjMzbcpCQkL0zjvvaObMmVq2bJkqVKigYcOGaciQITfyEAAAAIBbmothGEZhB+GM9uzZI0kKCAhwuC+LxZCrq/l5Zbi9MV4AAMCNlpffvk51BeJW5erqohnLtinuZM7PsgAkqXIFb0X2yXm9DwAAQGEjgbhB4k4m6p+4s4UdBgAAAOAQp1pEDQAAAMC5kUAAAAAAMI0EAgAAAIBpJBAAAAAATCOBAAAAAGAaCQQAAICTsVh4TBfMu9Hjhdu4AgAAOBmeIQWzCuMZUiQQAAAATohnSMFZMYUJAAAAgGkkEAAAAABMI4EAAAAAYBoJBAAAAADTSCAAAAAAmEYCAQAAAMA0EggAAAAAppFAAAAAADCNBAIAAACAaSQQAHJlsRiFHQJuIowXALj1FSnsAAA4N1dXF81Ytk1xJxMLOxQ4ucoVvBXZJ7iww7CyWAy5uroUdhi4iTBmAHNIIABcU9zJRP0Td7awwwDyhOQXeeFsCTDgzEggAAC3LJJfACh4rIEAAAAAYBoJBAAAAADTSCAAAAAAmEYCAQAAAMA0EggAAAAAppFAAAAAADCNBAIAAACAaSQQAAAAAEwjgQAAAABgGgkEAAAAANNIIAAAAACYVqSwA7jaoUOH9Oabb2rXrl0qUaKEHn74YY0YMUIeHh65tgsJCVFcXJxd+e7du1W0aNHrFS4AAABwW3GqBCIxMVHh4eGqVq2aoqOjFR8fr0mTJunChQsaO3bsNdt37NhRAwcOtCm7VuIBAAAAwDynSiCWL1+ulJQUxcTEqHTp0pKkzMxMjRs3ThEREapYsWKu7cuVK6fAwMDrHygAAABwm3KqNRBbtmxRUFCQNXmQpNDQUFksFm3btq3wAgMAAAAgyckSiNjYWPn6+tqUeXl5qXz58oqNjb1m+88//1x169ZVgwYNNHjwYO3fv/96hQoAAADclpxqClNSUpK8vLzsyr29vZWYmJhr25CQENWrV0+VKlXSsWPHNHv2bD322GNas2aN7rrrrnzFYxiGUlNT89U2i4uLi4oXL+5QH7j9pKWlyTCMwg6D8Yt8cYbxy9hFfjF+cbNydOwahiEXFxdTdZ0qgXDEK6+8Yv37fffdp+DgYIWGhmrevHl6/fXX89VnRkaG9u3b51BcxYsXV+3atR3qA7efw4cPKy0trbDDYPwiX5xh/DJ2kV+MX9ysCmLsmr35kFMlEF5eXkpOTrYrT0xMlLe3d576qlChgho1aqS9e/fmOx53d3fdc889+W4vyXQmB1ypevXqhX4GTGL8In+cYfwydpFfjF/crBwduwcPHjRd16kSCF9fX7u1DsnJyTp16pTd2ogbwcXFRZ6enjd8vwCXrnEzY/ziZsb4xc3K0bGbl8TVqRZRt2rVStu3b1dSUpK1bOPGjXJ1dVVwcHCe+oqPj9cvv/yigICAgg4TAAAAuG051RWI3r17a9GiRYqMjFRERITi4+M1efJk9e7d2+YZEOHh4Tpx4oQ2bdokSVq3bp2+/fZbtW7dWhUqVNCxY8f0wQcfyM3NTQMGDCiswwEAAABuOU6VQHh7e2vhwoUaP368IiMjVaJECXXv3l0jR460qWexWJSZmWl9XaVKFZ08eVJvvfWWkpOTVapUKTVr1kzDhw/P9x2YAAAAANhzqgRCkmrUqKEFCxbkWmfRokU2rwMDA+3KAAAAABQ8p1oDAQAAAMC5kUAAAAAAMI0EAgAAAIBpJBAAAAAATCOBAAAAAGAaCQQAAAAA00ggAAAAAJhGAgEAAADANBIIAAAAAKaRQAAAAAAwjQQCAAAAgGkkEAAAAABMI4EAAAAAYBoJBAAAAADTSCAAAAAAmEYCAQAAAMA0EggAAAAAppFAAAAAADCNBAIAAACAaSQQAAAAAEwjgQAAAABgGgkEAAAAANNIIAAAAACYRgIBAAAAwDQSCAAAAACmkUAAAAAAMI0EAgAAAIBpJBAAAAAATCOBAAAAAGAaCQQAAAAA00ggAAAAAJhGAgEAAADANBIIAAAAAKaRQAAAAAAwzekSiEOHDmnAgAEKDAxUcHCwJk+erPT09Dz1sWDBAvn7+ysiIuI6RQkAAADcnooUdgBXSkxMVHh4uKpVq6bo6GjFx8dr0qRJunDhgsaOHWuqj1OnTmnGjBkqW7bsdY4WAAAAuP04VQKxfPlypaSkKCYmRqVLl5YkZWZmaty4cYqIiFDFihWv2ceUKVMUEhKiEydOXOdoAQAAgNuPU01h2rJli4KCgqzJgySFhobKYrFo27Zt12z/v//9T5s3b9azzz57HaMEAAAAbl9OlUDExsbK19fXpszLy0vly5dXbGxsrm0zMzM1fvx4DR06VBUqVLieYQIAAAC3LaeawpSUlCQvLy+7cm9vbyUmJubadunSpUpLS1P//v0LLB7DMJSamupQHy4uLipevHgBRYTbRVpamgzDKOwwGL/IF2cYv4xd5BfjFzcrR8euYRhycXExVdepEoj8OnPmjKKiovT222/Lw8OjwPrNyMjQvn37HOqjePHiql27dgFFhNvF4cOHlZaWVthhMH6RL84wfhm7yC/GL25WBTF2zf6OdqoEwsvLS8nJyXbliYmJ8vb2zrHd9OnT5e/vr/vuu09JSUmSpEuXLunSpUtKSkqSp6enihTJ+6G6u7vrnnvuyXO7K5nN5IArVa9evdDPgEmMX+SPM4xfxi7yi/GLm5WjY/fgwYOm6zpVAuHr62u31iE5OVmnTp2yWxtxpcOHD+vnn39W48aN7bY1btxYc+bMUatWrfIcj4uLizw9PfPcDnAUl65xM2P84mbG+MXNytGxm5fE1akSiFatWmn27Nk2ayE2btwoV1dXBQcH59jupZdesl55yPLWW2+pWLFiGjVqlPz9/a9r3AAAAMDtIt8JhGEYSklJkbu7u4oWLVogwfTu3VuLFi1SZGSkIiIiFB8fr8mTJ6t37942z4AIDw/XiRMntGnTJklSrVq17Pry8vKSp6enmjZtWiCxAQAAAHDgNq4ZGRlq0qSJPvroowILxtvbWwsXLpSbm5siIyM1bdo0de/eXaNHj7apZ7FYlJmZWWD7BQAAAGBOvq9AeHh4qFy5cgV61yNJqlGjhhYsWJBrnUWLFl2zHzN1AAAAAOSNQw+Se/TRR7V27Vqlp6cXVDwAAAAAnJhDi6j9/f319ddf68EHH9Sjjz6qypUrq1ixYnb1OnTo4MhuAAAAADgJhxKIUaNGWf8+ffr0bOu4uLg4/DA2AAAAAM7BoQSiIBdQAwAAAHB+DiUQTZo0Kag4AAAAANwECuRBcunp6dq7d6/OnDmjhg0bysfHpyC6BQAAAOBkHLoLk3R5GlOLFi302GOPadiwYdq/f78kKSEhQU2bNtXKlSsdDhIAAACAc3AogVi1apXeeusttWzZUhMmTJBhGNZtPj4+atasmdavX+9wkAAAAACcg0MJxIcffqi2bdtq2rRpatOmjd32OnXq6MCBA47sAgAAAIATcSiBOHLkiFq1apXj9tKlS+vcuXOO7AIAAACAE3EogfDy8tLZs2dz3H7w4EGVL1/ekV0AAAAAcCIOJRCtWrXSihUrlJSUZLftwIED+uSTTxQSEuLILgAAAAA4EYdu4zpixAj17NlTDz74oNq0aSMXFxetWbNGq1at0ldffaXy5cvrqaeeKqhYAQAAABQyh65AVKxYUatXr1bLli21YcMGGYahtWvX6ttvv1Xnzp21YsUKngkBAAAA3EIcfpBc2bJlNWHCBE2YMEEJCQmyWCzy8fGRq6vDj5gAAAAA4GQK5EnUWbjaAAAAANza8pRAxMTE5HkHLi4uioyMzHM7AAAAAM7H4QTCxcVFkmyeQp1VbhgGCQQAAABwC8lTAvHXX3/ZvI6Pj9eQIUN07733Kjw8XNWrV5ckxcbGauHChTp06JDef//9gosWAAAAQKFyaKXzuHHjdPfdd2vq1KkKCAhQyZIlVbJkSdWrV0/Tpk1T1apV9cYbbxRUrAAAAAAKmUMJxM6dO9WsWbMctzdr1kw7duxwZBcAAAAAnIhDCUTRokX122+/5bh9165dKlq0qCO7AAAAAOBEHLqN60MPPaRFixbJy8tL/fr1U9WqVSVJR48e1aJFi7Ru3TqFhYUVSKAAAAAACp9DCcRzzz2ns2fPavHixVqyZIn14XEWi0WGYahz58567rnnCiRQAAAAAIXPoQTCw8NDU6ZM0aBBg7RlyxbFxcVJkipXrqxWrVqpZs2aBRIkAAAAAOeQ7wQiLS1Nzz//vDp06KAuXbqQLAAAAAC3gXwvoi5evLi2b9+uCxcuFGQ8AAAAAJyYQ3dhatSokXbt2lVQsQAAAABwcg4lEGPHjtUvv/yid999V//9919BxQQAAADASTm0iLpLly7KzMzUBx98oA8++EBubm7y8PCwqePi4qJffvnFoSABAAAAOAeHEoiOHTvKxcWloGIBAAAA4OQcSiAmTZpUUHEAAAAAuAk4tAYCAAAAwO3FoSsQknT+/HktWLBA3333nU6cOCFJqlSpku6//371799fJUuWdDhIAAAAAM7BoSsQ8fHxeuSRRxQTE6PU1FQ1bNhQDRs2VFpammJiYvToo4/q5MmTeerz0KFDGjBggAIDAxUcHKzJkycrPT39mu2ee+45dejQQYGBgWrcuLH69u2rrVu35vfQAAAAAGTDoSsQU6dO1enTp/X++++rdevWNtu+//57jRgxQtOmTdPbb79tqr/ExESFh4erWrVqio6OVnx8vCZNmqQLFy5o7NixubbNyMhQ//79Va1aNV28eFErV67UkCFD9NFHH+m+++7L9zECAAAA+H8OJRA//PCDwsPD7ZIHSWrdurXCwsK0YsUK0/0tX75cKSkpiomJUenSpSVJmZmZGjdunCIiIlSxYsUc206fPt3mdatWrdS2bVutXbuWBAIAAAAoIA5NYUpLS1PZsmVz3F6uXDmlpaWZ7m/Lli0KCgqyJg+SFBoaKovFom3btuUpNjc3N5UqVUoZGRl5agcAAAAgZw4lEDVq1NAXX3yR7RqFjIwMffHFF6pRo4bp/mJjY+Xr62tT5uXlpfLlyys2Nvaa7Q3D0KVLl3T27FnNmzdPR44cUa9evUzvHwAAAEDuHJrCNHjwYI0cOVI9evTQY489pmrVqkmSDh8+rOXLl2v//v169913TfeXlJQkLy8vu3Jvb28lJiZes/3KlSv1yiuvSJI8PT317rvvqkGDBqb3fzXDMJSamprv9tLlJ3EXL17coT5w+0lLS5NhGIUdBuMX+eIM45exi/xi/OJm5ejYNQzD9AOiHUogQkNDlZaWpmnTpum1116z7tQwDJUtW1ZvvfWWOnXq5Mgu8qRt27aqWbOmzp49q40bN2rEiBGKiYnJdo2GGRkZGdq3b59DMRUvXly1a9d2qA/cfg4fPpyn6X/XC+MX+eEM45exi/xi/OJmVRBj18PDw1Q9h58D0bVrV3Xp0kV//PGHzXMg6tatqyJF8ta9l5eXkpOT7coTExPl7e19zfY+Pj7y8fGRdHkRdWJioqZMmZLvBMLd3V333HNPvtpmMZvJAVeqXr16oZ8Bkxi/yB9nGL+MXeQX4xc3K0fH7sGDB03XdTiBkKQiRYooMDBQgYGBudZLSEhQjx49NHXq1GynFvn6+tqtdUhOTtapU6fs1kaYUadOHW3ZsiXP7bK4uLjI09Mz3+2B/OLSNW5mjF/czBi/uFk5Onbzkrg6tIg6rywWi+Li4nThwoVst7dq1Urbt29XUlKStWzjxo1ydXVVcHBwnvf3yy+/6K677sp3vAAAAABsFcgViILSu3dvLVq0SJGRkYqIiFB8fLwmT56s3r172zwDIjw8XCdOnNCmTZskSd99953WrFmj+++/X3feeacSExO1bt06bd26Ve+8805hHQ4AAABwy3GqBMLb21sLFy7U+PHjFRkZqRIlSqh79+4aOXKkTT2LxaLMzEzr67vuukvp6emaNm2azp49qzJlysjf31+LFi1SkyZNbvRhAAAAALcsp0ogpMvPlliwYEGudRYtWmTXZubMmdcxKgAAAADSDV4DAQAAAODmRgIBAAAAwDQSCAAAAACm3dAEwt3dXY0bNzb1UDgAAAAAzqfAF1GnpaXpiy++UHp6ulq3bq3KlStbt3l7e9stgAYAAABw83AogXjppZe0e/durVu3TpKUnp6unj176sCBA5KkUqVKaeHChapdu7bjkQIAAAAodA5NYfrxxx/Vvn176+t169bpwIEDmjp1qtatW6dy5copJibG4SABAAAAOAeHEojTp0/bTFHavHmz6tatqwcffFD33HOPevbsqd27dzscJAAAAADn4FACUbx4cSUnJ0uSLl26pJ9++kktWrSwbi9RooR1OwAAAICbn0NrIOrUqaMVK1aoadOm+uabb5SSkqKQkBDr9qNHj6ps2bIOBwkAAADAOTiUQIwYMUJPPPGEunXrJsMw1LFjR9WrV8+6fdOmTWrYsKHDQQIAAABwDg4lEAEBAdqwYYN+/fVXeXl5qUmTJtZtSUlJeuyxx2zKAAAAANzcHH4OhI+Pj9q1a2dX7uXlpfDwcEe7BwAAAOBECuxBcufPn9f58+dlsVjstlWqVKmgdgMAAACgEDmcQCxdulQLFizQsWPHcqyzb98+R3cDAAAAwAk4dBvXZcuW6Y033lDVqlU1YsQIGYah8PBwDRkyROXKlVPNmjU1YcKEgooVAAAAQCFzKIFYvHixWrRooblz56pnz56SpNatW2vkyJFav369UlJSdO7cuYKIEwAAAIATcCiBOHr0qNq0aSNJcnd3lyRlZGRIkkqVKqXu3btr6dKlDoYIAAAAwFk4lECUKlVKmZmZkqSSJUuqePHi+u+//6zbS5QoodOnTzsWIQAAAACn4VACce+99+qvv/6yvq5fv76WLVum+Ph4/fvvv/r4449VrVo1R2MEAAAA4CQcSiC6dOmiAwcOKD09XZI0bNgwHTp0SPfff79CQkJ0+PBhjRgxoiDiBAAAAOAEHLqNa7du3dStWzfr60aNGumLL77Q119/rSJFiig4OFjVq1d3OEgAAAAAzqHAHiSXkpKipKQkubm5qUOHDtbyEydO8CA5AAAA4BbhUAJx8eJFxcTEaOXKlbnerpUHyQEAAAC3BocSiNdff11r1qxRu3bt1KhRI3l7exdUXAAAAACckEMJxKZNm9SjRw+98cYbBRUPAAAAACfm0F2YXFxcVLt27YKKBQAAAICTcyiBaNu2rbZv315QsQAAAABwcnlKIM6dO2fz56mnntLx48f16quv6o8//lBCQoJdndwWVwMAAAC4ueRpDUSzZs3k4uJiU2YYhv7880+tXLkyx3bchQkAAAC4NeQpgYiMjLRLIAAAAADcPvKUQAwbNux6xQEAAADgJuDQImoAAAAAtxcSCAAAAACmOfQguevh0KFDevPNN7Vr1y6VKFFCDz/8sEaMGCEPD48c25w8eVILFizQtm3bdPToUZUqVUqNGzfWqFGjVLly5RsYPQAAAHBrc6oEIjExUeHh4apWrZqio6MVHx+vSZMm6cKFCxo7dmyO7fbu3atNmzapW7duql+/vs6ePatZs2apR48eWrdunXx8fG7gUQAAAAC3LqdKIJYvX66UlBTFxMSodOnSkqTMzEyNGzdOERERqlixYrbtGjVqpA0bNqhIkf8/nIYNG+r+++/XmjVrNHDgwBsRPgAAAHDLc6o1EFu2bFFQUJA1eZCk0NBQWSwWbdu2Lcd2Xl5eNsmDJN1xxx3y8fHRyZMnr1e4AAAAwG3HqRKI2NhY+fr62pR5eXmpfPnyio2NzVNfhw8f1pkzZ1SjRo2CDBEAAAC4rTnVFKakpCR5eXnZlXt7eysxMdF0P4Zh6M0331SFChXUuXPnfMdjGIZSU1Pz3V6SXFxcVLx4cYf6wO0nLS1NhmEUdhiMX+SLM4xfxi7yi/GLm5WjY9cwDNMPjHaqBKKgREdHa+fOnZo7d648PT3z3U9GRob27dvnUCzFixdX7dq1HeoDt5/Dhw8rLS2tsMNg/CJfnGH8MnaRX4xf3KwKYuzmdtfTKzlVAuHl5aXk5GS78sTERHl7e5vqY8WKFZoxY4YmTJigoKAgh+Jxd3fXPffc41AfZjM54ErVq1cv9DNgEuMX+eMM45exi/xi/OJm5ejYPXjwoOm6TpVA+Pr62q11SE5O1qlTp+zWRmRn06ZNev311zV8+HB1797d4XhcXFwcuoIB5BeXrnEzY/ziZsb4xc3K0bGbl8TVqRZRt2rVStu3b1dSUpK1bOPGjXJ1dVVwcHCubX/88UeNGjVKPXr0UGRk5PUOFQAAALgtOVUC0bt3b5UoUUKRkZHaunWrVq1apcmTJ6t37942z4AIDw9X+/btra8PHTqkyMhIVatWTQ8//LB+++0365+jR48WxqEAAAAAtySnmsLk7e2thQsXavz48YqMjFSJEiXUvXt3jRw50qaexWJRZmam9fXvv/+u5ORkJScnq0+fPjZ1H330UU2aNOmGxA8AAADc6pwqgZCkGjVqaMGCBbnWWbRokc3rrl27qmvXrtcxKgAAAACSk01hAgAAAODcSCAAAAAAmEYCAQAAAMA0EggAAAAAppFAAAAAADCNBAIAAACAaSQQAAAAAEwjgQAAAABgGgkEAAAAANNIIAAAAACYRgIBAAAAwDQSCAAAAACmkUAAAAAAMI0EAgAAAIBpJBAAAAAATCOBAAAAAGAaCQQAAAAA00ggAAAAAJhGAgEAAADANBIIAAAAAKaRQAAAAAAwjQQCAAAAgGkkEAAAAABMI4EAAAAAYBoJBAAAAADTSCAAAAAAmEYCAQAAAMA0EggAAAAAppFAAAAAADCNBAIAAACAaSQQAAAAAEwjgQAAAABgGgkEAAAAANNIIAAAAACY5nQJxKFDhzRgwAAFBgYqODhYkydPVnp6+jXbLVmyRBEREWrWrJn8/f21cePGGxAtAAAAcHtxqgQiMTFR4eHhysjIUHR0tEaOHKkVK1Zo0qRJ12y7du1anT17Vq1bt74BkQIAAAC3pyKFHcCVli9frpSUFMXExKh06dKSpMzMTI0bN04RERGqWLFirm1dXV11/PhxrVmz5sYEDAAAANxmnOoKxJYtWxQUFGRNHiQpNDRUFotF27Zty7Wtq6tTHQoAAABwS3KqX92xsbHy9fW1KfPy8lL58uUVGxtbSFEBAAAAyOJUU5iSkpLk5eVlV+7t7a3ExMQbHo9hGEpNTXWoDxcXFxUvXryAIsLtIi0tTYZhFHYYjF/kizOMX8Yu8ovxi5uVo2PXMAy5uLiYqutUCYSzycjI0L59+xzqo3jx4qpdu3YBRYTbxeHDh5WWllbYYTB+kS/OMH4Zu8gvxi9uVgUxdj08PEzVc6oEwsvLS8nJyXbliYmJ8vb2vuHxuLu765577nGoD7OZHHCl6tWrF/oZMInxi/xxhvHL2EV+MX5xs3J07B48eNB0XadKIHx9fe3WOiQnJ+vUqVN2ayNuBBcXF3l6et7w/QJcusbNjPGLmxnjFzcrR8duXhJXp1pE3apVK23fvl1JSUnWso0bN8rV1VXBwcGFGBkAAAAAycmuQPTu3VuLFi1SZGSkIiIiFB8fr8mTJ6t37942z4AIDw/XiRMntGnTJmvZnj17FBcXp4SEBEnS77//Lkny8fFRkyZNbuyBAAAAALcop0ogvL29tXDhQo0fP16RkZEqUaKEunfvrpEjR9rUs1gsyszMtClbsmSJPv30U+vr+fPnS5KaNGmiRYsWXf/gAQAAgNuAUyUQklSjRg0tWLAg1zrZJQSTJk3SpEmTrlNUAAAAACQnWwMBAAAAwLmRQAAAAAAwjQQCAAAAgGkkEAAAAABMI4EAAAAAYBoJBAAAAADTSCAAAAAAmEYCAQAAAMA0EggAAAAAppFAAAAAADCNBAIAAACAaSQQAAAAAEwjgQAAAABgGgkEAAAAANNIIAAAAACYRgIBAAAAwDQSCAAAAACmkUAAAAAAMI0EAgAAAIBpJBAAAAAATCOBAAAAAGAaCQQAAAAA00ggAAAAAJhGAgEAAADANBIIAAAAAKaRQAAAAAAwjQQCAAAAgGkkEAAAAABMI4EAAAAAYBoJBAAAAADTSCAAAAAAmEYCAQAAAMA0EggAAAAAppFAAAAAADDN6RKIQ4cOacCAAQoMDFRwcLAmT56s9PT0a7YzDEMffPCB7r//ftWrV0+9evXSb7/9dv0DBgAAAG4jTpVAJCYmKjw8XBkZGYqOjtbIkSO1YsUKTZo06Zpt58yZo6ioKPXv31/vv/++ypcvr4EDB+rYsWM3IHIAAADg9lCksAO40vLly5WSkqKYmBiVLl1akpSZmalx48YpIiJCFStWzLbdxYsX9f7772vgwIHq37+/JKlRo0bq1KmT5s2bp9dff/3GHAAAAABwi3OqKxBbtmxRUFCQNXmQpNDQUFksFm3bti3Hdr/++qvOnz+v0NBQa5mHh4fat2+vLVu2XM+QAQAAgNuKUyUQsbGx8vX1tSnz8vJS+fLlFRsbm2s7SXZta9SooRMnTujChQsFHywAAABwG3KqKUxJSUny8vKyK/f29lZiYmKu7Tw8PFS0aFGbci8vLxmGocTERBUrVixPsWRkZMgwDO3evTtP7bLj4uKizk3KK9NS1uG+cGtzc3XVnj17ZBhGYYdixfiFWc42fhm7yAvGL25WBTV2MzIy5OLiYqquUyUQziTrDTT7Rl6LV8m8JTC4vRXUuCsojF/khTONX8Yu8orxi5uVo2PXxcXl5kwgvLy8lJycbFeemJgob2/vXNulp6fr4sWLNlchkpKS5OLikmvbnDRo0CDPbQAAAIBbnVOtgfD19bVb65CcnKxTp07ZrW+4up0kHT582KY8NjZWlSpVyvP0JQAAAADZc6oEolWrVtq+fbuSkpKsZRs3bpSrq6uCg4NzbNewYUOVLFlSGzZssJZlZGToq6++UqtWra5rzAAAAMDtxKmmMPXu3VuLFi1SZGSkIiIiFB8fr8mTJ6t37942z4AIDw/XiRMntGnTJklS0aJFFRERoejoaPn4+MjPz0/Lli3TuXPnNGjQoMI6HAAAAOCW41QJhLe3txYuXKjx48crMjJSJUqUUPfu3TVy5EibehaLRZmZmTZlgwcPlmEYmj9/vhISElSrVi3NmzdPd9111408BAAAAOCW5mI4y/3KAAAAADg9p1oDAQAAAMC5kUAAAAAAMI0EAgAAAIBpJBAAAAAATCOBAAAAAGAaCQQAAAAA00ggkK0uXbrI399f//vf/wqsz6SkJPn7+2v16tUF0l90dLQaNGhwzXpPPfWUwsLCCmSfuHVlN57i4+M1duxYtW7dWnXr1lWrVq30yiuv6L///rNr/++//2rMmDEKCQlRQECAWrRoof79+2vt2rU36hBwGxs9erQefPBBm7Lff/9dTz75pJo2baqAgACFhoYqJiZGFy5csGv/22+/6YknnlBwcLDq1aunkJAQDR8+XL///vuNOgTcAq4chz/++KP8/f2tfxo0aKBHHnlEK1euVEE8QeDhhx/W6NGj7co/++wz9e7dWw0aNFCDBg3Uq1cvrVmzJts+PvvsM3Xv3l2NGjVSw4YNFRoaqpdffllnzpxxOL5bnVM9SA7O4cCBA9q/f78k6fPPP9d9991XyBFlr0ePHmrdunVhh4Fb1KFDhxQWFqZixYopMjJS1apV05EjRzR79mx98803WrRokWrUqCHpcnLcs2dPeXt7a9iwYapUqZL+++8/7dy5Uz/88IMefvjhQj4a3OqeeuoppaamWl+vX79ezz//vBo2bKhx48apTJky+vXXX/XBBx9oy5YtWrhwoYoXLy5J+uWXX/T444+rZcuWGjdunEqUKKEjR45o8+bN2r17t+rXr19Yh4WbzNXjUJImTpwoX19fJSUlaeXKlXr55Zd16dIl9e7du8D3P378eC1ZskTdunXTU089JRcXF3355ZcaPXq09uzZo1dffdVad86cOZo2bZr69++v4cOHyzAMHThwQJ9//rlOnjypsmXLFnh8txQDuMq0adOMmjVrGmFhYUaTJk2M9PT0Auk3MTHR8PPzM1atWpVjnYsXLxqZmZkFsr8sTz75pNGvX78C7RO3nqioKCMwMND6+tFHHzWCgoKMU6dO2dQ7deqUERQUZDz66KPWshUrVhh+fn5GXFycXb8FPZ6Ba/nvv/+MwMBA4/HHHzcuXbpks23Hjh2Gn5+fMXHiRGvZs88+a7Rv396urmEwfpF/O3fuNPz8/Izdu3dbyy5dumR06NDB6Ny5s8P9d+nSxXjxxRetrzdv3mz4+fkZUVFRdnWnT59u+Pn5GV9//bW1rGXLlsbo0aOz7Ztxf21MYYINwzC0bt06NWvWTAMGDNC5c+f0ww8/WLdnXZLctm2bnn32WTVo0EBt2rTRnDlz7PpasWKFQkJCVL9+fYWHh+vIkSN2dUJCQvTGG29ozpw5atOmjerVq6dz587JYrFo5syZCgkJUd26ddWpUyctX77cpm12U04OHTqkfv36KSAgQO3atdOnn35aQO8Mbic///yz9u7dq8cff1zlypWz2VauXDmFhYVp79691il+iYmJcnV1zfaMlasr/8zi+rty6sgnn3yi1NRUPfPMM3Jzc7Op16xZMzVv3lwff/yxdSpTUlKSfHx87OpKjF/kTXZT6a7k5uamWrVq6fjx45Kk7777TgMGDFBQUJAaNmyoHj16aMuWLXbtfv31V3Xt2lUBAQF68MEH9f3339vVWbhwoby9vTVw4EC7bYMGDZK3t7cWLlxoLUtKSlKFChWyjZNxf228Q7Dx66+/Ki4uTg8++KBatGih0qVLa926dXb1XnvtNVWrVk0zZsxQmzZtNHXqVJsv/bfffqtXX31VTZs2VUxMjIKCgvTMM89ku8+vvvpK3333nV5++WXNnDlTnp6emjx5smJiYvToo49q9uzZatGihV577TUtXrw4x9gvXryogQMH6vTp05o8ebKeffZZffDBB9qzZ4/jbwxuKz/99JMkqU2bNtluDwkJkXQ50ZCkOnXqyGKx6LnnntOuXbt06dKlGxMokI2ff/5ZpUuXVsOGDbPdHhISotTUVO3du1fS5fG7a9cuvffeezp06NCNDBW3oePHj1t/uB8/flxt2rTR5MmTFR0drYYNG2rIkCH68ccfrfVPnTqlQYMGycPDQ++9954GDRqkcePGKT4+3lrn0qVL2rVrl5o2baoSJUrY7bNEiRJq2rSpzb/PderU0fLly/XJJ5/o1KlT1/mobz2sgYCNdevWqWjRourQoYPc3d3VsWNHffbZZ0pJSbH5Unbo0EHDhg2TJAUFBem7777Tl19+qVatWkmSZs2apfvuu08TJ06UJLVs2VIXL17UzJkz7faZkZGhOXPmyNPTU5KUkJCgxYsXa9CgQdZ9tGjRQmfPntWMGTPUp0+fbM+UrV69WidPntSGDRtUrVo1SVLt2rXVqVMn62vAjKz/MVWqVCnb7VnlWYupg4KCNGjQIH344Yf66quvVKxYMTVq1EhdunTRww8/LBcXlxsTOKDL4/fOO+/McXvWtqxxPmjQIP3++++aNWuWZs2apdKlS6tFixbq06eP066Bw83DYrHo0qVLSk5O1scff6w9e/YoIiJCktSvXz+bek2bNtXBgwe1YsUKNW3aVNLlKwsuLi6aM2eOSpUqJUm644471L9/f2vbs2fPKj09/Zrj/uLFizp37pzKlSun1157TU8//bReeeUVSVKVKlXUpk0b9e/fX1WqVCnot+GWwxUIWF26dEkbN25U69atrV/Shx56SGlpadq0aZNN3RYtWlj/7uLioho1alh/TGVmZmrv3r1q3769TZuOHTtmu9+mTZtakwdJ2r17tzIyMtSpUyebeqGhoUpISNA///yTbT+7d+/Wvffea5Ms3H333apZs2buBw4UgBdeeEFfffWVxowZo1atWmn37t168cUX9cILLxR2aECuSpYsqfnz5+uTTz5RZGSkatasqS+//FL9+vXTJ598Utjh4SbXs2dP1alTR82aNVN0dLR69+6tyMhISZdPwrz44otq2bKlateurTp16mjr1q06fPiwtf3vv/+upk2bWn+XSJdP2pQuXdqhuPz8/LRu3Tp98MEHevzxx1WqVCktWrRIXbp00b59+xzq+3bAFQhYbdu2TQkJCWrTpo2SkpIkXf6ClS9fXuvWrdMjjzxirXvlF1mS3N3dlZycLOnyFYRLly7Jx8fHps7Vc8mzXD1vPDExMdv6Wa/PnTuXbT853TWhbNmyunjxYrZtgOxUrFhRknTixAn5+/vbbT9x4oSky2fBrnTXXXepf//+6t+/v1JSUvTMM8/os88+06BBg0hkccNUrFhRf/31V47b//33X2u9K9WrV0/16tWTJB07dkxhYWGaOnWqevTocf2CxS3v7bffVo0aNVSyZElVrlxZHh4eki5fcXjyySeVnJys4cOH6+6771bx4sUVFRVlHaPS5SlMd999t12/V/7GKFOmjDw8PGzaXe3ff/9V0aJFbRIPDw8PtW7d2npHxx9++EERERGaMWOGYmJiHD30WxpXIGD1+eefS5LGjBmjxo0bq3HjxmrSpIlOnTqlHTt2mL4vso+Pj4oUKaKEhASb8tOnT2db/+rpHVlf7qv3l9U+p7MOFSpUyDZG7ueMvGrSpIkkZbtQT7q88E+SGjdunGMfJUqU0GOPPSZJio2NLdgAgVw0btxY586d02+//Zbt9u+++06enp6qU6dOjn3cdddd6tSpk86dO5fjv92AGTVq1FBAQICqV69uTR4k6ciRI/rzzz81evRo9ejRQ02aNFFAQIDdc0rKly+f7f/Hr/yNUaRIETVo0EA//fST3W1kJSk1NVU//fSTGjRooCJFcj533rJlS9WsWZO1QCaQQECSlJaWpq+//lrt2rXTRx99ZPPnnXfe0aVLl7R+/XpTfbm5ual27dp2056+/PJLU+0DAgLk7u6ujRs32pRv2LBBZcuWzXE9Q0BAgA4cOGBzt6cjR47keiYOyE7jxo1Vp04dLVy40C4RTkhI0EcffaQ6depY54cnJCRk+2CkrOl2OV19A66HHj16yNPTU9OnT5fFYrHZ9tNPP2nr1q3q3bu3ihUrJinnkzv//POPPDw85OXldd1jxu0na2aAu7u7tSwuLk67du2yqVevXj39+OOP1lkOkrRjxw672Qjh4eE6d+6c5s+fb7ev+fPn69y5cwoPD7eWZTfuL1y4oH///Zd/s01gChMkSV9//bVSU1MVFhZmXbh0pblz52rdunUaNWqUqf6GDh2qp556SmPGjNEDDzygvXv3mn4ir4+Pj/r166d58+bJw8NDgYGB+v7777Vu3Tq9+uqr2S6glqSuXbtq1qxZioiIsN7xKSoqin8IkC9TpkxRWFiYevbsqYiICOuD5N5//30ZhqEpU6ZY63766adau3atHn74YdWuXVsWi0W7du3SnDlzVKdOHTVq1KgQjwS3m4oVK2rChAl67rnn1L9/f/Xt29fmQXL169fX8OHDrfVfeeUVZWZmqkOHDqpWrZrOnz+vL7/8Ut9++63Cw8NtzhoDBcXX11d33HGHpk2bJovFotTUVEVFRdndWjU8PFxLly7V4MGDNXjwYCUlJSk6OtpuNkLbtm3Vr18/xcTE6L///rOuo/zqq6+0YsUK9evXz3oHPenyGs82bdqoRYsWqlChguLj47V48WKdPXvWJtFA9kggIOny3ZcqVaqUbfIgSY888ojeeustHT161FR/bdu21bhx4zR79mx98cUXql+/vt577z3Tc2lfeOEFlSpVSitXrtTs2bNVuXJljRs3LtcnVxYrVkzz58/X66+/rueff14VK1bUU089pa+//trmzAVgRo0aNfTpp59a58KeOXNGZcqUUevWrfX000/brH9o3bq1Tpw4oTVr1mjmzJmyWCyqVKmSBg4cqAEDBuSY9ALXywMPPKDKlStr1qxZGjt2rFJTU1W5cmUNHDhQgwYNsj6FWpL69u2rNWvW6P3339epU6dUrFgxVa1aVRMmTNCj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",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" device_platform_cd | \n",
" has_order | \n",
"
\n",
" \n",
" \n",
" \n",
" | 0 | \n",
" Android | \n",
" 0.587575 | \n",
"
\n",
" \n",
" | 1 | \n",
" IOS | \n",
" 0.545270 | \n",
"
\n",
" \n",
" | 2 | \n",
" iOS | \n",
" 0.542612 | \n",
"
\n",
" \n",
" | 3 | \n",
" iPadOS | \n",
" 0.569767 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" device_platform_cd has_order\n",
"0 Android 0.587575\n",
"1 IOS 0.545270\n",
"2 iOS 0.542612\n",
"3 iPadOS 0.569767"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"platform_rate = client.groupby(\"device_platform_cd\")[\"has_order\"].mean().reset_index()\n",
"plt.figure(figsize=(8, 4))\n",
"sns.barplot(data=platform_rate, x=\"device_platform_cd\", y=\"has_order\")\n",
"plt.title(\"Доля клиентов с заказом по платформам\")\n",
"plt.tight_layout()\n",
"plt.show()\n",
"platform_rate\n"
]
},
{
"cell_type": "markdown",
"id": "f65ad022",
"metadata": {},
"source": [
"## ML-модель с контролем объёма"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "eaa4b459",
"metadata": {
"execution": {
"iopub.execute_input": "2025-12-12T19:12:13.294736Z",
"iopub.status.busy": "2025-12-12T19:12:13.294463Z",
"iopub.status.idle": "2025-12-12T19:12:13.423902Z",
"shell.execute_reply": "2025-12-12T19:12:13.421985Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"(0.681635404420581,\n",
" num__passive_click_total 0.757779\n",
" num__ctr_all -0.257144\n",
" cat__device_platform_cd_Android 0.182476\n",
" cat__gender_cd_M 0.133747\n",
" num__active_click_total 0.119761\n",
" cat__device_platform_cd_iPadOS -0.100109\n",
" num__age -0.071048\n",
" num__passive_imp_total -0.050535\n",
" cat__device_platform_cd_iOS 0.040232\n",
" num__active_imp_total -0.019038\n",
" dtype: float64)"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X = client[[\n",
" \"active_imp_total\",\n",
" \"passive_imp_total\",\n",
" \"active_click_total\",\n",
" \"passive_click_total\",\n",
" \"ctr_all\",\n",
" \"age\",\n",
" \"gender_cd\",\n",
" \"device_platform_cd\",\n",
"]]\n",
"X = X.copy()\n",
"X[\"gender_cd\"] = eda.normalize_gender(X[\"gender_cd\"])\n",
"X[\"device_platform_cd\"] = eda.normalize_device(X[\"device_platform_cd\"])\n",
"y = client[\"has_order\"]\n",
"\n",
"numeric_cols = [\"active_imp_total\", \"passive_imp_total\", \"active_click_total\", \"passive_click_total\", \"ctr_all\", \"age\"]\n",
"cat_cols = [\"gender_cd\", \"device_platform_cd\"]\n",
"\n",
"preprocess = ColumnTransformer(\n",
" [\n",
" (\"num\", Pipeline([(\"scaler\", StandardScaler())]), numeric_cols),\n",
" (\"cat\", OneHotEncoder(handle_unknown=\"ignore\"), cat_cols),\n",
" ]\n",
")\n",
"\n",
"model = Pipeline([(\"pre\", preprocess), (\"clf\", LogisticRegression(max_iter=1000))])\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, stratify=y)\n",
"model.fit(X_train, y_train)\n",
"proba = model.predict_proba(X_test)[:, 1]\n",
"auc = roc_auc_score(y_test, proba)\n",
"coef = model.named_steps[\"clf\"].coef_[0]\n",
"features = model.named_steps[\"pre\"].get_feature_names_out()\n",
"coef_series = pd.Series(coef, index=features).sort_values(key=abs, ascending=False)\n",
"auc, coef_series.head(10)\n"
]
},
{
"cell_type": "markdown",
"id": "ce032735",
"metadata": {},
"source": [
"## Вывод по гипотезе\n",
"- В сырой агрегированной доле заказов Android выше iOS.\n",
"- В модели при контроле объёма коммуникаций и CTR коэффициент при `device_platform_cd_Android` положительный и в топ‑фичах, AUC ~0.69. Гипотеза подтверждается: платформа влияет на вероятность заказа."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.13.5"
}
},
"nbformat": 4,
"nbformat_minor": 5
}