{
  "id": 567112,
  "title": "32nd Place Solution",
  "content": "<p>First of all, I'd like to thank the organizers and Kaggle for hosting such an amazing competition. I would also like to express my special gratitude to my teammates <a href=\"https://www.kaggle.com/cody11null\" target=\"_blank\">@cody11null</a> and <a href=\"https://www.kaggle.com/stefanoclss\" target=\"_blank\">stefanoclss</a>.</p>\n<h1><strong>Overview</strong></h1>\n<p>To improve the accuracy of the target transformation, we first transformed the survival times of each race_group to follow a log-logistic distribution, and then performed final model prediction on an ensemble of multiple GBDT+TabM and nn_pairwise models using the two types of target transformation.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F17113715%2Fb2e193d0c094378486c536f23c256286%2F2.png?generation=1741436626853330&amp;alt=media\" alt=\"\"></p>\n<h1><strong>Target Transformation</strong></h1>\n<p>Assuming that efs_time with long survival time (efs=0) and efs_time with short survival time (efs=1) follow different statistical distributions, found that the efs=1 data follow a unique log-logistic distribution by race_group. Then extracted the data with efs=0 that followed this log-logistic distribution, and corrected these data by the conditional expectation of this distribution. Using these data, two target transformations (Kaplan-Meier and QuantileTransform) were performed.</p>\n<h1><strong>Training Models</strong></h1>\n<p>We performed some feature engineering and built the following model.</p>\n<ul>\n<li>Feature Engineering: One-hot encoding, Lavel encoding and custom features</li>\n<li>Model: 19GBDTs+7nn models as following; GBDTs (CAT, LGB, XGB) and TabM on KaplanMeier target, GBDTs (CAT, LGB, XGB) with Monotonicity, Event Masked PRL-NN, Yunbase Model etc</li>\n</ul>\n<h1><strong>Ensamble model</strong></h1>\n<p>Each single models were divided into several blocks, and a stacking ensemble using the oof of each model was performed for each block in the first layer. A model was constructed that maximized CV and LB by increasing diversity for each block through repeated trials. In the second layer, a linear model was constructed in which the first layer ensemble was weighted to maximize the c-index of CV.Finally,post-processing was performed to balance the scores for each race_group and maximize the c-index.</p>\n<h1><strong>Submission</strong></h1>\n<p>Below is our final submission result.<br>\nBest : CV 0.6875 / public LB 0.694 / private LB 0.694</p>",
  "comments": [
    {
      "id": 3146320,
      "author_name": "Ravi Ramakrishnan",
      "author_url": "",
      "post_date": "2025-03-10T18:26:36.253000",
      "content": "<p>What was the use of scipy -&gt; minimize here <a href=\"https://www.kaggle.com/kazuwhite\" target=\"_blank\">@kazuwhite</a> ?</p>",
      "votes": 1,
      "replies": [
        {
          "id": 3146620,
          "author_name": "KW",
          "author_url": "",
          "post_date": "2025-03-11T04:13:14.690000",
          "content": "<p>One ensemble block used Nelder-Mead to search for ensemble weights and scipy-minimize to minimize the negative c-index score function. <br>\nOn the other hand, in another ensemble block, weights that directly maximize the c-index were found by simulation, and these were finally combined to build a predictive model.</p>",
          "votes": 1,
          "replies": [
            {
              "id": 3146641,
              "author_name": "Ravi Ramakrishnan",
              "author_url": "",
              "post_date": "2025-03-11T04:58:39.893000",
              "content": "<p>Got this <a href=\"https://www.kaggle.com/kazuwhite\" target=\"_blank\">@kazuwhite</a> <br>\nGreat work! This seems like a hill climb of sorts </p>",
              "votes": 1,
              "replies": []
            }
          ]
        }
      ]
    },
    {
      "id": 3146614,
      "author_name": "",
      "author_url": "",
      "post_date": "2025-03-11T04:04:19.917000",
      "content": "",
      "votes": 0,
      "replies": []
    }
  ],
  "comment_count": 4,
  "messages": [
    {
      "id": 3144523,
      "postDate": "2025-03-08T13:06:52.393Z",
      "content": "<p>First of all, I'd like to thank the organizers and Kaggle for hosting such an amazing competition. I would also like to express my special gratitude to my teammates <a href=\"https://www.kaggle.com/cody11null\" target=\"_blank\">@cody11null</a> and <a href=\"https://www.kaggle.com/stefanoclss\" target=\"_blank\">stefanoclss</a>.</p>\n<h1><strong>Overview</strong></h1>\n<p>To improve the accuracy of the target transformation, we first transformed the survival times of each race_group to follow a log-logistic distribution, and then performed final model prediction on an ensemble of multiple GBDT+TabM and nn_pairwise models using the two types of target transformation.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F17113715%2Fb2e193d0c094378486c536f23c256286%2F2.png?generation=1741436626853330&amp;alt=media\" alt=\"\"></p>\n<h1><strong>Target Transformation</strong></h1>\n<p>Assuming that efs_time with long survival time (efs=0) and efs_time with short survival time (efs=1) follow different statistical distributions, found that the efs=1 data follow a unique log-logistic distribution by race_group. Then extracted the data with efs=0 that followed this log-logistic distribution, and corrected these data by the conditional expectation of this distribution. Using these data, two target transformations (Kaplan-Meier and QuantileTransform) were performed.</p>\n<h1><strong>Training Models</strong></h1>\n<p>We performed some feature engineering and built the following model.</p>\n<ul>\n<li>Feature Engineering: One-hot encoding, Lavel encoding and custom features</li>\n<li>Model: 19GBDTs+7nn models as following; GBDTs (CAT, LGB, XGB) and TabM on KaplanMeier target, GBDTs (CAT, LGB, XGB) with Monotonicity, Event Masked PRL-NN, Yunbase Model etc</li>\n</ul>\n<h1><strong>Ensamble model</strong></h1>\n<p>Each single models were divided into several blocks, and a stacking ensemble using the oof of each model was performed for each block in the first layer. A model was constructed that maximized CV and LB by increasing diversity for each block through repeated trials. In the second layer, a linear model was constructed in which the first layer ensemble was weighted to maximize the c-index of CV.Finally,post-processing was performed to balance the scores for each race_group and maximize the c-index.</p>\n<h1><strong>Submission</strong></h1>\n<p>Below is our final submission result.<br>\nBest : CV 0.6875 / public LB 0.694 / private LB 0.694</p>",
      "rawMarkdown": "First of all, I'd like to thank the organizers and Kaggle for hosting such an amazing competition. I would also like to express my special gratitude to my teammates [@cody11null](https://www.kaggle.com/cody11null) and [stefanoclss](https://www.kaggle.com/stefanoclss).\n\n# **Overview**\nTo improve the accuracy of the target transformation, we first transformed the survival times of each race_group to follow a log-logistic distribution, and then performed final model prediction on an ensemble of multiple GBDT+TabM and nn_pairwise models using the two types of target transformation.\n\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F17113715%2Fb2e193d0c094378486c536f23c256286%2F2.png?generation=1741436626853330&alt=media)\n\n# **Target Transformation**\nAssuming that efs_time with long survival time (efs=0) and efs_time with short survival time (efs=1) follow different statistical distributions, found that the efs=1 data follow a unique log-logistic distribution by race_group. Then extracted the data with efs=0 that followed this log-logistic distribution, and corrected these data by the conditional expectation of this distribution. Using these data, two target transformations (Kaplan-Meier and QuantileTransform) were performed.\n\n# **Training Models**\nWe performed some feature engineering and built the following model.\n- Feature Engineering: One-hot encoding, Lavel encoding and custom features\n- Model: 19GBDTs+7nn models as following; GBDTs (CAT, LGB, XGB) and TabM on KaplanMeier target, GBDTs (CAT, LGB, XGB) with Monotonicity, Event Masked PRL-NN, Yunbase Model etc\n         \n# **Ensamble model**\nEach single models were divided into several blocks, and a stacking ensemble using the oof of each model was performed for each block in the first layer. A model was constructed that maximized CV and LB by increasing diversity for each block through repeated trials. In the second layer, a linear model was constructed in which the first layer ensemble was weighted to maximize the c-index of CV.Finally,post-processing was performed to balance the scores for each race_group and maximize the c-index.\n\n# **Submission**\nBelow is our final submission result.\nBest : CV 0.6875 / public LB 0.694 / private LB 0.694",
      "votes": 13
    },
    {
      "id": 3146320,
      "postDate": "2025-03-10T18:26:36.253Z",
      "content": "<p>What was the use of scipy -&gt; minimize here <a href=\"https://www.kaggle.com/kazuwhite\" target=\"_blank\">@kazuwhite</a> ?</p>",
      "rawMarkdown": "What was the use of scipy -> minimize here @kazuwhite ?",
      "votes": 1,
      "replies": [
        {
          "id": 3146620,
          "postDate": "2025-03-11T04:13:14.690Z",
          "content": "<p>One ensemble block used Nelder-Mead to search for ensemble weights and scipy-minimize to minimize the negative c-index score function. <br>\nOn the other hand, in another ensemble block, weights that directly maximize the c-index were found by simulation, and these were finally combined to build a predictive model.</p>",
          "rawMarkdown": "One ensemble block used Nelder-Mead to search for ensemble weights and scipy-minimize to minimize the negative c-index score function. \nOn the other hand, in another ensemble block, weights that directly maximize the c-index were found by simulation, and these were finally combined to build a predictive model.",
          "votes": 1,
          "replies": [
            {
              "id": 3146641,
              "postDate": "2025-03-11T04:58:39.893Z",
              "content": "<p>Got this <a href=\"https://www.kaggle.com/kazuwhite\" target=\"_blank\">@kazuwhite</a> <br>\nGreat work! This seems like a hill climb of sorts </p>",
              "rawMarkdown": "Got this @kazuwhite \nGreat work! This seems like a hill climb of sorts ",
              "votes": 1
            }
          ]
        }
      ]
    },
    {
      "id": 3146614,
      "postDate": "2025-03-11T04:04:19.917Z",
      "rawMarkdown": "",
      "isDeleted": true
    }
  ],
  "complete": true,
  "source": "live",
  "fetched_at": "2026-10-19T19:50:07Z",
  "competition_id": 70942,
  "competition_slug": "equity-post-HCT-survival-predictions",
  "team_id": 13111598,
  "solution_url": "/competitions/equity-post-HCT-survival-predictions/writeups/cody-stefanoclss-kaz-32nd-place-solution"
}