{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":59094,"databundleVersionId":6541963,"sourceType":"competition"},{"sourceId":6979574,"sourceType":"datasetVersion","datasetId":4007386}],"dockerImageVersionId":30558,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"***Please Upvote: https://www.kaggle.com/code/alexandervc/op2-models-cv-tuning?scriptVersionId=144976393***","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19"}},{"cell_type":"code","source":"import warnings\nwarnings.simplefilter('ignore')\n\nimport pandas as pd\n\npd.set_option('display.max_columns', 30)","metadata":{"execution":{"iopub.status.busy":"2023-11-17T06:30:43.351378Z","iopub.execute_input":"2023-11-17T06:30:43.352544Z","iopub.status.idle":"2023-11-17T06:30:43.877968Z","shell.execute_reply.started":"2023-11-17T06:30:43.352474Z","shell.execute_reply":"2023-11-17T06:30:43.876401Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import numpy as np\n\nSEED = 42\nnp.random.seed(SEED)","metadata":{"execution":{"iopub.status.busy":"2023-11-17T06:30:43.880648Z","iopub.execute_input":"2023-11-17T06:30:43.881289Z","iopub.status.idle":"2023-11-17T06:30:43.890338Z","shell.execute_reply.started":"2023-11-17T06:30:43.881189Z","shell.execute_reply":"2023-11-17T06:30:43.886143Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"de_train = pd.read_parquet('/kaggle/input/open-problems-single-cell-perturbations/de_train.parquet')\nde_train","metadata":{"execution":{"iopub.status.busy":"2023-11-17T06:30:43.892681Z","iopub.execute_input":"2023-11-17T06:30:43.893142Z","iopub.status.idle":"2023-11-17T06:30:46.739298Z","shell.execute_reply.started":"2023-11-17T06:30:43.893105Z","shell.execute_reply":"2023-11-17T06:30:46.737844Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"id_map = pd.read_csv ('/kaggle/input/open-problems-single-cell-perturbations/id_map.csv')\nid_map","metadata":{"execution":{"iopub.status.busy":"2023-11-17T06:30:46.743378Z","iopub.execute_input":"2023-11-17T06:30:46.743897Z","iopub.status.idle":"2023-11-17T06:30:46.795709Z","shell.execute_reply.started":"2023-11-17T06:30:46.743846Z","shell.execute_reply":"2023-11-17T06:30:46.794276Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub_0_567 = pd.read_csv('/kaggle/input/op-scp-submissions-2/submission_0_567_v7.csv')\nsub_0_567 = pd.concat([id_map, sub_0_567], axis=1).drop(columns='id')\nsub_0_567","metadata":{"execution":{"iopub.status.busy":"2023-11-17T06:30:46.797584Z","iopub.execute_input":"2023-11-17T06:30:46.797928Z","iopub.status.idle":"2023-11-17T06:30:53.345117Z","shell.execute_reply.started":"2023-11-17T06:30:46.797900Z","shell.execute_reply":"2023-11-17T06:30:53.343591Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub_0_568 = pd.read_csv('/kaggle/input/op-scp-submissions-2/submission_0_568.csv')\nsub_0_568 = pd.concat([id_map, sub_0_568], axis=1).drop(columns='id')\nsub_0_568","metadata":{"execution":{"iopub.status.busy":"2023-11-17T06:30:53.346804Z","iopub.execute_input":"2023-11-17T06:30:53.347212Z","iopub.status.idle":"2023-11-17T06:30:59.894842Z","shell.execute_reply.started":"2023-11-17T06:30:53.347179Z","shell.execute_reply":"2023-11-17T06:30:59.893932Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub_0_569 = pd.read_csv('/kaggle/input/op-scp-submissions-2/submission_0_569.csv')\nsub_0_569 = pd.concat([id_map, sub_0_569], axis=1).drop(columns='id')\nsub_0_569","metadata":{"execution":{"iopub.status.busy":"2023-11-17T06:30:59.896557Z","iopub.execute_input":"2023-11-17T06:30:59.897261Z","iopub.status.idle":"2023-11-17T06:31:06.555823Z","shell.execute_reply.started":"2023-11-17T06:30:59.897222Z","shell.execute_reply":"2023-11-17T06:31:06.554651Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"de_train = pd.concat([de_train, sub_0_567, sub_0_568, sub_0_569], ignore_index=True)\nde_train","metadata":{"execution":{"iopub.status.busy":"2023-11-17T06:31:06.557611Z","iopub.execute_input":"2023-11-17T06:31:06.558151Z","iopub.status.idle":"2023-11-17T06:31:06.800917Z","shell.execute_reply.started":"2023-11-17T06:31:06.558105Z","shell.execute_reply":"2023-11-17T06:31:06.799449Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"best_smooth_cell_type = {0: 0.0,\n                         1: 1.0,\n                         2: 1.0, \n                         3: 1000000000000000.0,\n                         4: 10.0, \n                         5: 1000.0, \n                         6: 1000000000000000.0, \n                         7: 100.0, \n                         8: 1000000000000000.0, \n                         9: 100.0, \n                         10: 10.0, \n                         11: 100.0, \n                         12: 0.0, \n                         13: 1000.0, \n                         14: 10000000000000.0, \n                         15: 100.0, \n                         16: 100.0, \n                         17: 10.0, \n                         18: 1.0, \n                         19: 10000000000000.0, \n                         20: 100.0, \n                         21: 10.0, \n                         22: 0.0, \n                         23: 1.0, \n                         24: 0.0}","metadata":{"execution":{"iopub.status.busy":"2023-11-17T06:31:06.803150Z","iopub.execute_input":"2023-11-17T06:31:06.804042Z","iopub.status.idle":"2023-11-17T06:31:06.813037Z","shell.execute_reply.started":"2023-11-17T06:31:06.803994Z","shell.execute_reply":"2023-11-17T06:31:06.812186Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"best_smooth_sm = {0: 1000000000000000.0, \n                  1: 1000000000000000.0,\n                  2: 1000000000000000.0, \n                  3: 1000000000000000.0,\n                  4: 10.0, \n                  5: 1000000000000000.0, \n                  6: 10000000000000.0,\n                  7: 1000000000000000.0,\n                  8: 1000000000000000.0, \n                  9: 100.0,\n                  10: 100.0, \n                  11: 100.0, \n                  12: 100.0, \n                  13: 100.0,\n                  14: 1000000000000000.0, \n                  15: 1000.0, \n                  16: 1000000000000000.0,\n                  17: 100.0, \n                  18: 100.0, \n                  19: 10000000000000.0, \n                  20: 1000000000000000.0,\n                  21: 10000000000000.0,\n                  22: 1000000000000000.0,\n                  23: 100.0, \n                  24: 1000000000000000.0}","metadata":{"execution":{"iopub.status.busy":"2023-11-17T06:31:06.816682Z","iopub.execute_input":"2023-11-17T06:31:06.817074Z","iopub.status.idle":"2023-11-17T06:31:06.827671Z","shell.execute_reply.started":"2023-11-17T06:31:06.817029Z","shell.execute_reply":"2023-11-17T06:31:06.826341Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"best_alpha = {0: 1000000.0, \n              1: 100000.0,\n              2: 100000.0, \n              3: 1000000.0, \n              4: 100000.0, \n              5: 1000000.0, \n              6: 1000000.0,\n              7: 1000000.0, \n              8: 100000.0, \n              9: 100000.0, \n              10: 10000.0, \n              11: 10000.0, \n              12: 100000.0, \n              13: 10000.0, \n              14: 100000.0, \n              15: 100000.0,\n              16: 100000.0,\n              17: 10000.0, \n              18: 10000.0, \n              19: 10000.0,\n              20: 10000.0,\n              21: 10000.0, \n              22: 10000.0, \n              23: 1000.0,\n              24: 10000.0}","metadata":{"execution":{"iopub.status.busy":"2023-11-17T06:31:06.829292Z","iopub.execute_input":"2023-11-17T06:31:06.829954Z","iopub.status.idle":"2023-11-17T06:31:06.843250Z","shell.execute_reply.started":"2023-11-17T06:31:06.829915Z","shell.execute_reply":"2023-11-17T06:31:06.842264Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Y_submit = np.zeros((len(id_map), len(de_train.columns[5:])))\n\nprint(Y_submit.shape)\nY_submit","metadata":{"execution":{"iopub.status.busy":"2023-11-17T06:31:06.844762Z","iopub.execute_input":"2023-11-17T06:31:06.845299Z","iopub.status.idle":"2023-11-17T06:31:06.869438Z","shell.execute_reply.started":"2023-11-17T06:31:06.845266Z","shell.execute_reply":"2023-11-17T06:31:06.867901Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.decomposition import TruncatedSVD\nimport category_encoders as ce\nfrom sklearn.linear_model import Ridge\nfrom sklearn.metrics import r2_score\n\nN_GENES = 25\nmrrmse_scores = []\n\nX_de_train = de_train[['cell_type','sm_name']]\nX_id_map = id_map[['cell_type', 'sm_name']]\n\ntsvd = TruncatedSVD(n_components=N_GENES, n_iter=7, random_state=42)\n\nY = de_train.iloc[:, 5:].values\nY_tsvd = tsvd.fit_transform(Y)\n\n\nY_pred_tsvd = np.zeros(Y_tsvd.shape)\nY_id_map_tsvd = np.zeros((len(id_map), Y_tsvd.shape[1]))\n\nfor gene in range(Y_tsvd.shape[1]):\n\n    cell_type_target_encoder = ce.TargetEncoder(smoothing=best_smooth_cell_type[gene])\n    sm_target_encoder = ce.TargetEncoder(smoothing=best_smooth_sm[gene])\n    model = Ridge(alpha = best_alpha[gene])\n\n    Y_gene = Y_tsvd[:,gene]\n    X_gene_train = pd.concat([cell_type_target_encoder.fit_transform(X_de_train[['cell_type']], Y_gene),\n                              sm_target_encoder.fit_transform(X_de_train[['sm_name']], Y_gene)], axis = 1)\n\n    model.fit(X_gene_train, Y_gene)\n\n    X_gene_valid = pd.concat([cell_type_target_encoder.transform(X_de_train[['cell_type']]),\n                              sm_target_encoder.transform(X_de_train[['sm_name']])], axis = 1)\n    \n    Y_pred = model.predict(X_gene_valid)\n    Y_pred_tsvd[:, gene] = Y_pred\n\n    X_submit_target_encoder = pd.concat( [cell_type_target_encoder.transform(X_id_map[['cell_type']]),\n                              sm_target_encoder.transform(X_id_map[['sm_name']])], axis = 1)\n    \n    Y_pred = model.predict(X_submit_target_encoder)\n    Y_id_map_tsvd[:, gene] = Y_pred\n\nY_pred_inverse_tsvd = tsvd.inverse_transform(Y_pred_tsvd)\nY_submit = tsvd.inverse_transform(Y_id_map_tsvd)\n\n\nmrrmse = np.sqrt(np.square(Y - Y_pred_inverse_tsvd).mean(axis=1)).mean()\nr2 = r2_score( Y, Y_pred_inverse_tsvd)\nmrrmse_scores.append(mrrmse)   \n\nmrrmse = np.array(mrrmse_scores).mean()\n\nprint(f'R2: {r2}')\nprint(30 * '-')\nprint(f'MRRMSE_SCORES:\\n{mrrmse_scores}')\nprint(30 * '-')\nprint(f'MRRMSE: {mrrmse}')","metadata":{"execution":{"iopub.status.busy":"2023-11-17T06:31:06.871697Z","iopub.execute_input":"2023-11-17T06:31:06.872277Z","iopub.status.idle":"2023-11-17T06:31:14.977040Z","shell.execute_reply.started":"2023-11-17T06:31:06.872235Z","shell.execute_reply":"2023-11-17T06:31:14.975747Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(Y_submit.shape)\nY_submit","metadata":{"execution":{"iopub.status.busy":"2023-11-17T06:31:14.978731Z","iopub.execute_input":"2023-11-17T06:31:14.980129Z","iopub.status.idle":"2023-11-17T06:31:14.990954Z","shell.execute_reply.started":"2023-11-17T06:31:14.980072Z","shell.execute_reply":"2023-11-17T06:31:14.989427Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submit = pd.DataFrame(Y_submit, columns=de_train.columns[5:])\nsubmit.index.name = 'id'\nsubmit","metadata":{"execution":{"iopub.status.busy":"2023-11-17T06:31:14.992376Z","iopub.execute_input":"2023-11-17T06:31:14.992818Z","iopub.status.idle":"2023-11-17T06:31:15.055703Z","shell.execute_reply.started":"2023-11-17T06:31:14.992784Z","shell.execute_reply":"2023-11-17T06:31:15.053280Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submit.to_csv('submission.csv')","metadata":{"execution":{"iopub.status.busy":"2023-11-17T06:31:15.057592Z","iopub.execute_input":"2023-11-17T06:31:15.058855Z","iopub.status.idle":"2023-11-17T06:31:28.783349Z","shell.execute_reply.started":"2023-11-17T06:31:15.058806Z","shell.execute_reply":"2023-11-17T06:31:28.781922Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pd.read_csv('/kaggle/working/submission.csv')","metadata":{"execution":{"iopub.status.busy":"2023-11-17T06:31:28.787158Z","iopub.execute_input":"2023-11-17T06:31:28.787814Z","iopub.status.idle":"2023-11-17T06:31:34.353724Z","shell.execute_reply.started":"2023-11-17T06:31:28.787760Z","shell.execute_reply":"2023-11-17T06:31:34.352154Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}