└── Rosbank baseline.ipynb /Rosbank baseline.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import pandas as pd\n", 12 | "import numpy as np" 13 | ] 14 | }, 15 | { 16 | "cell_type": "code", 17 | "execution_count": 2, 18 | "metadata": { 19 | "collapsed": true 20 | }, 21 | "outputs": [], 22 | "source": [ 23 | "from sklearn.model_selection import KFold, cross_val_score\n", 24 | "from xgboost import XGBClassifier, XGBRegressor" 25 | ] 26 | }, 27 | { 28 | "cell_type": "code", 29 | "execution_count": 3, 30 | "metadata": {}, 31 | "outputs": [ 32 | { 33 | "name": "stdout", 34 | "output_type": "stream", 35 | "text": [ 36 | "CPU times: user 18.8 s, sys: 462 ms, total: 19.3 s\n", 37 | "Wall time: 21.3 s\n" 38 | ] 39 | } 40 | ], 41 | "source": [ 42 | "%%time\n", 43 | "\n", 44 | "import requests\n", 45 | "\n", 46 | "def extract_month(s):\n", 47 | " day, month, year = s.split('/')\n", 48 | " month = int(month)\n", 49 | " month += (int(year) - 2016) * 12 \n", 50 | " return month \n", 51 | " \n", 52 | "mcc_codes_table = pd.read_html(requests.get('https://mcc-codes.ru/code', headers={'User-agent': 'Mozilla/5.0'}).text, converters={'MCC': str})[0]\n", 53 | "mcc_map = mcc_codes_table[[u'MCC', u'Группа']].set_index('MCC').to_dict()[u'Группа']\n", 54 | "def load_dataset(name):\n", 55 | " data = pd.read_csv(\n", 56 | " name \n", 57 | " )\n", 58 | " data['TRDATETIME'] = pd.to_datetime(data['TRDATETIME'], format = '%d%b%y:%X')\n", 59 | " data['channel_type'] = data['channel_type'].fillna('0').apply(lambda s : int(s[-1]))\n", 60 | " data['mcc_group'] = data['MCC'].astype(str).map(mcc_map)\n", 61 | " \n", 62 | " return data\n", 63 | "\n", 64 | "train = load_dataset('data/train.csv')\n", 65 | "test = load_dataset('data/test.csv')" 66 | ] 67 | }, 68 | { 69 | "cell_type": "code", 70 | "execution_count": 4, 71 | "metadata": {}, 72 | "outputs": [ 73 | { 74 | "name": "stdout", 75 | "output_type": "stream", 76 | "text": [ 77 | "Index([ u'channel_type',\n", 78 | " u'cl_id',\n", 79 | " u'sum_POS',\n", 80 | " u'sum_Розничные магазины',\n", 81 | " u'sum_Поставщик услуг',\n", 82 | " u'sum_Различные магазины',\n", 83 | " u'sum_Транспорт',\n", 84 | " u'sum_Магазины одежды',\n", 85 | " u'sum_Развлечения',\n", 86 | " u'sum_Бизнес услуги',\n", 87 | " u'sum_Государственные услуги',\n", 88 | " u'sum_Личные услуги',\n", 89 | " u'sum_Коммунальные и кабельные услуги',\n", 90 | " u'sum_Профессиональные услуги',\n", 91 | " u'sum_Отели и мотели',\n", 92 | " u'sum_Автомобили и транспортные средства',\n", 93 | " u'sum_Ремонтные услуги',\n", 94 | " u'sum_Аренда автомобилей',\n", 95 | " u'sum_Продажи по почте/телефону',\n", 96 | " u'sum_Оптовые поставщики и производители',\n", 97 | " u'sum_Авиалинии, авиакомпании',\n", 98 | " u'sum_nan',\n", 99 | " u'sum_Членские организации',\n", 100 | " u'sum_Контрактные услуги'],\n", 101 | " dtype='object')\n", 102 | "CPU times: user 3.06 s, sys: 254 ms, total: 3.31 s\n", 103 | "Wall time: 3.35 s\n" 104 | ] 105 | } 106 | ], 107 | "source": [ 108 | "%%time\n", 109 | "\n", 110 | "mcc_groups = train.mcc_group.unique()\n", 111 | "\n", 112 | "def build_features(data):\n", 113 | " aggregated = data.groupby('cl_id')[[ \n", 114 | " 'channel_type',\n", 115 | " ]].first()\n", 116 | " ids = aggregated.index\n", 117 | " aggregated['cl_id'] = ids\n", 118 | " aggregated['sum_POS'] = data[data.trx_category == 'POS'].groupby('cl_id')['amount'].sum()\n", 119 | " for mcc_group in mcc_groups:\n", 120 | " aggregated['sum_%s' % mcc_group] = data[\n", 121 | " (data.mcc_group == mcc_group)\n", 122 | " ].groupby('cl_id')['amount'].sum()\n", 123 | " \n", 124 | " return aggregated.fillna(0)\n", 125 | "\n", 126 | "train_agg = build_features(train)\n", 127 | "test_agg = build_features(test)\n", 128 | "\n", 129 | "features = train_agg.columns\n", 130 | "print(features)" 131 | ] 132 | }, 133 | { 134 | "cell_type": "code", 135 | "execution_count": 5, 136 | "metadata": {}, 137 | "outputs": [], 138 | "source": [ 139 | "y_train_1 = train.groupby('cl_id')['target_flag'].first() \n", 140 | "y_train_2 = np.log(train.groupby('cl_id')['target_sum'].first() + 1.0)\n", 141 | "\n", 142 | "X_train = train_agg[features].values\n", 143 | "X_test = test_agg[features].values" 144 | ] 145 | }, 146 | { 147 | "cell_type": "code", 148 | "execution_count": 6, 149 | "metadata": { 150 | "collapsed": true 151 | }, 152 | "outputs": [], 153 | "source": [ 154 | "kf = list(KFold(4, shuffle = True, random_state = 0).split(X_train, y_train_1))" 155 | ] 156 | }, 157 | { 158 | "cell_type": "code", 159 | "execution_count": 7, 160 | "metadata": {}, 161 | "outputs": [ 162 | { 163 | "name": "stdout", 164 | "output_type": "stream", 165 | "text": [ 166 | "0.8029, 4.4503\n", 167 | "CPU times: user 217 ms, sys: 86.6 ms, total: 303 ms\n", 168 | "Wall time: 1.99 s\n" 169 | ] 170 | } 171 | ], 172 | "source": [ 173 | "%%time\n", 174 | "\n", 175 | "xgb1 = XGBClassifier(nthread=1)\n", 176 | "xgb2 = XGBRegressor(nthread=1)\n", 177 | "\n", 178 | "score1 = np.mean(cross_val_score(\n", 179 | " xgb1, X_train, y_train_1, \n", 180 | " scoring = 'roc_auc', \n", 181 | " cv = kf, n_jobs = 4\n", 182 | "))\n", 183 | "\n", 184 | "score2 = np.mean(cross_val_score(\n", 185 | " xgb2, X_train, y_train_2, \n", 186 | " scoring = 'neg_mean_squared_error', \n", 187 | " cv = kf, n_jobs = 4\n", 188 | "))\n", 189 | "\n", 190 | "print('%.4f, %.4f' % (score1, (-score2) ** 0.5))" 191 | ] 192 | }, 193 | { 194 | "cell_type": "code", 195 | "execution_count": 8, 196 | "metadata": {}, 197 | "outputs": [ 198 | { 199 | "name": "stdout", 200 | "output_type": "stream", 201 | "text": [ 202 | "CPU times: user 1.13 s, sys: 8.57 ms, total: 1.13 s\n", 203 | "Wall time: 1.14 s\n" 204 | ] 205 | } 206 | ], 207 | "source": [ 208 | "%%time\n", 209 | "\n", 210 | "xgb1 = XGBClassifier(nthread = -1)\n", 211 | "xgb2 = XGBRegressor(nthread = -1)\n", 212 | "\n", 213 | "xgb1.fit(X_train, y_train_1)\n", 214 | "xgb2.fit(X_train, y_train_2)" 215 | ] 216 | }, 217 | { 218 | "cell_type": "code", 219 | "execution_count": 9, 220 | "metadata": {}, 221 | "outputs": [], 222 | "source": [ 223 | "p1 = xgb1.predict_proba(X_test)[:, 1]\n", 224 | "p2 = np.exp(xgb2.predict(X_test)) - 1\n", 225 | "p2[p2 <= 0] = 0" 226 | ] 227 | }, 228 | { 229 | "cell_type": "code", 230 | "execution_count": 10, 231 | "metadata": {}, 232 | "outputs": [], 233 | "source": [ 234 | "submission1 = test_agg.copy()[['cl_id']]\n", 235 | "submission1['pred'] = (p1 - p1.min()) / (p1.max() - p1.min())\n", 236 | "\n", 237 | "submission2 = test_agg.copy()[['cl_id']]\n", 238 | "submission2['pred'] = p2 " 239 | ] 240 | }, 241 | { 242 | "cell_type": "code", 243 | "execution_count": 11, 244 | "metadata": {}, 245 | "outputs": [ 246 | { 247 | "data": { 248 | "image/png": "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\neEiPtp73Z9v8fv/ItpycHA0ODia6pIwTrccul0v5+fmSpJaWFt29e1cLFy5MSZ3pLFqPb968qebm\nZu3du5eAnoBoPe7v79c//vEPbdq0Sa+99pree+89/fWvf01VqWktWp8lafPmzVq9erVWrFihJUuW\nPDQWsVm+fLmmTJnyhdvHk3kJD+lo63n7/f6HtoVCIeXl5SW6pIzjtGZ6JBLRr371K7333nv67W9/\nm4oS0160Hr/zzjvq7+/Xj3/8Yx09elQnT57Um2++mapS01a0Hk+bNk0zZ87U7Nmz5fF49OSTT3KV\nvXGK1udr167p9ddf16lTp3Tq1Cndvn1bf/zjH1NVasYZT+YlPKSjrec9e/ZsdXV1aWBgQJZl6f33\n39c3v/nNRJeUcZzWTN+7d68sy1Jzc/PIYW+MTbQe19TUqK2tTS0tLXrmmWe0YsUK/fCHP0xVqWkr\nWo+Lioo0NDQ0Msnp73//u0pKSlJSZ7qL1udwOCy3262srCy53W7l5+dzdDOOxpN5cb0K1pdZtmyZ\nzpw5o/Xr10v6f+t5nzx5UkNDQ1q7dq0aGhq0detWRSIRrVmzRoWFhYkuKeNE6/GcOXP0xhtv6Nvf\n/rZqa2slST/60Y+0dOnSVJacdpz+jj+Pc3jj49Tj/fv36+c//7ls21Z5ebm++93vprji9OTU51Wr\nVmn9+vWaOnWqAoGAVq1aleKK09dnnwUTyTzW7gYAwFAsZgIAgKEIaQAADEVIAwBgKEIaAABDEdIA\nABiKkAYAwFCENAAAhvq/QaGvIauw5E4AAAAASUVORK5CYII=\n", 249 | "text/plain": [ 250 | "" 251 | ] 252 | }, 253 | "metadata": {}, 254 | "output_type": "display_data" 255 | } 256 | ], 257 | "source": [ 258 | "%matplotlib inline\n", 259 | "import seaborn\n", 260 | "import matplotlib.pyplot as plt\n", 261 | "\n", 262 | "_ = plt.hist(submission1['pred'].values, bins = 50)" 263 | ] 264 | }, 265 | { 266 | "cell_type": "code", 267 | "execution_count": 12, 268 | "metadata": {}, 269 | "outputs": [ 270 | { 271 | "data": { 272 | "image/png": "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\ntzc7d+5s9kgN9eyzz+bQoUP51a9+la9//ev54Q9/2OyR6q6npyd33nlnRkZGkrx5Ncx3vvOdbNy4\nMaOjo/njH//Y5Anr6+T3f9999+Wuu+5Kb29vli1blp6eniZPWF8nv/8keeGFF/Lb3/62qs9vSqS3\nbdt2ym1FW8E111yTb33rW0ne/K3irTu5tYrvfe97uf766zN37txmj9JwW7ZsyaJFi/K1r30tX/3q\nV/Oxj32s2SM11Lnnnpv9+/dndHQ0+/fvz4wZM5o9Ut0d31b5+G/ML7zwQj74wQ8mST784Q/nueee\na+Z4dXfy+3/ooYdy2WWXJUmOHj2ac845p5nj1d3J73/v3r35wQ9+kNtvv72qVZSmRPrAgQMtu61o\ne3t7Zs6cmQMHDuSmm27Kt7/97WaP1FCPP/545syZkyuvvDJJWmKp762GhoYyMDCQH/3oR1mzZk1u\nueWWZo/UUJ2dnTly5EiuueaarFq1Kp///OebPVLdnbyt8lu/59vb27N///5mjNUwJ7//4z+cb9u2\nLRs3bswXv/jFJk3WGG99/5VKJXfccUdWrlyZ9vb2qj6/KZHu6OjI8PDwiceVSiVnndU657C99tpr\n+cIXvpBPfvKT+cQnPtHscRrq8ccfz3PPPZfu7u689NJLWblyZd54441mj9Uws2fPzpVXXpmzzz47\n73rXu3LOOedkaGio2WM1zKOPPprOzs784Q9/yBNPPJGVK1fmyJEjzR6rod76f93w8HAuuOCCJk7T\nHE899VRWr16dn/70p5k9e3azx2mYgYGBDA4OZvXq1bn55pvz8ssvj7kZWFPK2Mrbir7xxhv58pe/\nnBUrVuRTn/pUs8dpuF/+8pfp7e1Nb29vLrvsstx///0tde/x97///fnLX/6SJHn99ddz6NChlvpP\n6tChQydueXvBBRdkZGSkZVbRjrv88svzt7/9LUnyzDPP5AMf+ECTJ2qsJ554Ihs3bkxvb2/mzZvX\n7HEa6n3ve19+//vfp7e3Nw899FDe/e5357bbbjvj54xrW9BaaeVtRX/84x9n//79eeSRR/LII48k\nefO3i6l+XIY3feQjH8nf//73XHfddalUKrn77rtPbLfbCm688cbcdttt+dznPpejR4/m5ptvzrnn\nntvssRri+Nd55cqVueuuuzIyMpKFCxfmmmuuafJkjTFt2rRUKpXcd999eec735lvfOMbSZIPfehD\n+eY3v9nk6erv5H/no6OjVf3bty0oABSqdQ4EA8AkI9IAUCiRBoBCiTQAFEqkAaBQIg0AhRJpACiU\nSANAof4fSs8riHVvpTIAAAAASUVORK5CYII=\n", 273 | "text/plain": [ 274 | "" 275 | ] 276 | }, 277 | "metadata": {}, 278 | "output_type": "display_data" 279 | } 280 | ], 281 | "source": [ 282 | "_ = plt.hist(np.log(1 + submission2['pred'].values), bins = 50, log = True)" 283 | ] 284 | }, 285 | { 286 | "cell_type": "code", 287 | "execution_count": 13, 288 | "metadata": {}, 289 | "outputs": [], 290 | "source": [ 291 | "submission1.to_csv('task1.csv', index = False)\n", 292 | "submission2.to_csv('task2.csv', index = False)" 293 | ] 294 | }, 295 | { 296 | "cell_type": "code", 297 | "execution_count": null, 298 | "metadata": { 299 | "collapsed": true 300 | }, 301 | "outputs": [], 302 | "source": [] 303 | } 304 | ], 305 | "metadata": { 306 | "kernelspec": { 307 | "display_name": "Python 2", 308 | "language": "python", 309 | "name": "python2" 310 | }, 311 | "language_info": { 312 | "codemirror_mode": { 313 | "name": "ipython", 314 | "version": 2 315 | }, 316 | "file_extension": ".py", 317 | "mimetype": "text/x-python", 318 | "name": "python", 319 | "nbconvert_exporter": "python", 320 | "pygments_lexer": "ipython2", 321 | "version": "2.7.13" 322 | } 323 | }, 324 | "nbformat": 4, 325 | "nbformat_minor": 2 326 | } 327 | --------------------------------------------------------------------------------