{"cells": [{"source": ["# This Python 3 environment comes with many helpful analytics libraries installed\n", "# It is defined by the kaggle/python docker image: https://github.com/kaggle/docker-python\n", "# For example, here's several helpful packages to load in \n", "\n", "import numpy as np # linear algebra\n", "import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n", "import gc\n", "gc.enable()\n", "from multiprocessing import Pool, cpu_count\n", "\n", "import xgboost as xgb\n", "\n", "from sklearn import *\n", "import sklearn\n", "\n", "# Input data files are available in the \"../input/\" directory.\n", "# For example, running this (by clicking run or pressing Shift+Enter) will list the files in the input directory\n", "\n", "from subprocess import check_output\n", "print(check_output([\"ls\", \"../input\"]).decode(\"utf8\"))\n", "\n", "# Any results you write to the current directory are saved as output."], "cell_type": "code", "metadata": {"_uuid": "9600e482139c30d20c9c0a90bfb34dac85d0d6e4", "_cell_guid": "c75096e1-0e2c-447d-8ef7-56868e645473"}, "execution_count": null, "outputs": []}, {"source": ["train = pd.read_csv('../input/train.csv')\n", "print(train.info())\n"], "cell_type": "code", "metadata": {"_uuid": "ff22f7bdb877a79f58248a6c3bf9a739b185fb2f", "_cell_guid": "410d7307-0693-413e-8cf3-4ab56c162993"}, "execution_count": null, "outputs": []}, {"source": ["print(np.max(train['is_churn']))\n", "print(np.min(train['is_churn']))\n", "train['is_churn'] = train['is_churn'].astype(np.int8)\n", "print(train.info())"], "cell_type": "code", "metadata": {}, "execution_count": null, "outputs": []}, {"source": ["test=pd.read_csv('../input/sample_submission_zero.csv')\n", "print(np.max(test['is_churn']))\n", "print(np.min(test['is_churn']))"], "cell_type": "code", "metadata": {}, "execution_count": null, "outputs": []}, {"source": ["\n", "test['is_churn'] = test['is_churn'].astype(np.int8)\n", "print(train.info())"], "cell_type": "code", "metadata": {}, "execution_count": null, "outputs": []}, {"source": ["transactions = pd.read_csv('../input/transactions.csv')\n", "print(transactions.info())\n", "print(transactions.head())"], "cell_type": "code", "metadata": {"_uuid": "8ea83c05fd1b15e1dc4808c3c6db3bfc7d1aacba", "_cell_guid": "3c63df32-ac3a-447c-9af7-b6777b40afba"}, "execution_count": null, "outputs": []}, {"source": ["transactions['is_cancel'] = transactions['is_cancel'].astype(np.int8)\n", "transactions['payment_method_id'] = transactions['payment_method_id'].astype(np.int8)\n", "transactions['payment_plan_days'] = transactions['payment_plan_days'].astype(np.int16)\n", "transactions['plan_list_price'] = transactions['plan_list_price'].astype(np.int16)\n", "transactions['actual_amount_paid'] = transactions['actual_amount_paid'].astype(np.int16)\n", "transactions['is_auto_renew'] = transactions['is_auto_renew'].astype(np.int8)\n", "\n", "print(transactions.info())\n", "print(transactions.head())"], "cell_type": "code", "metadata": {}, "execution_count": null, "outputs": []}, {"source": ["transactions['membership_expire_year'] = transactions['membership_expire_date'].apply(lambda x: int(str(x)[:4]))\n", "transactions['membership_expire_month'] = transactions['membership_expire_date'].apply(lambda x: int(str(x)[4:6]))\n", "transactions['membership_expire_day'] = transactions['membership_expire_date'].apply(lambda x: int(str(x)[-2:]))\n", "transactions['transaction_year'] = transactions['transaction_date'] .apply(lambda x: int(str(x)[:4]))\n", "transactions['transaction_month']  = transactions['transaction_date'] .apply(lambda x: int(str(x)[4:6]))\n", "transactions['transaction_day']  = transactions['transaction_date'] .apply(lambda x: int(str(x)[-2:]))\n", "print(transactions.info())"], "cell_type": "code", "metadata": {}, "execution_count": null, "outputs": []}, {"source": ["transactions['membership_expire_year'] = transactions['membership_expire_year'].astype(np.int16)\n", "transactions['membership_expire_month'] = transactions['membership_expire_month'].astype(np.int8)\n", "transactions['membership_expire_day'] = transactions['membership_expire_day'].astype(np.int8)\n", "transactions['transaction_year'] = transactions['transaction_year'].astype(np.int16)\n", "transactions['transaction_month'] = transactions['transaction_month'].astype(np.int8)\n", "transactions['transaction_day'] = transactions['transaction_day'].astype(np.int8)\n"], "cell_type": "code", "metadata": {"collapsed": true}, "execution_count": null, "outputs": []}, {"source": ["print(transactions.info())"], "cell_type": "code", "metadata": {}, "execution_count": null, "outputs": []}, {"source": ["transactions_train = transactions.loc[transactions.transaction_date < 20170201]\n", "transactions_test = transactions.loc[transactions.transaction_date < 20170301]\n", "transactions_train = transactions_train.sort_values(by=['transaction_date'], ascending=[False]).reset_index(drop=True)\n", "transactions_test = transactions_test.sort_values(by=['transaction_date'], ascending=[False]).reset_index(drop=True)\n", "transactions_train = transactions_train.drop_duplicates(subset=['msno'], keep='first')\n", "transactions_test = transactions_test.drop_duplicates(subset=['msno'], keep='first')\n", "train = pd.merge(train, transactions_train, how='left', on='msno')\n", "test = pd.merge(test, transactions_test, how='left', on='msno')\n", "transactions=[]; transactions_train=[]; transactions_test=[]"], "cell_type": "code", "metadata": {}, "execution_count": null, "outputs": []}, {"source": ["print(train.info())\n", "print(train.head())"], "cell_type": "code", "metadata": {}, "execution_count": null, "outputs": []}, {"source": ["\n", "\n", "train = train.drop('transaction_date', 1)\n", "test = test.drop('transaction_date', 1)\n", "train = train.drop('membership_expire_date', 1)\n", "test = test.drop('membership_expire_date', 1)\n", "\n", "\n", "\n", "\n"], "cell_type": "code", "metadata": {}, "execution_count": null, "outputs": []}, {"source": ["transactions=[]\n", "print(train.info())\n", "print(test.info())"], "cell_type": "code", "metadata": {"_uuid": "362d6bc8ab834827b871069be950383f621f907b", "_cell_guid": "b4dfc748-ead4-43da-ab36-5e3152709c90"}, "execution_count": null, "outputs": []}, {"source": ["members = pd.read_csv('../input/members.csv')\n", "members.info()\n"], "cell_type": "code", "metadata": {"_uuid": "e1e1b647bdff442f8d3610c7a4cffb4690e56af6", "_cell_guid": "04fb6155-6caa-4730-83dd-987de858cb44"}, "execution_count": null, "outputs": []}, {"source": ["members.head()"], "cell_type": "code", "metadata": {}, "execution_count": null, "outputs": []}, {"source": ["members['city'] = members['city'].astype(np.int8)\n", "members['bd'] = members['bd'].astype(np.int16)\n", "members['registered_via']=members['registered_via'].astype(np.int16)\n"], "cell_type": "code", "metadata": {"collapsed": true}, "execution_count": null, "outputs": []}, {"source": ["members['registration_init_year'] = members['registration_init_time'].apply(lambda x: int(str(x)[:4]))\n", "members['registration_init_month'] = members['registration_init_time'].apply(lambda x: int(str(x)[4:6]))\n", "members['registration_init_date'] = members['registration_init_time'].apply(lambda x: int(str(x)[-2:]))\n", "members['expiration_year'] = members['expiration_date'].apply(lambda x: int(str(x)[:4]))\n", "members['expiration_month'] = members['expiration_date'].apply(lambda x: int(str(x)[4:6]))\n", "members['expiration_day'] = members['expiration_date'].apply(lambda x: int(str(x)[-2:]))"], "cell_type": "code", "metadata": {"collapsed": true}, "execution_count": null, "outputs": []}, {"source": ["members['registration_init_year'] = members['registration_init_time'].astype(np.int16)\n", "members['registration_init_month'] = members['registration_init_time'].astype(np.int8)\n", "members['registration_init_date'] = members['registration_init_time'].astype(np.int8)\n", "members['expiration_year'] = members['expiration_date'].astype(np.int16)\n", "members['expiration_month'] = members['expiration_date'].astype(np.int8)\n", "members['expiration_day'] = members['expiration_date'].astype(np.int8)"], "cell_type": "code", "metadata": {"collapsed": true}, "execution_count": null, "outputs": []}, {"source": ["members = members.drop('registration_init_time', 1)\n", "members = members.drop('expiration_date', 1)\n"], "cell_type": "code", "metadata": {"collapsed": true}, "execution_count": null, "outputs": []}, {"source": ["members = members.drop_duplicates(subset=['msno'], keep='first')\n", "train = pd.merge(train, members, how='left', on='msno')\n", "test = pd.merge(test, members, how='left', on='msno')\n", "train.info()"], "cell_type": "code", "metadata": {}, "execution_count": null, "outputs": []}, {"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)\n", "print(train.info())\n", "print(test.info())\n", "print(train.head())\n"], "cell_type": "code", "metadata": {"_uuid": "8992b5a31eb8842fac1c63f2ebb2dfc517412551", "_cell_guid": "8a25560c-8951-448a-9d14-ddfbf5985687"}, "execution_count": null, "outputs": []}, {"source": ["train['is_churn'].nunique()\n"], "cell_type": "code", "metadata": {"_uuid": "876957ea8f2b0e2149a4799c19ba7108898aabb8", "_cell_guid": "354fbb54-b877-4812-8709-2c17b0885e9b"}, "execution_count": null, "outputs": []}, {"source": ["cols = [c for c in train.columns if c not in ['is_churn','msno']]\n", "\n", "train.head()\n", "\n", "def xgb_score(preds, dtrain):\n", "    labels = dtrain.get_label()\n", "    return 'log_loss', sklearn.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 = sklearn.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.0000001, 0.999999)\n", "test[['msno','is_churn']].to_csv('submission3.csv', index=False)\n", "\n"], "cell_type": "code", "metadata": {"_uuid": "6716eecceafcd26e10fb1d7abbfc394859f34c0e", "_cell_guid": "9f2d8226-30a6-4fad-b249-cc07a0b44b48"}, "execution_count": null, "outputs": []}], "nbformat": 4, "nbformat_minor": 1, "metadata": {"kernelspec": {"language": "python", "name": "python3", "display_name": "Python 3"}, "language_info": {"mimetype": "text/x-python", "name": "python", "codemirror_mode": {"name": "ipython", "version": 3}, "pygments_lexer": "ipython3", "file_extension": ".py", "version": "3.6.3", "nbconvert_exporter": "python"}}}