{"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.","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"train_df = pd.read_csv('../input/train.csv')\ntest_df = pd.read_csv('../input/test.csv')\nhist_df = pd.read_csv('../input/historical_transactions.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"7dac7f223e2fd59be2790a3fe116e817a550c4f0"},"cell_type":"code","source":"for feat in ['authorized_flag', 'installments', 'category_1', 'category_2', 'category_3', 'month_lag']:\n    print (feat, len(hist_df[feat].unique()))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"2848b2cbb029345929dbb0c4621ec360f34de69b"},"cell_type":"code","source":"print(hist_df.month_lag.unique(), hist_df.installments.unique())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"fd05fbf7b02856f00fb0454f2d2b1ecbc88c085e"},"cell_type":"code","source":"feats = []\nfor feat in ['authorized_flag', 'category_1', 'category_3', 'category_2']:\n    for feat_val in hist_df[feat].unique():\n        name = feat + \":\" + (str(feat_val))\n        \n        hist_df[name] = hist_df[feat].apply(lambda x: 1 if x == feat_val else 0)\n        \n        gdf = hist_df.groupby(\"card_id\")[name].agg(['sum', 'mean', 'std', 'min', 'max']).reset_index()\n        gdf.columns = [\"card_id\", \"sum_{}\".format(name), \"mean_{}\".format(name), \"std_{}\".format(name), \"min_{}\".format(name), \"max_{}\".format(name)]\n        hist_df.drop(name, axis=1, inplace=True)\n        \n        train_df = pd.merge(train_df, gdf, on=\"card_id\", how=\"left\")\n        test_df = pd.merge(test_df, gdf, on=\"card_id\", how=\"left\")\n        \n        del gdf\n        import gc; gc.collect()\n        import time; time.sleep(10)\n        \n        for u in ['sum', 'mean', 'std', 'min', 'max']:\n            feats.append(\"{}_{}\".format(u, name))\n        print (\"{} done\".format(name))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"2e91a81652a2ebcdca820f5c1761a62fdbb582b8"},"cell_type":"code","source":"gdf = hist_df.groupby(\"card_id\")\ngdf = gdf[\"installments\"].agg(['sum', 'mean', 'std', 'min', 'max']).reset_index()\ngdf.columns = [\"card_id\", \"sum_installments\", \"mean_installments\", \"std_installments\", \"min_installments\", \"max_installments\"]\ntrain_df = pd.merge(train_df, gdf, on=\"card_id\", how=\"left\")\ntest_df = pd.merge(test_df, gdf, on=\"card_id\", how=\"left\")\n\ngdf = hist_df.groupby(\"card_id\")\ngdf = gdf[\"month_lag\"].agg(['sum', 'mean', 'std', 'min', 'max']).reset_index()\ngdf.columns = [\"card_id\", \"sum_month_lag\", \"mean_month_lag\", \"std_month_lag\", \"min_month_lag\", \"max_month_lag\"]\ntrain_df = pd.merge(train_df, gdf, on=\"card_id\", how=\"left\")\ntest_df = pd.merge(test_df, gdf, on=\"card_id\", how=\"left\")\n\ngdf = hist_df.groupby(\"card_id\")\ngdf = gdf[\"purchase_amount\"].agg(['sum', 'mean', 'std', 'min', 'max']).reset_index()\ngdf.columns = [\"card_id\", \"sum_hist_trans\", \"mean_hist_trans\", \"std_hist_trans\", \"min_hist_trans\", \"max_hist_trans\"]\ntrain_df = pd.merge(train_df, gdf, on=\"card_id\", how=\"left\")\ntest_df = pd.merge(test_df, gdf, on=\"card_id\", how=\"left\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"66fc994ca4af0c5b0a56e0ef78e0c40e2af2412d"},"cell_type":"code","source":"del hist_df, gdf\nimport gc; gc.collect()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"f748473d1ad2fc6bdac6adb8623438f497f30d8a"},"cell_type":"code","source":"new_trans_df = pd.read_csv(\"../input/new_merchant_transactions.csv\")\nnew_trans_df.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"bde36919e41c39d157abd9e121667114fd72f1d3"},"cell_type":"code","source":"for feat in ['authorized_flag', 'category_1', 'category_3', 'category_2']:\n    for feat_val in new_trans_df[feat].unique():\n        name = 'new_' + feat + \":\" + (str(feat_val))\n        \n        new_trans_df[name] = new_trans_df[feat].apply(lambda x: 1 if x == feat_val else 0)\n        \n        gdf = new_trans_df.groupby(\"card_id\")[name].agg(['sum', 'mean', 'std', 'min', 'max']).reset_index()\n        gdf.columns = [\"card_id\", \"sum_{}\".format(name), \"mean_{}\".format(name), \"std_{}\".format(name), \"min_{}\".format(name), \"max_{}\".format(name)]\n        new_trans_df.drop(name, axis=1, inplace=True)\n        \n        train_df = pd.merge(train_df, gdf, on=\"card_id\", how=\"left\")\n        test_df = pd.merge(test_df, gdf, on=\"card_id\", how=\"left\")\n        \n        del gdf\n        import gc; gc.collect()\n        import time; time.sleep(5)\n        \n        for u in ['sum', 'mean', 'std', 'min', 'max']:\n            feats.append(\"{}_{}\".format(u, name))\n        print (\"{} done\".format(name))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"78e1009f522e13ab7eab83cb2b91b047936cf871"},"cell_type":"code","source":"gdf = new_trans_df.groupby(\"card_id\")\ngdf = gdf[\"installments\"].agg(['sum', 'mean', 'std', 'min', 'max']).reset_index()\ngdf.columns = [\"card_id\", \"new_sum_installments\", \"new_mean_installments\", \"new_std_installments\", \"new_min_installments\", \"new_max_installments\"]\ntrain_df = pd.merge(train_df, gdf, on=\"card_id\", how=\"left\")\ntest_df = pd.merge(test_df, gdf, on=\"card_id\", how=\"left\")\n\ngdf = new_trans_df.groupby(\"card_id\")\ngdf = gdf[\"month_lag\"].agg(['sum', 'mean', 'std', 'min', 'max']).reset_index()\ngdf.columns = [\"card_id\", \"new_sum_month_lag\", \"new_mean_month_lag\", \"new_std_month_lag\", \"new_min_month_lag\", \"new_max_month_lag\"]\ntrain_df = pd.merge(train_df, gdf, on=\"card_id\", how=\"left\")\ntest_df = pd.merge(test_df, gdf, on=\"card_id\", how=\"left\")\n\ngdf = new_trans_df.groupby(\"card_id\")\ngdf = gdf[\"purchase_amount\"].agg(['sum', 'mean', 'std', 'min', 'max']).reset_index()\ngdf.columns = [\"card_id\", \"new_sum_hist_trans\", \"new_mean_hist_trans\", \"new_std_hist_trans\", \"new_min_hist_trans\", \"new_max_hist_trans\"]\ntrain_df = pd.merge(train_df, gdf, on=\"card_id\", how=\"left\")\ntest_df = pd.merge(test_df, gdf, on=\"card_id\", how=\"left\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"9e84d464976ab540b6c99c2c1170da16e71798e0"},"cell_type":"code","source":"del new_trans_df, gdf\nimport gc; gc.collect()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"c5a9618af7d324b38d447c603d578e07b48010c4"},"cell_type":"code","source":"feat_cols = feats + \\\n    [\"sum_installments\", \"mean_installments\", \"std_installments\", \"min_installments\", \"max_installments\"] + \\\n    [\"sum_month_lag\", \"mean_month_lag\", \"std_month_lag\", \"min_month_lag\", \"max_month_lag\"] + \\\n    [\"sum_hist_trans\", \"mean_hist_trans\", \"std_hist_trans\", \"min_hist_trans\", \"max_hist_trans\"] + \\\n    [\"new_sum_installments\", \"new_mean_installments\", \"new_std_installments\", \"new_min_installments\", \"new_max_installments\"] + \\\n    [\"new_sum_month_lag\", \"new_mean_month_lag\", \"new_std_month_lag\", \"new_min_month_lag\", \"new_max_month_lag\"] + \\\n    [\"new_sum_hist_trans\", \"new_mean_hist_trans\", \"new_std_hist_trans\", \"new_min_hist_trans\", \"new_max_hist_trans\"]\nfeats_subset = [feat for feat in feat_cols if feat in train_df.columns]\n\nprint(len(feat_cols), len(feats_subset))\n\nX = train_df[feats_subset].values\ny = train_df[\"target\"].values\n\ntest_X = test_df[feats_subset].values","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"77b7531480e78998ae2e506e4348a0120d525f99"},"cell_type":"code","source":"from sklearn.model_selection import train_test_split\n\ntrain_X, val_X, train_y, val_y = train_test_split(X, y, test_size=0.1, random_state=2018)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b4c734a8b99e5ffefade4e7fe285fa1a7d2f8e93"},"cell_type":"code","source":"from sklearn.ensemble import GradientBoostingRegressor\nmodel = GradientBoostingRegressor(\n    loss='ls', \n    n_estimators=100,  \n    max_depth=4, \n    verbose=2, \n    random_state=2018\n)\nmodel.fit(np.nan_to_num(train_X), train_y)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"f09d5034d975a15d1352e0d58a02632bebd69d7d"},"cell_type":"code","source":"dict(zip(feat_cols, model.feature_importances_))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d71db500eb95635c3733387ed06795f8b7095381"},"cell_type":"code","source":"np.sqrt(np.mean(np.square(model.predict(np.nan_to_num(val_X)) - val_y))), np.sqrt(np.mean(np.square(np.mean(train_y) - val_y)))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"aa325e6f8f230ac877063309ab868fb652b46889"},"cell_type":"code","source":"sub_df = pd.DataFrame({\"card_id\":test_df[\"card_id\"].values})\nsub_df[\"target\"] = model.predict(np.nan_to_num(test_X))\nsub_df.to_csv(\"submission.csv\", index=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"27595e1c4ef332786cb3ad6a5c746c035cd492fe"},"cell_type":"code","source":"","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}