{
  "id": 106280,
  "title": "43 place solution of 2 Experts and the farmer",
  "url": "/competitions/champs-scalar-coupling/writeups/2-experts-and-the-farmer-43-place-solution-of-2-ex",
  "author_name": "",
  "post_date": "2019-08-30T03:00:26.313Z",
  "votes": 36,
  "comment_count": 19,
  "views": 0,
  "content": "<p>First of all, we would like to thank everyone who participated in this competition, host members and Kaggle Team! I’m happy to finish this competition with really stable LB, no shake down :D</p>\n\n<h2>Modeling part</h2>\n\n<p>Mainly our team used LightGBM with various features (around 500), and adopt NN model (MPNN) customizing based on <a href=\"/hengck23\">@hengck23</a> ’s MPNN model for bringing model diversity to enhance the blending. Also we understood the seed averaging on this competition is very useful, so utilized large number of seed average.</p>\n\n<p>In detail, please see the following slide.</p>\n\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F291723%2F70b9d209795661e831c5216aea880947%2Fsolution.png?generation=1567041478975554&amp;alt=media\" alt=\"solution\"></p>\n\n<h1>Features part</h1>\n\n<p>We struggled to find the features describing the global/local environment of atoms. We have made a lot of features by using chemical libraries (Openbabel, Dscribe, RDkit).  These libraries are very helpful because we have little domain knowledge at the starting point.</p>\n\n<p>Some effective features are below.</p>\n\n<h3>distance</h3>\n\n<p>Some distances are essential features. We experimented with many distance between\n - index0 and index1 atoms\n - index0/1 and atom in α,β,γ-substituents\n - index0/1 and atom of each type(‘H’,‘C’,‘N’,‘O’)\n - nearest neighbors of index0/1</p>\n\n<p>We also use features from this brilliant notebook(<a href=\"https://www.kaggle.com/criskiev/distance-is-all-you-need-lb-1-481\">https://www.kaggle.com/criskiev/distance-is-all-you-need-lb-1-481</a>) by <a href=\"/criskiev\">@criskiev</a></p>\n\n<h3>Angle</h3>\n\n<p>Angle feaures also have very strong effects.  We tried making a lot of hand-crafted features.\n - bond angle\n - plain angle\n - dihedral angle with index0/1\n - stats of dihedral angle with index0, 3-atoms-away from index0</p>\n\n<h3>atom type</h3>\n\n<p>We use atom type(‘H’,‘C’,‘N’,‘O’) as features instead of their electronegativity. Using atom type not only of index0/1 but of some substituents and neibor atoms,  we tried to describe the structures around the atoms involved in the coupling.</p>\n\n<h3>partial charge</h3>\n\n<p>partial charge features played important role. We mainly made them using <code>GetPartialCharges</code> in Openbabel. Some important features are below.\n - partial charge valus itself of idnex0/1\n - the diff/ratio of partail charge of index0/1</p>\n\n<h3>characteristics of substituents</h3>\n\n<p>According to this document (<a href=\"https://www.ucl.ac.uk/nmr/NMR_lecture_notes/L3_3_97_web.pdf\">https://www.ucl.ac.uk/nmr/NMR_lecture_notes/L3_3_97_web.pdf</a>),  it seems effective to make features describing α,β,γ-substituents.</p>\n\n<h3>the hybridization of atoms</h3>\n\n<p>This feature are also from Openbabel.</p>\n\n<h3>ACSF features</h3>\n\n<p>This local descriptor works well. This features derive from the chemical library Dscribe (<a href=\"https://singroup.github.io/dscribe/tutorials/acsf.html\">https://singroup.github.io/dscribe/tutorials/acsf.html</a>) We didn’t tune g2,4_params because we didn’t have time enough. So, this features may have more room of improvement.</p>\n\n<h3>Fingerprint</h3>\n\n<p>To describe the characteristics of the molecules, chemists seems to molecular fingerprints. We made some featrues using Morgan Fingerprint(very huge bits), MACCS Fingerprint(167 bits) They are global descriptors, and it works a little.</p>\n\n<h3>topological data analysis</h3>\n\n<p>Maximum and minimum radius of persistent homology with <a href=\"https://ripser.scikit-tda.org/\">ripser</a>.</p>\n\n<h3>Bond ring feature</h3>\n\n<p>Circle size of bond ring created with networkx.</p>\n\n<h3>PCA feature</h3>\n\n<p>Explained variance PCA feature calculated based on xyz position, aming to represent global shape of a molecular.</p>\n\n<h1>Team member</h1>\n\n<p><a href=\"/yoichi7yamakawa\">@yoichi7yamakawa</a> &amp; <a href=\"/kenmatsu4\">@kenmatsu4</a> </p>",
  "messages": [
    {
      "id": "610792",
      "postDate": "08/29/2019 01:19:32",
      "content": "<p>First of all, we would like to thank everyone who participated in this competition, host members and Kaggle Team! I’m happy to finish this competition with really stable LB, no shake down :D</p>\n\n<h2>Modeling part</h2>\n\n<p>Mainly our team used LightGBM with various features (around 500), and adopt NN model (MPNN) customizing based on <a href=\"/hengck23\">@hengck23</a> ’s MPNN model for bringing model diversity to enhance the blending. Also we understood the seed averaging on this competition is very useful, so utilized large number of seed average.</p>\n\n<p>In detail, please see the following slide.</p>\n\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F291723%2F70b9d209795661e831c5216aea880947%2Fsolution.png?generation=1567041478975554&amp;alt=media\" alt=\"solution\"></p>\n\n<h1>Features part</h1>\n\n<p>We struggled to find the features describing the global/local environment of atoms. We have made a lot of features by using chemical libraries (Openbabel, Dscribe, RDkit).  These libraries are very helpful because we have little domain knowledge at the starting point.</p>\n\n<p>Some effective features are below.</p>\n\n<h3>distance</h3>\n\n<p>Some distances are essential features. We experimented with many distance between\n - index0 and index1 atoms\n - index0/1 and atom in α,β,γ-substituents\n - index0/1 and atom of each type(‘H’,‘C’,‘N’,‘O’)\n - nearest neighbors of index0/1</p>\n\n<p>We also use features from this brilliant notebook(<a href=\"https://www.kaggle.com/criskiev/distance-is-all-you-need-lb-1-481\">https://www.kaggle.com/criskiev/distance-is-all-you-need-lb-1-481</a>) by <a href=\"/criskiev\">@criskiev</a></p>\n\n<h3>Angle</h3>\n\n<p>Angle feaures also have very strong effects.  We tried making a lot of hand-crafted features.\n - bond angle\n - plain angle\n - dihedral angle with index0/1\n - stats of dihedral angle with index0, 3-atoms-away from index0</p>\n\n<h3>atom type</h3>\n\n<p>We use atom type(‘H’,‘C’,‘N’,‘O’) as features instead of their electronegativity. Using atom type not only of index0/1 but of some substituents and neibor atoms,  we tried to describe the structures around the atoms involved in the coupling.</p>\n\n<h3>partial charge</h3>\n\n<p>partial charge features played important role. We mainly made them using <code>GetPartialCharges</code> in Openbabel. Some important features are below.\n - partial charge valus itself of idnex0/1\n - the diff/ratio of partail charge of index0/1</p>\n\n<h3>characteristics of substituents</h3>\n\n<p>According to this document (<a href=\"https://www.ucl.ac.uk/nmr/NMR_lecture_notes/L3_3_97_web.pdf\">https://www.ucl.ac.uk/nmr/NMR_lecture_notes/L3_3_97_web.pdf</a>),  it seems effective to make features describing α,β,γ-substituents.</p>\n\n<h3>the hybridization of atoms</h3>\n\n<p>This feature are also from Openbabel.</p>\n\n<h3>ACSF features</h3>\n\n<p>This local descriptor works well. This features derive from the chemical library Dscribe (<a href=\"https://singroup.github.io/dscribe/tutorials/acsf.html\">https://singroup.github.io/dscribe/tutorials/acsf.html</a>) We didn’t tune g2,4_params because we didn’t have time enough. So, this features may have more room of improvement.</p>\n\n<h3>Fingerprint</h3>\n\n<p>To describe the characteristics of the molecules, chemists seems to molecular fingerprints. We made some featrues using Morgan Fingerprint(very huge bits), MACCS Fingerprint(167 bits) They are global descriptors, and it works a little.</p>\n\n<h3>topological data analysis</h3>\n\n<p>Maximum and minimum radius of persistent homology with <a href=\"https://ripser.scikit-tda.org/\">ripser</a>.</p>\n\n<h3>Bond ring feature</h3>\n\n<p>Circle size of bond ring created with networkx.</p>\n\n<h3>PCA feature</h3>\n\n<p>Explained variance PCA feature calculated based on xyz position, aming to represent global shape of a molecular.</p>\n\n<h1>Team member</h1>\n\n<p><a href=\"/yoichi7yamakawa\">@yoichi7yamakawa</a> &amp; <a href=\"/kenmatsu4\">@kenmatsu4</a> </p>",
      "rawMarkdown": "First of all, we would like to thank everyone who participated in this competition, host members and Kaggle Team! I’m happy to finish this competition with really stable LB, no shake down :D\n\n## Modeling part\nMainly our team used LightGBM with various features (around 500), and adopt NN model (MPNN) customizing based on @hengck23 ’s MPNN model for bringing model diversity to enhance the blending. Also we understood the seed averaging on this competition is very useful, so utilized large number of seed average.\n\nIn detail, please see the following slide.\n\n![solution](https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F291723%2F70b9d209795661e831c5216aea880947%2Fsolution.png?generation=1567041478975554&amp;alt=media)\n\n# Features part\nWe struggled to find the features describing the global/local environment of atoms. We have made a lot of features by using chemical libraries (Openbabel, Dscribe, RDkit).  These libraries are very helpful because we have little domain knowledge at the starting point.\n\nSome effective features are below.\n\n### distance\nSome distances are essential features. We experimented with many distance between\n - index0 and index1 atoms\n - index0/1 and atom in α,β,γ-substituents\n - index0/1 and atom of each type(‘H’,‘C’,‘N’,‘O’)\n - nearest neighbors of index0/1\n\n We also use features from this brilliant notebook(https://www.kaggle.com/criskiev/distance-is-all-you-need-lb-1-481) by @criskiev\n\n### Angle\nAngle feaures also have very strong effects.  We tried making a lot of hand-crafted features.\n - bond angle\n - plain angle\n - dihedral angle with index0/1\n - stats of dihedral angle with index0, 3-atoms-away from index0\n\n### atom type\n We use atom type(‘H’,‘C’,‘N’,‘O’) as features instead of their electronegativity. Using atom type not only of index0/1 but of some substituents and neibor atoms,  we tried to describe the structures around the atoms involved in the coupling.\n\n### partial charge\n partial charge features played important role. We mainly made them using `GetPartialCharges` in Openbabel. Some important features are below.\n - partial charge valus itself of idnex0/1\n - the diff/ratio of partail charge of index0/1\n\n### characteristics of substituents\n According to this document (https://www.ucl.ac.uk/nmr/NMR_lecture_notes/L3_3_97_web.pdf),  it seems effective to make features describing α,β,γ-substituents.\n\n### the hybridization of atoms\n This feature are also from Openbabel.\n\n### ACSF features\n This local descriptor works well. This features derive from the chemical library Dscribe (https://singroup.github.io/dscribe/tutorials/acsf.html) We didn’t tune g2,4_params because we didn’t have time enough. So, this features may have more room of improvement.\n\n### Fingerprint\n To describe the characteristics of the molecules, chemists seems to molecular fingerprints. We made some featrues using Morgan Fingerprint(very huge bits), MACCS Fingerprint(167 bits) They are global descriptors, and it works a little.\n\n### topological data analysis\nMaximum and minimum radius of persistent homology with [ripser](https://ripser.scikit-tda.org/).\n\n### Bond ring feature\nCircle size of bond ring created with networkx.\n\n### PCA feature\nExplained variance PCA feature calculated based on xyz position, aming to represent global shape of a molecular.\n\n\n# Team member\n@yoichi7yamakawa &amp; @kenmatsu4",
      "votes": null
    },
    {
      "id": "610802",
      "postDate": "08/29/2019 01:28:42",
      "content": "<p>Did you get anything out of the hybridization features?  We tried a bunch of different hybridization features, but none of them were any good, which seemed weird because so many NMR sources said that hybridization helps determine coupling constants.  </p>",
      "rawMarkdown": "Did you get anything out of the hybridization features?  We tried a bunch of different hybridization features, but none of them were any good, which seemed weird because so many NMR sources said that hybridization helps determine coupling constants.",
      "votes": null
    },
    {
      "id": "610809",
      "postDate": "08/29/2019 01:37:21",
      "content": "<p>Yes, some hybridizations of the atoms around index0/1 improve the predictions.\nWe used <code>GetHyb</code> for OpenBabel atom. \nAs you and many documents say, the hybridization is helpful for predicting coupling constants, I think.</p>",
      "rawMarkdown": "Yes, some hybridizations of the atoms around index0/1 improve the predictions.\nWe used `GetHyb` for OpenBabel atom. \nAs you and many documents say, the hybridization is helpful for predicting coupling constants, I think.",
      "votes": null
    },
    {
      "id": "610810",
      "postDate": "08/29/2019 01:37:24",
      "content": "<p>Congratulations! Very good feature engineering! Thanks for sharing.</p>",
      "rawMarkdown": "Congratulations! Very good feature engineering! Thanks for sharing.",
      "votes": null
    },
    {
      "id": "610813",
      "postDate": "08/29/2019 01:38:05",
      "content": "<p>MPNN features and LGBM features are same ?</p>",
      "rawMarkdown": "MPNN features and LGBM features are same ?",
      "votes": null
    },
    {
      "id": "610821",
      "postDate": "08/29/2019 01:44:32",
      "content": "<p>We use a subset of LGBM feature for MPNN (e.g. openbabel feature for node and edge feature.)</p>",
      "rawMarkdown": "We use a subset of LGBM feature for MPNN (e.g. openbabel feature for node and edge feature.)",
      "votes": null
    },
    {
      "id": "610839",
      "postDate": "08/29/2019 01:54:53",
      "content": "<p>Thanks!!!</p>",
      "rawMarkdown": "Thanks!!!",
      "votes": null
    },
    {
      "id": "611280",
      "postDate": "08/29/2019 07:44:09",
      "content": "<p>nice work, just a headsup that it is possible to get ring info directly from rdkit: <a href=\"https://www.rdkit.org/docs/source/rdkit.Chem.rdchem.html#rdkit.Chem.rdchem.RingInfo\">https://www.rdkit.org/docs/source/rdkit.Chem.rdchem.html#rdkit.Chem.rdchem.RingInfo</a></p>",
      "rawMarkdown": "nice work, just a headsup that it is possible to get ring info directly from rdkit: https://www.rdkit.org/docs/source/rdkit.Chem.rdchem.html#rdkit.Chem.rdchem.RingInfo",
      "votes": null
    },
    {
      "id": "611320",
      "postDate": "08/29/2019 08:01:07",
      "content": "<p>Congratulations and thanks for sharing!</p>",
      "rawMarkdown": "Congratulations and thanks for sharing!",
      "votes": null
    },
    {
      "id": "611402",
      "postDate": "08/29/2019 08:42:27",
      "content": "<p>great work! actually, we have really similar approach, and very similar LGBM\n<a href=\"https://www.kaggle.com/jesucristo/single-lgbm-2-242-top54\">Single LGBM -2.242 = Top54 </a></p>",
      "rawMarkdown": "great work! actually, we have really similar approach, and very similar LGBM\n[Single LGBM -2.242 = Top54 ](https://www.kaggle.com/jesucristo/single-lgbm-2-242-top54)",
      "votes": null
    },
    {
      "id": "611624",
      "postDate": "08/29/2019 10:57:52",
      "content": "<p>We used GetHyb too.  I'm still not sure why those features didn't help us.  The only thing I can think of was that some of our other features (we had lots...) were picking up on hybridization indirectly.</p>",
      "rawMarkdown": "We used GetHyb too.  I'm still not sure why those features didn't help us.  The only thing I can think of was that some of our other features (we had lots...) were picking up on hybridization indirectly.",
      "votes": null
    },
    {
      "id": "612030",
      "postDate": "08/29/2019 15:13:46",
      "content": "<p>Thanks for sharing.  Interesting use of PCA explained variance as feature.  Never thought of that  Congrats on the end result!</p>",
      "rawMarkdown": "Thanks for sharing.  Interesting use of PCA explained variance as feature.  Never thought of that  Congrats on the end result!",
      "votes": null
    },
    {
      "id": "612276",
      "postDate": "08/29/2019 17:36:12",
      "content": "<p>Congrats <a href=\"/kenmatsu4\">@kenmatsu4</a> and to your teammate <a href=\"/yoichi7yamakawa\">@yoichi7yamakawa</a> ! Very interesting and informative.</p>",
      "rawMarkdown": "Congrats @kenmatsu4 and to your teammate @yoichi7yamakawa ! Very interesting and informative.",
      "votes": null
    },
    {
      "id": "612682",
      "postDate": "08/30/2019 00:04:34",
      "content": "<p>Thanks for sharing! Very informative, especially Feature Part.</p>",
      "rawMarkdown": "Thanks for sharing! Very informative, especially Feature Part.",
      "votes": null
    },
    {
      "id": "613061",
      "postDate": "08/30/2019 07:41:15",
      "content": "<p>Thank you for your information! \nThe one reason using networkx calculate ring is understanding the structure of molecule. The libraries is easy to use but black box a little bit.</p>",
      "rawMarkdown": "Thank you for your information! \nThe one reason using networkx calculate ring is understanding the structure of molecule. The libraries is easy to use but black box a little bit.",
      "votes": null
    },
    {
      "id": "613062",
      "postDate": "08/30/2019 07:41:34",
      "content": "<p>Thanks!!!</p>",
      "rawMarkdown": "Thanks!!!",
      "votes": null
    },
    {
      "id": "613064",
      "postDate": "08/30/2019 07:43:10",
      "content": "<p>Thank you! I will read your kernel and learn from it!</p>",
      "rawMarkdown": "Thank you! I will read your kernel and learn from it!",
      "votes": null
    },
    {
      "id": "613066",
      "postDate": "08/30/2019 07:44:48",
      "content": "<p>Thank you for your comment, I'm happy to share our idea for you, even if it's a little bit :D</p>",
      "rawMarkdown": "Thank you for your comment, I'm happy to share our idea for you, even if it's a little bit :D",
      "votes": null
    },
    {
      "id": "613067",
      "postDate": "08/30/2019 07:45:08",
      "content": "<p>Thanks!!!</p>",
      "rawMarkdown": "Thanks!!!",
      "votes": null
    },
    {
      "id": "613069",
      "postDate": "08/30/2019 07:45:53",
      "content": "<p>Thanks! Now <a href=\"/yoichi7yamakawa\">@yoichi7yamakawa</a> is like a domain expert on this field :D</p>",
      "rawMarkdown": "Thanks! Now @yoichi7yamakawa is like a domain expert on this field :D",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 610802,
      "author_name": "abendorf",
      "author_url": "",
      "post_date": "08/29/2019 01:28:42",
      "content": "<p>Did you get anything out of the hybridization features?  We tried a bunch of different hybridization features, but none of them were any good, which seemed weird because so many NMR sources said that hybridization helps determine coupling constants.  </p>",
      "votes": null,
      "replies": [
        {
          "id": 610809,
          "author_name": "yoichi7yamakawa",
          "author_url": "",
          "post_date": "08/29/2019 01:37:21",
          "content": "<p>Yes, some hybridizations of the atoms around index0/1 improve the predictions.\nWe used <code>GetHyb</code> for OpenBabel atom. \nAs you and many documents say, the hybridization is helpful for predicting coupling constants, I think.</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 611624,
          "author_name": "abendorf",
          "author_url": "",
          "post_date": "08/29/2019 10:57:52",
          "content": "<p>We used GetHyb too.  I'm still not sure why those features didn't help us.  The only thing I can think of was that some of our other features (we had lots...) were picking up on hybridization indirectly.</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 610810,
      "author_name": "jiazhuang",
      "author_url": "",
      "post_date": "08/29/2019 01:37:24",
      "content": "<p>Congratulations! Very good feature engineering! Thanks for sharing.</p>",
      "votes": null,
      "replies": [
        {
          "id": 610839,
          "author_name": "kenmatsu4",
          "author_url": "",
          "post_date": "08/29/2019 01:54:53",
          "content": "<p>Thanks!!!</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 610813,
      "author_name": "xinyan989",
      "author_url": "",
      "post_date": "08/29/2019 01:38:05",
      "content": "<p>MPNN features and LGBM features are same ?</p>",
      "votes": null,
      "replies": [
        {
          "id": 610821,
          "author_name": "kenmatsu4",
          "author_url": "",
          "post_date": "08/29/2019 01:44:32",
          "content": "<p>We use a subset of LGBM feature for MPNN (e.g. openbabel feature for node and edge feature.)</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 611280,
      "author_name": "hjuinj",
      "author_url": "",
      "post_date": "08/29/2019 07:44:09",
      "content": "<p>nice work, just a headsup that it is possible to get ring info directly from rdkit: <a href=\"https://www.rdkit.org/docs/source/rdkit.Chem.rdchem.html#rdkit.Chem.rdchem.RingInfo\">https://www.rdkit.org/docs/source/rdkit.Chem.rdchem.html#rdkit.Chem.rdchem.RingInfo</a></p>",
      "votes": null,
      "replies": [
        {
          "id": 613061,
          "author_name": "kenmatsu4",
          "author_url": "",
          "post_date": "08/30/2019 07:41:15",
          "content": "<p>Thank you for your information! \nThe one reason using networkx calculate ring is understanding the structure of molecule. The libraries is easy to use but black box a little bit.</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 611320,
      "author_name": "stanislavblinov",
      "author_url": "",
      "post_date": "08/29/2019 08:01:07",
      "content": "<p>Congratulations and thanks for sharing!</p>",
      "votes": null,
      "replies": [
        {
          "id": 613062,
          "author_name": "kenmatsu4",
          "author_url": "",
          "post_date": "08/30/2019 07:41:34",
          "content": "<p>Thanks!!!</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 611402,
      "author_name": "jesucristo",
      "author_url": "",
      "post_date": "08/29/2019 08:42:27",
      "content": "<p>great work! actually, we have really similar approach, and very similar LGBM\n<a href=\"https://www.kaggle.com/jesucristo/single-lgbm-2-242-top54\">Single LGBM -2.242 = Top54 </a></p>",
      "votes": null,
      "replies": [
        {
          "id": 613064,
          "author_name": "kenmatsu4",
          "author_url": "",
          "post_date": "08/30/2019 07:43:10",
          "content": "<p>Thank you! I will read your kernel and learn from it!</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 612030,
      "author_name": "cpmpml",
      "author_url": "",
      "post_date": "08/29/2019 15:13:46",
      "content": "<p>Thanks for sharing.  Interesting use of PCA explained variance as feature.  Never thought of that  Congrats on the end result!</p>",
      "votes": null,
      "replies": [
        {
          "id": 613066,
          "author_name": "kenmatsu4",
          "author_url": "",
          "post_date": "08/30/2019 07:44:48",
          "content": "<p>Thank you for your comment, I'm happy to share our idea for you, even if it's a little bit :D</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 612276,
      "author_name": "michelml",
      "author_url": "",
      "post_date": "08/29/2019 17:36:12",
      "content": "<p>Congrats <a href=\"/kenmatsu4\">@kenmatsu4</a> and to your teammate <a href=\"/yoichi7yamakawa\">@yoichi7yamakawa</a> ! Very interesting and informative.</p>",
      "votes": null,
      "replies": [
        {
          "id": 613067,
          "author_name": "kenmatsu4",
          "author_url": "",
          "post_date": "08/30/2019 07:45:08",
          "content": "<p>Thanks!!!</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 612682,
      "author_name": "kawano",
      "author_url": "",
      "post_date": "08/30/2019 00:04:34",
      "content": "<p>Thanks for sharing! Very informative, especially Feature Part.</p>",
      "votes": null,
      "replies": [
        {
          "id": 613069,
          "author_name": "kenmatsu4",
          "author_url": "",
          "post_date": "08/30/2019 07:45:53",
          "content": "<p>Thanks! Now <a href=\"/yoichi7yamakawa\">@yoichi7yamakawa</a> is like a domain expert on this field :D</p>",
          "votes": null,
          "replies": []
        }
      ]
    }
  ],
  "raw_markdown_by_id": {
    "610792": "First of all, we would like to thank everyone who participated in this competition, host members and Kaggle Team! I’m happy to finish this competition with really stable LB, no shake down :D\n\n## Modeling part\nMainly our team used LightGBM with various features (around 500), and adopt NN model (MPNN) customizing based on @hengck23 ’s MPNN model for bringing model diversity to enhance the blending. Also we understood the seed averaging on this competition is very useful, so utilized large number of seed average.\n\nIn detail, please see the following slide.\n\n![solution](https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F291723%2F70b9d209795661e831c5216aea880947%2Fsolution.png?generation=1567041478975554&amp;alt=media)\n\n# Features part\nWe struggled to find the features describing the global/local environment of atoms. We have made a lot of features by using chemical libraries (Openbabel, Dscribe, RDkit).  These libraries are very helpful because we have little domain knowledge at the starting point.\n\nSome effective features are below.\n\n### distance\nSome distances are essential features. We experimented with many distance between\n - index0 and index1 atoms\n - index0/1 and atom in α,β,γ-substituents\n - index0/1 and atom of each type(‘H’,‘C’,‘N’,‘O’)\n - nearest neighbors of index0/1\n\n We also use features from this brilliant notebook(https://www.kaggle.com/criskiev/distance-is-all-you-need-lb-1-481) by @criskiev\n\n### Angle\nAngle feaures also have very strong effects.  We tried making a lot of hand-crafted features.\n - bond angle\n - plain angle\n - dihedral angle with index0/1\n - stats of dihedral angle with index0, 3-atoms-away from index0\n\n### atom type\n We use atom type(‘H’,‘C’,‘N’,‘O’) as features instead of their electronegativity. Using atom type not only of index0/1 but of some substituents and neibor atoms,  we tried to describe the structures around the atoms involved in the coupling.\n\n### partial charge\n partial charge features played important role. We mainly made them using `GetPartialCharges` in Openbabel. Some important features are below.\n - partial charge valus itself of idnex0/1\n - the diff/ratio of partail charge of index0/1\n\n### characteristics of substituents\n According to this document (https://www.ucl.ac.uk/nmr/NMR_lecture_notes/L3_3_97_web.pdf),  it seems effective to make features describing α,β,γ-substituents.\n\n### the hybridization of atoms\n This feature are also from Openbabel.\n\n### ACSF features\n This local descriptor works well. This features derive from the chemical library Dscribe (https://singroup.github.io/dscribe/tutorials/acsf.html) We didn’t tune g2,4_params because we didn’t have time enough. So, this features may have more room of improvement.\n\n### Fingerprint\n To describe the characteristics of the molecules, chemists seems to molecular fingerprints. We made some featrues using Morgan Fingerprint(very huge bits), MACCS Fingerprint(167 bits) They are global descriptors, and it works a little.\n\n### topological data analysis\nMaximum and minimum radius of persistent homology with [ripser](https://ripser.scikit-tda.org/).\n\n### Bond ring feature\nCircle size of bond ring created with networkx.\n\n### PCA feature\nExplained variance PCA feature calculated based on xyz position, aming to represent global shape of a molecular.\n\n\n# Team member\n@yoichi7yamakawa &amp; @kenmatsu4",
    "610802": "Did you get anything out of the hybridization features?  We tried a bunch of different hybridization features, but none of them were any good, which seemed weird because so many NMR sources said that hybridization helps determine coupling constants.",
    "610809": "Yes, some hybridizations of the atoms around index0/1 improve the predictions.\nWe used `GetHyb` for OpenBabel atom. \nAs you and many documents say, the hybridization is helpful for predicting coupling constants, I think.",
    "610810": "Congratulations! Very good feature engineering! Thanks for sharing.",
    "610813": "MPNN features and LGBM features are same ?",
    "610821": "We use a subset of LGBM feature for MPNN (e.g. openbabel feature for node and edge feature.)",
    "610839": "Thanks!!!",
    "611280": "nice work, just a headsup that it is possible to get ring info directly from rdkit: https://www.rdkit.org/docs/source/rdkit.Chem.rdchem.html#rdkit.Chem.rdchem.RingInfo",
    "611320": "Congratulations and thanks for sharing!",
    "611402": "great work! actually, we have really similar approach, and very similar LGBM\n[Single LGBM -2.242 = Top54 ](https://www.kaggle.com/jesucristo/single-lgbm-2-242-top54)",
    "611624": "We used GetHyb too.  I'm still not sure why those features didn't help us.  The only thing I can think of was that some of our other features (we had lots...) were picking up on hybridization indirectly.",
    "612030": "Thanks for sharing.  Interesting use of PCA explained variance as feature.  Never thought of that  Congrats on the end result!",
    "612276": "Congrats @kenmatsu4 and to your teammate @yoichi7yamakawa ! Very interesting and informative.",
    "612682": "Thanks for sharing! Very informative, especially Feature Part.",
    "613061": "Thank you for your information! \nThe one reason using networkx calculate ring is understanding the structure of molecule. The libraries is easy to use but black box a little bit.",
    "613062": "Thanks!!!",
    "613064": "Thank you! I will read your kernel and learn from it!",
    "613066": "Thank you for your comment, I'm happy to share our idea for you, even if it's a little bit :D",
    "613067": "Thanks!!!",
    "613069": "Thanks! Now @yoichi7yamakawa is like a domain expert on this field :D"
  },
  "source": "meta"
}