{"cells":[{"cell_type":"markdown","metadata":{"_cell_guid":"3b7824fd-ea7c-a174-198a-136a50d9fe19"},"source":"Ref : https://www.kaggle.com/misfyre/grupo-bimbo-inventory-demand/simple-xgboost"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"be80d574-e903-0a14-bad4-3656b1725b7d"},"outputs":[],"source":"import numpy as np\nimport xgboost as xgb\nimport pandas as pd\nimport math\nimport os\nimport gc\nimport sys\n%matplotlib inline\n\nfrom sklearn.cross_validation import train_test_split\nfrom ml_metrics import rmsle"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"bb6c915e-a9f5-10be-fce2-6a09198eeabc"},"outputs":[],"source":"def evalerror(preds, dtrain):\n\n    labels = dtrain.get_label()\n    assert len(preds) == len(labels)\n    labels = labels.tolist()\n    preds = preds.tolist()\n    terms_to_sum = [(math.log(labels[i] + 1) - math.log(max(0,preds[i]) + 1)) ** 2.0 for i,pred in enumerate(labels)]\n    return 'error', (sum(terms_to_sum) * (1.0/len(preds))) ** 0.5"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"1d3c63cd-e6b0-4a81-b1a3-f07e279cd668"},"outputs":[],"source":"print ('Loading Test...')\ndtype_test = {'id':np.uint32,\n              'Semana': np.uint8, \n              'Agencia_ID': np.uint16, \n              'Canal_ID': np.uint8,\n              'Ruta_SAK': np.uint16, \n              'Cliente_ID': np.uint32, \n              'Producto_ID': np.uint16}\n\n%time test = pd.read_csv('../input/test.csv', usecols=dtype_test.keys(), dtype=dtype_test)\ntest.shape"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"49f24f4b-49b9-36a9-8ce9-fec8218683d6"},"outputs":[],"source":"dtype = {'Semana': np.uint8, \n         'Agencia_ID': np.uint16, \n         'Canal_ID': np.uint8,\n         'Ruta_SAK': np.uint16, \n         'Cliente_ID': np.uint32, \n         'Producto_ID': np.uint16,\n         'Demanda_uni_equil': np.uint16}\n\nfilename='../input/train.csv'\n\n\n%time train = pd.read_csv(filename, usecols=dtype.keys(), dtype=dtype, warn_bad_lines= True,engine='c')\ntrain.shape"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"86947e85-c2ac-91a0-ce39-741bf052efbb"},"outputs":[],"source":"train = train[train[\"Semana\"]==9]\ngc.collect()\nprint ('Training_Shape:', train.shape)"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"6360346b-3fe1-2b22-4f83-dd4ee8b96826"},"outputs":[],"source":""},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"a08304aa-8ba6-7231-bed1-16ba36bb692e"},"outputs":[],"source":"ids = test['id']\ntest = test.drop(['id'],axis = 1)\n\ny = train['Demanda_uni_equil']\nX = train[test.columns.values]\n\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1729)\ndel(train)\nprint ('Division_Set_Shapes:', X.shape, y.shape)\nprint ('Validation_Set_Shapes:', X_train.shape, X_test.shape)\ndel(X)\ndel(y)"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"2a7408cb-d6b5-81ec-6750-8db2cb694ad8"},"outputs":[],"source":"params = {}\nparams['objective'] = \"reg:linear\"\nparams['eta'] = 0.1\nparams['max_depth'] = 5\nparams['subsample'] = 0.8\nparams['colsample_bytree'] = 0.6\nparams['silent'] = True\nparams['booster'] = \"gbtree\"\n\n\ntest_preds = np.zeros(test.shape[0])\nxg_train = xgb.DMatrix(X_train, label=y_train)\ndel(X_train)\ndel(y_train)\nxg_test = xgb.DMatrix(X_test)\ndel(X_test)\nwatchlist = [(xg_train, 'train')]"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"9a0a4dba-bc5b-f5ca-6e01-0464ed67ff12"},"outputs":[],"source":"num_rounds = 30\n%time xgclassifier = xgb.train(params, xg_train, num_rounds, watchlist, feval = evalerror, early_stopping_rounds= 20, verbose_eval = 10)\ndel(xg_train)"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"e97e377c-714b-e702-210a-cd14b72bfe79"},"outputs":[],"source":"%time preds = xgclassifier.predict(xg_test, ntree_limit=xgclassifier.best_iteration)\nprint ('RMSLE Score before transform :', rmsle(y_test, preds))\ndel(preds)\ndel(y_test)"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"e9d92858-2be8-0d01-5802-8860abd5138c"},"outputs":[],"source":"xgb.plot_importance(xgclassifier)"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"415f146b-1548-dd0a-4752-c70f6fc06a27"},"outputs":[],"source":"fxg_test = xgb.DMatrix(test)\nfold_preds = np.around(xgclassifier.predict(fxg_test, ntree_limit=xgclassifier.best_iteration), decimals = 1)\ntest_preds += fold_preds\ndel(fold_preds)\ndel(test)"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"f24869f6-5058-853e-f309-c4d1f34fd05e"},"outputs":[],"source":"submission = pd.DataFrame({'id':ids, 'Demanda_uni_equil': test_preds})\ndel(test_preds)\ndel(ids)"},{"cell_type":"code","execution_count":null,"metadata":{"_cell_guid":"8de62855-bb19-cf51-9126-169bbb5767c9"},"outputs":[],"source":"%time submission['Demanda_uni_equil'] = submission['Demanda_uni_equil'].apply(lambda x: np.expm1(x))\nsubmission.to_csv('submission_transformed.csv', index=False)"}],"metadata":{"_change_revision":0,"_is_fork":false,"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.5.2"}},"nbformat":4,"nbformat_minor":0}