{"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":"nvidiaTeslaT4","dataSources":[{"sourceId":59093,"databundleVersionId":7469972,"sourceType":"competition"},{"sourceId":7392733,"sourceType":"datasetVersion","datasetId":4297749},{"sourceId":7392775,"sourceType":"datasetVersion","datasetId":4297782},{"sourceId":7447509,"sourceType":"datasetVersion","datasetId":4334995}],"dockerImageVersionId":30636,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# <ins>CatBoost Starter for Brain Comp</ins>\n\nForked from Chris Deotte's notebook: [`CatBoost Starter - [LB 0.60]`](https://www.kaggle.com/code/cdeotte/catboost-starter-lb-0-60)\n\nThis notebook compares five covariance (CV) scores:\n\n| <ins>*Prediction scheme*</ins>                                                                                                       | <ins>*CV*</ins>   | <ins>*LB*</ins>   |\n|-------------------------------------------------------------------------------------------------------------------------|------|------|\n| Predict each category as probabilit = 1/6                                                                               | 1.46 | 1.09 |\n| Train means from Seshurajup's [`EDA train.csv` notebook](https://www.kaggle.com/code/seshurajup/eda-train-csv/notebook) | 1.26 | 0.97 |\n| Chris Deotte's CatBoost version 1                                                                                       | 1.01 | 0.81 |\n| Chris Deotte's CatBoost version 2                                                                                       | 0.82 | 0.67 |\n| Chris Deotte's CatBoost version 3 (this notebook)                                                                       | 0.74 | <ins>**0.60**</ins>  |\n\nThis version uses both Kaggle spectrograms and spectrograms generated from EEG data (generated in notebook [How To Make Spectrogram from EEG](https://www.kaggle.com/code/cdeotte/how-to-make-spectrogram-from-eeg), and available as a dataset `eeg_specs.npy` (`/kaggle/input/brain-eeg-spectrograms/eeg_specs.npy`))\n\n---\n\n### <ins>Notebook Contents</ins>\n1. Pre-process training data\n    - Load libraries\n    - Load training meta-data\n    - Create Non-Overlapping `eeg_id` training meta-data\n2. Feature Engineering\n    - Load Kaggle spectrograms (either from Kaggle data path, file by file (`.parquet`), or from Chris Deotte's combined single `.npy` file)\n    - Load EEG generated spectrograms (either from Chris Deotte's individual `.npy` files, or from the single combined `.npy` file)\n    - Create features to train:\n        - mean_10min (from Kaggle spectrograms)\n        - min_10min (from Kaggle spectrograms)\n        - mean_20s (from Kaggle spectrograms)\n        - min_20s (from Kaggle spectrograms)\n        - mean_f_10s (from EEG data)\n        - min_f_10s (from EEG data)\n        - max_f_10s (from EEG data)\n        - std_f_10s (from EEG data)\n    - Delete raw spectrogram, eeg and temporary data (useful features now stored in `train[FEATURES]`\n3. Train CatBoost model\n    - 5 GroupKFold splits\n4. Investigate feature importance\n    - Most important features:\n        - eeg_mean_f402_10s\n        - LP_1.56_mean_20s\n        - RL_2.34_min_10s\n        - RL_1.56_min_10s\n        - LP_1.95_min_10m\n5. Calculate CoVariance (CV) score\n    - CV for CatBoost\n    - CV for 1/6 predictions\n    - CV for EEG_Id means\n6. Inference and submission\n    - Load the `test.csv` meta-data\n    - Define functions for generating spectrograms from test eeg `.parquet` files\n        - maddest\n        - denoise\n        - spectrogram_from_eeg\n    - Create eeg spectrograms\n    - Do feature engineering on test set\n    - Do CatBoost inference on test set (generate predictions)\n    - Create `sub.csv` from predictions","metadata":{}},{"cell_type":"markdown","source":"### Model development progress\n- Chris Deotte's \"version 3\"\n    - public score = 0.6;\n    - runtime = 666.5s (GPU T4 x2)\n    - CV KL-Div score = 0.74\n    - features = (spec)mean_10m, min_10m, mean_20s, min_20s, and (eeg-spec) mean_10s, min_10s, max_10s, std_10s; all chains\n    - GroupKFold splits = 5\n    - feature importance plot:\n    <img src=\"attachment:36c320d9-5574-4fee-b078-f053ce8f35fe.png\" alt=\"image1\" width=\"600\" height=\"400\">\n    - notes: almost all the most important features are mean and min, in that order, and most of them are 10s or 20s\n    \n- Predict all targets with a probability of 1/6:\n    - public score = 1.09\n    - runtime = 19.0s (no accelerator)\n    - CV KL-Div score = 1.46\n    - features = none\n    - notes: I submitted a flat prediction distribution, with each category being probability 1/6\n    \n- Predict all targets with the average for that target:\n    - public score = 0.97\n    - runtime = 19.0s (no accelerator)\n    - CV KL-Div score = 1.26\n    - features = none\n    - notes: Each submission is just the average of that category in the pruned training set (removing the overlapping entries)\n    \n- CatBoost with features 10s and 20s mean and min, all chains\n    - public score = \n    - runtime = 279.3s (GPT T4 x 2)\n    - CV KL-Div score = 0.96\n    - features = (spec)mean_20s, min_20s, and (eeg-spec) mean_10s, min_10s; all chains\n    - notes: thought I could get near the best CV (0.74) using only the most important features, but I seem to be wrong, or maybe I made a mistake with how everything was set up. I need to build this notebook back into the \"original\" Chris Deotte's version 3 notebook but with my function modifications and see if I can get back to the same public score of 0.6. Then when I know it works I can make this code more user friendly and modular so I can perform more experiments quickly, to try to beat the max CV KL-Div score, then I can submit better models. I also think I may have made a mistake, the CV score was higher than that for the average category predictions, but the public score was the same. I also noticed when editing the notebook afterwards that I may have made a mistake with which chains were used for the trainingand which were used for the testing. This would give you a higher CV score but low test-time score.","metadata":{},"attachments":{"36c320d9-5574-4fee-b078-f053ce8f35fe.png":{"image/png":"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CIiACIiACIiACHhNQCrZa4QaQAREQAREQAREQAREwO8ISCX73UeqDYmACIiACIiACIiACHhNQCrZa4QaQAREQAREQAREQAREwO8ISCX73UeqDYmACIiACIiACIiACHhNQCrZa4QaQAREQAREQAREQAREwO8ISCX73UeqDYmACIiACIiACIiACHhNQCrZa4QaQAREQAREQAREQAREwO8ISCX73UeqDYmACIiACIiACIiACHhNQCrZa4QaQAREQAREQAREQAREwO8ISCX73UeqDYmACIiACIiACIiACHhNQCrZa4QaQAREQAREQAREQAREwO8ISCX73UeqDYmACIiACIiACIiACHhNQCrZa4QaQAREQAREQAREQAREwO8ISCX73UeqDYmACIiACIiACIiACHhNQCrZa4QaQAREQAREQAREQAREwO8ISCX73UeqDYmACIiACIiACIiACHhNQCrZa4QaQAREQAREQAREQAREwO8IRPW7HWlDgRPI1W9N5BixA29TrQiIgAiIgAiIgAi8IAJnh1Z/QTMHM61yycEAUrMIiIAIiIAIiIAIiMArSEAq+RX80LVlERABERABERABERCBYAhIJQcDSM0iIAIiIAIiIAIiIAKvIAGpZOcPferUqQEBAZEjRx47dqxzm95FQAREQAREQAREQAReDQJSyf/nc/73v//dsWPHHj16XLhwoXXr1rZt27ZtUaNGzZcvn62hMGHChHTp0sWMGbNo0aK7du0yTX/99deHH36YNWvWWLFivf766x999NHt27cde7mWiSlYsGCMGDGcxify4MGDb7zxBlMg3IcPH+7aVzUiIAIiIAIiIAIiIAK+ICCV/H+onjt37smTJ9WrV0+VKlXs2P+5EeLWrVtNmzatUKGCY+iCBQu6dOnSr1+/ffv25c2bt0qVKlevXiXg4j/PyJEjDx8+PHPmzNWrV7ds2dKxY6Dl999/v379+k5NSPbKlSunTZt27969I0aM6N+/P3lupxi9ioAIiIAIiIAIiIAI+IKARyr52bNnQ4YMSZ8+PflRFOGiRYvMUhCC1apVixs3booUKZo0aXL9+nVTf+fOncaNG8eJEwetOWbMmLJly3bq1MnN6snI/utf/0KJMhSicPny5deuXatVqxavefLk2bNnj+37888/k1tlGeRWScHeu3fPNM2ePbtQoULx4sVLmTJl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7KstOPp3baWvC/ykM3dHOM2CsZijh06VYfXKJc3mJJ/jgPi2ORToWOOLcoj+44IvFqAxRUAEREAEREAERCAiEAiRKAo/lRwR0LyaawjRP4hXE5F2LQIiIAIiIAIi8CoQCJEo8pXj4lUArT2KgAiIgAiIgAiIgAj4KwGpZH/9ZLUvERABERABERABERCB0BOQSg49O/UUAREQAREQAREQARHwVwI+uQnOX2G91PvK1W+N7kt+qT9BLV4EROAVIRCed8e+Iki1TREIHQHlkkPHTb1EQAREQAREQAREQAT8mYBUsj9/utqbCIiACIiACIiACIhA6AhIJYeOm3qJgAiIgAiIgAiIgAj4MwGpZH/+dLU3ERABERABERABERCB0BEIA5XcvHnz2rVrO02fLl26SP88ceLEKVCgwHfffecU4Ph65MiROnXqmC5jx451bHIsnz171oxp//7yyy824NatWx06dEiVKlWMGDGyZMmyatUq2xSRC5s2bapVqxbLBlS+fPmcfiUbbtmyZYsZM2bu3Llflh1FZNpamwiIgAiIgAiIgAh4SCAMVHJQMw0cOPDSpUv79+8vXLhw/fr1t2/fHlTk/fv3M2TIMHTo0JQpUwYVY+vXr1/PsOYpWLCgqX/8+HGlSpWQ0YsWLTp+/Pi0adPSpElju0TkAljy5MmzePHigwcPtmjRomnTpitXrjQLpqlhw4YtW7aEId9DeA4fPhyR96K1iYAIiIAIiIAIiIDfEPChSo4XLx6ql7TuhAkTYsWKtWLFiqCoIaNHjBjRoEED0sBBxdj6JEmSMKx5okWLZuqnT5/+119/LVu2rGTJkuSky5QpkzdvXtvFtVC2bNkPP/ywU6dOiRIlSpEiBar63r17iFTWnClTph9//NF2QZhWq1Ytbty4hDVp0uT69eumafXq1aVKlUqYMCHrqVGjxunTp029SXgvWbKkXLlysWPHZhk7duywo7kWevfuPWjQoBIlSmTMmPHjjz+uWrUqfU3YuHHjeO3WrVv27NmJISU/fvx40zRx4sTMmTOTY2ZV7777ruuwqhEBERABERABERABEfCGgA9Vsl1W1KhRkbOke22NN4W33norefLkKNTly5fbcSgXL14cxwWqMVeuXIMHD3769KltDbQwa9aspEmT7tq1C7ncrl27unXrIlX37dtXuXJl1DDpbXrh4ihfvnz+/Pn37NmDLL5y5Uq9evXMaKjqLl26UL9hw4bIkSO//fbbz549sxN9+umnXbt2PXDgAF8SyAf//ffftsl94fbt24kTJzYxyOuKFSva+CpVqhjBzaQfffQRqXqy5qyqdOnSNsYWHj16xC+V28fWqyACIiACIiACIiACIuAJAZ//qgjieNSoUYg/5KYnC3ITQ0KXocgWo0qxKOBAIHmMaKbLmTNnNm7c2LhxY8y7p06dat++/ZMnT/r16+dmNLK8ffr0IaBXr16YPVDMrVq14rVv376TJk3C/1CsWDFyt0hkNLcZh4x1QEDAiRMn0L4Yqe3g1CdLluzo0aMIdFOJRK5evTrlAQMG5MyZkyVhL7bxQRUWLly4e/fuKVOmmIDLly8j+m0wZWp4PXfuHCZmEthkvtOmTcsKbYwtDBkyhKntqwoiIAIiIAIiIAIiIAIhIuDDXHKPHj3QtbgOhg0bhgw1qjFEi3MKRsiSvi1atCgODQZ877338GmYGPK4JJinTp2KUxkPNKncyZMnO3V3esUNbGqiRImCa4LjcebVCNOrV6/y+uuvv/7000/swjxG6RpzxcmTJ0kSY6eOHz8+Hg+CEa9mBP7awTmWx6sZzbYGWmAiLB94P1DVgQbYShzYiGOmJufNaT+T9ratpoD055uJec6fP+/UqlcREAEREAEREAEREAH3BHyYS8ZQy/UX6Et0J7dSuF9HKFqRy+vWrTMdEaOYOtC75hUjL2lX0tjRo0cPamTraSaA5dlXs1Rjn7h7927NmjVR+Y6DGOFLPVIVUZs6dWqCySI7WkoCHc1xEKfy5s2bGXDMmDGc3rNNeK/xeNhXytTwSgoZZwiXY6xdu5bMd//+/clA45C2kRRweHti8nbsorIIiIAIiIAIiIAIiIAl4MNcMqlfTsIh7HwhkdkArl8jWCljw8DVYJ3BmCJociOR7f7dFzgwxy11pIrZiH1wO9y4cQNPMIaNChUqoMhv3rzpfhz3rehdEu1o8datWztG4rTG9Gxr+EpAjXnF6o1lefjw4ThDOC+I28SGqSACIiACIiACIiACIuA9gbDJJfNf9tGsdjUYGGzZkwJZWEy9RFK4cOECQ5GBRpVSgzN46dKlRixy3g7ha2y4XASBG/irr74y43P8jkjuiOAoHl4InMScb/NkavcxHAckW4yzonv37hyqQ4jPnz+fSbkZgz1i8ECLY7To2bOn+3HctGK0wGHMyjE6G9sxezQH+Kjksg6s2Gho5uXQHjMyFFfF4cPm0B7LwIfNd4OsWbO6mUJNIiACIiACIiACIiACISUQNiqZbKjjGTKu+A3ROi5evGi7j/znQR0yJoNw85q9ZI1XLkT7448/yKRiEV6wYIG9BI1DdWvWrOncuTOGYG5KRl/iig7RGgINxk2xbds2huLiC26NwGLB1WycHSQ7jmxFiGO0QKF+8cUXXC0X6AjBViL9MRZz2I7HBNu9c+fG3LlzyVhzWxz3vnFU0ZwOxFzBlwSMFg8fPqR+3rx5wVqZg12GAkRABERABERABERABBwJRHr+/Lnju8r+R4D74BIkSBDQaWHkGLH9b3fakQiIgAj4GYGzQ//niiQ9IiACviBgRBEmCG5fCHZ8H/qSg51bASIgAiIgAiIgAiIgAiIQMQmEq0r+z4Vq//f/bN261UdocAz/36n+8+Z4ZZuPpnYd1vyAn9N67E3MrvGqEQEREAEREAEREAEReIEEwtVxwek3161iI+b3q13rva/hF++4/8F1HO6swNnsWu/TGk4lPnjwwGkKTumZg3pO9WH7GqL/uBC2U2s0ERABERABERABEYg4BEIkisJVLJprK8KNFFI4nGd0szW+DLhpVZMIiIAIiIAIiIAIiECEIhCujosItXMtRgREQAREQAREQAREQASCIiCVHBQZ1YuACIiACIiACIiACLy6BMLVcfHqYo4AO8/Vb41ugosAn4OWIAIi8AoR0J1ur9CHra36IwHlkv3xU9WeREAEREAEREAEREAEvCMglewdP/UWAREQAREQAREQARHwRwJSyf74qWpPIiACIiACIiACIiAC3hGQSg4xv02bNkWKFOnWrVsh7qkOIiACIiACIiACIiACLwkBn6jk5s2boyN5okWLlj59+u7duz98+NAAoXLZsmWewEGM1qpVK1WqVHHixMmXL9+cOXMC7XXjxo2qVaumTp06RowYAQEBHTt25L5op8ht27ZxdzKDONWH7rVEiRKXLl1KkCBBKLofOXKkTp06/KwJHMaOHes0woQJE2iKGTNm0aJFd+3a5dSqVxEQAREQAREQAREQgXAj4BOVzOpRrkjJM2fOjBkzZsqUKf369QvplrZv354nT57FixcfPHiwRYsWTZs2XblypesgkSNHRkwvX778xIkTM2fO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mSVLlhgxYvArd59//rltisiFs2fPtmzZEnSxYsXKmDFjv379Hj9+bBd88ODBN954I2bMmAEBAcOHD7f1KoiACIiACIiACIiACPiUQBjccVG1atUZM2Y8efJk7969zZo1Q78OGzYsRIt++vQpGvGjjz5avHhxsB0HDhzYqlUrExYvXjwb//HHH69duxahjNr+65/HNkXkwrFjx549ezZlypRMmTIdPnyYrd27d49dsGZ+HqZy5coVK1acPHnyoUOH3n///YQJE7Zu3Toib0drEwEREAEREAEREAH/IOBtLhkK5G5TpkxJspM0MJJu3bp1IUUTJ06cSZMmIRAZJ9i+KGPCzENHE//bb78xwvfff//WW2+Rly1YsGClSpXcDNW/f/98+fJNnz799ddfjxs3bvv27VHqJGsZNnny5I556Fu3bn3wwQfJkiWLHz9++fLlf/31VzPs6dOna9WqlSJFCroXLlx4/fr1djoS3oMHD0bUslTGnzp1qm1yLZjvGKjhDBkysPiuXbsuWbLEhM2ZM4e8MovMmTNngwYN+BYxevRo07Rp06YiRYqwfXRzyZIl//jjD9eRVSMCIiACIiACIiACIhBqAmGgku3cpEK3b98ePXp0W+OLAi6LJEmS5M+ff8SIEX///beZYsWKFajMlStXIpERqehassnuZ0fm/vjjj6tXr543b97XX39dvXr1P//8c/PmzSTC+/Tps3PnTtO9bt26V69eJZJMeYECBSpUqGBGvnv37ptvvrlhw4b9+/ejdGvWrHnu3Dk746hRowoVKkQT+rtdu3bHjx+3Te4Lt2/fTpw4sYnZsWNH6dKlLc8qVaowzs2bN9k1X0jKlCmDH4MYssvk752GffToEalo+zi16lUEREAEREAEREAERMA9gTBwXKBNyaci3VBmkSNHHj9+vPspvWkln4pURUcix3v16nXp0iWTXj1z5gz51O++++6bb74hK9y5c+d3331348aNbubC50CalnRvjhw5ypUrhwBdtWoV68+aNStC+aeffipatOjPP/+8a9cuVDL5cobCCIHTetGiRQjTvP88ZvxBgwYtXbp0+fLlHTt2NDUIaPQx5R49eowZM4bRGNY0ufl76tSpL7/80tgtCLt8+TKi38aTtzaVOLAR0zVq1MDHTE327NltjC0MGTJkwIAB9lUFERABERABERABERCBEBEIA5WMxMTtgJsWOcjxuzp16oRoBSEK7tKli4nPkycPSdY2bdogB5GwSF40OhKZ03sEkBvGdIHwdaNNSTlbWzMCNEqUKEhkMzivKGPK+CvIGZO6NvX8ffDgAUloCtRj2/jhhx9Q6nxDoN4xl8zyTBeyvLg4zGh2kEALFy5cICdN6tq6rgMNo5IvCRx2JLWMqwSLS7169VKlSuUUzFcIy4qMMn4YpwC9ioAIiIAIiIAIiIAIuCEQBioZdywnz5iD1CwJVhQqlza4mTKsmsj1Ik+5IwIpjExEoBuJzPgmvYpsdaOSuZTDrgQt6/SK7KYVKczImIBtJAWswPzFQIwDm7wve+foIalrx7spAh3NcRCn8sWLF/myUaJECUcTM/L6ypUrNtKUqaSG45Kk1bGLLFiwAH8IKylWrJiNpMA3Bx7HGpVFQAREQAREQAREQAQ8JxCWvmRysb1790a0kVj1fAWhjjxw4AAzctiOETjBhmI2WV5eT5w4wd+0adOGenDTEXcHtgf0N1LYPkmTJqV127ZtJHTffvttrtRAuSLWQz0XWeSyZcuS/Eb72nw2oxUvXnzLli1cHmJGRgoj+hMlSmRecWaTMMZ5kitXrrlz54Z6dnUUAREQAREQAREQARFwJRCWKpnRMQxgXZgwYYKZ6ffff0fL2gdXhusKTM3Ro0cJ42AcjlsTb+qxBWfLlg0dySsn1caOHYsLAhcy9z9gPn7vvfeMasR4gKLlWgkOzHHMDicGbgSbWg5q0mDrGRapylE57phDByNJP/300z179tAxc+bMXEbBUllPo0aNTO452AFdA4xE5ioM0tLXrl1DlPOYMIbFVUJi/siRI+SMx40bZ0wUUEUfQwMrNgs7efJkoNZk17lUIwIiIAIiIAIiIAIi4CGBMHBcOM5E2pUTbFypxsUO1FtrrInZunVrqVKlHONtmeNu9jozsqTUc0aNv/fv38debPKpWAjmz5+PGxgLMsfaUMl2fFKwXHPx4YcfcikEDpBq1apxy4QdPNQFnBgc6UMZt2jRAglLzpjxzSk6Tg0iyvFIkFrmiB7e39DNQoaYQ3s8r732mh3B7D1BggSI4A4dOpBmZpa+ffuay5Jjx47NLcuzZs26ceMGhhAC+FZg+6ogAiIgAiIgAiIgAiLgPYFIRpB5P5BGiLAEUPAI7oBOCyPHiB1hF6mFiYAIhJrA2aHVQ91XHUVABETglSJgRBHOBX4HI9iNh7HjItj5FCACIiACIiACIiACIiACEZ9AuKpkjBDcrOz08DN1vsPEr9Y5TccrnmbfzRjUyGzTdSUACSpe9SIgAiIgAiIgAiIgAi+QQLg6Ljip5nr9Bbf/8vgIAV5ne0eEnQJjsb0p2Vb6usDBRB6nWbhCLk2aNE6VYf4aov+4EOaza0AREAEREAEREAERiCAEQiSKwvj0nnsE4aAInRbg/WVwTgOG+tWnXwZCvSp1FAEREAEREAEREAERCJRAuDouAl2BKkVABERABERABERABEQgohGQSo5on4jWIwIiIAIiIAIiIAIi8OIJSCW/+M9AKxABERABERABERABEYhoBMLVlxzRNv9KrSdXvzW6L/mV+sS1WT8joEuR/ewD1XZEQAQiPgHlkiP+Z6QVioAIiIAIiIAIiIAIhDcBqeTwJq75REAEREAEREAEREAEIj4BqeQQf0abNm2KFCnSrVu3QtxTHURABERABERABERABF4SAr5Syc2bN69du7YThHTp0qEveeLEiVOgQIHvvvvOKcDx9ciRI3Xq1DFdxo4d69jkVF64cGG+fPlix47N7cgjRoywrUbOmhnN38uXL9vWUBdKlChx6dKlBAkShGIE95uaMGEC+40ZM2bRokV37doVivHVRQREQAREQAREQAREIEwI+EolB7W4gQMHIjH3799fuHDh+vXrb9++PajI+/fvZ8iQYejQoSlTpgwqhvoff/yxcePGbdu2PXz48MSJE8eMGTN+/HjH+OPHjzOjeZInT+7YFLpy9OjRWRKyOxTd3WxqwYIFXbp06dev3759+/LmzVulSpWrV6+GYgp1EQEREAEREAEREAER8J5AeKtkfhoaiZklSxbypvw+84oVK4LaAzKaxHCDBg1ixIgRVAz1s2fPJmmNSkZSV69evVevXsOGDXv+/LntgjJmRvNEjuxuv2XLlv3www87deqUKFEifsV62rRp9+7da9GiBWvOlCkTctyM6ei4mDlzZsKECdesWZM9e/a4ceNWrVoVOW6ndi242dTo0aNbtWrFdDly5Jg8eTKp8enTp5sRUORTpkypUaMGlUy0Y8eOU6dOsVpS8iS2T58+7TqRakRABERABERABERABLwh4E41ejNusH2jRo0aLVq0x48fBxvpPuDRo0dYFGwMyvvPP//8448/bA1mjFSpUlWqVGnbtm22MqjCrFmzkiZNitsBudyuXbu6desiQ0nuVq5cuUmTJmSCXTtSOXLkSMT6li1bzp0717VrV9eYYGvgsHfv3ooVK5pI1Dxl1LDtOGjQoKZNmx44cCBbtmyNGjVq06YN3wf27NnD94GOHTvaMBVEQAREQAREQAREQATChMCLUcmIwiFDhty+fbt8+fJebgNnwpIlSzZs2PDs2bMTJ06MGjWKAU1CF3FMUnbxP09AQADJV/Su++mwOvTp0ydz5sxoUMQ3ipn8Lq99+/a9cePGwYMHXbs/efKEWQoVKoTTGsHKSlxjgq25fv3606dPSWDbSMqOLmpyzPXq1SMH36NHj7Nnz2IyYePklT/++GNy27aXLfDl4d8Oj61XQQREQAREQAREQAREwBMC4f2rIog8ZOjDhw/xJ+A5xiPhySrdxKBisRzgRkCtxo8fH9XYv39/46zI+s9j+hpnAq5lkr5uRsuTJ49pjRIlSpIkSXLnzm1ejX4N1CiMCyJjxowmDF0eaIybGT1ssgszK3FcGDDRw+zdcSi+hAwYMMCxRmUREAEREAEREAEREAHPCYR3Lrlbt27YBjBF3Lx5E8Xs+UKDisSzixH57t27uCxIvhYpUoRIPMqu8TRh53Wtd6zBBGJfGdm+mrN6pKttqy3YGGoIc7RE25hgCySt0eVXrlyxkZTxUttXO4tZidOr68LIhZOqN8/58+ftOCqIgAiIgAiIgAiIgAh4QiC8VTJykJNw6D+j9jxZoicxSMw0adJw+8S8efOKFy+eLFky116oc3K9rvURoYaVFyxY0Lo1UL2U2Uio18aRR7LL9gn1OOooAiIgAiIgAiIgAq8mAR86LkhkIkwtVgwMtuxJAe/y0aNHiaRw4cIFhsKkgcKmhrveli5dajQljt5FixbhOcZ4MGPGDO5g3rx5sxmfW5bTp0+fM2dOmr766quNGzeuXbvWk6l9F+NmU1wD16xZM/zN5LxZublew3cr0cgiIAIiIAIiIAIiIAJuCPhQJXOqLH/+/Hbuli1b2rInhYsXL9ruXCLBU6ZMGXNSDWXseP0ZF1NwswRWB5KvBBjTBVMgST/55BMUNtZhfL3r168vV66cJ1P7LsbNprg9+tq1axwTxDfCvRyrV692PMznuyVpZBEQAREQAREQAREQAVcCofTRug6kmghLgLN9/FJgQKeFkWPEjrCL1MJEQATcEzg71Nuzzu7HV6sIiIAIvAoEjCjC74ArNdj9hrcvOdgFKUAEREAEREAEREAEREAEXjiBF6+ScRu7Plu3bvURGn74w3U6aqgPwxkDncJ3mwrDlWsoERABERABERABERABCPjQl+whX8cTfrYLF1bYctgWUqdOHeiM1IfhRIFO4btNheHKNZQIiIAIiIAIiIAIiAAE5Ev2/38GIbLg+D8O7VAEREAEREAEROBVJRAiUfTiHRev6sekfYuACIiACIiACIiACERcAlLJEfez0cpEQAREQAREQAREQAReFAGp5BdFXvOKgAiIgAiIgAiIgAhEXAIv/vRexGXjXyvL1W+N7kv2r49Uu4koBHSTcUT5JLQOERABEQhTAsolhylODSYCIiACIiACIiACIuAXBKSS/eJj1CZEQAREQAREQAREQATClIBUcpji1GAiIAIiIAIiIAIiIAJ+QUAq2S8+Rm1CBERABERABERABEQgTAl4pJKbN28e6Z8nWrRo6dOn7969+8OHD80yqF62bJknS6IL4+TOnTtq1Ki1a9cOtMu2bdtozZcvX6CtmzZtqlWrVqpUqeLEiUPMnDlzHMNu3brVoUMHWmPEiJElS5ZVq1Y5tkbYsvtNfffdd9myZYsZMybcXpYdRVjUWpgIiIAIiIAIiIAIeE7AI5XMcFWrVr106dKZM2fGjBkzZcqUfv36eT6HiXz69GmsWLE++uijihUrBtoXmdu0adMKFSoE2krl9u3b8+TJs3jx4oMHD7Zo0YLglStXmuDHjx9XqlTp7NmzixYtOn78+LRp016Wn4N2symaGjZs2LJly/379/O9gufw4cNBwVG9CIiACIiACIiACIhAGBLwVCWToE2ZMmVAQABaDZm7bt26kC6CBPCkSZNatWrFOIH2bdu2baNGjYoXLx5oK5W9e/ceNGhQiRIlMmbM+PHHHyPclyxZYoKnT5/+119/kdUuWbJkunTpypQpkzdv3qDGob5s2bIffvhhp06dEiVKlCJFClT1vXv3UN7x4sXLlCnTjz/+aPsiTKtVqxY3blzCmjRpcv36ddO0evXqUqVKJUyYMEmSJDVq1Dh9+rSpR6mTX2dh5cqVix07NsvYsWOHHc214GZT48aNY4/dunXLnj07Gy9QoMD48ePNCBMnTsycOTM5Zlb17rvvug6rGhEQAREQAREQAREQAW8IeKqS7RyoRnKc0aNHtzVhUpgxYwaJ6hClqG/fvp04cWIz+/Lly5HXOC5Qjbly5Ro8eDCpa/cLmzVrVtKkSXft2oVcbteuXd26ddHf+/btq1y5Mmr4/v37dCe9Xb58+fz58+/ZswdZfOXKlXr16plhUdVdunShfsOGDZEjR3777befPXtmZ/z000+7du164MABvB/kg//++2/b5L7guCnktWPevUqVKkZwMykp+YEDB5I1Z1WlS5d2HfPRo0f8Url9XANUIwIiIAIiIAIiIAIi4IaAp78qgreBfCpqD/mFKLRJTTdDe9508uTJnj17bt26FVOyh70WLly4e/duvB8mHoW9cePGxo0bY949depU+/btnzx54l5zk+Xt06cP3Xv16jV06FAUM3luXvv27UvOG1NHsWLF2CYSGc1tZiFjTTb9xIkTaN86deqYSv5SnyxZsqNHjyLQTSUSuXr16pQHDBiQM2dOloS92MYHVXDa1OXLlxH9NpgyNbyeO3eOxDwJbDLfadOmZYU2xhaGDBnC1PZVBREQAREQAREQAREQgRAR8DSXjH+AzOjOnTubNWuGM8FRI4ZoPtdgkr4YLZB0SE/X1kBrfvrpJ9aATQIBagLI4yZPnnzq1KkFCxasX78+qdzJkycH2tdWYnE25ShRouCa4HiceTXC9OrVq7z++uuvzMXXA/MYpWvMFSh7ksQZMmSIHz8+Hg+CEa9mBP7awTlNyKsZzbYGWnDdVKBhVOLARhwzNTlvjjCatLdTMNKftLR5zp8/79SqVxEQAREQAREQAREQAfcEPM3dkrzEsMtY5E3Jwn799decKnM/tIetd+7cwULAAbWOHTvSBb37/Plzkspr167F7eA6yObNm2vWrMkhQk7v2VbEKPdvoHdNDUZe0q4c6XPjDCHedsdJbF8pU2/sE3fv3mWuYcOG2UgKRvhSj1RFqadOnZpgsshMZ8MCHc22ul5V+Z8AAEAASURBVBYC3RQGbjweNpiysXSTQsYZwuUYICLz3b9/f9LqOKRtJAV85DyONSqLgAiIgAiIgAiIgAh4TsDTXLIdEbsFB87wKjx48MBWelMgF3vo0CES1ebhDF/WrFkpFy1a1HVYpCFOBmRr69atHVs5tIerwUhb6jFFoGXdSGTHvm7KHJg7cuQIqWK+IdiHLww3btzAEwwEbuRAkd+8edPNIME2BbUpnNaYnm13Tkzao418i8CyPHz4cJwhnBfEbWLDVBABERABERABERABEfCeQIhVMlNy0I2s7YQJE8z0v//++38l7v/8X461BbUsnLsEcBkFTgDThUhkN4lY+2Cc4OoGXhGjtOIMtnfD4UlAInNwDb8HqWIehjJzcfyOMhdfoI9/+OEHnMSc5AtqGZ7XMwjD4qwgWYvRYs2aNTg9sIhwMwYmDQweSHMUKsf4PB/TKdLNptgOh/NGjRp17NgxEsZk3E26HY/4F198AcA//vjjm2++4bsB3yuchtWrCIiACIiACIiACIiANwRCo5JJZCLXSGQaQYxG5ACZffBOBLWgN998k7AVK1aQPTXxQUXaem5es5escSsFHlzOpZEnNs8777xjIjlUh4RFy2IIRkajLzkOaAcJdQE3BT90gizm4guMy9wch7EBWc8zf/78vXv3ouY7d+48YsSIUE/hZlPcuTF37ly0OBYX7oHmnjumYyLWwE1z2FFIY2O/njdvnvVnh3oZ6igCIiACIiACIiACIuBIIBImYMd3lf2PAPfBJUiQIKDTwsgxYvvf7rQjEXjhBM4Orf7C16AFiIAIiIAIeELAiCJMDTh+g40PTS452EEVIAIiIAIiIAIiIAIiIAIvNYGwV8nml+r+e3naf/6vvXI4PGFxNZvTMsyr45Vt4baeiIMl3LasiURABERABERABETg5SUQ9o6LCxcuuF5/wY/k2d/JCzdY/AYK9z+4TsedFZ7/fIlr99DVvEAsIfqPC6HbnXqJgAiIgAiIgAiIQMQnECJR5Ol9yZ5vO02aNJ4H+zQSKcz1bT6dwvPBIw4Wz9esSBEQAREQAREQARF4ZQmEvePilUWpjYuACIiACIiACIiACPgNAalkv/kotREREAEREAEREAEREIEwIyCVHGYoNZAIiIAIiIAIiIAIiIDfEAh7X7LfoPGzjeTqt0b3JfvZZ6rteENAlxx7Q099RUAEROBVIKBc8qvwKWuPIiACIiACIiACIiACISMglRwyXooWAREQAREQAREQARF4FQhIJYfBp8ytzJEiRTpw4EAYjKUhREAEREAEREAEREAEIgCBcFXJzZs3r127ttOu+Y2PsWPHOlUG+vrrr782bNgwICAgVqxY2bNnHzduXKBhVL711luvv/56zJgxU6VK1aRJk4sXLzpFnjp1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Xy9G44uACIiACIiACIjAiyIQIlHk/GsUvls0Ujic5SmXP4TzjG7o6RoKN3DUJAIiIAIiIAIiIAIRjUD4OS4i2s61HhEQAREQAREQAREQAREIioBUclBkVC8CIiACIiACIiACIvDqEpBKfnU/e+1cBERABERABERABEQgKALh50sOagWqDx8Cufqt0X3J4YNas7xYArov+cXy1+wiIAIi4DcElEv2m49SGxEBERABERABERABEQgzAlLJYYZSA4mACIiACIiACIiACPgNAankMPgouQc6UqRIBw4cCIOxNIQIiIAIiIAIiIAIiEAEIBBOKrl58+boSJ5o0aKlT5++e/fuDx8+NNunctmyZR6iOHjw4BtvvBEzZsyAgIDhw4cH1eufqf73z/z5823khAkTsmfPzlXKWbNm/eabb2y9NwUWc+nSpVy5coVikCVLllSqVClZsmT8nnjx4sXXrFnjOAir5VdX2G/RokV37drl2KSyCIiACIiACIiACIiA7wiEk0pmA1WrVkVKnjlzZsyYMVOmTOnXr19Id8XPpVSuXJmf59i7d++IESP69+8/derUoAaZMWMG05mndu3aJmzSpEm9evWi45EjRwYMGNChQ4cVK1YENYLn9VGiREmZMmXofkFwy5YtqORVq1axqXLlytWsWXP//v1m6gULFnTp0gVQ+/bty5s3b5UqVa5ever5qhQpAiIgAiIgAiIgAiIQagLhp5JjxIiBlCTtimatWLHiunXrQrroOXPmPH78ePr06Tlz5mzQoMFHH300evTooAZJmDAh05mHXKwJmz17dps2berXr58hQwZGaN269bBhw4IagXpS4Kx28ODB/JQ0Aw4cOJDf2e7WrVvixIlfe+01hLjp6+i42LRpE0nsDRs2FCpUKHbs2CVKlDh+/LibKcaOHUtmvXDhwpkzZ2Yi/lrhzu5atWrVokWLHDlyTJ48mdHYO0M9f/4cof/666+DNHXq1HBwM76aREAEREAEREAEREAEQkEg/FSyXdzhw4e3b98ePXp0W+NhYceOHaVLl7Ydya0iQG/evBlod/LESZMmLVKkCMoSWWliHj16ZBUzNfgusDE8efIk0BFM5caNGy9evEjGF81KWrdGjRqJEiXauXNn27ZtEdx//vlnoH0//fTTUaNG7dmzhwTz+++/H2iMa+WzZ8/u3LmDBKeJ7wNkl/k6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V8lv2W8TKo8ToP8hQmWFmlQEREAEREAEREAEQoBAgERR2HJchAAdTSECIiACIiACIiACIiAC/hKQSvYXkQJEQAREQAREQAREQATeOQJSye/cT64HFgEREAEREAEREAER8JdAGDoJzt+1KiAoBLL126TzkoMCUH3DMgEdlhyWfx2tTQREQATeUALKJb+hP5yWLQIiIAIiIAIiIAIi4EMCUsk+hKuhRUAEREAEREAEREAE3lACUslv6A+nZYuACIiACIiACIiACPiQQFBVcrNmzcL9c0WKFClNmjTdu3d/+vSpWS/Vq1at8mbtdGGc7NmzR4wYsVq1an512b59u5nL8e/BgwdN/OvXr/l0X4YMGaJEiZIsWbIhQ4b4NU6Yqr948WLLli1B995776VLl65fv37Pnz+3K/z555+LFi0aNWrUFClSjBw50tarIAIiIAIiIAIiIAIi4FMCwbB7r3z58rNnz+Z7dYcPH27atCkSdsSIEQFa9MuXL9GIHTp0+Pbbbz10LFSo0LVr12zAl19+uWXLlnz58pmajh07/vDDDwhl1PZf/1w2MiwXzpw58+rVq6lTp/I1wZMnT7Zu3Zqvc/MUrJmDr8uWLcv3uqdMmXLixIkWLVrEiROnTZs2YflxtDYREAEREAEREAEReDsIBDWXDAVyt0mSJCHZSRoYSbd58+aAookePfrkyZMRiIzjoW/kyJEJMFf8+PFXr17dvHlzRDldTp8+zQjU/Otf/yIvmzdv3o8//tjDUP3798+VK9esWbNSpkwZI0aMTz/9FKVOspbBEyVK5JiHvnfvXqtWrRImTBgrVqxSpUodP37cDHvhwoWqVavy5Wq658+f/8cff7TTpU6deujQoYhaPmrN+NOmTbNNrgXzjoEaTps2LYvv2rXrypUrTdjChQvJK7PIrFmz1qtXj7eIsWPHmibS6h9++CHc0M2FCxfmq9quI6tGBERABERABERABEQg0ASCQSXbuUmF7t27Fy1ra3xXWLNmzZ07d1DJZorvv/8elbl27VokMiIVXUs22fPsyNwNGzZs3Lhx8eLFM2fOrFSp0uXLl3fs2EEivE+fPvv37zfda9euffPmTSLJlOfJk6d06dJm5IcPH1asWJFk9tGjR1G6VapUuXTpkp1xzJgxJLlpQn+3a9fu7Nmztslz4f79+/HixTMx+/btK1asmOVZrlw5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u+vQeViEOcGN84PNmcFIWA5Wq1y5MmIaDf3nn38iPQO3dMdeKEgWwCkQ2JHxe/CZD3PuBIlebBiYpJmOeIy8iFe2ALoeTuw4mjdlBiGMk+xsMAldzobjFr8HZ27w8oD2ZTpywK6+YduLArsSEdOmBh8zBRbMyBEiREDQs1SSythIeMEYOHAgrdRz8h3ne/AykCBBgho1amijnqGnvyIgAiIgAiIgAiIQXATCmZPUgmu4AI3DZzgwNI8ZM6Zly5YB6qjgABFg9x557hSdloWP8n/fSQlQdwWLQLATuDi8UrCPqQFFQAREQAREwF8CRhSRSzX5U8/xQc0lex7dtZXNcDgQOOaC9ZnMKH5i1zDViIAIiIAIiIAIiIAIiEAoEggf8nNzLhs+BI4wI5fMUcR4BviLDdf18t3a+Cqe63QLFy703YwcVOc6Y+B29flukRpZBERABERABERABETAEAhNx4X9DdiOxjnH9tYW2MRmy8Fb+OOPPzi52WlMDmBmK55TZXDd4lHmchqN3X6Oh+g5tQbXbYD+cSG4JtU4IiACIiACIiACIhDWCARIFIW048ItLMSi7wSx2xnZUOi23neVHOvB5bvxNbIIiIAIiIAIiIAIiEAwEggFx0Uwrl5DiYAIiIAIiIAIiIAIiIAvCEgl+4KqxhQBERABERABERABEXizCUglv9m/n1YvAiIgAiIgAiIgAiLgCwJhwpfsiwfTmE4EsvXbpPOSnZjoNlgI6PDjYMGoQURABERABMIaAeWSw9ovovWIgAiIgAiIgAiIgAiEPgGp5ND/DbQCERABERABERABERCBsEZAKjms/SJajwiIgAiIgAiIgAiIQOgTkEoOwG8wbdq0FClShA8ffvz48QHoplAREAEREAEREAEREIE3jYBUsre/GB9r+eyzz3r06MFnAtu0abNy5cqPP/44YcKEsWLFKliw4KZNmxwHmjRpUurUqaNGjfrRRx8dOHDAscm1jPguUaIE44QLF+7evXuOAXyur2HDhjTFiROnZcuWDx8+dGxVWQREQAREQAREQAREwEcEpJK9BXvp0iU+al2pUqWkSZNGixZt586dqOT169cfPny4ZMmSVapUOXr0qBlr6dKlXbp06dev35EjR3LmzFmuXLmbN296mObx48fly5fv1auXawwS+dSpU5s3b167di0zos5dY1QjAiIgAiIg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ZlOdU2WAbvk4n+PxcKYvx3rwbe0AjROI4AD940IgxlcXERABERABERABEXgjCARIFIUhx4VbuBwc4TtB7HZGH8lWRHYQdbbb1apSBERABERABERABETAFwTCluPCF0+oMUVABERABERABERABEQgoASkkgNKTPEiIAIiIAIiIAIiIAJvPwGp5Lf/N9YTioAIiIAIiIAIiIAIBJRAWPclB/R5FO8XgWz9Num8ZL/gqN4tAR2E7BaLKkVABERABN4RAsolvyM/tB5TBERABERABERABEQgAASkkgMAS6EiIAIiIAIiIAIiIALvCAGp5AD/0BcvXgwXLtyxY8cC3FMdREAEREAEREAEREAE3hACPlTJzZo1q1atmhOH1KlTjx8/3qnS7e3x48fr16+fIkUKjkzOnDnzhAkT3IZRyZjIVnsNHz7cKfL8+fOcVRwnThyn+sDdsqRr165ly5YtEN3p2KBBgwwZMoQPH75Tp05OIyxfvjxTpkxRo0bNnj37+vXrnVp1KwIiIAIiIAIiIAIiEGIEfKiSg/gMhw8fTpQo0YIFC06dOtW7d++ePXt+/fXXfo05cOBABKi5Pv/8c8cwPqSH2i5atKhjZVDKESJESJIkScSIgdn4+OzZs4QJE/bp04cPcTutYe/evayzZcuWR48e5e2C6+TJk04xuhUBERABERABERABEQgZAmFXJbdo0YL8cfHixdOmTduoUaPmzZuvXLnSLyikilGu5ooePbpjGJKUBG2dOnUcK92WTfJ76NChfI+axDPK+8WLF926dYsXL17y5Mlnz55tejk6LrZv304Oe8uWLfny5YsWLVqhQoXOnj3rdnBTSdqbh2rSpEns2LGdwqgvX74805E4HzRoUJ48eexbAb0GDx5MrxgxYvBpwDVr1ty6datq1arc5siR49ChQ05D6VYEREAEREAEREAERCCIBMKuSnZ6sPv376NWnSrtLS6L+PHj586de9SoUUhbW79161ZsDJMmTbI1ngvEX716defOnWPHju3Xr1/lypXjxo27f//+Tz75pG3btpcvX3bbnVT3mDFjUKskmBH3bmP8rdy3b1+ZMmVsWLly5aixt+PGjStcuDBp5kqVKjVu3BjFzJvDkSNH0qVLR/n169c2UgUREAEREAEREAEREIGgE3gzVDJuhKVLl7Zp08btA3fo0GHJkiXbtm1DyJIJ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3i1/Jw0ru/f8XagCREAEREAEREAEREAERCDECISoSuasN75U53RR6bun5at1TtNxy3dJfDejXyNzGobrSqyxxK9eqhcBERABERABERABEQgVAiHquODYYFf/LhlvPgrto4fn0804m50Gx1hsT0p2avLdLV/sMx/tc5yCT58kS5bMscYX5QD944IvFqAxRUAEREAEREAERCAsEAiQKAq23XvePDlq2HeC2O0CODvCbX3IV/IpEK6Qn1czioAIiIAIiIAIiIAIBIJAiDouArE+dREBERABERABERABERCBkCcglRzyzDWjCIiACIiACIiACIhAWCcglRzWfyGtTwREQAREQAREQAREIOQJhKgvOeQfTzNaAtn6bdJ5yZbGu1zQucjv8q+vZxcBERABEfCegHLJ3rNSpAiIgAiIgAiIgAiIwLtCQCr5Xfml9ZwiIAIiIAIiIAIiIALeE5BK9p6VIkVABERABERABERABN4VAlLJ78ovrecUAREQAREQAREQARHwnoBvVXKzZs2qVavmtJrUqVOH++eKHj16njx5li9f7hTg9nbJkiV0ch3NBO/evbtw4cLx48fna3aZMmUaN26c20HCYOX27durVq2aNGlSaOTKlcvp69nA4XGiRo2aPXv29evXh8H1a0kiIAIiIAIiIAIi8FYS8K1K9gvZwIEDr127dvTo0fz589etW3fv3r1+RZr6ixcvdu3atWjRon6FITE/++yznTt3nj59us8/17Rp0/wKDlP1PHuOHDm+/fbbn3/+uXnz5k2aNFm7dq1ZIU3169dv2bIloHg94Dp58mSYWrwWIwIiIAIiIAIiIAJvK4HQUckxY8ZMkiRJhgwZJk2aRPb3+++/98D35cuXDRs2HDBgQNq0af0Ky507N4Iya9asJKobNWpUrly5Xbt2+RVMfYkSJT7//PNOnTrFjRs3ceLE06dPf/ToESKVhX3wwQcbNmywfRGmFSpUiBEjBmGNGze+ffu2adq4cWORIkXixIlDArty5coXLlww9Qh6ct4rV64sWbJktGjRcubMuW/fPjuaa6FXr16DBg0qVKhQunTpOnbsWL58efqasAkTJnDbrVu3zJkzE0Pe/euvvzZN33zzTfr06ckxs6patWq5DqsaERABERABERABERCBoBAIHZVsVxwxYsRIkSI9f/7c1rgWSDwnSpSIlKprk9sa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"}}},{"cell_type":"code","source":"# Create submission file predicting each category with 1/6 probability\ndef submit_simple_prediction_distribution(model=None):\n    try:\n        pd.__version__\n    except NameError as e:\n        import pandas as pd\n\n    test = pd.read_csv('/kaggle/input/hms-harmful-brain-activity-classification/test.csv')\n    TARGETS = ['seizure_vote', 'lpd_vote', 'gpd_vote', 'lrda_vote', 'grda_vote', 'other_vote']\n\n    preds = []\n    if model == None:\n        for i in range(len(test)):\n            prediction = [1/6 for _ in range(6)]\n            preds.append(prediction)\n    elif model == 'average':\n        for i in range(len(test)):\n            prediction = [0.1528104330302498,0.14245623160060353,0.10406219872761731, 0.0654066850688227, 0.1148512026975355,0.4204132488751711]\n            preds.append(prediction)\n\n    sub = pd.DataFrame({'eeg_id':test.eeg_id.values})\n    sub[TARGETS] = preds\n    sub.to_csv('submission.csv',index=False)\n    \n    return test, sub\n\ntest, sub = submit_simple_prediction_distribution(model='average')\nsub.head()","metadata":{"execution":{"iopub.status.busy":"2024-02-01T20:50:16.411873Z","iopub.execute_input":"2024-02-01T20:50:16.412516Z","iopub.status.idle":"2024-02-01T20:50:16.435886Z","shell.execute_reply.started":"2024-02-01T20:50:16.412487Z","shell.execute_reply":"2024-02-01T20:50:16.434882Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Load Libraries","metadata":{}},{"cell_type":"code","source":"import os, gc\nimport time\nos.environ[\"CUDA_VISIBLE_DEVICES\"]=\"0,1\"\nimport pandas as pd, numpy as np\nimport matplotlib.pyplot as plt\nimport random\n\nimport catboost as cat\nfrom catboost import CatBoostClassifier, Pool\nprint('CatBoost version',cat.__version__)\n\nfrom sklearn.model_selection import KFold, GroupKFold\n\nimport warnings\nwarnings.filterwarnings('ignore')\n\nVER = 4","metadata":{"execution":{"iopub.status.busy":"2024-02-01T20:50:22.673245Z","iopub.execute_input":"2024-02-01T20:50:22.673897Z","iopub.status.idle":"2024-02-01T20:50:22.680428Z","shell.execute_reply.started":"2024-02-01T20:50:22.673865Z","shell.execute_reply":"2024-02-01T20:50:22.679302Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Load Train Data","metadata":{}},{"cell_type":"code","source":"df = pd.read_csv('/kaggle/input/hms-harmful-brain-activity-classification/train.csv')\ntargets = df.columns[-6:]\nprint('Train shape:', df.shape )\nprint('')\nprint('Targets', list(targets))","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-02-01T20:50:26.702442Z","iopub.execute_input":"2024-02-01T20:50:26.703245Z","iopub.status.idle":"2024-02-01T20:50:26.897255Z","shell.execute_reply.started":"2024-02-01T20:50:26.703206Z","shell.execute_reply":"2024-02-01T20:50:26.896349Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df.head()","metadata":{"execution":{"iopub.status.busy":"2024-02-01T20:50:31.077455Z","iopub.execute_input":"2024-02-01T20:50:31.078266Z","iopub.status.idle":"2024-02-01T20:50:31.092819Z","shell.execute_reply.started":"2024-02-01T20:50:31.078233Z","shell.execute_reply":"2024-02-01T20:50:31.091875Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Create Non-Overlapping Eeg Id Train Data\nThe competition data description says that test data does not have multiple crops from the same `eeg_id`. Therefore we will train and validate using only 1 crop per `eeg_id`. There is a discussion about this [here][1].\n\n[1]: https://www.kaggle.com/competitions/hms-harmful-brain-activity-classification/discussion/467021","metadata":{}},{"cell_type":"code","source":"def preprocess_data(df, targets):\n    agg_dict = {\n        'spectrogram_id': 'first',\n        'spectrogram_label_offset_seconds': 'min'\n    }\n    train = df.groupby('eeg_id')[['spectrogram_id', 'spectrogram_label_offset_seconds']].agg(agg_dict)\n    train.columns = ['spec_id', 'min_offset_seconds']\n\n    max_offset_seconds = df.groupby('eeg_id')['spectrogram_label_offset_seconds'].max()\n    train['max_offset_seconds'] = max_offset_seconds\n\n    patient_ids = df.groupby('eeg_id')['patient_id'].first()\n    train['patient_id'] = patient_ids\n\n    target_sums = df.groupby('eeg_id')[targets].sum()\n    for target in targets:\n        train[target] = target_sums[target].values\n    y_data = train[targets].values\n    y_data_normalized = y_data / y_data.sum(axis=1, keepdims=True)\n    train[targets] = y_data_normalized\n\n    expert_consensus = df.groupby('eeg_id')['expert_consensus'].first()\n    train['target'] = expert_consensus\n\n    train = train.reset_index()\n\n    return train\n\ntrain = preprocess_data(df, targets)\nprint('df eeg_id shape:', df.shape)\nprint('Train non-overlapping eeg_id shape:', train.shape)\ntrain.head()","metadata":{"execution":{"iopub.status.busy":"2024-02-01T20:50:35.924758Z","iopub.execute_input":"2024-02-01T20:50:35.925705Z","iopub.status.idle":"2024-02-01T20:50:36.008625Z","shell.execute_reply.started":"2024-02-01T20:50:35.925661Z","shell.execute_reply":"2024-02-01T20:50:36.007594Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def get_averages(train):\n    avg = []\n    for col in train.columns[-2:-8:-1][::-1]:\n        avg.append(train[col].mean())\n    return avg\n\ndef print_averages(avg, cols=None):\n    if cols == None: cols = train.columns[-2:-8:-1][::-1]\n    for col, a in zip(cols,avg):\n        print(f'{col}: {float(a):.3f}')\n\nprint_averages(get_averages(train))","metadata":{"execution":{"iopub.status.busy":"2024-02-01T20:50:42.040853Z","iopub.execute_input":"2024-02-01T20:50:42.041192Z","iopub.status.idle":"2024-02-01T20:50:42.049782Z","shell.execute_reply.started":"2024-02-01T20:50:42.041166Z","shell.execute_reply":"2024-02-01T20:50:42.048731Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Feature Engineer\nIn this section, we create features for our CatBoost model. \n\nFirst we need to read in all 11k train spectrogram files. Reading thousands of files takes 11 minutes with Pandas. Instead, we can read 1 file from my [Kaggle dataset here][1] which contains all the 11k spectrograms in less than 1 minute! To use my [Kaggle dataset][1], set variable `READ_SPEC_FILES = False`. Thanks for upvoting my Kaggle dataset!\n\nNext we need to engineer features for our CatBoost model. In version 1 notebook, we just take the mean (over time) of each of the 400 spectrogram frequencies (using middle 10 minutes). This produces 400 features (per each unique eeg id). We can improve CV and LB score by engineering new features (and/or tuning CatBoost).\n\nUPDATE: Version 2 creates features from `means` and `mins`. And version 2 uses `10 minute windows` and `20 second windows`.\n\nUPDATE: Version 3 uses **both** Kaggle spectrograms and **EEG spectrograms**. We load EEG spectrograms from my Kaggle dataset [here][2]. These EEG spectrograms were created from EEG raw waveforms in my spectrogram starter [here][3]. Thank you everyone for upvoting my new Kaggle dataset!\n\n[1]: https://www.kaggle.com/datasets/cdeotte/brain-spectrograms\n[2]: https://www.kaggle.com/datasets/cdeotte/brain-eeg-spectrograms\n[3]: https://www.kaggle.com/code/cdeotte/efficientnetb2-starter-lb-0-57","metadata":{}},{"cell_type":"code","source":"def image_spectrogram(i=None):\n    \n    if i == None: i = 0\n    if i == -1: i = random.randint(0, 11_138)\n    \n    path = '/kaggle/input/hms-harmful-brain-activity-classification/train_spectrograms/'\n    files = os.listdir(path)\n    \n    tmp = pd.read_parquet(f'{path}{files[i]}')\n    \n    plt.figure(figsize=(5,5))\n    plt.imshow(np.log(tmp+1).T,cmap='jet')\n    plt.ylabel('time (seconds)')\n    plt.title(f'{files[i]}\\nclassification: {train.iloc[i].target}')\n    plt.colorbar()\n    plt.show()\n\n    cols = tmp.columns[:100]\n    chain = ['LL', 'RL', 'LP', 'RP']\n    for i in range(4):\n        cols = tmp.columns[i*100:(i+1)*100]\n        plt.imshow((np.log(tmp[cols]+1)).T, cmap='jet')\n        plt.title(f'{chain[i]} chain')\n        plt.show()\n    \nimage_spectrogram(i=-1)","metadata":{"execution":{"iopub.status.busy":"2024-02-01T20:50:45.352521Z","iopub.execute_input":"2024-02-01T20:50:45.353072Z","iopub.status.idle":"2024-02-01T20:50:47.038412Z","shell.execute_reply.started":"2024-02-01T20:50:45.353039Z","shell.execute_reply":"2024-02-01T20:50:47.037574Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def read_all_spectrograms(read_spec_files=False):\n    \n    t0 = time.time()\n        \n    path = '/kaggle/input/hms-harmful-brain-activity-classification/train_spectrograms/'\n    files = os.listdir(path)\n    print(f'There are {len(files)} spectrogram parquets')\n\n    if read_spec_files:\n        spectrograms = {}\n        for i,f in enumerate(files):\n            if i%100==0: print(i,', ',end='')\n            tmp = pd.read_parquet(f'{path}{f}')\n            name = int(f.split('.')[0])\n            spectrograms[name] = tmp.iloc[:,1:].values\n    else:\n        spectrograms = np.load('/kaggle/input/brain-spectrograms/specs.npy',allow_pickle=True).item()\n    print(f'time taken to read all kaggle spectrograms = {time.time()-t0:.2f}s')\n    return spectrograms\n\nspectrograms = read_all_spectrograms()","metadata":{"execution":{"iopub.status.busy":"2024-02-01T20:52:22.616914Z","iopub.execute_input":"2024-02-01T20:52:22.617796Z","iopub.status.idle":"2024-02-01T20:52:29.561836Z","shell.execute_reply.started":"2024-02-01T20:52:22.617761Z","shell.execute_reply":"2024-02-01T20:52:29.560881Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def read_eeg_spectrograms(read_eeg_spec_files=False):\n    t0 = time.time()\n    if read_eeg_spec_files:\n        all_eegs = {}\n        for i,e in enumerate(train.eeg_id.values):\n            if i%100==0: print(i,', ',end='')\n            x = np.load(f'/kaggle/input/brain-eeg-spectrograms/EEG_Spectrograms/{e}.npy')\n            all_eegs[e] = x\n    else:\n        all_eegs = np.load('/kaggle/input/brain-eeg-spectrograms/eeg_specs.npy',allow_pickle=True).item()\n    print(f'time taken to read all eeg-spectrograms = {time.time()-t0:.2f}s')\n    return all_eegs\n\nall_eegs = read_eeg_spectrograms()","metadata":{"execution":{"iopub.status.busy":"2024-02-01T20:52:32.592595Z","iopub.execute_input":"2024-02-01T20:52:32.593052Z","iopub.status.idle":"2024-02-01T20:53:45.791010Z","shell.execute_reply.started":"2024-02-01T20:52:32.593017Z","shell.execute_reply":"2024-02-01T20:53:45.788879Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"path = '/kaggle/input/hms-harmful-brain-activity-classification/train_spectrograms/'\nspec_cols = pd.read_parquet(f'{path}1000086677.parquet').columns[1:]\n\n# only look at the LL chain\n# spec_cols = spec_cols[:100]","metadata":{"execution":{"iopub.status.busy":"2024-02-01T20:53:45.794081Z","iopub.execute_input":"2024-02-01T20:53:45.794507Z","iopub.status.idle":"2024-02-01T20:53:45.846818Z","shell.execute_reply.started":"2024-02-01T20:53:45.794466Z","shell.execute_reply":"2024-02-01T20:53:45.845888Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def extract_features(row, spectrograms, all_eegs, chain=None):\n    \"\"\"\n    Extract features for a single row of the dataset.\n\n    Parameters:\n    - row: DataFrame row\n        A single row of the dataset.\n    - spectrograms: dict\n        A dictionary containing spectrogram data.\n    - all_eegs: dict\n        A dictionary containing EEG data.\n\n    Returns:\n    - np.array\n        An array of extracted features.\n    \"\"\"\n    \n    if chain == None:\n        chain = 'all'\n    spec_range_map = {'LL': (0, 100),\n                      'RL': (100, 200),\n                      'LP': (200, 300),\n                      'RP': (300, 400),\n                      'all': (0, 400)}\n    spec_range = spec_range_map[chain]\n    \n    # Initialize a list to store features\n    features = []\n    feature_names = []\n\n    # Calculate the range for feature extraction\n    r = int((row['min_offset_seconds'] + row['max_offset_seconds']) // 4)\n\n    # 10 MINUTE WINDOW FEATURES\n    features.append(np.nanmean(spectrograms[row.spec_id][r:r+300, spec_range[0]:spec_range[1]], axis=0))\n    feature_names += [f'{c}_mean_10m' for c in spec_cols]\n    \n    features.append(np.nanmin(spectrograms[row.spec_id][r:r+300, spec_range[0]:spec_range[1]], axis=0))\n    feature_names += [f'{c}_min_10m' for c in spec_cols]\n    \n#     features.append(np.nanmax(spectrograms[row.spec_id][r:r+300, spec_range[0]:spec_range[1]], axis=0))\n#     feature_names = [f'{c}_max_10m' for c in spec_cols]\n    \n#     # 20 SECOND WINDOW FEATURES\n    features.append(np.nanmean(spectrograms[row.spec_id][r+145:r+155, spec_range[0]:spec_range[1]], axis=0))\n    feature_names += [f'{c}_mean_20s' for c in spec_cols]\n    \n    features.append(np.nanmin(spectrograms[row.spec_id][r+145:r+155, spec_range[0]:spec_range[1]], axis=0))\n    feature_names += [f'{c}_min_20s' for c in spec_cols]\n    \n#     features.append(np.nanmax(spectrograms[row.spec_id][r+145:r+155, spec_range[0]:spec_range[1]], axis=0))\n#     feature_names = [f'{c}_max_20s' for c in spec_cols]\n    \n    # RESHAPE EEG SPECTROGRAMS\n    eeg_spec = np.zeros((512, 256), dtype='float32')\n    xx = all_eegs[row.eeg_id]\n    for j in range(4):\n        eeg_spec[128*j:128*(j+1),] = xx[:,:,j]\n\n    # 10 SECOND WINDOW FROM EEG SPECTROGRAMS\n    features.append(np.nanmean(eeg_spec.T[100:-100, spec_range[0]:spec_range[1]], axis=0))\n    feature_names += [f'{c}_mean_10s' for c in spec_cols]\n    \n    features.append(np.nanmin(eeg_spec.T[100:-100, spec_range[0]:spec_range[1]], axis=0))\n    feature_names += [f'{c}_min_10s' for c in spec_cols]\n    \n    features.append(np.nanmax(eeg_spec.T[100:-100, spec_range[0]:spec_range[1]], axis=0))\n    feature_names += [f'{c}_max_10s' for c in spec_cols]\n    \n    features.append(np.nanstd(eeg_spec.T[100:-100, spec_range[0]:spec_range[1]], axis=0))\n    feature_names += [f'{c}_std_10s' for c in spec_cols]\n    \n    # Concatenate all features into a single array\n    return np.concatenate(features), feature_names\n\n# Example usage\nimport time\n\nt0 = time.time()\ndata = np.zeros((len(train), 3200))  # Update 4448 based on total number of features\n\n# for i in range(2):\nfor i in range(len(train)):\n    if i % 1000 == 0:\n        print(f'{(time.time()-t0):.2f}; training row = {i}')\n    row = train.iloc[i]\n    data[i, :], feature_names = extract_features(row, spectrograms, all_eegs)\n    \ntrain[feature_names] = data","metadata":{"execution":{"iopub.status.busy":"2024-02-01T20:58:13.092736Z","iopub.execute_input":"2024-02-01T20:58:13.093634Z","iopub.status.idle":"2024-02-01T20:59:31.947174Z","shell.execute_reply.started":"2024-02-01T20:58:13.093600Z","shell.execute_reply":"2024-02-01T20:59:31.946402Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"len(feature_names)","metadata":{"execution":{"iopub.status.busy":"2024-02-01T20:59:57.599042Z","iopub.execute_input":"2024-02-01T20:59:57.599690Z","iopub.status.idle":"2024-02-01T20:59:57.605440Z","shell.execute_reply.started":"2024-02-01T20:59:57.599659Z","shell.execute_reply":"2024-02-01T20:59:57.604546Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"all_oof = []\nall_true = []\nTARS = {'Seizure':0, 'LPD':1, 'GPD':2, 'LRDA':3, 'GRDA':4, 'Other':5}\n\ngkf = GroupKFold(n_splits=5)\nfor i, (train_index, valid_index) in enumerate(gkf.split(train, train.target, train.patient_id)):   \n    \n    print('#'*25)\n    print(f'### Fold {i+1}')\n    print(f'### train size {len(train_index)}, valid size {len(valid_index)}')\n    print('#'*25)\n    \n    model = CatBoostClassifier(task_type='GPU',\n                               loss_function='MultiClass')\n    \n    train_pool = Pool(\n        data = train.loc[train_index,feature_names],\n        label = train.loc[train_index,'target'].map(TARS),\n    )\n    \n    valid_pool = Pool(\n        data = train.loc[valid_index,feature_names],\n        label = train.loc[valid_index,'target'].map(TARS),\n    )\n    \n    model.fit(train_pool,\n             verbose=100,\n             eval_set=valid_pool,\n             )\n    model.save_model(f'CAT_v{VER}_f{i}.cat')\n    \n    oof = model.predict_proba(valid_pool)\n    all_oof.append(oof)\n    all_true.append(train.loc[valid_index, targets].values)\n    \n    del train_pool, valid_pool, oof #model\n    gc.collect()\n    \n    #break","metadata":{"execution":{"iopub.status.busy":"2024-02-01T20:59:58.513227Z","iopub.execute_input":"2024-02-01T20:59:58.513913Z","iopub.status.idle":"2024-02-01T21:07:14.148249Z","shell.execute_reply.started":"2024-02-01T20:59:58.513876Z","shell.execute_reply":"2024-02-01T21:07:14.084378Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"all_oof = np.concatenate(all_oof)\nall_true = np.concatenate(all_true)","metadata":{"execution":{"iopub.status.busy":"2024-02-01T21:07:14.150485Z","iopub.execute_input":"2024-02-01T21:07:14.150821Z","iopub.status.idle":"2024-02-01T21:07:14.157262Z","shell.execute_reply.started":"2024-02-01T21:07:14.150790Z","shell.execute_reply":"2024-02-01T21:07:14.155644Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"TOP = 25\n\nfeature_importance = model.feature_importances_\nsorted_idx = np.argsort(feature_importance)\nfig = plt.figure(figsize=(10, 8))\nplt.barh(np.arange(len(sorted_idx))[-TOP:], feature_importance[sorted_idx][-TOP:], align='center')\nplt.yticks(np.arange(len(sorted_idx))[-TOP:], np.array(feature_names)[sorted_idx][-TOP:])\nplt.title(f'Feature Importance - Top {TOP}')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2024-02-01T21:07:14.158363Z","iopub.execute_input":"2024-02-01T21:07:14.158688Z","iopub.status.idle":"2024-02-01T21:07:14.662313Z","shell.execute_reply.started":"2024-02-01T21:07:14.158656Z","shell.execute_reply":"2024-02-01T21:07:14.661475Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import sys\nsys.path.append('/kaggle/input/kaggle-kl-div')\nfrom kaggle_kl_div import score\n\noof = pd.DataFrame(all_oof.copy())\noof['id'] = np.arange(len(oof))\n\ntrue = pd.DataFrame(all_true.copy())\ntrue['id'] = np.arange(len(true))\n\ncv = score(solution=true, submission=oof, row_id_column_name='id')\nprint('CV Score KL-Div for CatBoost =',cv)","metadata":{"execution":{"iopub.status.busy":"2024-02-01T21:07:54.550219Z","iopub.execute_input":"2024-02-01T21:07:54.550918Z","iopub.status.idle":"2024-02-01T21:07:54.627898Z","shell.execute_reply.started":"2024-02-01T21:07:54.550884Z","shell.execute_reply":"2024-02-01T21:07:54.626992Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"del train; gc.collect()\ntest = pd.read_csv('/kaggle/input/hms-harmful-brain-activity-classification/test.csv')\nprint('Test shape',test.shape)\ntest.head()","metadata":{"execution":{"iopub.status.busy":"2024-02-01T21:08:27.261180Z","iopub.execute_input":"2024-02-01T21:08:27.262107Z","iopub.status.idle":"2024-02-01T21:08:27.289522Z","shell.execute_reply.started":"2024-02-01T21:08:27.262073Z","shell.execute_reply":"2024-02-01T21:08:27.288264Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pywt, librosa\n\nUSE_WAVELET = None \n\nNAMES = ['LL','LP','RP','RR']\n\nFEATS = [['Fp1','F7','T3','T5','O1'],\n         ['Fp1','F3','C3','P3','O1'],\n         ['Fp2','F8','T4','T6','O2'],\n         ['Fp2','F4','C4','P4','O2']]\n\n# DENOISE FUNCTION\ndef maddest(d, axis=None):\n    return np.mean(np.absolute(d - np.mean(d, axis)), axis)\n\ndef denoise(x, wavelet='haar', level=1):    \n    coeff = pywt.wavedec(x, wavelet, mode=\"per\")\n    sigma = (1/0.6745) * maddest(coeff[-level])\n\n    uthresh = sigma * np.sqrt(2*np.log(len(x)))\n    coeff[1:] = (pywt.threshold(i, value=uthresh, mode='hard') for i in coeff[1:])\n\n    ret=pywt.waverec(coeff, wavelet, mode='per')\n    \n    return ret\n\ndef spectrogram_from_eeg(parquet_path, display=False):\n    \n    # LOAD MIDDLE 50 SECONDS OF EEG SERIES\n    eeg = pd.read_parquet(parquet_path)\n    middle = (len(eeg)-10_000)//2\n    eeg = eeg.iloc[middle:middle+10_000]\n    \n    # VARIABLE TO HOLD SPECTROGRAM\n    img = np.zeros((128,256,4),dtype='float32')\n    \n    if display: plt.figure(figsize=(10,7))\n    signals = []\n    for k in range(4):\n        COLS = FEATS[k]\n        \n        for kk in range(4):\n        \n            # COMPUTE PAIR DIFFERENCES\n            x = eeg[COLS[kk]].values - eeg[COLS[kk+1]].values\n\n            # FILL NANS\n            m = np.nanmean(x)\n            if np.isnan(x).mean()<1: x = np.nan_to_num(x,nan=m)\n            else: x[:] = 0\n\n            # DENOISE\n            if USE_WAVELET:\n                x = denoise(x, wavelet=USE_WAVELET)\n            signals.append(x)\n\n            # RAW SPECTROGRAM\n            mel_spec = librosa.feature.melspectrogram(y=x, sr=200, hop_length=len(x)//256, \n                  n_fft=1024, n_mels=128, fmin=0, fmax=20, win_length=128)\n\n            # LOG TRANSFORM\n            width = (mel_spec.shape[1]//32)*32\n            mel_spec_db = librosa.power_to_db(mel_spec, ref=np.max).astype(np.float32)[:,:width]\n\n            # STANDARDIZE TO -1 TO 1\n            mel_spec_db = (mel_spec_db+40)/40 \n            img[:,:,k] += mel_spec_db\n                \n        # AVERAGE THE 4 MONTAGE DIFFERENCES\n        img[:,:,k] /= 4.0\n        \n        if display:\n            plt.subplot(2,2,k+1)\n            plt.imshow(img[:,:,k],aspect='auto',origin='lower')\n            plt.title(f'EEG {eeg_id} - Spectrogram {NAMES[k]}')\n            \n    if display: \n        plt.show()\n        plt.figure(figsize=(10,5))\n        offset = 0\n        for k in range(4):\n            if k>0: offset -= signals[3-k].min()\n            plt.plot(range(10_000),signals[k]+offset,label=NAMES[3-k])\n            offset += signals[3-k].max()\n        plt.legend()\n        plt.title(f'EEG {eeg_id} Signals')\n        plt.show()\n        print(); print('#'*25); print()\n        \n    return img\n\n# CREATE ALL EEG SPECTROGRAMS\nPATH2 = '/kaggle/input/hms-harmful-brain-activity-classification/test_eegs/'\nDISPLAY = 0\nEEG_IDS2 = test.eeg_id.unique()\nall_eegs2 = {}\n\nprint('Converting Test EEG to Spectrograms...'); print()\nfor i,eeg_id in enumerate(EEG_IDS2):\n        \n    # CREATE SPECTROGRAM FROM EEG PARQUET\n    img = spectrogram_from_eeg(f'{PATH2}{eeg_id}.parquet', i<DISPLAY)\n    all_eegs2[eeg_id] = img","metadata":{"execution":{"iopub.status.busy":"2024-02-01T21:08:30.172329Z","iopub.execute_input":"2024-02-01T21:08:30.172750Z","iopub.status.idle":"2024-02-01T21:08:39.862674Z","shell.execute_reply.started":"2024-02-01T21:08:30.172716Z","shell.execute_reply":"2024-02-01T21:08:39.861346Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# FEATURE ENGINEER TEST\nPATH2 = '/kaggle/input/hms-harmful-brain-activity-classification/test_spectrograms/'\n\nchain = 'all'\nspec_range_map = {'LL': (0, 100),\n                  'RL': (100, 200),\n                  'LP': (200, 300),\n                  'RP': (300, 400),\n                  'all': (0, 400)}\nspec_range = spec_range_map[chain]\n\ndata = np.zeros((len(test), 1600))\nfor k in range(len(test)):\n    \n    features = []\n    feature_names = []\n    row = test.iloc[k]\n    s = int( row.spectrogram_id )\n    spec = pd.read_parquet(f'{PATH2}{s}.parquet')\n    \n    # 10 MINUTE WINDOW FEATURES\n    \n    x = np.nanmean( spec.iloc[:,spec_range[0]:spec_range[1]].values, axis=0)\n    features.append(x)\n    feature_names = [f'{c}_mean_10m' for c in spec_cols]\n    \n#     x = np.nanmean( spec.iloc[:,1:].values, axis=0)\n#     data[k,:400] = x\n#     x = np.nanmin( spec.iloc[:,1:].values, axis=0)\n#     data[k,400:800] = x\n#     x = np.nanmax( spec.iloc[:,1:].values, axis=0)\n#     data[k,800:1200] = x\n\n#     # 20 SECOND WINDOW FEATURES\n    x = np.nanmean( spec.iloc[145:155,spec_range[0]:spec_range[1]].values, axis=0)\n    features.append(x)\n    feature_names += [f'{c}_mean_20s' for c in spec_cols]\n    \n    x = np.nanmin( spec.iloc[145:155,spec_range[0]:spec_range[1]].values, axis=0)\n    features.append(x)\n    feature_names += [f'{c}_min_20s' for c in spec_cols]\n#     x = np.nanmean( spec.iloc[145:155,1:].values, axis=0)\n#     data[k,1200:1600] = x\n#     x = np.nanmin( spec.iloc[145:155,1:].values, axis=0)\n#     data[k,1600:2000] = x\n#     x = np.nanmax( spec.iloc[145:155,1:].values, axis=0)\n#     data[k,2000:2400] = x\n    \n    # RESHAPE EEG SPECTROGRAMS 128x256x4 => 512x256\n    eeg_spec = np.zeros((512,256),dtype='float32')\n    xx = all_eegs2[row.eeg_id]\n    for j in range(4): eeg_spec[128*j:128*(j+1),] = xx[:,:,j]\n\n    # 10 SECOND WINDOW FROM EEG SPECTROGRAMS \n    x = np.nanmean(eeg_spec.T[100:-100,spec_range[0]:spec_range[1]],axis=0)\n    features.append(x)\n    feature_names += [f'{c}_mean_10s' for c in spec_cols]\n    \n    x = np.nanmin(eeg_spec.T[100:-100,spec_range[0]:spec_range[1]],axis=0)\n    features.append(x)\n    feature_names += [f'{c}_min_10s' for c in spec_cols]\n#     x = np.nanmin(eeg_spec.T[100:-100,:],axis=0)\n#     data[k,2912:3424] = x\n#     x = np.nanmax(eeg_spec.T[100:-100,:],axis=0)\n#     data[k,3424:3936] = x\n#     x = np.nanstd(eeg_spec.T[100:-100,:],axis=0)\n#     data[k,3936:4448] = x\n\n    print(len(np.concatenate(features)))\n    data[k,:] = np.concatenate(features)\ntest[feature_names] = data\nprint('New test shape',test.shape)","metadata":{"execution":{"iopub.status.busy":"2024-02-01T20:35:54.561368Z","iopub.execute_input":"2024-02-01T20:35:54.563153Z","iopub.status.idle":"2024-02-01T20:35:55.643001Z","shell.execute_reply.started":"2024-02-01T20:35:54.563111Z","shell.execute_reply":"2024-02-01T20:35:55.642065Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test","metadata":{"execution":{"iopub.status.busy":"2024-02-01T20:35:55.644149Z","iopub.execute_input":"2024-02-01T20:35:55.644462Z","iopub.status.idle":"2024-02-01T20:35:55.672187Z","shell.execute_reply.started":"2024-02-01T20:35:55.644431Z","shell.execute_reply":"2024-02-01T20:35:55.671365Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os\n\n# Replace with your version variable\n# VER = ''\n\nfor i in range(2):\n    model_filename = f'CAT_v{VER}_f{i}.cat'\n    if os.path.exists(model_filename):\n        print(f\"Model file {model_filename} exists.\")\n    else:\n        print(f\"Model file {model_filename} does not exist.\")\n","metadata":{"execution":{"iopub.status.busy":"2024-02-01T20:35:55.673182Z","iopub.execute_input":"2024-02-01T20:35:55.674713Z","iopub.status.idle":"2024-02-01T20:35:55.680710Z","shell.execute_reply.started":"2024-02-01T20:35:55.674686Z","shell.execute_reply":"2024-02-01T20:35:55.679776Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# INFER CATBOOST ON TEST\npreds = []\n\nfor i in range(len(test)):\n    print(i,', ',end='')\n    model = CatBoostClassifier(task_type='GPU')\n    model.load_model(f'CAT_v{VER}_f{i}.cat')\n    \n    test_pool = Pool(\n        data = test[feature_names]\n    )\n    \n    pred = model.predict_proba(test_pool)\n    preds.append(pred)\npred = np.mean(preds,axis=0)\nprint()\nprint('Test preds shape',pred.shape)","metadata":{"execution":{"iopub.status.busy":"2024-02-01T20:35:55.681887Z","iopub.execute_input":"2024-02-01T20:35:55.682236Z","iopub.status.idle":"2024-02-01T20:35:55.980261Z","shell.execute_reply.started":"2024-02-01T20:35:55.682206Z","shell.execute_reply":"2024-02-01T20:35:55.979335Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub = pd.DataFrame({'eeg_id':test.eeg_id.values})\nsub[targets] = pred\nsub.to_csv('submission.csv',index=False)\nprint('Submissionn shape',sub.shape)\nsub.head()","metadata":{"execution":{"iopub.status.busy":"2024-02-01T20:35:55.981368Z","iopub.execute_input":"2024-02-01T20:35:55.981722Z","iopub.status.idle":"2024-02-01T20:35:55.999310Z","shell.execute_reply.started":"2024-02-01T20:35:55.981694Z","shell.execute_reply":"2024-02-01T20:35:55.998439Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# SANITY CHECK TO CONFIRM PREDICTIONS SUM TO ONE\nsub.iloc[:,-6:].sum(axis=1)","metadata":{"execution":{"iopub.status.busy":"2024-02-01T20:35:56.000496Z","iopub.execute_input":"2024-02-01T20:35:56.000758Z","iopub.status.idle":"2024-02-01T20:35:56.008557Z","shell.execute_reply.started":"2024-02-01T20:35:56.000735Z","shell.execute_reply":"2024-02-01T20:35:56.007576Z"},"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":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}