{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","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\nimport numpy as np # linear algebra\nimport 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\nimport os\nprint(os.listdir(\"../input\"))\n\n# Any results you write to the current directory are saved as output.\nimport seaborn as sns\nimport matplotlib.pyplot as plt\nimport missingno as msno\nimport datetime\nfrom sklearn import preprocessing\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nsns.set(style=\"darkgrid\")\n%matplotlib inline\nimport lightgbm as lgb\nfrom sklearn.metrics import mean_squared_error","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","collapsed":true,"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":false},"cell_type":"code","source":"train = pd.read_csv('../input/train.csv')\ntest = pd.read_csv('../input/test.csv')\nh_transaction = pd.read_csv('../input/historical_transactions.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ba0979a92d31e329eb47cbe46622e67643af57dd"},"cell_type":"code","source":"ms = h_transaction.isnull().sum()/len(h_transaction)\nprint(ms)\nmsno.bar(h_transaction)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"211d763500444ff12888a8969b25bb8518805bbb"},"cell_type":"code","source":"new_train = train.merge(h_transaction, how = 'inner')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"cc6809928431edcfbcde17669a88792b62360b09"},"cell_type":"code","source":"print(new_train.info())\nprint(train.info())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"eb06a5c007eda9860fbaac1b4445a92723f54faa"},"cell_type":"code","source":"print(new_train.head(100))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ebdacb0ebcfe4da77c4005c778f39ee379d55769"},"cell_type":"code","source":"b_engin = new_train.loc[:,['card_id', 'purchase_amount','month_lag']]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"09029c9b03298c37e336c4793bd6ea2d4fc7f36e"},"cell_type":"code","source":"engin = b_engin.groupby(['card_id'])['purchase_amount','month_lag'].mean()\nprint(engin.info())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"578ab83f9a7a2c6097100764dc0e216785314cbd"},"cell_type":"code","source":"new_train['authorized_flag'] = str(new_train['authorized_flag'])\nprint(new_train.info())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"cf6fc4e83badf4bbc32de179516d86e9051a2a75"},"cell_type":"code","source":"new_train.first_active_month = pd.to_datetime(new_train.first_active_month)\nnew_train.purchase_date = pd.to_datetime(new_train.purchase_date)\nnew_train['purchase_time_length'] = (new_train.purchase_date - new_train.first_active_month)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"0d6e53bde97294fd18201f240b781a4efcc1fbdb"},"cell_type":"code","source":"activity_month = new_train.loc[:, ['card_id','purchase_time_length']]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"e5584e3209eadc26027f6b1993b48aaa7fb6bc8e"},"cell_type":"code","source":"activity_month['trans30'] = activity_month['purchase_time_length'] <= datetime.timedelta(days=30)\nactivity_month['trans30'][activity_month['trans30'] == True] = 1\nactivity_month['trans30'][activity_month['trans30'] == False] = 0","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"5e5c0f5db6c224efc4ed37cbc3a271fbc8409d98"},"cell_type":"code","source":"activity_month_1 = activity_month.groupby(['card_id'])['trans30'].sum()\nprint(activity_month_1.head())\nactivity_month_1 = activity_month_1.to_frame()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"8661084406913003ead0abc11d678458c9471ec4"},"cell_type":"code","source":"activity_month2 = new_train.loc[:, ['card_id','purchase_time_length']]\nactivity_month2['trans180'] = activity_month2['purchase_time_length'] <= datetime.timedelta(days=180)\nactivity_month2['trans180'][activity_month2['trans180'] == True] = 1\nactivity_month2['trans180'][activity_month2['trans180'] == False] = 0\nactivity_month_6 = activity_month2.groupby(['card_id'])['trans180'].sum()\nprint(activity_month_6.head())\nactivity_month_6 = activity_month_6.to_frame()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"96731d7ab906b2c72c06d71a992333fe7c1e3a64"},"cell_type":"code","source":"activity_month3 = new_train.loc[:, ['card_id','purchase_time_length']]\nactivity_month3['trans90'] = activity_month3['purchase_time_length'] <= datetime.timedelta(days=90)\nactivity_month3['trans90'][activity_month3['trans90'] == True] = 1\nactivity_month3['trans90'][activity_month3['trans90'] == False] = 0\nactivity_month_3 = activity_month3.groupby(['card_id'])['trans90'].sum()\nprint(activity_month_3.head())\nactivity_month_3 = activity_month_3.to_frame()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ab91cc7fdd398ddc7dcda56c9caad028b0f71f68"},"cell_type":"code","source":"print(new_train.info())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"c3beddc118a24a6968efa2bd343adbe95ca7e086"},"cell_type":"code","source":"# further data engineering on transaction history\nc_engin = new_train.loc[:,['card_id', 'purchase_amount','month_lag','merchant_category_id','state_id','city_id']]\nengin2_max = c_engin.loc[:,['card_id','purchase_amount','month_lag']].groupby('card_id')['purchase_amount','month_lag'].max()\n#change the columns name\nengin2_max.columns = ['purchase_amount_max','month_lag_max']","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d236df81a74b08e42349c611cdbf9d92f5d2c4a0"},"cell_type":"code","source":"#create columns of min values of 'purchase_amount','month_lag'\nengin2_min = c_engin.loc[:,['card_id','purchase_amount','month_lag']].groupby('card_id')['purchase_amount','month_lag'].min()\n#change the columns name\nengin2_min.columns = ['purchase_amount_min','month_lag_min']","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ba9d350089a2e291ce0c8cebb2a11f026421b263"},"cell_type":"code","source":"#create columns of median values of 'purchase_amount','month_lag'\nengin2_median = c_engin.loc[:,['card_id','purchase_amount','month_lag']].groupby('card_id')['purchase_amount','month_lag'].median()\n#change the columns name\nengin2_median.columns = ['purchase_amount_median','month_lag_median']","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"226b2c9f9dae3f122cfa5acbd5ef0756b05abd9e"},"cell_type":"code","source":"#create columns of std values of 'purchase_amount','month_lag'\nengin2_std = c_engin.loc[:,['card_id','purchase_amount','month_lag']].groupby('card_id')['purchase_amount','month_lag'].std()\n#change the columns name\nengin2_std.columns = ['purchase_amount_std','month_lag_std']","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"e16eaafff06dc6de13f53a2bcd23ede4072f813c"},"cell_type":"code","source":"c_engin['merchant_category_id'] = c_engin['merchant_category_id'].apply(int)\nc_engin['state_id'] =  c_engin['state_id'].apply(int)\nc_engin['city_id'] =  c_engin['city_id'].apply(int)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"066befd45a1e36fcb364bcd5dd4062c3e6f1be7f"},"cell_type":"code","source":"#create columns of unique count value of state id, city and category\nengin2_u_count = c_engin.loc[:,['card_id','merchant_category_id','state_id','city_id']].groupby('card_id')['merchant_category_id','state_id','city_id'].agg('nunique')\nengin2_u_count.columns = ['merchant_category_id_u_count','state_id_u_count','city_id_u_count']","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"c7cc4d15f50f789567796dafe9921cbb93ce9973"},"cell_type":"code","source":"c_engin.loc[:,['card_id','merchant_category_id','state_id','city_id']].head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"462fa8a48b8fd055c63e4c7876870ee9469f4af4"},"cell_type":"code","source":"#join! every! things!\ntrain1 = train.merge(engin,on = 'card_id', how = 'inner')\ntrain2 = train1.merge(activity_month_1,on = 'card_id', how = 'inner')\ntrain3 = train2.merge(activity_month_3,on = 'card_id', how = 'inner')\ntrain4 = train3.merge(activity_month_6,on = 'card_id', how = 'inner')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ebd720ed2a06b785bf213c703853c6f8e5543ede"},"cell_type":"code","source":"train4 = train4.merge(engin2_max,on = 'card_id', how = 'inner')\ntrain4 = train4.merge(engin2_min,on = 'card_id', how = 'inner')\ntrain4 = train4.merge(engin2_median,on = 'card_id', how = 'inner')\ntrain4 = train4.merge(engin2_std,on = 'card_id', how = 'inner')\ntrain4 = train4.merge(engin2_u_count,on = 'card_id', how = 'inner')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"c3a18d4b0bfbc6a431689c6cb077890b08408c55"},"cell_type":"code","source":"train4['trans30_n'] = (train4['trans30'] - min(train4['trans30']))/(max(train4['trans30']) - min(train4['trans30']))\ntrain4['trans90_n'] = (train4['trans90'] - min(train4['trans90']))/(max(train4['trans90']) - min(train4['trans90']))\ntrain4['trans180_n'] = (train4['trans180'] - min(train4['trans180']))/(max(train4['trans180']) - min(train4['trans180']))\ntrain4['purchase_amount_n'] = (train4['purchase_amount'] - min(train4['purchase_amount']))/(max(train4['purchase_amount']) - min(train4['purchase_amount']))\ntrain4['month_lag_n'] = (train4['month_lag'] - min(train4['month_lag']))/(max(train4['month_lag']) - min(train4['month_lag']))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"cc55aa0a1b1059dc1bb0b63753e8afe16b7d0c68"},"cell_type":"code","source":"train_relation = train4.iloc[:, [1,2,3,5,6,7,11,12,13,14]]\ntrain4['purchase_amount_n'][train4['purchase_amount_n'] > 0.5] = np.average(train4['purchase_amount_n'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"c2bca08045ab65e03410009f93ccd068b4810315"},"cell_type":"code","source":"train4.first_active_month = pd.to_datetime(train4.first_active_month)\nprint(train4.head())\ntrain4['year_active'], train4['month_active'], train4['day_active'] = train4.first_active_month.dt.year, train4.first_active_month.dt.month,train4.first_active_month.dt.day \nprint(train4.info())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"06d77e5acb94994daaf563e04d2f74e1f08367d7"},"cell_type":"code","source":"sns.pairplot(train_relation)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"7e312d4befd0888c9d30d593943f88a2f38f3c5c"},"cell_type":"code","source":"sns.violinplot(y = \"trans30\", x=\"feature_1\", data = train4);","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"26f1fde1e983c1f98ff7e53dba3b2e00ca43ec29"},"cell_type":"code","source":"sns.barplot(y = \"trans90\", x=\"feature_1\",hue = 'feature_2', data = train4, palette = \"RdBu\");","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"90439d0ce13d47265be4661706069af11fcd755b"},"cell_type":"code","source":"sns.barplot(y = \"trans90\", x=\"feature_1\",hue = 'feature_3', data = train4);","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d8ee37bfb49f186f9afb2d957940b74492d68eb4"},"cell_type":"code","source":"fig = plt.figure(figsize = (14,14))\nax1 = fig.add_subplot(411)\nax2 = fig.add_subplot(412)\nax3 = fig.add_subplot(413)\nax4 = fig.add_subplot(414)\nsns.violinplot(x=\"feature_1\", y=\"target\",\n            data = train4, ax =ax1, palette=\"Set2\");\nsns.violinplot(x=\"feature_1\", y=\"trans30\",\n            data = train4, ax =ax2, palette=\"Set2\");\nsns.violinplot(x=\"feature_1\", y=\"month_lag\",\n            data = train4, ax =ax3, palette=\"Set2\");\nsns.violinplot(x=\"feature_1\", y=\"purchase_amount\",\n            data = train4, ax =ax4, palette=\"Set2\");","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"40d28581240fa116ce48195d18205f14b2b19da4"},"cell_type":"code","source":"fig = plt.figure(figsize = (14,14))\nax1 = fig.add_subplot(411)\nax2 = fig.add_subplot(412)\nax3 = fig.add_subplot(413)\nax4 = fig.add_subplot(414)\nsns.violinplot(x=\"feature_2\", y=\"target\",\n            data = train4, ax =ax1);\nsns.violinplot(x=\"feature_2\", y=\"trans30\",\n            data = train4, ax =ax2);\nsns.violinplot(x=\"feature_2\", y=\"month_lag\",\n            data = train4, ax =ax3);\nsns.violinplot(x=\"feature_2\", y=\"purchase_amount\",\n            data = train4, ax =ax4);","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"03b0597b80a0876ad6c233127f2dc05364546756"},"cell_type":"code","source":"train4.corr()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"7bd37cbce7f14af8554f7264ade35fcb514c4d33"},"cell_type":"code","source":"from sklearn.ensemble import RandomForestRegressor\ntrain_new = train4.drop(['card_id'], axis=1)\ntrain_independent = train_new.drop(['target','first_active_month'], axis = 1)\nprint(train_new.columns)\nmodel = RandomForestRegressor()\ntrain_independent = pd.get_dummies(train_independent)\nmodel.fit(train_independent,train_new.target)\n\nimportances = model.feature_importances_\nprint(importances)\n#经过分析筛选前十的variable是important的\nimport matplotlib.pyplot as plt\nplt.style.use('ggplot')\nfeatures = train_independent.columns\nprint(features)\nimportance = model.feature_importances_\nfind = np.argsort(importance[0:30])\nprint(find)  # top 20 features\nplt.title('selected features')\nplt.barh(range(len(find)), importance[find], color='orange', align='center')\nplt.yticks(range(len(find)), [features[i] for i in find])\nplt.xlabel('Importance')\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"980640d0c0a0b9b49e506de5920a7cb656288886"},"cell_type":"code","source":"train_m = train4.loc[:,['feature_1', 'feature_2', 'feature_3', 'purchase_amount', 'month_lag',\n        'trans30_n', 'trans90_n',\n       'trans180_n', 'purchase_amount_n', 'month_lag_n', 'year_active',\n       'month_active','purchase_amount_max_x',\n       'month_lag_max_x',\n       'purchase_amount_min', 'month_lag_min', 'purchase_amount_median',\n       'month_lag_median', 'purchase_amount_std', 'month_lag_std',\n       'merchant_category_id_u_count', 'state_id_u_count', 'city_id_u_count']]\ntarget = train4.loc[:,['target']]\nprint(train_m.head())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"0a57d71bd7b12dc849c8b3bcc1f3e9f605dab0a7"},"cell_type":"code","source":"from sklearn.model_selection import train_test_split\ntrain_X,test_X, train_y, test_y = train_test_split(train_m,target,test_size = 0.3,random_state = 0)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"8af6c6f85b7d09a5f2d3e511b8733c3c866d7df0"},"cell_type":"code","source":"#LIGHT GBM方法预测\nlgb_train = lgb.Dataset(train_X, train_y) # 将数据保存到LightGBM二进制文件将使加载更快\nlgb_eval = lgb.Dataset(test_X, test_y, reference=lgb_train) \n\n\nparams = {\n    'task': 'train',  \n    'objective': 'regression', \n    'metric': {'l2', 'rmse'},  \n    'num_leaves': 12,  \n    'learning_rate': 0.23,  \n    'feature_fraction': 0.9, \n    'bagging_fraction': 0.8, \n    'bagging_freq': 1, \n    'verbose': 1,\n    \"reg_alpha\": 1.5,\n    \"reg_lambda\": 1,\n    \"max_depth\": 7,\n    \"min_child_samples\": 8\n}\n\nprint('Start training...')\n\ngbm = lgb.train(params,lgb_train,num_boost_round=20,valid_sets=lgb_eval,early_stopping_rounds=5)\n \nprint('Save model...') \n \ngbm.save_model('model.txt') \\\n \nprint('Start predicting...')\n\ny_pred = gbm.predict(test_X, num_iteration=gbm.best_iteration) \nprint(y_pred)\nprint('The rmse of prediction is:', mean_squared_error(test_y, y_pred) ** 0.5) ","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}