{"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 warnings\nwarnings.simplefilter('ignore')\n\nimport pandas as pd\n\npd.set_option('display.max_columns', 30)","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-11-10T13:51:05.455409Z","iopub.execute_input":"2023-11-10T13:51:05.455803Z","iopub.status.idle":"2023-11-10T13:51:05.888748Z","shell.execute_reply.started":"2023-11-10T13:51:05.455761Z","shell.execute_reply":"2023-11-10T13:51:05.887784Z"},"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-10T13:51:05.892546Z","iopub.execute_input":"2023-11-10T13:51:05.893346Z","iopub.status.idle":"2023-11-10T13:51:05.898449Z","shell.execute_reply.started":"2023-11-10T13:51:05.893310Z","shell.execute_reply":"2023-11-10T13:51:05.897409Z"},"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-10T13:51:05.899477Z","iopub.execute_input":"2023-11-10T13:51:05.899771Z","iopub.status.idle":"2023-11-10T13:51:08.504360Z","shell.execute_reply.started":"2023-11-10T13:51:05.899745Z","shell.execute_reply":"2023-11-10T13:51:08.503558Z"},"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-10T13:51:08.506617Z","iopub.execute_input":"2023-11-10T13:51:08.507278Z","iopub.status.idle":"2023-11-10T13:51:08.545231Z","shell.execute_reply.started":"2023-11-10T13:51:08.507243Z","shell.execute_reply":"2023-11-10T13:51:08.544164Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub_0_605 = pd.read_csv('/kaggle/input/scp-ensembling-submissions-lb-0-605/submission.csv')\nsub_0_605","metadata":{"execution":{"iopub.status.busy":"2023-11-10T13:51:08.546648Z","iopub.execute_input":"2023-11-10T13:51:08.547067Z","iopub.status.idle":"2023-11-10T13:51:15.137957Z","shell.execute_reply.started":"2023-11-10T13:51:08.547027Z","shell.execute_reply":"2023-11-10T13:51:15.136780Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub_0_605 = pd.concat([id_map, sub_0_605], axis=1).drop(columns='id')\nsub_0_605","metadata":{"execution":{"iopub.status.busy":"2023-11-10T13:51:15.139372Z","iopub.execute_input":"2023-11-10T13:51:15.140054Z","iopub.status.idle":"2023-11-10T13:51:15.229107Z","shell.execute_reply.started":"2023-11-10T13:51:15.140017Z","shell.execute_reply":"2023-11-10T13:51:15.227964Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"lgb_params_0_645 = {'num_leaves': 835,\n              'max_depth': 1,\n              'learning_rate': 0.08594161349385152,\n              'n_estimators': 20,\n              'subsample': 0.5,\n              'min_child_samples': 58,\n              'colsample_bytree': 0.4,\n              'reg_alpha': 9.853300762690996,\n              'reg_lambda': 0.3044908287305737}","metadata":{"execution":{"iopub.status.busy":"2023-11-10T13:51:15.230321Z","iopub.execute_input":"2023-11-10T13:51:15.230633Z","iopub.status.idle":"2023-11-10T13:51:15.236496Z","shell.execute_reply.started":"2023-11-10T13:51:15.230605Z","shell.execute_reply":"2023-11-10T13:51:15.235400Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from tqdm import tqdm\nimport lightgbm as lgb\nimport category_encoders as ce\nfrom sklearn.metrics import r2_score\n\nSTART_GENE_ID = 5\nSTART_GENE_ID_TEST = 2\nN_DESCRIBE = 1\n\nY = de_train.iloc[:, START_GENE_ID:].values\nY_test = sub_0_605.iloc[:, START_GENE_ID_TEST:].values\n\nY_submit = id_map.drop(columns=['cell_type', 'sm_name'])\nmetrics = pd.DataFrame(columns=['gene', 'mrrmse', 'r2'])\n\nfor i, gene in (enumerate(tqdm(de_train.columns[START_GENE_ID:]))):\n    \n    model = lgb.LGBMRegressor(**lgb_params_0_645)\n    cell_type_target_encoder = ce.TargetEncoder()\n    sm_name_target_encoder = ce.TargetEncoder()\n    \n    Y_gene = Y[:, i]\n    \n    X_train = pd.concat([cell_type_target_encoder.fit_transform(de_train[['cell_type']], Y_gene),\n                         sm_name_target_encoder.fit_transform(de_train[['sm_name']], Y_gene)], axis=1)\n    \n    model.fit(X_train, Y_gene)\n    \n    X_valid = pd.concat([cell_type_target_encoder.transform(id_map[['cell_type']]),\n                         sm_name_target_encoder.transform(id_map[['sm_name']])], axis=1)\n    \n    Y_pred = model.predict(X_valid)\n    Y_submit[gene] = Y_pred\n    \n    Y_gene_test = Y_test[:, i]\n    \n    X_test = pd.concat([cell_type_target_encoder.fit_transform(sub_0_605[['cell_type']], Y_gene_test),\n                        sm_name_target_encoder.fit_transform(sub_0_605[['sm_name']], Y_gene_test)], axis=1)\n    \n    model.fit(X_test, Y_gene_test)\n    Y_pred_test = model.predict(X_valid)\n    \n    mrrmse = np.sqrt(np.square(Y_gene_test - Y_pred_test).mean()).mean()\n    r2 = r2_score(Y_gene_test, Y_pred_test)\n    \n    metrics.loc[i, 'gene'] = gene\n    metrics.loc[i, 'mrrmse'] = mrrmse\n    metrics.loc[i, 'r2'] = r2\n    \n    if i < N_DESCRIBE:\n        print(f'I: {i}, GENE: {gene}')\n        print(f'Y_GENE.SHAPE:{Y_gene.shape}')\n        print(f'Y_GENE:\\n{Y_gene}')\n        print(30 * '-')\n\n        print(f'X_TRAIN.SHAPE: {X_train.shape}')\n        print(f'X_TRAIN:\\n{X_train}')\n        print(30 * '-')\n\n        print(f'X_VALID.SHAPE: {X_valid.shape}')\n        print(f'X_VALID:\\n{X_valid}')\n        print(30 * '-')\n\n        print(f'Y_PRED.SHAPE: {Y_pred.shape}')\n        print(f'Y_PRED:\\n{Y_pred}')\n        print(30 * '-')\n        \n        print(f'Y_SUBMIT:\\n{Y_submit}')\n        print(30 * '-')\n        \n        print(f'Y_GENE_TEST.SHAPE:{Y_gene_test.shape}')\n        print(f'Y_GENE_TEST:\\n{Y_gene_test}')\n        print(30 * '-')\n\n        print(f'X_TEST.SHAPE: {X_test.shape}')\n        print(f'X_TEST:\\n{X_test}')\n        print(30 * '-')\n\n        print(f'Y_PRED_TEST.SHAPE: {Y_pred_test.shape}')\n        print(f'Y_PRED_TEST:\\n{Y_pred_test}')\n        print(30 * '-')\n        \n        print(f'Y_GENE_TEST.SHAPE:{Y_gene_test.shape}')\n        print(f'Y_GENE_TEST:\\n{Y_gene_test}')\n        print(30 * '-')\n\n        print(f'X_TEST.SHAPE: {X_test.shape}')\n        print(f'X_TEST:\\n{X_test}')\n        print(30 * '-')\n\n        print(f'Y_PRED_TEST.SHAPE: {Y_pred_test.shape}')\n        print(f'Y_PRED_TEST:\\n{Y_pred_test}')\n        print(30 * '-')\n        \n        print(f'Y_GENE_TEST - Y_PRED_TEST:\\n{Y_gene_test - Y_pred_test}')\n        print(30 * '-')\n        \n        print(f'(Y_GENE_TEST - Y_PRED_TEST).SHAPE:\\n{(Y_gene_test - Y_pred_test).shape}')\n        print(30 * '-')\n    \n        print(f'METRICS:\\n{metrics}')\n        print(30 * '=')","metadata":{"execution":{"iopub.status.busy":"2023-11-10T13:51:15.238045Z","iopub.execute_input":"2023-11-10T13:51:15.238554Z","iopub.status.idle":"2023-11-10T14:18:50.714808Z","shell.execute_reply.started":"2023-11-10T13:51:15.238523Z","shell.execute_reply":"2023-11-10T14:18:50.713658Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"metrics","metadata":{"execution":{"iopub.status.busy":"2023-11-10T14:18:50.716472Z","iopub.execute_input":"2023-11-10T14:18:50.717055Z","iopub.status.idle":"2023-11-10T14:18:50.732445Z","shell.execute_reply.started":"2023-11-10T14:18:50.717005Z","shell.execute_reply":"2023-11-10T14:18:50.731321Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"metrics.to_csv('metrics_V_1.csv')","metadata":{"execution":{"iopub.status.busy":"2023-11-10T14:18:50.735496Z","iopub.execute_input":"2023-11-10T14:18:50.735837Z","iopub.status.idle":"2023-11-10T14:18:50.875840Z","shell.execute_reply.started":"2023-11-10T14:18:50.735808Z","shell.execute_reply":"2023-11-10T14:18:50.874725Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(Y_submit.shape)\nY_submit","metadata":{"execution":{"iopub.status.busy":"2023-11-10T14:18:50.877088Z","iopub.execute_input":"2023-11-10T14:18:50.877404Z","iopub.status.idle":"2023-11-10T14:18:51.010695Z","shell.execute_reply.started":"2023-11-10T14:18:50.877375Z","shell.execute_reply":"2023-11-10T14:18:51.009658Z"},"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-10T14:18:51.012026Z","iopub.execute_input":"2023-11-10T14:18:51.012360Z","iopub.status.idle":"2023-11-10T14:18:52.217324Z","shell.execute_reply.started":"2023-11-10T14:18:51.012330Z","shell.execute_reply":"2023-11-10T14:18:52.216076Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submit.to_csv('submission.csv')","metadata":{"execution":{"iopub.status.busy":"2023-11-10T14:18:52.219055Z","iopub.execute_input":"2023-11-10T14:18:52.219482Z","iopub.status.idle":"2023-11-10T14:19:41.261822Z","shell.execute_reply.started":"2023-11-10T14:18:52.219440Z","shell.execute_reply":"2023-11-10T14:19:41.260782Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pd.read_csv('/kaggle/working/submission.csv')","metadata":{"execution":{"iopub.status.busy":"2023-11-10T14:19:41.263386Z","iopub.execute_input":"2023-11-10T14:19:41.263730Z","iopub.status.idle":"2023-11-10T14:19:46.708155Z","shell.execute_reply.started":"2023-11-10T14:19:41.263700Z","shell.execute_reply":"2023-11-10T14:19:46.706947Z"},"trusted":true},"execution_count":null,"outputs":[]}]}