{"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 numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport os\n\nfrom sklearn.metrics import f1_score, precision_score, recall_score","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-03-29T13:12:01.526083Z","iopub.execute_input":"2023-03-29T13:12:01.526505Z","iopub.status.idle":"2023-03-29T13:12:02.035748Z","shell.execute_reply.started":"2023-03-29T13:12:01.526468Z","shell.execute_reply":"2023-03-29T13:12:02.034709Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def get_group_level(q):\n    qno = int(q[1:])\n    if qno < 4:\n        return '0-4'\n    elif qno < 14:\n        return '5-12'\n    return '13-22'","metadata":{"execution":{"iopub.status.busy":"2023-03-29T13:12:02.037480Z","iopub.execute_input":"2023-03-29T13:12:02.038052Z","iopub.status.idle":"2023-03-29T13:12:02.043130Z","shell.execute_reply.started":"2023-03-29T13:12:02.038017Z","shell.execute_reply":"2023-03-29T13:12:02.041931Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_label = pd.read_csv(\"/kaggle/input/predict-student-performance-from-game-play/train_labels.csv\")\n\ntrain_label['qno'] = train_label.session_id.apply(lambda session_id: session_id.split(\"_\")[-1])\ntrain_label['session_id'] = train_label.session_id.apply(lambda session_id: session_id.split(\"_\")[0]).astype(int)\ntrain_label['level_group'] = train_label.qno.apply(get_group_level)\n\ntrain_label.head()","metadata":{"execution":{"iopub.status.busy":"2023-03-29T13:12:02.044647Z","iopub.execute_input":"2023-03-29T13:12:02.045322Z","iopub.status.idle":"2023-03-29T13:12:03.211209Z","shell.execute_reply.started":"2023-03-29T13:12:02.045258Z","shell.execute_reply":"2023-03-29T13:12:03.210303Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Exclude features from level groups","metadata":{}},{"cell_type":"code","source":"exclude_map={\n    '0-4': [\n        'tunic.drycleaner.frontdesk.logbook.page.bingo',\n       'tunic.drycleaner.frontdesk.worker.done',\n       'tunic.drycleaner.frontdesk.worker.hub',\n       'tunic.historicalsociety.closet_dirty.gramps.news',\n       'tunic.historicalsociety.closet_dirty.trigger_coffee',\n       'tunic.historicalsociety.closet_dirty.trigger_scarf',\n       'tunic.historicalsociety.closet_dirty.what_happened',\n       'tunic.historicalsociety.frontdesk.archivist.have_glass',\n       'tunic.historicalsociety.frontdesk.archivist.hello',\n       'tunic.historicalsociety.frontdesk.archivist.newspaper',\n       'tunic.historicalsociety.frontdesk.magnify',\n       'tunic.historicalsociety.stacks.journals.pic_2.bingo',\n       'tunic.library.frontdesk.wellsbadge.hub',\n       'tunic.library.frontdesk.worker.wells',\n       'tunic.library.microfiche.reader.paper2.bingo',\n       'tunic.humanecology.frontdesk.businesscards.card_bingo.bingo',\n       'tunic.humanecology.frontdesk.worker.intro',\n       'tunic.library.frontdesk.worker.hello'\n    ],\n    '5-12': [\n        'tunic.drycleaner.frontdesk.logbook.page.bingo',\n       'tunic.drycleaner.frontdesk.worker.done',\n       'tunic.drycleaner.frontdesk.worker.hub',\n       'tunic.historicalsociety.closet_dirty.gramps.news',\n       'tunic.historicalsociety.closet_dirty.trigger_coffee',\n       'tunic.historicalsociety.closet_dirty.trigger_scarf',\n       'tunic.historicalsociety.closet_dirty.what_happened',\n       'tunic.historicalsociety.frontdesk.archivist.have_glass',\n       'tunic.historicalsociety.frontdesk.archivist.hello',\n       'tunic.historicalsociety.frontdesk.archivist.newspaper',\n       'tunic.historicalsociety.frontdesk.magnify',\n       'tunic.historicalsociety.stacks.journals.pic_2.bingo',\n       'tunic.library.frontdesk.wellsbadge.hub',\n       'tunic.library.frontdesk.worker.wells',\n       'tunic.library.microfiche.reader.paper2.bingo'\n    ],\n    '13-22': ['tunic.flaghouse.entry.colorbook',\n       'tunic.flaghouse.entry.flag_girl.hello',\n       'tunic.flaghouse.entry.flag_girl.symbol',\n       'tunic.historicalsociety.basement.ch3start',\n       'tunic.historicalsociety.basement.savedteddy',\n       'tunic.historicalsociety.basement.seescratches',\n       'tunic.historicalsociety.collection_flag.gramps.flag',\n       'tunic.historicalsociety.entry.boss.flag',\n       'tunic.historicalsociety.entry.groupconvo_flag',\n       'tunic.historicalsociety.frontdesk.archivist_glasses.confrontation',\n       'tunic.historicalsociety.frontdesk.key',\n       'tunic.library.frontdesk.worker.flag',\n       'tunic.library.microfiche.reader_flag.paper2.bingo',\n       'tunic.wildlife.center.crane_ranger.crane',\n       'tunic.wildlife.center.expert.removed_cup',\n       'tunic.wildlife.center.remove_cup',\n       'tunic.wildlife.center.tracks.hub.deer',\n       'tunic.wildlife.center.wells.animals',\n       'tunic.wildlife.center.wells.nodeer',\n       'tunic.historicalsociety.cage.confrontation',\n       'tunic.historicalsociety.cage.unlockdoor',\n       'tunic.library.frontdesk.worker.nelson',\n       'tunic.wildlife.center.coffee']\n}","metadata":{"execution":{"iopub.status.busy":"2023-03-29T13:12:03.213836Z","iopub.execute_input":"2023-03-29T13:12:03.214421Z","iopub.status.idle":"2023-03-29T13:12:03.226448Z","shell.execute_reply.started":"2023-03-29T13:12:03.214386Z","shell.execute_reply":"2023-03-29T13:12:03.225244Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# prior probailities & frequencies.","metadata":{}},{"cell_type":"code","source":"prior_prob={}\nprior_df = train_label.groupby(\"qno\")[['correct']].mean().reset_index()\n\nfor _,row in prior_df.iterrows():\n    qno = row.qno\n    correct_prob = row.correct\n    prior_prob[qno] = correct_prob","metadata":{"execution":{"iopub.status.busy":"2023-03-29T13:12:03.227992Z","iopub.execute_input":"2023-03-29T13:12:03.228920Z","iopub.status.idle":"2023-03-29T13:12:03.323048Z","shell.execute_reply.started":"2023-03-29T13:12:03.228863Z","shell.execute_reply":"2023-03-29T13:12:03.321655Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"prior_freq={}\nprior_df = train_label.groupby(['qno', 'correct'])[['session_id']].count().reset_index().rename(columns={'session_id': 'freq'})\n\nfor _,row in prior_df.iterrows():\n    qno = row.qno\n    correct = row.correct\n    freq=row.freq\n    if prior_freq.get(qno, None) == None:\n        prior_freq[qno]={}\n        prior_freq[qno][correct] = {}\n    prior_freq[qno][correct] = freq","metadata":{"execution":{"iopub.status.busy":"2023-03-29T13:12:03.327647Z","iopub.execute_input":"2023-03-29T13:12:03.328099Z","iopub.status.idle":"2023-03-29T13:12:03.409388Z","shell.execute_reply.started":"2023-03-29T13:12:03.328064Z","shell.execute_reply":"2023-03-29T13:12:03.408304Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"prior_freq","metadata":{"execution":{"iopub.status.busy":"2023-03-29T13:12:03.413611Z","iopub.execute_input":"2023-03-29T13:12:03.416508Z","iopub.status.idle":"2023-03-29T13:12:03.428414Z","shell.execute_reply.started":"2023-03-29T13:12:03.416461Z","shell.execute_reply":"2023-03-29T13:12:03.427413Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df = pd.read_csv(\"/kaggle/input/predict-student-performance-from-game-play/train.csv\",\n                       usecols=['session_id', 'text_fqid', \n                                'level_group', 'page',\n                                'hq', 'music'\n                               ],\n                       dtype={'page': np.float16,\n                              \"music\": np.int8,\n                              \"hq\": np.int8\n                             })\n\ntrain_df.head()","metadata":{"execution":{"iopub.status.busy":"2023-03-29T13:12:03.432718Z","iopub.execute_input":"2023-03-29T13:12:03.433484Z","iopub.status.idle":"2023-03-29T13:13:38.087855Z","shell.execute_reply.started":"2023-03-29T13:12:03.433445Z","shell.execute_reply":"2023-03-29T13:13:38.086685Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def get_page_stat(df):\n    page_df = df[~df.page.isna()]\n    page_df = page_df.groupby(['session_id', 'level_group', 'page'])[['session_id']].count()\n    page_df.columns=['page_count']\n    page_df = page_df.reset_index()\n    \n    page_df = pd.pivot_table(data=page_df, index=['session_id', 'level_group'], columns='page', values='page_count')\n    page_df.columns= [\"page_\"+str(int(p)) for p in page_df.columns]\n    page_df = page_df.reset_index()\n    page_df.fillna(0.0, inplace=True)\n    return page_df\n\n\ndef get_hq_music(df):\n    df['music'].fillna(0.0, inplace=True)\n    df['hq'].fillna(0.0, inplace=True)\n    \n    stat_df = df.groupby(['session_id', 'level_group', 'music', 'hq'])[['session_id']].count().rename(columns={'session_id': '_count'}).reset_index()\n    stat_df['music'] = \"music\"+stat_df['music'].astype(str)\n    stat_df['hq'] = \"hq\"+stat_df['hq'].astype(str)\n    \n    \n    \n    music_df = pd.pivot_table(data=stat_df, index=['session_id', 'level_group'],\n                              columns=['music'],\n                              values=['_count'])\n    \n    hq_df = pd.pivot_table(data=stat_df, index=['session_id', 'level_group'],\n                           columns=['hq'],\n                           values=['_count']\n                          )\n    \n    stat_df = music_df.merge(hq_df, on=['session_id', 'level_group'])\n    stat_df.fillna(0.0, inplace=True)\n    \n    columns=[c[-1] for c in stat_df.columns.values]\n    stat_df.columns = columns\n    stat_df=stat_df.reset_index()\n    return stat_df","metadata":{"execution":{"iopub.status.busy":"2023-03-29T13:13:38.089450Z","iopub.execute_input":"2023-03-29T13:13:38.089782Z","iopub.status.idle":"2023-03-29T13:13:38.105152Z","shell.execute_reply.started":"2023-03-29T13:13:38.089752Z","shell.execute_reply":"2023-03-29T13:13:38.103706Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%time\ntoken_map={}\nfor l in ['0-4', '5-12', '13-22']:\n    print(l)\n    exclude_columns = exclude_map[l]\n    page_df = get_page_stat(train_df[train_df.level_group == l])\n    hq_music_stat_df = get_hq_music(train_df[train_df.level_group == l])\n    \n    \n    \n    level_df = train_df[(train_df.level_group == l)  &  (~train_df.text_fqid.isna())]\n    level_label_df = train_label[(train_label.level_group == l)]\n    \n    level_label_columns = level_label_df['qno'].unique()\n    level_columns = level_df['text_fqid'].unique()\n    level_df = pd.pivot_table(data=level_df, index=['session_id'], \n                              columns=['text_fqid'],\n                              values=['level_group'],\n                              aggfunc=[\"count\"])\n    level_df.fillna(0, inplace=True)\n    \n    level_label_df = pd.pivot_table(data=level_label_df, index=['session_id'], columns=['qno'],\n                                    values=['correct'])\n    \n    \n    #Level Columns\n    level_columns = [c[-1] for c in level_df.columns.values]\n    level_df.columns=level_columns\n    \n    level_label_df.columns=[c[-1] for c in level_label_df.columns]\n    tmp_df = level_df.merge(level_label_df, on='session_id').merge(page_df, on='session_id', how='left').\\\n                merge(hq_music_stat_df, on='session_id', how='left')\n    tmp_df.fillna(0.0, inplace=True)\n    \n    \n    level_columns = level_columns+list([c for c in page_df.columns if c not in ['session_id', 'level_group']])\n    level_columns = level_columns + list([c for c in hq_music_stat_df.columns if c not in ['session_id', 'level_group']])\n    level_columns = [c for c in level_columns if c not in exclude_columns]\n    \n    print(\"Number of level columns:\", len(level_columns))\n    print(level_columns)\n    print()\n    if token_map.get(l, None) is None:\n        token_map[l]={}\n        for lc in level_columns:\n            token_map[l][lc] = {}\n            for qno in level_label_columns:\n                token_map[l][lc][qno]={}\n                token_map[l][lc][qno]['happen'] = np.zeros(2)\n                token_map[l][lc][qno]['not_happen'] = np.zeros(2)\n                \n    for _,row in tmp_df.iterrows():\n        row_data=row[level_columns]\n        for lc in level_columns:\n            event_happen = 'happen'\n            if row_data[lc] == 0 :\n                event_happen='not_happen'\n                \n            for qno in level_label_columns:\n                token_map[l][lc][qno][event_happen][ int(row[qno]) ] += 1","metadata":{"execution":{"iopub.status.busy":"2023-03-29T13:13:38.108767Z","iopub.execute_input":"2023-03-29T13:13:38.109150Z","iopub.status.idle":"2023-03-29T13:16:51.318034Z","shell.execute_reply.started":"2023-03-29T13:13:38.109116Z","shell.execute_reply":"2023-03-29T13:16:51.316311Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"nsessions = train_df.session_id.nunique()\nprint(\"number of sessions:\", nsessions)","metadata":{"execution":{"iopub.status.busy":"2023-03-29T13:16:51.319910Z","iopub.execute_input":"2023-03-29T13:16:51.320307Z","iopub.status.idle":"2023-03-29T13:16:51.483878Z","shell.execute_reply.started":"2023-03-29T13:16:51.320258Z","shell.execute_reply":"2023-03-29T13:16:51.482516Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# normalize token map","metadata":{}},{"cell_type":"code","source":"prior_freq['q1']","metadata":{"execution":{"iopub.status.busy":"2023-03-29T13:16:51.485393Z","iopub.execute_input":"2023-03-29T13:16:51.486106Z","iopub.status.idle":"2023-03-29T13:16:51.493570Z","shell.execute_reply.started":"2023-03-29T13:16:51.486063Z","shell.execute_reply":"2023-03-29T13:16:51.492396Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for l in token_map.keys():\n    for lc in token_map[l].keys():\n        for qno in token_map[l][lc].keys():\n            neg_cnt = prior_freq[qno][0]\n            pos_cnt = prior_freq[qno][1]\n            \n            if neg_cnt > 0:\n                token_map[l][lc][qno]['happen'][0] = token_map[l][lc][qno]['happen'][0]/neg_cnt\n                token_map[l][lc][qno]['not_happen'][0] = token_map[l][lc][qno]['not_happen'][0]/neg_cnt\n                \n            if pos_cnt > 0:\n                token_map[l][lc][qno]['happen'][1] = token_map[l][lc][qno]['happen'][1]/pos_cnt\n                token_map[l][lc][qno]['not_happen'][1] = token_map[l][lc][qno]['not_happen'][1]/pos_cnt","metadata":{"execution":{"iopub.status.busy":"2023-03-29T13:18:43.033362Z","iopub.execute_input":"2023-03-29T13:18:43.033862Z","iopub.status.idle":"2023-03-29T13:18:43.048513Z","shell.execute_reply.started":"2023-03-29T13:18:43.033816Z","shell.execute_reply":"2023-03-29T13:18:43.047392Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"token_map['0-4']","metadata":{"execution":{"iopub.status.busy":"2023-03-29T13:18:44.562475Z","iopub.execute_input":"2023-03-29T13:18:44.563587Z","iopub.status.idle":"2023-03-29T13:18:44.622479Z","shell.execute_reply.started":"2023-03-29T13:18:44.563535Z","shell.execute_reply":"2023-03-29T13:18:44.621390Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Prediction Function","metadata":{}},{"cell_type":"code","source":"def predict(test, submission, page_weight=1.0):\n    level_group = test.level_group.unique()[0]\n    qlst = submission['session_id'].apply(lambda s: s.split(\"_\")[-1]).unique()\n    exclude_columns = exclude_map[level_group]\n    \n    \n    page_df = get_page_stat(test)\n    hq_music_df = get_hq_music(test)\n    \n    test_columns = test['text_fqid'].unique()\n    tmp_df = pd.pivot_table(data=test[~test.text_fqid.isna()], index=['session_id'], \n                            columns=['text_fqid'],\n                            values=['level_group'],\n                            aggfunc=[\"count\"])\n    colnames = [c[-1] for c in tmp_df.columns.values]\n    \n    tmp_df.columns = colnames\n    tmp_df = tmp_df[colnames]\n    tmp_df = tmp_df.reset_index()\n    \n    tmp_df = tmp_df.merge(page_df, how='left',on='session_id' ).merge(hq_music_df, how='left')\n    tmp_df.fillna(-1.0, inplace=True)\n    \n    \n    pred_df=[]\n    tmp_df['session_id'] = tmp_df['session_id'].astype(str)\n    \n    all_colnames = list(token_map[level_group].keys())\n    all_colnames = [c for c in all_colnames if (not c.startswith(\"page\")) and \\\n                        (not c.startswith(\"hq\") and \\\n                        (not c.startswith(\"music\")))]\n    \n    #all_colnames = [c for c in all_colnames if c not in exclude_columns]\n    for _,row in tmp_df.iterrows():\n        session_id = row.session_id\n        for qno in qlst:\n            w = 1.1\n            \n            y1 = np.log(w + prior_prob[qno])\n            y0 = np.log(w + 1-y1)\n            \n            \n            #Check if the column exists for the row,\n            #If the feature exists take prob values from happen event or else from not_happen event\n            for colname in all_colnames:\n                y=token_map[level_group][colname][qno]['happen']\n                if row.get(colname, None) is None or row.get(colname) == -1:\n                    y=token_map[level_group][colname][qno]['not_happen']\n                \n                y0 = y0 + np.log(y[0] + w)\n                y1 = y1 + np.log(y[1] + w)\n            \n            correct = int(y1>y0)\n            pred_session_id = session_id+\"_\"+str(qno)\n            pred_df.append({\n                'session_id': pred_session_id,\n                'correct': correct\n            })\n    \n    pred_df = pd.DataFrame.from_dict(pred_df)\n    return pred_df","metadata":{"execution":{"iopub.status.busy":"2023-03-29T13:19:27.440425Z","iopub.execute_input":"2023-03-29T13:19:27.440832Z","iopub.status.idle":"2023-03-29T13:19:27.461212Z","shell.execute_reply.started":"2023-03-29T13:19:27.440799Z","shell.execute_reply":"2023-03-29T13:19:27.459212Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# validation","metadata":{}},{"cell_type":"code","source":"def validation(df, label_df, page_weight=1.0):\n    all_pred_df=[]\n    \n    for l in ['0-4', '5-12', '13-22']:\n        level_df = df[df.level_group == l]\n        level_label_df = label_df[label_df.level_group == l]\n        \n        tmp_df = predict(level_df, level_label_df, page_weight=page_weight)\n        all_pred_df.append(tmp_df)\n    all_pred_df=pd.concat(all_pred_df)\n    return all_pred_df","metadata":{"execution":{"iopub.status.busy":"2023-03-29T13:19:27.463155Z","iopub.execute_input":"2023-03-29T13:19:27.463619Z","iopub.status.idle":"2023-03-29T13:19:27.473160Z","shell.execute_reply.started":"2023-03-29T13:19:27.463582Z","shell.execute_reply":"2023-03-29T13:19:27.471924Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"label_df = pd.read_csv(\"/kaggle/input/predict-student-performance-from-game-play/train_labels.csv\")\nlabel_df['qno'] = label_df['session_id'].apply(lambda s: s.split(\"_\")[-1])\nlabel_df['level_group'] = label_df.qno.apply(get_group_level)\nlabel_df.rename(columns={'correct': 'true_label'}, inplace=True)\n\nlabel_df.head()","metadata":{"execution":{"iopub.status.busy":"2023-03-29T13:19:27.494162Z","iopub.execute_input":"2023-03-29T13:19:27.494566Z","iopub.status.idle":"2023-03-29T13:19:28.361484Z","shell.execute_reply.started":"2023-03-29T13:19:27.494531Z","shell.execute_reply":"2023-03-29T13:19:28.360197Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%time\nfor w in np.arange(1, 5, 0.5):\n    val_df = validation(train_df, label_df, w)\n    val_df = val_df.merge(label_df[['session_id', 'true_label']])\n\n    print()\n    print(\"weight:\", w)\n    print(\"fscore: \", f1_score( val_df.true_label, val_df.correct))\n    break","metadata":{"execution":{"iopub.status.busy":"2023-03-29T13:19:28.363379Z","iopub.execute_input":"2023-03-29T13:19:28.363828Z","iopub.status.idle":"2023-03-29T13:23:10.188857Z","shell.execute_reply.started":"2023-03-29T13:19:28.363791Z","shell.execute_reply":"2023-03-29T13:23:10.187818Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"val_df['qno'] = val_df.session_id.apply(lambda s: s.split(\"_\")[-1])\nval_df['level_group'] = val_df.qno.apply(get_group_level)\nval_df.head()","metadata":{"execution":{"iopub.status.busy":"2023-03-29T13:23:41.789563Z","iopub.execute_input":"2023-03-29T13:23:41.789986Z","iopub.status.idle":"2023-03-29T13:23:42.211945Z","shell.execute_reply.started":"2023-03-29T13:23:41.789952Z","shell.execute_reply":"2023-03-29T13:23:42.210909Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for l in ['0-4', '5-12', '13-22']:\n    tmp_df = val_df[val_df.level_group==l]\n    ytrue = tmp_df.true_label\n    ypred = tmp_df.correct\n    \n    print(\"leve group:\", l)\n    print(\"f score: {:.4f}\".format( f1_score(ytrue,ypred ) ) )\n    print(\"precision score:{:.4f}\".format( precision_score(ytrue,ypred) ))\n    print(\"recall score:{:.4f}\".format(recall_score(ytrue, ypred)))\n    \n    print()","metadata":{"execution":{"iopub.status.busy":"2023-03-29T13:23:42.213626Z","iopub.execute_input":"2023-03-29T13:23:42.214201Z","iopub.status.idle":"2023-03-29T13:23:42.804133Z","shell.execute_reply.started":"2023-03-29T13:23:42.214165Z","shell.execute_reply":"2023-03-29T13:23:42.802903Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Naive Bayes Submission","metadata":{}},{"cell_type":"code","source":"import jo_wilder\njo_wilder.make_env.__called__ = False\n\nenv = jo_wilder.make_env()\niter_test = iter(env.iter_test())\n\n\nfor (test, submission) in iter_test:\n    test['hq'] = test['hq'].astype(int)\n    test['music'] = test['music'].astype(int)\n    \n    pred_df = predict(test, submission)\n    submission = submission[['session_id']].merge(pred_df, how='left')\n    submission['correct'].fillna(0, inplace=True)\n    env.predict(pred_df)","metadata":{"execution":{"iopub.status.busy":"2023-03-29T12:58:35.286955Z","iopub.execute_input":"2023-03-29T12:58:35.287468Z","iopub.status.idle":"2023-03-29T12:58:35.612195Z","shell.execute_reply.started":"2023-03-29T12:58:35.287429Z","shell.execute_reply":"2023-03-29T12:58:35.610681Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub_df = pd.read_csv(\"/kaggle/working/submission.csv\")","metadata":{"execution":{"iopub.status.busy":"2023-03-29T12:58:44.733430Z","iopub.execute_input":"2023-03-29T12:58:44.733962Z","iopub.status.idle":"2023-03-29T12:58:44.744272Z","shell.execute_reply.started":"2023-03-29T12:58:44.733921Z","shell.execute_reply":"2023-03-29T12:58:44.742709Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub_df[sub_df.session_id.apply(lambda x: x.startswith(\"20090312143683264\"))]","metadata":{"execution":{"iopub.status.busy":"2023-03-29T12:58:48.371597Z","iopub.execute_input":"2023-03-29T12:58:48.372099Z","iopub.status.idle":"2023-03-29T12:58:48.389571Z","shell.execute_reply.started":"2023-03-29T12:58:48.372059Z","shell.execute_reply":"2023-03-29T12:58:48.388492Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}