{"cells":[{"metadata":{"trusted":true,"_uuid":"6f2574c925aa6fe35f953538dddda57fbe7332cf"},"cell_type":"code","source":"# Essential libraries\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\npd.options.display.float_format = '{:.6f}'.format\nimport os\nimport datetime\n# Sklearn support libraries\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.tree import DecisionTreeRegressor\nfrom sklearn.metrics import mean_squared_error\n# LGBM\nimport lightgbm as lgb\n# Plotting libraries\nfrom plotnine import *\nimport matplotlib.pyplot as plt\nimport plotnine\nfrom mizani.breaks import date_breaks","execution_count":null,"outputs":[]},{"metadata":{"collapsed":true,"trusted":false,"_uuid":"a1a08d886e9730722e5e5d9739e23cc956dceb31"},"cell_type":"code","source":"#os.chdir(r\"C:\\Users\\bhavesh\\Documents\\Kaggle\\Elo Merchant Category Recommendation\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d39e71a63a0cf7c1ab37d277a6a4b470fc635e66"},"cell_type":"code","source":"train = pd.read_csv('../input/train.csv', parse_dates =['first_active_month'])\ntest = pd.read_csv('../input/test.csv', parse_dates =['first_active_month'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"4e6172354dc1dd606198701345ba627f2fc80075"},"cell_type":"code","source":"hist_trans = pd.read_csv('../input/historical_transactions.csv', parse_dates=['purchase_date'])\nnew_trans = pd.read_csv('../input/new_merchant_transactions.csv', parse_dates=['purchase_date'])\nmerchants = pd.read_csv('../input/merchants.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ad00897c2faa77626e40c0efdccf60c829cc5258"},"cell_type":"code","source":"dfs = [train, test, hist_trans, new_trans, merchants]\nfor d in dfs:\n    print(d.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"7eee6ad793e8c83047933affae35227f6423a50d"},"cell_type":"code","source":"# Imputing null value with most common value\ntest['first_active_month'] = pd.to_datetime(test['first_active_month'].fillna('2017-09-01 00:00:00'))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"663674724c01c339af2ed62760c1137bc1015cc5"},"cell_type":"code","source":"plotnine.options.figure_size = (14, 6)\nggplot(train, aes(x='target')) +\\\ngeom_histogram(bins=30, fill='blue', color='black') +\\\nscale_x_continuous(breaks=range(-40, 20, 10))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"4adadd6079cfca84fd481b8734c29762f77d3907"},"cell_type":"code","source":"train['dayDiffActiveMonth'] = (train['first_active_month'] - pd.to_datetime('2018-02-01 00:00:00')).dt.days\ntest['dayDiffActiveMonth'] = (test['first_active_month'] - pd.to_datetime('2018-02-01 00:00:00')).dt.days","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"3b2e6abfc4401e727449955807decdfa5b2298b5"},"cell_type":"code","source":"hist_trans.authorized_flag = (hist_trans.authorized_flag=='Y').astype('int')\nnew_trans.authorized_flag = (new_trans.authorized_flag=='Y').astype('int')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"edf2c434d367b411f926fffecddbf0ff06f7e270"},"cell_type":"code","source":"hist_trans_summ = hist_trans.groupby('card_id')['authorized_flag'].agg(['count', 'sum', 'mean'])\nhist_trans_summ = hist_trans_summ.reset_index()\nhist_trans_summ.columns = ['card_id','total_transactions','successful_transactions','successful_transactions_prop']\nhist_trans_summ['failed_transactions'] = hist_trans_summ.total_transactions - hist_trans_summ.successful_transactions","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"5a49a8d97d5274c59c0b5595a22650a58846cb93"},"cell_type":"code","source":"hist_trans['failed_trans_dt_rnk'] = hist_trans[hist_trans.authorized_flag==0].groupby('card_id')['purchase_date'].rank(ascending=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"9dda712e8a804876c38d5d80b8506d9cc79dff13"},"cell_type":"code","source":"hist_trans[['last_falied_trans_lag','last_failed_trans_amount']] = hist_trans[hist_trans.failed_trans_dt_rnk==1][['month_lag','purchase_amount']]\nhist_trans = hist_trans.drop('failed_trans_dt_rnk', axis=1)\nhist_trans['last_falied_trans_lag'] = hist_trans['last_falied_trans_lag'].fillna(1)\nhist_trans['last_failed_trans_amount']=hist_trans['last_failed_trans_amount'].fillna(0) # may need to rethink on this null imputation","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"6d9a7d3ea733dbb5475c083825ff356abd25bb86"},"cell_type":"code","source":"train = train.merge(hist_trans_summ, how='left', on='card_id')\ntest = test.merge(hist_trans_summ, how='left', on='card_id')\ndel(hist_trans_summ)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"f85fb2306f73ad55f22de7baac42e13b6c4b84c4"},"cell_type":"code","source":"hist_trans_summ = hist_trans[hist_trans.authorized_flag==0].groupby('card_id')['purchase_amount'].agg(['mean','max','sum','std']).reset_index()\nhist_trans_summ.columns = ['card_id','failed_trans_amt_mean','failed_trans_amt_max','failed_trans_amt_sum','failed_trans_amt_std']\ntrain = train.merge(hist_trans_summ, how='left', on='card_id')\ntest = test.merge(hist_trans_summ, how='left', on='card_id')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"39e6867068a9361341487f6f41fe6b6b45d43fb3"},"cell_type":"code","source":"hist_trans.category_1 = (hist_trans.category_1=='Y').astype('int')\nnew_trans.category_1 = (new_trans.category_1=='Y').astype('int')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d489a9783d879d6fb26d942ac5851b85d0840aa4"},"cell_type":"code","source":"for c in ['category_1','installments','month_lag','purchase_amount']:\n    hist_transt_amt_summ = hist_trans.groupby(['card_id']).agg({c : ['count', 'sum', 'mean', 'max', 'std']}).reset_index()\n    hist_transt_amt_summ.columns = ['card_id', 'hist_'+ c +'_cnt', 'hist_'+ c +'_sum', \n                                    'hist_'+ c +'_mean',  'hist_'+ c +'_max', 'hist_'+ c +'_std']\n    train = train.merge(hist_transt_amt_summ, how='left', on='card_id')\n    test = test.merge(hist_transt_amt_summ, how='left', on='card_id')\n    del(hist_transt_amt_summ)\n    \n    new_transt_amt_summ = new_trans.groupby(['card_id']).agg({c : ['count', 'sum', 'mean', 'max', 'std']}).reset_index()\n    new_transt_amt_summ.columns = ['card_id', 'new_'+ c +'_cnt', 'new_'+ c +'_sum', \n                                    'new_'+ c +'_mean',  'new_'+ c +'_max', 'new_'+ c +'_std']\n    train = train.merge(new_transt_amt_summ, how='left', on='card_id')\n    test = test.merge(new_transt_amt_summ, how='left', on='card_id')\n    del(new_transt_amt_summ)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"4e7de9caad7c06cb5e0fe84edb5e06d35dd01693"},"cell_type":"code","source":"train = train.fillna(0)\ntest = test.fillna(0)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ba16d5157cc03e8990d5ce595880dd39ae988f43"},"cell_type":"code","source":"X_train = train.drop(['target', 'first_active_month', 'card_id'], axis=1, inplace=False)\ny_train = train.target\nX_test = test.drop([ 'first_active_month', 'card_id'], axis=1, inplace=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ad03ffbadd00477934f1bc0bf944f8e2d52ec31d"},"cell_type":"code","source":"X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.2, random_state=42)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"22eb95b9cc60dee262f9cf99868e9709521ab28e"},"cell_type":"code","source":"print(X_train.shape, X_val.shape, X_test.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"fe1aca1582da2d5817f33b14d757d9c0a884b6f9"},"cell_type":"code","source":"train_columns = X_train.columns\nlgb_train = lgb.Dataset(X_train, y_train, feature_name=list(train_columns))\nlgb_eval = lgb.Dataset(X_val, y_val, reference=lgb_train, feature_name=list(train_columns))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"4847aadd40f7fab5be0ee7196923fb183ddc3b62"},"cell_type":"code","source":"params = {\n    'objective': 'regression_l2',\n    'metric': { 'rmse'},\n    'num_leaves': 2000,\n    'learning_rate': 0.1,\n    'feature_fraction': 1,\n    'verbose': 0,\n    'max_depth' : 6,\n    'min_data_in_leaf' : 8\n}","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"301218139f9d42b970654a6ed44a9c1b20a9f4ba"},"cell_type":"code","source":"gbm = lgb.train(params,\n                lgb_train,\n                num_boost_round=200000,\n                valid_sets=lgb_eval,\n                early_stopping_rounds=50) #3.76446","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"f1d818ba46ff6709903d7a49a0cc7af7c8c31b3b"},"cell_type":"code","source":"test_lgbm_pred = gbm.predict(X_test, num_iteration = gbm.best_iteration)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"81b71bfe2405d19c7c1bac2189ed040c5a8d530e"},"cell_type":"code","source":"submission = pd.DataFrame(test_lgbm_pred, index=X_test.index)\nsubmission.columns=['target']\nsubmission = pd.concat([test.card_id, submission], axis=1)\nsubmission.to_csv('submission_lgbm.csv', index=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"3a1634ecbc1a69e5866835f517a63d92ccc1d8ff"},"cell_type":"code","source":"lgb_fi = pd.DataFrame(gbm.feature_importance(), index=train_columns).reset_index()\nlgb_fi.columns = ['column','score']","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"7a1ea14a70872aa98634ed06362275d05d00c7da"},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"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.6.3"}},"nbformat":4,"nbformat_minor":1}