{"cells":[{"metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","trusted":false},"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nfrom sklearn import *\nfrom matplotlib import pyplot\n%matplotlib inline\nfrom catboost import CatBoostRegressor\nimport lightgbm as lgb\nimport xgboost as xgb\n\ntrain = pd.read_csv('../input/train.csv')\ntrain['first_active_month'].fillna('0-0', inplace=True)\ntrain['first_active_year'] = train['first_active_month'].map(lambda x: str(x).split('-')[0]).astype(int)\ntrain['first_active_month'] = train['first_active_month'].map(lambda x: str(x).split('-')[1]).astype(int)\n\ntest = pd.read_csv('../input/test.csv')\ntest['first_active_month'].fillna('0-0', inplace=True)\ntest['first_active_year'] = test['first_active_month'].map(lambda x: str(x).split('-')[0]).astype(int)\ntest['first_active_month'] = test['first_active_month'].map(lambda x: str(x).split('-')[1]).astype(int)\n#data_dict = pd.read_excel('../input/Data_Dictionary.xlsx')\ntrain.shape, test.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"ca9d3c5ab7d02637794272a5740b39f9bf253e2d"},"cell_type":"code","source":"data_nmt = pd.read_csv('../input/new_merchant_transactions.csv') #(1_963_031, 14) card_id merchant_id\ndata_nmt.purchase_date = pd.to_datetime(data_nmt.purchase_date)\ndata_nmt['year'] = data_nmt.purchase_date.dt.year\ndata_nmt['month'] = data_nmt.purchase_date.dt.month\ndata_nmt['category_1'] = data_nmt['category_1'].map({'Y':1, 'N':0}).astype(np.int8)\ndata_nmt['category_3'] = data_nmt['category_3'].map({'A':2, 'B':1, 'C':0, np.nan: -1}).astype(np.int8)\ndata_nmt.drop(columns=['authorized_flag', 'purchase_date'], inplace=True)\ndata_nmt.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"9980da8222628bddbaa1725c98fd650c494ee7dc"},"cell_type":"code","source":"data_nmt = pd.read_csv('../input/new_merchant_transactions.csv') #(1_963_031, 14) card_id merchant_id\ndata_nmt['category_1'] = data_nmt['category_1'].map({'Y':1, 'N':0}).astype(np.int8)\ndata_nmt['category_3'] = data_nmt['category_3'].map({'A':2, 'B':1, 'C':0, np.nan: -1}).astype(np.int8)\ndata_nmt.purchase_date = pd.to_datetime(data_nmt.purchase_date)\ndata_nmt['year'] = data_nmt.purchase_date.dt.year\ndata_nmt['month'] = data_nmt.purchase_date.dt.month\ndata_nmt.drop(columns=['authorized_flag', 'purchase_date'], inplace=True)\ndata_nmt.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"1557c9c9618e5001d6892d2a2a799da318f6b520"},"cell_type":"code","source":"data_hist = pd.read_csv('../input/historical_transactions.csv') #(29_112_361, 14) card_id merchant_id\ndata_hist['category_1'] = data_hist['category_1'].map({'Y':1, 'N':0}).astype(np.int8)\ndata_hist['category_3'] = data_hist['category_3'].map({'A':2, 'B':1, 'C':0, np.nan: -1}).astype(np.int8)\ndata_hist = data_hist[data_hist['authorized_flag']=='Y']\ndata_hist.purchase_date = pd.to_datetime(data_hist.purchase_date)\ndata_hist['year'] = data_hist.purchase_date.dt.year\ndata_hist['month'] = data_hist.purchase_date.dt.month\ndata_hist.drop(columns=['authorized_flag', 'purchase_date'], inplace=True)\nprint(data_hist.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"0c6a3f1bb35e949f230138add064d5d54a9011ac"},"cell_type":"code","source":"data_hist = pd.concat((data_hist, data_nmt))\nprint(data_hist.shape)\ndel data_nmt","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"5bcdc36bdd9bb7f8140f8684366d2564d55c4411"},"cell_type":"code","source":"for c in ['category_1', 'category_2', 'category_3', 'installments', 'year', 'month']:\n    du = pd.get_dummies(data_hist[c], prefix=c)\n    du['card_id'] = data_hist['card_id']\n    du = du.groupby(['card_id']).sum()\n    train = pd.merge(train, du, how='left', on=['card_id'])\n    test = pd.merge(test, du, how='left', on=['card_id'])\n    data_hist.drop(columns=[c], inplace=True)\ntrain.shape, test.shape, data_hist.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"f94a92385c2d9d658b3cb9e7dfed1c8b63ed6007"},"cell_type":"code","source":"data_hist_group = data_hist.groupby(['card_id']).agg({\n        'city_id': ['nunique'],\n        'merchant_category_id': ['nunique'],\n        'merchant_id': ['nunique'],\n        'month_lag': ['min', 'max'],\n        'purchase_amount': ['sum', 'median', 'max', 'min', 'std'],\n        'state_id': ['nunique'],\n        'subsector_id': ['nunique']\n        }).reset_index()\ndata_hist_group.columns = [''.join(c) for c in data_hist_group.columns]\n\ntrain = pd.merge(train, data_hist_group, on='card_id', how='left').fillna(-1)\ntest = pd.merge(test, data_hist_group, on='card_id', how='left').fillna(-1)\ndel data_hist_group\ndata_hist.drop(columns=['city_id', 'merchant_category_id', 'month_lag', 'purchase_amount', 'state_id', 'subsector_id'], inplace=True)\ntrain.shape, test.shape, data_hist.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"a01245c7de5366ba3cebfc030ac9745e6e3790ba"},"cell_type":"code","source":"merchants = pd.read_csv('../input/merchants.csv') #(334_696, 22) merchant_id\nmerchants['category_1'] = merchants['category_1'].map({'Y':1, 'N':0}).astype(np.int8)\nmerchants['category_4'] = merchants['category_4'].map({'Y':1, 'N':0}).astype(np.int8)\nmerchants['most_recent_sales_range'] = merchants['most_recent_sales_range'].map({'E':4, 'D':3, 'C':2, 'B':1, 'A':0}).astype(np.int8)\nmerchants['most_recent_purchases_range'] = merchants['most_recent_purchases_range'].map({'E':4, 'D':3, 'C':2, 'B':1, 'A':0}).astype(np.int8)\nmerchants.drop(columns=['merchant_category_id', 'subsector_id', 'city_id', 'state_id'], inplace=True)\ndata_hist = pd.merge(data_hist, merchants, how='left', on=['merchant_id'])\ndel merchants\ndata_hist.drop(columns=['merchant_id'], inplace=True)\ndata_hist.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"5648d7c7725266c2784dfa1e82f1809507766420"},"cell_type":"code","source":"for c in ['category_1', 'category_2', 'category_4', 'most_recent_sales_range', 'most_recent_purchases_range', 'active_months_lag3', 'active_months_lag6', 'active_months_lag12']:\n    du = pd.get_dummies(data_hist[c], prefix='merchants_'+c)\n    du['card_id'] = data_hist['card_id']\n    du = du.groupby(['card_id']).sum()\n    train = pd.merge(train, du, how='left', on=['card_id'])\n    test = pd.merge(test, du, how='left', on=['card_id'])\n    data_hist.drop(columns=[c], inplace=True)\ntrain.shape, test.shape, data_hist.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"0f446e6b2549029a100b182daa87e77ac9be1a3b"},"cell_type":"code","source":"data_hist_group = data_hist.groupby(['card_id']).agg({\n        'merchant_group_id': ['nunique'],\n        'numerical_1': ['min', 'max', 'mean'],\n        'numerical_2': ['min', 'max', 'mean'],\n        'avg_sales_lag3': ['min', 'max', 'mean'],\n        'avg_purchases_lag3': ['min', 'max', 'mean'],\n        'avg_sales_lag6': ['min', 'max', 'mean'],\n        'avg_purchases_lag6': ['min', 'max', 'mean'],\n        'avg_sales_lag12': ['min', 'max', 'mean'],\n        'avg_purchases_lag12': ['min', 'max', 'mean']\n        }).reset_index()\ndata_hist_group.columns = [''.join(c) for c in data_hist_group.columns]\n\ntrain = pd.merge(train, data_hist_group, on='card_id', how='left').fillna(-1)\ntest = pd.merge(test, data_hist_group, on='card_id', how='left').fillna(-1)\ndel data_hist_group\ndel data_hist\ntrain.shape, test.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"22c455efbb481523edf118b6a7caec4ef31287e9"},"cell_type":"code","source":"#for c in data_hist.columns:\n#    print(c, data_hist[c].dtype, len(data_hist[c].unique()), list(data_hist[c].value_counts().index)[:5])","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"9d5178e1eabcd556778bfb53fcaed06ab2f1668f"},"cell_type":"code","source":"col = [c for c in train.columns if c not in ['card_id', 'target']]","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"373c6c8837b5c7d7528c8f173dbbe8b032d254a5"},"cell_type":"code","source":"x1, x2, y1, y2 = model_selection.train_test_split(train[col], train['target'], test_size=0.2, random_state=5)\nparams = {'eta': 0.02, 'objective': 'reg:linear', 'max_depth': 7, 'subsample': 0.9, 'colsample_bytree': 0.9,  'eval_metric': 'rmse', 'seed': 3, 'silent': True}\n\nwatchlist = [(xgb.DMatrix(x1, y1), 'train'), (xgb.DMatrix(x2, y2), 'valid')]\nmodel = xgb.train(params, xgb.DMatrix(x1, y1), 2500,  watchlist, verbose_eval=100, early_stopping_rounds=200)\ntest['target'] = (model.predict(xgb.DMatrix(test[col]), ntree_limit=model.best_ntree_limit))\ntest[['card_id', 'target']].to_csv('xgb_submission.csv', index=False)\nxgb.plot_importance(model, importance_type='weight', max_num_features=20)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"cdfecfa9c7e7e7b5daae205a073d32abfd81cd4b"},"cell_type":"code","source":"x1, x2, y1, y2 = model_selection.train_test_split(train[col], train['target'], test_size=0.2, random_state=6)\nparams = {'learning_rate': 0.02,'max_depth': 9, 'num_leaves': 80, 'application': 'regression', 'boosting': 'gbdt', 'metric': 'rmse', 'seed': 3}\nmodel = lgb.train(params, lgb.Dataset(x1, label=y1), 2500, lgb.Dataset(x2, label=y2), verbose_eval=100, early_stopping_rounds=200)\ntest['target'] = model.predict(test[col], num_iteration=model.best_iteration)\ntest[['card_id', 'target']].to_csv('lgb_submission.csv', index=False)\nlgb.plot_importance(model, importance_type='split', max_num_features=20)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"ce8e73df4b6242c845339a6456454f67d08b070d"},"cell_type":"code","source":"x1, x2, y1, y2 = model_selection.train_test_split(train[col], train['target'], test_size=0.2, random_state=7)\nparams = {'depth': 9,'eta': 0.02, 'loss_function': 'RMSE', 'task_type' :'CPU', 'od_type': 'Iter', 'early_stopping_rounds':100, 'num_boost_round': 2500, 'random_seed': 217}\n\nmodel = CatBoostRegressor(**params)\nmodel.fit(x1, y1, eval_set=(x2,y2), verbose=100, plot=True)\ntest['target'] = model.predict(test[col])\ntest[['card_id', 'target']].to_csv('cb_submission.csv', index=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"0b2fc39dd6ba9f791ed03b4407dc8872a9e65ffa"},"cell_type":"code","source":"!rm -r catboost_info","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"c5c0de22c04f7d8a289a7c8f77e1d76231356dd4"},"cell_type":"code","source":"sub1 = pd.read_csv('xgb_submission.csv').rename(columns={'target': 'target1'})\nsub2 = pd.read_csv('lgb_submission.csv').rename(columns={'target': 'target2'})\nsub3 = pd.read_csv('cb_submission.csv').rename(columns={'target': 'target3'})\nsub = pd.merge(sub1, sub2, how='left', on=['card_id'])\nsub = pd.merge(sub, sub3, how='left', on=['card_id'])\nsub['target'] = (sub['target1'] + sub['target2'] + sub['target3']) / 3\nsub[['card_id', 'target']].to_csv('submission_blend.csv', index=False)","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.7"}},"nbformat":4,"nbformat_minor":1}