{"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_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import lightgbm as lgb\nimport numpy as np\nimport pandas as pd\nfrom sklearn import preprocessing\nfrom sklearn.model_selection import KFold\nfrom sklearn.metrics import roc_auc_score\nfrom sklearn.preprocessing import LabelEncoder\n\nimport riiideducation\n\npd.options.display.max_columns = None","metadata":{"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","execution":{"iopub.status.busy":"2022-01-30T16:09:20.965322Z","iopub.execute_input":"2022-01-30T16:09:20.965664Z","iopub.status.idle":"2022-01-30T16:09:20.971837Z","shell.execute_reply.started":"2022-01-30T16:09:20.965633Z","shell.execute_reply":"2022-01-30T16:09:20.970672Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"env = riiideducation.make_env()","metadata":{"execution":{"iopub.status.busy":"2022-01-30T16:09:22.389546Z","iopub.execute_input":"2022-01-30T16:09:22.389917Z","iopub.status.idle":"2022-01-30T16:09:22.421414Z","shell.execute_reply.started":"2022-01-30T16:09:22.389878Z","shell.execute_reply":"2022-01-30T16:09:22.420239Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df = pd.read_csv('../input/riiid-test-answer-prediction/train.csv', low_memory=False, nrows=10**7,\n                      dtype={\n                          'row_id': 'int64', 'timestamp': 'int64', 'user_id': 'int32', 'content_id': 'int16', 'content_type_id': 'int8',\n                              'task_container_id': 'int16', 'user_answer': 'int8', 'answered_correctly': 'int8', 'prior_question_elapsed_time': 'float32', \n                             'prior_question_had_explanation': 'boolean',\n                      })\n\n# train_df = train_df.query('answered_correctly != -1').reset_index(drop=True)\n# train_df['prior_question_had_explanation'] = train_df['prior_question_had_explanation'].astype(float) ","metadata":{"execution":{"iopub.status.busy":"2022-01-30T16:09:45.401253Z","iopub.execute_input":"2022-01-30T16:09:45.402085Z","iopub.status.idle":"2022-01-30T16:10:04.995069Z","shell.execute_reply.started":"2022-01-30T16:09:45.402043Z","shell.execute_reply":"2022-01-30T16:10:04.994191Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df","metadata":{"execution":{"iopub.status.busy":"2022-01-30T16:10:06.553505Z","iopub.execute_input":"2022-01-30T16:10:06.553867Z","iopub.status.idle":"2022-01-30T16:10:06.574008Z","shell.execute_reply.started":"2022-01-30T16:10:06.553819Z","shell.execute_reply":"2022-01-30T16:10:06.573076Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nfeatures_part_df = train_df.iloc[:int( 9 / 10 * len(train_df) )]\n\ntrain_part_df = train_df.iloc[int( 9 / 10 * len(train_df) ):]","metadata":{"execution":{"iopub.status.busy":"2022-01-30T16:10:09.247893Z","iopub.execute_input":"2022-01-30T16:10:09.248243Z","iopub.status.idle":"2022-01-30T16:10:09.255935Z","shell.execute_reply.started":"2022-01-30T16:10:09.248212Z","shell.execute_reply":"2022-01-30T16:10:09.25469Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_part_df","metadata":{"execution":{"iopub.status.busy":"2022-01-30T16:10:10.549559Z","iopub.execute_input":"2022-01-30T16:10:10.550138Z","iopub.status.idle":"2022-01-30T16:10:10.574604Z","shell.execute_reply.started":"2022-01-30T16:10:10.550091Z","shell.execute_reply":"2022-01-30T16:10:10.573362Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"","metadata":{}},{"cell_type":"code","source":"\ntrain_questions_only_df = features_part_df[features_part_df['answered_correctly'] != -1]\n\ngrouped_by_user_df = train_questions_only_df.groupby('user_id')\n\nuser_answers_df = grouped_by_user_df.agg({'answered_correctly': ['mean', 'count', 'std', 'median', 'skew'], 'prior_question_had_explanation': ['mean']}).copy()\n\n\n\nuser_answers_df[('test', 'score')] = user_answers_df[('answered_correctly', 'mean')] * (user_answers_df[('answered_correctly', 'count')])\n\n\nmean = user_answers_df[('test', 'score')].mean()\n\nuser_answers_df[('test', 'deviation')] = user_answers_df[('test', 'score')] - mean\n\nuser_answers_df[('test', 'square')] = user_answers_df[('test', 'deviation')] * user_answers_df[('test', 'deviation')]\n\nvariance = user_answers_df[('test', 'square')].sum() / len(user_answers_df.index)\nstandard_deviation = np.sqrt(variance)\n\nuser_answers_df[('test', 'Deviation_Value')] = (user_answers_df[('test', 'deviation')] * 10 / standard_deviation) + 50","metadata":{"execution":{"iopub.status.busy":"2022-01-30T16:10:23.413108Z","iopub.execute_input":"2022-01-30T16:10:23.413455Z","iopub.status.idle":"2022-01-30T16:10:29.897865Z","shell.execute_reply.started":"2022-01-30T16:10:23.413423Z","shell.execute_reply":"2022-01-30T16:10:29.896777Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"user_answers_df[('test', 'smart_user')] = 0\n\n\n\nfor index, row in user_answers_df.iterrows():\n    if row[('prior_question_had_explanation','mean')] >= 0.8:\n        user_answers_df[('test','smart_user')][index] = 1\n        \nuser_answers_df.columns = ['mean_user_accuracy', 'questions_answered', 'std_user_accuracy', 'median_user_accuracy', 'skew_user_accuracy', 'mean_prior_question_had_explanation', 'user_score', 'score_deviation', 'score_square', 'Deviation_Value', 'smart_user']","metadata":{"execution":{"iopub.status.busy":"2022-01-30T16:10:29.900143Z","iopub.execute_input":"2022-01-30T16:10:29.900469Z","iopub.status.idle":"2022-01-30T16:10:36.872819Z","shell.execute_reply.started":"2022-01-30T16:10:29.900438Z","shell.execute_reply":"2022-01-30T16:10:36.871934Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"user_answers_df","metadata":{"execution":{"iopub.status.busy":"2022-01-30T16:12:54.530143Z","iopub.execute_input":"2022-01-30T16:12:54.530487Z","iopub.status.idle":"2022-01-30T16:12:54.55558Z","shell.execute_reply.started":"2022-01-30T16:12:54.530455Z","shell.execute_reply":"2022-01-30T16:12:54.554575Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nquestions_df = pd.read_csv('../input/riiid-test-answer-prediction/questions.csv')\n\ngrouped_by_content_df = train_questions_only_df.groupby('content_id')\n\ncontent_answers_df = grouped_by_content_df.agg({'answered_correctly': ['mean', 'count', 'std', 'median', 'skew'] }).copy()\ncontent_answers_df.columns = ['mean_accuracy', 'question_asked', 'std_accuracy', 'median_accuracy', 'skew_accuracy']\n\nquestions_df = questions_df.merge(content_answers_df, left_on = 'question_id', right_on = 'content_id', how = 'left')\n\nbundle_dict = questions_df['bundle_id'].value_counts().to_dict()\n\n\nquestions_df['right_answers'] = questions_df['mean_accuracy'] * questions_df['question_asked']\n\nquestions_df['bundle_size'] = questions_df['bundle_id'].apply(lambda x: bundle_dict[x])","metadata":{"execution":{"iopub.status.busy":"2022-01-30T16:10:45.397726Z","iopub.execute_input":"2022-01-30T16:10:45.398061Z","iopub.status.idle":"2022-01-30T16:10:48.992634Z","shell.execute_reply.started":"2022-01-30T16:10:45.398032Z","shell.execute_reply":"2022-01-30T16:10:48.990574Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"questions_df","metadata":{"execution":{"iopub.status.busy":"2022-01-30T16:11:20.383042Z","iopub.execute_input":"2022-01-30T16:11:20.383397Z","iopub.status.idle":"2022-01-30T16:11:20.410829Z","shell.execute_reply.started":"2022-01-30T16:11:20.383364Z","shell.execute_reply":"2022-01-30T16:11:20.40987Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\ngrouped_by_bundle_df = questions_df.groupby('bundle_id')\n\nbundle_answers_df = grouped_by_bundle_df.agg({'right_answers': 'sum', 'question_asked': 'sum'}).copy()\nbundle_answers_df.columns = ['bundle_right_answers', 'bundle_questions_asked']\n\nbundle_answers_df['bundle_accuracy'] = bundle_answers_df['bundle_right_answers'] / bundle_answers_df['bundle_questions_asked']","metadata":{"execution":{"iopub.status.busy":"2022-01-30T16:11:31.858564Z","iopub.execute_input":"2022-01-30T16:11:31.858938Z","iopub.status.idle":"2022-01-30T16:11:31.874604Z","shell.execute_reply.started":"2022-01-30T16:11:31.858905Z","shell.execute_reply":"2022-01-30T16:11:31.873423Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"bundle_answers_df","metadata":{"execution":{"iopub.status.busy":"2022-01-30T16:12:00.578771Z","iopub.execute_input":"2022-01-30T16:12:00.57934Z","iopub.status.idle":"2022-01-30T16:12:00.595043Z","shell.execute_reply.started":"2022-01-30T16:12:00.579291Z","shell.execute_reply":"2022-01-30T16:12:00.593908Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\ngrouped_by_part_df = questions_df.groupby('part')\n\npart_answers_df = grouped_by_part_df.agg({'right_answers': 'sum', 'question_asked': 'sum'}).copy()\n\npart_answers_df.columns = ['part_right_answers', 'part_questions_asked']\npart_answers_df['part_accuracy'] = part_answers_df['part_right_answers'] / part_answers_df['part_questions_asked']","metadata":{"execution":{"iopub.status.busy":"2022-01-30T16:12:06.163083Z","iopub.execute_input":"2022-01-30T16:12:06.163625Z","iopub.status.idle":"2022-01-30T16:12:06.174495Z","shell.execute_reply.started":"2022-01-30T16:12:06.163574Z","shell.execute_reply":"2022-01-30T16:12:06.173433Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"part_answers_df","metadata":{"execution":{"iopub.status.busy":"2022-01-30T16:12:08.254897Z","iopub.execute_input":"2022-01-30T16:12:08.255247Z","iopub.status.idle":"2022-01-30T16:12:08.268326Z","shell.execute_reply.started":"2022-01-30T16:12:08.255214Z","shell.execute_reply":"2022-01-30T16:12:08.267293Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\ntrain_part_df = train_part_df[train_part_df['answered_correctly'] != -1]","metadata":{"execution":{"iopub.status.busy":"2022-01-30T16:13:29.50393Z","iopub.execute_input":"2022-01-30T16:13:29.50436Z","iopub.status.idle":"2022-01-30T16:13:29.560058Z","shell.execute_reply.started":"2022-01-30T16:13:29.504326Z","shell.execute_reply":"2022-01-30T16:13:29.558964Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# user_answers_df\ntrain_part_df = train_part_df.merge(user_answers_df, how='left', on='user_id')\n\n# questions_df\ntrain_part_df = train_part_df.merge(questions_df, how='left', left_on='content_id', right_on='question_id')\n\n# bundle_answers_df\ntrain_part_df = train_part_df.merge(bundle_answers_df, how='left', on='bundle_id')\n\n# part_answers_df\ntrain_part_df = train_part_df.merge(part_answers_df, how='left', on='part')","metadata":{"execution":{"iopub.status.busy":"2022-01-30T16:13:31.610618Z","iopub.execute_input":"2022-01-30T16:13:31.611131Z","iopub.status.idle":"2022-01-30T16:13:32.90675Z","shell.execute_reply.started":"2022-01-30T16:13:31.611091Z","shell.execute_reply":"2022-01-30T16:13:32.90479Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\ntrain_part_df['prior_question_had_explanation'] = train_part_df['prior_question_had_explanation'].fillna(value=False).astype(bool)\n\ntrain_part_df.fillna(value = -1, inplace = True)","metadata":{"execution":{"iopub.status.busy":"2022-01-30T16:13:35.460932Z","iopub.execute_input":"2022-01-30T16:13:35.46133Z","iopub.status.idle":"2022-01-30T16:13:35.568323Z","shell.execute_reply.started":"2022-01-30T16:13:35.461299Z","shell.execute_reply":"2022-01-30T16:13:35.567364Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nle = LabelEncoder()\ntrain_part_df[\"prior_question_had_explanation\"] = le.fit_transform(train_part_df[\"prior_question_had_explanation\"])","metadata":{"execution":{"iopub.status.busy":"2022-01-30T16:13:37.796566Z","iopub.execute_input":"2022-01-30T16:13:37.796935Z","iopub.status.idle":"2022-01-30T16:13:37.839881Z","shell.execute_reply.started":"2022-01-30T16:13:37.796903Z","shell.execute_reply":"2022-01-30T16:13:37.838937Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_part_df","metadata":{"execution":{"iopub.status.busy":"2022-01-30T16:13:39.66493Z","iopub.execute_input":"2022-01-30T16:13:39.665269Z","iopub.status.idle":"2022-01-30T16:13:39.720089Z","shell.execute_reply.started":"2022-01-30T16:13:39.66524Z","shell.execute_reply":"2022-01-30T16:13:39.719187Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_part_df.columns","metadata":{"execution":{"iopub.status.busy":"2022-01-30T16:13:43.39083Z","iopub.execute_input":"2022-01-30T16:13:43.391498Z","iopub.status.idle":"2022-01-30T16:13:43.397543Z","shell.execute_reply.started":"2022-01-30T16:13:43.391461Z","shell.execute_reply":"2022-01-30T16:13:43.396515Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# 旧\n# features = [\n#     'timestamp','mean_user_accuracy', 'questions_answered','mean_accuracy',\n#     'question_asked','prior_question_elapsed_time', 'prior_question_had_explanation',\n#     'bundle_size', 'bundle_accuracy','part_accuracy', 'right_answers'\n# ]\n\n\n# features = [\n#     'timestamp','prior_question_elapsed_time', 'prior_question_had_explanation',\n#     'mean_user_accuracy', 'questions_answered', 'std_user_accuracy',\n#     'median_user_accuracy', 'skew_user_accuracy','mean_accuracy',\n#     'question_asked', 'std_accuracy', 'median_accuracy', 'skew_accuracy',\n#     'bundle_size','bundle_accuracy', 'part_accuracy','user_score',\n#     'score_deviation', 'score_square', 'Deviation_Value',\n# ]\n\n\nfeatures = [\n    'timestamp','prior_question_elapsed_time', 'prior_question_had_explanation',\n       'mean_user_accuracy', 'questions_answered', 'std_user_accuracy',\n       'median_user_accuracy', 'skew_user_accuracy',\n       'mean_prior_question_had_explanation','Deviation_Value', 'smart_user',\n       'mean_accuracy','question_asked', 'std_accuracy', 'median_accuracy', 'skew_accuracy',\n       'bundle_size','bundle_accuracy','part_accuracy'\n]\n\ntarget = 'answered_correctly'","metadata":{"execution":{"iopub.status.busy":"2022-01-30T16:13:48.822245Z","iopub.execute_input":"2022-01-30T16:13:48.823022Z","iopub.status.idle":"2022-01-30T16:13:48.830269Z","shell.execute_reply.started":"2022-01-30T16:13:48.82297Z","shell.execute_reply":"2022-01-30T16:13:48.829152Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train = train_part_df[features]\ny_train = train_part_df[target]","metadata":{"execution":{"iopub.status.busy":"2022-01-30T16:13:56.531178Z","iopub.execute_input":"2022-01-30T16:13:56.531541Z","iopub.status.idle":"2022-01-30T16:13:56.81221Z","shell.execute_reply.started":"2022-01-30T16:13:56.531509Z","shell.execute_reply":"2022-01-30T16:13:56.811186Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train","metadata":{"execution":{"iopub.status.busy":"2022-01-30T16:14:16.872706Z","iopub.execute_input":"2022-01-30T16:14:16.873429Z","iopub.status.idle":"2022-01-30T16:14:16.906903Z","shell.execute_reply.started":"2022-01-30T16:14:16.873371Z","shell.execute_reply":"2022-01-30T16:14:16.905967Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"models = []\noof_train = np.zeros(len(X_train),) ### array([0., 0., 0., ..., 0., 0., 0.])\ncategorical_features = ['prior_question_had_explanation']\n\nparams = {\n    'objective': 'binary',\n    'max_bin': 300,\n    'learning_rate': 0.05,\n    'num_leaves': 40\n}\n\nn_tr = round(981094 * 0.9)\n\nX_tr = X_train[:n_tr]\nX_val = X_train[n_tr:]\n\ny_tr = y_train[:n_tr]\ny_val = y_train[n_tr:]\n\nlgb_train = lgb.Dataset(X_tr, y_tr, categorical_feature=categorical_features)\nlgb_eval = lgb.Dataset(X_val, y_val, reference=lgb_train, categorical_feature=categorical_features)\n\nmodel = lgb.train(\n    params,\n    lgb_train,\n    valid_sets=[lgb_train, lgb_eval],\n    verbose_eval=10,\n    num_boost_round=1000,\n    early_stopping_rounds=100 \n)\n\noof_train = model.predict(X_val, num_iteration=model.best_iteration)\n\nmodels.append(model)","metadata":{"execution":{"iopub.status.busy":"2022-01-30T16:14:18.741503Z","iopub.execute_input":"2022-01-30T16:14:18.74193Z","iopub.status.idle":"2022-01-30T16:14:37.471253Z","shell.execute_reply.started":"2022-01-30T16:14:18.741889Z","shell.execute_reply":"2022-01-30T16:14:37.470303Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nimportance = pd.DataFrame(model.feature_importance(), index=X_train.columns, columns=['importance'])\nresult = importance.sort_values('importance', ascending=False)","metadata":{"execution":{"iopub.status.busy":"2022-01-30T16:14:44.308779Z","iopub.execute_input":"2022-01-30T16:14:44.30915Z","iopub.status.idle":"2022-01-30T16:14:44.316199Z","shell.execute_reply.started":"2022-01-30T16:14:44.309117Z","shell.execute_reply":"2022-01-30T16:14:44.315213Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"result","metadata":{"execution":{"iopub.status.busy":"2022-01-30T16:14:46.940159Z","iopub.execute_input":"2022-01-30T16:14:46.940506Z","iopub.status.idle":"2022-01-30T16:14:46.951197Z","shell.execute_reply.started":"2022-01-30T16:14:46.940474Z","shell.execute_reply":"2022-01-30T16:14:46.949952Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nroc_auc_score(y_val, oof_train)","metadata":{"execution":{"iopub.status.busy":"2022-01-30T16:16:44.954229Z","iopub.execute_input":"2022-01-30T16:16:44.954592Z","iopub.status.idle":"2022-01-30T16:16:44.998293Z","shell.execute_reply.started":"2022-01-30T16:16:44.954551Z","shell.execute_reply":"2022-01-30T16:16:44.997571Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import lightgbm as lgb\nimport sklearn.datasets, sklearn.model_selection","metadata":{"execution":{"iopub.status.busy":"2022-01-30T16:22:35.349243Z","iopub.execute_input":"2022-01-30T16:22:35.349942Z","iopub.status.idle":"2022-01-30T16:22:35.442879Z","shell.execute_reply.started":"2022-01-30T16:22:35.349902Z","shell.execute_reply":"2022-01-30T16:22:35.4419Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.model_selection import KFold, StratifiedKFold\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport warnings","metadata":{"execution":{"iopub.status.busy":"2022-01-30T16:44:49.890463Z","iopub.execute_input":"2022-01-30T16:44:49.890807Z","iopub.status.idle":"2022-01-30T16:44:50.006541Z","shell.execute_reply.started":"2022-01-30T16:44:49.890777Z","shell.execute_reply":"2022-01-30T16:44:50.005499Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn import metrics\nauc = metrics.roc_auc_score(y_val, oof_train)\n\nfalse_positive_rate, true_positive_rate, thresolds = metrics.roc_curve(y_val, oof_train)\n\nplt.figure(figsize=(10, 8), dpi=100)\nplt.axis('scaled')\nplt.xlim([0, 1])\nplt.ylim([0, 1])\nplt.title(\"AUC & ROC Curve\")\nplt.plot(false_positive_rate, true_positive_rate, 'g')\nplt.fill_between(false_positive_rate, true_positive_rate, facecolor='green', alpha=0.7)\nplt.text(0.95, 0.05, 'AUC = %0.4f' % auc, ha='right', fontsize=12, weight='bold', color='blue')\nplt.xlabel(\"False Positive Rate\")\nplt.ylabel(\"True Positive Rate\")\nplt.savefig('my_image.png')\nplt.show()\n\n   \n   ","metadata":{"execution":{"iopub.status.busy":"2022-01-30T16:59:21.121343Z","iopub.execute_input":"2022-01-30T16:59:21.121787Z","iopub.status.idle":"2022-01-30T16:59:21.556235Z","shell.execute_reply.started":"2022-01-30T16:59:21.121732Z","shell.execute_reply":"2022-01-30T16:59:21.555073Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"iter_test = env.iter_test()","metadata":{"execution":{"iopub.status.busy":"2022-01-30T16:54:49.321471Z","iopub.execute_input":"2022-01-30T16:54:49.322095Z","iopub.status.idle":"2022-01-30T16:54:49.327031Z","shell.execute_reply.started":"2022-01-30T16:54:49.322049Z","shell.execute_reply":"2022-01-30T16:54:49.325901Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for (test_df, sample_prediction_df) in iter_test:\n    y_preds = []\n    \n    test_df = test_df.merge(user_answers_df, how = 'left', on = 'user_id')\n    test_df = test_df.merge(questions_df, how = 'left', left_on = 'content_id', right_on = 'question_id')\n    test_df = test_df.merge(bundle_answers_df, how = 'left', on = 'bundle_id')\n    test_df = test_df.merge(part_answers_df, how = 'left', on = 'part')\n    \n    test_df['prior_question_had_explanation'] = test_df['prior_question_had_explanation'].fillna(value = False).astype(bool)\n    test_df.fillna(value = -1, inplace = True)\n    X_test = test_df[features]\n    \n    for model in models:\n        y_pred = model.predict(X_test, num_iteration=model.best_iteration)\n        y_preds.append(y_pred)\n        \n    y_preds = sum(y_preds) / len(y_preds)\n    test_df['answered_correctly'] = y_preds\n    env.predict(test_df.loc[test_df['content_type_id'] == 0, ['row_id', 'answered_correctly']])","metadata":{"execution":{"iopub.status.busy":"2022-01-30T16:54:50.565683Z","iopub.execute_input":"2022-01-30T16:54:50.566058Z","iopub.status.idle":"2022-01-30T16:54:51.433052Z","shell.execute_reply.started":"2022-01-30T16:54:50.566023Z","shell.execute_reply":"2022-01-30T16:54:51.430805Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## discussion","metadata":{}},{"cell_type":"markdown","source":"\n\n\n\n　","metadata":{}},{"cell_type":"markdown","source":"","metadata":{}},{"cell_type":"markdown","source":"","metadata":{}},{"cell_type":"code","source":"","metadata":{"trusted":true},"execution_count":null,"outputs":[]}]}