{
  "fetched_at": "2026-10-19T07:11:34Z",
  "source_url": "https://www.kaggle.com/competitions/affinity/data",
  "pages": [
    {
      "name": "data-description",
      "content": "<h3>Overview</h3>\r\n<p>In a common for crystallographers form, protein structures are stored as lists of atom names and atom coordinates, you can read more about PDB format <a href=\"http://www.wwpdb.org/documentation/file-format-content/format33/sect9.html#ATOM\">here</a>. The input to the network is, typically, a 3D matrix for which empty space (cubic angstrom) is marked as 0, and every atom is marked with a certain number N. Since every cube has a few orders of magnitude more zeros than numbers, especially, if the size of the cell is small, it’s more efficient to read the images as sparse tensors and perform conversion on GPU.</p>\r\n<p><br />Luckily, all of the structures ever crystallized are stored in a single place called <a href=\"http://www.rcsb.org/pdb/home/home.do\">Protein Data Bank</a>. We provide a hand-cleaned dataset created from a whole PDB in which proteins and ligands are split and stored in different folders.</p>\r\n<p><br />Since Protein Data Bank contains only structures observed in reality, fake structures have to be generated separately. In our task we <a href=\"https://en.wikipedia.org/wiki/Docking_(molecular)\">dock</a> the ligands back to their targets and select best (lowest in terms of negative binding energy) structures in which position of the ligand is incorrect enough to consider the ligand as a negative example.</p>\r\n<p><strong>There are two datasets available for this task:</strong></p>\r\n<p><br /><strong>Primary dataset</strong> (6589 Positive examples, 292075 Negative Examples).</p>\r\n<p><br />Contains all of the existing in the PDB drug-protein complexes from <a href=\"http://www.rcsb.org/\">Protein Data Bank</a> (Oct 2016) with 10 or more atoms for which there exists a record in <a href=\"https://www.bindingdb.org/\">bindingDB</a>. There are up to 50 decoys for each of the positive examples.<br />Decoys have been generated with <a href=\"https://github.com/mwojcikowski/smina\">AutoDock Smina</a> by docking ligands back to their targets and selecting ones with most negative binding energy and RMSD &gt; 6A. Only the ligands that have 10 or more atoms have been considered in this dataset.<br />We have extracted 10% of the primary dataset and masked protein protein and ligand names to use it as evaluation set for Kaggle.</p>\r\n<p><br /><strong>Auxiliary dataset</strong> (43 775 positive examples 1 844 074 negative examples)<br />Contains the same data as primary dataset, except absence in BindingDB is not considered for exclusion. While this dataset is much bigger, it has some positives labeled incorrectly. This appears because small molecular weight compounds can be added to protein to increase the quality of the crystal.</p>\r\n<h3>File descriptions</h3>\r\n<ul>\r\n<li><strong>labeled_pdb.zip</strong> - the training set in pdb format</li>\r\n<li><strong>labeled_npy.zip </strong>- the training set in npy format (in this case every structure is saved as numpy array with 4 columns of float32. First column is a hash for atom type. Three following columns are the atom coordinate.</li>\r\n<li><strong>unlabeled_pdb.zip</strong> - set with hidden labels for submission</li>\r\n<li><strong>unlabeled_npy.zip </strong>- set with hidden labels in npy format</li>\r\n</ul>",
      "isPublished": false,
      "hasIsPublished": false,
      "postTitle": "",
      "hasPostTitle": false,
      "mimeType": "",
      "hasMimeType": false
    },
    {
      "name": "Description",
      "content": "<p>Structure-based virtual screening is an approach by which a very small percentage of small molecules, usually tenth or hundreds are sifted out from a gigantic space of possible millions, or even billions possible chemical structures. These small molecules represent potential drug candidates and have to be further validated in biological assays such as human cells, zebrafish, or mice. Drug validation is a lengthy process that can take many years. That’s why scientists are usually testing molecules in small batches of 50-200, and if none of the molecules is both safe and efficient enough, the whole process has to be repeated again.</p>\r\n<p><br />Chemical space of drug-like molecules is estimated to be &gt; 50B <g class=\"gr_ gr_16 gr-alert gr_gramm gr_disable_anim_appear Punctuation only-del replaceWithoutSep\" id=\"16\" data-gr-id=\"16\">structures,</g> and should have a cure for every <g data-gr-id=\"69\" id=\"69\" class=\"gr_ gr_69 gr-alert gr_gramm gr_disable_anim_appear Punctuation only-del replaceWithoutSep\">disease,</g> if only we could find it.</p>\r\n<p><br />In this competition, you will be given a set of 3D drug-protein structures (images) some of which represent strongly bound drug-protein complexes (positives) and some of which are drug and protein artificially attached together in an incorrect position (negatives). Your task will be to distinguish real from fake binders, even though they look almost the same to human eyes.</p>\r\n<p>Our dataset is huge, it contains 1,887,849 images. Intuitively, the right approach would be to train a deep convolutional neural network (DNN), but you do not have to limit yourself ! Git clones our <a href=\"https://github.com/mitaffinity/core\">working example</a> to get started.</p>",
      "isPublished": false,
      "hasIsPublished": false,
      "postTitle": "",
      "hasPostTitle": false,
      "mimeType": "",
      "hasMimeType": false
    },
    {
      "name": "Evaluation",
      "content": "<p>The evaluation metric for this competition is a <a href=\"http://fastml.com/what-you-wanted-to-know-about-mean-average-precision/\">Mean Average Precision at cutoff K</a>. In our case K=1.</p>\r\n<p>average precision</p>\r\n<p>\\[ ap@n = \\sum_{k=1}^{n}P(k)/ min(m,n) \\]</p>\r\n<p>mean average precision</p>\r\n<p>\\[ MAP@n = \\sum_{i = 1}^{N} ap@n_i/N \\]</p>\r\n<h2>Submission Format</h2>\r\n<p><strong>One row should correspond to every protein </strong>in the dataset. Protein name comes first, separated with comma sign from it's ligands. All of the ligands in the list should be separated by spaces from each other.</p>\r\n<p>The file should contain a header and have the following format:</p>\r\n<pre>Id,Prediction<br />P27158,L4318 L7825 L7859 L29531 L19463 L30570 L7109 L5317 <br />P8841,L30357 L10900 L29805 L23864 L11980 L2484 L14284 L4135 L4864 <br />P8840,L9193 L10588 L30590 L14513 L19725 L25892 L3481 L27267 L19194 <br />P12340,L3387 L18759 L14519 L451 L9513<br /><span style=\"font-size: 14px; line-height: 1.4em;\"></span><span style=\"font-size: 14px; line-height: 1.4em;\"></span><span style=\"font-size: 14px; line-height: 1.4em;\"></span></pre>",
      "isPublished": false,
      "hasIsPublished": false,
      "postTitle": "",
      "hasPostTitle": false,
      "mimeType": "",
      "hasMimeType": false
    },
    {
      "name": "rules",
      "content": "\r\n\t<!-- Begin Base Rules -->\r\n    <h3>One account per participant</h3>\r\n    <p>You cannot sign up to Kaggle from multiple accounts and therefore you cannot submit from multiple accounts.</p>\r\n    <h3>No private sharing outside teams</h3>\r\n    <p>\r\n        Privately sharing code or data outside of teams is not permitted.\r\n        It's okay to share code if made available to all participants on the forums.\r\n    </p>\r\n    <h3>Team Mergers</h3>\r\n    <p>Team mergers are not allowed in this competition.</p>\r\n\r\n    <h3>Team Limits</h3>\r\n    <p>There is no maximum team size.</p>\r\n    <h3>Submission Limits</h3>\r\n    <p>You may submit a maximum of 5 entries per day.</p>\r\n    <p>You may select up to 5 final submissions for judging.</p>\r\n    <h3>Competition Timeline</h3>\r\n    <p>Start Date: <strong>12/8/2016 11:12 PM UTC</strong></p>\r\n    <p>Merger Deadline: <strong>None</strong></p>\r\n    <p>Entry Deadline: <strong>None</strong></p>\r\n    <p>End Date: <strong>6/1/2017 11:59 PM UTC</strong></p>\r\n\t<!-- End Base Rules -->\r\n<p>You are limited to 2 submission per day.</p>",
      "isPublished": false,
      "hasIsPublished": false,
      "postTitle": "",
      "hasPostTitle": false,
      "mimeType": "",
      "hasMimeType": false
    }
  ]
}