{"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":"markdown","source":"### Predict Student Performance from Game Play\n\nThe goal of this competition is to predict student performance during game-based learning in real-time.\n\nThis is the full convolution neural network baseline which gives good results on 1,2,3,9,12,17 and 18 questions.\n![jw results.jpg](attachment:05fe65d6-53fd-4bea-bd10-509d27c1e4ca.jpg)\nAbobe are result on the training on full train dataset on GPU during 8 hours.\nIn the code bellow just about 900 sessions sample is used. If you want to reproduce training results you should change the size of data in commented rows of code.\n\n#### Note 1\nOn March 20 2023, Kaggle doubled the size of train data and you need more than 8 RAM to upload all train data in this notebook to run model on full dataset to reproduce our results. But worth to mention that I tested here with 20M rows (more than 2/3 of original dataset and it fits in 8Gb RAM). \n\n#### Note 2\nModel in this notebook is just a simple model and shows that in a few questions obtain a good results is not too difficult. I also tried transformer model that gives significantly better scores.\n\nQuestion: 1 F1: 0.843 Question: 2 F1: 0.989\n\nQuestion: 3 F1: 0.966 Question: 4 F1: 0.890\n\nQuestion: 5 F1: 0.720 Question: 6 F1: 0.874\n\nQuestion: 7 F1: 0.848 Question: 8 F1: 0.760\n\nQuestion: 9 F1: 0.850 Question: 10 F1: 0.615\n\nQuestion: 11 F1: 0.784 Question: 12 F1: 0.926\n\nQuestion: 13 F1: 0.375 Question: 14, F1: 0.84 \n\nQuestion: 15, F1: 0.63 Question: 16 F1: 0.847\n\nQuestion: 17 F1: 0.815 Question: 18 F1: 0.975\n\nAverage F1 is about 0.8\n\n**If you find this notebook interesting please upvote, this motivates a lot to share the results! Thank you!**","metadata":{"papermill":{"duration":0.0088,"end_time":"2023-04-24T00:26:57.361632","exception":false,"start_time":"2023-04-24T00:26:57.352832","status":"completed"},"tags":[]},"attachments":{"05fe65d6-53fd-4bea-bd10-509d27c1e4ca.jpg":{"image/jpeg":"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"}}},{"cell_type":"code","source":"import json\nimport pandas as pd\nimport numpy as np\nfrom tqdm import tqdm, trange\nimport matplotlib as pl","metadata":{"papermill":{"duration":0.022042,"end_time":"2023-04-24T00:26:57.391266","exception":false,"start_time":"2023-04-24T00:26:57.369224","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2023-06-05T22:04:21.435375Z","iopub.execute_input":"2023-06-05T22:04:21.435957Z","iopub.status.idle":"2023-06-05T22:04:21.446337Z","shell.execute_reply.started":"2023-06-05T22:04:21.435909Z","shell.execute_reply":"2023-06-05T22:04:21.445102Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.preprocessing import normalize\nfrom sklearn.metrics import accuracy_score, f1_score, precision_score, recall_score","metadata":{"execution":{"iopub.execute_input":"2023-04-24T00:26:57.407964Z","iopub.status.busy":"2023-04-24T00:26:57.407138Z","iopub.status.idle":"2023-04-24T00:26:58.276280Z","shell.execute_reply":"2023-04-24T00:26:58.275251Z"},"papermill":{"duration":0.880064,"end_time":"2023-04-24T00:26:58.278978","exception":false,"start_time":"2023-04-24T00:26:57.398914","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import torch\nfrom torch import nn\nfrom torch import optim\nfrom torch.utils.data import Dataset, DataLoader","metadata":{"execution":{"iopub.execute_input":"2023-04-24T00:26:58.296627Z","iopub.status.busy":"2023-04-24T00:26:58.295120Z","iopub.status.idle":"2023-04-24T00:27:00.577397Z","shell.execute_reply":"2023-04-24T00:27:00.576362Z"},"papermill":{"duration":2.293376,"end_time":"2023-04-24T00:27:00.580054","exception":false,"start_time":"2023-04-24T00:26:58.286678","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Data preprocess","metadata":{"papermill":{"duration":0.007298,"end_time":"2023-04-24T00:27:00.596244","exception":false,"start_time":"2023-04-24T00:27:00.588946","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# To reproduce our results you will need to read full dataset. The original train size is 2.629.6946 rows.\n\ndata = pd.read_csv(\"/kaggle/input/predict-student-performance-from-game-play/train.csv\", nrows = 1000000)","metadata":{"execution":{"iopub.execute_input":"2023-04-24T00:27:00.613828Z","iopub.status.busy":"2023-04-24T00:27:00.612201Z","iopub.status.idle":"2023-04-24T00:27:04.858019Z","shell.execute_reply":"2023-04-24T00:27:04.856914Z"},"papermill":{"duration":4.256862,"end_time":"2023-04-24T00:27:04.860622","exception":false,"start_time":"2023-04-24T00:27:00.603760","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"session_ids = list(np.unique(data[\"session_id\"]))","metadata":{"execution":{"iopub.execute_input":"2023-04-24T00:27:04.878428Z","iopub.status.busy":"2023-04-24T00:27:04.878053Z","iopub.status.idle":"2023-04-24T00:27:04.899286Z","shell.execute_reply":"2023-04-24T00:27:04.898272Z"},"papermill":{"duration":0.032184,"end_time":"2023-04-24T00:27:04.901706","exception":false,"start_time":"2023-04-24T00:27:04.869522","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"len(session_ids) # First 1M rows contain near 900 unique sessions. 670 sessions would be for train and rest to test.","metadata":{"execution":{"iopub.execute_input":"2023-04-24T00:27:04.918214Z","iopub.status.busy":"2023-04-24T00:27:04.917883Z","iopub.status.idle":"2023-04-24T00:27:04.924822Z","shell.execute_reply":"2023-04-24T00:27:04.923826Z"},"papermill":{"duration":0.018186,"end_time":"2023-04-24T00:27:04.927546","exception":false,"start_time":"2023-04-24T00:27:04.909360","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"rooms = list(np.unique(data[\"room_fqid\"].astype(str)))\nrooms_dict = {}\nfor i in range(len(rooms)):\n    rooms_dict[rooms[i]] = i","metadata":{"execution":{"iopub.execute_input":"2023-04-24T00:27:04.944531Z","iopub.status.busy":"2023-04-24T00:27:04.943698Z","iopub.status.idle":"2023-04-24T00:27:05.589489Z","shell.execute_reply":"2023-04-24T00:27:05.588292Z"},"papermill":{"duration":0.657335,"end_time":"2023-04-24T00:27:05.592597","exception":false,"start_time":"2023-04-24T00:27:04.935262","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"every_action = list(np.unique(data[\"event_name\"]))\ndef action_counter(data, action):\n    return len(data[data[\"event_name\"] == action])","metadata":{"execution":{"iopub.execute_input":"2023-04-24T00:27:05.613464Z","iopub.status.busy":"2023-04-24T00:27:05.613082Z","iopub.status.idle":"2023-04-24T00:27:06.225164Z","shell.execute_reply":"2023-04-24T00:27:06.224129Z"},"papermill":{"duration":0.624983,"end_time":"2023-04-24T00:27:06.227765","exception":false,"start_time":"2023-04-24T00:27:05.602782","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def make_2d_array_for_session(data, rooms):\n    res = {}\n    for room in rooms:\n        res[room] = []\n        for action in every_action:\n            if action == \"checkpoint\": continue\n            room_data = data[data[\"room_fqid\"] == room]\n            res[room].append(action_counter(room_data, action))\n            action_data = room_data[room_data[\"event_name\"] == action]\n            if \"click\" in action:\n                if res[room][-1] == 1: \n                    res[room].append(list(action_data[\"room_coor_x\"])[0])\n                    res[room].append(list(action_data[\"room_coor_y\"])[0])\n                elif res[room][-1] > 1:\n                    res[room].append(np.mean(action_data[\"room_coor_x\"]))\n                    res[room].append(np.mean(action_data[\"room_coor_y\"]))\n                elif res[room][-1] == 0:\n                    res[room].append(0)\n                    res[room].append(0)\n            if \"hover\" in action:\n                if res[room][-1] == 0: res[room].append(0)\n                else:\n                    res[room].append(np.mean(list(action_data[\"hover_duration\"])))\n            try:\n                res[room].append(np.min(list(room_data[\"level\"])))\n                res[room].append(max(list(room_data[\"level\"])))\n            except:\n                res[room].append(0)\n                res[room].append(0)\n    res = pd.DataFrame(res)\n    res = np.array(res)\n    res = normalize(res, axis=1, norm='l2')\n    return res","metadata":{"execution":{"iopub.execute_input":"2023-04-24T00:27:06.246110Z","iopub.status.busy":"2023-04-24T00:27:06.245701Z","iopub.status.idle":"2023-04-24T00:27:06.257486Z","shell.execute_reply":"2023-04-24T00:27:06.256417Z"},"papermill":{"duration":0.023624,"end_time":"2023-04-24T00:27:06.259639","exception":false,"start_time":"2023-04-24T00:27:06.236015","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"process_data = {}\nfor id in tqdm(session_ids[:886]): # for relize delete this index\n    session = data[data[\"session_id\"] == id]\n    if len(session[session[\"event_name\"] == \"checkpoint\"]) != 3: continue\n    process_data[id] = make_2d_array_for_session(data[data[\"session_id\"] == id], rooms)\n    if process_data[id].shape != (48, 19): print(f\"WARNING id {id} has wrong shape\")","metadata":{"execution":{"iopub.execute_input":"2023-04-24T00:27:06.277056Z","iopub.status.busy":"2023-04-24T00:27:06.276763Z","iopub.status.idle":"2023-04-24T00:31:04.289185Z","shell.execute_reply":"2023-04-24T00:31:04.288017Z"},"papermill":{"duration":238.024797,"end_time":"2023-04-24T00:31:04.292456","exception":false,"start_time":"2023-04-24T00:27:06.267659","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data = {}\ndata = {int(key): value for key, value in process_data.items()}\n\nfor key in data:\n    data[key] = data[key].tolist()","metadata":{"execution":{"iopub.execute_input":"2023-04-24T00:31:04.397101Z","iopub.status.busy":"2023-04-24T00:31:04.396776Z","iopub.status.idle":"2023-04-24T00:31:04.472583Z","shell.execute_reply":"2023-04-24T00:31:04.471499Z"},"papermill":{"duration":0.131152,"end_time":"2023-04-24T00:31:04.475172","exception":false,"start_time":"2023-04-24T00:31:04.344020","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data_sessions = list(data)","metadata":{"execution":{"iopub.execute_input":"2023-04-24T00:31:04.579725Z","iopub.status.busy":"2023-04-24T00:31:04.578760Z","iopub.status.idle":"2023-04-24T00:31:04.583860Z","shell.execute_reply":"2023-04-24T00:31:04.582961Z"},"papermill":{"duration":0.059071,"end_time":"2023-04-24T00:31:04.585883","exception":false,"start_time":"2023-04-24T00:31:04.526812","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Target preprocess ","metadata":{"papermill":{"duration":0.050598,"end_time":"2023-04-24T00:31:04.687529","exception":false,"start_time":"2023-04-24T00:31:04.636931","status":"completed"},"tags":[]}},{"cell_type":"code","source":"labels = pd.read_csv(\"/kaggle/input/predict-student-performance-from-game-play/train_labels.csv\")","metadata":{"execution":{"iopub.execute_input":"2023-04-24T00:31:04.790073Z","iopub.status.busy":"2023-04-24T00:31:04.789750Z","iopub.status.idle":"2023-04-24T00:31:05.111467Z","shell.execute_reply":"2023-04-24T00:31:05.110392Z"},"papermill":{"duration":0.375993,"end_time":"2023-04-24T00:31:05.114100","exception":false,"start_time":"2023-04-24T00:31:04.738107","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"labels_ids = list(labels[\"session_id\"])\ncorrects = list(labels[\"correct\"])","metadata":{"execution":{"iopub.execute_input":"2023-04-24T00:31:05.218126Z","iopub.status.busy":"2023-04-24T00:31:05.217795Z","iopub.status.idle":"2023-04-24T00:31:05.281789Z","shell.execute_reply":"2023-04-24T00:31:05.280881Z"},"papermill":{"duration":0.118287,"end_time":"2023-04-24T00:31:05.284216","exception":false,"start_time":"2023-04-24T00:31:05.165929","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"res = {}\nres[\"session_id\"] = []\nres[\"question\"]= []\nres[\"label\"] = []\nfor i, session_id in enumerate(labels_ids):\n    if int(session_id.split(\"_\")[0]) in data_sessions:\n        res[\"session_id\"].append(int(session_id.split(\"_\")[0]))\n        res[\"question\"].append(session_id.split(\"_\")[1][1:])\n        res[\"label\"].append(int(corrects[i]))","metadata":{"execution":{"iopub.execute_input":"2023-04-24T00:31:05.390962Z","iopub.status.busy":"2023-04-24T00:31:05.390404Z","iopub.status.idle":"2023-04-24T00:31:10.199856Z","shell.execute_reply":"2023-04-24T00:31:10.198745Z"},"papermill":{"duration":4.866105,"end_time":"2023-04-24T00:31:10.202439","exception":false,"start_time":"2023-04-24T00:31:05.336334","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"processed_labels = pd.DataFrame(res)\nprocessed_labels","metadata":{"execution":{"iopub.execute_input":"2023-04-24T00:31:10.309211Z","iopub.status.busy":"2023-04-24T00:31:10.308825Z","iopub.status.idle":"2023-04-24T00:31:10.344268Z","shell.execute_reply":"2023-04-24T00:31:10.343229Z"},"papermill":{"duration":0.092051,"end_time":"2023-04-24T00:31:10.346554","exception":false,"start_time":"2023-04-24T00:31:10.254503","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Training","metadata":{"papermill":{"duration":0.053134,"end_time":"2023-04-24T00:31:10.452211","exception":false,"start_time":"2023-04-24T00:31:10.399077","status":"completed"},"tags":[]}},{"cell_type":"markdown","source":"### Define all stuff","metadata":{"papermill":{"duration":0.05174,"end_time":"2023-04-24T00:31:10.555713","exception":false,"start_time":"2023-04-24T00:31:10.503973","status":"completed"},"tags":[]}},{"cell_type":"code","source":"device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")","metadata":{"execution":{"iopub.execute_input":"2023-04-24T00:31:10.662587Z","iopub.status.busy":"2023-04-24T00:31:10.661919Z","iopub.status.idle":"2023-04-24T00:31:10.717489Z","shell.execute_reply":"2023-04-24T00:31:10.716481Z"},"papermill":{"duration":0.111032,"end_time":"2023-04-24T00:31:10.719841","exception":false,"start_time":"2023-04-24T00:31:10.608809","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def return_labels_for_id(labels: pd.DataFrame, id: int):\n    return list(labels[labels[\"session_id\"] == id][\"label\"])","metadata":{"execution":{"iopub.execute_input":"2023-04-24T00:31:10.824797Z","iopub.status.busy":"2023-04-24T00:31:10.823742Z","iopub.status.idle":"2023-04-24T00:31:10.829259Z","shell.execute_reply":"2023-04-24T00:31:10.828366Z"},"papermill":{"duration":0.059829,"end_time":"2023-04-24T00:31:10.831402","exception":false,"start_time":"2023-04-24T00:31:10.771573","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class MyDataset(Dataset):\n    def __init__(self, data, labels):\n        if len(data) != len(labels):\n            raise ValueError(\"Not matching in lens data and labels\")\n        self.data = data\n        self.labels = labels\n\n    def __len__(self):\n        return len(self.labels)\n\n    def __getitem__(self, idx):\n        return self.data[idx], self.labels[idx]","metadata":{"execution":{"iopub.execute_input":"2023-04-24T00:31:10.935256Z","iopub.status.busy":"2023-04-24T00:31:10.934415Z","iopub.status.idle":"2023-04-24T00:31:10.940821Z","shell.execute_reply":"2023-04-24T00:31:10.939829Z"},"papermill":{"duration":0.060502,"end_time":"2023-04-24T00:31:10.942830","exception":false,"start_time":"2023-04-24T00:31:10.882328","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class NeuralNet(nn.Module):\n    def __init__(self, input_size, output_size):\n        super(NeuralNet, self).__init__()\n        self.flatten = nn.Flatten()\n        self.fc1 = nn.Linear(input_size, input_size*8)\n        self.fc2 = nn.Linear(input_size*8, input_size*2)\n        #self.dropout = nn.Dropout(p=0.1)\n        self.fc3 = nn.Linear(input_size*2, output_size)\n\n    def forward(self, x):\n        out = x.view(912)\n        out = torch.nn.functional.relu(self.fc1(out))\n        #out = self.dropout(out)\n        out = torch.nn.functional.relu(self.fc2(out))\n        out = torch.nn.functional.relu(self.fc3(out))\n        return out","metadata":{"execution":{"iopub.execute_input":"2023-04-24T00:31:11.047205Z","iopub.status.busy":"2023-04-24T00:31:11.046212Z","iopub.status.idle":"2023-04-24T00:31:11.053826Z","shell.execute_reply":"2023-04-24T00:31:11.052853Z"},"papermill":{"duration":0.06185,"end_time":"2023-04-24T00:31:11.055854","exception":false,"start_time":"2023-04-24T00:31:10.994004","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Load data in dataloader","metadata":{"papermill":{"duration":0.05052,"end_time":"2023-04-24T00:31:11.158966","exception":false,"start_time":"2023-04-24T00:31:11.108446","status":"completed"},"tags":[]}},{"cell_type":"code","source":"train_labels = np.array([np.array(return_labels_for_id(processed_labels, int(id))) for id in list(data)[:670]]) # Here you point size of train\ntrain_data = list(data.items())[:670] # Here the same\n\ntrain_array_data = []\ntrain_array_labels = []\nfor i, arr in enumerate(train_data):\n    train_array_labels.append(np.array(train_labels[i]))\n    train_array_data.append(np.array(arr[1]))\n\ntrain_data = np.array(train_array_data)\ntrain_data = torch.Tensor(train_data.astype(np.float64))\ntrain_labels = np.array(train_array_labels).astype(np.float64)","metadata":{"execution":{"iopub.execute_input":"2023-04-24T00:31:11.263728Z","iopub.status.busy":"2023-04-24T00:31:11.262705Z","iopub.status.idle":"2023-04-24T00:31:11.611187Z","shell.execute_reply":"2023-04-24T00:31:11.610105Z"},"papermill":{"duration":0.403812,"end_time":"2023-04-24T00:31:11.613948","exception":false,"start_time":"2023-04-24T00:31:11.210136","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"dataset = MyDataset(train_data, train_labels)\ndataloader = DataLoader(dataset, batch_size=16, shuffle=True)","metadata":{"execution":{"iopub.execute_input":"2023-04-24T00:31:11.718484Z","iopub.status.busy":"2023-04-24T00:31:11.718124Z","iopub.status.idle":"2023-04-24T00:31:11.724560Z","shell.execute_reply":"2023-04-24T00:31:11.723540Z"},"papermill":{"duration":0.060725,"end_time":"2023-04-24T00:31:11.726663","exception":false,"start_time":"2023-04-24T00:31:11.665938","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Define model","metadata":{"papermill":{"duration":0.050521,"end_time":"2023-04-24T00:31:11.828251","exception":false,"start_time":"2023-04-24T00:31:11.777730","status":"completed"},"tags":[]}},{"cell_type":"code","source":"input_size = train_data.shape[1] * train_data.shape[2] #912\noutput_size = 18\n\nmodel = NeuralNet(input_size, output_size)\nmodel.to(device)\n\nlr = 0.01\ncriterion = nn.BCEWithLogitsLoss()\noptimizer = optim.AdamW(model.parameters(), lr=lr)","metadata":{"execution":{"iopub.execute_input":"2023-04-24T00:31:11.931793Z","iopub.status.busy":"2023-04-24T00:31:11.931451Z","iopub.status.idle":"2023-04-24T00:31:14.640217Z","shell.execute_reply":"2023-04-24T00:31:14.639180Z"},"papermill":{"duration":2.763852,"end_time":"2023-04-24T00:31:14.643032","exception":false,"start_time":"2023-04-24T00:31:11.879180","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Fit","metadata":{"papermill":{"duration":0.108195,"end_time":"2023-04-24T00:31:14.802859","exception":false,"start_time":"2023-04-24T00:31:14.694664","status":"completed"},"tags":[]}},{"cell_type":"code","source":"for epoch in trange(100): # Change value\n    avg_loss = 0.0\n    for batch_idx, (data, target) in (enumerate(dataloader)):\n        optimizer.zero_grad()\n        loss = 0.0\n        for p in range(len(data)):\n            output = model(data[p].to(device))\n            output = output.cpu()\n            loss += criterion(output, target[p])\n        loss.backward()\n        optimizer.step()\n        avg_loss += loss.item()\n    print('Epoch %d loss: %.3f' % (epoch + 1, avg_loss/len(data)))","metadata":{"execution":{"iopub.execute_input":"2023-04-24T00:31:14.907452Z","iopub.status.busy":"2023-04-24T00:31:14.907075Z","iopub.status.idle":"2023-04-24T00:32:51.047541Z","shell.execute_reply":"2023-04-24T00:32:51.046214Z"},"papermill":{"duration":96.195986,"end_time":"2023-04-24T00:32:51.050312","exception":false,"start_time":"2023-04-24T00:31:14.854326","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Test model","metadata":{"papermill":{"duration":0.102281,"end_time":"2023-04-24T00:32:51.269130","exception":false,"start_time":"2023-04-24T00:32:51.166849","status":"completed"},"tags":[]}},{"cell_type":"code","source":"data = {}\ndata = {int(key): value for key, value in process_data.items()}\n\nfor key in data:\n    data[key] = data[key].tolist()","metadata":{"execution":{"iopub.execute_input":"2023-04-24T00:32:51.396393Z","iopub.status.busy":"2023-04-24T00:32:51.395993Z","iopub.status.idle":"2023-04-24T00:32:51.598115Z","shell.execute_reply":"2023-04-24T00:32:51.596839Z"},"papermill":{"duration":0.268771,"end_time":"2023-04-24T00:32:51.600860","exception":false,"start_time":"2023-04-24T00:32:51.332089","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_labels = np.array([np.array(return_labels_for_id(processed_labels, int(id))) for id in list(data)[670:]]) # Here you point size of train\ntest_data = list(data.items())[670:] # Here the same\n\ntest_array_data = []\ntest_array_labels = []\nfor i, arr in enumerate(test_data):\n    test_array_labels.append(np.array(test_labels[i]))\n    test_array_data.append(np.array(arr[1]))\n\ntest_data = np.array(test_array_data)\ntest_data = torch.Tensor(test_data.astype(np.float64))\ntest_labels = np.array(test_array_labels).astype(np.float64)\n\ndataset = MyDataset(test_data, test_labels)\ndataloader = DataLoader(dataset, batch_size=16, shuffle=False)","metadata":{"execution":{"iopub.execute_input":"2023-04-24T00:32:51.727291Z","iopub.status.busy":"2023-04-24T00:32:51.726064Z","iopub.status.idle":"2023-04-24T00:32:51.834636Z","shell.execute_reply":"2023-04-24T00:32:51.833658Z"},"papermill":{"duration":0.173963,"end_time":"2023-04-24T00:32:51.837204","exception":false,"start_time":"2023-04-24T00:32:51.663241","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"predict = []\ntargets = []\nfor batch_idx, (data_chunk, target) in tqdm((enumerate(dataloader))):\n    for p in range(len(data_chunk)):\n        predict.append(model(data_chunk[p].to(device)).cpu())\n        targets.append(target[p])","metadata":{"execution":{"iopub.execute_input":"2023-04-24T00:32:51.961525Z","iopub.status.busy":"2023-04-24T00:32:51.961183Z","iopub.status.idle":"2023-04-24T00:32:52.038780Z","shell.execute_reply":"2023-04-24T00:32:52.037412Z"},"papermill":{"duration":0.14146,"end_time":"2023-04-24T00:32:52.040976","exception":false,"start_time":"2023-04-24T00:32:51.899516","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def print_metrics(target, predict):\n    res = {}\n    res[\"accuracy_score\"] = []\n    res[\"f1_score\"] = []\n    res[\"precision_score\"] = []\n    res[\"recall_score\"] = []\n    predict = np.array([x.detach().numpy() for x in predict])\n    target = np.array([x.detach().numpy() for x in target])\n    for i in range(18):\n        i_target = target[:, i]\n        i_predict = predict[:, i]\n        for j in range(len(i_predict)):\n            if i_predict[j] > 0.5: i_predict[j] = 1.0\n            else: i_predict[j] = 0.0\n        res[\"accuracy_score\"].append(accuracy_score(i_target, i_predict))\n        res[\"precision_score\"].append(precision_score(i_target, i_predict))\n        res[\"recall_score\"].append(recall_score(i_target, i_predict))\n        res[\"f1_score\"].append(f1_score(i_target, i_predict))\n    \n    print(f\"f1_score for all data: {f1_score(target.flatten(), predict.flatten())}\")\n    return res","metadata":{"execution":{"iopub.execute_input":"2023-04-24T00:32:52.168635Z","iopub.status.busy":"2023-04-24T00:32:52.167644Z","iopub.status.idle":"2023-04-24T00:32:52.176847Z","shell.execute_reply":"2023-04-24T00:32:52.175868Z"},"papermill":{"duration":0.074825,"end_time":"2023-04-24T00:32:52.178954","exception":false,"start_time":"2023-04-24T00:32:52.104129","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pd.DataFrame(print_metrics(targets, predict)).T","metadata":{"execution":{"iopub.execute_input":"2023-04-24T00:32:52.303899Z","iopub.status.busy":"2023-04-24T00:32:52.303567Z","iopub.status.idle":"2023-04-24T00:32:52.389935Z","shell.execute_reply":"2023-04-24T00:32:52.388834Z"},"papermill":{"duration":0.150754,"end_time":"2023-04-24T00:32:52.392152","exception":false,"start_time":"2023-04-24T00:32:52.241398","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]}]}