{
  "id": 531362,
  "title": "#1 Solution",
  "url": "/competitions/bench-tab-v2/writeups/ambrosm-1-solution",
  "author_name": "",
  "post_date": "2024-09-01T04:06:35.756668200Z",
  "votes": 9,
  "comment_count": 4,
  "views": 0,
  "content": "<p>Thank you, <a href=\"https://www.kaggle.com/lucasmorin\" target=\"_blank\">@lucasmorin</a>, for organizing this competition! Optimizing 59 machine learning models at once certainly is a unique challenge, and I learnt a lot while working on it.</p>\n<p>My approach consisted of five steps:</p>\n<ol>\n<li>Determine <a href=\"https://www.kaggle.com/code/ambrosm/tdb2-feature-importance\" target=\"_blank\">feature importance</a> for every dataset and drop features which are obviously useless.</li>\n<li>Use Optuna to tune XGBoost, LightGBM, CatBoost, HistGradientBoosting and DART models for every task.</li>\n<li>Manually analyze datasets with non-anonymous feature names and try to apply some domain knowledge.</li>\n<li>Where Optuna diverges to overly complex models (many iterations or very large trees), try to model the task with a neural network.</li>\n<li>Ensemble.</li>\n</ol>\n<p>The following table shows what was done in addition to the gradient-boosting models:</p>\n<table>\n  <thead>\n    <tr>\n      <th></th>\n      <th>Identifier</th>\n      <th>Solution</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>334_361110</td>\n      <td>Feature engineering exploiting the fact that the time series has been split randomly into train and test so that we can predict the past from the future</td>\n    </tr>\n    <tr>\n      <th>6</th>\n      <td>334_361286</td>\n      <td>Linear support vector machine, ExplainableBoostingClassifier</td>\n    </tr>\n    <tr>\n      <th>8</th>\n      <td>335_361094</td>\n      <td>Semi-supervised classification by LabelPropagation</td>\n    </tr>\n    <tr>\n      <th>11</th>\n      <td>335_361098</td>\n      <td>Feature engineering and ridge regression</td>\n    </tr>\n    <tr>\n      <th>13</th>\n      <td>335_361101</td>\n      <td>Feature engineering (trip duration, and integer and fractional parts of the amount)</td>\n    </tr>\n    <tr>\n      <th>16</th>\n      <td>335_361104</td>\n      <td>Feature engineering and ridge regression</td>\n    </tr>\n    <tr>\n      <th>18</th>\n      <td>335_361288</td>\n      <td>Anisotropic Gaussian process and kernel ridge regression</td>\n    </tr>\n    <tr>\n      <th>20</th>\n      <td>335_361291</td>\n      <td>Duplicate grouping, ExtraTreesRegressor, RandomForestRegressor</td>\n    </tr>\n    <tr>\n      <th>22</th>\n      <td>335_361293</td>\n      <td>Feature engineering interpreting the distance as a categorical feature, high max_bin</td>\n    </tr>\n    <tr>\n      <th>23</th>\n      <td>335_361294</td>\n      <td>SplineTransformer with ridge regression and ExplainableBoostingRegressor</td>\n    </tr>\n    <tr>\n      <th>25</th>\n      <td>336_361073</td>\n      <td>Keras</td>\n    </tr>\n    <tr>\n      <th>32</th>\n      <td>336_361081</td>\n      <td>Feature engineering and ridge regression</td>\n    </tr>\n    <tr>\n      <th>34</th>\n      <td>336_361083</td>\n      <td>Feature engineering (trip duration, and integer and fractional parts of the amount)</td>\n    </tr>\n    <tr>\n      <th>37</th>\n      <td>336_361086</td>\n      <td>SplineTransformer with ridge regression and ExplainableBoostingRegressor</td>\n    </tr>\n    <tr>\n      <th>41</th>\n      <td>336_361280</td>\n      <td>Anisotropic Gaussian process and kernel ridge regression</td>\n    </tr>\n    <tr>\n      <th>42</th>\n      <td>336_361281</td>\n      <td>Duplicate grouping, ExtraTreesRegressor, RandomForestRegressor</td>\n    </tr>\n    <tr>\n      <th>44</th>\n      <td>337_361060</td>\n      <td>Feature engineering and predicting from the future</td>\n    </tr>\n    <tr>\n      <th>51</th>\n      <td>337_361069</td>\n      <td>Keras</td>\n    </tr>\n    <tr>\n      <th>56</th>\n      <td>337_361276</td>\n      <td>Kernel support vector machine</td>\n    </tr>\n  </tbody>\n</table>\n<p>&nbsp;</p>\n<p>Conclusion: AutoML doesn't yet replace common sense.</p>",
  "messages": [
    {
      "id": "2975604",
      "postDate": "09/01/2024 04:06:35",
      "content": "<p>Thank you, <a href=\"https://www.kaggle.com/lucasmorin\" target=\"_blank\">@lucasmorin</a>, for organizing this competition! Optimizing 59 machine learning models at once certainly is a unique challenge, and I learnt a lot while working on it.</p>\n<p>My approach consisted of five steps:</p>\n<ol>\n<li>Determine <a href=\"https://www.kaggle.com/code/ambrosm/tdb2-feature-importance\" target=\"_blank\">feature importance</a> for every dataset and drop features which are obviously useless.</li>\n<li>Use Optuna to tune XGBoost, LightGBM, CatBoost, HistGradientBoosting and DART models for every task.</li>\n<li>Manually analyze datasets with non-anonymous feature names and try to apply some domain knowledge.</li>\n<li>Where Optuna diverges to overly complex models (many iterations or very large trees), try to model the task with a neural network.</li>\n<li>Ensemble.</li>\n</ol>\n<p>The following table shows what was done in addition to the gradient-boosting models:</p>\n<table>\n  <thead>\n    <tr>\n      <th></th>\n      <th>Identifier</th>\n      <th>Solution</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>334_361110</td>\n      <td>Feature engineering exploiting the fact that the time series has been split randomly into train and test so that we can predict the past from the future</td>\n    </tr>\n    <tr>\n      <th>6</th>\n      <td>334_361286</td>\n      <td>Linear support vector machine, ExplainableBoostingClassifier</td>\n    </tr>\n    <tr>\n      <th>8</th>\n      <td>335_361094</td>\n      <td>Semi-supervised classification by LabelPropagation</td>\n    </tr>\n    <tr>\n      <th>11</th>\n      <td>335_361098</td>\n      <td>Feature engineering and ridge regression</td>\n    </tr>\n    <tr>\n      <th>13</th>\n      <td>335_361101</td>\n      <td>Feature engineering (trip duration, and integer and fractional parts of the amount)</td>\n    </tr>\n    <tr>\n      <th>16</th>\n      <td>335_361104</td>\n      <td>Feature engineering and ridge regression</td>\n    </tr>\n    <tr>\n      <th>18</th>\n      <td>335_361288</td>\n      <td>Anisotropic Gaussian process and kernel ridge regression</td>\n    </tr>\n    <tr>\n      <th>20</th>\n      <td>335_361291</td>\n      <td>Duplicate grouping, ExtraTreesRegressor, RandomForestRegressor</td>\n    </tr>\n    <tr>\n      <th>22</th>\n      <td>335_361293</td>\n      <td>Feature engineering interpreting the distance as a categorical feature, high max_bin</td>\n    </tr>\n    <tr>\n      <th>23</th>\n      <td>335_361294</td>\n      <td>SplineTransformer with ridge regression and ExplainableBoostingRegressor</td>\n    </tr>\n    <tr>\n      <th>25</th>\n      <td>336_361073</td>\n      <td>Keras</td>\n    </tr>\n    <tr>\n      <th>32</th>\n      <td>336_361081</td>\n      <td>Feature engineering and ridge regression</td>\n    </tr>\n    <tr>\n      <th>34</th>\n      <td>336_361083</td>\n      <td>Feature engineering (trip duration, and integer and fractional parts of the amount)</td>\n    </tr>\n    <tr>\n      <th>37</th>\n      <td>336_361086</td>\n      <td>SplineTransformer with ridge regression and ExplainableBoostingRegressor</td>\n    </tr>\n    <tr>\n      <th>41</th>\n      <td>336_361280</td>\n      <td>Anisotropic Gaussian process and kernel ridge regression</td>\n    </tr>\n    <tr>\n      <th>42</th>\n      <td>336_361281</td>\n      <td>Duplicate grouping, ExtraTreesRegressor, RandomForestRegressor</td>\n    </tr>\n    <tr>\n      <th>44</th>\n      <td>337_361060</td>\n      <td>Feature engineering and predicting from the future</td>\n    </tr>\n    <tr>\n      <th>51</th>\n      <td>337_361069</td>\n      <td>Keras</td>\n    </tr>\n    <tr>\n      <th>56</th>\n      <td>337_361276</td>\n      <td>Kernel support vector machine</td>\n    </tr>\n  </tbody>\n</table>\n<p>&nbsp;</p>\n<p>Conclusion: AutoML doesn't yet replace common sense.</p>",
      "rawMarkdown": "Thank you, @lucasmorin, for organizing this competition! Optimizing 59 machine learning models at once certainly is a unique challenge, and I learnt a lot while working on it.\n\nMy approach consisted of five steps:\n1. Determine [feature importance](https://www.kaggle.com/code/ambrosm/tdb2-feature-importance) for every dataset and drop features which are obviously useless.\n1. Use Optuna to tune XGBoost, LightGBM, CatBoost, HistGradientBoosting and DART models for every task.\n1. Manually analyze datasets with non-anonymous feature names and try to apply some domain knowledge.\n1. Where Optuna diverges to overly complex models (many iterations or very large trees), try to model the task with a neural network.\n1. Ensemble.\n\nThe following table shows what was done in addition to the gradient-boosting models:\n\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>Identifier</th>\n      <th>Solution</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>334_361110</td>\n      <td>Feature engineering exploiting the fact that the time series has been split randomly into train and test so that we can predict the past from the future</td>\n    </tr>\n    <tr>\n      <th>6</th>\n      <td>334_361286</td>\n      <td>Linear support vector machine, ExplainableBoostingClassifier</td>\n    </tr>\n    <tr>\n      <th>8</th>\n      <td>335_361094</td>\n      <td>Semi-supervised classification by LabelPropagation</td>\n    </tr>\n    <tr>\n      <th>11</th>\n      <td>335_361098</td>\n      <td>Feature engineering and ridge regression</td>\n    </tr>\n    <tr>\n      <th>13</th>\n      <td>335_361101</td>\n      <td>Feature engineering (trip duration, and integer and fractional parts of the amount)</td>\n    </tr>\n    <tr>\n      <th>16</th>\n      <td>335_361104</td>\n      <td>Feature engineering and ridge regression</td>\n    </tr>\n    <tr>\n      <th>18</th>\n      <td>335_361288</td>\n      <td>Anisotropic Gaussian process and kernel ridge regression</td>\n    </tr>\n    <tr>\n      <th>20</th>\n      <td>335_361291</td>\n      <td>Duplicate grouping, ExtraTreesRegressor, RandomForestRegressor</td>\n    </tr>\n    <tr>\n      <th>22</th>\n      <td>335_361293</td>\n      <td>Feature engineering interpreting the distance as a categorical feature, high max_bin</td>\n    </tr>\n    <tr>\n      <th>23</th>\n      <td>335_361294</td>\n      <td>SplineTransformer with ridge regression and ExplainableBoostingRegressor</td>\n    </tr>\n    <tr>\n      <th>25</th>\n      <td>336_361073</td>\n      <td>Keras</td>\n    </tr>\n    <tr>\n      <th>32</th>\n      <td>336_361081</td>\n      <td>Feature engineering and ridge regression</td>\n    </tr>\n    <tr>\n      <th>34</th>\n      <td>336_361083</td>\n      <td>Feature engineering (trip duration, and integer and fractional parts of the amount)</td>\n    </tr>\n    <tr>\n      <th>37</th>\n      <td>336_361086</td>\n      <td>SplineTransformer with ridge regression and ExplainableBoostingRegressor</td>\n    </tr>\n    <tr>\n      <th>41</th>\n      <td>336_361280</td>\n      <td>Anisotropic Gaussian process and kernel ridge regression</td>\n    </tr>\n    <tr>\n      <th>42</th>\n      <td>336_361281</td>\n      <td>Duplicate grouping, ExtraTreesRegressor, RandomForestRegressor</td>\n    </tr>\n    <tr>\n      <th>44</th>\n      <td>337_361060</td>\n      <td>Feature engineering and predicting from the future</td>\n    </tr>\n    <tr>\n      <th>51</th>\n      <td>337_361069</td>\n      <td>Keras</td>\n    </tr>\n    <tr>\n      <th>56</th>\n      <td>337_361276</td>\n      <td>Kernel support vector machine</td>\n    </tr>\n  </tbody>\n</table>\n\n&nbsp;\n\nConclusion: AutoML doesn't yet replace common sense.",
      "votes": null
    },
    {
      "id": "2975671",
      "postDate": "09/01/2024 05:57:31",
      "content": "<p>Great writeup and congratulations!</p>\n<p>I would see automl more as a helper and accelerator, a complimentary tool for a data scientist. <br>\nThe domain knowledge and overall ml knowledge will still be required.</p>",
      "rawMarkdown": "Great writeup and congratulations!\n\nI would see automl more as a helper and accelerator, a complimentary tool for a data scientist. \nThe domain knowledge and overall ml knowledge will still be required.",
      "votes": null
    },
    {
      "id": "2976453",
      "postDate": "09/02/2024 00:39:10",
      "content": "<p>share your notebook <a href=\"https://www.kaggle.com/ambrosm\" target=\"_blank\">@ambrosm</a> </p>",
      "rawMarkdown": "share your notebook @ambrosm",
      "votes": null
    },
    {
      "id": "2976533",
      "postDate": "09/02/2024 03:51:08",
      "content": "<p>Thanks <a href=\"https://www.kaggle.com/ambrosm\" target=\"_blank\">@ambrosm</a> for your conclusions. This seems to be a lot of work. I am happy the feature engineering save the day and conclude for the need of good data scientists. </p>\n<p>Your decision process (4. Try NN if Optuna doesn't work) appears interesting. Do you see other rules of thumbs for choosing NNs over gbdts ? In the end you have two tasks with NNs models ? (Keras). Similarly, what was the hint that made you go to SVM for one task ? just testing it ?</p>\n<p>Also I see two tasks are leaky. Did you guess this because of the name of the features ? or from some more advanced studies ?</p>",
      "rawMarkdown": "Thanks @ambrosm for your conclusions. This seems to be a lot of work. I am happy the feature engineering save the day and conclude for the need of good data scientists. \n\nYour decision process (4. Try NN if Optuna doesn't work) appears interesting. Do you see other rules of thumbs for choosing NNs over gbdts ? In the end you have two tasks with NNs models ? (Keras). Similarly, what was the hint that made you go to SVM for one task ? just testing it ?\n\nAlso I see two tasks are leaky. Did you guess this because of the name of the features ? or from some more advanced studies ?",
      "votes": null
    },
    {
      "id": "2977262",
      "postDate": "09/02/2024 16:59:53",
      "content": "<p>Hi <a href=\"https://www.kaggle.com/lucasmorin\" target=\"_blank\">@lucasmorin</a></p>\n<ol>\n<li>This is my only rule of thumb. Gradient-boosters approximate the decision surface with axis-parallel facets. I speculate that one can construct datasets which need exponentially many axis-parallel facets for a good approximation. For these datasets manual feature engineering or a neural network can bring an advantage. See <a href=\"https://www.kaggle.com/competitions/playground-series-s4e5/discussion/499274\" target=\"_blank\">this discussion</a> for another dataset where gradient-boosters without feature engineering fail.</li>\n<li>I tried two or three more NNs, but at the end I only kept two of them.</li>\n<li>I routinely try linear models pipelined with the scikit-learn preprocessors as well as kernel SVMs (if the data size permits it). Sometimes they give good results.</li>\n<li>If you do a Google search for the feature names, you'll read that the original purpose of the dataset was forecasting with a time series. As soon as I realized that the competition data were split at random, the solution was obvious.</li>\n</ol>",
      "rawMarkdown": "Hi @lucasmorin\n\n1. This is my only rule of thumb. Gradient-boosters approximate the decision surface with axis-parallel facets. I speculate that one can construct datasets which need exponentially many axis-parallel facets for a good approximation. For these datasets manual feature engineering or a neural network can bring an advantage. See [this discussion](https://www.kaggle.com/competitions/playground-series-s4e5/discussion/499274) for another dataset where gradient-boosters without feature engineering fail.\n2. I tried two or three more NNs, but at the end I only kept two of them.\n3. I routinely try linear models pipelined with the scikit-learn preprocessors as well as kernel SVMs (if the data size permits it). Sometimes they give good results.\n4. If you do a Google search for the feature names, you'll read that the original purpose of the dataset was forecasting with a time series. As soon as I realized that the competition data were split at random, the solution was obvious.",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 2975671,
      "author_name": "thomasmeiner",
      "author_url": "",
      "post_date": "09/01/2024 05:57:31",
      "content": "<p>Great writeup and congratulations!</p>\n<p>I would see automl more as a helper and accelerator, a complimentary tool for a data scientist. <br>\nThe domain knowledge and overall ml knowledge will still be required.</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 2976453,
      "author_name": "marifel",
      "author_url": "",
      "post_date": "09/02/2024 00:39:10",
      "content": "<p>share your notebook <a href=\"https://www.kaggle.com/ambrosm\" target=\"_blank\">@ambrosm</a> </p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 2976533,
      "author_name": "lucasmorin",
      "author_url": "",
      "post_date": "09/02/2024 03:51:08",
      "content": "<p>Thanks <a href=\"https://www.kaggle.com/ambrosm\" target=\"_blank\">@ambrosm</a> for your conclusions. This seems to be a lot of work. I am happy the feature engineering save the day and conclude for the need of good data scientists. </p>\n<p>Your decision process (4. Try NN if Optuna doesn't work) appears interesting. Do you see other rules of thumbs for choosing NNs over gbdts ? In the end you have two tasks with NNs models ? (Keras). Similarly, what was the hint that made you go to SVM for one task ? just testing it ?</p>\n<p>Also I see two tasks are leaky. Did you guess this because of the name of the features ? or from some more advanced studies ?</p>",
      "votes": null,
      "replies": [
        {
          "id": 2977262,
          "author_name": "ambrosm",
          "author_url": "",
          "post_date": "09/02/2024 16:59:53",
          "content": "<p>Hi <a href=\"https://www.kaggle.com/lucasmorin\" target=\"_blank\">@lucasmorin</a></p>\n<ol>\n<li>This is my only rule of thumb. Gradient-boosters approximate the decision surface with axis-parallel facets. I speculate that one can construct datasets which need exponentially many axis-parallel facets for a good approximation. For these datasets manual feature engineering or a neural network can bring an advantage. See <a href=\"https://www.kaggle.com/competitions/playground-series-s4e5/discussion/499274\" target=\"_blank\">this discussion</a> for another dataset where gradient-boosters without feature engineering fail.</li>\n<li>I tried two or three more NNs, but at the end I only kept two of them.</li>\n<li>I routinely try linear models pipelined with the scikit-learn preprocessors as well as kernel SVMs (if the data size permits it). Sometimes they give good results.</li>\n<li>If you do a Google search for the feature names, you'll read that the original purpose of the dataset was forecasting with a time series. As soon as I realized that the competition data were split at random, the solution was obvious.</li>\n</ol>",
          "votes": null,
          "replies": []
        }
      ]
    }
  ],
  "raw_markdown_by_id": {
    "2975604": "Thank you, @lucasmorin, for organizing this competition! Optimizing 59 machine learning models at once certainly is a unique challenge, and I learnt a lot while working on it.\n\nMy approach consisted of five steps:\n1. Determine [feature importance](https://www.kaggle.com/code/ambrosm/tdb2-feature-importance) for every dataset and drop features which are obviously useless.\n1. Use Optuna to tune XGBoost, LightGBM, CatBoost, HistGradientBoosting and DART models for every task.\n1. Manually analyze datasets with non-anonymous feature names and try to apply some domain knowledge.\n1. Where Optuna diverges to overly complex models (many iterations or very large trees), try to model the task with a neural network.\n1. Ensemble.\n\nThe following table shows what was done in addition to the gradient-boosting models:\n\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>Identifier</th>\n      <th>Solution</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>334_361110</td>\n      <td>Feature engineering exploiting the fact that the time series has been split randomly into train and test so that we can predict the past from the future</td>\n    </tr>\n    <tr>\n      <th>6</th>\n      <td>334_361286</td>\n      <td>Linear support vector machine, ExplainableBoostingClassifier</td>\n    </tr>\n    <tr>\n      <th>8</th>\n      <td>335_361094</td>\n      <td>Semi-supervised classification by LabelPropagation</td>\n    </tr>\n    <tr>\n      <th>11</th>\n      <td>335_361098</td>\n      <td>Feature engineering and ridge regression</td>\n    </tr>\n    <tr>\n      <th>13</th>\n      <td>335_361101</td>\n      <td>Feature engineering (trip duration, and integer and fractional parts of the amount)</td>\n    </tr>\n    <tr>\n      <th>16</th>\n      <td>335_361104</td>\n      <td>Feature engineering and ridge regression</td>\n    </tr>\n    <tr>\n      <th>18</th>\n      <td>335_361288</td>\n      <td>Anisotropic Gaussian process and kernel ridge regression</td>\n    </tr>\n    <tr>\n      <th>20</th>\n      <td>335_361291</td>\n      <td>Duplicate grouping, ExtraTreesRegressor, RandomForestRegressor</td>\n    </tr>\n    <tr>\n      <th>22</th>\n      <td>335_361293</td>\n      <td>Feature engineering interpreting the distance as a categorical feature, high max_bin</td>\n    </tr>\n    <tr>\n      <th>23</th>\n      <td>335_361294</td>\n      <td>SplineTransformer with ridge regression and ExplainableBoostingRegressor</td>\n    </tr>\n    <tr>\n      <th>25</th>\n      <td>336_361073</td>\n      <td>Keras</td>\n    </tr>\n    <tr>\n      <th>32</th>\n      <td>336_361081</td>\n      <td>Feature engineering and ridge regression</td>\n    </tr>\n    <tr>\n      <th>34</th>\n      <td>336_361083</td>\n      <td>Feature engineering (trip duration, and integer and fractional parts of the amount)</td>\n    </tr>\n    <tr>\n      <th>37</th>\n      <td>336_361086</td>\n      <td>SplineTransformer with ridge regression and ExplainableBoostingRegressor</td>\n    </tr>\n    <tr>\n      <th>41</th>\n      <td>336_361280</td>\n      <td>Anisotropic Gaussian process and kernel ridge regression</td>\n    </tr>\n    <tr>\n      <th>42</th>\n      <td>336_361281</td>\n      <td>Duplicate grouping, ExtraTreesRegressor, RandomForestRegressor</td>\n    </tr>\n    <tr>\n      <th>44</th>\n      <td>337_361060</td>\n      <td>Feature engineering and predicting from the future</td>\n    </tr>\n    <tr>\n      <th>51</th>\n      <td>337_361069</td>\n      <td>Keras</td>\n    </tr>\n    <tr>\n      <th>56</th>\n      <td>337_361276</td>\n      <td>Kernel support vector machine</td>\n    </tr>\n  </tbody>\n</table>\n\n&nbsp;\n\nConclusion: AutoML doesn't yet replace common sense.",
    "2975671": "Great writeup and congratulations!\n\nI would see automl more as a helper and accelerator, a complimentary tool for a data scientist. \nThe domain knowledge and overall ml knowledge will still be required.",
    "2976453": "share your notebook @ambrosm",
    "2976533": "Thanks @ambrosm for your conclusions. This seems to be a lot of work. I am happy the feature engineering save the day and conclude for the need of good data scientists. \n\nYour decision process (4. Try NN if Optuna doesn't work) appears interesting. Do you see other rules of thumbs for choosing NNs over gbdts ? In the end you have two tasks with NNs models ? (Keras). Similarly, what was the hint that made you go to SVM for one task ? just testing it ?\n\nAlso I see two tasks are leaky. Did you guess this because of the name of the features ? or from some more advanced studies ?",
    "2977262": "Hi @lucasmorin\n\n1. This is my only rule of thumb. Gradient-boosters approximate the decision surface with axis-parallel facets. I speculate that one can construct datasets which need exponentially many axis-parallel facets for a good approximation. For these datasets manual feature engineering or a neural network can bring an advantage. See [this discussion](https://www.kaggle.com/competitions/playground-series-s4e5/discussion/499274) for another dataset where gradient-boosters without feature engineering fail.\n2. I tried two or three more NNs, but at the end I only kept two of them.\n3. I routinely try linear models pipelined with the scikit-learn preprocessors as well as kernel SVMs (if the data size permits it). Sometimes they give good results.\n4. If you do a Google search for the feature names, you'll read that the original purpose of the dataset was forecasting with a time series. As soon as I realized that the competition data were split at random, the solution was obvious."
  },
  "source": "meta"
}