{"nbformat_minor": 1, "nbformat": 4, "metadata": {"language_info": {"codemirror_mode": {"version": 3, "name": "ipython"}, "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.3", "name": "python", "mimetype": "text/x-python", "file_extension": ".py"}, "kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}}, "cells": [{"cell_type": "code", "source": ["!ls ../input"], "execution_count": null, "metadata": {"collapsed": false}, "outputs": []}, {"cell_type": "code", "source": ["from multiprocessing import Pool, cpu_count\n", "import gc; gc.enable()\n", "import xgboost as xgb\n", "import pandas as pd\n", "import numpy as np\n", "from sklearn import *\n", "import sklearn"], "execution_count": null, "metadata": {"collapsed": false}, "outputs": []}, {"cell_type": "code", "source": [], "execution_count": null, "metadata": {"collapsed": false}, "outputs": []}, {"cell_type": "code", "source": ["\n", "\n", "train = pd.read_csv('../input/train.csv')\n", "train = pd.concat((train, pd.read_csv('../input/train_v2.csv')), axis=0, ignore_index=True).reset_index(drop=True)\n", "test = pd.read_csv('../input/sample_submission_v2.csv')\n", "\n", "transactions = pd.read_csv('../input/transactions.csv', usecols=['msno'])\n", "transactions = pd.concat((transactions, pd.read_csv('../input/transactions_v2.csv', usecols=['msno'])), axis=0, ignore_index=True).reset_index(drop=True)\n", "transactions = pd.DataFrame(transactions['msno'].value_counts().reset_index())\n", "transactions.columns = ['msno','trans_count']\n", "train = pd.merge(train, transactions, how='left', on='msno')\n", "test = pd.merge(test, transactions, how='left', on='msno')\n", "transactions = []; print('transaction merge...')\n", "\n", "user_logs = pd.read_csv('../input/user_logs_v2.csv', usecols=['msno'])\n", "#user_logs = pd.read_csv('../input/user_logs.csv', usecols=['msno'])\n", "#user_logs = pd.concat((user_logs, pd.read_csv('../input/user_logs_v2.csv', usecols=['msno'])), axis=0, ignore_index=True).reset_index(drop=True)\n", "user_logs = pd.DataFrame(user_logs['msno'].value_counts().reset_index())\n", "user_logs.columns = ['msno','logs_count']\n", "train = pd.merge(train, user_logs, how='left', on='msno')\n", "test = pd.merge(test, user_logs, how='left', on='msno')\n", "user_logs = []; print('user logs merge...')\n", "\n", "members = pd.read_csv('../input/members_v3.csv')\n", "train = pd.merge(train, members, how='left', on='msno')\n", "test = pd.merge(test, members, how='left', on='msno')\n", "members = []; print('members merge...') "], "execution_count": null, "metadata": {"collapsed": false, "_uuid": "0797f9105fc62785850af750fd949002f8b9a322", "_cell_guid": "f229ddc8-6924-4abf-8719-e0ec3c652863"}, "outputs": []}, {"cell_type": "code", "source": ["gender = {'male':1, 'female':2}\n", "train['gender'] = train['gender'].map(gender)\n", "test['gender'] = test['gender'].map(gender)\n", "\n", "train = train.fillna(0)\n", "test = test.fillna(0)"], "execution_count": null, "metadata": {"collapsed": true, "_uuid": "b24e7f1fb0c01887208a020356d783e46c7b4172", "_cell_guid": "48c17f47-87b0-4bc5-99f2-f4ba90faa921"}, "outputs": []}, {"cell_type": "code", "source": ["transactions = pd.read_csv('../input/transactions.csv')\n", "transactions = pd.concat((transactions, pd.read_csv('../input/transactions_v2.csv')), axis=0, ignore_index=True).reset_index(drop=True)\n", "transactions = transactions.sort_values(by=['transaction_date'], ascending=[False]).reset_index(drop=True)\n", "transactions = transactions.drop_duplicates(subset=['msno'], keep='first')\n", "\n", "train = pd.merge(train, transactions, how='left', on='msno')\n", "test = pd.merge(test, transactions, how='left', on='msno')\n", "transactions=[]"], "execution_count": null, "metadata": {"collapsed": true, "_uuid": "2d1849e5b6c07933039b3d025b3390a7db320c01", "_cell_guid": "4a52098a-2eee-401f-8b5d-eddaa5e28fbd"}, "outputs": []}, {"cell_type": "code", "source": ["def transform_df(df):\n", "    df = pd.DataFrame(df)\n", "    df = df.sort_values(by=['date'], ascending=[False])\n", "    df = df.reset_index(drop=True)\n", "    df = df.drop_duplicates(subset=['msno'], keep='first')\n", "    return df\n", "\n", "def transform_df2(df):\n", "    df = df.sort_values(by=['date'], ascending=[False])\n", "    df = df.reset_index(drop=True)\n", "    df = df.drop_duplicates(subset=['msno'], keep='first')\n", "    return df\n", "\n", "df_iter = pd.read_csv('../input/user_logs.csv', low_memory=False, iterator=True, chunksize=10000000)\n", "last_user_logs = []\n", "i = 0 #~400 Million Records - starting at the end but remove locally if needed\n", "for df in df_iter:\n", "    if i>35:\n", "        if len(df)>0:\n", "            print(df.shape)\n", "            p = Pool(cpu_count())\n", "            df = p.map(transform_df, np.array_split(df, cpu_count()))   \n", "            df = pd.concat(df, axis=0, ignore_index=True).reset_index(drop=True)\n", "            df = transform_df2(df)\n", "            p.close(); p.join()\n", "            last_user_logs.append(df)\n", "            print('...', df.shape)\n", "            df = []\n", "    i+=1\n", "last_user_logs.append(transform_df(pd.read_csv('../input/user_logs_v2.csv')))\n", "last_user_logs = pd.concat(last_user_logs, axis=0, ignore_index=True).reset_index(drop=True)\n", "last_user_logs = transform_df2(last_user_logs)\n", "\n", "train = pd.merge(train, last_user_logs, how='left', on='msno')\n", "test = pd.merge(test, last_user_logs, how='left', on='msno')\n", "last_user_logs=[]"], "execution_count": null, "metadata": {"collapsed": true, "_uuid": "0de7839769997cade8bb31b96ec40df398edee90", "_cell_guid": "ef0ff7bd-cc4a-4603-b8a4-72591b6ba6c7"}, "outputs": []}, {"cell_type": "code", "source": ["print(train.shape)\n", "train.head()"], "execution_count": null, "metadata": {"collapsed": true}, "outputs": []}, {"cell_type": "code", "source": ["# train = train.fillna(0)\n", "# test = test.fillna(0)\n", "\n", "# cols = [c for c in train.columns if c not in ['is_churn','msno']]"], "execution_count": null, "metadata": {"collapsed": true, "_uuid": "10a1d624dcb3c7b4a4209aa642f5a837d92a2f09", "_cell_guid": "df0fd7c7-dad2-41b9-b144-0ea2d4b9fae4"}, "outputs": []}, {"cell_type": "code", "source": ["# def xgb_score(preds, dtrain):\n", "#     labels = dtrain.get_label()\n", "#     return 'log_loss', metrics.log_loss(labels, preds)\n", "\n", "# fold = 1\n", "# for i in range(fold):\n", "#     params = {\n", "#         'eta': 0.02, #use 0.002\n", "#         'max_depth': 7,\n", "#         'objective': 'binary:logistic',\n", "#         'eval_metric': 'logloss',\n", "#         'seed': i,\n", "#         'silent': True\n", "#     }\n", "#     x1, x2, y1, y2 = model_selection.train_test_split(train[cols], train['is_churn'], test_size=0.3, random_state=i)\n", "#     watchlist = [(xgb.DMatrix(x1, y1), 'train'), (xgb.DMatrix(x2, y2), 'valid')]\n", "#     model = xgb.train(params, xgb.DMatrix(x1, y1), 150,  watchlist, feval=xgb_score, maximize=False, verbose_eval=50, early_stopping_rounds=50) #use 1500\n", "#     if i != 0:\n", "#         pred += model.predict(xgb.DMatrix(test[cols]), ntree_limit=model.best_ntree_limit)\n", "#     else:\n", "#         pred = model.predict(xgb.DMatrix(test[cols]), ntree_limit=model.best_ntree_limit)\n", "# pred /= fold\n", "# test['is_churn'] = pred.clip(0.+1e-15, 1-1e-15)\n", "# test[['msno','is_churn']].to_csv('submission.csv', index=False)\n", "# #test[['msno','is_churn']].to_csv('submission.csv.gz', index=False, compression='gzip')"], "execution_count": null, "metadata": {"collapsed": true, "_uuid": "cb258ccda2afac4d0e8ed0285da798c3808a5920", "_cell_guid": "00d437d9-df05-4f0c-a947-e2ca6cf0bac2"}, "outputs": []}, {"cell_type": "code", "source": ["# import matplotlib.pyplot as plt\n", "# import seaborn as sns\n", "# %matplotlib inline\n", "\n", "# plt.rcParams['figure.figsize'] = (7.0, 7.0)\n", "# xgb.plot_importance(booster=model); plt.show()"], "execution_count": null, "metadata": {"collapsed": true, "_uuid": "04f54b577acd293fd6fb73eff71f7548577817c1", "_cell_guid": "5f0517ba-8774-49e0-9cbe-4de4704a8e15"}, "outputs": []}, {"cell_type": "markdown", "source": ["# merge the rawer logs data"], "metadata": {}}, {"cell_type": "code", "source": ["transactions = pd.read_csv('../input/transactions.csv')\n", "transactions = pd.concat((transactions, pd.read_csv('../input/transactions_v2.csv')), axis=0, ignore_index=True).reset_index(drop=True)\n", "# transactions_msno_counts = pd.DataFrame(transactions['msno'].value_counts().reset_index()).rename(columns={\"msno\":\"msno_counts\"})\n", "# print(transactions_msno_counts.shape)\n", "print(transactions.shape)\n", "transactions.head()"], "execution_count": null, "metadata": {"collapsed": true}, "outputs": []}]}