{
  "id": 609295,
  "title": "24 place solution",
  "url": "/competitions/ariel-data-challenge-2025/discussion/609295",
  "author_name": "Ivan Ilyushchenko",
  "post_date": "2025-09-25T16:20:29.321000",
  "votes": 5,
  "comment_count": 0,
  "views": 0,
  "content": "<p>Repository: <a href=\"https://github.com/vilka-lab/Ariel-Data-Challenge-2025/tree/master\" target=\"_blank\">https://github.com/vilka-lab/Ariel-Data-Challenge-2025/tree/master</a><br>\nNotebook with submit: <a href=\"https://www.kaggle.com/code/ivanilyushchenko/24-place-solution\" target=\"_blank\">https://www.kaggle.com/code/ivanilyushchenko/24-place-solution</a></p>\n<p>The solution to the problem is shown in the diagram.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F4054661%2F1427249ee5076aaede77040bd1f40fc5%2F2025-09-25%2011-51-23.png?generation=1758817145458786&amp;alt=media\" alt=\"\"></p>\n<ol>\n<li>Using an open solution via polyfit with correction via a neural network gives much better results than directly predicting the value (approximately +0.1 to the metric).</li>\n<li>I tried two losses - MSE and direct loss through the competition metric. MSE does not allow predicting uncertainty, but the competition metric is quite unstable. I came up with a complex metric with weights of 0.9 for MSE(*1e6) and 0.1 for the GaussianLogLikelihoodLoss. The implementation of a loss is here: <a href=\"https://github.com/vilka-lab/Ariel-Data-Challenge-2025/blob/master/src/loss.py\" target=\"_blank\">https://github.com/vilka-lab/Ariel-Data-Challenge-2025/blob/master/src/loss.py</a></li>\n<li>Channel-wise normalization gives a large increase in metric. Normalization to the white curve worsens the result (~0.03).</li>\n<li>There is too little data for this solution. The network fit in 500 epochs with a batch of 32, after 300 epochs it goes into overfit. If you divide the data into 5 folds, the average score is 0.01-0.02 worse than 10 folds, and the overfit occurs earlier. Most likely, metric can be significantly improved with fit the network on a larger dataset.</li>\n<li>Considering point 4, I spent quite a lot of time trying to generate additional data using exosim2. Unfortunately, it didn't work out for me - the generated data was shifted relative to the competition data and worsened metrics.</li>\n<li>Attempts to find the best backbone for 2d features did not bring results - vit_base_patch32_224.sam_in1k turned out to be the best. A further increase in the size of the network simply accelerates the moment of overfit.</li>\n<li>Augmentations help to overcome overfit somewhat, and most likely a solution can be found here that significantly increases the metrics. I couldn't do it.</li>\n<li>Attempts to manually adjust the result for bad samples with transit curves did not bring results - the model from each fold may work differently with such samples. Some models worked well with bad transits and poorly with ideal ones. I added a feature that indicates whether it's a good sample or not, and this raised the metrics by ~0.015. A good solution here is to simply generate more transit curves and/or make the appropriate augmentations, but see 5 and 7. Well, or I just did something wrong.</li>\n<li>Preprocessing from competition hosts does not affect the result, so i simply remove it and speed up calculations. Attempts to use different prefilters also failed.</li>\n<li>Solution works fast. The final submission contains 20 models - 10 best and 10 last from 10-fold CV and it completes in about 2 hours.</li>\n</ol>\n<p>Thanks for your attention.</p>",
  "messages": [
    {
      "id": 3294229,
      "postDate": "2025-09-25T16:20:29.320Z",
      "content": "<p>Repository: <a href=\"https://github.com/vilka-lab/Ariel-Data-Challenge-2025/tree/master\" target=\"_blank\">https://github.com/vilka-lab/Ariel-Data-Challenge-2025/tree/master</a><br>\nNotebook with submit: <a href=\"https://www.kaggle.com/code/ivanilyushchenko/24-place-solution\" target=\"_blank\">https://www.kaggle.com/code/ivanilyushchenko/24-place-solution</a></p>\n<p>The solution to the problem is shown in the diagram.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F4054661%2F1427249ee5076aaede77040bd1f40fc5%2F2025-09-25%2011-51-23.png?generation=1758817145458786&amp;alt=media\" alt=\"\"></p>\n<ol>\n<li>Using an open solution via polyfit with correction via a neural network gives much better results than directly predicting the value (approximately +0.1 to the metric).</li>\n<li>I tried two losses - MSE and direct loss through the competition metric. MSE does not allow predicting uncertainty, but the competition metric is quite unstable. I came up with a complex metric with weights of 0.9 for MSE(*1e6) and 0.1 for the GaussianLogLikelihoodLoss. The implementation of a loss is here: <a href=\"https://github.com/vilka-lab/Ariel-Data-Challenge-2025/blob/master/src/loss.py\" target=\"_blank\">https://github.com/vilka-lab/Ariel-Data-Challenge-2025/blob/master/src/loss.py</a></li>\n<li>Channel-wise normalization gives a large increase in metric. Normalization to the white curve worsens the result (~0.03).</li>\n<li>There is too little data for this solution. The network fit in 500 epochs with a batch of 32, after 300 epochs it goes into overfit. If you divide the data into 5 folds, the average score is 0.01-0.02 worse than 10 folds, and the overfit occurs earlier. Most likely, metric can be significantly improved with fit the network on a larger dataset.</li>\n<li>Considering point 4, I spent quite a lot of time trying to generate additional data using exosim2. Unfortunately, it didn't work out for me - the generated data was shifted relative to the competition data and worsened metrics.</li>\n<li>Attempts to find the best backbone for 2d features did not bring results - vit_base_patch32_224.sam_in1k turned out to be the best. A further increase in the size of the network simply accelerates the moment of overfit.</li>\n<li>Augmentations help to overcome overfit somewhat, and most likely a solution can be found here that significantly increases the metrics. I couldn't do it.</li>\n<li>Attempts to manually adjust the result for bad samples with transit curves did not bring results - the model from each fold may work differently with such samples. Some models worked well with bad transits and poorly with ideal ones. I added a feature that indicates whether it's a good sample or not, and this raised the metrics by ~0.015. A good solution here is to simply generate more transit curves and/or make the appropriate augmentations, but see 5 and 7. Well, or I just did something wrong.</li>\n<li>Preprocessing from competition hosts does not affect the result, so i simply remove it and speed up calculations. Attempts to use different prefilters also failed.</li>\n<li>Solution works fast. The final submission contains 20 models - 10 best and 10 last from 10-fold CV and it completes in about 2 hours.</li>\n</ol>\n<p>Thanks for your attention.</p>",
      "rawMarkdown": "Repository: https://github.com/vilka-lab/Ariel-Data-Challenge-2025/tree/master\nNotebook with submit: https://www.kaggle.com/code/ivanilyushchenko/24-place-solution\n\nThe solution to the problem is shown in the diagram.\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F4054661%2F1427249ee5076aaede77040bd1f40fc5%2F2025-09-25%2011-51-23.png?generation=1758817145458786&alt=media)\n\n1. Using an open solution via polyfit with correction via a neural network gives much better results than directly predicting the value (approximately +0.1 to the metric).\n2. I tried two losses - MSE and direct loss through the competition metric. MSE does not allow predicting uncertainty, but the competition metric is quite unstable. I came up with a complex metric with weights of 0.9 for MSE(*1e6) and 0.1 for the GaussianLogLikelihoodLoss. The implementation of a loss is here: https://github.com/vilka-lab/Ariel-Data-Challenge-2025/blob/master/src/loss.py\n3. Channel-wise normalization gives a large increase in metric. Normalization to the white curve worsens the result (~0.03).\n4. There is too little data for this solution. The network fit in 500 epochs with a batch of 32, after 300 epochs it goes into overfit. If you divide the data into 5 folds, the average score is 0.01-0.02 worse than 10 folds, and the overfit occurs earlier. Most likely, metric can be significantly improved with fit the network on a larger dataset.\n5. Considering point 4, I spent quite a lot of time trying to generate additional data using exosim2. Unfortunately, it didn't work out for me - the generated data was shifted relative to the competition data and worsened metrics.\n6. Attempts to find the best backbone for 2d features did not bring results - vit_base_patch32_224.sam_in1k turned out to be the best. A further increase in the size of the network simply accelerates the moment of overfit.\n7. Augmentations help to overcome overfit somewhat, and most likely a solution can be found here that significantly increases the metrics. I couldn't do it.\n8. Attempts to manually adjust the result for bad samples with transit curves did not bring results - the model from each fold may work differently with such samples. Some models worked well with bad transits and poorly with ideal ones. I added a feature that indicates whether it's a good sample or not, and this raised the metrics by ~0.015. A good solution here is to simply generate more transit curves and/or make the appropriate augmentations, but see 5 and 7. Well, or I just did something wrong.\n9. Preprocessing from competition hosts does not affect the result, so i simply remove it and speed up calculations. Attempts to use different prefilters also failed.\n10. Solution works fast. The final submission contains 20 models - 10 best and 10 last from 10-fold CV and it completes in about 2 hours.\n\nThanks for your attention.",
      "votes": 5
    }
  ],
  "comments": [],
  "raw_markdown_by_id": {
    "3294229": "Repository: https://github.com/vilka-lab/Ariel-Data-Challenge-2025/tree/master\nNotebook with submit: https://www.kaggle.com/code/ivanilyushchenko/24-place-solution\n\nThe solution to the problem is shown in the diagram.\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-user-content/o/inbox%2F4054661%2F1427249ee5076aaede77040bd1f40fc5%2F2025-09-25%2011-51-23.png?generation=1758817145458786&alt=media)\n\n1. Using an open solution via polyfit with correction via a neural network gives much better results than directly predicting the value (approximately +0.1 to the metric).\n2. I tried two losses - MSE and direct loss through the competition metric. MSE does not allow predicting uncertainty, but the competition metric is quite unstable. I came up with a complex metric with weights of 0.9 for MSE(*1e6) and 0.1 for the GaussianLogLikelihoodLoss. The implementation of a loss is here: https://github.com/vilka-lab/Ariel-Data-Challenge-2025/blob/master/src/loss.py\n3. Channel-wise normalization gives a large increase in metric. Normalization to the white curve worsens the result (~0.03).\n4. There is too little data for this solution. The network fit in 500 epochs with a batch of 32, after 300 epochs it goes into overfit. If you divide the data into 5 folds, the average score is 0.01-0.02 worse than 10 folds, and the overfit occurs earlier. Most likely, metric can be significantly improved with fit the network on a larger dataset.\n5. Considering point 4, I spent quite a lot of time trying to generate additional data using exosim2. Unfortunately, it didn't work out for me - the generated data was shifted relative to the competition data and worsened metrics.\n6. Attempts to find the best backbone for 2d features did not bring results - vit_base_patch32_224.sam_in1k turned out to be the best. A further increase in the size of the network simply accelerates the moment of overfit.\n7. Augmentations help to overcome overfit somewhat, and most likely a solution can be found here that significantly increases the metrics. I couldn't do it.\n8. Attempts to manually adjust the result for bad samples with transit curves did not bring results - the model from each fold may work differently with such samples. Some models worked well with bad transits and poorly with ideal ones. I added a feature that indicates whether it's a good sample or not, and this raised the metrics by ~0.015. A good solution here is to simply generate more transit curves and/or make the appropriate augmentations, but see 5 and 7. Well, or I just did something wrong.\n9. Preprocessing from competition hosts does not affect the result, so i simply remove it and speed up calculations. Attempts to use different prefilters also failed.\n10. Solution works fast. The final submission contains 20 models - 10 best and 10 last from 10-fold CV and it completes in about 2 hours.\n\nThanks for your attention."
  }
}