{"cells":[{"metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_kg_hide-output":false,"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","collapsed":true,"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\nimport pandas as pd\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\nimport os\nprint(os.listdir(\"../input\"))\nimport gc\nimport time\n#import numpy as np\nimport pandas as pd\nfrom sklearn.cross_validation import train_test_split\nimport xgboost as xgb\nfrom xgboost import plot_importance\nimport matplotlib.pyplot as plt\n# Any results you write to the current directory are saved as output.\nis_valid=False\ndef feature_creation(df):\n    df['datetime'] = pd.to_datetime(df['click_time'])\n    df['dow'] = df['datetime'].dt.dayofweek\n    df['doy'] = df['datetime'].dt.dayofyear\n    df.drop(['click_time','datetime'],axis=1,inplace=True)\n    return df\nstart_time = time.time()\ntrain_columns = ['ip','app','device','os','channel','click_time','is_attributed']\ntest_columns = ['ip','app','device','os','channel','click_time','click_id']\ndtypes = {\n    'ip':'uint32',\n    'app':'uint16',\n    'device':'uint16',\n    'os':'uint16',\n    'channel':'uint16',\n    'is_attribued':'uint8',\n    'click_id':'uint32'\n}\n#train = pd.read_csv('./input/mnt/ssd/kaggle-talkingdata2/competition_files/train.csv',skiprows=(1,123903891),nrows=51000000,usecols=train_columns,dtype=dtypes)\ntrain = pd.read_csv('../input/train.csv',skiprows=(1,123903891),nrows=51000000,usecols=train_columns,dtype=dtypes)\n#test = pd.read_csv('test.csv',usecols=test_columns,dtype=dtypes)\ntest = pd.read_csv('../input/test.csv',usecols=test_columns,dtype=dtypes)\ny=train['is_attributed']\ntrain.drop(['is_attributed'],axis=1,inplace=True)\nsub=pd.DataFrame()\ntest.drop(['click_id'],axis=1,inplace=True)\ngc.collect()\nnrow_train = train.shape[0]\nmerge = pd.concat([train,test])\ndel train,test\ngc.collect()\n# Count the number of clicks by ip\nip_count = merge.groupby(['ip'])['channel'].count().reset_index()\nip_count.columns = ['ip','clicks_by_ip']\nmerge = pd.merge(merge,ip_count,on='ip',how='left',sort=False)\nmerge.head(n=5)\nmerge['clicks_by_ip'] = merge['clicks_by_ip'].astype('uint16')\nmerge.drop('ip',axis=1,inplace=True)\ntrain = merge[:nrow_train]\ntest = merge[nrow_train:]\ndel test,merge\ngc.collect()\ntrain = feature_creation(train)\n# Setting the parameters for xgboost model\nparams = { 'eta':0.3,\n           'tree_method':'exact',\n           'grow_policy':'lossguide',\n           'max_leaves':1600,\n           'max_depth':5,\n           'subsample':0.9,\n           'colsample_bytree':0.7,\n           'colsample_bylevel':0.7,\n           'min_child_weight':0,\n           'alpha':4,\n           'objective':'binary:logistic',\n           'scale_pos_weight':9,\n           'eval_metric':'auc',\n           'nthread':8,\n           'random_state':99,\n           'silent':True}\n\nif (is_valid == True):\n    x1,x2,y1,y2 = train_test_split(train,y,test_size=0.1,random_state=99)\n    dtrain = xgb.DMatrix(x1,y1)\n    dvalid = xgb.DMatrix(x2,y2)\n    del x1,x2,y1,y2\n    gc.collect()\n    watchlist = [(dtrain,'train'),(dvalid,'valid')]\n    model = xgb.train(params,dtrain,200,watchlist,maximize=True,early_stopping_rounds = 35,verbose_eval=5)\n    del dvalid\n    \nelse:\n    dtrain = xgb.DMatrix(train,y)\n    del train,y\n    gc.collect()\n    watchlist = [(dtrain,'train')]\n    model = xgb.train(params,dtrain,35,watchlist,maximize=True,verbose_eval=1)\n    \nprint('[{}] Finish XGBoost training'.format(time.time() - start_time))\ntest = pd.read_csv('../input/test.csv',usecols=test_columns,dtype=dtypes)\ntest = pd.merge(test,ip_count,on='ip',how='left',sort=False)\nsub['click_id'] = test['click_id'].astype('int')\ntest['clicks_by_ip'] = test['clicks_by_ip'].astype('uint16')\ntest = feature_creation(test)\ntest.drop(['click_id','ip'],axis=1,inplace=True)\n#test.drop(['ip'],axis=1,inplace=True)\nprint(test.columns)\ndtest = xgb.DMatrix(test)\ndel test\ngc.collect()\n\n# Saving the Predictions\nsub['is_attributed'] = model.predict(dtest,ntree_limit=model.best_ntree_limit)\nsub.to_csv('final_sub.csv',float_format='%.8f',index=False)\n\n","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","collapsed":true,"trusted":true},"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.5","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}