{
  "id": 566572,
  "title": "[33rd place] Key points of my solution",
  "content": "<h3>1. Target Construction</h3>\n<p>While many participants used Kaplan-Meier fitted targets, they overlooked its fundamental meaning. The Kaplan-Meier curve represents survival probability at given time points, whereas we need to measure patients' \"risk index\". Direct application ignores critical differentiation between efs=1 and efs=0 samples when efs_time is identical.</p>\n<p>Key insights:</p>\n<p>For efs=1 samples: Survival probability at efs_time directly reflects risk magnitude<br>\nFor efs=0 (censored) samples: We need to estimate their expected event time<br>\nSolution framework:<br>\nDefine a critical time t where:<br>\nP(event at t | survival until efs_time) = 0.5</p>\n<p>Through conditional probability derivation:</p>\n<p>P(event at t | survival until efs_time) = P(event at t) / KM(efs_time) = 0.5<br>\nWhere KM(efs_time) is the Kaplan-Meier survival probability at efs_time.</p>\n<p>Thus for censored samples (efs=0):<br>\nFinal target = 0.5 × KM(efs_time)<br>\nThis enables unified risk evaluation across both sample types.</p>\n<h3>2. Sample Weighting</h3>\n<p>While establishing risk indices for censored samples, we must acknowledge their inherent uncertainty compared to efs=1 samples - particularly those with low efs_time values.</p>\n<p>Experimentation:<br>\nAttempted efs_time-based dynamic weighting (unsatisfactory results)<br>\nFinal approach: Global weight of 0.6 for all efs=0 samples</p>\n<p>While pursuing technical excellence in competitions, let's remember the real-world impact of our work. May all allogeneic HCT patients receive optimal care and embark on journeys filled with hope and fulfillment. The true victory lies in translating these data patterns into better clinical outcomes.</p>",
  "comments": [
    {
      "id": 3142158,
      "author_name": "NewRomantics",
      "author_url": "",
      "post_date": "2025-03-06T06:27:06.087000",
      "content": "<p>That's good. can you share the efs_time-based dynamic weighting code. I want to have a try!</p>",
      "votes": 0,
      "replies": [
        {
          "id": 3142173,
          "author_name": "CowTree",
          "author_url": "",
          "post_date": "2025-03-06T06:47:34.013000",
          "content": "<p><code>def time_based_weight(t, a, b):\n    return a + (1 - a) * (t / 200) ** b</code><br>\n<code>train['sample_weight'] = train.apply(\n        lambda row: time_based_weight(row['efs_time'], 0.57, 3) if row['efs'] == 0 else 1.0,\n        axis=1\n    )</code><br>\nI have tried several parameter combinations, and they performed the best at 0.57 and 3.00. However, given the nature of this function itself, this essentially equates to setting the weight as a constant value of 0.57. I feel that the function I used contains critical flaws. Perhaps you might have more reasonable weight-setting approaches.</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 3142157,
      "author_name": "",
      "author_url": "",
      "post_date": "2025-03-06T06:24:44.120000",
      "content": "",
      "votes": 0,
      "replies": []
    }
  ],
  "comment_count": 3,
  "messages": [
    {
      "id": 3142050,
      "postDate": "2025-03-06T03:59:56.503Z",
      "content": "<h3>1. Target Construction</h3>\n<p>While many participants used Kaplan-Meier fitted targets, they overlooked its fundamental meaning. The Kaplan-Meier curve represents survival probability at given time points, whereas we need to measure patients' \"risk index\". Direct application ignores critical differentiation between efs=1 and efs=0 samples when efs_time is identical.</p>\n<p>Key insights:</p>\n<p>For efs=1 samples: Survival probability at efs_time directly reflects risk magnitude<br>\nFor efs=0 (censored) samples: We need to estimate their expected event time<br>\nSolution framework:<br>\nDefine a critical time t where:<br>\nP(event at t | survival until efs_time) = 0.5</p>\n<p>Through conditional probability derivation:</p>\n<p>P(event at t | survival until efs_time) = P(event at t) / KM(efs_time) = 0.5<br>\nWhere KM(efs_time) is the Kaplan-Meier survival probability at efs_time.</p>\n<p>Thus for censored samples (efs=0):<br>\nFinal target = 0.5 × KM(efs_time)<br>\nThis enables unified risk evaluation across both sample types.</p>\n<h3>2. Sample Weighting</h3>\n<p>While establishing risk indices for censored samples, we must acknowledge their inherent uncertainty compared to efs=1 samples - particularly those with low efs_time values.</p>\n<p>Experimentation:<br>\nAttempted efs_time-based dynamic weighting (unsatisfactory results)<br>\nFinal approach: Global weight of 0.6 for all efs=0 samples</p>\n<p>While pursuing technical excellence in competitions, let's remember the real-world impact of our work. May all allogeneic HCT patients receive optimal care and embark on journeys filled with hope and fulfillment. The true victory lies in translating these data patterns into better clinical outcomes.</p>",
      "rawMarkdown": "### 1. Target Construction\nWhile many participants used Kaplan-Meier fitted targets, they overlooked its fundamental meaning. The Kaplan-Meier curve represents survival probability at given time points, whereas we need to measure patients' \"risk index\". Direct application ignores critical differentiation between efs=1 and efs=0 samples when efs_time is identical.\n\nKey insights:\n\nFor efs=1 samples: Survival probability at efs_time directly reflects risk magnitude\nFor efs=0 (censored) samples: We need to estimate their expected event time\nSolution framework:\nDefine a critical time t where:\nP(event at t | survival until efs_time) = 0.5\n\nThrough conditional probability derivation:\n\nP(event at t | survival until efs_time) = P(event at t) / KM(efs_time) = 0.5\nWhere KM(efs_time) is the Kaplan-Meier survival probability at efs_time.\n\nThus for censored samples (efs=0):\nFinal target = 0.5 × KM(efs_time)\nThis enables unified risk evaluation across both sample types.\n\n### 2. Sample Weighting\nWhile establishing risk indices for censored samples, we must acknowledge their inherent uncertainty compared to efs=1 samples - particularly those with low efs_time values.\n\nExperimentation:\nAttempted efs_time-based dynamic weighting (unsatisfactory results)\nFinal approach: Global weight of 0.6 for all efs=0 samples\n\n\nWhile pursuing technical excellence in competitions, let's remember the real-world impact of our work. May all allogeneic HCT patients receive optimal care and embark on journeys filled with hope and fulfillment. The true victory lies in translating these data patterns into better clinical outcomes.\n",
      "votes": 9
    },
    {
      "id": 3142158,
      "postDate": "2025-03-06T06:27:06.087Z",
      "content": "<p>That's good. can you share the efs_time-based dynamic weighting code. I want to have a try!</p>",
      "rawMarkdown": "That's good. can you share the efs_time-based dynamic weighting code. I want to have a try!",
      "replies": [
        {
          "id": 3142173,
          "postDate": "2025-03-06T06:47:34.013Z",
          "content": "<p><code>def time_based_weight(t, a, b):\n    return a + (1 - a) * (t / 200) ** b</code><br>\n<code>train['sample_weight'] = train.apply(\n        lambda row: time_based_weight(row['efs_time'], 0.57, 3) if row['efs'] == 0 else 1.0,\n        axis=1\n    )</code><br>\nI have tried several parameter combinations, and they performed the best at 0.57 and 3.00. However, given the nature of this function itself, this essentially equates to setting the weight as a constant value of 0.57. I feel that the function I used contains critical flaws. Perhaps you might have more reasonable weight-setting approaches.</p>",
          "rawMarkdown": "`def time_based_weight(t, a, b):\n    return a + (1 - a) * (t / 200) ** b `\n`train['sample_weight'] = train.apply(\n        lambda row: time_based_weight(row['efs_time'], 0.57, 3) if row['efs'] == 0 else 1.0,\n        axis=1\n    )`\nI have tried several parameter combinations, and they performed the best at 0.57 and 3.00. However, given the nature of this function itself, this essentially equates to setting the weight as a constant value of 0.57. I feel that the function I used contains critical flaws. Perhaps you might have more reasonable weight-setting approaches."
        }
      ]
    },
    {
      "id": 3142157,
      "postDate": "2025-03-06T06:24:44.120Z",
      "rawMarkdown": "",
      "isDeleted": true
    }
  ],
  "complete": true,
  "source": "live",
  "fetched_at": "2026-10-19T19:46:47Z",
  "competition_id": 70942,
  "competition_slug": "equity-post-HCT-survival-predictions",
  "team_id": 13334185,
  "solution_url": "/competitions/equity-post-HCT-survival-predictions/writeups/cowtree-33rd-place-key-points-of-my-solution"
}