From 93958c7695c80c45b43bbe323612b174b2d54a56 Mon Sep 17 00:00:00 2001
From: antoineverier <135725218+antoineverier@users.noreply.github.com>
Date: Wed, 4 Mar 2026 16:45:17 +0100
Subject: [PATCH 1/2] first iteration of the challenge
---
competition.yaml | 19 +--
data_extraction.py | 61 ++++++++
ingestion_program/ingestion.py | 15 +-
logo.png | Bin 3797 -> 4483 bytes
requirements.txt | 11 ++
scoring_program/scoring.py | 14 +-
template_starting_kit.ipynb | 251 ++++++++++++++++++++++++++++++---
7 files changed, 324 insertions(+), 47 deletions(-)
create mode 100644 data_extraction.py
diff --git a/competition.yaml b/competition.yaml
index 3a1e4de..1db2bec 100755
--- a/competition.yaml
+++ b/competition.yaml
@@ -1,6 +1,6 @@
version: 2
-title: Templat competition - Dummy classification
-description: Dummy classification task
+title: ChemSmiles classification
+description: 'Predict the inhi
image: logo.png
registration_auto_approve: False # if True, do not require approval from admin to join the comp
@@ -16,7 +16,7 @@ pages:
tasks:
- index: 0
name: Developement Task
- description: 'Tune models with training data, test against examples contained in public test data'
+ description: 'Tune models with training data'
input_data: dev_phase/input_data/
reference_data: dev_phase/reference_data/
ingestion_program: ingestion_program/
@@ -32,8 +32,8 @@ solutions:
phases:
- name: Development Phase
description: 'Development phase: tune your models.'
- start: 10-07-2025
- end: 03-31-2026
+ start: 01-04-2026
+ end: 01-07-2026
tasks:
- 0
@@ -45,16 +45,11 @@ leaderboards:
key: test
index: 0
sorting: asc
- - title: Private Test Accuracy
- key: private_test
- index: 1
- sorting: asc
- hidden: True
- title: Train time
key: train_time
- index: 2
+ index: 1
sorting: desc
- title: Test time
key: test_time
- index: 3
+ index: 2
sorting: desc
diff --git a/data_extraction.py b/data_extraction.py
new file mode 100644
index 0000000..02fa115
--- /dev/null
+++ b/data_extraction.py
@@ -0,0 +1,61 @@
+import pandas as pd
+from rdkit import Chem # type: ignore
+from rdkit.Chem import Descriptors # type: ignore
+
+def property_split(df, smiles_col='SMILES', label_col='Answer', property_type='MW', train_frac=0.8):
+ """
+ Separe training and test set
+ """
+ df_split = df.copy()
+
+ def calculate_property(smiles):
+ mol = Chem.MolFromSmiles(str(smiles))
+ if mol is None: return None
+ return Descriptors.MolWt(mol) if property_type == 'MW' else Descriptors.MolLogP(mol)
+
+ df_split[property_type] = df_split[smiles_col].apply(calculate_property)
+ df_split = df_split.dropna(subset=[property_type])
+
+ df_split = df_split.sort_values(by=property_type, ascending=True).reset_index(drop=True)
+ split_index = int(len(df_split) * train_frac)
+
+ train_df = df_split.iloc[:split_index].copy()
+ test_df = df_split.iloc[split_index:].copy()
+
+ return train_df, test_df
+
+
+def clean_and_format_dataset(df):
+ df_clean = df[['TargetMolecule', 'Answer']].copy()
+
+ # Renommer pour un format standard
+ df_clean = df_clean.rename(columns={
+ 'TargetMolecule': 'SMILES',
+ 'Answer': 'Label'
+ })
+
+ # Convertir les labels texte en nombres
+ df_clean['Label'] = df_clean['Label'].replace({
+ 'No': 0,
+ 'Yes': 1
+ })
+
+ # Supprimer les lignes incomplètes et les doublons de molécules
+ df_clean = df_clean.dropna(subset=['SMILES', 'Label'])
+
+ return df_clean
+
+def main():
+ df = pd.read_parquet("hf://datasets/molvision/BACE-V-SMILES-0/data/train-00000-of-00001.parquet")
+ df = df.drop_duplicates(subset=['TargetMolecule']).reset_index(drop=True)
+
+ train_df, test_df = property_split(df, smiles_col='TargetMolecule', label_col='Answer', property_type='MW')
+
+ train_df_clean = clean_and_format_dataset(train_df)
+ test_df_clean = clean_and_format_dataset(test_df)
+
+ train_df_clean.to_csv("train.csv")
+ test_df_clean.to_csv("test.csv")
+
+if __name__ == "__main__":
+ main()
\ No newline at end of file
diff --git a/ingestion_program/ingestion.py b/ingestion_program/ingestion.py
index f150b05..8d931fd 100755
--- a/ingestion_program/ingestion.py
+++ b/ingestion_program/ingestion.py
@@ -6,20 +6,20 @@
import pandas as pd
-EVAL_SETS = ["test", "private_test"]
+EVAL_SETS = ["test"]
def evaluate_model(model, X_test):
-
y_pred = model.predict(X_test)
return pd.DataFrame(y_pred)
def get_train_data(data_dir):
data_dir = Path(data_dir)
- training_dir = data_dir / "train"
- X_train = pd.read_csv(training_dir / "train_features.csv")
- y_train = pd.read_csv(training_dir / "train_labels.csv")
+ training_dir = data_dir
+ df = pd.read_csv(training_dir / "train.csv")
+ X_train = df["SMILES"]
+ y_train = df["Label"]
return X_train, y_train
@@ -42,8 +42,9 @@ def main(data_dir, output_dir):
start = time.time()
res = {}
for eval_set in EVAL_SETS:
- X_test = pd.read_csv(data_dir / eval_set / f"{eval_set}_features.csv")
- res[eval_set] = evaluate_model(model, X_test)
+ X_test = pd.read_csv(data_dir / eval_set / f"{eval_set}.csv")
+ X_smiles = X_test["SMILES"]
+ res[eval_set] = evaluate_model(model, X_smiles)
test_time = time.time() - start
print("-" * 10)
duration = train_time + test_time
diff --git a/logo.png b/logo.png
index 9616456c1d354140c0055fb6ee32e23d76519df3..e2294f00d4ad30d4418276437dde605668ed34a8 100644
GIT binary patch
literal 4483
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
d^#}eMk@_|}&CO(S8T38rRwsKn2
z#Cy?{W+uXRJnQhz^PD(AC5M{z+Bgoyjnwv5oHsbFc#B*^_K`0Y9;D%%qMe;nV?9>L
zs@D@Pu77IAb1)VOC;5GaEksbiL2+gty?*RwSc@CL;9P>1bh2tnX~Ngb(CLmNVTo*x
zJf`nj;dZ2m`4;se8V$%$lTIaCq~_>#;4UE7V5fJ4v759HRcRVCbOCppvDoAh9dlO%
zHm6~ri)-md4z~!sY0eJjv*wd>)tOR&m*0S=&O|QX7SQA$dxan5O}6v~$CYhGeZDOh
z*BcI`p!@~%e@foh>S(DEFB<#i?e-^}aZkBvDw*t_#J4*tw89Q$YVloU{w#`|y^4q&
zFK_Nhn9gJqz;P<;UMvC}+tz(oDL4qxNC(6cDzg}YhF$$Wq>7s&$CVdDm>LcTwzlK
zj94-)cG+FRf%b>fawVfKHTQ#H-`5*I)cGt2fs+ba*fG;bZz!~
zYs+#oO&`82M(j!7PL^W+NW$v`RXDo+{0KxjJR`^x&XA{dHbfr9aIPP>cWR2?18wWB
zxUtSD#s{^gVuSd#33Vg#?HS;5L-HaH5E)kYnTox^%Ov*dp72+WPU!`3uNq}txHW{o
z{Hn^q&?=7@o$XEX5-4D0(;+iUx3^)u!QjBjOd^o+`1->i+Wqi{2D*)}EBiL~cb;;8
zH%Oq`kO~`kP6aZ)W-XbNB#d2=#R8o*H7?
z`^G$bF30-0UA{(QR^)i6w|J@?F6beU6?)`Ua%VW+x#_ZGZ(UeVuEa-|f4#Xe4yFR7
zv^wcBX27NnJcO*PW8VmDw9utz7X*bYKYd$uD3?vMO99kY>yiIPmi9BX!vvYV-Yh{$
zNxeqN;!hV-z8hHOlmYdRU|>tfqiochX*uXl>lf_)y;L0PiO&gKDx1ojnwz4`Djkw#
zP0N`(S>^$Jm}nZkk|f4B_4YMpL0jy+9qU0h*yC>@t1HwbI4)flQ9xpOVg-sY~M6-WjkNHZrM$)cHMidV`B9}hSd@(so4qV
zkW!_u)qO~5B2VTB>#)zk3X*LT*xb`*z0bO4AOt~a+85<=|
literal 3797
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
diff --git a/requirements.txt b/requirements.txt
index fda4dd6..9c537ef 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,2 +1,13 @@
pandas
scikit-learn
+rdkit
+transformers
+torch
+torchvision
+tokenizers
+numpy
+matplotlib
+seaborn
+jupyterlab
+notebook
+ipywidgets
\ No newline at end of file
diff --git a/scoring_program/scoring.py b/scoring_program/scoring.py
index 701f78f..16ec14b 100755
--- a/scoring_program/scoring.py
+++ b/scoring_program/scoring.py
@@ -1,16 +1,16 @@
import json
from pathlib import Path
-
+from sklearn.metrics import cohen_kappa_score
import pandas as pd
-EVAL_SETS = ["test", "private_test"]
+EVAL_SETS = ["test"]
-def compute_accuracy(predictions, targets):
+def compute_kappa(predictions, targets):
# Make sure there is no NaN, as pandas ignores them in mean computation
predictions = predictions.fillna(-10).values
# Return mean of correct predictions
- return (predictions == targets.values).mean()
+ return cohen_kappa_score(predictions, targets)
def main(reference_dir, prediction_dir, output_dir):
@@ -22,10 +22,10 @@ def main(reference_dir, prediction_dir, output_dir):
prediction_dir / f'{eval_set}_predictions.csv'
)
targets = pd.read_csv(
- reference_dir / f'{eval_set}_labels.csv'
+ reference_dir / f'{eval_set}.csv'
)
-
- scores[eval_set] = float(compute_accuracy(predictions, targets))
+ y_true = targets["Label"]
+ scores[eval_set] = float(compute_kappa(predictions, y_true))
# Add train and test times in the score
json_durations = (prediction_dir / 'metadata.json').read_text()
diff --git a/template_starting_kit.ipynb b/template_starting_kit.ipynb
index 7167a3a..8663879 100644
--- a/template_starting_kit.ipynb
+++ b/template_starting_kit.ipynb
@@ -23,28 +23,42 @@
"source": [
"## Introduction\n",
"\n",
- "Describe the challenge, in particular:\n",
+ "The data comes from a subset dataset (originally from MoleculeNet). (exactly ```molvision/BACE-V-SMILES-0``` but won't be precised to the participant to avoid data leakage). It contains SMILES representation for a set of molecules tested as inhibitors of the enzyme Beta-secretase 1.\n",
"\n",
- "- Where the data comes from?\n",
- "- What is the task this challenge aims to solve?\n",
- "- Why does it matter?"
+ "**What is the task this challenge aims to solve?**\n",
+ "\n",
+ "Your goal is to build a binary classification model that takes a molecule's SMILES string as input and predicts whether it is an active inhibitor (Label = 1) or an inactive molecule (Label = 0).\n",
+ "\n",
+ "**Why does it matter?**\n",
+ "\n",
+ "This enzyme is a prime therapeutic target for Alzheimer's disease. Being able to predict its inhibitors accurately accelerates the drug discovery process."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
- "# Exploratory data analysis\n",
+ "## Out-of-distribution test set \n",
"\n",
- "The goal of this section is to show what's in the data, and how to play with it.\n",
- "This is the first set in any data science project, and here, you should give a sense of the data the participants will be working with.\n",
+ "This is not a standard random-split challenge. The dataset has been strictly split based on Molecular Weight (MW):\n",
"\n",
- "You can first load and describe the data, and then show some interesting properties of it."
+ "- Train set: it contains smaller molecules (MW < 592 Da).\n",
+ "\n",
+ "- Hidden test set: it contains exclusively larger molecules (MW ≥ 592 Da).\n",
+ "\n",
+ "Your model must prove it has learned true chemical rules to extrapolate to uncharted chemical space, rather than just memorizing the training statistics!"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Exploratory data analysis"
]
},
{
"cell_type": "code",
- "execution_count": 1,
+ "execution_count": 29,
"metadata": {},
"outputs": [],
"source": [
@@ -53,10 +67,145 @@
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"pd.set_option('display.max_columns', None)\n",
- "\n",
+ "from rdkit import Chem\n",
+ "from rdkit.Chem import Descriptors, Draw\n",
"# Load the data\n",
"from ingestion_program.ingestion import get_train_data\n",
- "X_df, y = get_train_data(\"dev_phase/input_data\")"
+ "X, y = get_train_data(\"input_data\")"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 30,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Number of molecules in train set: 683\n"
+ ]
+ },
+ {
+ "data": {
+ "text/plain": [
+ "0 Oc1ccc(cc1)CC[NH3+]\n",
+ "1 n1ccc2c(cccc2)c1N\n",
+ "2 Oc1ccc(cc1)CC([NH3+])C\n",
+ "3 O=C1NC(=NC(=C1)CCC)N\n",
+ "4 Oc1ccc(cc1C1CCCCC1)CC[NH3+]\n",
+ "Name: SMILES, dtype: object"
+ ]
+ },
+ "execution_count": 30,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "print(f\"Number of molecules in train set: {len(X)}\")\n",
+ "X.head()"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 31,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhgAAAGJCAYAAADIVkprAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAANjBJREFUeJzt3Ql4FEX6x/E3HAlEJKiBcMjKAi6IByCXYVdRQVC8UFwRUSJg1ntVFBVXCYiKimI8UJAVvFDwQPFaPCJ4oiAInqAoCh5AUCEYhGAy/+dX+5/ZmUkCOYpc8/08T0Omp7unpqdn+u2qt6rjAoFAwAAAADyq5XNjAAAABBgAAGC3oAYDAAB4R4ABAAC8I8AAAADeEWAAAADvCDAAAIB3BBgAAMA7AgwAAOAdAQYq3NixYy0uLq5CXuvII490U9CCBQvcaz/99NMV8vrnnHOOtWrVyqqy3377zc4991xr2rSp2zeXXXZZhe2bBg0a7NbPu6y+/fZbty8eeughq05UZn2/ykLHqT4TwBcCDJSLfoD1oxac6tWrZ82bN7d+/frZ3XffbVu2bPGyh3/88Uf3w7ls2bIq94lV5bKVxM033+w+xwsuuMAeffRRO/vss3d6EjrhhBMqtHw17TtS3FTVA9HdHeRmZGTYQQcdZHvssYfts88+1qlTJ7v00kvd96u0Pv/8c/edVKCIylOnEl8bNcgNN9xgf/7zn23Hjh22bt06V1OgK+FJkybZ888/b4ccckho2euuu86uueaaUm1fPzLjxo1zP8L64SmpV1991Xa3nZVt2rRpVlBQYFXZG2+8YYcddpj7gcd/7bfffvb7779b3bp1y71LjjjiCBe4hVONUffu3e0f//hHaJ6P2hyVuU6dsv2sr1y50mrVqvhrTv1maB+tWLHC0tLS7JJLLnEBx2effWaPP/64nXLKKe6ipbQBhr6Tqs2K5cCtshFgwIvjjjvOunbtGno8evRod+LS1e5JJ51kX3zxhdWvX/+/B12dOmX+ESyprVu3WmJiosXHx1tl8nGC2t02bNhgHTp0qOxiVCnB2jgfWrdu7aZw559/vpt31llnFbveH3/84YLT0hzD5SlzQkKCVYbnnnvOPvroI5s5c6adeeaZEc9t27bN8vLyKqVcKD+aSLDbHH300Xb99dfbd999Z4899thOczBee+01+9vf/maNGjVyV3Lt2rWza6+91j2n2pBu3bq5v4cNGxaqUg62j+sqRVWrS5YscVdCCiyC6xbXJp+fn++WUd6BqmQVBK1du7ZEbdLh29xV2YrKwcjNzbUrrrjCWrZs6X7U9V5vv/12i76xsbZz8cUXux9gvT8te+CBB9q8efNKHDiMGDHCUlJS3ImnY8eO9vDDDxfKR1m9erW99NJLobKXt1r57bfftr///e/2pz/9yZVZ7/Pyyy93V9dF+eabb1yTmj4HXamqNix6X+hEm5mZ6d6/3ove03nnnWe//vrrLstzzz33uPV0XOy1114uENaVcWlzMII5Iz/88IMNGDDA/d24cWO78sor3fFUHsHX03Gg99mmTRu373QlrhPsmDFjrEuXLpaUlOT20+GHH27z58/fZQ5G8Lu2atUqV359v7QNHasKwnd2vAebdt59910bOXKke696bdUoZGdnF/p89Fr6/LSfjzrqKFf2kuR1fP311+7/v/71r4We02fdsGHDiHmq6TjttNNs7733ds/r81QtaXi5dfyJyhE8rnW8o2JRg4HdSu35OpGrqSI9Pb3IZVQVqpoONaPo5KIfVv0g6odNDjjgADdfP7KqUtaPq/Ts2TO0jZ9//tnVopxxxhnuqlAnoJ256aab3I/O1Vdf7U7E+lHv06ePy6MI1rSUREnKFk4nTgUzOjno5K8mlVdeecVGjRrlTlx33nlnxPLvvPOOzZkzxy688ELbc889XV7LwIEDbc2aNa6dujg6mSsI0n5UkKLmq6eeesr92G/atMm1bavsqrrXyX/fffd1QY/oRFIeeh2dvJTToTIuWrTIneS///5791w4nZiPPfZY10Rz2223ueBJTTW6etd+DVIwoROHToz//Oc/XVB07733uitfHSfF1RSpiUrL64Sk96wr4o8//tg++OCDQlfLJaHyKhjq0aOHCwZef/11u+OOO1xAoPdbXjNmzHBl1LGk74FOojk5Ofbvf//bBg8e7L5Dymt68MEHXTm0b0vSZHj66ae7Y2DChAm2dOlSt70mTZrYrbfeust11WShwEyfiwIhfVd0TM2ePTuixlKf34knnujKtXz5cve/3ktJmqPkkUcecc2nO0sA12+FApEWLVq4ZlYFPE8++aQL+J555hkX/OgiQ5+5viv67dFxLsH/UYECQDnMmDFDl5qBxYsXF7tMUlJSoHPnzqHHGRkZ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xoxxiZ2dOnWyefPmhRI/16xZ43qWAACA6iMuEAgELIaom6p6kyjhs2HDhlaTdZu6qrKLAM8Wn9eWfVqDrDuRgQJrkqYvvG01XU4pzqFUDQAAAO8IMAAAgHcEGAAAwDsCDAAA4B0BBgAA8I4AAwAAeEeAAQAAvCPAAAAA3hFgAAAA7wgwAACAdwQYAADAOwIMAABQNe6mmp+fbw899JBlZWXZhg0brKCgIOL5N954w1f5AABArAQYl156qQswjj/+eDvooIMsLi7Of8kAAEBsBRizZs2yJ5980vr37++/RAAAIDZzMOLj461t27b+SwMAAGI3wLjiiivsrrvuskAg4L9EAAAgNptI3nnnHZs/f7795z//sQMPPNDq1q0b8fycOXN8lQ8AAMRKgNGoUSM75ZRT/JcGAADEboAxY8YM/yUBAACxHWAEZWdn28qVK93f7dq1s8aNG/sqFwAAiLUkz9zcXBs+fLg1a9bMjjjiCDc1b97cRowYYVu3bvVfSgAAUPMDjJEjR9qbb75pL7zwgm3atMlNc+fOdfPUwwQAAMS2MjWRPPPMM/b000/bkUceGZqnQbfq169vp59+ut1///0+ywgAAGKhBkPNICkpKYXmN2nShCYSAABQtgAjNTXVMjIybNu2baF5v//+u40bN849BwAAYluZmkg0ime/fv1s3333tY4dO7p5y5cvt3r16tkrr7ziu4wAACAWAgzdQfWrr76ymTNn2ooVK9y8wYMH25AhQ1weBgAAiG1lHgcjMTHR0tPT/ZYGAADEVoDx/PPP23HHHefuO6K/d+akk07yUTYAAFDTA4wBAwbYunXrXE8R/V2cuLg4y8/P91U+AABQkwOMgoKCIv8GAADw0k31kUcese3btxean5eX554DAACxrUwBxrBhw2zz5s2F5m/ZssU9BwAAYluZAoxAIOByLaJ9//33lpSU5KNcAAAgVrqpdu7c2QUWmnr37m116vxvdSV2rl692o499tjdUU4AAFBTA4xg75Fly5a5kTwbNGgQei4+Pt5atWplAwcO9F9KAABQcwMM3X9ENRUKJPr27WvNmjXbfSUDAACxk4NRu3ZtO++88yJudAYAAFDuJE/di+Sbb74py6oAACAGlCnAuPHGG+3KK6+0F1980X766SfLycmJmEpr8uTJrtlFd2Pt0aOHLVq0qNhl58yZY127drVGjRrZHnvsYZ06dbJHH320LG8DAABUpZud9e/fP3TPkfDuqsHuq6UZKnz27Nk2cuRImzJligsuMjMzXQLpypUr3bDk0fbee2/717/+Ze3bt3eJpQpyNPaGltV6AACgmgYY8+fP91aASZMmubuyBgfoUqDx0ksv2fTp0+2aa64ptPyRRx4Z8fjSSy+1hx9+2N555x0CDAAAqnOA0atXLy8vrqHFlyxZYqNHjw7Nq1WrlvXp08cWLly4y/VVY/LGG2+42o5bb721yGU0pHn4sOZlacIBAAAVEGDIpk2b7MEHH7QvvvjCPT7wwANt+PDhpRrJc+PGja45JSUlJWK+Hq9YsaLY9TRMeYsWLVzgoF4t9913nx1zzDFFLjthwgQbN25cicsEAAAqKcnzww8/tDZt2tidd95pv/zyi5vU1KF5S5cutd1tzz33dIN9LV682G666SaXw7FgwYIil1XtiAKS4LR27drdXj4AAGJdmWowLr/8cpfgOW3atNBw4X/88Yede+65dtlll9lbb71Vou0kJye7Goj169dHzNfjpk2bFruemlHatm3r/lYvEtWiqKYiOj9DEhIS3AQAAKpBDcbVV18dcS8S/X3VVVe550pKvUC6dOliWVlZoXkFBQXucWpqaom3o3WKun08AACoRjUYDRs2tDVr1riuouHU/KDmi9JQ80ZaWpob26J79+6um2pubm6oV8nQoUNdvoVqKET/a1k1xyioePnll904GPfff39Z3goAAKgqAcagQYNsxIgRdvvtt1vPnj3dvHfffddGjRplgwcPLvW2srOzbcyYMbZu3TrX5DFv3rxQ4qcCGTWJBCn4uPDCC92t4evXr++CnMcee8xtBwAAVA1xAfX1LEP3UgUTGrNCuRdSt25du+CCC+yWW26p0jkP6qaqni5K+FRNTE3Wbeqqyi4CPFt83n9zj1AzrDvx8MouAjxq+sLbNX5/5pTiHFqmGgzlTtx1112uueLrr79289RkkZiYWLYSAwCAGqXM42CIAgrdEyT4NwAAQJl7kahZ5Prrr3fVJLpJmSb9fd1119mOHTvYswAAxLgy1WBccskl7q6mt912W6g7qYb2Hjt2rP3888/06AAAIMaVKcB4/PHHbdasWXbccceF5h1yyCHWsmVL14uELqMAAMS2MjWRqJeImkWi/fnPf3YJoAAAILaVKcC4+OKLbfz4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h4Xmvfrqq/b555+7k4RqA3TlP378eJs8ebILOspbu/Doo4+6K+qkpCRXpb5ly5bQMvPmzbO//e1vruZjn332sRNOOMG+/vrriO18//33NnjwYHdHTe0/3Qn3gw8+cEGQ3v/y5ctdjYGm4A2xwptIevbsaVdffXXENrOzs61u3bru5C3bt2+3K6+80lq0aOFeQze/0423SqNbt27uJnp6j+UNbnRszJ492y644AIX/BV1o68XXnjBvaaOheTkZDvllFPc/COPPNK+++47u/zyy0P7JbqGSTUZmr9ixYqIbd55550uYAj69NNP3fHQoEEDS0lJsbPPPts2btwYsc6JJ55os2bNKtf7BYIIMIBSqlWrlrtrq6rRVUPwxhtv2FVXXVXoCljVzY888oi9++67tmnTJneyCnr77bdt6NChdumll7qAYOrUqe6koXVKStvo0qVLoap4BT86gQQpuMnJyXHlFeVr6IRU2pOuggWd6F988UU3vfnmm+4KPyg3N9dGjhxpH374oWVlZbn9pBNlQUFB6ETbq1cv++GHH+z55593wYT2m55Xlf8VV1xhBx54oGsS0aR50YYMGeJOgIFAIDRPJ+/mzZvb4Ycf7h5ffPHFbj9ouY8//tj+/ve/27HHHmtfffWV+aTPK3jC35knn3zS2rdvb+3atbOzzjrLpk+fHlH+l156ye2n/v3720cffeT2Xffu3d1zc+bMsX333dduuOGG0H6J9pe//MUFajNnzoyYr8dnnnmm+1vH39FHH22dO3d2n4+CwfXr19vpp58esY5ed9GiRS5IA8otACBCWlpa4OSTTy7xXnnqqacC++yzT+jxjBkzdPYIvP/++6F5X3zxhZv3wQcfuMe9e/cO3HzzzRHbefTRRwPNmjULPdbyzz77bLGvqzIOHz48Yl56enqgb9++EfNyc3Pdtl5++WX3+Pvvvw+0a9cuVJai6D0kJSWFHmdkZAQSExMDOTk5oXmjRo0K9OjRo9htZGdnu9f95JNP3OOpU6cG9txzz8DPP/9c5PJ6jY4dOxaaH74fNmzYEKhTp07grbfeCj2fmpoauPrqq93f3333XaB27dqBH374IWIb2t+jR48OlMV+++0XuPPOOwvNnzNnjtuPu9KzZ89AZmam+3vHjh2B5OTkwPz58yPKP2TIkFK9fvTno+fbtGkTerxy5Uq333Tcyfjx4wsdF2vXrnXLaNmg5cuXu3nffvvtLt8XsCvUYACl9Prrr1vv3r1dFfyee+7pqprVm0O1FkF16tRxVd5BuoJVlfYXX3zhHuvqXVelqq4OTunp6e4KNXw7O/P777+7KvXSUrlVnR68Si4pNY3o/QY1a9bMNmzYEHqsGgI1f6i5p2HDhqHEUyWdyrJly9wVtJpHyqpx48bWt2/f0NX66tWrXW2Fajbkk08+cXkouqoP37eqbYlurikv1TpEN0tEW7lypasR0H4JHheqmVFORpD2i46n8lDtmGqm3n//ffdY+0fNbzrugsfb/PnzI/ZJ8Lnw/aLcDinpMQjsTJ2dPgsggn7ElVug9nQ1Z+hk+c4777hES+U4qOdGSai5QDkHp556aqHnSho0qK3+119/jZinhESd0MKpKjz4XHkozyGcmgeCzR/B9vv99tvPpk2b5pos9JwSB4O5H8GTV3kpmPjnP/9p99xzjz3++OOuSUhTcL+qt8aSJUvc/+F0Uq1oCiSUV6P9EaRKGeV13HvvvS6Xxcd+0WerJhDtD+Xk6H8do0HaL/p8br311kLrKlAM+uWXX0KBHFBe1GAApaATl06cGi9AP+S6Ui6qV4BOKmrrDr+SVTv4AQcc4B7r6lLz2rZtW2hS7kJJqDZA+RvhUlNT3VV8eM3Ca6+95moUOnTosNs+a9Xg6P2oq6OuxvU+o4OfQw45xF2tB09i0eLj413tw66oW+62bdtcHoFOpMHai+A+0Tb0/qP3q4/eIKWhY0A5ODpW9L6Dk2oTFHA88cQTof2ivIvilHS/aD8oH0U1Ot98801Ezo+ON+XgqFYper8oETY8EVQ5HwpegfIiwACKoLEAwk8KmtQLRD/IO3bscFfP+hFXr4opU6YUebWvbonqIaGgRGNrKCAJNkuo26hOPqrF0A+/mk6UlKgTdEkpeVPrhp/I1XygQELNNjqRvfLKK26bF110Uag3hJIsVT0eXdNRHnvttZfrOfLAAw/YqlWrXOKrEj7DqZlAJ3mNMaLEV+2/Z555xp0QRSc/NXloX6t3Q3GJhjohahvXX3+922/B5gdRwKcTrRJolSCp7el9TpgwwSVTlpRqXYKfu/7WPtPfem9Bzz77bKiZoShKhNVno9ot1eSETxpjI9hMkpGR4YIN/a/3owAxvKZB+0U9ZFSG6F4f4VQbpl49qrk46qijImpN9PkrsNO+Wrx4sWsW0bExbNiwiOBFicM6hgAvdpmlAcRgkqe+GtHTiBEj3POTJk1yyZj169cP9OvXL/DII4+453/99deIBLxnnnkm0Lp160BCQkKgT58+LgEx3Lx581wCoLbTsGHDQPfu3QMPPPBAiZM8RetMmTIlYp4S9I477ji3XSUUXnHFFS65MGj16tVu2+GJhiVJ8oxOwFRioRIQg1577bXAAQcc4N7vIYccEliwYEGh96CyDRw40L1fJY127do1lGy6bds291yjRo3ceipDcftBCauaf8QRRxQqe15eXmDMmDGBVq1aBerWres+q1NOOSXw8ccfR+zb4PaLEtxH0VOvXr0i9tHOfkJPOOGEQP/+/Yt8Tu9Z6yqpUnSsdOrUKRAfH+8+s1NPPTW07MKFC93+1H4Nvl705xN0+umnu2WmT59e6Lkvv/zS7QftXx0b7du3D1x22WWBgoIC9/zvv//utqnXA3yI0z9+QhUAFU1X5RqpU1XbJW1aiXWq1VBNh5qXNE4J/uv+++93tTIaSwXwgSRPoBrTwE3qvaHqcw36hZINUPaPf/yD4KKIZj01/QG+UIMBAAC8o04VAAB4R4ABAAC8I8AAAADeEWAAAADvCDAAAIB3BBgAAMA7AgwAAOAdAQYAAPCOAAMAAJhv/wdoKP7qWP4zFQAAAABJRU5ErkJggg==",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "Label\n",
+ "0 391\n",
+ "1 292\n",
+ "Name: count, dtype: int64\n"
+ ]
+ }
+ ],
+ "source": [
+ "plt.figure(figsize=(6, 4))\n",
+ "y.value_counts(normalize=True).plot(kind='bar', color=['#3498db', '#e74c3c'])\n",
+ "plt.title('Distribution of Labels in Training Set')\n",
+ "plt.xlabel('Label (0: Inactive, 1: Active)')\n",
+ "plt.ylabel('Proportion')\n",
+ "plt.xticks(rotation=0)\n",
+ "plt.show()\n",
+ "\n",
+ "print(y.value_counts())"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 32,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+gAAAH0CAIAAAAhSpB6AAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzde1zM2f8H8PfU6EpIurgUWbdcQoSyueUSxS5yWdva9aXF2r52sbXWane/azeWFYufXDfsssVaFaHcKtpsoVUukbtEN93LNHN+f5xMI7doZj4z9Xo+/NF85tOc9zzMTK85n3MRMcYIAAAAAAA0m47QBQAAAAAAwKshuAMAAAAAaAEEdwAAAAAALYDgDgAAAACgBRDcAQAAAAC0AII7AAAAAIAWQHAHAAAAANACCO4AAAAAAFoAwR0AAAAAQAsguAMAAAAAaAEEdwAAAAAALYDgDgAAAACgBRDcAQAAAAC0AII7AAAAAIAWQHAHAAAAANACCO4AAAAAAFoAwR0AAAAAQAsguAMAAAAAaAEEdwAAAAAALYDgDgAAAACgBRDcAQAAAAC0AII7AAAAAIAWQHAHAAAAANACCO4AAAAAAFoAwR0AAAAAQAsguAMAAAAAaAEEdwAAAAAALYDgDgAAAACgBRDcAQAAAAC0AII7AAAAAIAWQHAHAAAAANACCO4AAAAAAFoAwR0AAAAAQAsguAMAAAAAaAEEdwAAAAAALYDgDgAAAACgBRDcAQAAAAC0AII7AAAAAIAWQHAHAAAAANACCO4AAAAAAFoAwR0AAAAAQAsguAMAAAAAaAEEdwAAAAAALYDgDgAAAACgBRDcAQAAAAC0AII7AAAAAIAWQHAHAAAAANACCO4AAAAAAFoAwR0AAAAAQAsguAMAAAAAaAEEdwAAAAAALYDgDgAAAACgBRDcAQAAAAC0AII7AAAAAIAWQHAHAAAAANACCO4AAAAAAFoAwR0AAAAAQAsguAMAAAAAaAEEdwAAAAAALYDgDgAAAACgBRDcAQAAAN7cjRv0zjtPHfnoIzp7tvppBw7QiBGUkVF5899/6aOP1FEe1CUI7gAAAABvrrCQTpx46sjp05STU/20e/foxAmaN6/yZl4exceroTqoUxDcAQAAANRhxAg6e5YiI4WuA7SWWOgCAAAAALSbVEqnTlXdLCt7/mn6+rRiBc2dSykp6qkL6hoEdwAAAIBaKSujgICqm8+Ok5F75x3atImWLqVhw9RQF9Q1CO4AUCOXL1/29/fPzs728/Mbhj84AAAKjI0pPLzqZseOLzt5zRrq3ZvatVN1UVAHIbgDwMukpqZGRESEh4efPn2aMUZEJ06ciI6OHjx4sNClAQBopXbtaN48+vZbMjAQuhTQNgjuAFBdRUVFTExMWFjY/v37b968yQ8aGxvb2NjcvXu3oKDgnXfe2b9//6BBg4SsEgBA4/3wA6Wmkq4urVv31HE/P/r998qf79yh1q3VXxpoJawqAwCVSkpKwsPDP/7445YtWw4dOnT16tU3b940MzPz8vIKCQl58OBBampqdnb2hx9+WFBQMHLkyL179wpdMgCA8CwsyM/vqSNz51K7dlRRQQ4O9Ntv1L8/7d1LPXpULfeur0/bttHMmfTnn9S+PW3bpv6qQSuJ+LVvAKi3srKyIiMjQ0NDo6KiysvL+UFbW1t3d3dPT08nJycdnae+4TPGPv/888DAQF1d3Y0bN06fPl2IqgEAtIafHw0d+vzZqMuWkZ8f6ehQUBDNmKH2ykDbYKgMQD11/fr18PDw0NDQ+Ph4mUxGRDo6Og4ODu7u7pMmTercufOzv5KRkVFSUvLWW2+tWrXK0tLSz89vxowZeXl58+fPV3v5AADaISaGbt0iV9fn3+vrS2IxLVhA3t5UWkqffqre4kDboMcdoB6RSqXx8fERERH79++/fPkyP2hoaOjs7Ozu7j5x4kQrK6sX/W5+fv6gQYPu379/6NChHj16ENHatWv/+9//ymQyX1/fAMWF0AAAgIiItm6lxERatYr09V922oYNNGcOEdHPP1dtrQrwLAR3gLqvtLQ0Ojo6IiIiLCwsMzOTH2zWrNmoUaM8PDzc3NwaNmz4ygcpLi6eMGHCoUOHmjRpEh4ePmDAACLauXPn9OnTJRLJ7Nmz165dW21QDQBAfZabS19+WfnzyJH07rsvO3nTJpo1i2Qy+v57+uorNVRHRHT5MhUWUp8+lTfv3KFHj6hbNzW1Dm8AwR2gzrpw4UJQUNDNmzePHj1a9mQfvw4dOrzzzjtjxozp37//6+bsx48f84mqRkZGe/bscXNzI6Lw8PBJkyaVlpZOmTIlODi4QYMGyn8mAAD1wJYt5O1NMhl9+y0tWaKOFufOpQ0b6J9/qGdPIqJffqHYWAoJUUfT8GYQ3AHqpj179kycOJG/wXV0dHr27Onu7u7h4eHg4FCbh5VKpXPmzNm4caNYLN68efO0adOI6OTJk2PGjCkoKBg9ejSP9cp5DgAA9cyuXfTBB1RRQb6+pIYRiHPn0smTZGRE8fGko4PgrgVwXRugboqLi2OMGRsbL126NCMjIzEx8ZtvvqllaiciXV3dDRs2+Pv7V1RUfPTRR4GBgUQ0cODAY8eONW/e/MCBA0OGDMnNzVXGMwAAqHemTKHgYBKLadky8veXqqFFT08SiWjDBjU0BUqA4A5QN128eJGIgoODFy1aZGFhocRHFolE33zzDY/sn332mZ+fHxE5ODjExMS0bt06ISFh4MCBGRkZSmzxJf7888+FCxempaWppzmo50pKSoQuAeq+996jXbvIxITCw30XLFig6uZEIvrlF/r6a3oyAQo0GoI7QB0kk8nOnDlDRP369VNRE//9739//fVXsVi8bNmyTz/9VCaTderUKS4urmPHjikpKQMGDEhPT1dR01KpNC4uzs/Pr3PnzuPHj1+xYkWXLl1iYmJU1BzUc9nZ2aGhoW5ubnp6elZWVvv37xe6Iqj7JkygnTtPpab+snLlys8++0yJo5oZo+RkWraMhgyhAwcqD/bpQxMn0hdfKKsRUCGMcQeog5KTk3v06NG2bdvr168T0Zw5c0pKSr7++ut27dopt6H9+/dPnjy5rKzs/fff37Ztm1gszs3NHTVqVEJCgpWV1eHDh7spb3mC4uLiQ4cOhYWFHThwICcnhx80MjKSSCQSicTc3DwyMrJXr17Kag7qs9LS0lOnTkVFRUVHR58/f55vdMAZGhr+888/Xbp0EbA8qCciIyPHjRtXVlbm7e39f//3f7VZtisnh44do+hoioykO3cqD86eTTo6ZGFBX39NeXnUuTMNH05lZRjjrtkYANQ569evJ6KpU6cyxmQymampKRHdunVLFW0dO3asUaNGROTh4VFSUsIYKywsdHV1JaKmTZuePn26lo+flZUVHBzs6empuGalra2tj49PVFSURCLJysoaMWIEETVs2DAqKkoZzwnqqfT09KCgIE9PT/6S5gwNDV1dXX/44YetW7fyjcmaN2/+77//Cl0s1AuHDh0yNDQkohkzZkil0tf63YoKlpjIAgKYqytr0IARVf4zN2eeniw4mOXksE8+Yd99V3n+tm1MR4d5eir/WYASIbgD1EHvv/8+Ea1bt44xlpqaSkQtWrRQXXNnzpwxMzMjooEDB+bn5zPGysrKxo0bR0TGxsaHDx9+g8dMT08PDAx0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",
+ "text/plain": [
+ ""
+ ]
+ },
+ "execution_count": 32,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "mols = [Chem.MolFromSmiles(smiles) for smiles in X.head(8)]\n",
+ "labels = [f\"Label: {l}\" for l in y.head(8).values]\n",
+ "\n",
+ "# Plot them in a grid\n",
+ "img = Draw.MolsToGridImage(mols, molsPerRow=4, subImgSize=(250, 250), legends=labels)\n",
+ "img"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 33,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "image/png": "iVBORw0KGgoAAAANSUhEUgAAAq4AAAHWCAYAAAC2Zgs3AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAUkRJREFUeJzt3QmcVfP/x/HPTE3TTPuiTVoQTUUUki0SST+yZovQDxFaCNmXyBr5acGP4mdJ2UNICJVUZKmRopRU06B9mpa5/8f72//c7p1mpllu3XNmXs/H49a959577veec+7cz/2cz/f7TQiFQiEDAAAAfC4x3g0AAAAACoPAFQAAAIFA4AoAAIBAIHAFAABAIBC4AgAAIBAIXAEAABAIBK4AAAAIBAJXAAAABAKBKwAAAAKBwBWIoSZNmtill14a9206ZswYS0hIsMWLF1vQaXtquxb3uZUrV7Z4bvfjjz/eXfYEvfbdd98dvq3rWpaZmVmqj/+gHe/efikL7xWINQJXlBneH3xdvvrqq53u1+zH++yzj7v/X//6V1zaiPjYuHGjCyY+//xzX+yCadOmufasXr3a/MbPbSutx0Np9MEHH0T9yAIKi8AVZU7FihXtlVde2Wn5lClT7I8//rDk5OS4tAt5e/bZZ23+/Pm7PVC55557dkug8vHHH7tLUYNDtaeowWFWVpbdfvvttjsV1DbtJ+2vPe3iiy92771x48a+Px5E+0jt9cN7jWfgqm0MFBWBK8qcU0891caPH29bt26NWq5gtm3btlavXr24tc2v9EUeL0lJSYH+MVGhQgV32V1ycnJs06ZN4R9l5cuXt3jRftL+2tPKlSvn3ntxT7+X1IYNG4r0eO0jtTeI7xWINwJXlDkXXHCB/fXXXzZp0qTwss2bN9vrr79uF154Yb5fTDfccIMrJdCX84EHHmiPPvqoKy/YFWWm+vXrF37u/vvvbw899JALOCLp9rBhw+yggw5yX0x77bWXnXLKKTZr1ix3v2ra9GWlkodd1Tbm5Z133rGuXbtagwYNXDv2228/u++++2zbtm1Rj1M9ZqtWrWz27Nl23HHHWWpqqt166615rvPdd991r/3DDz+El73xxhtu2VlnnRX12LS0NDvvvPOilr300kvux0JKSorVrFnTzj//fFu6dOkua1y1/5R5qlq1qlWvXt169uxp33//fb7bZ9myZXbGGWe4eldt1xtvvDH8vrVdtUyUAfLKSXa1PefOnWsdO3Z0bW/YsKENHjx4p32aX43rf/7zH2vZsqXbtjVq1LDDDjssfBZArztw4EB3vWnTpuH2eDWNun7ttdfayy+/7Nahffnhhx+G78ur3apx7d69u9tetWrVsr59+4aD3aIcW7tqW141rr/99pude+65bv/q/R555JH2/vvvRz1GmU2tZ9y4cXb//fe77anPwIknnmgLFy604tR9qi0q+VFZ0BFHHOHWt++++9qLL75Y4Lp2dTx4ddO//vqr+xFcpUoVu+iii9x9X375pXuvjRo1cvtFn/n+/fvvlF3Nq8bV269vv/22+/zp+dq/3r6N1XvVZ7VDhw5Rx+3o0aMLVTe7YsUKu+yyy9zz1L769etbt27ddnrexIkT7dhjj7VKlSq57aO/O/q8eLQNhw8fHn7f3gUojPj9NAfiRH/k27dvb6+++qp16dIl/Id2zZo1LnB68sknox6v4PT000+3zz77zHr16mWHHHKIffTRR+4LXAHR448/XmCmUl8SetxVV13lvtB0qnXQoEG2fPlye+KJJ8KP1br1paQ2/fvf/3YZYX0Rfv311y6wKSmtW1+4AwYMcP9/+umnduedd9ratWvtkUce2SkwVDu0PXr06GF169bNc53HHHOM+8L54osv7OCDD3bL1ObExMSoOuJVq1bZzz//7L6YPQpQ7rjjDhdQ6f3qMQroFCx/9913LiDNi4LD0047zb755hu7+uqrrXnz5i4oV/CaFwWonTt3tnbt2rkfG5988ok99thjLnDX8xWkjBw50l0/88wzwwG3937y+wI/4YQT3D665ZZb3Bf0M88844KBXdGp9Ouvv97OOeeccACpYGLGjBnuh5Ne/5dffnHHp46t2rVru+d5wZRo3ynI0/bU/bvqvKZtrMcMGTLEHU86xv/5559dBnG5FaZtkVauXGlHHXWU+xzoPStofuGFF9znST8Utb0jPfjgg+7Y0Q8LfR4ffvhhFxRq2xSHgl5tZ322dHw8//zzLmjSjyUFhXkpzPGg/a5jSse/jikF5KIzOXqveq7eq45RHdMqQdJ9u6LPzJtvvmnXXHONC/i0n84++2xbsmSJW19J36v+Dum41WdWf4N03P73v/8t9BkNtUUB6HXXXeeOp4yMDJcAUPu8Y/B///ufe31tH/1A1/bQ9tS20udaj9Pfwj///NM9V48HiiQElBGjR49WejQ0c+bM0FNPPRWqUqVKaOPGje6+c889N3TCCSe4640bNw517do1/Ly3337bPW/w4MFR6zvnnHNCCQkJoYULF4aX6bk9e/YM377vvvtClSpVCv3yyy9Rz73llltC5cqVCy1ZssTd/vTTT91rXH/99Tu1Oycnx/2/aNEi9xi9j9y0/K677trpveo5Hu+9RrrqqqtCqampoU2bNoWXdejQwT131KhRocJo2bJlqHv37uHbbdq0cdtT60hPT3fL3nzzTXf7+++/d7cXL17s3v/9998fta4ff/wxVL58+ajl2p7arp433njDreuJJ54IL9u2bVuoY8eOO20fPVfL7r333qjXOfTQQ0Nt27YN3161atVO27Ag/fr1c4+fMWNGeFlGRkaoWrVqO213bU9dPN26dXPbrCCPPPLITuvxaHliYmJo7ty5ed4X+R50XctOP/30qMddc801UfujKMdWQW3Lffx72+nLL78ML1u3bl2oadOmoSZNmrj9Jp999pl7XFpaWig7Ozv82GHDhrnlOi4KktfxrrZo2RdffBG1j5KTk0M33HBDgesr6Hjwjil9hnPL6zM2ZMgQ93fi999/32m/RNLtChUqRP090f7R8v/85z8xea/XXXeda8t3330XXvbXX3+Fatasme8+9fzzzz/uMdr/+dG+rV69euiKK66IWr5ixQr32Yhc3qdPn522AVAYlAqgTFIGSqfv3nvvPVu3bp37P78yAXUiUF2ZMkaRVDqg7xtla/OjLItOmel0sE7XepdOnTq5TKAylZGn1++6666d1hGrU2iR2UC9Z7VDbVNGRNnQSMrA6JRgYWgdyrJ669Up+yuvvNJl47zl+l8ZVJ0CFWWVlDnVfojcLqovbtasmctu50enTlVHecUVV4SXKUvXp0+ffJ/Tu3fvndqsU9jFpWNCp7x1WjYyU+edMi6ItoMycDNnziz26yuL36JFi0I/Pve2UcbMex+7k9avbaRsm0fZfh0fOr08b968qMfrmIusB9Z+kuLuK20jbx3ePlKZT0n2vUdZ1YI+Yyov0jGtjLP+TijbuCv6u6AzAR5leVXeUZj2Fua96rOjs006a+RRCUdhjlu9N+0blXUoW58XZVBVGqVyrMjPtf5+6oxHQZ9roLAoFUCZpD/q+pJQXaECNwWR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AAAA9lzgOnr06OK9GgAAALAna1xl69at9sknn9jTTz9t69atc8v+/PNPW79+fXFXCQAAAMQ2cP3999/dFK/dunWzPn362KpVq9zyhx56yG688cbirBIAAAA+sLVCRRt226N2vJnlVKhggQ9cNQHBYYcdZv/884+lpKSEl6vuVbNpAQAAIJhC5crZwhaH2BRv+teg17h++eWXNm3aNDeea6QmTZrYsmXLYtU2AAAAoGSBa05Ojm3btm2n5X/88YdVqVKlOKsEAACADyRu2WLHfvyO5ejGli0W+FKBk08+2Z544onw7YSEBNcp66677mIaWAAAgAArt3WzdX/hPzZcgeLWrRb4jOtjjz1mnTt3thYtWtimTZvswgsvtAULFljt2rXt1VdfjX0rAQAAUOYVK3Bt2LChff/99zZ27Fj74YcfXLa1V69edtFFF0V11gIAAADiGri6J5Yvbz169IhZQwAAAICYB64vvvhigfdfcsklxVktAAAAENvAVeO4RtqyZYtt3LjRDY+VmppK4AoAAAB/jCqgiQciL6pxnT9/vh1zzDF0zgIAAIB/Ate8NGvWzB588MGdsrEAAAAIjq1JyTbqxsHWVWP3JyVZqQxcvQ5bf/75ZyxXCQAAgD0oVL68zT30SPtAN8oXux//blGs1rz77rtRt0OhkC1fvtyeeuopO/roo2PVNgAAAKBkgesZZ5wRdVszZ+21117WsWNHNzkBAAAAgjvla7spH9k6H075WqzANSfHzV4LAACAUjjla49nHjGN1j/HZ1O+xrTGFQAAAPBVxnXAgAGFfuzQoUOL8xIAAABAyQPX7777zl008cCBBx7olv3yyy9Wrlw5a9OmTVTtKwAAABC3wPW0006zKlWq2AsvvGA1atRwyzQRwWWXXWbHHnus3XDDDTFpHAAAAFCiGleNHDBkyJBw0Cq6PnjwYEYVAAAAgH8C17Vr19qqVat2Wq5l69a5wRMAAACA+AeuZ555pisLePPNN+2PP/5wlzfeeMN69eplZ511VmxbCAAAgD065etz199h55aWKV9HjRplXbp0sQsvvNAaN27sLrp+yimn2IgRI2LfSgAAAOyxKV/ntOtgr5eWKV9TU1NdgPrII4/Yr7/+6pbtt99+VqlSpVi3DwAAACj5BATLly93l2bNmrmgNRQKlWR1AAAAiLOErVvtkBlT7BzdKA0zZ/3111924okn2gEHHGCnnnqqC15FNa4MhQUAABBc5bdkW68n77PxChS3bLHAB679+/e3pKQkW7JkiSsb8Jx33nn24YcfxrJ9AAAAQPFrXD/++GP76KOPrGHDhlHLVTLw+++/F2eVAAAAQOwzrhs2bIjKtHr+/vtvS05OLs4qAQAAgNhnXDWt64svvmj33Xefu52QkGA5OTn28MMP2wknnFCcVQJATKmUKTMzs0TrSE9Pj1l7AABxClwVoKpz1qxZs2zz5s1200032dy5c13GderUqTFoFgCULGhtnpZmWRs3shkBoKwHrq1atbJffvnFnnrqKatSpYqtX7/ezZjVp08fq1+/fuxbCQBFoEyrgtbug0danabNir3t5k+dbJNGDGHbA0BQA9ctW7a4GbI0e9Ztt922e1oFADGgoHXvtNbFfn7GogXsBwBlzrbyFeylKwfaJ888Ytf7bOasInfO0jBYP/zww+5pDQAAAOIqJynJZnTobC/oRlJS8EcV6NGjhz333HOxbw0AAACQj2Llf7du3WrPP/+8ffLJJ9a2bVs33WukoUOHFme1AAAA8MGUry2/+9pO9eGUr0UKXH/77Tdr0qSJ/fTTT9amTRu3TJ20ImloLAAAAAR3ytfej95uvc1sjs+mfC1S4KqZsZYvX26fffZZeIrXJ5980urWrbu72gcAAAAUvcY1FApF3Z44caKbRQsAAADwZees/AJZAAAAwBeBq+pXc9ewUtMKAAAA39W4KsN66aWXWnJysru9adMm6927906jCrz55puFWt+QIUPcY3/++WdLSUmxo446yh566CE78MADw4/Ra9xwww02duxYy87Ots6dO9uIESOoqwUAAChjipRx7dmzp9WpU8eqVavmLhrPtUGDBuHb3qWwpkyZ4qaJ/frrr23SpEluVq6TTz45qm62f//+NmHCBBs/frx7/J9//ummlwUAAEDZUqSM6+jRo2P64h9++GHU7TFjxrjAePbs2XbcccfZmjVr3EQHr7zyinXs2DHchrS0NBfsHnnkkTFtDwAAQFm3rXwFG9fzOpvywn+sV9CnfN2dFKhKzZo13f8KYJWF7dSpU/gxzZs3t0aNGtn06dPzXIfKCdauXRt1AQAAQOGnfP3y5G42orRM+bo75OTkWL9+/ezoo4+2Vq1auWUrVqywChUqWPXq1aMeq3FjdV9+dbOR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6lC1atVCn3/+eWj58uXhy8aNG8OP6d27d6hRo0ahTz/9NDRr1qxQ+/bt3cWzdevWUKtWrUInn3xyaM6cOaEPP/wwtNdee4UGDRrEtveZW265xY0YsWjRotAPP/zgbqvn6Mcff+zuZ1+XfpGjCgj7vHS54YYb3N9zfcanTp0a6tSpU6h27dpuxBhhf5cu33zzTah8+fKh+++/P7RgwYLQyy+/HEpNTQ299NJL4cc8+OCDoerVq4feeecd93e/W7duoaZNm4aysrLCjznllFNChx56aGjGjBmhr776yo1CcsEFF5SobQSu2C30myivy+jRo8OP0cF9zTXXuGGT9IE488wzXXAbafHixaEuXbqEUlJS3B9J/fHcsmULe81nLr/88lDjxo1DFSpUcD8uTjzxxHDQKuzrshe4ss9Ll/POOy9Uv3599xnfe++93e2FCxeG72d/lz4TJkxwySMNcdW8efPQM888s9OQWHfccUeobt267jH6uz9//vyox/z1118uUK1cubIbyvKyyy5zw+iVRIL+KX6+FgAAANgzqHEFAABAIBC4AgAAIBAIXAEAABAIBK4AAAAIBAJXAAAABAKBKwAAAAKBwBUAAACBQOAKAACAQCBwBeA7n3/+uSUkJLh5rveUu+++2w455BALAm2bt99+O27bc/Pmzbb//vvbtGnTbHc4/vjjrV+/fhZPeo9NmjSxWbNmxbUdAKIRuAIosUsvvdQFRr17997pvj59+rj79BjExvLly61Lly5xC9xHjRplTZs2taOOOiq8TPvYu1SqVMmaNWvm9vns2bNL3DYFkE888YTtSRUqVLAbb7zRbr755j36ugAKRuAKICb22WcfGzt2rGVlZYWXbdq0yV555RVr1KhRmdjKW7Zs2SOvU69ePUtOTrZ40CzhTz31lPXq1Wun+0aPHu2C6rlz59rw4cNt/fr11q5dO3vxxRctiC666CL76quv3PsB4A8ErgBiok2bNi54ffPNN8PLdF1B66GHHhr12OzsbLv++uutTp06VrFiRTvmmGNs5syZBa5fAcSxxx5rKSkp7nX0/A0bNkStU9kx3aegTqeyn3vuOXffmDFjrHr16lHr06l2ZQfzo/acdNJJVrt2batWrZp16NDBvv3226jH6PkjR460008/3WUZ77///p3WoyCvVatWO72uspaeTp062e233x6+/c4777jtqW2z77772j333GNbt27Nt1RAp+yVLdXjDzvssPBrzJkzJ6otyn7q/tTUVJctnT9/fnj76DW+//77cNZUy/Kidfz666/WtWvXne7TNlZQrQzpySefbK+//roL/q699lr7559/3GP++usvu+CCC2zvvfd27TjooIPs1VdfLbBs4Pfff7f+/fuH2+Z54403rGXLlm5/6zUfe+yxqOdq2QMPPGCXX365ValSxR2LzzzzTFQ5gNpWv359t+0aN25sQ4YMCd9fo0YNO/roo90PMgD+QOAKIGYUICjr5nn++eftsssu2+lxN910kws6XnjhBRcMKsjs3Lmz/f3333muV4HSKaecYmeffbb98MMP9tprr7lAVkGH55JLLnEB0JNPPmnp6en29NNPW+XKlYv9XtatW2c9e/Z0r/P111+7U9+nnnqqW577FPuZZ55pP/74o3v/uSngnTdvnq1atcrdnjJliguGVXfqZWmnT5/uAjT58ssv3Xvp27eve57eh4LIvIJiWbt2rZ122mkuANS2vO+++/I9vX3bbbe54E51m+XLlw+397zzzrMbbrjBBYHKmOqiZXlR+w444AAXCBaGAk5ts0mTJoWz8G3btrX333/ffvrpJ7vyyivt4osvtm+++SbP5+vHT8OGDe3ee+8Nt80LoLt3727nn3++2/baD3fcccdOAbfer4L17777zq655hq7+uqrwwG7jpV3333Xxo0b55a9/PLLLtiNdMQRR7j3DMAnQgBQQj179gx169YtlJGREUpOTg4tXrzYXSpWrBhatWqVu0+PkfXr14eSkpJCL7/8cvj5mzdvDjVo0CD08MMPu9ufffZZSH+e/vnnH3e7V69eoSuvvDLqNb/88stQYmJiKCsrKzR//nz3+EmTJuXZvtGjR4eqVasWteytt95yz/HcddddodatW+f7Hrdt2xaqUqVKaMKECeFlen6/fv0K3DY5OTmhWrVqhcaPH+9uH3LIIaEhQ4aE6tWr525/9dVXbnts2LDB3T7xxBNDDzzwQNQ6/ve//4Xq168f9bpqv4wcOdKtX9vB8+yzz7rHfPfdd1Hb85NPPgk/5v3333fLvOft6v17+vbtG+rYseNOyyPbFEnr130PPfRQvuvs2rVr6IYbbgjf7tChg3sdT+PGjUOPP/541HMuvPDC0EknnRS1bODAgaEWLVpEPa9Hjx5R+6JOnTpum8l1113n3ouW52fYsGGhJk2a5Hs/gD2LjCuAmNlrr73cKWRlvZR51XVlF3NnT5Vl1ClYT1JSkstsKVOaF53C1jqVQfUuytDm5OTYokWL3CnxcuXKuexmrKxcudKuuOIKl2lVqUDVqlVdzeaSJUuiHqdsXkF0avu4445zGVb16lcWVZk/lTb8/PPPLgN7+OGHu9Pm3ntVdjHyvaodyjRu3Lhxp/UrU3jwwQe7U90ebcu86HEenR6XjIyMIm0X1TBHvtaubI9pt28H2bZtm8sKK0Ncs2ZN9/4++uijnbbrruhYiTyGRLcXLFjgXiOv96w2qJTBe8/qPKZj58ADD3SlJx9//PFOr6PSlLy2O4D4KB+n1wVQSun0s3cKXx10YkEB41VXXeWCi9xUt7hw4cICn5+YmBgOoArbkUplAqrHHDZsmKt9VB1l+/btXV1kJNW27orKAFRbqVPOqvdVEOwFswpcIwNuvVfVm5511lk7racoAWNe9APB4wWSCv6LQj9EdGq+sLwfIxqFQB555BG3TTVKgIJXbT8NfZV7u8ZK5Hv23rf3nlVHrB8+EydOtE8++cSVHqjeWLW5HpWv6AcZAH8g4wogplSLqiBEgaGyorntt99+bqihqVOnhpfpseoM1aJFizzXqQBDmUrVwua+aF0KgBSMKAjMiwIP1VlGdubK3XEpN7VPgbLqWr0OQJmZmVYcXp3r+PHjw7Ws+l/Bkl7HW+a9V2VR83qvCsBzU7ZQgaQyuJ5ddXTLi7ZjZKYyPwq8lSnO/UMgPwpQFagrIBS9327dulmPHj2sdevWrvPZL7/8UuS2paWlRR1D3rpVf6vse2GpbarnffbZZ13ttGqvI2utVYebu3MhgPghcAUQUwoalGVToJZXAKEMmzrIDBw40D788EP3OJ0K1+nYvIZYEnU2Us95ZXIVcOp0sHree5lddahRhlTZXvWoVxZN2Ux1uhENyaRT8bfeeqsrVdAQXfn1mveoROB///ufey8zZsxwveN12rg4dLpaPdT1upGBq9qqgDPylPedd97pho9S1lXDMOn11as9ctSBSBdeeKEL2tXJSY/VafdHH33U3VfQqAm5aRt6ZRcK0CMD4UgnnHCCywrnNUSUSiFWrFjhRgFQZ6xzzjnHvWeNvOCN6qDtqvu0P9VeZdJVlrGrtn3xxRe2bNmy8I8HdSabPHmyKztQ4KuOfhrBQWOvFtbQoUNdhz4F4lqHfliolCByBAplyTVCAgB/IHAFEHPKYumSnwcffNCNEKDe5Mow6lS/Ai4Fd/kFfsqmKrjQkFjKgCnAa9CgQfgxCo4UKKl+tHnz5i4Y9jKsqqV86aWX7IMPPggPv6Re6AXRUFoawkntUzu94buKQwGk2q3/NfSX9560jVQjG1luoCz1e++95+otVft65JFH2uOPP+7KFfKidUyYMMEFnBoSSyMHaNsUtbRA+0PZcgWmylDnN0RVrVq13CgK6oGfm0aQUO2str9+nKh+VaMFKLj2KADXNtX7VPCuQPGMM84osG2q+V28eLHL1nun7bUO/TBRUK/hxvSe9biiTHShkREefvhhtw+0rfUaOka8zLZGe1izZo07rgD4Q4J6aMW7EQCA2FFQqSBSQVdxs8QF0ZBkGuNW2euSDDnmdyohUDmDMvUA/IHOWQAQcCotUK2oBvXXqAQqrVBHo90RtHrZ4oceesiVFiiDXRqpTlvvTePQAvAPMq4AEHA63T1ixAhXX6pT9Tr1rgkLvCG2AKC0IHAFAABAINA5CwAAAIFA4AoAAIBAIHAFAABAIBC4AgAAIBAIXAEAABAIBK4AAAAIBAJXAAAABAKBKwAAACwI/g8rZq5RBILtrQAAAABJRU5ErkJggg==",
+ "text/plain": [
+ ""
+ ]
+ },
+ "metadata": {},
+ "output_type": "display_data"
+ }
+ ],
+ "source": [
+ "# Calculate Molecular Weight for all training molecules\n",
+ "MW = X.apply(lambda x: Descriptors.MolWt(Chem.MolFromSmiles(x)))\n",
+ "\n",
+ "plt.figure(figsize=(8, 5))\n",
+ "plt.hist(MW, bins=30, color='skyblue', edgecolor='black')\n",
+ "plt.title('Molecular weight distribution in training set')\n",
+ "plt.xlabel('Molecular weight (Daltons)')\n",
+ "plt.ylabel('Frequency')\n",
+ "plt.axvline(x=MW.max(), color='red', linestyle='--', label=f'Max train MW: {MW.max():.2f}')\n",
+ "plt.legend()\n",
+ "plt.show()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "The training set abruptly stops before 600 Daltons. Prepare your model to face much heavier molecules in the private test set."
]
},
{
@@ -65,7 +214,10 @@
"source": [
"# Challenge evaluation\n",
"\n",
- "A particularly important point in a challenge is to describe how it is evaluated. This is the section where you should describe the metric that will be used to evaluate the participants' submissions, as well as your evaluation strategy, in particular if there is some complexity in the way the data should be split to ensure valid results."
+ "A particularly important point in a challenge is to describe how it is evaluated. Because of the distribution shift (OOD) and the class imbalance, simple Accuracy is a terrible metric.\n",
+ "\n",
+ "The metric used to evaluate your submission is the ```Cohen's Kappa Score```.\n",
+ "It evaluates the agreement between your predictions and reality while mathematically removing the probability of agreement occurring by pure chance."
]
},
{
@@ -77,6 +229,69 @@
"Here, you should describe the submission format. This is the format the participants should follow to submit their predictions on the codabench platform."
]
},
+ {
+ "cell_type": "code",
+ "execution_count": 34,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "# %load solution/submission.py\n",
+ "import numpy as np\n",
+ "import pandas as pd\n",
+ "from sklearn.base import BaseEstimator, ClassifierMixin\n",
+ "\n",
+ "\n",
+ "class DeepLearningWrapper(BaseEstimator, ClassifierMixin):\n",
+ " def __init__(self, model_name=\"DeepLearningModel\", epochs=3, batch_size=32):\n",
+ " \"\"\"\n",
+ " # Init parameter model\n",
+ " \"\"\"\n",
+ " self.model_name = model_name\n",
+ " self.epochs = epochs\n",
+ " self.batch_size = batch_size\n",
+ " self.model = None # if torch or HF model\n",
+ " self.tokenizer = None # tokenizer if needed\n",
+ " \n",
+ " def fit(self, X, y):\n",
+ " \"\"\"\n",
+ " Training of the model\n",
+ " X : List or pandas of SMILES\n",
+ " y : Labels (0-1)\n",
+ " \"\"\"\n",
+ " \n",
+ " \n",
+ " print(f\"Model {self.model_name} trained.\")\n",
+ " \n",
+ " # Should return 'self' to fit with scikit-learn API\n",
+ " self.classes_ = np.unique(y)\n",
+ " return self\n",
+ "\n",
+ " def predict_proba(self, X):\n",
+ " \"\"\"\n",
+ " Proba prediction\n",
+ " \"\"\"\n",
+ " np.random.seed(42)\n",
+ " random_probs = np.random.rand(len(X))\n",
+ " \n",
+ " # Scikit-learn want a tabular of (n_samples, 2) for binary classification\n",
+ " return np.vstack([1 - random_probs, random_probs]).T\n",
+ "\n",
+ " def predict(self, X):\n",
+ " \"\"\"\n",
+ " Class prediction\n",
+ " \"\"\"\n",
+ " # Utilise predict_proba et applique un seuil de 0.5\n",
+ " probs = self.predict_proba(X)\n",
+ " return (probs[:, 1] >= 0.5).astype(int)\n",
+ "\n",
+ "\n",
+ "def get_model():\n",
+ " \"\"\"\n",
+ " Returns the custom wrapped deep learning model.\n",
+ " \"\"\"\n",
+ " return DeepLearningWrapper(epochs=5, batch_size=16)"
+ ]
+ },
{
"cell_type": "markdown",
"metadata": {},
@@ -88,14 +303,13 @@
},
{
"cell_type": "code",
- "execution_count": 2,
+ "execution_count": 35,
"metadata": {},
"outputs": [],
"source": [
"# %load solution/submission.py\n",
"from sklearn.ensemble import RandomForestClassifier\n",
"\n",
- "\n",
"# The submission here should simply be a function that returns a model\n",
"# compatible with scikit-learn API\n",
"def get_model():\n",
@@ -153,16 +367,11 @@
"\n",
"To submit your code, you can refer to the actual challenge."
]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": []
}
],
"metadata": {
"kernelspec": {
- "display_name": "base",
+ "display_name": "codabench",
"language": "python",
"name": "python3"
},
@@ -176,7 +385,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.12.10"
+ "version": "3.10.19"
}
},
"nbformat": 4,
From e870aecbe360f8d89cc3abdda9ee649aed2e7baf Mon Sep 17 00:00:00 2001
From: Kam Osiris YETNA
Date: Thu, 5 Mar 2026 11:07:41 +0100
Subject: [PATCH 2/2] initial commit
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 56384d2..70a0fe9 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@ public and private test set.
## Structure of the bundle
-- `competition.yaml`: configuration file for the codabench competition,
+- `competition.yaml`: configuration file for the codabench competition,
specifying phases, tasks, and evaluation metrics.
- `ingestion_program/`: contains the ingestion program that will be run on
participant's submissions. It is responsible for loading the code from the