{"cells":[{"metadata":{"trusted":false,"_uuid":"03ea5b8e6398ffd08722efd6f4fd8404c29a89d3"},"cell_type":"code","source":"# ELO ","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"fed059e5af05eeb72b7e5701c0111d9004fb4fa8"},"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport scipy as sc\nfrom matplotlib import pyplot as plt","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"c71e8c3d80fbd0de95519308815699eba7eedcd9"},"cell_type":"code","source":"#Reading Sample Training Data\nelo_train_data = pd.read_csv(\"../input/train.csv\",parse_dates=['first_active_month'])\nelo_train_data.head(n=5)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"18abbed18d57e44fd3c4eacd401c3a05b979fe28"},"cell_type":"code","source":"#Reading Ssmple Test Data\nelo_test_data = pd.read_csv(\"../input/test.csv\",parse_dates=['first_active_month'])\nelo_test_data.head(n=5)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"728a34cbb256ac3ad76c008c7bf41df37256e8fc"},"cell_type":"code","source":"# Reading Elo Historical Transactions Data\nelo_historical_transactions_data = pd.read_csv(\"../input/historical_transactions.csv\")\nelo_historical_transactions_data.head(n=5)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"e7fd52931fc66434166adac4e87020ece9763c93"},"cell_type":"code","source":"# Reading ELO merchants data\n\nelo_merchants_data = pd.read_csv(\"../input/merchants.csv\")\n\nelo_merchants_data.head(n=5)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"311a503fd29009f7b588990d3d28b3721272d139"},"cell_type":"code","source":"# Reading ELO new merchants transaction datas\n\nelo_merchant_transactions_data = pd.read_csv(\"../input/new_merchant_transactions.csv\")\nelo_merchant_transactions_data.head(n=5)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"db01fe20cd53b6531e2fc67cdd1b5b18e3e7b1f0"},"cell_type":"code","source":"# Shape of training dataset.\nprint(elo_train_data.shape)\n# Shape of Test Data\nprint(elo_test_data.shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"aead5a8f45c16ef456ffd6f7c3b8ba986f500d10"},"cell_type":"code","source":"import seaborn as sns\nplt.figure(figsize=(24,32))","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"40ea45e6cc1efb2775522304c7dc7c7302afc81f"},"cell_type":"code","source":"target_col=\"target\"\nsns.distplot(elo_train_data[target_col],bins=40,kde=False,color=\"Green\")\nplt.title(\"Histogram of Loyalty Score\")\nplt.xlabel(\"Loyalty Score\")\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"d2a68287993e3e61b9e4cd352c04bc3470d54287"},"cell_type":"code","source":"# First Active Month Analysis","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"6c9fea030e8a5f87739219ceab22be39553b2e05"},"cell_type":"code","source":"cnt_srs = elo_train_data['first_active_month'].dt.date.value_counts()\n#cnt_srs.head(n=5)\ncnt_srs.sort_index(inplace=True)\nplt.figure(figsize=(14,6))\nprint(cnt_srs.index)\nprint(cnt_srs.values)\nsns.barplot(cnt_srs.index,cnt_srs.values,alpha=0.8,color='green')\nplt.xticks(rotation='vertical')\nplt.xlabel('First Active Month',fontsize=12)\nplt.ylabel(\"First Active Month Count in Train Set\")\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"0efa8de7d7c9516d8bfb33e51f4f17ff09534f19"},"cell_type":"code","source":"plt.figure(figsize=(8,4))\nsns.violinplot(x='feature_1',y=target_col,data=elo_train_data)\nplt.xticks(rotation='vertical')\nplt.xlabel(\"Feature-1\")\nplt.ylabel(\"Loyalty Score\")\nplt.title(\"Feature 1 Distribution\")\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"5bafea0639e5ab3dafa6ac8d8f670739113a01c7"},"cell_type":"code","source":"elo_cumulative_historical_transact_data= elo_historical_transactions_data.groupby(['card_id'])\nelo_cumulative_historical_transact_data = elo_cumulative_historical_transact_data['purchase_amount'].size().reset_index()\nelo_cumulative_historical_transact_data.columns=['card_id','num_historical_transactions']\nelo_cumulative_historical_transact_data.head(n=5)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"2cb10c2bd2ee699f14ec30d558da408e097bad85"},"cell_type":"code","source":"elo_train_data = pd.merge(elo_train_data,elo_cumulative_historical_transact_data,on='card_id',how=\"left\")\nelo_train_data.head(n=5)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"db6b780f28944b646642ad53c26a05d6aa16cf54"},"cell_type":"code","source":"elo_test_data = pd.merge(elo_test_data,elo_cumulative_historical_transact_data,on='card_id',how='left')\nelo_test_data.head(n=5)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"1bb1f0a13c3e7c14a9b322335b967435556fb1c5"},"cell_type":"code","source":"cnt_srs = elo_train_data.groupby(\"num_historical_transactions\")[target_col].mean()\n#print(cnt_srs.head(n=5))\nsns_srs = cnt_srs.sort_index()\n#print(cnt_srs.head(n=5))\ncnt_srs = cnt_srs[:-50]\nprint(cnt_srs.head(n=50))","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"16057519c8043c79a75710662d2fb3633ad1a208"},"cell_type":"code","source":"from plotly import tools\nimport plotly.offline as py\npy.init_notebook_mode(connected=True)\nimport plotly.graph_objs as go\n%matplotlib inline","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"c80bf8b9edb25d467dee50bde1bd8ba95fd939dd"},"cell_type":"code","source":"def scatter_plot(cnt_srs,color):\n    trace = go.Scatter(\n        x=cnt_srs.index[::-1],\n        y=cnt_srs.values[::-1],\n        showlegend=False,\n        marker=dict(\n            color = color,\n        ),\n    )\n    return trace\n        \ntrace = scatter_plot(cnt_srs,\"orange\")\nlayout = dict(title=\"Loyalty Score by Number of Historical Transactions\",)\ndata = [trace]\nfig = go.Figure(data=data,layout=layout)\npy.iplot(fig,filename=\"Histtransact\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"f0f22b508ef53607b5449dd5b5f8b0dcd02b916f"},"cell_type":"code","source":"bins = [0,10,20,30,40,50,75,100,150,200,500,10000]\nelo_train_data['binned_number_hist_transactions'] = pd.cut(elo_train_data['num_historical_transactions'],bins)\ncnt_srs = elo_train_data.groupby(\"binned_number_hist_transactions\")[target_col].mean()\nplt.figure(figsize=(12,8))\nsns.boxplot(x=\"binned_number_hist_transactions\",y=target_col,data=elo_train_data,showfliers=False)\nplt.xticks(rotation='vertical')\nplt.xlabel(\"binned_number_hist_transactions\",fontsize=12)\nplt.ylabel('Loyalty Score',fontsize=12)\nplt.title(\"binned_number_hist_transactions_distribution\")\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"459e3992eeddb67ab2ef61a95ca48b46c1d694b7"},"cell_type":"code","source":"elo_cumulative_historical_transact_data =elo_historical_transactions_data.groupby(\"card_id\")\nelo_cumulative_historical_transact_data = elo_cumulative_historical_transact_data[\"purchase_amount\"].agg(['sum','min','std','mean','max']).reset_index()\nelo_cumulative_historical_transact_data.columns = ['card_id','sum_historical_transactions','min_historical_transactions','std_historical_transactions','mean_historical_transactions','max_historical_transactions']\nelo_train_data = pd.merge(elo_train_data,elo_cumulative_historical_transact_data,on=\"card_id\",how=\"left\")\nelo_test_data = pd.merge(elo_test_data,elo_cumulative_historical_transact_data,on=\"card_id\",how=\"left\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"f0541ae1cbe65140f49127a1cd3b5cf2a5753196"},"cell_type":"code","source":"elo_train_data.head(n=5)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"5600df044389c902dd31a53cb7abad454066121e"},"cell_type":"code","source":"bins = np.percentile(elo_train_data['sum_historical_transactions'],range(0,101,10))\nelo_train_data['binned_sum_historical_transactions'] = pd.cut(elo_train_data['sum_historical_transactions'],bins)\nplt.figure(figsize=(12,8))\nsns.boxplot(x=\"binned_sum_historical_transactions\",y=target_col,data=elo_train_data,showfliers=False)\nplt.xticks(rotation='vertical')\nplt.xlabel(\"binned_sum_historical_transactions\",fontsize=12)\nplt.ylabel('Loyalty Score',fontsize=12)\nplt.title(\"Sum of Historical Transaction value(Binned) distribution\")\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"3fc12c1c6223c85329a4e2be02560fd5ec28d7b0"},"cell_type":"code","source":"# Merchant Transactions","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"e6c1e1d26e5c0e7af35476ad8b1e4cf9cfddec9f"},"cell_type":"code","source":"elo_merchant_transactions_data.head(n=5)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"eafe6973558554cfede28e90010a72d128eac9ff"},"cell_type":"code","source":"elo_cumulative_merchant_transactions_data = elo_merchant_transactions_data.groupby(\"card_id\")\nelo_cumulative_merchant_transactions_data = elo_cumulative_merchant_transactions_data[\"purchase_amount\"].size().reset_index()\n#elo_cumulative_merchant_transactions_data.head(n=5)\nelo_cumulative_merchant_transactions_data.columns=['card_id','num_merchant_transactions']\nelo_train_data = pd.merge(elo_train_data,elo_cumulative_merchant_transactions_data,on=\"card_id\",how=\"left\")\nelo_test_data = pd.merge(elo_test_data,elo_cumulative_merchant_transactions_data,on=\"card_id\",how=\"left\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"d60dcd6aa9f217ae9952ebabcac16bfb63a5d34b"},"cell_type":"code","source":"elo_train_data.head(n=5)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"9a18aaaa5fd3e96950213afc86f003e0f13a7230"},"cell_type":"code","source":"bins = [0,10,20,30,40,50,75,1000]\nelo_train_data[\"binned_number_merchant_transactions\"] = pd.cut(elo_train_data['num_merchant_transactions'],bins)\ncnt_srs = elo_train_data.groupby(\"binned_number_merchant_transactions\")[target_col].mean()\nplt.figure(figsize=(12,8))\nsns.boxplot(x=\"binned_number_merchant_transactions\",y=target_col,data=elo_train_data,showfliers=False)\nplt.xticks(rotation=\"vertical\")\nplt.xlabel(\"binned_number_merchant_transactions\",fontsize=12)\nplt.ylabel(\"Loyalty Score\",fontsize=12)\nplt.title(\"Number Of New Merchants Transaction Distribution(binned)\")\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"8dc76d250d1554b09559f932ed5e3e125f38db84"},"cell_type":"code","source":"elo_cumulative_merchant_transactions_purchase_data = elo_merchant_transactions_data.groupby(\"card_id\")\nelo_cumulative_merchant_transactions_purchase_data = elo_cumulative_merchant_transactions_purchase_data[\"purchase_amount\"].agg(['sum','mean','std','min','max']).reset_index()\nelo_cumulative_merchant_transactions_purchase_data.columns = [\"card_id\",\"sum_merchant_transactions\",\"mean_merchant_transactions\",\"std_merchant_transactions\",\"min_merchant_transactions\",\"max_merchant_transactions\"]\nelo_train_data = pd.merge(elo_train_data,elo_cumulative_merchant_transactions_purchase_data,on=\"card_id\",how=\"left\")\nelo_test_data = pd.merge(elo_test_data,elo_cumulative_merchant_transactions_purchase_data,on=\"card_id\",how=\"left\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"2df0aaf1b863b58c33c2dd872e26c4021770fab4"},"cell_type":"code","source":"elo_train_data.head(n=5)","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"5623ccd12905c0df1b4f0a0b915b40f52dfaf1df"},"cell_type":"code","source":"bins = np.nanpercentile(elo_train_data[\"sum_merchant_transactions\"],range(0,101,10))\nelo_train_data[\"binned_sum_merchant_transactions\"] = pd.cut(elo_train_data[\"sum_merchant_transactions\"],bins)\nplt.figure(figsize=(12,8))\nsns.boxplot(x=\"binned_sum_merchant_transactions\",y=target_col,data=elo_train_data,showfliers=False)\nplt.xticks(rotation=\"vertical\")\nplt.xlabel(\"Binned Sum New Merchant Transactions\",fontsize=12)\nplt.ylabel(\"Loyalty Score\")\nplt.title(\"SUm Of New Merchant Transactions Value Distribution\")\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"22d2280bbd0008b17b9844284b36905b040138ca"},"cell_type":"code","source":"#BaselineModel","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"b7dc9ad48785315f660a9b8304026e75e89f5d09"},"cell_type":"code","source":"elo_train_data[\"year\"] = elo_train_data[\"first_active_month\"].dt.year\nelo_test_data[\"year\"] = elo_test_data[\"first_active_month\"].dt.year\nelo_train_data[\"month\"] = elo_train_data[\"first_active_month\"].dt.month\nelo_test_data[\"month\"] = elo_test_data[\"first_active_month\"].dt.month","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"a8b5a8855db4721c09aa0b3708536831e1db56e7"},"cell_type":"code","source":"elo_train_data.columns","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"7a782311321543bddd9b1d505de9e3bf8a5d2826"},"cell_type":"code","source":"columns_to_use = [\"feature_1\",\"feature_2\",\"feature_3\",\"year\",\"month\",\"num_historical_transactions\",\n                 \"sum_historical_transactions\",\"mean_historical_transactions\",\"std_historical_transactions\",\n                 \"min_historical_transactions\",\"max_historical_transactions\",\"num_merchant_transactions\",\n                 \"sum_merchant_transactions\",\"mean_merchant_transactions\",\"std_merchant_transactions\",\n                  \"min_merchant_transactions\",\"max_merchant_transactions\"]","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"9d70d4bbd0dd9ce02a9a03883012347857eaf997"},"cell_type":"code","source":"import lightgbm as lgb\nfrom sklearn import model_selection,preprocessing,metrics","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"c19d04a521f090ef97b1dfef57538960500626cb"},"cell_type":"code","source":"\ndef run_light_gradient_boosting(train_X,train_Y,val_X,val_Y,test_X):\n    params = {\n        \"objective\": \"regression\",\n        \"metric\": \"rmse\",\n        \"num_leaves\":30,\n        \"min_child_weight\":50,\n        \"learning_rate\":0.05,\n        \"bagging_fraction\":0.7,\n        \"feature_fraction\":0.7,\n        \"bagging_seed\":2018,\n        \"verbosity\":-1\n    }\n    \n    lgtrain = lgb.Dataset(train_X,label=train_Y)\n    lgval = lgb.Dataset(val_X,label=val_Y)\n    evals_result ={}\n    model = lgb.train(params,lgtrain,1000,valid_sets=lgval,early_stopping_rounds=200,verbose_eval=100,evals_result=evals_result)\n    pred_test_Y = model.predict(test_X,num_iteration=model.best_iteration)\n    return pred_test_Y,model,evals_result\ntrain_X = elo_train_data[columns_to_use]\ntest_X = elo_test_data[columns_to_use]\ntrain_Y = elo_train_data[target_col].values\n\npred_test = 0\nkf = model_selection.KFold(n_splits=5,random_state=2018,shuffle=True)\nfor dev_index,val_index in kf.split(elo_train_data):\n    dev_X,val_X = train_X.loc[dev_index,:] ,train_X.loc[val_index,:]\n    dev_Y,val_Y = train_Y[dev_index] ,train_Y[val_index]\n    pred_test_tmp, model,evals_result = run_light_gradient_boosting(dev_X,dev_Y,val_X,val_Y,test_X)\n    pred_test += pred_test_tmp\n    \npred_test /=5","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"f050e09198173432834223a9b870b4fb910dbe9f"},"cell_type":"code","source":"fig,ax = plt.subplots(figsize=(12,10))\nlgb.plot_importance(model,max_num_features=50,height=0.8,ax=ax)\nax.grid(False)\nplt.title(\"Light GBM- Feature Importance\",fontsize=15)\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":false,"_uuid":"3ee4d9a6e9cf6fb09e3b4ae88badef0b5a61188f"},"cell_type":"code","source":"sub_df = pd.DataFrame({\"card_id\":elo_test_data[\"card_id\"].values})\nsub_df[\"target\"] = pred_test\nsub_df.to_csv(\"lgb_output.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.6"}},"nbformat":4,"nbformat_minor":1}