{"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":"# 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)\nimport polars as pl\nimport json\nimport xgboost as xgb\nfrom tqdm import tqdm\nimport gc\nimport sklearn\nimport catboost as cat\nimport time\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 20GB 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","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-06-26T00:35:48.041058Z","iopub.execute_input":"2023-06-26T00:35:48.041346Z","iopub.status.idle":"2023-06-26T00:35:49.929330Z","shell.execute_reply.started":"2023-06-26T00:35:48.041321Z","shell.execute_reply":"2023-06-26T00:35:49.928026Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"levels = [\"0-4\", \"5-12\", \"13-22\"]\n\nquestion_levels = [range(1,4), range(4,14), range(14,19)]\n\nANSWERS = [[f\"answers_{i}\" for i in question_range] for question_range in question_levels]","metadata":{"execution":{"iopub.status.busy":"2023-06-26T00:35:49.934136Z","iopub.execute_input":"2023-06-26T00:35:49.934441Z","iopub.status.idle":"2023-06-26T00:35:49.952169Z","shell.execute_reply.started":"2023-06-26T00:35:49.934417Z","shell.execute_reply":"2023-06-26T00:35:49.948572Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def right_answers(question):\n    targets = pd.read_csv('/kaggle/input/predict-student-performance-from-game-play/train_labels.csv')\n    targets['session'] = targets.session_id.apply(lambda x: int(x.split('_')[0]) )\n    targets['q'] = targets.session_id.apply(lambda x: int(x.split('_')[-1][1:]) )\n    return targets.loc[targets[\"q\"] == question][[\"session\", \"correct\"]].set_index(\"session\")\n\ndef preprocessing_2(test, feat_map):\n    light_feature_gen = [\n        pl.col(\"time_diff\").quantile(0.3, interpolation=\"linear\").alias(\"time_diff_quantile_0.3\"),\n        pl.col(\"time_diff\").quantile(0.5, interpolation=\"linear\").alias(\"time_diff_quantile_0.5\"),\n        pl.col(\"time_diff\").quantile(0.8, interpolation=\"linear\").alias(\"time_diff_quantile_0.8\"),\n        pl.col(\"time_diff\").quantile(0.65, interpolation=\"linear\").alias(\"time_diff_quantile_0.65\"),\n        pl.col(\"hover_duration\").mean().alias(\"hover_duration_mean\"),\n        pl.col(\"hover_duration\").std().alias(\"hover_duration_std\"),\n\n        *[pl.col(\"elapsed_time_diff_next\").filter(pl.col(feat).cast(pl.Utf8) == str(feat_cat)).sum().alias(f\"time_diff_sum_{feat}-{feat_cat}\")\n             for feat in feat_map[\"features_ones\"] for feat_cat in feat_map[\"features_ones\"][feat]],\n        *[pl.col(\"elapsed_time_diff_next\").filter(((pl.col(feat.split(\"-\")[0]).cast(pl.Utf8) == str(feat_cat[0]))) & (pl.col(feat.split(\"-\")[1]).cast(pl.Utf8) == str(feat_cat[1]))).sum()\\\n              .alias(f\"time_diff_sum_{feat.split('-')[0]}-{feat.split('-')[1]}-{feat_cat[0]}-{feat_cat[1]}\")\n             for feat in feat_map[\"features_pairs\"] for feat_cat in feat_map[\"features_pairs\"][feat]],\n        \n        *[pl.col(\"elapsed_time_diff\").filter(pl.col(feat).cast(pl.Utf8) == str(feat_cat)).mean().alias(f\"time_diff_mean_{feat}-{feat_cat}\")\n             for feat in feat_map[\"features_ones\"] for feat_cat in feat_map[\"features_ones\"][feat]],\n        *[pl.col(\"elapsed_time_diff\").filter(((pl.col(feat.split(\"-\")[0]).cast(pl.Utf8) == str(feat_cat[0]))) & (pl.col(feat.split(\"-\")[1]).cast(pl.Utf8) == str(feat_cat[1]))).mean()\\\n              .alias(f\"time_diff_mean_{feat.split('-')[0]}&{feat.split('-')[1]}-f{feat_cat[0]}&{feat_cat[1]}\")\n             for feat in feat_map[\"features_pairs\"] for feat_cat in feat_map[\"features_pairs\"][feat]],\n        \n        *[pl.col(\"session_id\").filter(pl.col(feat).cast(pl.Utf8) == str(feat_cat)).count().alias(f\"events_count_{feat}-{feat_cat}\")\n             for feat in feat_map[\"features_ones\"] for feat_cat in feat_map[\"features_ones\"][feat]],\n        *[pl.col(\"session_id\").filter(((pl.col(feat.split(\"-\")[0]).cast(pl.Utf8) == str(feat_cat[0]))) & (pl.col(feat.split(\"-\")[1]).cast(pl.Utf8) == str(feat_cat[1]))).count()\\\n              .alias(f\"events_count_{feat.split('-')[0]}&{feat.split('-')[1]}-f{feat_cat[0]}&{feat_cat[1]}\")\n             for feat in feat_map[\"features_pairs\"] for feat_cat in feat_map[\"features_pairs\"][feat]]\n    ]\n    \n    test.sort_values(by = [\"session_id\", \"elapsed_time\"], inplace=True)\n    res = pl.DataFrame(test)\\\n        .with_columns((pl.col(\"elapsed_time\") - pl.col(\"elapsed_time\").shift(1))\n                          .fill_null(0)\n                          .clip(0, 103000)\n                          .over([\"session_id\"])\n                          .alias(\"elapsed_time_diff\"),\n                      (pl.col(\"elapsed_time\") - pl.col(\"elapsed_time\").shift(1))\n                          .fill_null(0)\n                          .clip(0, 103000)\n                          .shift(-1)\n                          .over([\"session_id\"])\n                          .alias(\"elapsed_time_diff_next\"),\n                      (pl.col(\"elapsed_time\") - pl.col(\"elapsed_time\").shift(1))\n                          .fill_null(0)\n                          .over([\"session_id\"])\n                          .alias(\"time_diff\"))\\\n        .groupby([\"session_id\", \"level_group\"], maintain_order=True)\\\n                      .agg(light_feature_gen)\\\n                      .to_pandas()\n    return res.set_index(\"session_id\").sort_index()\n\ndef split_train():\n    dtypes={ \n        'elapsed_time':np.int32,\n        'event_name':'category',\n        'name':'category',\n        'level':np.uint8,\n        'page':'category',\n        'room_coor_x':np.float32,\n        'room_coor_y':np.float32,\n        'screen_coor_x':np.float32,\n        'screen_coor_y':np.float32,\n        'hover_duration':np.float32,\n         'text':'category',\n         'fqid':'category',\n         'room_fqid':'category',\n         'text_fqid':'category',\n         'fullscreen':'category',\n         'hq':'category',\n         'music':'category',\n         'level_group':'category'\n    }\n    train = pd.read_csv(\"/kaggle/input/predict-student-performance-from-game-play/train.csv\", dtype=dtypes)\n    for level in levels:\n        train.loc[train[\"level_group\"] == level].to_csv(f\"train{level}.csv\")\n    del train\n    gc.collect()\n    return 0\n\ndef feature_select(train):\n    features = [\"room_fqid\", \"text_fqid\", \"fqid\", \"event_name\", \"name\", \"level\", \"page\", \"text\"]\n    feature_pairs = [(\"room_fqid\", \"level\"), (\"text_fqid\", \"level\"), (\"fqid\", \"level\"), (\"room_fqid\", \"fqid\")]\n    feats_sel = {}\n    for level in levels:\n        print(level)\n        level_train = train.loc[train[\"level_group\"] == level]\n        feats_sel[level] = {}\n        feats_sel[level][\"features_ones\"] =  {\n            feature : level_train[feature].unique() for feature in features\n        }\n        \n        feats_sel[level][\"features_pairs\"] = {}\n        for feat_pair in feature_pairs:\n            print(feat_pair)\n            unique_cat_pairs = pd.DataFrame(level_train[[feat_pair[0], feat_pair[1]]]\\\n                                            .apply(lambda s: str(s[0]) + \" \" + str(s[1]), axis=1).unique())\n            first_cat = unique_cat_pairs.apply(lambda s: s[0].split(\" \")[0], axis=1)\n            ordinary = first_cat.drop_duplicates(keep=False)\n            unique_cat_pairs = unique_cat_pairs[~first_cat.isin(ordinary)]\n            \n            feats_sel[level][\"features_pairs\"][f\"{feat_pair[0]}-{feat_pair[1]}\"] = unique_cat_pairs.apply(lambda s: (str(s[0].split(\" \")[0]), str(s[0].split(\" \")[1])), axis=1)\n        del level_train\n        gc.collect()\n    return feats_sel","metadata":{"execution":{"iopub.status.busy":"2023-06-26T00:35:49.954198Z","iopub.execute_input":"2023-06-26T00:35:49.954911Z","iopub.status.idle":"2023-06-26T00:35:50.009184Z","shell.execute_reply.started":"2023-06-26T00:35:49.954878Z","shell.execute_reply":"2023-06-26T00:35:50.006536Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"dtypes={ \n        'elapsed_time':np.int32,\n        'event_name':'category',\n        'name':'category',\n        'level':np.uint8,\n        'page':'category',\n        'room_coor_x':np.float32,\n        'room_coor_y':np.float32,\n        'screen_coor_x':np.float32,\n        'screen_coor_y':np.float32,\n        'hover_duration':np.float32,\n         'text':'category',\n         'fqid':'category',\n         'room_fqid':'category',\n         'text_fqid':'category',\n         'fullscreen':'category',\n         'hq':'category',\n         'music':'category',\n         'level_group':'category'\n}\n\ntrain = pd.read_csv(\"/kaggle/input/predict-student-performance-from-game-play/train.csv\", dtype=dtypes)\nfeatures = feature_select(train)","metadata":{"execution":{"iopub.status.busy":"2023-06-26T00:35:50.017873Z","iopub.execute_input":"2023-06-26T00:35:50.018469Z","iopub.status.idle":"2023-06-26T00:57:29.618505Z","shell.execute_reply.started":"2023-06-26T00:35:50.018438Z","shell.execute_reply":"2023-06-26T00:57:29.617477Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"level_train = {level: train.loc[train[\"level_group\"] == level] for level in levels}\ndel train\ngc.collect()\nfor level in levels:\n    level_features = features[level]\n    preprocessing_2(level_train[level], level_features).drop(\"level_group\", axis=1).to_csv(f\"preprocessed_train{level}.csv\")\n    gc.collect()","metadata":{"execution":{"iopub.status.busy":"2023-06-26T00:57:29.619771Z","iopub.execute_input":"2023-06-26T00:57:29.620117Z","iopub.status.idle":"2023-06-26T02:17:16.873928Z","shell.execute_reply.started":"2023-06-26T00:57:29.620071Z","shell.execute_reply":"2023-06-26T02:17:16.872948Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"drop = {\"0-4\": [], \"5-12\": [], \"13-22\": []}\nkfold = sklearn.model_selection.KFold(n_splits=5, shuffle=True)\nbase_dataset = pd.read_csv(f\"/kaggle/working/preprocessed_train0-4.csv\").set_index(\"session_id\")\ndataset = base_dataset.drop(drop[levels[0]], axis=1).fillna(-1).sort_index()\nsessions = dataset.index","metadata":{"execution":{"iopub.status.busy":"2023-06-26T02:28:36.205238Z","iopub.execute_input":"2023-06-26T02:28:36.205681Z","iopub.status.idle":"2023-06-26T02:28:39.406190Z","shell.execute_reply.started":"2023-06-26T02:28:36.205643Z","shell.execute_reply":"2023-06-26T02:28:39.405214Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"kfold_iter = kfold.split(sessions)","metadata":{"execution":{"iopub.status.busy":"2023-06-26T02:48:07.881881Z","iopub.execute_input":"2023-06-26T02:48:07.882273Z","iopub.status.idle":"2023-06-26T02:48:07.886945Z","shell.execute_reply.started":"2023-06-26T02:48:07.882241Z","shell.execute_reply":"2023-06-26T02:48:07.885930Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cv_test = []\ncv_test_preds = []\ncv_train = []\ncv_train_preds = []","metadata":{"execution":{"iopub.status.busy":"2023-06-26T02:48:09.338141Z","iopub.execute_input":"2023-06-26T02:48:09.338529Z","iopub.status.idle":"2023-06-26T02:48:09.343079Z","shell.execute_reply.started":"2023-06-26T02:48:09.338497Z","shell.execute_reply":"2023-06-26T02:48:09.342167Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import time\npreds = []\ntrain_preds = []\nlevel_y_test = []\nlevel_y_train = []\ncorrs = [0]\nmodels = []\ntrain_idx, test_idx = next(kfold_iter)\ntrain_sessions = sessions[train_idx]\ntest_sessions = sessions[test_idx]","metadata":{"execution":{"iopub.status.busy":"2023-06-26T03:27:25.685147Z","iopub.execute_input":"2023-06-26T03:27:25.685510Z","iopub.status.idle":"2023-06-26T03:27:25.704158Z","shell.execute_reply.started":"2023-06-26T03:27:25.685479Z","shell.execute_reply":"2023-06-26T03:27:25.703131Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"drop = {\"0-4\": [], \"5-12\": [], \"13-22\": []}\nfor level, questions in enumerate(question_levels):\n    gc.collect()\n    print(f\"Level {level}\")\n    base_dataset = pd.read_csv(f\"/kaggle/working/preprocessed_train{levels[level]}.csv\").set_index(\"session_id\")\n    dataset = base_dataset.drop(drop[levels[level]], axis=1).fillna(-1).sort_index()\n    del base_dataset\n    gc.collect()\n    for i in questions:\n        start = time.time()\n        print(f\"Question {i}\")\n        gc.collect()\n        y = right_answers(i).sort_index()\n        X_train = dataset.loc[train_sessions]\n        y_train = y.loc[train_sessions]\n        X_test = dataset.loc[test_sessions]\n        y_test = y.loc[test_sessions]\n        level_y_test.append(y_test)\n        level_y_train.append(y_train)\n        estimators_xgb = [498, 448, 378, 364, 405, 495, 456, 249, 384, 405, 356, 262, 484, 381, 392, 248 ,248, 345]\n        param = {\n            'booster': 'gbtree',\n            'tree_method': 'hist',\n            'objective': 'binary:logistic',\n            'eval_metric':'logloss',\n            'learning_rate': 0.02,\n            'alpha': 8,\n            'max_depth': 4,\n            'subsample':0.8,\n            'colsample_bytree': 0.5,\n            'seed': 2023\n        }\n        param[\"n_estimators\"] = estimators_xgb[i-1]\n        bst = xgb.XGBClassifier(**param)\n        bst.fit(X_train.astype(\"float32\"), y_train[\"correct\"], \n               eval_set=[(X_test.astype(\"float32\"), y_test[\"correct\"])], verbose=0)\n        bst.save_model(f\"xgb_q{i}.json\")\n        pred = bst.predict_proba(X_test.astype(\"float32\"))[:,1]\n        train_pred = bst.predict_proba(X_train.astype(\"float32\"))[:,1]\n        #X_train[f\"q{i}_ans\"] = train_pred\n        #X_test[f\"q{i}_ans\"] = pred\n        models.append(bst)\n        preds.append((pred > 0.63).astype(int))\n        train_preds.append((train_pred > 0.63).astype(int))\n        dataset = pd.concat([X_train, X_test]).sort_index()\n        print(time.time() - start)\n    ","metadata":{"execution":{"iopub.status.busy":"2023-06-26T03:27:26.568973Z","iopub.execute_input":"2023-06-26T03:27:26.569417Z","iopub.status.idle":"2023-06-26T03:36:23.377011Z","shell.execute_reply.started":"2023-06-26T03:27:26.569378Z","shell.execute_reply":"2023-06-26T03:36:23.375903Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"del dataset\ngc.collect()\npreds = np.array(preds)\ntrain_preds = np.array(train_preds)\nlevel_y_test = np.array(level_y_test)\nlevel_y_train = np.array(level_y_train)","metadata":{"execution":{"iopub.status.busy":"2023-06-26T03:36:23.379137Z","iopub.execute_input":"2023-06-26T03:36:23.379692Z","iopub.status.idle":"2023-06-26T03:36:23.526581Z","shell.execute_reply.started":"2023-06-26T03:36:23.379655Z","shell.execute_reply":"2023-06-26T03:36:23.525540Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cv_test.append(level_y_test)\ncv_test_preds.append(preds)\ncv_train.append(level_y_train)\ncv_train_preds.append(train_preds)","metadata":{"execution":{"iopub.status.busy":"2023-06-26T03:36:23.528278Z","iopub.execute_input":"2023-06-26T03:36:23.528775Z","iopub.status.idle":"2023-06-26T03:36:23.541013Z","shell.execute_reply.started":"2023-06-26T03:36:23.528738Z","shell.execute_reply":"2023-06-26T03:36:23.540138Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"np.concatenate(cv_test_preds, axis=1).shape","metadata":{"execution":{"iopub.status.busy":"2023-06-26T03:36:23.543413Z","iopub.execute_input":"2023-06-26T03:36:23.543844Z","iopub.status.idle":"2023-06-26T03:36:23.554981Z","shell.execute_reply.started":"2023-06-26T03:36:23.543811Z","shell.execute_reply":"2023-06-26T03:36:23.554033Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"level_y_test = np.concatenate(cv_test, axis=1)\nlevel_y_train = np.concatenate(cv_train, axis=1)\npreds = np.concatenate(cv_test_preds, axis=1)\ntrain_preds = np.concatenate(cv_train_preds, axis=1)\n\nmetrics = pd.DataFrame({\n    \"f1_test\": [sklearn.metrics.f1_score(level_y_test[i],preds[i], average=\"macro\") for i in range(18)],\n    \"f1_train\":[sklearn.metrics.f1_score(level_y_train[i],train_preds[i], average=\"macro\") for i in range(18)],\n    \"f1_naive\":[sklearn.metrics.f1_score(level_y_test[i], np.ones(shape=level_y_test[i].shape), average=\"macro\") for i in range(18)],\n    \"accuracy_test\": [sklearn.metrics.accuracy_score(level_y_test[i],preds[i]) for i in range(18)],\n    \"accuracy_train\": [sklearn.metrics.accuracy_score(level_y_train[i],train_preds[i]) for i in range(18)]\n})\naggr_metrics = {\n    \"f1\": sklearn.metrics.f1_score(level_y_test.reshape(-1),preds.reshape(-1), average=\"macro\"),\n    \"f1_train\": sklearn.metrics.f1_score(level_y_train.reshape(-1),train_preds.reshape(-1), average=\"macro\"),\n    \"naive_f1\": sklearn.metrics.f1_score(level_y_test.reshape(-1),np.ones(shape=level_y_test.reshape(-1).shape), average=\"macro\"),\n    \"accuracy\": sklearn.metrics.accuracy_score(level_y_test.reshape(-1),preds.reshape(-1)),\n    \"accuracy_train\": sklearn.metrics.accuracy_score(level_y_train.reshape(-1),train_preds.reshape(-1)),\n    \"naive_accuracy\": sklearn.metrics.accuracy_score(level_y_test.reshape(-1), np.ones(shape=level_y_test.reshape(-1).shape))\n}","metadata":{"execution":{"iopub.status.busy":"2023-06-26T03:36:36.764278Z","iopub.execute_input":"2023-06-26T03:36:36.764638Z","iopub.status.idle":"2023-06-26T03:36:38.741598Z","shell.execute_reply.started":"2023-06-26T03:36:36.764608Z","shell.execute_reply":"2023-06-26T03:36:38.740481Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"metrics","metadata":{"execution":{"iopub.status.busy":"2023-06-26T03:36:38.743437Z","iopub.execute_input":"2023-06-26T03:36:38.743852Z","iopub.status.idle":"2023-06-26T03:36:38.760609Z","shell.execute_reply.started":"2023-06-26T03:36:38.743814Z","shell.execute_reply":"2023-06-26T03:36:38.759487Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"aggr_metrics","metadata":{"execution":{"iopub.status.busy":"2023-06-26T03:36:38.761994Z","iopub.execute_input":"2023-06-26T03:36:38.762999Z","iopub.status.idle":"2023-06-26T03:36:38.773274Z","shell.execute_reply.started":"2023-06-26T03:36:38.762965Z","shell.execute_reply":"2023-06-26T03:36:38.772268Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import jo_wilder_310\nenv = jo_wilder_310.make_env()\ntest_iterator = env.iter_test()","metadata":{"execution":{"iopub.status.busy":"2023-06-26T03:42:17.530773Z","iopub.execute_input":"2023-06-26T03:42:17.531044Z","iopub.status.idle":"2023-06-26T03:42:17.642711Z","shell.execute_reply.started":"2023-06-26T03:42:17.531020Z","shell.execute_reply":"2023-06-26T03:42:17.641880Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"start = time.time()\nlimits = {'0-4':(1,4), '5-12':(4,14), '13-22':(14,19)}\nfor (test, sample_submission) in test_iterator:\n    grp = test.level_group.values[0]\n    # FEATURE ENGINEER TEST DATA\n    df = preprocessing_2(test, features[grp]).drop(drop[grp] + [\"level_group\"], axis=1).fillna(-1)\n    \n    # INFER TEST DATA\n    a,b = limits[grp]\n    for t in range(a,b):\n        clf = models[t-1]\n        p = clf.predict_proba(df.astype('float32'))[:,1]\n        mask = sample_submission.session_id.str.contains(f'q{t}')\n        sample_submission.loc[mask,'correct'] = int( p > 0.63 )\n        #df[f\"q{t}_ans\"] = p\n    env.predict(sample_submission)\nprint(time.time() - start)","metadata":{"execution":{"iopub.status.busy":"2023-06-22T12:48:07.163015Z","iopub.execute_input":"2023-06-22T12:48:07.163271Z","iopub.status.idle":"2023-06-22T12:48:10.240960Z","shell.execute_reply.started":"2023-06-22T12:48:07.163248Z","shell.execute_reply":"2023-06-22T12:48:10.239766Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pd.read_csv(\"submission.csv\").head()","metadata":{"execution":{"iopub.status.busy":"2023-06-22T12:48:10.242825Z","iopub.execute_input":"2023-06-22T12:48:10.243255Z","iopub.status.idle":"2023-06-22T12:48:10.258246Z","shell.execute_reply.started":"2023-06-22T12:48:10.243215Z","shell.execute_reply":"2023-06-22T12:48:10.256754Z"},"trusted":true},"execution_count":null,"outputs":[]}]}