{"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 os\nimport json\nimport time\nimport gc\n\nimport h5py\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport matplotlib.pyplot as plt","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-10-20T00:11:40.739725Z","iopub.execute_input":"2022-10-20T00:11:40.740563Z","iopub.status.idle":"2022-10-20T00:11:40.786077Z","shell.execute_reply.started":"2022-10-20T00:11:40.740495Z","shell.execute_reply":"2022-10-20T00:11:40.784890Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"DATA_DIR = \"/kaggle/input/open-problems-multimodal/\"\nDATASET_DIR = \"/kaggle/input/cd-pathways-and-families/\"\nGENES_INFO = \"/kaggle/input/genes-information/\"\nMETA_DATASET = \"/kaggle/input/feature-shop-for-multimodal-singlecell-competition/\"\n\nFP_CELL_METADATA = os.path.join(DATA_DIR,\"metadata.csv\")\nFEATURE_SHOP_META = os.path.join(META_DATASET,\"_citeseq_meta_all_text_also.csv\")\n\nFP_CITE_TRAIN_INPUTS = os.path.join(DATA_DIR,\"train_cite_inputs.h5\")\nFP_CITE_TRAIN_TARGETS = os.path.join(DATA_DIR,\"train_cite_targets.h5\")\nFP_CITE_TEST_INPUTS = os.path.join(DATA_DIR,\"test_cite_inputs.h5\")\n\n# FP_MULTIOME_TRAIN_INPUTS = os.path.join(DATA_DIR,\"train_multi_inputs.h5\")\n# FP_MULTIOME_TRAIN_TARGETS = os.path.join(DATA_DIR,\"train_multi_targets.h5\")\n# FP_MULTIOME_TEST_INPUTS = os.path.join(DATA_DIR,\"test_multi_inputs.h5\")\n\nFP_SUBMISSION = os.path.join(DATA_DIR,\"sample_submission.csv\")\nFP_EVALUATION_IDS = os.path.join(DATA_DIR,\"evaluation_ids.csv\")\n\nREACTOME = os.path.join(DATASET_DIR,\"gene_pathways.json\")\nGENE_GROUPS = os.path.join(DATASET_DIR,\"groups_data.json\")\nHGNC_DATA = os.path.join(GENES_INFO,\"hgnc_complete_set.txt\")","metadata":{"execution":{"iopub.status.busy":"2022-10-20T00:11:40.793051Z","iopub.execute_input":"2022-10-20T00:11:40.793376Z","iopub.status.idle":"2022-10-20T00:11:40.802129Z","shell.execute_reply.started":"2022-10-20T00:11:40.793345Z","shell.execute_reply":"2022-10-20T00:11:40.800905Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Data preparation","metadata":{}},{"cell_type":"code","source":"df_cite_train = pd.read_hdf(FP_CITE_TRAIN_INPUTS)","metadata":{"execution":{"iopub.status.busy":"2022-10-20T00:11:40.803801Z","iopub.execute_input":"2022-10-20T00:11:40.804261Z","iopub.status.idle":"2022-10-20T00:12:37.845221Z","shell.execute_reply.started":"2022-10-20T00:11:40.804217Z","shell.execute_reply":"2022-10-20T00:12:37.844170Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Open Dataset with features\nwith open(REACTOME, 'r') as f:\n    gene_groups_dataset = json.load(f)","metadata":{"execution":{"iopub.status.busy":"2022-10-20T00:12:37.848169Z","iopub.execute_input":"2022-10-20T00:12:37.848521Z","iopub.status.idle":"2022-10-20T00:12:37.870988Z","shell.execute_reply.started":"2022-10-20T00:12:37.848491Z","shell.execute_reply":"2022-10-20T00:12:37.869790Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Create map: gene name to ensembl id.\nhgnc_data = pd.read_table(HGNC_DATA)\nhgnc_data = hgnc_data[[\"ensembl_gene_id\", \"symbol\"]]\nhgnc_data_dict = dict(zip(hgnc_data[\"symbol\"], hgnc_data[\"ensembl_gene_id\"]))","metadata":{"execution":{"iopub.status.busy":"2022-10-20T00:12:37.872761Z","iopub.execute_input":"2022-10-20T00:12:37.873543Z","iopub.status.idle":"2022-10-20T00:12:38.495819Z","shell.execute_reply.started":"2022-10-20T00:12:37.873492Z","shell.execute_reply":"2022-10-20T00:12:38.494547Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Extract genes associated with CD's groups (families)\ngene_set = set()\nfor cd_m in gene_groups_dataset.values():\n    for genes in cd_m.values():\n        gene_set.update(genes)\n\nprint(f\"We have {len(gene_set)} genes that are assotiated with CD molecules\")\n\n# Get ENSG list of selected genes\ngene_set_for_filtering_mapped = set([*map(hgnc_data_dict.get, gene_set)])","metadata":{"execution":{"iopub.status.busy":"2022-10-20T00:12:38.497337Z","iopub.execute_input":"2022-10-20T00:12:38.497742Z","iopub.status.idle":"2022-10-20T00:12:38.516593Z","shell.execute_reply.started":"2022-10-20T00:12:38.497703Z","shell.execute_reply":"2022-10-20T00:12:38.515419Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Train dataset filtration using ENSG list of selected genes\ncol_names = [col.split(\"_\")[0] for col in list(df_cite_train.columns)]\ndf_cite_train = df_cite_train.set_axis(col_names, axis=1)\n\ndf_cite_train_filtered = df_cite_train[\n    df_cite_train.columns[\n        df_cite_train.columns.isin(gene_set_for_filtering_mapped)\n    ]\n]\n\n# Fewer genes because of noncoding genes in the train dataset.\ndf_cite_train_filtered.to_csv(\n    \"cite_train_filtered_dataset_by_reactome.tsv\", \n    sep=\"\\t\"\n)\ndf_cite_train_filtered.shape","metadata":{"execution":{"iopub.status.busy":"2022-10-20T00:12:38.518583Z","iopub.execute_input":"2022-10-20T00:12:38.519048Z","iopub.status.idle":"2022-10-20T00:15:29.948554Z","shell.execute_reply.started":"2022-10-20T00:12:38.518991Z","shell.execute_reply":"2022-10-20T00:15:29.947305Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_cite_train_filtered.head(2)","metadata":{"execution":{"iopub.status.busy":"2022-10-20T00:15:29.949915Z","iopub.execute_input":"2022-10-20T00:15:29.950390Z","iopub.status.idle":"2022-10-20T00:15:29.983627Z","shell.execute_reply.started":"2022-10-20T00:15:29.950343Z","shell.execute_reply":"2022-10-20T00:15:29.982446Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"del df_cite_train","metadata":{"execution":{"iopub.status.busy":"2022-10-20T00:15:29.984885Z","iopub.execute_input":"2022-10-20T00:15:29.985210Z","iopub.status.idle":"2022-10-20T00:15:30.010580Z","shell.execute_reply.started":"2022-10-20T00:15:29.985174Z","shell.execute_reply":"2022-10-20T00:15:30.009332Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Open file with CD information\ndf_cite_train_y = pd.read_hdf(FP_CITE_TRAIN_TARGETS)\n\n# Open file with cell data\nmetadata_df = pd.read_csv(FP_CELL_METADATA)\n# metadata_df = metadata_df[metadata_df.technology==\"citeseq\"]\n\n# Read file with metadata\ndf_meta = pd.read_csv(FEATURE_SHOP_META, sep=\",\", index_col=0)\ndf_meta = pd.DataFrame(index = df_cite_train_y.index)\ndf_meta = df_meta.join(metadata_df.set_index('cell_id'))\n","metadata":{"execution":{"iopub.status.busy":"2022-10-20T00:15:30.012151Z","iopub.execute_input":"2022-10-20T00:15:30.012527Z","iopub.status.idle":"2022-10-20T00:15:31.311946Z","shell.execute_reply.started":"2022-10-20T00:15:30.012492Z","shell.execute_reply":"2022-10-20T00:15:31.310666Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_meta.head(2)","metadata":{"execution":{"iopub.status.busy":"2022-10-20T00:15:31.313536Z","iopub.execute_input":"2022-10-20T00:15:31.313977Z","iopub.status.idle":"2022-10-20T00:15:31.326351Z","shell.execute_reply.started":"2022-10-20T00:15:31.313941Z","shell.execute_reply":"2022-10-20T00:15:31.325199Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_meta[\"donor\"].unique()","metadata":{"execution":{"iopub.status.busy":"2022-10-20T00:15:31.328134Z","iopub.execute_input":"2022-10-20T00:15:31.328878Z","iopub.status.idle":"2022-10-20T00:15:31.340019Z","shell.execute_reply.started":"2022-10-20T00:15:31.328798Z","shell.execute_reply":"2022-10-20T00:15:31.338775Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Create Folds for Cross Validation","metadata":{}},{"cell_type":"markdown","source":"## 6-fold scheme","metadata":{}},{"cell_type":"code","source":"list_folds_indices_by_days_and_donors = []\nc = 0\nfor day2exclude in [2,3,4]:\n    for donor2exclude in [32606,  31800]: # We will need to predict always MALE (not female) - like on LB. (# donor 13176 - female)\n        train_index = np.where((df_meta[\"day\"] != day2exclude) & (df_meta[\"donor\"] != donor2exclude))[0]\n        test_index1_like_private_lb = np.where(df_meta[\"day\"]  == day2exclude)[0]\n        test_index2_like_public_lb = np.where((df_meta[\"day\"] != day2exclude) &  (df_meta[\"donor\"]  == donor2exclude))[0]\n        fold = (train_index, test_index1_like_private_lb, test_index2_like_public_lb)\n        fold = list(map(np.random.permutation, fold))\n        list_folds_indices_by_days_and_donors.append(fold)\n    \n        print(\n            f\"|Fold {c}: \"\n            f\"excludes Day {day2exclude} and Donor {donor2exclude}| \"\n            f\"Sizes: Train {len(train_index)} \"\n            f\"Test Like Priv {len(test_index1_like_private_lb)}, \"\n            f\"Test Like Publ {len(test_index2_like_public_lb)}|\"\n        )\n        c+=1","metadata":{"execution":{"iopub.status.busy":"2022-10-20T00:15:31.345893Z","iopub.execute_input":"2022-10-20T00:15:31.346280Z","iopub.status.idle":"2022-10-20T00:15:31.379589Z","shell.execute_reply.started":"2022-10-20T00:15:31.346244Z","shell.execute_reply":"2022-10-20T00:15:31.378348Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def fold_exchanger(all_folds: list) -> list:\n    BIAS_SLIECE_SIZE = 0.2\n    changed = []\n    biases = []\n    for fold in all_folds:\n        arrays = []\n        cur_fold_biases = []\n        for arr in fold:\n            slice_index = int(len(arr)*BIAS_SLIECE_SIZE)\n            bias = arr[:slice_index]\n            cur_fold_biases.append(bias)\n            arrays.append(arr[slice_index:])\n        changed.append(tuple(arrays))\n        biases.append(cur_fold_biases)\n\n    updated = []\n    for i, fold in enumerate(changed):\n        arrays = []\n        cur_biases = []\n        for k, b in enumerate(biases):\n            if k != i:\n                cur_biases.append(b)\n        for j, arr in enumerate(fold):\n            for b in cur_biases:\n                b_part = len(b[j]) // (len(changed) - 1)\n                arr = np.append(arr, b[j][b_part*i:b_part*(i+1)])\n            arrays.append(arr)\n        arrays = list(map(np.random.permutation, arrays))\n        updated.append(tuple(arrays))\n    return updated","metadata":{"execution":{"iopub.status.busy":"2022-10-20T00:15:31.381586Z","iopub.execute_input":"2022-10-20T00:15:31.381975Z","iopub.status.idle":"2022-10-20T00:15:31.394074Z","shell.execute_reply.started":"2022-10-20T00:15:31.381943Z","shell.execute_reply":"2022-10-20T00:15:31.392359Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Additional bias for anti-overfitting.\nprint(\"\\nAdditional bias for anti-overfitting\")\n\nlist_folds_indices_by_days_and_donors = fold_exchanger(list_folds_indices_by_days_and_donors)\nfor fold in list_folds_indices_by_days_and_donors:\n    print(\n        f\"Sizes: Train {len(fold[0])}\"\n        f\"Test Like Priv {len(fold[1])},\"\n        f\"Test Like Publ {len(fold[2])}\"\n    )","metadata":{"execution":{"iopub.status.busy":"2022-10-20T00:15:31.395826Z","iopub.execute_input":"2022-10-20T00:15:31.396254Z","iopub.status.idle":"2022-10-20T00:15:31.423529Z","shell.execute_reply.started":"2022-10-20T00:15:31.396218Z","shell.execute_reply":"2022-10-20T00:15:31.422203Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Advanced CV - 6-folds like above with some additional hold-out","metadata":{}},{"cell_type":"code","source":"df_meta.columns","metadata":{"execution":{"iopub.status.busy":"2022-10-20T00:15:31.425130Z","iopub.execute_input":"2022-10-20T00:15:31.425510Z","iopub.status.idle":"2022-10-20T00:15:31.433177Z","shell.execute_reply.started":"2022-10-20T00:15:31.425477Z","shell.execute_reply":"2022-10-20T00:15:31.431755Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Preparations for folds creation**","metadata":{}},{"cell_type":"code","source":"# Prepare for creation of additional holdout folds with 10% of samples \n# We will use stratified Kfold to achieve that days and donors are equally distributed \nimport numpy as np\nfrom sklearn.model_selection import StratifiedKFold\nscol = \"donor&day&CT\"\ndf_meta[scol] =df_meta[\"donor\"].apply(lambda x:str(x)+\"_\") + df_meta['day'].apply(lambda x:str(x)+\"_\") + df_meta[\"cell_type\"]\ndf_meta\n\ny = df_meta[scol] \nskf = StratifiedKFold(n_splits=10,  shuffle=True, random_state=40)\nskf.get_n_splits(df_meta, df_meta[scol] )\nfor train_index, test_index in skf.split(df_meta, df_meta[scol]):\n    print(\"TRAIN:\", len(train_index), \"TEST:\", len(test_index) ); break\n\ndf_meta[\"HoldOut\"] = 0 \ndf_meta.loc[df_meta.index[test_index],\"HoldOut\"]  = 1","metadata":{"execution":{"iopub.status.busy":"2022-10-20T00:15:31.434740Z","iopub.execute_input":"2022-10-20T00:15:31.435506Z","iopub.status.idle":"2022-10-20T00:15:32.142152Z","shell.execute_reply.started":"2022-10-20T00:15:31.435469Z","shell.execute_reply":"2022-10-20T00:15:32.140881Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"list_folds_indices_by_days_and_donors_with2holdouts = []\nc = 0\nfor day2exclude in [2,3,4]:\n    for donor2exclude in [32606,  31800]: # We will need to predict always MALE (not female) - like on LB. (# donor 13176 - female)\n        train_index = np.where((df_meta[\"day\"] != day2exclude) & (df_meta[\"donor\"] != donor2exclude))[0]\n        mask_holdout = (df_meta[\"HoldOut\"] == 1)\n        test_index1_like_private_lb = np.where((df_meta[\"day\"] == day2exclude) & (~mask_holdout))[0]\n        test_index1_like_private_lb_holdout = np.where((df_meta[\"day\"] == day2exclude) & (mask_holdout))[0]\n        test_index2_like_public_lb = np.where((df_meta[\"day\"] != day2exclude) & (df_meta[\"donor\"] == donor2exclude ) & (~mask_holdout))[0]\n        test_index2_like_public_lb_holdout = np.where( (df_meta[\"day\"] != day2exclude) & (df_meta[\"donor\"] == donor2exclude) & mask_holdout)[0]\n        \n        list_folds_indices_by_days_and_donors_with2holdouts.append((\n            train_index,\n            test_index1_like_private_lb,\n            test_index2_like_public_lb,\n            test_index1_like_private_lb_holdout,\n            test_index2_like_public_lb_holdout\n        ))\n    \n        str_fold_inf = \"Fold \" + str(c) + \": Train: excludes Day \" +str(day2exclude) + \" and Donor \" + str( donor2exclude )\n        print(\n            str_fold_inf, \"Sizes: train:\",len(train_index), \"Test Like Priv\"  ,len(test_index1_like_private_lb), \n            \"Test Like Publ\",   len(test_index2_like_public_lb),  \n            \"Test Like Priv HoldOut\",   len(test_index1_like_private_lb_holdout),  \n            \"Test Like Publ HoldOut\",   len(test_index2_like_public_lb_holdout),\n        ); c+=1\n    \nprint(len(list_folds_indices_by_days_and_donors_with2holdouts))","metadata":{"execution":{"iopub.status.busy":"2022-10-20T00:15:32.143687Z","iopub.execute_input":"2022-10-20T00:15:32.144043Z","iopub.status.idle":"2022-10-20T00:15:32.181714Z","shell.execute_reply.started":"2022-10-20T00:15:32.144012Z","shell.execute_reply":"2022-10-20T00:15:32.180488Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Additional bias for anti-overfitting.\nprint(\"\\nAdditional bias for anti-overfitting\")\n\nlist_folds_indices_by_days_and_donors_with2holdouts = fold_exchanger(list_folds_indices_by_days_and_donors_with2holdouts)\nfor fold in list_folds_indices_by_days_and_donors_with2holdouts:\n    print(\n        f\"Sizes: Train {len(fold[0])} \"\n        f\"Test Like Priv {len(fold[1])}, \"\n        f\"Test Like Publ {len(fold[2])}, \"\n        f\"Test Like Priv HoldOut {len(fold[3])}, \"\n        f\"Test Like Publ HoldOut {len(fold[4])}, \"\n    )","metadata":{"execution":{"iopub.status.busy":"2022-10-20T00:15:32.183428Z","iopub.execute_input":"2022-10-20T00:15:32.183815Z","iopub.status.idle":"2022-10-20T00:15:32.206414Z","shell.execute_reply.started":"2022-10-20T00:15:32.183779Z","shell.execute_reply":"2022-10-20T00:15:32.205321Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Since metric is - correlation coefficient - any rescaling aY+b will not be change it , so one can do like that:\n# it is not clear is it optimal or not (see https://www.kaggle.com/competitions/open-problems-multimodal/discussion/360253 )\n\nY = df_cite_train_y.values\n\nif 1:\n    # Y -= Y.mean(axis=1).reshape(-1, 1)\n    Y -= np.median(Y, axis=1).reshape(-1, 1)\n    Y /= Y.std(axis=1).reshape(-1, 1)\n    print(\"Rescaling to mean 0 and std 1 has been done.\")","metadata":{"execution":{"iopub.status.busy":"2022-10-20T00:15:32.207850Z","iopub.execute_input":"2022-10-20T00:15:32.208279Z","iopub.status.idle":"2022-10-20T00:15:32.486033Z","shell.execute_reply.started":"2022-10-20T00:15:32.208170Z","shell.execute_reply":"2022-10-20T00:15:32.484813Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Modeling","metadata":{}},{"cell_type":"markdown","source":"## Simple modeling example","metadata":{}},{"cell_type":"code","source":"def correlation_score(y_true, y_pred):\n    \"\"\"\n    Scores the predictions according to the competition rules. \n    \n    It is assumed that the predictions are not constant.\n    \n    Returns the average of each sample's Pearson correlation coefficient.\n    \"\"\"\n    \n    if type(y_true) == pd.DataFrame: y_true = y_true.values\n    if type(y_pred) == pd.DataFrame: y_pred = y_pred.values\n    corrsum = 0\n    for i in range(len(y_true)):\n        corrsum += np.corrcoef(y_true[i], y_pred[i])[1, 0]\n    return corrsum / len(y_true)","metadata":{"execution":{"iopub.status.busy":"2022-10-20T00:15:32.490052Z","iopub.execute_input":"2022-10-20T00:15:32.490481Z","iopub.status.idle":"2022-10-20T00:15:32.558393Z","shell.execute_reply.started":"2022-10-20T00:15:32.490442Z","shell.execute_reply":"2022-10-20T00:15:32.557031Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%time\nfrom sklearn import svm\nfrom sklearn.linear_model import Ridge\n\nfrom sklearn.metrics import r2_score\n\nN_features = int(len(df_cite_train_filtered.columns)) # For the fast test - just take some small number of features \n# When number of features is very low like 1 - the results are more or less the same as just MEAN over the targets - kind of baseline solution (no modeling in fact)\n\ncc = 0\nfor list_folds_indices in [list_folds_indices_by_days_and_donors, list_folds_indices_by_days_and_donors_with2holdouts]:\n    if cc == 0: print(\"CV withOUT holdout\\n\"); \n    else: print(\"\\n\\nCV with holdout\\n\")\n    cc += 1\n\n    # Get filtered.\n#     X = df_cite_train_filtered.iloc[:, :N_features].values\n    slice_df = df_cite_train_filtered.sample(N_features, axis='columns', replace='True')\n    features = list(slice_df.columns)\n    X = slice_df.values\n    print(\"X.shape:\", X.shape, \"Y.shape:\", Y.shape)\n\n    model = Ridge(alpha=10000)\n\n    df_fold_score_stat = pd.DataFrame()\n    df_fold_score_stat.index.name = \"Fold\"\n    t0 = time.time()\n    for fold, indices_tuple  in enumerate( list_folds_indices ):\n        train_index = indices_tuple[0]\n        main_test_index = indices_tuple[1]\n        print(\"Fold:\", fold, \"Shapes of train:\", train_index.shape, \"Tests: \",[t.shape for t in indices_tuple[1:]])\n        t1 = time.time()\n\n        # Train model: \n        model.fit(X[train_index], Y[train_index])\n\n        # Calculate metrics on test and train folds \n        list_scores = []; list_scores_r2 = []\n        for i_loc in range(0, len(indices_tuple)):\n            indices_loc = indices_tuple[i_loc]\n            y_pred = model.predict( X[indices_loc ])\n            #s = model.score( X[indices_loc ], Y[indices_loc]  ) \n            s = correlation_score( y_pred , Y[indices_loc]  )\n            list_scores.append(s)\n            s = r2_score( Y[indices_loc] , y_pred  )\n            list_scores_r2.append(s)\n\n        # Just save statistic for output\n        for i_loc in range(1, len(list_scores  )):\n             df_fold_score_stat.loc[fold, \"Score Test\" + str(i_loc)] = list_scores[i_loc]\n        df_fold_score_stat.loc[fold, \"Score Train\"] = list_scores[0]\n        df_fold_score_stat.loc[fold, \"Time\"] = np.round((time.time()-t1), 2) \n        for i_loc in range(1, len(list_scores)):\n             df_fold_score_stat.loc[fold, \"R2 Score Test\" + str(i_loc)] = list_scores_r2[i_loc]\n        df_fold_score_stat.loc[fold, \"R2 Score Train\"] = list_scores_r2[0]\n\n        print(\"Correlation scores:\", np.round(list_scores,4),  \"time:\", \"%.2f\"%(time.time()-t1))\n        \n    display(df_fold_score_stat)\n    display(df_fold_score_stat.describe(percentiles=[]).iloc[1:,:])\n    #display(df_fold_score_stat.mean())\n    break\n","metadata":{"execution":{"iopub.status.busy":"2022-10-20T00:15:32.560459Z","iopub.execute_input":"2022-10-20T00:15:32.560880Z","iopub.status.idle":"2022-10-20T00:17:29.774050Z","shell.execute_reply.started":"2022-10-20T00:15:32.560841Z","shell.execute_reply":"2022-10-20T00:17:29.772665Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Preparation for Submission","metadata":{}},{"cell_type":"code","source":"del df_cite_train_filtered","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model","metadata":{"execution":{"iopub.status.busy":"2022-10-20T00:19:45.216995Z","iopub.execute_input":"2022-10-20T00:19:45.217495Z","iopub.status.idle":"2022-10-20T00:19:45.226682Z","shell.execute_reply.started":"2022-10-20T00:19:45.217458Z","shell.execute_reply":"2022-10-20T00:19:45.225843Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model.fit(X, Y)","metadata":{"execution":{"iopub.status.busy":"2022-10-20T00:19:47.010564Z","iopub.execute_input":"2022-10-20T00:19:47.011752Z","iopub.status.idle":"2022-10-20T00:19:55.950282Z","shell.execute_reply.started":"2022-10-20T00:19:47.011684Z","shell.execute_reply":"2022-10-20T00:19:55.948449Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"len(X)","metadata":{"execution":{"iopub.status.busy":"2022-10-20T00:19:55.954316Z","iopub.execute_input":"2022-10-20T00:19:55.956401Z","iopub.status.idle":"2022-10-20T00:19:55.969405Z","shell.execute_reply.started":"2022-10-20T00:19:55.956333Z","shell.execute_reply":"2022-10-20T00:19:55.967914Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Xt = pd.read_hdf(FP_CITE_TEST_INPUTS)\ncol_names = [col.split(\"_\")[0] for col in list(Xt.columns)]\nXt_modified = Xt.set_axis(col_names, axis=1)\nXt_sliced = Xt_modified[features]","metadata":{"execution":{"iopub.status.busy":"2022-10-20T00:20:01.422765Z","iopub.execute_input":"2022-10-20T00:20:01.423302Z","iopub.status.idle":"2022-10-20T00:20:44.077845Z","shell.execute_reply.started":"2022-10-20T00:20:01.423261Z","shell.execute_reply":"2022-10-20T00:20:44.076618Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"del Xt","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_pred = model.predict(Xt_sliced).ravel()","metadata":{"execution":{"iopub.status.busy":"2022-10-20T00:20:44.080053Z","iopub.execute_input":"2022-10-20T00:20:44.080441Z","iopub.status.idle":"2022-10-20T00:20:44.773566Z","shell.execute_reply.started":"2022-10-20T00:20:44.080405Z","shell.execute_reply":"2022-10-20T00:20:44.771839Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Preparation of the submission file","metadata":{"execution":{"iopub.status.busy":"2022-10-18T14:51:00.883455Z","iopub.status.idle":"2022-10-18T14:51:00.884083Z","shell.execute_reply.started":"2022-10-18T14:51:00.883777Z","shell.execute_reply":"2022-10-18T14:51:00.883806Z"}}},{"cell_type":"code","source":"# submission = pd.read_csv(FP_SUBMISSION, index_col='row_id', squeeze=True)\nsubmission = pd.read_csv(\n    \"/kaggle/input/msci-citeseq-keras-quickstart-dropout/submission.csv\",\n    index_col=\"row_id\",\n    squeeze=True\n)\nsubmission = submission.to_frame()","metadata":{"execution":{"iopub.status.busy":"2022-10-20T00:23:22.567861Z","iopub.execute_input":"2022-10-20T00:23:22.568606Z","iopub.status.idle":"2022-10-20T00:24:42.530344Z","shell.execute_reply.started":"2022-10-20T00:23:22.568557Z","shell.execute_reply":"2022-10-20T00:24:42.529335Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# submission.iloc[:len(test_pred)] = test_pred\n# assert not submission.isna().any()\n\nsubmission[\"target\"].iloc[:len(test_pred)] = test_pred\nsubmission.to_csv(\"submission.csv\")","metadata":{"execution":{"iopub.status.busy":"2022-10-20T00:24:42.532510Z","iopub.execute_input":"2022-10-20T00:24:42.533031Z","iopub.status.idle":"2022-10-20T00:27:02.385219Z","shell.execute_reply.started":"2022-10-20T00:24:42.532984Z","shell.execute_reply":"2022-10-20T00:27:02.383952Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}