{
  "id": 582344,
  "title": "cv vs public lb thread",
  "url": "/competitions/cmi-detect-behavior-with-sensor-data/discussion/582344",
  "author_name": "chumajin",
  "post_date": "2025-05-30T15:53:36.654000",
  "votes": 69,
  "comment_count": 102,
  "views": 0,
  "content": "<p>For this type of continuous data, the first step is to create a model using only the very end of the sequence and evaluate it. </p>\n<p>example</p>\n<pre><code>  train.groupby().tail().reset_index(dropTrue)\n</code></pre>\n<p>In my case, I used CatBoost and obtained the following results.</p>\n<p>5 kfold: StratifiedGroupKFold (train[\"sequence_id\"])<br>\n※ update note : group = \"sequence_id\" means leakage, group = \"subject\" is correct.</p>\n<p>metric:  <a href=\"https://www.kaggle.com/code/metric/cmi-2025\" target=\"_blank\">https://www.kaggle.com/code/metric/cmi-2025</a></p>\n<p>cv: 0.5798545 (binary f1: 0.8626, f1 macro: 0.297100)<br>\npublic lb: 0.58</p>\n<p>The CV and public LB seem to align perfectly, but what does everyone else think?</p>\n<p>※ Note : I just only IMU sensor features</p>",
  "messages": [
    {
      "id": 3213877,
      "postDate": "2025-05-30T15:53:36.653Z",
      "content": "<p>For this type of continuous data, the first step is to create a model using only the very end of the sequence and evaluate it. </p>\n<p>example</p>\n<pre><code>  train.groupby().tail().reset_index(dropTrue)\n</code></pre>\n<p>In my case, I used CatBoost and obtained the following results.</p>\n<p>5 kfold: StratifiedGroupKFold (train[\"sequence_id\"])<br>\n※ update note : group = \"sequence_id\" means leakage, group = \"subject\" is correct.</p>\n<p>metric:  <a href=\"https://www.kaggle.com/code/metric/cmi-2025\" target=\"_blank\">https://www.kaggle.com/code/metric/cmi-2025</a></p>\n<p>cv: 0.5798545 (binary f1: 0.8626, f1 macro: 0.297100)<br>\npublic lb: 0.58</p>\n<p>The CV and public LB seem to align perfectly, but what does everyone else think?</p>\n<p>※ Note : I just only IMU sensor features</p>",
      "rawMarkdown": "For this type of continuous data, the first step is to create a model using only the very end of the sequence and evaluate it. \n\nexample\n```\ntrain = train.groupby(\"sequence_id\").tail(1).reset_index(drop=True)\n```\n\nIn my case, I used CatBoost and obtained the following results.\n\n5 kfold: StratifiedGroupKFold (train[\"sequence_id\"])\n※ update note : group = \"sequence_id\" means leakage, group = \"subject\" is correct.\n\nmetric:  https://www.kaggle.com/code/metric/cmi-2025\n\ncv: 0.5798545 (binary f1: 0.8626, f1 macro: 0.297100)\npublic lb: 0.58\n\nThe CV and public LB seem to align perfectly, but what does everyone else think?\n\n※ Note : I just only IMU sensor features",
      "votes": 69
    },
    {
      "id": 3268024,
      "postDate": "2025-08-12T09:10:21.813Z",
      "content": "<p>CV:(sgkf on subject and gesture)<br>\nIMU 0.825~0.828<br>\nAll: 0.886</p>\n<p>LB:<br>\nIMU:0.839~0.844<br>\n(0.5<em>IMU+0.5</em>All):0.868</p>\n<p>Any top teams willing to share their scores?</p>",
      "rawMarkdown": "CV:(sgkf on subject and gesture)\nIMU 0.825~0.828\nAll: 0.886\n\nLB:\nIMU:0.839~0.844\n(0.5*IMU+0.5*All):0.868\n\nAny top teams willing to share their scores?",
      "votes": 8,
      "replies": [
        {
          "id": 3268029,
          "postDate": "2025-08-12T09:22:20.007Z",
          "content": "<p>LB score 0.852<br>\nIMU only: 0.815<br>\nIMU + TOF + THM: 0.89<br>\nCV (sgkf on subject and gesture)<br>\nIMU only: 0.815<br>\nIMU + TOF + THM: 0.89</p>",
          "rawMarkdown": "LB score 0.852\nIMU only: 0.815\nIMU + TOF + THM: 0.89\nCV (sgkf on subject and gesture)\nIMU only: 0.815\nIMU + TOF + THM: 0.89",
          "votes": 2,
          "replies": [
            {
              "id": 3269894,
              "postDate": "2025-08-15T09:20:22.897Z",
              "rawMarkdown": "",
              "isDeleted": true
            }
          ]
        },
        {
          "id": 3268030,
          "postDate": "2025-08-12T09:23:58.257Z",
          "content": "<p>Your IMU-only score is awesome.</p>",
          "rawMarkdown": "Your IMU-only score is awesome."
        },
        {
          "id": 3268041,
          "postDate": "2025-08-12T09:40:15.460Z",
          "content": "<p>TY for confirming IMU can be pushed so much! I assume it's a single model? Wondering how much it can be pushed more with ensembling~</p>",
          "rawMarkdown": "TY for confirming IMU can be pushed so much! I assume it's a single model? Wondering how much it can be pushed more with ensembling~",
          "replies": [
            {
              "id": 3268043,
              "postDate": "2025-08-12T09:45:44.073Z",
              "content": "<p>Yes, single model. I am wondering too, I don't have diversed work to ensemble currently.</p>",
              "rawMarkdown": "Yes, single model. I am wondering too, I don't have diversed work to ensemble currently."
            }
          ]
        },
        {
          "id": 3268459,
          "postDate": "2025-08-13T01:43:43.033Z",
          "content": "<p>My best imu only CV: 0.824<br>\nLB: 0.834</p>\n<p>I'm still confused about all sensors cv…</p>",
          "rawMarkdown": "My best imu only CV: 0.824\nLB: 0.834\n\nI'm still confused about all sensors cv...",
          "votes": 1,
          "replies": [
            {
              "id": 3274578,
              "postDate": "2025-08-25T03:48:47.503Z",
              "content": "<p>2025.8.25 update: </p>\n<p>all sensors cv: 0.863 lb:0.865</p>",
              "rawMarkdown": "2025.8.25 update: \n\nall sensors cv: 0.863 lb:0.865"
            }
          ]
        },
        {
          "id": 3269417,
          "postDate": "2025-08-14T13:07:32.870Z",
          "content": "<p>CV(sgkf on subject and gesture)<br>\nIMU: 0.8390<br>\nAll: 0.8861</p>\n<p>LB:<br>\n0.857</p>\n<p>--overfitting?</p>",
          "rawMarkdown": "CV(sgkf on subject and gesture)\nIMU: 0.8390\nAll: 0.8861\n\nLB:\n0.857\n\n--overfitting?",
          "votes": 1,
          "replies": [
            {
              "id": 3269437,
              "postDate": "2025-08-14T13:37:31.647Z",
              "content": "<p>Did you test IMU only LB score?</p>",
              "rawMarkdown": "Did you test IMU only LB score?"
            },
            {
              "id": 3269514,
              "postDate": "2025-08-14T15:22:04.420Z",
              "content": "<p>IMU only LB: 0.835</p>",
              "rawMarkdown": "IMU only LB: 0.835"
            }
          ]
        },
        {
          "id": 3269561,
          "postDate": "2025-08-14T16:32:46.667Z",
          "content": "<p>Thanks for sharing, this confirms my IMU model is quite weak - <br>\nCV 0.827 - LB 0.822 <br>\n(sgkf on subject and gesture)<br>\nMy IMU+TOF+THM on the other end looks alright : <br>\nCV 0.887 - LB 0.859</p>",
          "rawMarkdown": "Thanks for sharing, this confirms my IMU model is quite weak - \nCV 0.827 - LB 0.822 \n(sgkf on subject and gesture)\nMy IMU+TOF+THM on the other end looks alright : \nCV 0.887 - LB 0.859",
          "votes": 2,
          "replies": [
            {
              "id": 3271029,
              "postDate": "2025-08-17T21:08:23.050Z",
              "content": "<p>Hello, did you first try to sgkf first on subject before doing it on subject and gesture?<br>\nIf so, did you notice a diffrence in your lb score when switching from per subject sgkf to per subject and gesture sgkf?</p>",
              "rawMarkdown": "Hello, did you first try to sgkf first on subject before doing it on subject and gesture?\nIf so, did you notice a diffrence in your lb score when switching from per subject sgkf to per subject and gesture sgkf?"
            },
            {
              "id": 3271623,
              "postDate": "2025-08-19T09:42:48.660Z",
              "content": "<p>Did not try no. It should not make any difference imo</p>",
              "rawMarkdown": "Did not try no. It should not make any difference imo"
            },
            {
              "id": 3271703,
              "postDate": "2025-08-19T13:25:07.627Z",
              "content": "<p>okok thx you for your answer</p>",
              "rawMarkdown": "okok thx you for your answer"
            }
          ]
        },
        {
          "id": 3269893,
          "postDate": "2025-08-15T09:16:54.573Z",
          "rawMarkdown": "",
          "isDeleted": true
        },
        {
          "id": 3273198,
          "postDate": "2025-08-22T10:41:25.633Z",
          "content": "<p>LB:0.860<br>\nCV:(5folds: sgkf on subject and gesture)<br>\nIMU 0.807<br>\nAll: 0.863<br>\nmy cv is quiet low….</p>",
          "rawMarkdown": "LB:0.860\nCV:(5folds: sgkf on subject and gesture)\nIMU 0.807\nAll: 0.863\nmy cv is quiet low....",
          "votes": 1
        }
      ]
    },
    {
      "id": 3214761,
      "postDate": "2025-06-01T03:25:13.640Z",
      "content": "<h2>cv</h2>\n<ul>\n<li>IMU only: 0.723</li>\n<li>IMU + TMP + TOF: 0.771</li>\n</ul>\n<h2>public lb</h2>\n<p>0.78</p>",
      "rawMarkdown": "## cv\n  - IMU only: 0.723\n  - IMU + TMP + TOF: 0.771\n\n## public lb\n0.78",
      "votes": 9,
      "replies": [
        {
          "id": 3214786,
          "postDate": "2025-06-01T04:38:38.397Z",
          "content": "<p>Could you please share how you calculated your CV and how you split the data?</p>",
          "rawMarkdown": "Could you please share how you calculated your CV and how you split the data?",
          "votes": 1,
          "replies": [
            {
              "id": 3214794,
              "postDate": "2025-06-01T04:55:01.343Z",
              "content": "<h2>How to split the data</h2>\n<p>I split the data with StratifiedGroupKFold, using each subject as the group label. <br>\nIdeally, the split should also account for metadata such as age and gender, but I haven’t implemented that yet.</p>\n<h2>How to calculate CV</h2>\n<p>Following <a href=\"https://www.kaggle.com/code/metric/cmi-2025\" target=\"_blank\">the competition’s evaluation metric</a>, I predict the gesture for each sequence ID and then compute the average Binary F1 and Macro F1 scores.</p>",
              "rawMarkdown": "## How to split the data\nI split the data with StratifiedGroupKFold, using each subject as the group label. \nIdeally, the split should also account for metadata such as age and gender, but I haven’t implemented that yet.\n\n## How to calculate CV\nFollowing [the competition’s evaluation metric](https://www.kaggle.com/code/metric/cmi-2025), I predict the gesture for each sequence ID and then compute the average Binary F1 and Macro F1 scores.",
              "votes": 12
            },
            {
              "id": 3215041,
              "postDate": "2025-06-01T14:07:41.700Z",
              "content": "<p>Thanks I did without strat and group and it was all over the place will try this .</p>",
              "rawMarkdown": "Thanks I did without strat and group and it was all over the place will try this .",
              "votes": 1
            }
          ]
        },
        {
          "id": 3215486,
          "postDate": "2025-06-02T09:55:00.657Z",
          "rawMarkdown": "",
          "votes": 1,
          "isDeleted": true
        },
        {
          "id": 3218328,
          "postDate": "2025-06-06T04:54:18.303Z",
          "content": "<p>update:</p>\n<h2>cv</h2>\n<ul>\n<li>IMU: 0.78</li>\n<li>IMU + TMP + TOF: 0.85</li>\n</ul>\n<h2>public lb</h2>\n<ul>\n<li>IMU: 0.78</li>\n<li>IMU + TMP + TOF: None</li>\n<li>Overall: 0.82</li>\n</ul>",
          "rawMarkdown": "update:\n## cv\n- IMU: 0.78\n- IMU + TMP + TOF: 0.85\n## public lb\n- IMU: 0.78\n- IMU + TMP + TOF: None\n- Overall: 0.82",
          "votes": 6,
          "replies": [
            {
              "id": 3218591,
              "postDate": "2025-06-06T11:53:21.350Z",
              "content": "<p>Thanks for sharing! Did you incorporate demographic data in your model?</p>",
              "rawMarkdown": "Thanks for sharing! Did you incorporate demographic data in your model?",
              "votes": 1
            },
            {
              "id": 3218602,
              "postDate": "2025-06-06T12:20:57.917Z",
              "content": "<p>Yes, but I'd probably get about the same score without using it.</p>",
              "rawMarkdown": "Yes, but I'd probably get about the same score without using it.",
              "votes": 3
            },
            {
              "id": 3218608,
              "postDate": "2025-06-06T12:27:50.370Z",
              "content": "<p>I have the same experimental results, leading me to suspect that demographic data may not provide sufficient information, as a single subject can correspond to various gesture sequences.</p>",
              "rawMarkdown": "I have the same experimental results, leading me to suspect that demographic data may not provide sufficient information, as a single subject can correspond to various gesture sequences.",
              "votes": 2
            }
          ]
        }
      ]
    },
    {
      "id": 3251295,
      "postDate": "2025-07-20T11:49:36.517Z",
      "content": "<table>\n<thead>\n<tr>\n<th>Model</th>\n<th>CV</th>\n<th>CV Strategy</th>\n<th>LB</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>1D CNN (IMU Only)</td>\n<td>0.78129</td>\n<td>StratifiedGroupKFold (5 Folds)</td>\n<td>0.79</td>\n</tr>\n<tr>\n<td>LightGBM (IMU Only)</td>\n<td>0.77183</td>\n<td>StratifiedGroupKFold (5 Folds)</td>\n<td></td>\n</tr>\n<tr>\n<td>LightGBM (All Data)</td>\n<td>0.84145</td>\n<td>StratifiedGroupKFold (5 Folds)</td>\n<td></td>\n</tr>\n<tr>\n<td>1D CNN + LSTM (IMU Only)</td>\n<td>0.77332</td>\n<td>StratifiedGroupKFold (5 Folds)</td>\n<td></td>\n</tr>\n<tr>\n<td>1D CNN + LSTM (All Data)</td>\n<td>0.83636</td>\n<td>StratifiedGroupKFold (5 Folds)</td>\n<td></td>\n</tr>\n</tbody>\n</table>",
      "rawMarkdown": "| Model | CV | CV Strategy | LB |\n|:-------------|:--------------:|:--------------:|:--------------:|\n| 1D CNN (IMU Only)        | 0.78129|StratifiedGroupKFold (5 Folds) | 0.79 |\n| LightGBM (IMU Only)    | 0.77183       |StratifiedGroupKFold (5 Folds) | |\n| LightGBM (All Data)    | 0.84145       |StratifiedGroupKFold (5 Folds) | |\n| 1D CNN + LSTM (IMU Only)    | 0.77332      |StratifiedGroupKFold (5 Folds) | |\n| 1D CNN + LSTM (All Data)    | 0.83636      |StratifiedGroupKFold (5 Folds) | |",
      "votes": 6,
      "replies": [
        {
          "id": 3251315,
          "postDate": "2025-07-20T12:53:54.853Z",
          "content": "<p>Thanks for sharing! May I aks is it your ensemble used? And it is amazing lgbm! I can't push lgbm very well…</p>",
          "rawMarkdown": "Thanks for sharing! May I aks is it your ensemble used? And it is amazing lgbm! I can't push lgbm very well...",
          "replies": [
            {
              "id": 3251458,
              "postDate": "2025-07-20T20:43:22.360Z",
              "rawMarkdown": "",
              "votes": 1,
              "isDeleted": true
            }
          ]
        },
        {
          "id": 3252301,
          "postDate": "2025-07-22T12:08:23.113Z",
          "content": "<p><a href=\"https://www.kaggle.com/sercanyesiloz\" target=\"_blank\">@sercanyesiloz</a> Can you share the LB scores of these models as well?</p>",
          "rawMarkdown": "@sercanyesiloz Can you share the LB scores of these models as well?"
        }
      ]
    },
    {
      "id": 3213969,
      "postDate": "2025-05-30T17:42:32.137Z",
      "content": "<p>Update ! </p>\n<p>I use all sensors features :</p>\n<p>cv: 0.73542811647 (binary f1: 0.93720089, f1 macro:0.53365533)</p>\n<p>And  for submission :<br>\nI switched the model by checking whether \"tof_5_v63\" is null or not.</p>\n<p>public lb : 0.65</p>\n<p>Here, I calculated the average with the cv for the only IMU sensor and all sensors.<br>\n(0.5798545 + 0.7354281) / 2 = 0.657639058</p>\n<p>This seems to align perfectly for cv and public lb.<br>\nThis is the good competition.</p>",
      "rawMarkdown": "Update ! \n\nI use all sensors features :\n\ncv: 0.73542811647 (binary f1: 0.93720089, f1 macro:0.53365533)\n\nAnd  for submission :\nI switched the model by checking whether \"tof_5_v63\" is null or not.\n\npublic lb : 0.65\n\nHere, I calculated the average with the cv for the only IMU sensor and all sensors.\n(0.5798545 + 0.7354281) / 2 = 0.657639058\n\nThis seems to align perfectly for cv and public lb.\nThis is the good competition.",
      "votes": 5,
      "replies": [
        {
          "id": 3214044,
          "postDate": "2025-05-30T20:47:56.343Z",
          "content": "<p>thanks for posting! could you explain the rationale why using the end of the sequence is a good first step here?</p>",
          "rawMarkdown": "thanks for posting! could you explain the rationale why using the end of the sequence is a good first step here?",
          "votes": 1,
          "replies": [
            {
              "id": 3214114,
              "postDate": "2025-05-31T01:00:48.687Z",
              "content": "<p><a href=\"https://www.kaggle.com/jonwibowo\" target=\"_blank\">@jonwibowo</a> You can get the total sequence length from <code>sequence_counter</code>. But I think we need to build a model that takes the sequence as input, current approach uses summarized info to build a simple tabular predictor. <br>\nWe have five labels, it's interesting to figure out a good way handling label information.<br>\nOne possible new label development is: </p>\n<ul>\n<li>generate text describing the state of the patient in each timestep from the columns. </li>\n<li>combine <code>sequence_type</code>, <code>ordientation</code>, <code>behavior</code>, <code>phase</code> and <code>gesture</code> in the text.</li>\n<li>subsequently feed the text to the llm then producing the text embedding for each time step.</li>\n<li>We predict the embedding first, then use the predicted embedding to predict the actual label. </li>\n</ul>",
              "rawMarkdown": "@jonwibowo You can get the total sequence length from `sequence_counter`. But I think we need to build a model that takes the sequence as input, current approach uses summarized info to build a simple tabular predictor. \nWe have five labels, it's interesting to figure out a good way handling label information.\nOne possible new label development is: \n* generate text describing the state of the patient in each timestep from the columns. \n* combine `sequence_type`, `ordientation`, `behavior`, `phase` and `gesture` in the text.\n* subsequently feed the text to the llm then producing the text embedding for each time step.\n* We predict the embedding first, then use the predicted embedding to predict the actual label. ",
              "votes": 2
            },
            {
              "id": 3214191,
              "postDate": "2025-05-31T04:58:04.327Z",
              "rawMarkdown": "",
              "isDeleted": true
            },
            {
              "id": 3214192,
              "postDate": "2025-05-31T04:59:07.697Z",
              "rawMarkdown": "",
              "isDeleted": true
            },
            {
              "id": 3214193,
              "postDate": "2025-05-31T04:59:32.460Z",
              "content": "<p><a href=\"https://www.kaggle.com/tom99763\" target=\"_blank\">@tom99763</a> Right! Thank you for comment.</p>",
              "rawMarkdown": "@tom99763 Right! Thank you for comment."
            },
            {
              "id": 3214194,
              "postDate": "2025-05-31T04:59:53.047Z",
              "content": "<p><a href=\"https://www.kaggle.com/jonwibowo\" target=\"_blank\">@jonwibowo</a> I believe the very end of a sequence tends to capture some aggregation or summary of the preceding activity. For this type of tabular data, features from the end of the sequence are often utilized.<br>\nHowever, in this particular case, there isn't any single feature (like those from the end) that distinctly stands out.<br>\nUltimately, it might be best to use all the data and apply a time-series model.</p>",
              "rawMarkdown": "@jonwibowo I believe the very end of a sequence tends to capture some aggregation or summary of the preceding activity. For this type of tabular data, features from the end of the sequence are often utilized.\nHowever, in this particular case, there isn't any single feature (like those from the end) that distinctly stands out.\nUltimately, it might be best to use all the data and apply a time-series model."
            }
          ]
        }
      ]
    },
    {
      "id": 3223527,
      "postDate": "2025-06-13T12:49:55.997Z",
      "content": "<p>0.82 CV - 0.80 LB (don’t know if high or low 0.80), using Stratified K fold, will test with Group Stratified K fold as well. IMU only<br>\nL.E.: based on other competitors reaching 0.8, I believe it's high 0.8, which is in line with 0.01-0.015 gap I keep experiencing with this split strategy.</p>",
      "rawMarkdown": "0.82 CV - 0.80 LB (don’t know if high or low 0.80), using Stratified K fold, will test with Group Stratified K fold as well. IMU only\nL.E.: based on other competitors reaching 0.8, I believe it's high 0.8, which is in line with 0.01-0.015 gap I keep experiencing with this split strategy.",
      "votes": 4,
      "replies": [
        {
          "id": 3223738,
          "postDate": "2025-06-13T19:05:18.910Z",
          "content": "<p>Nice just imu that is great </p>",
          "rawMarkdown": "Nice just imu that is great "
        },
        {
          "id": 3223835,
          "postDate": "2025-06-14T00:01:39.380Z",
          "content": "<p>When your cv exceeds 0.8, does the correlation between lb and cv weaken? In my experiment, when it exceeds 0.8, I tried to increase cv to 0.81, but lb did decrease by 0.01.<br>\nOr maybe i make some data leakage…</p>",
          "rawMarkdown": "When your cv exceeds 0.8, does the correlation between lb and cv weaken? In my experiment, when it exceeds 0.8, I tried to increase cv to 0.81, but lb did decrease by 0.01.\nOr maybe i make some data leakage...",
          "replies": [
            {
              "id": 3223883,
              "postDate": "2025-06-14T03:51:11.820Z",
              "content": "<p>May I ask how do you split your folds?</p>",
              "rawMarkdown": "May I ask how do you split your folds?"
            },
            {
              "id": 3223915,
              "postDate": "2025-06-14T05:33:25.437Z",
              "rawMarkdown": "",
              "isDeleted": true
            },
            {
              "id": 3223917,
              "postDate": "2025-06-14T05:42:45.567Z",
              "content": "<p>Stratified K fold，split by gesture</p>",
              "rawMarkdown": "Stratified K fold，split by gesture"
            },
            {
              "id": 3224275,
              "postDate": "2025-06-14T16:02:48.640Z",
              "content": "<p>For stratified k fold, split by gesture, I observe a constant 0.01-0.015 gap between cv and lb (cv being higher).</p>\n<p>For stratified group k fold, other way around.</p>",
              "rawMarkdown": "For stratified k fold, split by gesture, I observe a constant 0.01-0.015 gap between cv and lb (cv being higher).\n\nFor stratified group k fold, other way around.",
              "votes": 2
            }
          ]
        }
      ]
    },
    {
      "id": 3216995,
      "postDate": "2025-06-04T11:42:51.907Z",
      "content": "<table>\n<thead>\n<tr>\n<th>Feature</th>\n<th>CV</th>\n<th>LB</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>IMU</td>\n<td>0.734</td>\n<td>0.74</td>\n</tr>\n<tr>\n<td>IMU+THM+TOF</td>\n<td>0.812</td>\n<td>0.73</td>\n</tr>\n<tr>\n<td>OverAll</td>\n<td>0.773</td>\n<td>0.78</td>\n</tr>\n</tbody>\n</table>",
      "rawMarkdown": "|Feature|CV  |  LB|\n| --- | --- |\n|IMU|  0.734|0.74  |\n|IMU+THM+TOF|  0.812| 0.73 |\n|OverAll|0.773 |0.78  |\n",
      "votes": 3,
      "replies": [
        {
          "id": 3217250,
          "postDate": "2025-06-04T17:54:48.600Z",
          "content": "<p><a href=\"https://www.kaggle.com/ye11725\" target=\"_blank\">@ye11725</a> Thanks. That's amazing. So, for the IMU+THM+TOF Leaderboard (LB), you just submitted it as null, right?</p>",
          "rawMarkdown": "@ye11725 Thanks. That's amazing. So, for the IMU+THM+TOF Leaderboard (LB), you just submitted it as null, right?",
          "votes": 1,
          "replies": [
            {
              "id": 3217355,
              "postDate": "2025-06-04T23:41:21.670Z",
              "content": "<p>Just use the IMU+THM+TOF model to predict all test sets, including data with null TOF values</p>",
              "rawMarkdown": "Just use the IMU+THM+TOF model to predict all test sets, including data with null TOF values",
              "votes": 2
            }
          ]
        }
      ]
    },
    {
      "id": 3215236,
      "postDate": "2025-06-01T20:47:51.573Z",
      "content": "<p>1d-cnn, IMU feature only, label based stratified 1 fold local validation 0.703, lb 0.68</p>",
      "rawMarkdown": "1d-cnn, IMU feature only, label based stratified 1 fold local validation 0.703, lb 0.68",
      "votes": 3,
      "replies": [
        {
          "id": 3215924,
          "postDate": "2025-06-02T21:27:29.600Z",
          "content": "<p>update: IMU + TMP + TOF: 0.766 + IMU only: 0.703, LB 0.71</p>",
          "rawMarkdown": "update: IMU + TMP + TOF: 0.766 + IMU only: 0.703, LB 0.71",
          "votes": 2,
          "replies": [
            {
              "id": 3215949,
              "postDate": "2025-06-02T22:47:05.570Z",
              "content": "<p>Are you inferring on the ensemble of 5 fold? Dunno I get better lb lower cv though in same comparison as you for 0.68</p>",
              "rawMarkdown": "Are you inferring on the ensemble of 5 fold? Dunno I get better lb lower cv though in same comparison as you for 0.68",
              "votes": 1
            },
            {
              "id": 3215950,
              "postDate": "2025-06-02T22:55:09.073Z",
              "content": "<p>For now, I’m using a simple split with a single model for a quick experiment. Given this setup, it’s expected that the gap between CV and LB would be larger compared to a 5-fold ensemble</p>",
              "rawMarkdown": "For now, I’m using a simple split with a single model for a quick experiment. Given this setup, it’s expected that the gap between CV and LB would be larger compared to a 5-fold ensemble",
              "votes": 3
            },
            {
              "id": 3216295,
              "postDate": "2025-06-03T11:14:27.963Z",
              "content": "<p>Thanks ya now though for Imu only getting nice correlation 0.686 - 0.68</p>",
              "rawMarkdown": "Thanks ya now though for Imu only getting nice correlation 0.686 - 0.68",
              "votes": 1
            },
            {
              "id": 3216349,
              "postDate": "2025-06-03T12:50:16.973Z",
              "content": "<p>I just applied 5 folds cv: <br>\nIMU only 0.705 - 0.69<br>\nIMU only + IMU,tof,tmp (0.705, 0.761) - 0.72<br>\ncorrelation seems better now</p>",
              "rawMarkdown": "I just applied 5 folds cv: \nIMU only 0.705 - 0.69\nIMU only + IMU,tof,tmp (0.705, 0.761) - 0.72\ncorrelation seems better now",
              "votes": 2
            },
            {
              "id": 3216412,
              "postDate": "2025-06-03T14:40:13.210Z",
              "content": "<p>ya 5 fold cv works for me also :) </p>\n<p>0.7665 ~ 0.7 LB</p>",
              "rawMarkdown": "ya 5 fold cv works for me also :) \n\n\n0.7665 ~ 0.7 LB",
              "votes": 1
            }
          ]
        },
        {
          "id": 3221793,
          "postDate": "2025-06-11T12:38:17.033Z",
          "content": "<p>update: <br>\nusing (gender + handedness + adult_child) as the target, StratifiedGroupKFold by subject<br>\ncv:  IMU + TMP + TOF: 0.8103 + IMU only: 0.7610, LB 0.81</p>",
          "rawMarkdown": "update: \nusing (gender + handedness + adult_child) as the target, StratifiedGroupKFold by subject\ncv:  IMU + TMP + TOF: 0.8103 + IMU only: 0.7610, LB 0.81\n",
          "votes": 1,
          "replies": [
            {
              "id": 3221843,
              "postDate": "2025-06-11T13:51:12.800Z",
              "content": "<p>so an ensemble of both ?</p>",
              "rawMarkdown": "so an ensemble of both ?"
            },
            {
              "id": 3221850,
              "postDate": "2025-06-11T14:06:42.677Z",
              "content": "<p>Use the IMU-only models if the test data does not contain TOF &amp; TMP columns. Use the full sensor models if the test data includes TOF &amp; TMP columns.</p>",
              "rawMarkdown": "Use the IMU-only models if the test data does not contain TOF & TMP columns. Use the full sensor models if the test data includes TOF & TMP columns.",
              "votes": 1
            },
            {
              "id": 3227607,
              "postDate": "2025-06-19T05:51:26.907Z",
              "content": "<p>did u mean (gender + handedness + adult_child) + gesture  as labels</p>",
              "rawMarkdown": "did u mean (gender + handedness + adult_child) + gesture  as labels"
            },
            {
              "id": 3227653,
              "postDate": "2025-06-19T06:50:58.287Z",
              "content": "<p>for example:</p>\n<pre><code>    \n    composite_labels = []\n     subject  subject_groups:\n        subject_demo = subject_demographics_map[subject]\n        sex = subject_demo[]\n        handedness = subject_demo[] \n        adult_child = subject_demo[]\n\n        \n        \n        composite_label = sex + handedness *  + adult_child * \n        composite_labels.append(composite_label)\n</code></pre>",
              "rawMarkdown": "for example:\n\n```python\n    # Create composite labels for each sequence\n    composite_labels = []\n    for subject in subject_groups:\n        subject_demo = subject_demographics_map[subject]\n        sex = subject_demo['sex']\n        handedness = subject_demo['handedness'] \n        adult_child = subject_demo['adult_child']\n        \n        # Create composite label: sex(0/1) + handedness(0/1)*2 + adult_child(0/1)*4\n        # This creates 8 possible combinations: 000, 001, 010, 011, 100, 101, 110, 111\n        composite_label = sex + handedness * 2 + adult_child * 4\n        composite_labels.append(composite_label)\n```"
            },
            {
              "id": 3227879,
              "postDate": "2025-06-19T12:01:38.027Z",
              "content": "<p>How much improvement did the subtask bring?<br>\nI tried orientation prediction as a subtask, which led to a +0.007 improvement in CV (5-fold average), but the LB score was nearly the same.</p>",
              "rawMarkdown": "How much improvement did the subtask bring?\nI tried orientation prediction as a subtask, which led to a +0.007 improvement in CV (5-fold average), but the LB score was nearly the same."
            },
            {
              "id": 3227903,
              "postDate": "2025-06-19T12:46:56.983Z",
              "content": "<p>It is just about using composite_labels for stratified groupk split</p>",
              "rawMarkdown": "It is just about using composite_labels for stratified groupk split"
            }
          ]
        }
      ]
    },
    {
      "id": 3217253,
      "postDate": "2025-06-04T18:00:35.247Z",
      "content": "<p>update2 : use stratifiedgroupkfold (group : \"subject\" ) is better than (group : \"sequence id\")</p>\n<p>・　group : \"sequence id\" result</p>\n<p>IMU only : cv 0.694 lb : 0.66<br>\nIMU+THM+TOF  :cv 0.796, cv average 0.745, lb : 0.7</p>\n<p>・　group : \"object\" result</p>\n<p>IMU only : cv 0.665 lb : 0.65<br>\nIMU+THM+TOF  :cv 0.751, cv average 0.705, lb : 0.7 almost same</p>",
      "rawMarkdown": "update2 : use stratifiedgroupkfold (group : \"subject\" ) is better than (group : \"sequence id\")\n\n・　group : \"sequence id\" result\n\nIMU only : cv 0.694 lb : 0.66\nIMU+THM+TOF  :cv 0.796, cv average 0.745, lb : 0.7\n\n・　group : \"object\" result\n\nIMU only : cv 0.665 lb : 0.65\nIMU+THM+TOF  :cv 0.751, cv average 0.705, lb : 0.7 almost same\n",
      "votes": 4,
      "replies": [
        {
          "id": 3220727,
          "postDate": "2025-06-09T19:42:55.970Z",
          "content": "<p>ya similar IMU+THM+TOF :cv average </p>\n<ul>\n<li>0.7665 ± 0.0247, lb : 0.7 exp_1</li>\n<li>0.7938 ± 0.0230 score LB 0.73 - exp_2</li>\n<li>0.77 0.76 LB </li>\n<li>0.7238 ± 0.0216 IMU Only </li>\n</ul>",
          "rawMarkdown": "ya similar IMU+THM+TOF :cv average \n- 0.7665 ± 0.0247, lb : 0.7 exp_1\n- 0.7938 ± 0.0230 score LB 0.73 - exp_2\n- 0.77 0.76 LB \n- 0.7238 ± 0.0216 IMU Only ",
          "votes": 1
        }
      ]
    },
    {
      "id": 3242412,
      "postDate": "2025-07-05T20:51:43.127Z",
      "content": "<p>Is anyone finding their CV-LB less consistent on IMU + THM + TOF? My IMU only is .82 cv, .81 lb.. my full data model has cv of .88 but only giving increase of 0.02 in test submission. I’m aware test data is 50/50 and splitting models accordingly. </p>",
      "rawMarkdown": "Is anyone finding their CV-LB less consistent on IMU + THM + TOF? My IMU only is .82 cv, .81 lb.. my full data model has cv of .88 but only giving increase of 0.02 in test submission. I’m aware test data is 50/50 and splitting models accordingly. ",
      "votes": 1,
      "replies": [
        {
          "id": 3242449,
          "postDate": "2025-07-05T21:42:36.957Z",
          "content": "<p>I have the exact same thing you describe, except that I get .82 lb imu only, and .83 with all, despite .9 cv for imu+tof+thm.</p>",
          "rawMarkdown": "I have the exact same thing you describe, except that I get .82 lb imu only, and .83 with all, despite .9 cv for imu+tof+thm.",
          "replies": [
            {
              "id": 3242457,
              "postDate": "2025-07-05T21:56:00.657Z",
              "content": "<p>Yeah.. I think I’ll hit 0.82 IMU soon and will still be 0.83 on LB haha -_- I’m sure we’ll figure it out but a bit frustrating for now!</p>",
              "rawMarkdown": "Yeah.. I think I’ll hit 0.82 IMU soon and will still be 0.83 on LB haha -_- I’m sure we’ll figure it out but a bit frustrating for now!"
            },
            {
              "id": 3242465,
              "postDate": "2025-07-05T23:02:24.770Z",
              "content": "<p>Yeah, agreed. I decided to not tunnel on it too much and work towards a better IMU only first, I spent the last 2 weeks trying to solve this and probe but did not get to any resolution.</p>",
              "rawMarkdown": "Yeah, agreed. I decided to not tunnel on it too much and work towards a better IMU only first, I spent the last 2 weeks trying to solve this and probe but did not get to any resolution."
            }
          ]
        },
        {
          "id": 3242663,
          "postDate": "2025-07-06T07:37:56.640Z",
          "content": "<p>Same here — my CV is around 0.85 using only IMU data and goes up to 0.90 when using all sensors. Correspondingly, my public LB scores are 0.82 and 0.84. I've been stuck at this CV plateau for the past two weeks and haven’t been able to push it further.</p>",
          "rawMarkdown": "Same here — my CV is around 0.85 using only IMU data and goes up to 0.90 when using all sensors. Correspondingly, my public LB scores are 0.82 and 0.84. I've been stuck at this CV plateau for the past two weeks and haven’t been able to push it further.",
          "votes": 1
        }
      ]
    },
    {
      "id": 3233108,
      "postDate": "2025-06-26T13:37:49.573Z",
      "content": "<table>\n<thead>\n<tr>\n<th><strong>Date</strong></th>\n<th><strong>5 Fold CV</strong></th>\n<th><strong>Public LB</strong></th>\n<th><strong>CV Strategy</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>26. June</td>\n<td>0.793382</td>\n<td>0.82</td>\n<td>StratifiedGroupKFold, groups=subject</td>\n</tr>\n<tr>\n<td>7. July</td>\n<td>0.815587</td>\n<td>0.83</td>\n<td>StratifiedGroupKFold, groups=subject</td>\n</tr>\n</tbody>\n</table>",
      "rawMarkdown": "| **Date** | **5 Fold CV** | **Public LB** |            **CV Strategy**           |\n|:--------:|:-------------:|:-------------:|:------------------------------------:|\n| 26. June |      0.793382     |      0.82     | StratifiedGroupKFold, groups=subject |\n| 7. July |      0.815587     |      0.83     | StratifiedGroupKFold, groups=subject |",
      "votes": 1,
      "replies": [
        {
          "id": 3233180,
          "postDate": "2025-06-26T14:36:19.667Z",
          "content": "<p>Hey Mahdi, thanks for sharing! If you want, can you say what kind of model and what you stratify for? Would be interesting for me :). </p>\n<p>Best,<br>\nJan</p>",
          "rawMarkdown": "Hey Mahdi, thanks for sharing! If you want, can you say what kind of model and what you stratify for? Would be interesting for me :). \n\nBest,\nJan",
          "votes": 1,
          "replies": [
            {
              "id": 3233187,
              "postDate": "2025-06-26T14:51:53.533Z",
              "content": "<p>Hi Jan,</p>\n<p>This is based on a fork of the <a href=\"https://www.kaggle.com/code/nksusth/lb-0-78-quaternions-tf-bilstm-gru-attention\" target=\"_blank\">current best public LB notebook</a>. I’ve added cross-validation using gesture for stratification, but the main improvement I made to the notebook has to do with feature engineering.</p>",
              "rawMarkdown": "Hi Jan,\n\nThis is based on a fork of the [current best public LB notebook](https://www.kaggle.com/code/nksusth/lb-0-78-quaternions-tf-bilstm-gru-attention ). I’ve added cross-validation using gesture for stratification, but the main improvement I made to the notebook has to do with feature engineering.",
              "votes": 2
            },
            {
              "id": 3233483,
              "postDate": "2025-06-26T20:54:20.097Z",
              "content": "<p>Hey Mahdi, awesome results!</p>\n<p>If im not mistaken, that same CV strategy on that notebook yeilds a CV of 0.81 and a LB of 0.78. Yet after you added your feature engineering, the CV goes down and the LB goes up. So are you basing what feature engineering works purely on the LB?</p>",
              "rawMarkdown": "Hey Mahdi, awesome results!\n\nIf im not mistaken, that same CV strategy on that notebook yeilds a CV of 0.81 and a LB of 0.78. Yet after you added your feature engineering, the CV goes down and the LB goes up. So are you basing what feature engineering works purely on the LB?",
              "votes": 1
            },
            {
              "id": 3233784,
              "postDate": "2025-06-27T06:57:56.010Z",
              "content": "<p>Hi Ravon,</p>\n<p>I may be overfitting to the public LB, but that wasn't my intention. I based my feature engineering and selection on CV alone. Before I started experimenting with different features, I made a change to the notebook that gave me a better CV-LB correlation (CV went down, but LB remained the same). However, as I added more features, my CV improved only slightly, while the public LB improved by a lot.</p>",
              "rawMarkdown": "Hi Ravon,\n\nI may be overfitting to the public LB, but that wasn't my intention. I based my feature engineering and selection on CV alone. Before I started experimenting with different features, I made a change to the notebook that gave me a better CV-LB correlation (CV went down, but LB remained the same). However, as I added more features, my CV improved only slightly, while the public LB improved by a lot.",
              "votes": 2
            },
            {
              "id": 3234477,
              "postDate": "2025-06-27T22:13:22.560Z",
              "content": "<p>Could you give a hint on what you did to improve CV-LB correlation? I'm really struggling to create a strong CV for that notebook. 😭</p>",
              "rawMarkdown": "Could you give a hint on what you did to improve CV-LB correlation? I'm really struggling to create a strong CV for that notebook. 😭"
            }
          ]
        }
      ]
    },
    {
      "id": 3221268,
      "postDate": "2025-06-10T17:09:23.990Z",
      "content": "<p>StratifiedGroupKfold +IMU Data only + mixup <br>\nCV = 0.7358<br>\nLB = 0.76</p>",
      "rawMarkdown": "StratifiedGroupKfold +IMU Data only + mixup \nCV = 0.7358\nLB = 0.76",
      "votes": 1,
      "replies": [
        {
          "id": 3221797,
          "postDate": "2025-06-11T12:40:51.823Z",
          "content": "<p>ahh on 5 folds that is better correlation really nice only with IMU ..</p>",
          "rawMarkdown": "ahh on 5 folds that is better correlation really nice only with IMU ..",
          "votes": 1,
          "replies": [
            {
              "id": 3221857,
              "postDate": "2025-06-11T14:28:48.097Z",
              "content": "<p>Yeah, it seems that figuring out what works with IMU-only data is the key to this competition. But So far, making the network deeper and wider hasn’t really helped on my side after lb 0.76.</p>",
              "rawMarkdown": "Yeah, it seems that figuring out what works with IMU-only data is the key to this competition. But So far, making the network deeper and wider hasn’t really helped on my side after lb 0.76.",
              "votes": 2
            },
            {
              "id": 3221889,
              "postDate": "2025-06-11T15:15:19.190Z",
              "content": "<p>Can elaborate on your implementation of mixup? I trief it and it made everything mich worse…</p>",
              "rawMarkdown": "Can elaborate on your implementation of mixup? I trief it and it made everything mich worse…"
            },
            {
              "id": 3221960,
              "postDate": "2025-06-11T16:21:32.630Z",
              "rawMarkdown": "",
              "isDeleted": true
            },
            {
              "id": 3221964,
              "postDate": "2025-06-11T16:23:45.713Z",
              "content": "<p>I'm basically using the same CV setup from <a href=\"https://www.kaggle.com/alejopaullier\" target=\"_blank\">@alejopaullier</a>'s notebook. I modified the training code, which boosted my local CV score by around 0.005. However, my best LB score was achieved with mixup, but some of my previous submissions without it actually scored higher than other attempts that did include it.</p>\n<pre><code> ():\n    model.train()\n    criterion1 = nn.CrossEntropyLoss(reduction=)\n    criterion2 = nn.BCEWithLogitsLoss()\n    scaler = torch.amp.GradScaler(enabled=config.AMP)\n    losses, losses1, losses2 = AverageMeter(), AverageMeter(), AverageMeter()\n    start = end = time.time()\n    global_step = \n     tqdm(\n        train_loader, unit=, desc=\n    )  tqdm_train_loader:\n         step, batch  (tqdm_train_loader):\n            X = batch.pop().to(device)\n            y = batch.pop().to(device)\n            y_hard = batch.pop().to(device)\n            batch_size = y.size()\n             (\n                config.MIXUP_ALPHA &gt; \n                 np.random.rand() &lt; config.MIXUP_PROB\n            ):\n                lam = np.random.beta(config.MIXUP_ALPHA, config.MIXUP_ALPHA)\n                batch_indices = torch.randperm(batch_size)\n\n                \n                X_mixed = lam * X + ( - lam) * X[batch_indices]\n\n                \n                y_a, y_b = y, y[batch_indices]\n                y_hard_a, y_hard_b = y_hard, y_hard[batch_indices]\n\n                 torch.amp.autocast(device., enabled=config.AMP):\n                    y_preds, y_preds_hard = model(X_mixed)\n\n                    \n                    loss1 = lam * criterion1(y_preds, y_a) + (\n                         - lam\n                    ) * criterion1(y_preds, y_b)\n\n                    \n                    y_hard_mixed = lam * y_hard_a + ( - lam) * y_hard_b\n                    loss2 = criterion2(\n                        y_preds_hard, y_hard_mixed.unsqueeze()\n                    )\n\n                    loss = loss1 + loss2\n            :\n                \n                 torch.amp.autocast(device., enabled=config.AMP):\n                    y_preds, y_preds_hard = model(X)\n                    loss1 = criterion1(y_preds, y)\n                    loss2 = criterion2(y_preds_hard, y_hard.unsqueeze())\n                    loss = loss1 + loss2\n\n             config.GRADIENT_ACCUMULATION_STEPS &gt; :\n                loss = loss / config.GRADIENT_ACCUMULATION_STEPS\n            losses.update(loss.item(), batch_size)\n            losses1.update(loss1.item(), batch_size)\n            losses2.update(loss2.item(), batch_size)\n            scaler.scale(loss).backward()\n            grad_norm = torch.nn.utils.clip_grad_norm_(\n                model.parameters(), config.MAX_GRAD_NORM\n            )\n\n             (step + ) % config.GRADIENT_ACCUMULATION_STEPS == :\n                scaler.step(optimizer)\n                scaler.update()\n                optimizer.zero_grad()\n                global_step += \n                scheduler.step()\n            end = time.time()\n\n     losses.avg\n</code></pre>",
              "rawMarkdown": "I'm basically using the same CV setup from @alejopaullier's notebook. I modified the training code, which boosted my local CV score by around 0.005. However, my best LB score was achieved with mixup, but some of my previous submissions without it actually scored higher than other attempts that did include it.\n\n```python\ndef train_epoch(train_loader, model, optimizer, epoch, scheduler, device):\n    model.train()\n    criterion1 = nn.CrossEntropyLoss(reduction=\"mean\")\n    criterion2 = nn.BCEWithLogitsLoss()\n    scaler = torch.amp.GradScaler(enabled=config.AMP)\n    losses, losses1, losses2 = AverageMeter(), AverageMeter(), AverageMeter()\n    start = end = time.time()\n    global_step = 0\n    with tqdm(\n        train_loader, unit=\"train_batch\", desc=\"Train\"\n    ) as tqdm_train_loader:\n        for step, batch in enumerate(tqdm_train_loader):\n            X = batch.pop(\"X\").to(device)\n            y = batch.pop(\"y\").to(device)\n            y_hard = batch.pop(\"y_hard\").to(device)\n            batch_size = y.size(0)\n            if (\n                config.MIXUP_ALPHA > 0\n                and np.random.rand() < config.MIXUP_PROB\n            ):\n                lam = np.random.beta(config.MIXUP_ALPHA, config.MIXUP_ALPHA)\n                batch_indices = torch.randperm(batch_size)\n\n                # Mix inputs\n                X_mixed = lam * X + (1 - lam) * X[batch_indices]\n\n                # Mix targets for classification (one-hot encoding)\n                y_a, y_b = y, y[batch_indices]\n                y_hard_a, y_hard_b = y_hard, y_hard[batch_indices]\n\n                with torch.amp.autocast(device.type, enabled=config.AMP):\n                    y_preds, y_preds_hard = model(X_mixed)\n\n                    # MixUp loss for classification\n                    loss1 = lam * criterion1(y_preds, y_a) + (\n                        1 - lam\n                    ) * criterion1(y_preds, y_b)\n\n                    # MixUp loss for regression\n                    y_hard_mixed = lam * y_hard_a + (1 - lam) * y_hard_b\n                    loss2 = criterion2(\n                        y_preds_hard, y_hard_mixed.unsqueeze(1)\n                    )\n\n                    loss = loss1 + loss2\n            else:\n                # Normal training without MixUp\n                with torch.amp.autocast(device.type, enabled=config.AMP):\n                    y_preds, y_preds_hard = model(X)\n                    loss1 = criterion1(y_preds, y)\n                    loss2 = criterion2(y_preds_hard, y_hard.unsqueeze(1))\n                    loss = loss1 + loss2\n\n            if config.GRADIENT_ACCUMULATION_STEPS > 1:\n                loss = loss / config.GRADIENT_ACCUMULATION_STEPS\n            losses.update(loss.item(), batch_size)\n            losses1.update(loss1.item(), batch_size)\n            losses2.update(loss2.item(), batch_size)\n            scaler.scale(loss).backward()\n            grad_norm = torch.nn.utils.clip_grad_norm_(\n                model.parameters(), config.MAX_GRAD_NORM\n            )\n\n            if (step + 1) % config.GRADIENT_ACCUMULATION_STEPS == 0:\n                scaler.step(optimizer)\n                scaler.update()\n                optimizer.zero_grad()\n                global_step += 1\n                scheduler.step()\n            end = time.time()\n\n    return losses.avg\n```\n",
              "votes": 3
            },
            {
              "id": 3221968,
              "postDate": "2025-06-11T16:29:30.733Z",
              "rawMarkdown": "",
              "isDeleted": true
            },
            {
              "id": 3222130,
              "postDate": "2025-06-11T21:32:13.993Z",
              "content": "<p>Thank you for sharing! So at one point it helped but you improved to a point where it does not help anymore? Interesting find! :) </p>",
              "rawMarkdown": "Thank you for sharing! So at one point it helped but you improved to a point where it does not help anymore? Interesting find! :) "
            },
            {
              "id": 3223829,
              "postDate": "2025-06-13T22:53:40.893Z",
              "content": "<p>i think I'm still going to trust my local CV and continue using the mixup method. because I've noticed that even submissions from the exact same model can result in score variations. but that can be issues on my end though… :)</p>",
              "rawMarkdown": "i think I'm still going to trust my local CV and continue using the mixup method. because I've noticed that even submissions from the exact same model can result in score variations. but that can be issues on my end though... :)"
            }
          ]
        }
      ]
    },
    {
      "id": 3219738,
      "postDate": "2025-06-08T09:05:03.513Z",
      "content": "<p>Thank <a href=\"https://www.kaggle.com/chumajin\" target=\"_blank\">@chumajin</a> ! Could you please explain why “for this type of continuous data, the first step is to create a model using only the very end of the sequence and evaluate it”. Why don’t we use all but only the ending?</p>",
      "rawMarkdown": "Thank @chumajin ! Could you please explain why “for this type of continuous data, the first step is to create a model using only the very end of the sequence and evaluate it”. Why don’t we use all but only the ending?",
      "votes": 1,
      "replies": [
        {
          "id": 3219745,
          "postDate": "2025-06-08T09:09:11.610Z",
          "content": "<p><a href=\"https://www.kaggle.com/nguyenhoa\" target=\"_blank\">@nguyenhoa</a> Thanks for your comment.<br>\nIt's because it's easy to validate and the dataset is small.<br>\nBut you're also welcome to use the entire dataset and take the average of the predictions.</p>",
          "rawMarkdown": "@nguyenhoa Thanks for your comment.\nIt's because it's easy to validate and the dataset is small.\nBut you're also welcome to use the entire dataset and take the average of the predictions.",
          "votes": 2,
          "replies": [
            {
              "id": 3220042,
              "postDate": "2025-06-08T17:35:25.553Z",
              "content": "<p>What loss function have you guys tried to use if can be shared or how have been your observations. There.. I’ll chime in just experimenting </p>",
              "rawMarkdown": "What loss function have you guys tried to use if can be shared or how have been your observations. There.. I’ll chime in just experimenting "
            },
            {
              "id": 3220557,
              "postDate": "2025-06-09T13:56:21.920Z",
              "content": "<blockquote>\n  <p>What loss function have you guys tried to use if can be shared or how have been your observations. There.. I’ll chime in just experimenting</p>\n</blockquote>\n<p><a href=\"https://www.kaggle.com/gauravbrills\" target=\"_blank\">@gauravbrills</a> I'm using CrossEntropy like normal multi-class classification problem. My best validation losses for IMU only models are around 1.</p>",
              "rawMarkdown": "> What loss function have you guys tried to use if can be shared or how have been your observations. There.. I’ll chime in just experimenting\n\n@gauravbrills I'm using CrossEntropy like normal multi-class classification problem. My best validation losses for IMU only models are around 1.\n"
            }
          ]
        }
      ]
    },
    {
      "id": 3219657,
      "postDate": "2025-06-08T06:20:30.917Z",
      "content": "<p>StratifiedGroupKfold +IMU Data only<br>\nCV = 0.6742<br>\nLB = 0.68</p>",
      "rawMarkdown": "StratifiedGroupKfold +IMU Data only\nCV = 0.6742\nLB = 0.68",
      "votes": 1,
      "replies": [
        {
          "id": 3219747,
          "postDate": "2025-06-08T09:09:53.917Z",
          "content": "<p><a href=\"https://www.kaggle.com/sayedathar11\" target=\"_blank\">@sayedathar11</a> Thank you. good correlation.</p>",
          "rawMarkdown": "@sayedathar11 Thank you. good correlation.",
          "votes": 1
        }
      ]
    },
    {
      "id": 3215579,
      "postDate": "2025-06-02T12:47:03.280Z",
      "content": "<p>For this type of continuous data, the first step is to create a model using only the very end of the sequence and evaluate it. Doesnt this reduces the number of datapoints available for training ? </p>",
      "rawMarkdown": "For this type of continuous data, the first step is to create a model using only the very end of the sequence and evaluate it. Doesnt this reduces the number of datapoints available for training ? ",
      "votes": 1,
      "replies": [
        {
          "id": 3215583,
          "postDate": "2025-06-02T12:51:03.960Z",
          "content": "<p><a href=\"https://www.kaggle.com/sayedathar11\" target=\"_blank\">@sayedathar11</a> Yes, you are right. Training data reduces. Just 1st step for trying. </p>",
          "rawMarkdown": "@sayedathar11 Yes, you are right. Training data reduces. Just 1st step for trying. ",
          "votes": 1
        }
      ]
    },
    {
      "id": 3214965,
      "postDate": "2025-06-01T10:49:21.937Z",
      "content": "<p>Just did my first submission, nothing fancy, 5 stratified k folds.</p>\n<p>cv: 0.6809, LB: 0.66</p>\n<p>edit: group (on subject) stratified seems closer,  :)</p>\n<p>cv: 0.6727, LB: 0.67</p>",
      "rawMarkdown": "Just did my first submission, nothing fancy, 5 stratified k folds.\n\n\ncv: 0.6809, LB: 0.66\n\n\nedit: group (on subject) stratified seems closer,  :)\n\ncv: 0.6727, LB: 0.67",
      "votes": 1
    },
    {
      "id": 3251870,
      "postDate": "2025-07-21T17:30:41.463Z",
      "content": "<p>Since this discussion is getting a lot of attraction, I figured I would repost my question here(lmk if it's inappropriate, in which case I'll delete it).<br>\nDuring training I get a CV average of 0.57 but the corresponding Leader board is 0.32.</p>\n<p>I am using sklearn's StratifiedGroupKFold to create my CV folds as follow:</p>\n<pre><code> () -&gt; [[pd.DataFrame, pd.DataFrame]]:\n    sgkf = StratifiedGroupKFold(n_splits=N_FOLDS, shuffle=)\n\n    folds = []\n    X = df.drop(columns=[target_col])\n    y = df[target_col]\n    groups = df[group_col]\n\n     train_idx, valid_idx  sgkf.split(X, y, groups):\n        train_df = df.iloc[train_idx].copy()\n        valid_df = df.iloc[valid_idx].copy()\n        folds.append((train_df, valid_df))\n\n     folds\n\nfolds = split_dataset_stratified_groupkfold(df, target_col=, group_col=)\n</code></pre>\n<p>And I am using this code to measure my score locally: <a href=\"https://www.kaggle.com/code/metric/cmi-2025\" target=\"_blank\">https://www.kaggle.com/code/metric/cmi-2025</a><br>\nI integrate it in my evaluation function as follow:</p>\n<pre><code> () -&gt; :\n    model = model.()\n    model_device = (model.parameters()).device\n    competition_metric = metric_package.Metric()\n\n    total_accuracy = \n    total_test_loss = \n     torch.inference_mode():\n         x, y  validation_loader:\n            x = x.to(model_device)\n            y = y.to(model_device)\n\n            half = BATCH_SIZE //          \n            x_front = x[:half]               \n            x_back  = x[half:].clone()      \n\n            x_back[:, :, non_imu_feats_idx] =     \n            x = torch.cat([x_front, x_back], dim=)  \n\n            y_pred = model(x)\n            total_test_loss += critirion(y_pred, y).item()\n            batch_accuracy = compute_accuracy(y_pred, y)\n            total_accuracy += batch_accuracy\n            competition_metric.add(get_str_target(y), get_str_target(y_pred))\n\n     {\n        : total_test_loss / (validation_loader),\n        : total_accuracy / (validation_loader),\n        : competition_metric.score(),\n    }\n</code></pre>\n<p>The current version of my preprocessing, training and inference notebooks are attached.<br>\nHere are the links to my <a href=\"https://github.com/MauroAbidalCarrer/CMI-2025-competition/blob/competition_score_metric/notebooks/preprocess_dataset.ipynb\" target=\"_blank\">preprocessing notebook</a>, [training notebook]During training I get a CV average of 0.57 but the corresponding Leader board is 0.32.</p>\n<p>I am using sklearn's StratifiedGroupKFold to create my CV folds as follow:</p>\n<pre><code> () -&gt; [[pd.DataFrame, pd.DataFrame]]:\n    sgkf = StratifiedGroupKFold(n_splits=N_FOLDS, shuffle=)\n\n    folds = []\n    X = df.drop(columns=[target_col])\n    y = df[target_col]\n    groups = df[group_col]\n\n     train_idx, valid_idx  sgkf.split(X, y, groups):\n        train_df = df.iloc[train_idx].copy()\n        valid_df = df.iloc[valid_idx].copy()\n        folds.append((train_df, valid_df))\n\n     folds\n\nfolds = split_dataset_stratified_groupkfold(df, target_col=, group_col=)\n</code></pre>\n<p>And I am using this code to measure my score locally: <a href=\"https://www.kaggle.com/code/metric/cmi-2025\" target=\"_blank\">https://www.kaggle.com/code/metric/cmi-2025</a><br>\nI integrate it in my evaluation function as follow:</p>\n<pre><code> () -&gt; :\n    model = model.()\n    model_device = (model.parameters()).device\n    competition_metric = metric_package.Metric()\n\n    total_accuracy = \n    total_test_loss = \n     torch.inference_mode():\n         x, y  validation_loader:\n            x = x.to(model_device)\n            y = y.to(model_device)\n\n            half = BATCH_SIZE //          \n            x_front = x[:half]               \n            x_back  = x[half:].clone()      \n\n            x_back[:, :, non_imu_feats_idx] =     \n            x = torch.cat([x_front, x_back], dim=)  \n\n            y_pred = model(x)\n            total_test_loss += critirion(y_pred, y).item()\n            batch_accuracy = compute_accuracy(y_pred, y)\n            total_accuracy += batch_accuracy\n            competition_metric.add(get_str_target(y), get_str_target(y_pred))\n\n     {\n        : total_test_loss / (validation_loader),\n        : total_accuracy / (validation_loader),\n        : competition_metric.score(),\n    }\n</code></pre>\n<p>The current version of my preprocessing, training and inference notebooks are attached.<br>\nHere are the links to my <a href=\"https://github.com/MauroAbidalCarrer/CMI-2025-competition/blob/competition_score_metric/notebooks/preprocess_dataset.ipynb\" target=\"_blank\">preprocessing notebook</a>, <a href=\"https://github.com/MauroAbidalCarrer/CMI-2025-competition/blob/competition_score_metric/notebooks/training.ipynb\" target=\"_blank\">training notebook</a> and <a href=\"https://github.com/MauroAbidalCarrer/CMI-2025-competition/blob/competition_score_metric/notebooks/inference.ipynb\" target=\"_blank\">inference notebook</a>.</p>\n<p>Do you see something I am doing wrong?<br>\nReading the entire pipeline would be cumbersome, so let me know if you need extra info to help.<br>\nEvery answer/advice is welcome.<br>\nThanks in advance!</p>",
      "rawMarkdown": "Since this discussion is getting a lot of attraction, I figured I would repost my question here(lmk if it's inappropriate, in which case I'll delete it).\nDuring training I get a CV average of 0.57 but the corresponding Leader board is 0.32.\n\nI am using sklearn's StratifiedGroupKFold to create my CV folds as follow:\n```python\ndef split_dataset_stratified_groupkfold(df: pd.DataFrame, target_col: str, group_col: str) -> list[tuple[pd.DataFrame, pd.DataFrame]]:\n    sgkf = StratifiedGroupKFold(n_splits=N_FOLDS, shuffle=True)\n\n    folds = []\n    X = df.drop(columns=[target_col])\n    y = df[target_col]\n    groups = df[group_col]\n\n    for train_idx, valid_idx in sgkf.split(X, y, groups):\n        train_df = df.iloc[train_idx].copy()\n        valid_df = df.iloc[valid_idx].copy()\n        folds.append((train_df, valid_df))\n\n    return folds\n\nfolds = split_dataset_stratified_groupkfold(df, target_col=\"gesture\", group_col=\"subject\")\n```\nAnd I am using this code to measure my score locally: https://www.kaggle.com/code/metric/cmi-2025\nI integrate it in my evaluation function as follow:\n```python\ndef evaluate_model(\n        model: torch.nn.Module,\n        critirion:callable,\n        validation_loader:DL,\n    ) -> dict:\n    model = model.eval()\n    model_device = next(model.parameters()).device\n    competition_metric = metric_package.Metric()\n\n    total_accuracy = 0\n    total_test_loss = 0\n    with torch.inference_mode():\n        for x, y in validation_loader:\n            x = x.to(model_device)\n            y = y.to(model_device)\n\n            half = BATCH_SIZE // 2         \n            x_front = x[:half]               \n            x_back  = x[half:].clone()      \n            \n            x_back[:, :, non_imu_feats_idx] = 0.0    \n            x = torch.cat([x_front, x_back], dim=0)  # (B, C, T)\n\n            y_pred = model(x)\n            total_test_loss += critirion(y_pred, y).item()\n            batch_accuracy = compute_accuracy(y_pred, y)\n            total_accuracy += batch_accuracy\n            competition_metric.add(get_str_target(y), get_str_target(y_pred))\n\n    return {\n        \"validation_loss\": total_test_loss / len(validation_loader),\n        \"validation_accuracy\": total_accuracy / len(validation_loader),\n        \"competition_score\": competition_metric.score(),\n    }\n```\nThe current version of my preprocessing, training and inference notebooks are attached.\nHere are the links to my [preprocessing notebook](https://github.com/MauroAbidalCarrer/CMI-2025-competition/blob/competition_score_metric/notebooks/preprocess_dataset.ipynb), [training notebook]During training I get a CV average of 0.57 but the corresponding Leader board is 0.32.\n\nI am using sklearn's StratifiedGroupKFold to create my CV folds as follow:\n```python\ndef split_dataset_stratified_groupkfold(df: pd.DataFrame, target_col: str, group_col: str) -> list[tuple[pd.DataFrame, pd.DataFrame]]:\n    sgkf = StratifiedGroupKFold(n_splits=N_FOLDS, shuffle=True)\n\n    folds = []\n    X = df.drop(columns=[target_col])\n    y = df[target_col]\n    groups = df[group_col]\n\n    for train_idx, valid_idx in sgkf.split(X, y, groups):\n        train_df = df.iloc[train_idx].copy()\n        valid_df = df.iloc[valid_idx].copy()\n        folds.append((train_df, valid_df))\n\n    return folds\n\nfolds = split_dataset_stratified_groupkfold(df, target_col=\"gesture\", group_col=\"subject\")\n```\nAnd I am using this code to measure my score locally: https://www.kaggle.com/code/metric/cmi-2025\nI integrate it in my evaluation function as follow:\n```python\ndef evaluate_model(\n        model: torch.nn.Module,\n        critirion:callable,\n        validation_loader:DL,\n    ) -> dict:\n    model = model.eval()\n    model_device = next(model.parameters()).device\n    competition_metric = metric_package.Metric()\n\n    total_accuracy = 0\n    total_test_loss = 0\n    with torch.inference_mode():\n        for x, y in validation_loader:\n            x = x.to(model_device)\n            y = y.to(model_device)\n\n            half = BATCH_SIZE // 2         \n            x_front = x[:half]               \n            x_back  = x[half:].clone()      \n            \n            x_back[:, :, non_imu_feats_idx] = 0.0    \n            x = torch.cat([x_front, x_back], dim=0)  # (B, C, T)\n\n            y_pred = model(x)\n            total_test_loss += critirion(y_pred, y).item()\n            batch_accuracy = compute_accuracy(y_pred, y)\n            total_accuracy += batch_accuracy\n            competition_metric.add(get_str_target(y), get_str_target(y_pred))\n\n    return {\n        \"validation_loss\": total_test_loss / len(validation_loader),\n        \"validation_accuracy\": total_accuracy / len(validation_loader),\n        \"competition_score\": competition_metric.score(),\n    }\n```\nThe current version of my preprocessing, training and inference notebooks are attached.\nHere are the links to my [preprocessing notebook](https://github.com/MauroAbidalCarrer/CMI-2025-competition/blob/competition_score_metric/notebooks/preprocess_dataset.ipynb), [training notebook](https://github.com/MauroAbidalCarrer/CMI-2025-competition/blob/competition_score_metric/notebooks/training.ipynb) and [inference notebook](https://github.com/MauroAbidalCarrer/CMI-2025-competition/blob/competition_score_metric/notebooks/inference.ipynb).\n\nDo you see something I am doing wrong?\nReading the entire pipeline would be cumbersome, so let me know if you need extra info to help.\nEvery answer/advice is welcome.\nThanks in advance!",
      "votes": -4
    },
    {
      "id": 3274554,
      "postDate": "2025-08-25T02:27:08.367Z",
      "content": "<p>CV(all): 0.867<br>\nCV(IMU only): 0.811<br>\nLB: 0.842</p>",
      "rawMarkdown": "CV(all): 0.867\nCV(IMU only): 0.811\nLB: 0.842"
    },
    {
      "id": 3255398,
      "postDate": "2025-07-28T15:27:27.303Z",
      "content": "<p>cv: imu only 0.8181, imu+thm+tof 0.8638<br>\npublic lb: 0.84</p>",
      "rawMarkdown": "cv: imu only 0.8181, imu+thm+tof 0.8638\npublic lb: 0.84"
    },
    {
      "id": 3245853,
      "postDate": "2025-07-10T00:43:05.013Z",
      "content": "<p>StratifiedGroupKFold, groups=subject cv Average Val Acc: 0.8194 Val Acc Std Dev: 0.0386 LB0.81</p>",
      "rawMarkdown": "StratifiedGroupKFold, groups=subject cv Average Val Acc: 0.8194 Val Acc Std Dev: 0.0386 LB0.81"
    },
    {
      "id": 3244925,
      "postDate": "2025-07-08T17:13:45.147Z",
      "content": "<p>Imu only : StratifiedGroupKFold, split by subject: cv : 0.7910 LB : 0.81<br>\nFull data : StratifiedKFold, split by gesture: cv : 0.83 LB : 0.8<br>\nEnsemble : LB : 0.82</p>",
      "rawMarkdown": "Imu only : StratifiedGroupKFold, split by subject: cv : 0.7910 LB : 0.81\nFull data : StratifiedKFold, split by gesture: cv : 0.83 LB : 0.8\nEnsemble : LB : 0.82"
    },
    {
      "id": 3242670,
      "postDate": "2025-07-06T07:52:53.023Z",
      "content": "<p>In our split strategy, imu+tof+thm cv: 0.82~0.83, imu: 0.781, then lb is 0.82. </p>",
      "rawMarkdown": "In our split strategy, imu+tof+thm cv: 0.82~0.83, imu: 0.781, then lb is 0.82. ",
      "replies": [
        {
          "id": 3242910,
          "postDate": "2025-07-06T14:29:31.557Z",
          "content": "<p>Hey Tom, I may have missed it but can you give some details on your split strategy? </p>\n<p>Best,<br>\nJan</p>",
          "rawMarkdown": "Hey Tom, I may have missed it but can you give some details on your split strategy? \n\nBest,\nJan"
        }
      ]
    },
    {
      "id": 3241785,
      "postDate": "2025-07-05T07:36:17.330Z",
      "content": "<p>CV and LB scores are correlated, but the variability between folds is concerning. We need to analyze the reasons behind the under-performing folds.</p>\n<table>\n<thead>\n<tr>\n<th>fold0</th>\n<th>fold1</th>\n<th>fold2</th>\n<th>fold3</th>\n<th>fold4</th>\n<th>CV</th>\n<th>LB</th>\n<th>CV Strategy</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>0.8282</td>\n<td>0.7782</td>\n<td>0.7601</td>\n<td>0.7549</td>\n<td>0.7926</td>\n<td>0.7828</td>\n<td>0.8</td>\n<td>StratifiedGroupKFold, groups=subject</td>\n</tr>\n</tbody>\n</table>",
      "rawMarkdown": "CV and LB scores are correlated, but the variability between folds is concerning. We need to analyze the reasons behind the under-performing folds.\n| fold0 | fold1 | fold2 | fold3 | fold4 | CV | LB | CV Strategy |\n| --- | --- | --- | --- | --- | --- | --- | --- |\n| 0.8282 | 0.7782 | 0.7601 | 0.7549 | 0.7926 | 0.7828 | 0.8 | StratifiedGroupKFold, groups=subject |"
    },
    {
      "id": 3268037,
      "postDate": "2025-08-12T09:29:39.213Z",
      "rawMarkdown": "",
      "isDeleted": true
    },
    {
      "id": 3221710,
      "postDate": "2025-06-11T11:29:08.960Z",
      "rawMarkdown": "",
      "isDeleted": true
    }
  ],
  "comments": [
    {
      "id": 3268024,
      "author_name": "Ruby",
      "author_url": "",
      "post_date": "2025-08-12T09:10:21.813000",
      "content": "<p>CV:(sgkf on subject and gesture)<br>\nIMU 0.825~0.828<br>\nAll: 0.886</p>\n<p>LB:<br>\nIMU:0.839~0.844<br>\n(0.5<em>IMU+0.5</em>All):0.868</p>\n<p>Any top teams willing to share their scores?</p>",
      "votes": 8,
      "replies": [
        {
          "id": 3268029,
          "author_name": "Quan Vu",
          "author_url": "",
          "post_date": "2025-08-12T09:22:20.007000",
          "content": "<p>LB score 0.852<br>\nIMU only: 0.815<br>\nIMU + TOF + THM: 0.89<br>\nCV (sgkf on subject and gesture)<br>\nIMU only: 0.815<br>\nIMU + TOF + THM: 0.89</p>",
          "votes": 2,
          "replies": [
            {
              "id": 3269894,
              "author_name": "",
              "author_url": "",
              "post_date": "2025-08-15T09:20:22.897000",
              "content": "",
              "votes": 0,
              "replies": []
            }
          ]
        },
        {
          "id": 3268030,
          "author_name": "Quan Vu",
          "author_url": "",
          "post_date": "2025-08-12T09:23:58.257000",
          "content": "<p>Your IMU-only score is awesome.</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 3268041,
          "author_name": "greySnow",
          "author_url": "",
          "post_date": "2025-08-12T09:40:15.460000",
          "content": "<p>TY for confirming IMU can be pushed so much! I assume it's a single model? Wondering how much it can be pushed more with ensembling~</p>",
          "votes": 0,
          "replies": [
            {
              "id": 3268043,
              "author_name": "Ruby",
              "author_url": "",
              "post_date": "2025-08-12T09:45:44.073000",
              "content": "<p>Yes, single model. I am wondering too, I don't have diversed work to ensemble currently.</p>",
              "votes": 0,
              "replies": []
            }
          ]
        },
        {
          "id": 3268459,
          "author_name": "Timmy Juicehouse",
          "author_url": "",
          "post_date": "2025-08-13T01:43:43.033000",
          "content": "<p>My best imu only CV: 0.824<br>\nLB: 0.834</p>\n<p>I'm still confused about all sensors cv…</p>",
          "votes": 1,
          "replies": [
            {
              "id": 3274578,
              "author_name": "Timmy Juicehouse",
              "author_url": "",
              "post_date": "2025-08-25T03:48:47.503000",
              "content": "<p>2025.8.25 update: </p>\n<p>all sensors cv: 0.863 lb:0.865</p>",
              "votes": 0,
              "replies": []
            }
          ]
        },
        {
          "id": 3269417,
          "author_name": "yu4u",
          "author_url": "",
          "post_date": "2025-08-14T13:07:32.870000",
          "content": "<p>CV(sgkf on subject and gesture)<br>\nIMU: 0.8390<br>\nAll: 0.8861</p>\n<p>LB:<br>\n0.857</p>\n<p>--overfitting?</p>",
          "votes": 1,
          "replies": [
            {
              "id": 3269437,
              "author_name": "Ruby",
              "author_url": "",
              "post_date": "2025-08-14T13:37:31.647000",
              "content": "<p>Did you test IMU only LB score?</p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3269514,
              "author_name": "yu4u",
              "author_url": "",
              "post_date": "2025-08-14T15:22:04.420000",
              "content": "<p>IMU only LB: 0.835</p>",
              "votes": 0,
              "replies": []
            }
          ]
        },
        {
          "id": 3269561,
          "author_name": "Theo Viel",
          "author_url": "",
          "post_date": "2025-08-14T16:32:46.667000",
          "content": "<p>Thanks for sharing, this confirms my IMU model is quite weak - <br>\nCV 0.827 - LB 0.822 <br>\n(sgkf on subject and gesture)<br>\nMy IMU+TOF+THM on the other end looks alright : <br>\nCV 0.887 - LB 0.859</p>",
          "votes": 2,
          "replies": [
            {
              "id": 3271029,
              "author_name": "Mauro Abidal Carrer",
              "author_url": "",
              "post_date": "2025-08-17T21:08:23.050000",
              "content": "<p>Hello, did you first try to sgkf first on subject before doing it on subject and gesture?<br>\nIf so, did you notice a diffrence in your lb score when switching from per subject sgkf to per subject and gesture sgkf?</p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3271623,
              "author_name": "Theo Viel",
              "author_url": "",
              "post_date": "2025-08-19T09:42:48.660000",
              "content": "<p>Did not try no. It should not make any difference imo</p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3271703,
              "author_name": "Mauro Abidal Carrer",
              "author_url": "",
              "post_date": "2025-08-19T13:25:07.627000",
              "content": "<p>okok thx you for your answer</p>",
              "votes": 0,
              "replies": []
            }
          ]
        },
        {
          "id": 3269893,
          "author_name": "",
          "author_url": "",
          "post_date": "2025-08-15T09:16:54.573000",
          "content": "",
          "votes": 0,
          "replies": []
        },
        {
          "id": 3273198,
          "author_name": "liuzhangzhen",
          "author_url": "",
          "post_date": "2025-08-22T10:41:25.633000",
          "content": "<p>LB:0.860<br>\nCV:(5folds: sgkf on subject and gesture)<br>\nIMU 0.807<br>\nAll: 0.863<br>\nmy cv is quiet low….</p>",
          "votes": 1,
          "replies": []
        }
      ]
    },
    {
      "id": 3214761,
      "author_name": "phalanx",
      "author_url": "",
      "post_date": "2025-06-01T03:25:13.640000",
      "content": "<h2>cv</h2>\n<ul>\n<li>IMU only: 0.723</li>\n<li>IMU + TMP + TOF: 0.771</li>\n</ul>\n<h2>public lb</h2>\n<p>0.78</p>",
      "votes": 9,
      "replies": [
        {
          "id": 3214786,
          "author_name": "213tubo",
          "author_url": "",
          "post_date": "2025-06-01T04:38:38.397000",
          "content": "<p>Could you please share how you calculated your CV and how you split the data?</p>",
          "votes": 1,
          "replies": [
            {
              "id": 3214794,
              "author_name": "phalanx",
              "author_url": "",
              "post_date": "2025-06-01T04:55:01.343000",
              "content": "<h2>How to split the data</h2>\n<p>I split the data with StratifiedGroupKFold, using each subject as the group label. <br>\nIdeally, the split should also account for metadata such as age and gender, but I haven’t implemented that yet.</p>\n<h2>How to calculate CV</h2>\n<p>Following <a href=\"https://www.kaggle.com/code/metric/cmi-2025\" target=\"_blank\">the competition’s evaluation metric</a>, I predict the gesture for each sequence ID and then compute the average Binary F1 and Macro F1 scores.</p>",
              "votes": 12,
              "replies": []
            },
            {
              "id": 3215041,
              "author_name": "Gaurav Rawat",
              "author_url": "",
              "post_date": "2025-06-01T14:07:41.700000",
              "content": "<p>Thanks I did without strat and group and it was all over the place will try this .</p>",
              "votes": 1,
              "replies": []
            }
          ]
        },
        {
          "id": 3215486,
          "author_name": "",
          "author_url": "",
          "post_date": "2025-06-02T09:55:00.657000",
          "content": "",
          "votes": 1,
          "replies": []
        },
        {
          "id": 3218328,
          "author_name": "phalanx",
          "author_url": "",
          "post_date": "2025-06-06T04:54:18.303000",
          "content": "<p>update:</p>\n<h2>cv</h2>\n<ul>\n<li>IMU: 0.78</li>\n<li>IMU + TMP + TOF: 0.85</li>\n</ul>\n<h2>public lb</h2>\n<ul>\n<li>IMU: 0.78</li>\n<li>IMU + TMP + TOF: None</li>\n<li>Overall: 0.82</li>\n</ul>",
          "votes": 6,
          "replies": [
            {
              "id": 3218591,
              "author_name": "Ryenhails",
              "author_url": "",
              "post_date": "2025-06-06T11:53:21.350000",
              "content": "<p>Thanks for sharing! Did you incorporate demographic data in your model?</p>",
              "votes": 1,
              "replies": []
            },
            {
              "id": 3218602,
              "author_name": "phalanx",
              "author_url": "",
              "post_date": "2025-06-06T12:20:57.917000",
              "content": "<p>Yes, but I'd probably get about the same score without using it.</p>",
              "votes": 3,
              "replies": []
            },
            {
              "id": 3218608,
              "author_name": "Ryenhails",
              "author_url": "",
              "post_date": "2025-06-06T12:27:50.370000",
              "content": "<p>I have the same experimental results, leading me to suspect that demographic data may not provide sufficient information, as a single subject can correspond to various gesture sequences.</p>",
              "votes": 2,
              "replies": []
            }
          ]
        }
      ]
    },
    {
      "id": 3251295,
      "author_name": "Sercan Yeşilöz",
      "author_url": "",
      "post_date": "2025-07-20T11:49:36.517000",
      "content": "<table>\n<thead>\n<tr>\n<th>Model</th>\n<th>CV</th>\n<th>CV Strategy</th>\n<th>LB</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>1D CNN (IMU Only)</td>\n<td>0.78129</td>\n<td>StratifiedGroupKFold (5 Folds)</td>\n<td>0.79</td>\n</tr>\n<tr>\n<td>LightGBM (IMU Only)</td>\n<td>0.77183</td>\n<td>StratifiedGroupKFold (5 Folds)</td>\n<td></td>\n</tr>\n<tr>\n<td>LightGBM (All Data)</td>\n<td>0.84145</td>\n<td>StratifiedGroupKFold (5 Folds)</td>\n<td></td>\n</tr>\n<tr>\n<td>1D CNN + LSTM (IMU Only)</td>\n<td>0.77332</td>\n<td>StratifiedGroupKFold (5 Folds)</td>\n<td></td>\n</tr>\n<tr>\n<td>1D CNN + LSTM (All Data)</td>\n<td>0.83636</td>\n<td>StratifiedGroupKFold (5 Folds)</td>\n<td></td>\n</tr>\n</tbody>\n</table>",
      "votes": 6,
      "replies": [
        {
          "id": 3251315,
          "author_name": "Kurise",
          "author_url": "",
          "post_date": "2025-07-20T12:53:54.853000",
          "content": "<p>Thanks for sharing! May I aks is it your ensemble used? And it is amazing lgbm! I can't push lgbm very well…</p>",
          "votes": 0,
          "replies": [
            {
              "id": 3251458,
              "author_name": "",
              "author_url": "",
              "post_date": "2025-07-20T20:43:22.360000",
              "content": "",
              "votes": 1,
              "replies": []
            }
          ]
        },
        {
          "id": 3252301,
          "author_name": "Mahdi Ravaghi",
          "author_url": "",
          "post_date": "2025-07-22T12:08:23.113000",
          "content": "<p><a href=\"https://www.kaggle.com/sercanyesiloz\" target=\"_blank\">@sercanyesiloz</a> Can you share the LB scores of these models as well?</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 3213969,
      "author_name": "chumajin",
      "author_url": "",
      "post_date": "2025-05-30T17:42:32.137000",
      "content": "<p>Update ! </p>\n<p>I use all sensors features :</p>\n<p>cv: 0.73542811647 (binary f1: 0.93720089, f1 macro:0.53365533)</p>\n<p>And  for submission :<br>\nI switched the model by checking whether \"tof_5_v63\" is null or not.</p>\n<p>public lb : 0.65</p>\n<p>Here, I calculated the average with the cv for the only IMU sensor and all sensors.<br>\n(0.5798545 + 0.7354281) / 2 = 0.657639058</p>\n<p>This seems to align perfectly for cv and public lb.<br>\nThis is the good competition.</p>",
      "votes": 5,
      "replies": [
        {
          "id": 3214044,
          "author_name": "Jonathan Wibowo ",
          "author_url": "",
          "post_date": "2025-05-30T20:47:56.343000",
          "content": "<p>thanks for posting! could you explain the rationale why using the end of the sequence is a good first step here?</p>",
          "votes": 1,
          "replies": [
            {
              "id": 3214114,
              "author_name": "Tom",
              "author_url": "",
              "post_date": "2025-05-31T01:00:48.687000",
              "content": "<p><a href=\"https://www.kaggle.com/jonwibowo\" target=\"_blank\">@jonwibowo</a> You can get the total sequence length from <code>sequence_counter</code>. But I think we need to build a model that takes the sequence as input, current approach uses summarized info to build a simple tabular predictor. <br>\nWe have five labels, it's interesting to figure out a good way handling label information.<br>\nOne possible new label development is: </p>\n<ul>\n<li>generate text describing the state of the patient in each timestep from the columns. </li>\n<li>combine <code>sequence_type</code>, <code>ordientation</code>, <code>behavior</code>, <code>phase</code> and <code>gesture</code> in the text.</li>\n<li>subsequently feed the text to the llm then producing the text embedding for each time step.</li>\n<li>We predict the embedding first, then use the predicted embedding to predict the actual label. </li>\n</ul>",
              "votes": 2,
              "replies": []
            },
            {
              "id": 3214191,
              "author_name": "",
              "author_url": "",
              "post_date": "2025-05-31T04:58:04.327000",
              "content": "",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3214192,
              "author_name": "",
              "author_url": "",
              "post_date": "2025-05-31T04:59:07.697000",
              "content": "",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3214193,
              "author_name": "chumajin",
              "author_url": "",
              "post_date": "2025-05-31T04:59:32.460000",
              "content": "<p><a href=\"https://www.kaggle.com/tom99763\" target=\"_blank\">@tom99763</a> Right! Thank you for comment.</p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3214194,
              "author_name": "chumajin",
              "author_url": "",
              "post_date": "2025-05-31T04:59:53.047000",
              "content": "<p><a href=\"https://www.kaggle.com/jonwibowo\" target=\"_blank\">@jonwibowo</a> I believe the very end of a sequence tends to capture some aggregation or summary of the preceding activity. For this type of tabular data, features from the end of the sequence are often utilized.<br>\nHowever, in this particular case, there isn't any single feature (like those from the end) that distinctly stands out.<br>\nUltimately, it might be best to use all the data and apply a time-series model.</p>",
              "votes": 0,
              "replies": []
            }
          ]
        }
      ]
    },
    {
      "id": 3223527,
      "author_name": "Andrei Zamfir",
      "author_url": "",
      "post_date": "2025-06-13T12:49:55.997000",
      "content": "<p>0.82 CV - 0.80 LB (don’t know if high or low 0.80), using Stratified K fold, will test with Group Stratified K fold as well. IMU only<br>\nL.E.: based on other competitors reaching 0.8, I believe it's high 0.8, which is in line with 0.01-0.015 gap I keep experiencing with this split strategy.</p>",
      "votes": 4,
      "replies": [
        {
          "id": 3223738,
          "author_name": "Gaurav Rawat",
          "author_url": "",
          "post_date": "2025-06-13T19:05:18.910000",
          "content": "<p>Nice just imu that is great </p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 3223835,
          "author_name": "Natsume",
          "author_url": "",
          "post_date": "2025-06-14T00:01:39.380000",
          "content": "<p>When your cv exceeds 0.8, does the correlation between lb and cv weaken? In my experiment, when it exceeds 0.8, I tried to increase cv to 0.81, but lb did decrease by 0.01.<br>\nOr maybe i make some data leakage…</p>",
          "votes": 0,
          "replies": [
            {
              "id": 3223883,
              "author_name": "shanzhong8",
              "author_url": "",
              "post_date": "2025-06-14T03:51:11.820000",
              "content": "<p>May I ask how do you split your folds?</p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3223915,
              "author_name": "",
              "author_url": "",
              "post_date": "2025-06-14T05:33:25.437000",
              "content": "",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3223917,
              "author_name": "Natsume",
              "author_url": "",
              "post_date": "2025-06-14T05:42:45.567000",
              "content": "<p>Stratified K fold，split by gesture</p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3224275,
              "author_name": "Andrei Zamfir",
              "author_url": "",
              "post_date": "2025-06-14T16:02:48.640000",
              "content": "<p>For stratified k fold, split by gesture, I observe a constant 0.01-0.015 gap between cv and lb (cv being higher).</p>\n<p>For stratified group k fold, other way around.</p>",
              "votes": 2,
              "replies": []
            }
          ]
        }
      ]
    },
    {
      "id": 3216995,
      "author_name": "Ye_Ai",
      "author_url": "",
      "post_date": "2025-06-04T11:42:51.907000",
      "content": "<table>\n<thead>\n<tr>\n<th>Feature</th>\n<th>CV</th>\n<th>LB</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>IMU</td>\n<td>0.734</td>\n<td>0.74</td>\n</tr>\n<tr>\n<td>IMU+THM+TOF</td>\n<td>0.812</td>\n<td>0.73</td>\n</tr>\n<tr>\n<td>OverAll</td>\n<td>0.773</td>\n<td>0.78</td>\n</tr>\n</tbody>\n</table>",
      "votes": 3,
      "replies": [
        {
          "id": 3217250,
          "author_name": "chumajin",
          "author_url": "",
          "post_date": "2025-06-04T17:54:48.600000",
          "content": "<p><a href=\"https://www.kaggle.com/ye11725\" target=\"_blank\">@ye11725</a> Thanks. That's amazing. So, for the IMU+THM+TOF Leaderboard (LB), you just submitted it as null, right?</p>",
          "votes": 1,
          "replies": [
            {
              "id": 3217355,
              "author_name": "Ye_Ai",
              "author_url": "",
              "post_date": "2025-06-04T23:41:21.670000",
              "content": "<p>Just use the IMU+THM+TOF model to predict all test sets, including data with null TOF values</p>",
              "votes": 2,
              "replies": []
            }
          ]
        }
      ]
    },
    {
      "id": 3215236,
      "author_name": "Ryenhails",
      "author_url": "",
      "post_date": "2025-06-01T20:47:51.573000",
      "content": "<p>1d-cnn, IMU feature only, label based stratified 1 fold local validation 0.703, lb 0.68</p>",
      "votes": 3,
      "replies": [
        {
          "id": 3215924,
          "author_name": "Ryenhails",
          "author_url": "",
          "post_date": "2025-06-02T21:27:29.600000",
          "content": "<p>update: IMU + TMP + TOF: 0.766 + IMU only: 0.703, LB 0.71</p>",
          "votes": 2,
          "replies": [
            {
              "id": 3215949,
              "author_name": "Gaurav Rawat",
              "author_url": "",
              "post_date": "2025-06-02T22:47:05.570000",
              "content": "<p>Are you inferring on the ensemble of 5 fold? Dunno I get better lb lower cv though in same comparison as you for 0.68</p>",
              "votes": 1,
              "replies": []
            },
            {
              "id": 3215950,
              "author_name": "Ryenhails",
              "author_url": "",
              "post_date": "2025-06-02T22:55:09.073000",
              "content": "<p>For now, I’m using a simple split with a single model for a quick experiment. Given this setup, it’s expected that the gap between CV and LB would be larger compared to a 5-fold ensemble</p>",
              "votes": 3,
              "replies": []
            },
            {
              "id": 3216295,
              "author_name": "Gaurav Rawat",
              "author_url": "",
              "post_date": "2025-06-03T11:14:27.963000",
              "content": "<p>Thanks ya now though for Imu only getting nice correlation 0.686 - 0.68</p>",
              "votes": 1,
              "replies": []
            },
            {
              "id": 3216349,
              "author_name": "Ryenhails",
              "author_url": "",
              "post_date": "2025-06-03T12:50:16.973000",
              "content": "<p>I just applied 5 folds cv: <br>\nIMU only 0.705 - 0.69<br>\nIMU only + IMU,tof,tmp (0.705, 0.761) - 0.72<br>\ncorrelation seems better now</p>",
              "votes": 2,
              "replies": []
            },
            {
              "id": 3216412,
              "author_name": "Gaurav Rawat",
              "author_url": "",
              "post_date": "2025-06-03T14:40:13.210000",
              "content": "<p>ya 5 fold cv works for me also :) </p>\n<p>0.7665 ~ 0.7 LB</p>",
              "votes": 1,
              "replies": []
            }
          ]
        },
        {
          "id": 3221793,
          "author_name": "Ryenhails",
          "author_url": "",
          "post_date": "2025-06-11T12:38:17.033000",
          "content": "<p>update: <br>\nusing (gender + handedness + adult_child) as the target, StratifiedGroupKFold by subject<br>\ncv:  IMU + TMP + TOF: 0.8103 + IMU only: 0.7610, LB 0.81</p>",
          "votes": 1,
          "replies": [
            {
              "id": 3221843,
              "author_name": "Gaurav Rawat",
              "author_url": "",
              "post_date": "2025-06-11T13:51:12.800000",
              "content": "<p>so an ensemble of both ?</p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3221850,
              "author_name": "Ryenhails",
              "author_url": "",
              "post_date": "2025-06-11T14:06:42.677000",
              "content": "<p>Use the IMU-only models if the test data does not contain TOF &amp; TMP columns. Use the full sensor models if the test data includes TOF &amp; TMP columns.</p>",
              "votes": 1,
              "replies": []
            },
            {
              "id": 3227607,
              "author_name": "Myo Min Htet(wnp)🇲🇲",
              "author_url": "",
              "post_date": "2025-06-19T05:51:26.907000",
              "content": "<p>did u mean (gender + handedness + adult_child) + gesture  as labels</p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3227653,
              "author_name": "Ryenhails",
              "author_url": "",
              "post_date": "2025-06-19T06:50:58.287000",
              "content": "<p>for example:</p>\n<pre><code>    \n    composite_labels = []\n     subject  subject_groups:\n        subject_demo = subject_demographics_map[subject]\n        sex = subject_demo[]\n        handedness = subject_demo[] \n        adult_child = subject_demo[]\n\n        \n        \n        composite_label = sex + handedness *  + adult_child * \n        composite_labels.append(composite_label)\n</code></pre>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3227879,
              "author_name": "Zuoli",
              "author_url": "",
              "post_date": "2025-06-19T12:01:38.027000",
              "content": "<p>How much improvement did the subtask bring?<br>\nI tried orientation prediction as a subtask, which led to a +0.007 improvement in CV (5-fold average), but the LB score was nearly the same.</p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3227903,
              "author_name": "Ryenhails",
              "author_url": "",
              "post_date": "2025-06-19T12:46:56.983000",
              "content": "<p>It is just about using composite_labels for stratified groupk split</p>",
              "votes": 0,
              "replies": []
            }
          ]
        }
      ]
    },
    {
      "id": 3217253,
      "author_name": "chumajin",
      "author_url": "",
      "post_date": "2025-06-04T18:00:35.247000",
      "content": "<p>update2 : use stratifiedgroupkfold (group : \"subject\" ) is better than (group : \"sequence id\")</p>\n<p>・　group : \"sequence id\" result</p>\n<p>IMU only : cv 0.694 lb : 0.66<br>\nIMU+THM+TOF  :cv 0.796, cv average 0.745, lb : 0.7</p>\n<p>・　group : \"object\" result</p>\n<p>IMU only : cv 0.665 lb : 0.65<br>\nIMU+THM+TOF  :cv 0.751, cv average 0.705, lb : 0.7 almost same</p>",
      "votes": 4,
      "replies": [
        {
          "id": 3220727,
          "author_name": "Gaurav Rawat",
          "author_url": "",
          "post_date": "2025-06-09T19:42:55.970000",
          "content": "<p>ya similar IMU+THM+TOF :cv average </p>\n<ul>\n<li>0.7665 ± 0.0247, lb : 0.7 exp_1</li>\n<li>0.7938 ± 0.0230 score LB 0.73 - exp_2</li>\n<li>0.77 0.76 LB </li>\n<li>0.7238 ± 0.0216 IMU Only </li>\n</ul>",
          "votes": 1,
          "replies": []
        }
      ]
    },
    {
      "id": 3242412,
      "author_name": "Jack",
      "author_url": "",
      "post_date": "2025-07-05T20:51:43.127000",
      "content": "<p>Is anyone finding their CV-LB less consistent on IMU + THM + TOF? My IMU only is .82 cv, .81 lb.. my full data model has cv of .88 but only giving increase of 0.02 in test submission. I’m aware test data is 50/50 and splitting models accordingly. </p>",
      "votes": 1,
      "replies": [
        {
          "id": 3242449,
          "author_name": "Andrei Zamfir",
          "author_url": "",
          "post_date": "2025-07-05T21:42:36.957000",
          "content": "<p>I have the exact same thing you describe, except that I get .82 lb imu only, and .83 with all, despite .9 cv for imu+tof+thm.</p>",
          "votes": 0,
          "replies": [
            {
              "id": 3242457,
              "author_name": "Jack",
              "author_url": "",
              "post_date": "2025-07-05T21:56:00.657000",
              "content": "<p>Yeah.. I think I’ll hit 0.82 IMU soon and will still be 0.83 on LB haha -_- I’m sure we’ll figure it out but a bit frustrating for now!</p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3242465,
              "author_name": "Andrei Zamfir",
              "author_url": "",
              "post_date": "2025-07-05T23:02:24.770000",
              "content": "<p>Yeah, agreed. I decided to not tunnel on it too much and work towards a better IMU only first, I spent the last 2 weeks trying to solve this and probe but did not get to any resolution.</p>",
              "votes": 0,
              "replies": []
            }
          ]
        },
        {
          "id": 3242663,
          "author_name": "Ryenhails",
          "author_url": "",
          "post_date": "2025-07-06T07:37:56.640000",
          "content": "<p>Same here — my CV is around 0.85 using only IMU data and goes up to 0.90 when using all sensors. Correspondingly, my public LB scores are 0.82 and 0.84. I've been stuck at this CV plateau for the past two weeks and haven’t been able to push it further.</p>",
          "votes": 1,
          "replies": []
        }
      ]
    },
    {
      "id": 3233108,
      "author_name": "Mahdi Ravaghi",
      "author_url": "",
      "post_date": "2025-06-26T13:37:49.573000",
      "content": "<table>\n<thead>\n<tr>\n<th><strong>Date</strong></th>\n<th><strong>5 Fold CV</strong></th>\n<th><strong>Public LB</strong></th>\n<th><strong>CV Strategy</strong></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>26. June</td>\n<td>0.793382</td>\n<td>0.82</td>\n<td>StratifiedGroupKFold, groups=subject</td>\n</tr>\n<tr>\n<td>7. July</td>\n<td>0.815587</td>\n<td>0.83</td>\n<td>StratifiedGroupKFold, groups=subject</td>\n</tr>\n</tbody>\n</table>",
      "votes": 1,
      "replies": [
        {
          "id": 3233180,
          "author_name": "Jan Brederecke",
          "author_url": "",
          "post_date": "2025-06-26T14:36:19.667000",
          "content": "<p>Hey Mahdi, thanks for sharing! If you want, can you say what kind of model and what you stratify for? Would be interesting for me :). </p>\n<p>Best,<br>\nJan</p>",
          "votes": 1,
          "replies": [
            {
              "id": 3233187,
              "author_name": "Mahdi Ravaghi",
              "author_url": "",
              "post_date": "2025-06-26T14:51:53.533000",
              "content": "<p>Hi Jan,</p>\n<p>This is based on a fork of the <a href=\"https://www.kaggle.com/code/nksusth/lb-0-78-quaternions-tf-bilstm-gru-attention\" target=\"_blank\">current best public LB notebook</a>. I’ve added cross-validation using gesture for stratification, but the main improvement I made to the notebook has to do with feature engineering.</p>",
              "votes": 2,
              "replies": []
            },
            {
              "id": 3233483,
              "author_name": "Ravon",
              "author_url": "",
              "post_date": "2025-06-26T20:54:20.097000",
              "content": "<p>Hey Mahdi, awesome results!</p>\n<p>If im not mistaken, that same CV strategy on that notebook yeilds a CV of 0.81 and a LB of 0.78. Yet after you added your feature engineering, the CV goes down and the LB goes up. So are you basing what feature engineering works purely on the LB?</p>",
              "votes": 1,
              "replies": []
            },
            {
              "id": 3233784,
              "author_name": "Mahdi Ravaghi",
              "author_url": "",
              "post_date": "2025-06-27T06:57:56.010000",
              "content": "<p>Hi Ravon,</p>\n<p>I may be overfitting to the public LB, but that wasn't my intention. I based my feature engineering and selection on CV alone. Before I started experimenting with different features, I made a change to the notebook that gave me a better CV-LB correlation (CV went down, but LB remained the same). However, as I added more features, my CV improved only slightly, while the public LB improved by a lot.</p>",
              "votes": 2,
              "replies": []
            },
            {
              "id": 3234477,
              "author_name": "Ravon",
              "author_url": "",
              "post_date": "2025-06-27T22:13:22.560000",
              "content": "<p>Could you give a hint on what you did to improve CV-LB correlation? I'm really struggling to create a strong CV for that notebook. 😭</p>",
              "votes": 0,
              "replies": []
            }
          ]
        }
      ]
    },
    {
      "id": 3221268,
      "author_name": "Zi",
      "author_url": "",
      "post_date": "2025-06-10T17:09:23.990000",
      "content": "<p>StratifiedGroupKfold +IMU Data only + mixup <br>\nCV = 0.7358<br>\nLB = 0.76</p>",
      "votes": 1,
      "replies": [
        {
          "id": 3221797,
          "author_name": "Gaurav Rawat",
          "author_url": "",
          "post_date": "2025-06-11T12:40:51.823000",
          "content": "<p>ahh on 5 folds that is better correlation really nice only with IMU ..</p>",
          "votes": 1,
          "replies": [
            {
              "id": 3221857,
              "author_name": "Zi",
              "author_url": "",
              "post_date": "2025-06-11T14:28:48.097000",
              "content": "<p>Yeah, it seems that figuring out what works with IMU-only data is the key to this competition. But So far, making the network deeper and wider hasn’t really helped on my side after lb 0.76.</p>",
              "votes": 2,
              "replies": []
            },
            {
              "id": 3221889,
              "author_name": "Jan Brederecke",
              "author_url": "",
              "post_date": "2025-06-11T15:15:19.190000",
              "content": "<p>Can elaborate on your implementation of mixup? I trief it and it made everything mich worse…</p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3221960,
              "author_name": "",
              "author_url": "",
              "post_date": "2025-06-11T16:21:32.630000",
              "content": "",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3221964,
              "author_name": "Zi",
              "author_url": "",
              "post_date": "2025-06-11T16:23:45.713000",
              "content": "<p>I'm basically using the same CV setup from <a href=\"https://www.kaggle.com/alejopaullier\" target=\"_blank\">@alejopaullier</a>'s notebook. I modified the training code, which boosted my local CV score by around 0.005. However, my best LB score was achieved with mixup, but some of my previous submissions without it actually scored higher than other attempts that did include it.</p>\n<pre><code> ():\n    model.train()\n    criterion1 = nn.CrossEntropyLoss(reduction=)\n    criterion2 = nn.BCEWithLogitsLoss()\n    scaler = torch.amp.GradScaler(enabled=config.AMP)\n    losses, losses1, losses2 = AverageMeter(), AverageMeter(), AverageMeter()\n    start = end = time.time()\n    global_step = \n     tqdm(\n        train_loader, unit=, desc=\n    )  tqdm_train_loader:\n         step, batch  (tqdm_train_loader):\n            X = batch.pop().to(device)\n            y = batch.pop().to(device)\n            y_hard = batch.pop().to(device)\n            batch_size = y.size()\n             (\n                config.MIXUP_ALPHA &gt; \n                 np.random.rand() &lt; config.MIXUP_PROB\n            ):\n                lam = np.random.beta(config.MIXUP_ALPHA, config.MIXUP_ALPHA)\n                batch_indices = torch.randperm(batch_size)\n\n                \n                X_mixed = lam * X + ( - lam) * X[batch_indices]\n\n                \n                y_a, y_b = y, y[batch_indices]\n                y_hard_a, y_hard_b = y_hard, y_hard[batch_indices]\n\n                 torch.amp.autocast(device., enabled=config.AMP):\n                    y_preds, y_preds_hard = model(X_mixed)\n\n                    \n                    loss1 = lam * criterion1(y_preds, y_a) + (\n                         - lam\n                    ) * criterion1(y_preds, y_b)\n\n                    \n                    y_hard_mixed = lam * y_hard_a + ( - lam) * y_hard_b\n                    loss2 = criterion2(\n                        y_preds_hard, y_hard_mixed.unsqueeze()\n                    )\n\n                    loss = loss1 + loss2\n            :\n                \n                 torch.amp.autocast(device., enabled=config.AMP):\n                    y_preds, y_preds_hard = model(X)\n                    loss1 = criterion1(y_preds, y)\n                    loss2 = criterion2(y_preds_hard, y_hard.unsqueeze())\n                    loss = loss1 + loss2\n\n             config.GRADIENT_ACCUMULATION_STEPS &gt; :\n                loss = loss / config.GRADIENT_ACCUMULATION_STEPS\n            losses.update(loss.item(), batch_size)\n            losses1.update(loss1.item(), batch_size)\n            losses2.update(loss2.item(), batch_size)\n            scaler.scale(loss).backward()\n            grad_norm = torch.nn.utils.clip_grad_norm_(\n                model.parameters(), config.MAX_GRAD_NORM\n            )\n\n             (step + ) % config.GRADIENT_ACCUMULATION_STEPS == :\n                scaler.step(optimizer)\n                scaler.update()\n                optimizer.zero_grad()\n                global_step += \n                scheduler.step()\n            end = time.time()\n\n     losses.avg\n</code></pre>",
              "votes": 3,
              "replies": []
            },
            {
              "id": 3221968,
              "author_name": "",
              "author_url": "",
              "post_date": "2025-06-11T16:29:30.733000",
              "content": "",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3222130,
              "author_name": "Jan Brederecke",
              "author_url": "",
              "post_date": "2025-06-11T21:32:13.993000",
              "content": "<p>Thank you for sharing! So at one point it helped but you improved to a point where it does not help anymore? Interesting find! :) </p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3223829,
              "author_name": "Zi",
              "author_url": "",
              "post_date": "2025-06-13T22:53:40.893000",
              "content": "<p>i think I'm still going to trust my local CV and continue using the mixup method. because I've noticed that even submissions from the exact same model can result in score variations. but that can be issues on my end though… :)</p>",
              "votes": 0,
              "replies": []
            }
          ]
        }
      ]
    },
    {
      "id": 3219738,
      "author_name": "Pi",
      "author_url": "",
      "post_date": "2025-06-08T09:05:03.513000",
      "content": "<p>Thank <a href=\"https://www.kaggle.com/chumajin\" target=\"_blank\">@chumajin</a> ! Could you please explain why “for this type of continuous data, the first step is to create a model using only the very end of the sequence and evaluate it”. Why don’t we use all but only the ending?</p>",
      "votes": 1,
      "replies": [
        {
          "id": 3219745,
          "author_name": "chumajin",
          "author_url": "",
          "post_date": "2025-06-08T09:09:11.610000",
          "content": "<p><a href=\"https://www.kaggle.com/nguyenhoa\" target=\"_blank\">@nguyenhoa</a> Thanks for your comment.<br>\nIt's because it's easy to validate and the dataset is small.<br>\nBut you're also welcome to use the entire dataset and take the average of the predictions.</p>",
          "votes": 2,
          "replies": [
            {
              "id": 3220042,
              "author_name": "Gaurav Rawat",
              "author_url": "",
              "post_date": "2025-06-08T17:35:25.553000",
              "content": "<p>What loss function have you guys tried to use if can be shared or how have been your observations. There.. I’ll chime in just experimenting </p>",
              "votes": 0,
              "replies": []
            },
            {
              "id": 3220557,
              "author_name": "Pi",
              "author_url": "",
              "post_date": "2025-06-09T13:56:21.920000",
              "content": "<blockquote>\n  <p>What loss function have you guys tried to use if can be shared or how have been your observations. There.. I’ll chime in just experimenting</p>\n</blockquote>\n<p><a href=\"https://www.kaggle.com/gauravbrills\" target=\"_blank\">@gauravbrills</a> I'm using CrossEntropy like normal multi-class classification problem. My best validation losses for IMU only models are around 1.</p>",
              "votes": 0,
              "replies": []
            }
          ]
        }
      ]
    },
    {
      "id": 3219657,
      "author_name": "Athar Sayed",
      "author_url": "",
      "post_date": "2025-06-08T06:20:30.917000",
      "content": "<p>StratifiedGroupKfold +IMU Data only<br>\nCV = 0.6742<br>\nLB = 0.68</p>",
      "votes": 1,
      "replies": [
        {
          "id": 3219747,
          "author_name": "chumajin",
          "author_url": "",
          "post_date": "2025-06-08T09:09:53.917000",
          "content": "<p><a href=\"https://www.kaggle.com/sayedathar11\" target=\"_blank\">@sayedathar11</a> Thank you. good correlation.</p>",
          "votes": 1,
          "replies": []
        }
      ]
    },
    {
      "id": 3215579,
      "author_name": "Athar Sayed",
      "author_url": "",
      "post_date": "2025-06-02T12:47:03.280000",
      "content": "<p>For this type of continuous data, the first step is to create a model using only the very end of the sequence and evaluate it. Doesnt this reduces the number of datapoints available for training ? </p>",
      "votes": 1,
      "replies": [
        {
          "id": 3215583,
          "author_name": "chumajin",
          "author_url": "",
          "post_date": "2025-06-02T12:51:03.960000",
          "content": "<p><a href=\"https://www.kaggle.com/sayedathar11\" target=\"_blank\">@sayedathar11</a> Yes, you are right. Training data reduces. Just 1st step for trying. </p>",
          "votes": 1,
          "replies": []
        }
      ]
    },
    {
      "id": 3214965,
      "author_name": "Gerwyn",
      "author_url": "",
      "post_date": "2025-06-01T10:49:21.937000",
      "content": "<p>Just did my first submission, nothing fancy, 5 stratified k folds.</p>\n<p>cv: 0.6809, LB: 0.66</p>\n<p>edit: group (on subject) stratified seems closer,  :)</p>\n<p>cv: 0.6727, LB: 0.67</p>",
      "votes": 1,
      "replies": []
    },
    {
      "id": 3251870,
      "author_name": "Mauro Abidal Carrer",
      "author_url": "",
      "post_date": "2025-07-21T17:30:41.463000",
      "content": "<p>Since this discussion is getting a lot of attraction, I figured I would repost my question here(lmk if it's inappropriate, in which case I'll delete it).<br>\nDuring training I get a CV average of 0.57 but the corresponding Leader board is 0.32.</p>\n<p>I am using sklearn's StratifiedGroupKFold to create my CV folds as follow:</p>\n<pre><code> () -&gt; [[pd.DataFrame, pd.DataFrame]]:\n    sgkf = StratifiedGroupKFold(n_splits=N_FOLDS, shuffle=)\n\n    folds = []\n    X = df.drop(columns=[target_col])\n    y = df[target_col]\n    groups = df[group_col]\n\n     train_idx, valid_idx  sgkf.split(X, y, groups):\n        train_df = df.iloc[train_idx].copy()\n        valid_df = df.iloc[valid_idx].copy()\n        folds.append((train_df, valid_df))\n\n     folds\n\nfolds = split_dataset_stratified_groupkfold(df, target_col=, group_col=)\n</code></pre>\n<p>And I am using this code to measure my score locally: <a href=\"https://www.kaggle.com/code/metric/cmi-2025\" target=\"_blank\">https://www.kaggle.com/code/metric/cmi-2025</a><br>\nI integrate it in my evaluation function as follow:</p>\n<pre><code> () -&gt; :\n    model = model.()\n    model_device = (model.parameters()).device\n    competition_metric = metric_package.Metric()\n\n    total_accuracy = \n    total_test_loss = \n     torch.inference_mode():\n         x, y  validation_loader:\n            x = x.to(model_device)\n            y = y.to(model_device)\n\n            half = BATCH_SIZE //          \n            x_front = x[:half]               \n            x_back  = x[half:].clone()      \n\n            x_back[:, :, non_imu_feats_idx] =     \n            x = torch.cat([x_front, x_back], dim=)  \n\n            y_pred = model(x)\n            total_test_loss += critirion(y_pred, y).item()\n            batch_accuracy = compute_accuracy(y_pred, y)\n            total_accuracy += batch_accuracy\n            competition_metric.add(get_str_target(y), get_str_target(y_pred))\n\n     {\n        : total_test_loss / (validation_loader),\n        : total_accuracy / (validation_loader),\n        : competition_metric.score(),\n    }\n</code></pre>\n<p>The current version of my preprocessing, training and inference notebooks are attached.<br>\nHere are the links to my <a href=\"https://github.com/MauroAbidalCarrer/CMI-2025-competition/blob/competition_score_metric/notebooks/preprocess_dataset.ipynb\" target=\"_blank\">preprocessing notebook</a>, [training notebook]During training I get a CV average of 0.57 but the corresponding Leader board is 0.32.</p>\n<p>I am using sklearn's StratifiedGroupKFold to create my CV folds as follow:</p>\n<pre><code> () -&gt; [[pd.DataFrame, pd.DataFrame]]:\n    sgkf = StratifiedGroupKFold(n_splits=N_FOLDS, shuffle=)\n\n    folds = []\n    X = df.drop(columns=[target_col])\n    y = df[target_col]\n    groups = df[group_col]\n\n     train_idx, valid_idx  sgkf.split(X, y, groups):\n        train_df = df.iloc[train_idx].copy()\n        valid_df = df.iloc[valid_idx].copy()\n        folds.append((train_df, valid_df))\n\n     folds\n\nfolds = split_dataset_stratified_groupkfold(df, target_col=, group_col=)\n</code></pre>\n<p>And I am using this code to measure my score locally: <a href=\"https://www.kaggle.com/code/metric/cmi-2025\" target=\"_blank\">https://www.kaggle.com/code/metric/cmi-2025</a><br>\nI integrate it in my evaluation function as follow:</p>\n<pre><code> () -&gt; :\n    model = model.()\n    model_device = (model.parameters()).device\n    competition_metric = metric_package.Metric()\n\n    total_accuracy = \n    total_test_loss = \n     torch.inference_mode():\n         x, y  validation_loader:\n            x = x.to(model_device)\n            y = y.to(model_device)\n\n            half = BATCH_SIZE //          \n            x_front = x[:half]               \n            x_back  = x[half:].clone()      \n\n            x_back[:, :, non_imu_feats_idx] =     \n            x = torch.cat([x_front, x_back], dim=)  \n\n            y_pred = model(x)\n            total_test_loss += critirion(y_pred, y).item()\n            batch_accuracy = compute_accuracy(y_pred, y)\n            total_accuracy += batch_accuracy\n            competition_metric.add(get_str_target(y), get_str_target(y_pred))\n\n     {\n        : total_test_loss / (validation_loader),\n        : total_accuracy / (validation_loader),\n        : competition_metric.score(),\n    }\n</code></pre>\n<p>The current version of my preprocessing, training and inference notebooks are attached.<br>\nHere are the links to my <a href=\"https://github.com/MauroAbidalCarrer/CMI-2025-competition/blob/competition_score_metric/notebooks/preprocess_dataset.ipynb\" target=\"_blank\">preprocessing notebook</a>, <a href=\"https://github.com/MauroAbidalCarrer/CMI-2025-competition/blob/competition_score_metric/notebooks/training.ipynb\" target=\"_blank\">training notebook</a> and <a href=\"https://github.com/MauroAbidalCarrer/CMI-2025-competition/blob/competition_score_metric/notebooks/inference.ipynb\" target=\"_blank\">inference notebook</a>.</p>\n<p>Do you see something I am doing wrong?<br>\nReading the entire pipeline would be cumbersome, so let me know if you need extra info to help.<br>\nEvery answer/advice is welcome.<br>\nThanks in advance!</p>",
      "votes": -4,
      "replies": []
    },
    {
      "id": 3274554,
      "author_name": "Bilzard",
      "author_url": "",
      "post_date": "2025-08-25T02:27:08.367000",
      "content": "<p>CV(all): 0.867<br>\nCV(IMU only): 0.811<br>\nLB: 0.842</p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 3255398,
      "author_name": "yu4u",
      "author_url": "",
      "post_date": "2025-07-28T15:27:27.303000",
      "content": "<p>cv: imu only 0.8181, imu+thm+tof 0.8638<br>\npublic lb: 0.84</p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 3245853,
      "author_name": "Seeing Times",
      "author_url": "",
      "post_date": "2025-07-10T00:43:05.013000",
      "content": "<p>StratifiedGroupKFold, groups=subject cv Average Val Acc: 0.8194 Val Acc Std Dev: 0.0386 LB0.81</p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 3244925,
      "author_name": "Kurise",
      "author_url": "",
      "post_date": "2025-07-08T17:13:45.147000",
      "content": "<p>Imu only : StratifiedGroupKFold, split by subject: cv : 0.7910 LB : 0.81<br>\nFull data : StratifiedKFold, split by gesture: cv : 0.83 LB : 0.8<br>\nEnsemble : LB : 0.82</p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 3242670,
      "author_name": "Tom",
      "author_url": "",
      "post_date": "2025-07-06T07:52:53.023000",
      "content": "<p>In our split strategy, imu+tof+thm cv: 0.82~0.83, imu: 0.781, then lb is 0.82. </p>",
      "votes": 0,
      "replies": [
        {
          "id": 3242910,
          "author_name": "Jan Brederecke",
          "author_url": "",
          "post_date": "2025-07-06T14:29:31.557000",
          "content": "<p>Hey Tom, I may have missed it but can you give some details on your split strategy? </p>\n<p>Best,<br>\nJan</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 3241785,
      "author_name": "hiro",
      "author_url": "",
      "post_date": "2025-07-05T07:36:17.330000",
      "content": "<p>CV and LB scores are correlated, but the variability between folds is concerning. We need to analyze the reasons behind the under-performing folds.</p>\n<table>\n<thead>\n<tr>\n<th>fold0</th>\n<th>fold1</th>\n<th>fold2</th>\n<th>fold3</th>\n<th>fold4</th>\n<th>CV</th>\n<th>LB</th>\n<th>CV Strategy</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>0.8282</td>\n<td>0.7782</td>\n<td>0.7601</td>\n<td>0.7549</td>\n<td>0.7926</td>\n<td>0.7828</td>\n<td>0.8</td>\n<td>StratifiedGroupKFold, groups=subject</td>\n</tr>\n</tbody>\n</table>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 3268037,
      "author_name": "",
      "author_url": "",
      "post_date": "2025-08-12T09:29:39.213000",
      "content": "",
      "votes": 0,
      "replies": []
    },
    {
      "id": 3221710,
      "author_name": "",
      "author_url": "",
      "post_date": "2025-06-11T11:29:08.960000",
      "content": "",
      "votes": 0,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "3213877": "For this type of continuous data, the first step is to create a model using only the very end of the sequence and evaluate it. \n\nexample\n```\ntrain = train.groupby(\"sequence_id\").tail(1).reset_index(drop=True)\n```\n\nIn my case, I used CatBoost and obtained the following results.\n\n5 kfold: StratifiedGroupKFold (train[\"sequence_id\"])\n※ update note : group = \"sequence_id\" means leakage, group = \"subject\" is correct.\n\nmetric:  https://www.kaggle.com/code/metric/cmi-2025\n\ncv: 0.5798545 (binary f1: 0.8626, f1 macro: 0.297100)\npublic lb: 0.58\n\nThe CV and public LB seem to align perfectly, but what does everyone else think?\n\n※ Note : I just only IMU sensor features",
    "3268024": "CV:(sgkf on subject and gesture)\nIMU 0.825~0.828\nAll: 0.886\n\nLB:\nIMU:0.839~0.844\n(0.5*IMU+0.5*All):0.868\n\nAny top teams willing to share their scores?",
    "3214761": "## cv\n  - IMU only: 0.723\n  - IMU + TMP + TOF: 0.771\n\n## public lb\n0.78",
    "3251295": "| Model | CV | CV Strategy | LB |\n|:-------------|:--------------:|:--------------:|:--------------:|\n| 1D CNN (IMU Only)        | 0.78129|StratifiedGroupKFold (5 Folds) | 0.79 |\n| LightGBM (IMU Only)    | 0.77183       |StratifiedGroupKFold (5 Folds) | |\n| LightGBM (All Data)    | 0.84145       |StratifiedGroupKFold (5 Folds) | |\n| 1D CNN + LSTM (IMU Only)    | 0.77332      |StratifiedGroupKFold (5 Folds) | |\n| 1D CNN + LSTM (All Data)    | 0.83636      |StratifiedGroupKFold (5 Folds) | |",
    "3213969": "Update ! \n\nI use all sensors features :\n\ncv: 0.73542811647 (binary f1: 0.93720089, f1 macro:0.53365533)\n\nAnd  for submission :\nI switched the model by checking whether \"tof_5_v63\" is null or not.\n\npublic lb : 0.65\n\nHere, I calculated the average with the cv for the only IMU sensor and all sensors.\n(0.5798545 + 0.7354281) / 2 = 0.657639058\n\nThis seems to align perfectly for cv and public lb.\nThis is the good competition.",
    "3223527": "0.82 CV - 0.80 LB (don’t know if high or low 0.80), using Stratified K fold, will test with Group Stratified K fold as well. IMU only\nL.E.: based on other competitors reaching 0.8, I believe it's high 0.8, which is in line with 0.01-0.015 gap I keep experiencing with this split strategy.",
    "3216995": "|Feature|CV  |  LB|\n| --- | --- |\n|IMU|  0.734|0.74  |\n|IMU+THM+TOF|  0.812| 0.73 |\n|OverAll|0.773 |0.78  |\n",
    "3215236": "1d-cnn, IMU feature only, label based stratified 1 fold local validation 0.703, lb 0.68",
    "3217253": "update2 : use stratifiedgroupkfold (group : \"subject\" ) is better than (group : \"sequence id\")\n\n・　group : \"sequence id\" result\n\nIMU only : cv 0.694 lb : 0.66\nIMU+THM+TOF  :cv 0.796, cv average 0.745, lb : 0.7\n\n・　group : \"object\" result\n\nIMU only : cv 0.665 lb : 0.65\nIMU+THM+TOF  :cv 0.751, cv average 0.705, lb : 0.7 almost same\n",
    "3242412": "Is anyone finding their CV-LB less consistent on IMU + THM + TOF? My IMU only is .82 cv, .81 lb.. my full data model has cv of .88 but only giving increase of 0.02 in test submission. I’m aware test data is 50/50 and splitting models accordingly. ",
    "3233108": "| **Date** | **5 Fold CV** | **Public LB** |            **CV Strategy**           |\n|:--------:|:-------------:|:-------------:|:------------------------------------:|\n| 26. June |      0.793382     |      0.82     | StratifiedGroupKFold, groups=subject |\n| 7. July |      0.815587     |      0.83     | StratifiedGroupKFold, groups=subject |",
    "3221268": "StratifiedGroupKfold +IMU Data only + mixup \nCV = 0.7358\nLB = 0.76",
    "3219738": "Thank @chumajin ! Could you please explain why “for this type of continuous data, the first step is to create a model using only the very end of the sequence and evaluate it”. Why don’t we use all but only the ending?",
    "3219657": "StratifiedGroupKfold +IMU Data only\nCV = 0.6742\nLB = 0.68",
    "3215579": "For this type of continuous data, the first step is to create a model using only the very end of the sequence and evaluate it. Doesnt this reduces the number of datapoints available for training ? ",
    "3214965": "Just did my first submission, nothing fancy, 5 stratified k folds.\n\n\ncv: 0.6809, LB: 0.66\n\n\nedit: group (on subject) stratified seems closer,  :)\n\ncv: 0.6727, LB: 0.67",
    "3251870": "Since this discussion is getting a lot of attraction, I figured I would repost my question here(lmk if it's inappropriate, in which case I'll delete it).\nDuring training I get a CV average of 0.57 but the corresponding Leader board is 0.32.\n\nI am using sklearn's StratifiedGroupKFold to create my CV folds as follow:\n```python\ndef split_dataset_stratified_groupkfold(df: pd.DataFrame, target_col: str, group_col: str) -> list[tuple[pd.DataFrame, pd.DataFrame]]:\n    sgkf = StratifiedGroupKFold(n_splits=N_FOLDS, shuffle=True)\n\n    folds = []\n    X = df.drop(columns=[target_col])\n    y = df[target_col]\n    groups = df[group_col]\n\n    for train_idx, valid_idx in sgkf.split(X, y, groups):\n        train_df = df.iloc[train_idx].copy()\n        valid_df = df.iloc[valid_idx].copy()\n        folds.append((train_df, valid_df))\n\n    return folds\n\nfolds = split_dataset_stratified_groupkfold(df, target_col=\"gesture\", group_col=\"subject\")\n```\nAnd I am using this code to measure my score locally: https://www.kaggle.com/code/metric/cmi-2025\nI integrate it in my evaluation function as follow:\n```python\ndef evaluate_model(\n        model: torch.nn.Module,\n        critirion:callable,\n        validation_loader:DL,\n    ) -> dict:\n    model = model.eval()\n    model_device = next(model.parameters()).device\n    competition_metric = metric_package.Metric()\n\n    total_accuracy = 0\n    total_test_loss = 0\n    with torch.inference_mode():\n        for x, y in validation_loader:\n            x = x.to(model_device)\n            y = y.to(model_device)\n\n            half = BATCH_SIZE // 2         \n            x_front = x[:half]               \n            x_back  = x[half:].clone()      \n            \n            x_back[:, :, non_imu_feats_idx] = 0.0    \n            x = torch.cat([x_front, x_back], dim=0)  # (B, C, T)\n\n            y_pred = model(x)\n            total_test_loss += critirion(y_pred, y).item()\n            batch_accuracy = compute_accuracy(y_pred, y)\n            total_accuracy += batch_accuracy\n            competition_metric.add(get_str_target(y), get_str_target(y_pred))\n\n    return {\n        \"validation_loss\": total_test_loss / len(validation_loader),\n        \"validation_accuracy\": total_accuracy / len(validation_loader),\n        \"competition_score\": competition_metric.score(),\n    }\n```\nThe current version of my preprocessing, training and inference notebooks are attached.\nHere are the links to my [preprocessing notebook](https://github.com/MauroAbidalCarrer/CMI-2025-competition/blob/competition_score_metric/notebooks/preprocess_dataset.ipynb), [training notebook]During training I get a CV average of 0.57 but the corresponding Leader board is 0.32.\n\nI am using sklearn's StratifiedGroupKFold to create my CV folds as follow:\n```python\ndef split_dataset_stratified_groupkfold(df: pd.DataFrame, target_col: str, group_col: str) -> list[tuple[pd.DataFrame, pd.DataFrame]]:\n    sgkf = StratifiedGroupKFold(n_splits=N_FOLDS, shuffle=True)\n\n    folds = []\n    X = df.drop(columns=[target_col])\n    y = df[target_col]\n    groups = df[group_col]\n\n    for train_idx, valid_idx in sgkf.split(X, y, groups):\n        train_df = df.iloc[train_idx].copy()\n        valid_df = df.iloc[valid_idx].copy()\n        folds.append((train_df, valid_df))\n\n    return folds\n\nfolds = split_dataset_stratified_groupkfold(df, target_col=\"gesture\", group_col=\"subject\")\n```\nAnd I am using this code to measure my score locally: https://www.kaggle.com/code/metric/cmi-2025\nI integrate it in my evaluation function as follow:\n```python\ndef evaluate_model(\n        model: torch.nn.Module,\n        critirion:callable,\n        validation_loader:DL,\n    ) -> dict:\n    model = model.eval()\n    model_device = next(model.parameters()).device\n    competition_metric = metric_package.Metric()\n\n    total_accuracy = 0\n    total_test_loss = 0\n    with torch.inference_mode():\n        for x, y in validation_loader:\n            x = x.to(model_device)\n            y = y.to(model_device)\n\n            half = BATCH_SIZE // 2         \n            x_front = x[:half]               \n            x_back  = x[half:].clone()      \n            \n            x_back[:, :, non_imu_feats_idx] = 0.0    \n            x = torch.cat([x_front, x_back], dim=0)  # (B, C, T)\n\n            y_pred = model(x)\n            total_test_loss += critirion(y_pred, y).item()\n            batch_accuracy = compute_accuracy(y_pred, y)\n            total_accuracy += batch_accuracy\n            competition_metric.add(get_str_target(y), get_str_target(y_pred))\n\n    return {\n        \"validation_loss\": total_test_loss / len(validation_loader),\n        \"validation_accuracy\": total_accuracy / len(validation_loader),\n        \"competition_score\": competition_metric.score(),\n    }\n```\nThe current version of my preprocessing, training and inference notebooks are attached.\nHere are the links to my [preprocessing notebook](https://github.com/MauroAbidalCarrer/CMI-2025-competition/blob/competition_score_metric/notebooks/preprocess_dataset.ipynb), [training notebook](https://github.com/MauroAbidalCarrer/CMI-2025-competition/blob/competition_score_metric/notebooks/training.ipynb) and [inference notebook](https://github.com/MauroAbidalCarrer/CMI-2025-competition/blob/competition_score_metric/notebooks/inference.ipynb).\n\nDo you see something I am doing wrong?\nReading the entire pipeline would be cumbersome, so let me know if you need extra info to help.\nEvery answer/advice is welcome.\nThanks in advance!",
    "3274554": "CV(all): 0.867\nCV(IMU only): 0.811\nLB: 0.842",
    "3255398": "cv: imu only 0.8181, imu+thm+tof 0.8638\npublic lb: 0.84",
    "3245853": "StratifiedGroupKFold, groups=subject cv Average Val Acc: 0.8194 Val Acc Std Dev: 0.0386 LB0.81",
    "3244925": "Imu only : StratifiedGroupKFold, split by subject: cv : 0.7910 LB : 0.81\nFull data : StratifiedKFold, split by gesture: cv : 0.83 LB : 0.8\nEnsemble : LB : 0.82",
    "3242670": "In our split strategy, imu+tof+thm cv: 0.82~0.83, imu: 0.781, then lb is 0.82. ",
    "3241785": "CV and LB scores are correlated, but the variability between folds is concerning. We need to analyze the reasons behind the under-performing folds.\n| fold0 | fold1 | fold2 | fold3 | fold4 | CV | LB | CV Strategy |\n| --- | --- | --- | --- | --- | --- | --- | --- |\n| 0.8282 | 0.7782 | 0.7601 | 0.7549 | 0.7926 | 0.7828 | 0.8 | StratifiedGroupKFold, groups=subject |",
    "3268037": "",
    "3221710": ""
  }
}