{
  "id": 94788,
  "title": "Modeling by scalar coupling types",
  "url": "/competitions/champs-scalar-coupling/discussion/94788",
  "author_name": "Bill Holst",
  "post_date": "2019-06-06T22:08:47.685000",
  "votes": 6,
  "comment_count": 14,
  "views": 0,
  "content": "<p>Has anyone thought about or tried modeling by scalar coupling types? </p>\n\n<p>Because scoring for the competition is based on this feature, it might make any sense to build 8 separate models using only the rows for each coupling type. </p>\n\n<p>Each one seems to have different result distributions, some near normal, some bi-modal. This approach might allow a finer grained model for each, without overfitting. </p>\n\n<p>Any thoughts on this?</p>",
  "messages": [
    {
      "id": 546790,
      "postDate": "2019-06-06T22:08:47.687Z",
      "content": "<p>Has anyone thought about or tried modeling by scalar coupling types? </p>\n\n<p>Because scoring for the competition is based on this feature, it might make any sense to build 8 separate models using only the rows for each coupling type. </p>\n\n<p>Each one seems to have different result distributions, some near normal, some bi-modal. This approach might allow a finer grained model for each, without overfitting. </p>\n\n<p>Any thoughts on this?</p>",
      "rawMarkdown": "Has anyone thought about or tried modeling by scalar coupling types? \n\nBecause scoring for the competition is based on this feature, it might make any sense to build 8 separate models using only the rows for each coupling type. \n\nEach one seems to have different result distributions, some near normal, some bi-modal. This approach might allow a finer grained model for each, without overfitting. \n\nAny thoughts on this?",
      "votes": 6
    },
    {
      "id": 550119,
      "postDate": "2019-06-11T10:10:53.713Z",
      "content": "<p>Just give it a try for 1 type and check your cv yourself :)\nnot even knowing chemistry it is a valid assumption that each type has its own properties and therefore might need its own features. putting them all together only makes it harder for any type of the model to pick up. so why to make your life harder?</p>",
      "rawMarkdown": "Just give it a try for 1 type and check your cv yourself :)\nnot even knowing chemistry it is a valid assumption that each type has its own properties and therefore might need its own features. putting them all together only makes it harder for any type of the model to pick up. so why to make your life harder?",
      "votes": 1,
      "replies": [
        {
          "id": 550639,
          "postDate": "2019-06-11T21:19:11.450Z",
          "content": "<p>I have built an 8 part model, based on type. It shows a measurable improvement over the same features  in a monolithic model. I also weight each number of estimators parameter so that the smaller segments (fewest rows) have the most estimators so as to make the smaller segments count more. This has probably made about a -0.3 point improvement in my CV.</p>\n\n<p>My next step is uglier - micro optimize the feature set for each of the types.</p>",
          "rawMarkdown": "I have built an 8 part model, based on type. It shows a measurable improvement over the same features  in a monolithic model. I also weight each number of estimators parameter so that the smaller segments (fewest rows) have the most estimators so as to make the smaller segments count more. This has probably made about a -0.3 point improvement in my CV.\n\nMy next step is uglier - micro optimize the feature set for each of the types."
        }
      ]
    },
    {
      "id": 547089,
      "postDate": "2019-06-07T08:56:40.350Z",
      "content": "<p>In another topic someone was saying that he had a better score by training separate types of coupling.</p>\n\n<p>In general in computational chemistry, it is indeed better to train separate batches of molecules that share the same characteristics. How to separate the molecules is another matter. You can indeed separate depending on coupling types or use another metrics (potential energy may be a good one).</p>\n\n<p>Using descriptors (SOAP, ACSF, MBTR, etc.) it is possible to define a 'similarity' metrics, which is used to group molecules together and train them separately.</p>",
      "rawMarkdown": "In another topic someone was saying that he had a better score by training separate types of coupling.\n\nIn general in computational chemistry, it is indeed better to train separate batches of molecules that share the same characteristics. How to separate the molecules is another matter. You can indeed separate depending on coupling types or use another metrics (potential energy may be a good one).\n\nUsing descriptors (SOAP, ACSF, MBTR, etc.) it is possible to define a 'similarity' metrics, which is used to group molecules together and train them separately.",
      "votes": 2,
      "replies": [
        {
          "id": 550644,
          "postDate": "2019-06-11T21:37:18.067Z",
          "content": "<p><a href=\"/borisdee\">@borisdee</a> - I am not familiar enough with the descriptors you mentioned \nBag of bonds (BOBA)\nAtom centered symmetry functions (ACSF)\nSmooth overlap of atomic positions (SOAP)\nManybody tensor representation (MBTR)\nHow are these derivable from the basic data we are given in the competition's datasets? I like your idea, but am not how to proceed to use these. Could we create synthetic features that could be approximated from one or more of the datasets and then added to both train and test for model fitting?</p>",
          "rawMarkdown": "@borisdee - I am not familiar enough with the descriptors you mentioned \nBag of bonds (BOBA)\nAtom centered symmetry functions (ACSF)\nSmooth overlap of atomic positions (SOAP)\nManybody tensor representation (MBTR)\nHow are these derivable from the basic data we are given in the competition's datasets? I like your idea, but am not how to proceed to use these. Could we create synthetic features that could be approximated from one or more of the datasets and then added to both train and test for model fitting?"
        },
        {
          "id": 550918,
          "postDate": "2019-06-12T06:23:13.117Z",
          "content": "<p><a href=\"/wjholst\">@wjholst</a> - These descriptors are derived from the cartesian positions so you can build them using the 'structures.csv' file given in the challenge. I built them using the mathematical formulas in the articles found online (SciHub is your friend :)). It takes time but it's worth it, I think.</p>\n\n<p>Basically you have two types of descriptors: local and global. </p>\n\n<p>Local descriptors, such as ACSF and SOAP, give a very accurate description of the environment of <strong>each atom in the molecule</strong> (number of atoms it is connected to, angles, etc.). They can be averaged out over all atoms in order to give a global descriptor.</p>\n\n<p>Global descriptors, such as the Coulomb Matrix and bag of bonds , are global in the sense that they describe the <strong>entire molecule</strong>, not each atom separately. You have one for each molecule. They can then be used as a similarity metrics: if the two descriptors are close, then it means the molecules are similar. You can then group molecules accordingly.</p>\n\n<p>I guess that from the problem at hand, a local descriptor is the best choice since we want to predict interactions between atoms. But the problem is the number of molecules: 130775. For each atom in each molecule, the feature vector with ACSF or SOAP can be huge. For instance, with SOAP I have a feature vector, for each atom in each molecule, of dimension (1, 241). For ACSF, I have a descriptor of size (1, 447), with a file size for all molecules of 6 GB! We can't use these to directly predict interaction types, because it explodes the memory when it goes through the ML algorithm.</p>\n\n<p>Another idea could be to calculate a global descriptor, group molecules together, and train separate models for each group. The problem once again is that you will have to calculate the similarity of each pair of molecules, and that makes 8.5 billion combinations, though there's probably a smarter way to do it.</p>\n\n<p>In conclusion, that's a difficult problem :D But I really recommend to look into at least ACSF and SOAP. SOAP is a very difficult concept to grasp, but it's also more powerful. ACSF can be understood pretty easily and can also be built straightforwardly.</p>\n\n<p><strong>Reference on ACSF</strong>: <a href=\"https://doi.org/10.1063/1.3553717\">https://doi.org/10.1063/1.3553717</a>\n<strong>Reference on SOAP</strong>: <a href=\"https://doi.org/10.1103/PhysRevB.87.184115\">https://doi.org/10.1103/PhysRevB.87.184115</a>\n<strong>Reference on Coulomb Matrices</strong>: <a href=\"https://doi.org/10.1103/PhysRevLett.108.058301\">https://doi.org/10.1103/PhysRevLett.108.058301</a> </p>\n\n<p>Hope this helps :)</p>",
          "rawMarkdown": "@wjholst - These descriptors are derived from the cartesian positions so you can build them using the 'structures.csv' file given in the challenge. I built them using the mathematical formulas in the articles found online (SciHub is your friend :)). It takes time but it's worth it, I think.\n\nBasically you have two types of descriptors: local and global. \n\nLocal descriptors, such as ACSF and SOAP, give a very accurate description of the environment of **each atom in the molecule** (number of atoms it is connected to, angles, etc.). They can be averaged out over all atoms in order to give a global descriptor.\n\nGlobal descriptors, such as the Coulomb Matrix and bag of bonds , are global in the sense that they describe the **entire molecule**, not each atom separately. You have one for each molecule. They can then be used as a similarity metrics: if the two descriptors are close, then it means the molecules are similar. You can then group molecules accordingly.\n\nI guess that from the problem at hand, a local descriptor is the best choice since we want to predict interactions between atoms. But the problem is the number of molecules: 130775. For each atom in each molecule, the feature vector with ACSF or SOAP can be huge. For instance, with SOAP I have a feature vector, for each atom in each molecule, of dimension (1, 241). For ACSF, I have a descriptor of size (1, 447), with a file size for all molecules of 6 GB! We can't use these to directly predict interaction types, because it explodes the memory when it goes through the ML algorithm.\n\nAnother idea could be to calculate a global descriptor, group molecules together, and train separate models for each group. The problem once again is that you will have to calculate the similarity of each pair of molecules, and that makes 8.5 billion combinations, though there's probably a smarter way to do it.\n\nIn conclusion, that's a difficult problem :D But I really recommend to look into at least ACSF and SOAP. SOAP is a very difficult concept to grasp, but it's also more powerful. ACSF can be understood pretty easily and can also be built straightforwardly.\n\n**Reference on ACSF**: https://doi.org/10.1063/1.3553717\n**Reference on SOAP**: https://doi.org/10.1103/PhysRevB.87.184115\n**Reference on Coulomb Matrices**: https://doi.org/10.1103/PhysRevLett.108.058301 \n\nHope this helps :)",
          "votes": 10
        },
        {
          "id": 550957,
          "postDate": "2019-06-12T07:14:03.833Z",
          "content": "<p><a href=\"/borisdee\">@borisdee</a>, it seems like those references you provided are not accessible unless you have a subscription or buy the article. Is there some way to access them for free?</p>",
          "rawMarkdown": "@borisdee, it seems like those references you provided are not accessible unless you have a subscription or buy the article. Is there some way to access them for free?"
        },
        {
          "id": 550962,
          "postDate": "2019-06-12T07:22:31.410Z",
          "content": "<p><a href=\"/taniaj\">@taniaj</a> \nYes there is, you can use SciHub. You copy/paste the link in the search entry and it gives you the article.\nIf SciHub is blocked in your country (which is the case in France), you'll have to go through a VPN or change your DNS.</p>",
          "rawMarkdown": "@taniaj \nYes there is, you can use SciHub. You copy/paste the link in the search entry and it gives you the article.\nIf SciHub is blocked in your country (which is the case in France), you'll have to go through a VPN or change your DNS.",
          "votes": 2
        },
        {
          "id": 550968,
          "postDate": "2019-06-12T07:27:48.253Z",
          "content": "<p>Awesome, thank you!</p>",
          "rawMarkdown": "Awesome, thank you!"
        },
        {
          "id": 551245,
          "postDate": "2019-06-12T13:55:12.320Z",
          "content": "<p><a href=\"/borisdee\">@borisdee</a> - Thanks for the insight. It looks like an approach that might be worth pursuing if we had large computing resources available. However, I am working on the Kaggle server only, so I don't have the computes. Perhaps building a subset of either SOAP or ACSF data might be an approach, similar to using one or two of the features in the scalar_coupling_contributions dataset. Of course the advantage would be to have the attributes for both training and test. </p>",
          "rawMarkdown": "@borisdee - Thanks for the insight. It looks like an approach that might be worth pursuing if we had large computing resources available. However, I am working on the Kaggle server only, so I don't have the computes. Perhaps building a subset of either SOAP or ACSF data might be an approach, similar to using one or two of the features in the scalar_coupling_contributions dataset. Of course the advantage would be to have the attributes for both training and test. "
        },
        {
          "id": 556863,
          "postDate": "2019-06-20T19:10:59.180Z",
          "content": "<p><a href=\"/borisdee\">@borisdee</a> Do you mean in this discussion topic?\n<a href=\"https://www.kaggle.com/c/champs-scalar-coupling/discussion/93866#latest-539906\">https://www.kaggle.com/c/champs-scalar-coupling/discussion/93866#latest-539906</a></p>",
          "rawMarkdown": "@borisdee Do you mean in this discussion topic?\nhttps://www.kaggle.com/c/champs-scalar-coupling/discussion/93866#latest-539906"
        },
        {
          "id": 558200,
          "postDate": "2019-06-22T00:18:09.717Z",
          "content": "<p><a href=\"/borisdee\">@borisdee</a> - I understand from your explanation that the number of features seems to grow exponential as the number of atoms increases. 8B combinations seems a bit daunting, given that I am working on the kernels cluster only. Thanks for the information!</p>",
          "rawMarkdown": "@borisdee - I understand from your explanation that the number of features seems to grow exponential as the number of atoms increases. 8B combinations seems a bit daunting, given that I am working on the kernels cluster only. Thanks for the information!"
        },
        {
          "id": 559134,
          "postDate": "2019-06-23T14:30:09.023Z",
          "content": "<p>Useful blog post on what ACSF is about: <a href=\"https://samabilino.wordpress.com/2018/07/07/atom-centred-symmetry-functions/\">https://samabilino.wordpress.com/2018/07/07/atom-centred-symmetry-functions/</a></p>",
          "rawMarkdown": "Useful blog post on what ACSF is about: https://samabilino.wordpress.com/2018/07/07/atom-centred-symmetry-functions/",
          "votes": 3
        },
        {
          "id": 565429,
          "postDate": "2019-06-30T23:54:11.043Z",
          "content": "<p>Thanks <a href=\"/larsbratholm\">@larsbratholm</a> - that was a very informative blog post. I am actually beginning to understand a bit about molecular structure and various representations. </p>",
          "rawMarkdown": "Thanks @larsbratholm - that was a very informative blog post. I am actually beginning to understand a bit about molecular structure and various representations. ",
          "votes": 1
        }
      ]
    },
    {
      "id": 547136,
      "postDate": "2019-06-07T10:17:37.167Z",
      "rawMarkdown": "",
      "votes": 1,
      "isDeleted": true
    }
  ],
  "comments": [
    {
      "id": 550119,
      "author_name": "snovik",
      "author_url": "",
      "post_date": "2019-06-11T10:10:53.713000",
      "content": "<p>Just give it a try for 1 type and check your cv yourself :)\nnot even knowing chemistry it is a valid assumption that each type has its own properties and therefore might need its own features. putting them all together only makes it harder for any type of the model to pick up. so why to make your life harder?</p>",
      "votes": 1,
      "replies": [
        {
          "id": 550639,
          "author_name": "Bill Holst",
          "author_url": "",
          "post_date": "2019-06-11T21:19:11.450000",
          "content": "<p>I have built an 8 part model, based on type. It shows a measurable improvement over the same features  in a monolithic model. I also weight each number of estimators parameter so that the smaller segments (fewest rows) have the most estimators so as to make the smaller segments count more. This has probably made about a -0.3 point improvement in my CV.</p>\n\n<p>My next step is uglier - micro optimize the feature set for each of the types.</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 547089,
      "author_name": "Boris D.",
      "author_url": "",
      "post_date": "2019-06-07T08:56:40.350000",
      "content": "<p>In another topic someone was saying that he had a better score by training separate types of coupling.</p>\n\n<p>In general in computational chemistry, it is indeed better to train separate batches of molecules that share the same characteristics. How to separate the molecules is another matter. You can indeed separate depending on coupling types or use another metrics (potential energy may be a good one).</p>\n\n<p>Using descriptors (SOAP, ACSF, MBTR, etc.) it is possible to define a 'similarity' metrics, which is used to group molecules together and train them separately.</p>",
      "votes": 2,
      "replies": [
        {
          "id": 550644,
          "author_name": "Bill Holst",
          "author_url": "",
          "post_date": "2019-06-11T21:37:18.067000",
          "content": "<p><a href=\"/borisdee\">@borisdee</a> - I am not familiar enough with the descriptors you mentioned \nBag of bonds (BOBA)\nAtom centered symmetry functions (ACSF)\nSmooth overlap of atomic positions (SOAP)\nManybody tensor representation (MBTR)\nHow are these derivable from the basic data we are given in the competition's datasets? I like your idea, but am not how to proceed to use these. Could we create synthetic features that could be approximated from one or more of the datasets and then added to both train and test for model fitting?</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 550918,
          "author_name": "Boris D.",
          "author_url": "",
          "post_date": "2019-06-12T06:23:13.117000",
          "content": "<p><a href=\"/wjholst\">@wjholst</a> - These descriptors are derived from the cartesian positions so you can build them using the 'structures.csv' file given in the challenge. I built them using the mathematical formulas in the articles found online (SciHub is your friend :)). It takes time but it's worth it, I think.</p>\n\n<p>Basically you have two types of descriptors: local and global. </p>\n\n<p>Local descriptors, such as ACSF and SOAP, give a very accurate description of the environment of <strong>each atom in the molecule</strong> (number of atoms it is connected to, angles, etc.). They can be averaged out over all atoms in order to give a global descriptor.</p>\n\n<p>Global descriptors, such as the Coulomb Matrix and bag of bonds , are global in the sense that they describe the <strong>entire molecule</strong>, not each atom separately. You have one for each molecule. They can then be used as a similarity metrics: if the two descriptors are close, then it means the molecules are similar. You can then group molecules accordingly.</p>\n\n<p>I guess that from the problem at hand, a local descriptor is the best choice since we want to predict interactions between atoms. But the problem is the number of molecules: 130775. For each atom in each molecule, the feature vector with ACSF or SOAP can be huge. For instance, with SOAP I have a feature vector, for each atom in each molecule, of dimension (1, 241). For ACSF, I have a descriptor of size (1, 447), with a file size for all molecules of 6 GB! We can't use these to directly predict interaction types, because it explodes the memory when it goes through the ML algorithm.</p>\n\n<p>Another idea could be to calculate a global descriptor, group molecules together, and train separate models for each group. The problem once again is that you will have to calculate the similarity of each pair of molecules, and that makes 8.5 billion combinations, though there's probably a smarter way to do it.</p>\n\n<p>In conclusion, that's a difficult problem :D But I really recommend to look into at least ACSF and SOAP. SOAP is a very difficult concept to grasp, but it's also more powerful. ACSF can be understood pretty easily and can also be built straightforwardly.</p>\n\n<p><strong>Reference on ACSF</strong>: <a href=\"https://doi.org/10.1063/1.3553717\">https://doi.org/10.1063/1.3553717</a>\n<strong>Reference on SOAP</strong>: <a href=\"https://doi.org/10.1103/PhysRevB.87.184115\">https://doi.org/10.1103/PhysRevB.87.184115</a>\n<strong>Reference on Coulomb Matrices</strong>: <a href=\"https://doi.org/10.1103/PhysRevLett.108.058301\">https://doi.org/10.1103/PhysRevLett.108.058301</a> </p>\n\n<p>Hope this helps :)</p>",
          "votes": 10,
          "replies": []
        },
        {
          "id": 550957,
          "author_name": "Tania J",
          "author_url": "",
          "post_date": "2019-06-12T07:14:03.833000",
          "content": "<p><a href=\"/borisdee\">@borisdee</a>, it seems like those references you provided are not accessible unless you have a subscription or buy the article. Is there some way to access them for free?</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 550962,
          "author_name": "Boris D.",
          "author_url": "",
          "post_date": "2019-06-12T07:22:31.410000",
          "content": "<p><a href=\"/taniaj\">@taniaj</a> \nYes there is, you can use SciHub. You copy/paste the link in the search entry and it gives you the article.\nIf SciHub is blocked in your country (which is the case in France), you'll have to go through a VPN or change your DNS.</p>",
          "votes": 2,
          "replies": []
        },
        {
          "id": 550968,
          "author_name": "Tania J",
          "author_url": "",
          "post_date": "2019-06-12T07:27:48.253000",
          "content": "<p>Awesome, thank you!</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 551245,
          "author_name": "Bill Holst",
          "author_url": "",
          "post_date": "2019-06-12T13:55:12.320000",
          "content": "<p><a href=\"/borisdee\">@borisdee</a> - Thanks for the insight. It looks like an approach that might be worth pursuing if we had large computing resources available. However, I am working on the Kaggle server only, so I don't have the computes. Perhaps building a subset of either SOAP or ACSF data might be an approach, similar to using one or two of the features in the scalar_coupling_contributions dataset. Of course the advantage would be to have the attributes for both training and test. </p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 556863,
          "author_name": "Prajakta Bedekar",
          "author_url": "",
          "post_date": "2019-06-20T19:10:59.180000",
          "content": "<p><a href=\"/borisdee\">@borisdee</a> Do you mean in this discussion topic?\n<a href=\"https://www.kaggle.com/c/champs-scalar-coupling/discussion/93866#latest-539906\">https://www.kaggle.com/c/champs-scalar-coupling/discussion/93866#latest-539906</a></p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 558200,
          "author_name": "Bill Holst",
          "author_url": "",
          "post_date": "2019-06-22T00:18:09.717000",
          "content": "<p><a href=\"/borisdee\">@borisdee</a> - I understand from your explanation that the number of features seems to grow exponential as the number of atoms increases. 8B combinations seems a bit daunting, given that I am working on the kernels cluster only. Thanks for the information!</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 559134,
          "author_name": "Lars Bratholm",
          "author_url": "",
          "post_date": "2019-06-23T14:30:09.023000",
          "content": "<p>Useful blog post on what ACSF is about: <a href=\"https://samabilino.wordpress.com/2018/07/07/atom-centred-symmetry-functions/\">https://samabilino.wordpress.com/2018/07/07/atom-centred-symmetry-functions/</a></p>",
          "votes": 3,
          "replies": []
        },
        {
          "id": 565429,
          "author_name": "Bill Holst",
          "author_url": "",
          "post_date": "2019-06-30T23:54:11.043000",
          "content": "<p>Thanks <a href=\"/larsbratholm\">@larsbratholm</a> - that was a very informative blog post. I am actually beginning to understand a bit about molecular structure and various representations. </p>",
          "votes": 1,
          "replies": []
        }
      ]
    },
    {
      "id": 547136,
      "author_name": "",
      "author_url": "",
      "post_date": "2019-06-07T10:17:37.167000",
      "content": "",
      "votes": 1,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "546790": "Has anyone thought about or tried modeling by scalar coupling types? \n\nBecause scoring for the competition is based on this feature, it might make any sense to build 8 separate models using only the rows for each coupling type. \n\nEach one seems to have different result distributions, some near normal, some bi-modal. This approach might allow a finer grained model for each, without overfitting. \n\nAny thoughts on this?",
    "550119": "Just give it a try for 1 type and check your cv yourself :)\nnot even knowing chemistry it is a valid assumption that each type has its own properties and therefore might need its own features. putting them all together only makes it harder for any type of the model to pick up. so why to make your life harder?",
    "547089": "In another topic someone was saying that he had a better score by training separate types of coupling.\n\nIn general in computational chemistry, it is indeed better to train separate batches of molecules that share the same characteristics. How to separate the molecules is another matter. You can indeed separate depending on coupling types or use another metrics (potential energy may be a good one).\n\nUsing descriptors (SOAP, ACSF, MBTR, etc.) it is possible to define a 'similarity' metrics, which is used to group molecules together and train them separately.",
    "547136": ""
  }
}