{"nbformat_minor": 1, "nbformat": 4, "cells": [{"outputs": [], "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", "\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", "execution_count": null, "metadata": {"_uuid": "73685bcef56a6183c38bdf204d8df3f98f9d4bc9", "_cell_guid": "8cd2bbed-1856-4f8c-b9fb-4e3afa23320f"}}, {"outputs": [], "source": ["import numpy as np\n", "import pandas as pd\n", "import lightgbm as lgb\n", "import time\n", "import gc; gc.enable()\n", "from sklearn.model_selection import ShuffleSplit\n", "from sklearn import *\n", "\n", "## loading data\n", "\n", "#train = pd.read_csv('../input/train_v2.csv')\n", "#test = pd.read_csv('../input/sample_submission_v2.csv')\n", "#members = pd.read_csv('../input/members_v3.csv')\n", "#transactions = pd.read_csv('../input/transactions_v2.csv')\n", "#user_logs = pd.read_csv('../input/user_logs_v2.csv')"], "cell_type": "code", "execution_count": null, "metadata": {"_uuid": "64497ad3f76da66ace5e06b6ccaae1bdcee46eef", "_cell_guid": "3aaf96a5-3f53-4ac2-a5c2-3cc0a069fb6f"}}, {"outputs": [], "source": ["# referred from LGBM\n", "train_input = pd.read_csv('../input/train.csv',dtype={'is_churn' : bool,'msno' : str})\n", "members_input = pd.read_csv('../input/members_v3.csv',dtype={'registered_via' : np.uint8,\n", "                                                      'gender' : 'category'})\n", "\n", "train_input = pd.merge(left = train_input,right = members_input,how = 'left',on=['msno'])\n", "\n", "del members_input\n", "train_input.head()"], "cell_type": "code", "execution_count": null, "metadata": {}}, {"outputs": [], "source": ["transactions_input = pd.read_csv('../input/transactions.csv',dtype = {'payment_method' : 'category',\n", "                                                                  'payment_plan_days' : np.uint8,\n", "                                                                  'plan_list_price' : np.uint8,\n", "                                                                  'actual_amount_paid': np.uint8,\n", "                                                                  'is_auto_renew' : np.bool,\n", "                                                                  'is_cancel' : np.bool})\n", "\n", "transactions_input = pd.merge(left = train_input,right = transactions_input,how='left',on='msno')\n", "grouped  = transactions_input.copy().groupby('msno')\n", "grouped.head()"], "cell_type": "code", "execution_count": null, "metadata": {}}, {"outputs": [], "source": ["shuffle = grouped.agg({'msno' :{'msno_count': 'count'},\n", "                         'plan_list_price' :{'plan_list_price':'sum'},\n", "                         'actual_amount_paid' : {'actual_amount_paid_mean' : 'mean',\n", "                                                  'actual_amount_paid_sum' : 'sum'},\n", "                         'is_cancel' : {'is_cancel_sum': 'sum'}})\n", "\n", "shuffle.head()"], "cell_type": "code", "execution_count": null, "metadata": {}}, {"outputs": [], "source": ["shuffle.columns = shuffle.columns.droplevel(0)\n", "shuffle.head()"], "cell_type": "code", "execution_count": null, "metadata": {}}, {"outputs": [], "source": ["shuffle.reset_index(inplace=True)\n", "shuffle.head()"], "cell_type": "code", "execution_count": null, "metadata": {}}, {"outputs": [], "source": ["train_input = pd.merge(left = train_input,right = shuffle,how='left',on='msno')\n", "train_input.head()"], "cell_type": "code", "execution_count": null, "metadata": {}}, {"outputs": [], "source": ["del transactions_input,shuffle\n", "train_input.head()"], "cell_type": "code", "execution_count": null, "metadata": {}}, {"outputs": [], "source": ["# referring from LGBM Starter\n", "# merging user_logs\n"], "cell_type": "code", "execution_count": null, "metadata": {"collapsed": true}}, {"outputs": [], "source": [], "cell_type": "code", "execution_count": null, "metadata": {"collapsed": true}}, {"outputs": [], "source": ["model = None \n", "\n", "for train_indices,val_indices in ShuffleSplit(n_splits=1,test_size = 0.1,train_size=0.4).split(train_input): \n", "    train_data = lgb.Dataset(train_input.drop(['msno','is_churn'],axis=1).loc[train_indices,:],label=train_input.loc[train_indices,'is_churn'])\n", "    val_data = lgb.Dataset(train_input.drop(['msno','is_churn'],axis=1).loc[val_indices,:],label=train_input.loc[val_indices,'is_churn'])\n", "    \n", "    params = {\n", "        'objective': 'binary',\n", "        'metric': 'binary_logloss',\n", "        'boosting': 'gbdt',\n", "        'learning_rate': 0.05 , \n", "        'verbose': 0,\n", "        'num_leaves': 108,\n", "        'bagging_fraction': 0.95,\n", "        'bagging_freq': 1,\n", "        'bagging_seed': 1,\n", "        'feature_fraction': 0.9,\n", "        'feature_fraction_seed': 1,\n", "        'max_bin': 128,\n", "        'max_depth': 10,\n", "        'num_rounds': 50,\n", "        } \n", "    \n", "    model = lgb.train(params, train_data, 50, valid_sets=[val_data])"], "cell_type": "code", "execution_count": null, "metadata": {"scrolled": true}}, {"outputs": [], "source": ["test_input = pd.read_csv('../input/sample_submission_v2.csv',dtype = {'msno' : str})\n", "members_input = pd.read_csv('../input/members_v3.csv',dtype={'registered_via' : np.uint8,\n", "                                                      'gender' : 'category'})\n", "test_input = pd.merge(left=test_input,right=members_input,how='left',on=['msno'])\n", "\n", "del members_input\n", "\n", "transactions_input = pd.read_csv('../input/transactions_v2.csv',dtype = {'payment_method' : 'category',\n", "                                                                  'payment_plan_days' : np.uint8,\n", "                                                                  'plan_list_price' : np.uint8,\n", "                                                                  'actual_amount_paid': np.uint8,\n", "                                                                  'is_auto_renew' : np.bool,\n", "                                                                  'is_cancel' : np.bool})\n", "\n", "transactions_input = pd.merge(left = test_input,right = transactions_input,how='left',on='msno')\n", "grouped  = transactions_input.copy().groupby('msno')\n", "\n", "shuffle = grouped.agg({'msno' : {'total_order' : 'count'},\n", "                         'plan_list_price' : {'plan_net_worth' : 'sum'},\n", "                         'actual_amount_paid' : {'mean_payment_each_transaction' : 'mean',\n", "                                                  'total_actual_payment' : 'sum'},\n", "                         'is_cancel' : {'cancel_times' : lambda x : sum(x==1)}})\n", "             \n", "shuffle.columns = shuffle.columns.droplevel(0)\n", "shuffle.reset_index(inplace=True)\n", "test_input = pd.merge(left = test_input,right = shuffle,how='left',on='msno')\n", "del transactions_input\n", "\n", "predictions = model.predict(test_input.drop(['msno','is_churn'],axis=1))\n", "test_input['is_churn'] = predictions\n", "test_input.drop(['city','bd','gender','registered_via','registration_init_time','total_order','plan_net_worth','mean_payment_each_transaction','total_actual_payment','cancel_times'],axis=1,inplace=True)\n", "#test_input.head()\n", "test_input.to_csv('submissions.csv',index=False)\n", "#submissions.head()"], "cell_type": "code", "execution_count": null, "metadata": {}}, {"outputs": [], "source": ["output = pd.read_csv('submissions.csv')\n", "output.head()"], "cell_type": "code", "execution_count": null, "metadata": {}}], "metadata": {"kernelspec": {"language": "python", "name": "python3", "display_name": "Python 3"}, "language_info": {"version": "3.6.3", "codemirror_mode": {"version": 3, "name": "ipython"}, "pygments_lexer": "ipython3", "file_extension": ".py", "name": "python", "mimetype": "text/x-python", "nbconvert_exporter": "python"}}}