{
  "id": 566685,
  "title": "29th Place Solution",
  "content": "<p>Here's a simple solution that gives you a 29th place.</p>\n<h2>Stage 1</h2>\n<p>1) Estimate probability of EFS by fitting a CatBoostClassifier.<br>\n2) Estimate EFS_TIME for the subsample where EFS==1 using CatBoostRegressor.<br>\nEstimates in 1) and 2) are obtained OOF using 10 folds.</p>\n<h2>Stage 2</h2>\n<p>Combine the estimates in Stage 1 to create a metric that maximizes  (EDIT: not CI but Competition Metric). One simple approach, which gives  Competition Metric of around 0.69, is to take the ratio of EFS probability and EFS_TIME . A more elaborate approach which gives you a 29th place is to use Optuna to find the optimal coefficients $$a,b,c,d,e,f$$ that maximize the  Competition Metric of the following ratio: </p>\n<p>$$ \\frac{a*efs^3 + b*efs^2 + c*efs + 0.001}{d*efs\\_time^3 + e*efs\\_time^2 + f*efs\\_time + 0.001}$$</p>\n<p>The final solution uses the ensemble of 10 models from Stage 1 with their corresponding coefficients obtained in Stage 2.</p>",
  "comments": [
    {
      "id": 3148712,
      "author_name": "kacha",
      "author_url": "",
      "post_date": "2025-03-13T13:09:38.700000",
      "content": "<p>How did you come up with this custom metric ? Is that common in some field? </p>",
      "votes": 1,
      "replies": [
        {
          "id": 3150181,
          "author_name": "Nikolay Slobodchuk",
          "author_url": "",
          "post_date": "2025-03-15T06:20:01.193000",
          "content": "<p>It's just a heuristic based on the idea that the metric should be a decreasing function of <code>efs_time</code> and an increasing function of <code>efs</code>. </p>",
          "votes": 0,
          "replies": [
            {
              "id": 3150183,
              "author_name": "kacha",
              "author_url": "",
              "post_date": "2025-03-15T06:23:58.620000",
              "content": "<p>Thank you !</p>",
              "votes": 0,
              "replies": []
            }
          ]
        }
      ]
    },
    {
      "id": 3145519,
      "author_name": "Chris Deotte",
      "author_url": "",
      "post_date": "2025-03-09T23:37:29.597000",
      "content": "<p>Congrats! I like your approach. What was your final submission's CV score, public LB score, and private LB score?</p>\n<p>For your (2) regression model, did you use the <code>efs_time</code> as is? or transform it first, like use ranking or something?</p>",
      "votes": 1,
      "replies": [
        {
          "id": 3145644,
          "author_name": "Nikolay Slobodchuk",
          "author_url": "",
          "post_date": "2025-03-10T04:40:07.433000",
          "content": "<p>Hi! Thanks.<br>\nOne of my submissions scored 0.695 (public) and 0.694(private), the other one 0.694 and 0.692. I've lost my CV score information, unfortunately. And I mostly relied on the public leaderboard data for CV due to personal time constraints 🤭<br>\nThe regression model in stage 1 was fit on unmodified <code>efs_time</code>. In the second stage predicted <code>efs_time</code> was transformed by <code>np.clip(efs_time, a_min=0)</code>.<br>\nCondolences for your leaderboard position shakeup. 🥲</p>",
          "votes": 1,
          "replies": []
        }
      ]
    }
  ],
  "comment_count": 5,
  "messages": [
    {
      "id": 3142607,
      "postDate": "2025-03-06T14:29:21.877Z",
      "content": "<p>Here's a simple solution that gives you a 29th place.</p>\n<h2>Stage 1</h2>\n<p>1) Estimate probability of EFS by fitting a CatBoostClassifier.<br>\n2) Estimate EFS_TIME for the subsample where EFS==1 using CatBoostRegressor.<br>\nEstimates in 1) and 2) are obtained OOF using 10 folds.</p>\n<h2>Stage 2</h2>\n<p>Combine the estimates in Stage 1 to create a metric that maximizes  (EDIT: not CI but Competition Metric). One simple approach, which gives  Competition Metric of around 0.69, is to take the ratio of EFS probability and EFS_TIME . A more elaborate approach which gives you a 29th place is to use Optuna to find the optimal coefficients $$a,b,c,d,e,f$$ that maximize the  Competition Metric of the following ratio: </p>\n<p>$$ \\frac{a*efs^3 + b*efs^2 + c*efs + 0.001}{d*efs\\_time^3 + e*efs\\_time^2 + f*efs\\_time + 0.001}$$</p>\n<p>The final solution uses the ensemble of 10 models from Stage 1 with their corresponding coefficients obtained in Stage 2.</p>",
      "rawMarkdown": "Here's a simple solution that gives you a 29th place.\n\n## Stage 1\n1) Estimate probability of EFS by fitting a CatBoostClassifier.\n2) Estimate EFS_TIME for the subsample where EFS==1 using CatBoostRegressor.\nEstimates in 1) and 2) are obtained OOF using 10 folds.\n\n## Stage 2\nCombine the estimates in Stage 1 to create a metric that maximizes ~~ Concordance Index~~ (EDIT: not CI but Competition Metric). One simple approach, which gives ~~CI~~ Competition Metric of around 0.69, is to take the ratio of EFS probability and EFS_TIME . A more elaborate approach which gives you a 29th place is to use Optuna to find the optimal coefficients $$a,b,c,d,e,f$$ that maximize the ~~CI ~~ Competition Metric of the following ratio: \n\n$$ \\frac{a\\*efs^3 + b\\*efs^2 + c\\*efs + 0.001}{d\\*efs\\\\_time^3 + e\\*efs\\\\_time^2 + f\\*efs\\\\_time + 0.001}$$\n\nThe final solution uses the ensemble of 10 models from Stage 1 with their corresponding coefficients obtained in Stage 2.",
      "votes": 10
    },
    {
      "id": 3148712,
      "postDate": "2025-03-13T13:09:38.700Z",
      "content": "<p>How did you come up with this custom metric ? Is that common in some field? </p>",
      "rawMarkdown": "How did you come up with this custom metric ? Is that common in some field? ",
      "votes": 1,
      "replies": [
        {
          "id": 3150181,
          "postDate": "2025-03-15T06:20:01.193Z",
          "content": "<p>It's just a heuristic based on the idea that the metric should be a decreasing function of <code>efs_time</code> and an increasing function of <code>efs</code>. </p>",
          "rawMarkdown": "It's just a heuristic based on the idea that the metric should be a decreasing function of `efs_time` and an increasing function of `efs`. ",
          "replies": [
            {
              "id": 3150183,
              "postDate": "2025-03-15T06:23:58.620Z",
              "content": "<p>Thank you !</p>",
              "rawMarkdown": "Thank you !"
            }
          ]
        }
      ]
    },
    {
      "id": 3145519,
      "postDate": "2025-03-09T23:37:29.597Z",
      "content": "<p>Congrats! I like your approach. What was your final submission's CV score, public LB score, and private LB score?</p>\n<p>For your (2) regression model, did you use the <code>efs_time</code> as is? or transform it first, like use ranking or something?</p>",
      "rawMarkdown": "Congrats! I like your approach. What was your final submission's CV score, public LB score, and private LB score?\n\nFor your (2) regression model, did you use the `efs_time` as is? or transform it first, like use ranking or something?",
      "votes": 1,
      "replies": [
        {
          "id": 3145644,
          "postDate": "2025-03-10T04:40:07.433Z",
          "content": "<p>Hi! Thanks.<br>\nOne of my submissions scored 0.695 (public) and 0.694(private), the other one 0.694 and 0.692. I've lost my CV score information, unfortunately. And I mostly relied on the public leaderboard data for CV due to personal time constraints 🤭<br>\nThe regression model in stage 1 was fit on unmodified <code>efs_time</code>. In the second stage predicted <code>efs_time</code> was transformed by <code>np.clip(efs_time, a_min=0)</code>.<br>\nCondolences for your leaderboard position shakeup. 🥲</p>",
          "rawMarkdown": "Hi! Thanks.\nOne of my submissions scored 0.695 (public) and 0.694(private), the other one 0.694 and 0.692. I've lost my CV score information, unfortunately. And I mostly relied on the public leaderboard data for CV due to personal time constraints 🤭\nThe regression model in stage 1 was fit on unmodified `efs_time`. In the second stage predicted `efs_time` was transformed by `np.clip(efs_time, a_min=0)`.\nCondolences for your leaderboard position shakeup. 🥲",
          "votes": 1
        }
      ]
    }
  ],
  "complete": true,
  "source": "live",
  "fetched_at": "2026-10-19T19:48:11Z",
  "competition_id": 70942,
  "competition_slug": "equity-post-HCT-survival-predictions",
  "team_id": 13174021,
  "solution_url": "/competitions/equity-post-HCT-survival-predictions/writeups/nikolay-slobodchuk-29th-place-solution"
}