{"cells":[{"metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","execution":{"iopub.execute_input":"2020-10-08T07:24:55.986608Z","iopub.status.busy":"2020-10-08T07:24:55.985569Z","iopub.status.idle":"2020-10-08T07:24:55.999021Z","shell.execute_reply":"2020-10-08T07:24:55.997984Z"},"papermill":{"duration":0.034593,"end_time":"2020-10-08T07:24:55.999195","exception":false,"start_time":"2020-10-08T07:24:55.964602","status":"completed"},"tags":[],"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\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 read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 5GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","execution":{"iopub.execute_input":"2020-10-08T07:24:56.043644Z","iopub.status.busy":"2020-10-08T07:24:56.042746Z","iopub.status.idle":"2020-10-08T07:31:21.477139Z","shell.execute_reply":"2020-10-08T07:31:21.476402Z"},"papermill":{"duration":385.458888,"end_time":"2020-10-08T07:31:21.477332","exception":false,"start_time":"2020-10-08T07:24:56.018444","status":"completed"},"tags":[],"trusted":true},"cell_type":"code","source":"import riiideducation\nimport dask.dataframe as dd\nimport  pandas as pd\nimport numpy as np\nfrom sklearn.metrics import roc_auc_score\nenv = riiideducation.make_env()\ntrain= pd.read_csv('/kaggle/input/riiid-test-answer-prediction/train.csv',\n                usecols=[1, 2, 3,7,8,9], dtype={'timestamp': 'int64', 'user_id': 'int32' ,'content_id': 'int16','answered_correctly':'int8','prior_question_elapsed_time': 'float32','prior_question_had_explanation': 'boolean'}\n              )\n\n#arrange by timestamp\ntrain = train.sort_values(['timestamp'], ascending=True)\n\ntrain.drop(['timestamp'], axis=1,   inplace=True)\n\nresults_c = train.iloc[0:90000000,:][['content_id','answered_correctly']].groupby(['content_id']).agg(['mean'])\nresults_c.columns = [\"answered_correctly_content\"]\n\nresults_u = train.iloc[0:90000000,:][['user_id','answered_correctly']].groupby(['user_id']).agg(['mean', 'sum'])\nresults_u.columns = [\"answered_correctly_user\", 'sum']","execution_count":null,"outputs":[]},{"metadata":{"execution":{"iopub.execute_input":"2020-10-08T07:31:21.512888Z","iopub.status.busy":"2020-10-08T07:31:21.511998Z","iopub.status.idle":"2020-10-08T07:31:27.587936Z","shell.execute_reply":"2020-10-08T07:31:27.587083Z"},"papermill":{"duration":6.097752,"end_time":"2020-10-08T07:31:27.588071","exception":false,"start_time":"2020-10-08T07:31:21.490319","status":"completed"},"tags":[],"trusted":true},"cell_type":"code","source":"X = train.iloc[90000000:99000000,:]\nX = pd.merge(X, results_u, on=['user_id'], how=\"left\")\nX = pd.merge(X, results_c, on=['content_id'], how=\"left\")\nX=X[X.answered_correctly!= -1 ]\nX=X.sort_values(['user_id'])\nY = X[[\"answered_correctly\"]]\nX = X.drop([\"answered_correctly\"], axis=1)","execution_count":null,"outputs":[]},{"metadata":{"execution":{"iopub.execute_input":"2020-10-08T07:31:27.628176Z","iopub.status.busy":"2020-10-08T07:31:27.626922Z","iopub.status.idle":"2020-10-08T07:31:27.640591Z","shell.execute_reply":"2020-10-08T07:31:27.641514Z"},"papermill":{"duration":0.041039,"end_time":"2020-10-08T07:31:27.641687","exception":false,"start_time":"2020-10-08T07:31:27.600648","status":"completed"},"tags":[],"trusted":true},"cell_type":"code","source":"X.head()","execution_count":null,"outputs":[]},{"metadata":{"execution":{"iopub.execute_input":"2020-10-08T07:31:27.679120Z","iopub.status.busy":"2020-10-08T07:31:27.677861Z","iopub.status.idle":"2020-10-08T07:31:27.683405Z","shell.execute_reply":"2020-10-08T07:31:27.682619Z"},"papermill":{"duration":0.028421,"end_time":"2020-10-08T07:31:27.683535","exception":false,"start_time":"2020-10-08T07:31:27.655114","status":"completed"},"tags":[],"trusted":true},"cell_type":"code","source":"Y.head()","execution_count":null,"outputs":[]},{"metadata":{"execution":{"iopub.execute_input":"2020-10-08T07:31:27.719513Z","iopub.status.busy":"2020-10-08T07:31:27.718494Z","iopub.status.idle":"2020-10-08T07:31:31.230815Z","shell.execute_reply":"2020-10-08T07:31:31.230124Z"},"papermill":{"duration":3.533694,"end_time":"2020-10-08T07:31:31.230970","exception":false,"start_time":"2020-10-08T07:31:27.697276","status":"completed"},"tags":[],"trusted":true},"cell_type":"code","source":"from sklearn.preprocessing import LabelEncoder\n\nlb_make = LabelEncoder()\nX['prior_question_had_explanation_enc'] = lb_make.fit_transform(X['prior_question_had_explanation'])","execution_count":null,"outputs":[]},{"metadata":{"execution":{"iopub.execute_input":"2020-10-08T07:31:31.369816Z","iopub.status.busy":"2020-10-08T07:31:31.337827Z","iopub.status.idle":"2020-10-08T07:31:31.445880Z","shell.execute_reply":"2020-10-08T07:31:31.445091Z"},"papermill":{"duration":0.201431,"end_time":"2020-10-08T07:31:31.446014","exception":false,"start_time":"2020-10-08T07:31:31.244583","status":"completed"},"tags":[],"trusted":true},"cell_type":"code","source":"X = X[['answered_correctly_user', 'answered_correctly_content', 'sum','prior_question_elapsed_time','prior_question_had_explanation_enc']] \nX.fillna(0.5,  inplace=True)","execution_count":null,"outputs":[]},{"metadata":{"execution":{"iopub.execute_input":"2020-10-08T07:31:31.482861Z","iopub.status.busy":"2020-10-08T07:31:31.481941Z","iopub.status.idle":"2020-10-08T07:55:40.442047Z","shell.execute_reply":"2020-10-08T07:55:40.441118Z"},"papermill":{"duration":1448.982672,"end_time":"2020-10-08T07:55:40.442257","exception":false,"start_time":"2020-10-08T07:31:31.459585","status":"completed"},"tags":[],"trusted":true},"cell_type":"code","source":"from  sklearn.tree import DecisionTreeClassifier\nfrom  sklearn.model_selection import train_test_split\nXt, Xv, Yt, Yv = train_test_split(X, Y, test_size =0.2, shuffle=False)\n\nfrom catboost import CatBoostClassifier,Pool\n\n\ncat_train = Pool(Xt, Yt)\ncat_eval = Pool(Xv, Yv)\n\n\nmodel = CatBoostClassifier(eval_metric='Accuracy',use_best_model=True,random_seed=42,iterations = 300, depth = 2)\nhistory = model.fit(cat_train,eval_set = [cat_eval])","execution_count":null,"outputs":[]},{"metadata":{"execution":{"iopub.execute_input":"2020-10-08T07:55:41.320355Z","iopub.status.busy":"2020-10-08T07:55:41.319490Z","iopub.status.idle":"2020-10-08T07:55:42.821327Z","shell.execute_reply":"2020-10-08T07:55:42.822077Z"},"papermill":{"duration":1.947915,"end_time":"2020-10-08T07:55:42.822283","exception":false,"start_time":"2020-10-08T07:55:40.874368","status":"completed"},"tags":[],"trusted":true},"cell_type":"code","source":"y_pred = model.predict(Xv)\ny_true = np.array(Yv)\nroc_auc_score(y_true, y_pred)","execution_count":null,"outputs":[]},{"metadata":{"execution":{"iopub.execute_input":"2020-10-08T07:55:43.712576Z","iopub.status.busy":"2020-10-08T07:55:43.711392Z","iopub.status.idle":"2020-10-08T07:56:20.483244Z","shell.execute_reply":"2020-10-08T07:56:20.482479Z"},"papermill":{"duration":37.219962,"end_time":"2020-10-08T07:56:20.483382","exception":false,"start_time":"2020-10-08T07:55:43.263420","status":"completed"},"tags":[],"trusted":true},"cell_type":"code","source":"test =  pd.read_csv('/kaggle/input/riiid-test-answer-prediction/example_test.csv')\ntest[\"prior_question_had_explanation_enc\"] = lb_make.fit_transform(test[\"prior_question_had_explanation\"])\ntest = pd.merge(test, results_u, on=['user_id'],  how=\"left\")\ntest = pd.merge(test, results_c, on=['content_id'],  how=\"left\")\ntest[['answered_correctly_user', 'answered_correctly_content', 'sum','prior_question_elapsed_time','prior_question_had_explanation_enc']]\ntest.fillna(0.5, inplace=True)\n\ny_pred = model.predict(test[['answered_correctly_user', 'answered_correctly_content', 'sum','prior_question_elapsed_time','prior_question_had_explanation_enc']])\n\ntest['answered_correctly'] = y_pred\n\nresults_c = train[['content_id','answered_correctly']].groupby(['content_id']).agg(['mean'])\nresults_c.columns = [\"answered_correctly_content\"]\n\nresults_u = train[['user_id','answered_correctly']].groupby(['user_id']).agg(['mean', 'sum'])\nresults_u.columns = [\"answered_correctly_user\", 'sum']","execution_count":null,"outputs":[]},{"metadata":{"execution":{"iopub.execute_input":"2020-10-08T07:56:21.367137Z","iopub.status.busy":"2020-10-08T07:56:21.366292Z","iopub.status.idle":"2020-10-08T07:56:22.182205Z","shell.execute_reply":"2020-10-08T07:56:22.181123Z"},"papermill":{"duration":1.264802,"end_time":"2020-10-08T07:56:22.182385","exception":false,"start_time":"2020-10-08T07:56:20.917583","status":"completed"},"tags":[],"trusted":true},"cell_type":"code","source":"iter_test = env.iter_test()\nfor (test_df, sample_prediction_df) in iter_test:\n    test_df = pd.merge(test_df, results_u, on=['user_id'],  how=\"left\")\n    test_df = pd.merge(test_df, results_c, on=['content_id'],  how=\"left\")\n    test_df['answered_correctly_user'].fillna(0.5, inplace=True)\n    test_df['answered_correctly_content'].fillna(0.5, inplace=True)\n    test_df['sum'].fillna(0, inplace=True)\n    test_df['prior_question_had_explanation'].fillna(False, inplace=True)\n    test_df[\"prior_question_had_explanation_enc\"] = lb_make.fit_transform(test_df[\"prior_question_had_explanation\"])\n    test_df['answered_correctly'] =  model.predict(test_df[['answered_correctly_user', 'answered_correctly_content', 'sum','prior_question_elapsed_time','prior_question_had_explanation_enc']])\n    env.predict(test_df.loc[test_df['content_type_id'] == 0, ['row_id', 'answered_correctly']])\n","execution_count":null,"outputs":[]},{"metadata":{"papermill":{"duration":0.44593,"end_time":"2020-10-08T07:56:23.058892","exception":false,"start_time":"2020-10-08T07:56:22.612962","status":"completed"},"tags":[],"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":4}