{
  "id": 663198,
  "title": "Wow, Removing AdaptableSnail fps=25 Wins 2nd Place!",
  "url": "/competitions/MABe-mouse-behavior-detection/discussion/663198",
  "author_name": "",
  "post_date": "2025-12-16T21:33:50.357819200Z",
  "votes": 24,
  "comment_count": 11,
  "views": 0,
  "content": "<p>Wow, as a post comp experiment, I updated my final submission (code is <a href=\"https://www.kaggle.com/code/cdeotte/7th-place-gold-mouse-comp-cv-0-56-lb-0-56\" target=\"_blank\">here</a>) to make zero predictions on AdaptableSnail private test video with frames_per_second=25. The result is Private LB = 0.535 which wins 2nd place, Wow! (This is a +0.012 improvement from 0.523)</p>\n<p><img src=\"https://raw.githubusercontent.com/cdeotte/Kaggle_Images/refs/heads/main/Dec-2025/2nd_place.png\" alt=\"\"></p>\n<p>If others want to see what their Private LB score is without making predictions on AdaptableSnail test video with frames_per_second=25, add the following code to the end of your submission</p>\n<pre><code>test = pd.read_csv(\"/kaggle/input/MABe-mouse-behavior-detection/test.csv\")\nV = test.loc[(test.lab_id==\"AdaptableSnail\")&amp;(test.frames_per_second==25)].video_id.unique()\ndf = pd.read_csv(\"submission.csv\")\ndf = df.loc[~df.video_id.isin(V)] \ndf.to_csv(\"submission.csv\",index=False)\n</code></pre>\n<p>Personally, I think it is unfair that the host and Kaggle both know that the targets are wrong for private test video AdaptableSnail with frames_per_second=25 but they still left it in private LB.  The host and Kaggle admits the targets are wrong in discussion <a href=\"https://www.kaggle.com/competitions/MABe-mouse-behavior-detection/discussion/612531#3305943\" target=\"_blank\">here</a>.</p>\n<p>I expected that Kaggle would fix or remove this video. (So I did not do any adjusting to my final submission). What is the purpose of evaluating final scores intentionally using wrong targets? <a href=\"https://www.kaggle.com/annkennedy05\" target=\"_blank\">@annkennedy05</a> <a href=\"https://www.kaggle.com/addisonhoward\" target=\"_blank\">@addisonhoward</a> <a href=\"https://www.kaggle.com/inversion\" target=\"_blank\">@inversion</a> </p>\n<p>More discussion <a href=\"https://www.kaggle.com/competitions/MABe-mouse-behavior-detection/discussion/663466\" target=\"_blank\">here</a></p>",
  "messages": [
    {
      "id": "3377738",
      "postDate": "12/16/2025 21:33:50",
      "content": "<p>Wow, as a post comp experiment, I updated my final submission (code is <a href=\"https://www.kaggle.com/code/cdeotte/7th-place-gold-mouse-comp-cv-0-56-lb-0-56\" target=\"_blank\">here</a>) to make zero predictions on AdaptableSnail private test video with frames_per_second=25. The result is Private LB = 0.535 which wins 2nd place, Wow! (This is a +0.012 improvement from 0.523)</p>\n<p><img src=\"https://raw.githubusercontent.com/cdeotte/Kaggle_Images/refs/heads/main/Dec-2025/2nd_place.png\" alt=\"\"></p>\n<p>If others want to see what their Private LB score is without making predictions on AdaptableSnail test video with frames_per_second=25, add the following code to the end of your submission</p>\n<pre><code>test = pd.read_csv(\"/kaggle/input/MABe-mouse-behavior-detection/test.csv\")\nV = test.loc[(test.lab_id==\"AdaptableSnail\")&amp;(test.frames_per_second==25)].video_id.unique()\ndf = pd.read_csv(\"submission.csv\")\ndf = df.loc[~df.video_id.isin(V)] \ndf.to_csv(\"submission.csv\",index=False)\n</code></pre>\n<p>Personally, I think it is unfair that the host and Kaggle both know that the targets are wrong for private test video AdaptableSnail with frames_per_second=25 but they still left it in private LB.  The host and Kaggle admits the targets are wrong in discussion <a href=\"https://www.kaggle.com/competitions/MABe-mouse-behavior-detection/discussion/612531#3305943\" target=\"_blank\">here</a>.</p>\n<p>I expected that Kaggle would fix or remove this video. (So I did not do any adjusting to my final submission). What is the purpose of evaluating final scores intentionally using wrong targets? <a href=\"https://www.kaggle.com/annkennedy05\" target=\"_blank\">@annkennedy05</a> <a href=\"https://www.kaggle.com/addisonhoward\" target=\"_blank\">@addisonhoward</a> <a href=\"https://www.kaggle.com/inversion\" target=\"_blank\">@inversion</a> </p>\n<p>More discussion <a href=\"https://www.kaggle.com/competitions/MABe-mouse-behavior-detection/discussion/663466\" target=\"_blank\">here</a></p>",
      "rawMarkdown": "Wow, as a post comp experiment, I updated my final submission (code is [here][2]) to make zero predictions on AdaptableSnail private test video with frames_per_second=25. The result is Private LB = 0.535 which wins 2nd place, Wow! (This is a +0.012 improvement from 0.523)\n\n![](https://raw.githubusercontent.com/cdeotte/Kaggle_Images/refs/heads/main/Dec-2025/2nd_place.png)\n\nIf others want to see what their Private LB score is without making predictions on AdaptableSnail test video with frames_per_second=25, add the following code to the end of your submission\n\n    test = pd.read_csv(\"/kaggle/input/MABe-mouse-behavior-detection/test.csv\")\n    V = test.loc[(test.lab_id==\"AdaptableSnail\")&(test.frames_per_second==25)].video_id.unique()\n    df = pd.read_csv(\"submission.csv\")\n    df = df.loc[~df.video_id.isin(V)] \n    df.to_csv(\"submission.csv\",index=False)\n\nPersonally, I think it is unfair that the host and Kaggle both know that the targets are wrong for private test video AdaptableSnail with frames_per_second=25 but they still left it in private LB.  The host and Kaggle admits the targets are wrong in discussion [here][1].\n\nI expected that Kaggle would fix or remove this video. (So I did not do any adjusting to my final submission). What is the purpose of evaluating final scores intentionally using wrong targets? @annkennedy05 @addisonhoward @inversion \n\nMore discussion [here][3]\n\n[1]: https://www.kaggle.com/competitions/MABe-mouse-behavior-detection/discussion/612531#3305943\n[2]: https://www.kaggle.com/code/cdeotte/7th-place-gold-mouse-comp-cv-0-56-lb-0-56\n[3]: https://www.kaggle.com/competitions/MABe-mouse-behavior-detection/discussion/663466",
      "votes": null
    },
    {
      "id": "3377744",
      "postDate": "12/16/2025 21:47:01",
      "content": "<p>Makes no sense to consolidate the final LB using wrong labels and is extremelly bad for Kaggle reputation.\nBest solution would be simply remove the bad data and rescored LB.</p>",
      "rawMarkdown": "Makes no sense to consolidate the final LB using wrong labels and is extremelly bad for Kaggle reputation.\nBest solution would be simply remove the bad data and rescored LB.",
      "votes": null
    },
    {
      "id": "3377745",
      "postDate": "12/16/2025 21:48:07",
      "content": "<p>Absolutely agree. There is no point to knowingly evaluating submissions using wrong targets. It makes absolutely no sense whatsoever. </p>",
      "rawMarkdown": "Absolutely agree. There is no point to knowingly evaluating submissions using wrong targets. It makes absolutely no sense whatsoever.",
      "votes": null
    },
    {
      "id": "3377786",
      "postDate": "12/17/2025 00:04:37",
      "content": "<p>there is more to it - this is from 2nd place write-up (<a href=\"https://www.kaggle.com/competitions/MABe-mouse-behavior-detection/writeups/2nd-place-solution):\" target=\"_blank\">https://www.kaggle.com/competitions/MABe-mouse-behavior-detection/writeups/2nd-place-solution):</a></p>\n<p>AdaptableSnail 25 FPS Adjustment:\n    start_frame and stop_frame are multiplied by 30 / 25\n    When mouse ID swaps are present in the tracking data, this adjustment is not meaningful\n    The private dataset appears to include tracking sequences without mouse ID swaps\n        For these sequences, predictions are aligned to the 30 FPS labels\n        This resulted in a +0.009 improvement in the private score</p>\n<p>So, if instead of dropping those videos you would scale them up, you could bet extra 9 points.</p>\n<p>I did drop those videos, but did not try to scale the prediction.</p>",
      "rawMarkdown": "there is more to it - this is from 2nd place write-up (https://www.kaggle.com/competitions/MABe-mouse-behavior-detection/writeups/2nd-place-solution):\n\nAdaptableSnail 25 FPS Adjustment:\n    start_frame and stop_frame are multiplied by 30 / 25\n    When mouse ID swaps are present in the tracking data, this adjustment is not meaningful\n    The private dataset appears to include tracking sequences without mouse ID swaps\n        For these sequences, predictions are aligned to the 30 FPS labels\n        This resulted in a +0.009 improvement in the private score\n\nSo, if instead of dropping those videos you would scale them up, you could bet extra 9 points.\n\nI did drop those videos, but did not try to scale the prediction.",
      "votes": null
    },
    {
      "id": "3377824",
      "postDate": "12/17/2025 02:13:34",
      "content": "<p>Skipping them was improving CV, therefore it makes sense that it improves LB too. One could also provide fps as a feature and the model could learn to reduce their probabilities. It is like any other Kaggle label noise. Rescore would be unfair as well.</p>\n<p>But I think it was bad that the host said fps25 doesn’t exist in the test set. I think hosts shouldn’t provide wrong information about the test set. Or maybe shouldn’t provide any info at all, so that we can assume test set is similar to the train set.</p>",
      "rawMarkdown": "Skipping them was improving CV, therefore it makes sense that it improves LB too. One could also provide fps as a feature and the model could learn to reduce their probabilities. It is like any other Kaggle label noise. Rescore would be unfair as well.\n\nBut I think it was bad that the host said fps25 doesn’t exist in the test set. I think hosts shouldn’t provide wrong information about the test set. Or maybe shouldn’t provide any info at all, so that we can assume test set is similar to the train set.",
      "votes": null
    },
    {
      "id": "3377961",
      "postDate": "12/17/2025 08:33:08",
      "content": "<p>Same for me; didn't drop those predictions and now after applying the fix private LB score would have been 0.530 (+0.014). Certainly Kaggle should have updated the datasets when these errors were found, now there is only bad decissions left.</p>",
      "rawMarkdown": "Same for me; didn't drop those predictions and now after applying the fix private LB score would have been 0.530 (+0.014). Certainly Kaggle should have updated the datasets when these errors were found, now there is only bad decissions left.",
      "votes": null
    },
    {
      "id": "3377967",
      "postDate": "12/17/2025 08:43:28",
      "content": "<p>I agree with you <a href=\"https://www.kaggle.com/cdeotte\" target=\"_blank\">@cdeotte</a> </p>",
      "rawMarkdown": "I agree with you @cdeotte",
      "votes": null
    },
    {
      "id": "3377977",
      "postDate": "12/17/2025 09:04:37",
      "content": "<p>I think the reason Adaptable Snail is very difficult to use comes from the high number of actions <strong>combined</strong> the high number of agents (three in total). This makes up a total of 74 distinct targets with 66 distinct with respect to all other targets. NiftyGoldfinch is rich in targets and actions as well.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F2259646%2F6a306e8d416610dae938807603b7e1c2%2FTarget-abundance-in-Adaptable-Snail.png?generation=1765961746579141&amp;alt=media\" alt=\"AdaptableSnail is just rich and difficult\"></p>\n<p>In the same time the frame population is pretty fragmented. This is how it looks like for some selected labs per actions:\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F2259646%2F777688cef2eb14d4377fccc0b2206c38%2FSelected-frame-counts-per-action-per-lab.png?generation=1765962207959801&amp;alt=media\" alt=\"\"></p>\n<p>I suspect that if you fiddle around with NiftyGoldfinch you may be able to better the score even further by decreasing the input data noise.</p>",
      "rawMarkdown": "I think the reason Adaptable Snail is very difficult to use comes from the high number of actions **combined** the high number of agents (three in total). This makes up a total of 74 distinct targets with 66 distinct with respect to all other targets. NiftyGoldfinch is rich in targets and actions as well.\n\n![AdaptableSnail is just rich and difficult](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F2259646%2F6a306e8d416610dae938807603b7e1c2%2FTarget-abundance-in-Adaptable-Snail.png?generation=1765961746579141&alt=media)\n\nIn the same time the frame population is pretty fragmented. This is how it looks like for some selected labs per actions:\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F2259646%2F777688cef2eb14d4377fccc0b2206c38%2FSelected-frame-counts-per-action-per-lab.png?generation=1765962207959801&alt=media)\n\nI suspect that if you fiddle around with NiftyGoldfinch you may be able to better the score even further by decreasing the input data noise.",
      "votes": null
    },
    {
      "id": "3378367",
      "postDate": "12/18/2025 00:38:33",
      "content": "<p>Using post comp submissions, I have extracted my LB F1 score per lab (i.e. submit only 1 lab's predictions then multiply LB score by 15). We can see how the incorrectly labeled private test AdaptableSnail video is degrading the AdaptableSnail private LB F1 score:</p>\n<table>\n<thead>\n<tr>\n<th>lab_id</th>\n<th>CV</th>\n<th>Public LB</th>\n<th>Private LB</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>AdaptableSnail</td>\n<td>0.541807</td>\n<td>0.51000</td>\n<td><strong>0.12810</strong></td>\n</tr>\n<tr>\n<td>BoisterousParrot</td>\n<td>0.667919</td>\n<td>0.75870</td>\n<td>0.59460</td>\n</tr>\n<tr>\n<td>CautiousGiraffe</td>\n<td>0.601883</td>\n<td>0.63405</td>\n<td>0.64515</td>\n</tr>\n<tr>\n<td>DeliriousFly</td>\n<td>0.589313</td>\n<td>0.58485</td>\n<td>0.47280</td>\n</tr>\n<tr>\n<td>ElegantMink</td>\n<td>0.556870</td>\n<td>0.60000</td>\n<td>0.70815</td>\n</tr>\n<tr>\n<td>GroovyShrew</td>\n<td>0.523861</td>\n<td>0.56550</td>\n<td>0.53835</td>\n</tr>\n<tr>\n<td>InvincibleJellyfish</td>\n<td>0.396364</td>\n<td>0.30240</td>\n<td>0.36060</td>\n</tr>\n<tr>\n<td>JovialSwallow</td>\n<td>0.501054</td>\n<td>0.42765</td>\n<td>0.47085</td>\n</tr>\n<tr>\n<td>LyricalHare</td>\n<td>0.605622</td>\n<td>0.59025</td>\n<td>0.49260</td>\n</tr>\n<tr>\n<td>NiftyGoldfinch</td>\n<td>0.468248</td>\n<td>0.48945</td>\n<td>0.49110</td>\n</tr>\n<tr>\n<td>PleasantMeerkat</td>\n<td>0.339524</td>\n<td>0.28320</td>\n<td>0.28800</td>\n</tr>\n<tr>\n<td>ReflectiveManatee</td>\n<td>0.877714</td>\n<td>0.91140</td>\n<td>0.89430</td>\n</tr>\n<tr>\n<td>SparklingTapir</td>\n<td>0.754358</td>\n<td>0.54135</td>\n<td>0.60420</td>\n</tr>\n<tr>\n<td>TranquilPanther</td>\n<td>0.500783</td>\n<td>0.58695</td>\n<td>0.52470</td>\n</tr>\n<tr>\n<td>UppityFerret</td>\n<td>0.600439</td>\n<td>0.63210</td>\n<td>0.63270</td>\n</tr>\n</tbody>\n</table>",
      "rawMarkdown": "Using post comp submissions, I have extracted my LB F1 score per lab (i.e. submit only 1 lab's predictions then multiply LB score by 15). We can see how the incorrectly labeled private test AdaptableSnail video is degrading the AdaptableSnail private LB F1 score:\n\n| lab_id              | CV       | Public LB | Private LB |\n|---------------------|----------|-----------|------------|\n| AdaptableSnail      | 0.541807 | 0.51000   | **0.12810**    |\n| BoisterousParrot    | 0.667919 | 0.75870   | 0.59460    |\n| CautiousGiraffe     | 0.601883 | 0.63405   | 0.64515    |\n| DeliriousFly        | 0.589313 | 0.58485   | 0.47280    |\n| ElegantMink         | 0.556870 | 0.60000   | 0.70815    |\n| GroovyShrew         | 0.523861 | 0.56550   | 0.53835    |\n| InvincibleJellyfish | 0.396364 | 0.30240   | 0.36060    |\n| JovialSwallow       | 0.501054 | 0.42765   | 0.47085    |\n| LyricalHare         | 0.605622 | 0.59025   | 0.49260    |\n| NiftyGoldfinch      | 0.468248 | 0.48945   | 0.49110    |\n| PleasantMeerkat    | 0.339524 | 0.28320   | 0.28800    |\n| ReflectiveManatee  | 0.877714 | 0.91140   | 0.89430    |\n| SparklingTapir     | 0.754358 | 0.54135   | 0.60420    |\n| TranquilPanther    | 0.500783 | 0.58695   | 0.52470    |\n| UppityFerret       | 0.600439 | 0.63210   | 0.63270    |",
      "votes": null
    },
    {
      "id": "3378870",
      "postDate": "12/18/2025 18:30:37",
      "content": "<p>I made the call that this data issue was below the threshold for requiring a correction. I've heard your concerns and will take this feedback under consideration the next time a similar decision arises.</p>",
      "rawMarkdown": "I made the call that this data issue was below the threshold for requiring a correction. I've heard your concerns and will take this feedback under consideration the next time a similar decision arises.",
      "votes": null
    },
    {
      "id": "3385172",
      "postDate": "01/02/2026 16:52:41",
      "content": "<p>For future competitions, it would be helpful for Kaggle to clarify expectations in such situations: when incorrect labels are known to exist in a private test set, should competitors expect final evaluations to be corrected, or should they assume results will stand as-is?</p>\n<p>More discussion including the effect it had on private LB rankings <a href=\"https://www.kaggle.com/competitions/MABe-mouse-behavior-detection/discussion/663466\" target=\"_blank\">here</a></p>",
      "rawMarkdown": "For future competitions, it would be helpful for Kaggle to clarify expectations in such situations: when incorrect labels are known to exist in a private test set, should competitors expect final evaluations to be corrected, or should they assume results will stand as-is?\n\nMore discussion including the effect it had on private LB rankings [here][1]\n\n[1]: https://www.kaggle.com/competitions/MABe-mouse-behavior-detection/discussion/663466",
      "votes": null
    },
    {
      "id": "3385249",
      "postDate": "01/02/2026 20:32:47",
      "content": "<p>absolutely right</p>",
      "rawMarkdown": "absolutely right",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 3377744,
      "author_name": "titericz",
      "author_url": "",
      "post_date": "12/16/2025 21:47:01",
      "content": "<p>Makes no sense to consolidate the final LB using wrong labels and is extremelly bad for Kaggle reputation.\nBest solution would be simply remove the bad data and rescored LB.</p>",
      "votes": null,
      "replies": [
        {
          "id": 3377745,
          "author_name": "cdeotte",
          "author_url": "",
          "post_date": "12/16/2025 21:48:07",
          "content": "<p>Absolutely agree. There is no point to knowingly evaluating submissions using wrong targets. It makes absolutely no sense whatsoever. </p>",
          "votes": null,
          "replies": [
            {
              "id": 3377786,
              "author_name": "ymatioun",
              "author_url": "",
              "post_date": "12/17/2025 00:04:37",
              "content": "<p>there is more to it - this is from 2nd place write-up (<a href=\"https://www.kaggle.com/competitions/MABe-mouse-behavior-detection/writeups/2nd-place-solution):\" target=\"_blank\">https://www.kaggle.com/competitions/MABe-mouse-behavior-detection/writeups/2nd-place-solution):</a></p>\n<p>AdaptableSnail 25 FPS Adjustment:\n    start_frame and stop_frame are multiplied by 30 / 25\n    When mouse ID swaps are present in the tracking data, this adjustment is not meaningful\n    The private dataset appears to include tracking sequences without mouse ID swaps\n        For these sequences, predictions are aligned to the 30 FPS labels\n        This resulted in a +0.009 improvement in the private score</p>\n<p>So, if instead of dropping those videos you would scale them up, you could bet extra 9 points.</p>\n<p>I did drop those videos, but did not try to scale the prediction.</p>",
              "votes": null,
              "replies": []
            }
          ]
        },
        {
          "id": 3377824,
          "author_name": "aerdem4",
          "author_url": "",
          "post_date": "12/17/2025 02:13:34",
          "content": "<p>Skipping them was improving CV, therefore it makes sense that it improves LB too. One could also provide fps as a feature and the model could learn to reduce their probabilities. It is like any other Kaggle label noise. Rescore would be unfair as well.</p>\n<p>But I think it was bad that the host said fps25 doesn’t exist in the test set. I think hosts shouldn’t provide wrong information about the test set. Or maybe shouldn’t provide any info at all, so that we can assume test set is similar to the train set.</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 3378870,
          "author_name": "sohier",
          "author_url": "",
          "post_date": "12/18/2025 18:30:37",
          "content": "<p>I made the call that this data issue was below the threshold for requiring a correction. I've heard your concerns and will take this feedback under consideration the next time a similar decision arises.</p>",
          "votes": null,
          "replies": [
            {
              "id": 3385172,
              "author_name": "cdeotte",
              "author_url": "",
              "post_date": "01/02/2026 16:52:41",
              "content": "<p>For future competitions, it would be helpful for Kaggle to clarify expectations in such situations: when incorrect labels are known to exist in a private test set, should competitors expect final evaluations to be corrected, or should they assume results will stand as-is?</p>\n<p>More discussion including the effect it had on private LB rankings <a href=\"https://www.kaggle.com/competitions/MABe-mouse-behavior-detection/discussion/663466\" target=\"_blank\">here</a></p>",
              "votes": null,
              "replies": [
                {
                  "id": 3385249,
                  "author_name": "yusufsertkayaysk",
                  "author_url": "",
                  "post_date": "01/02/2026 20:32:47",
                  "content": "<p>absolutely right</p>",
                  "votes": null,
                  "replies": []
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "id": 3377961,
      "author_name": "herrahuu",
      "author_url": "",
      "post_date": "12/17/2025 08:33:08",
      "content": "<p>Same for me; didn't drop those predictions and now after applying the fix private LB score would have been 0.530 (+0.014). Certainly Kaggle should have updated the datasets when these errors were found, now there is only bad decissions left.</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 3377967,
      "author_name": "navneetbende",
      "author_url": "",
      "post_date": "12/17/2025 08:43:28",
      "content": "<p>I agree with you <a href=\"https://www.kaggle.com/cdeotte\" target=\"_blank\">@cdeotte</a> </p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 3377977,
      "author_name": "angantyr",
      "author_url": "",
      "post_date": "12/17/2025 09:04:37",
      "content": "<p>I think the reason Adaptable Snail is very difficult to use comes from the high number of actions <strong>combined</strong> the high number of agents (three in total). This makes up a total of 74 distinct targets with 66 distinct with respect to all other targets. NiftyGoldfinch is rich in targets and actions as well.</p>\n<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F2259646%2F6a306e8d416610dae938807603b7e1c2%2FTarget-abundance-in-Adaptable-Snail.png?generation=1765961746579141&amp;alt=media\" alt=\"AdaptableSnail is just rich and difficult\"></p>\n<p>In the same time the frame population is pretty fragmented. This is how it looks like for some selected labs per actions:\n<img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F2259646%2F777688cef2eb14d4377fccc0b2206c38%2FSelected-frame-counts-per-action-per-lab.png?generation=1765962207959801&amp;alt=media\" alt=\"\"></p>\n<p>I suspect that if you fiddle around with NiftyGoldfinch you may be able to better the score even further by decreasing the input data noise.</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 3378367,
      "author_name": "cdeotte",
      "author_url": "",
      "post_date": "12/18/2025 00:38:33",
      "content": "<p>Using post comp submissions, I have extracted my LB F1 score per lab (i.e. submit only 1 lab's predictions then multiply LB score by 15). We can see how the incorrectly labeled private test AdaptableSnail video is degrading the AdaptableSnail private LB F1 score:</p>\n<table>\n<thead>\n<tr>\n<th>lab_id</th>\n<th>CV</th>\n<th>Public LB</th>\n<th>Private LB</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>AdaptableSnail</td>\n<td>0.541807</td>\n<td>0.51000</td>\n<td><strong>0.12810</strong></td>\n</tr>\n<tr>\n<td>BoisterousParrot</td>\n<td>0.667919</td>\n<td>0.75870</td>\n<td>0.59460</td>\n</tr>\n<tr>\n<td>CautiousGiraffe</td>\n<td>0.601883</td>\n<td>0.63405</td>\n<td>0.64515</td>\n</tr>\n<tr>\n<td>DeliriousFly</td>\n<td>0.589313</td>\n<td>0.58485</td>\n<td>0.47280</td>\n</tr>\n<tr>\n<td>ElegantMink</td>\n<td>0.556870</td>\n<td>0.60000</td>\n<td>0.70815</td>\n</tr>\n<tr>\n<td>GroovyShrew</td>\n<td>0.523861</td>\n<td>0.56550</td>\n<td>0.53835</td>\n</tr>\n<tr>\n<td>InvincibleJellyfish</td>\n<td>0.396364</td>\n<td>0.30240</td>\n<td>0.36060</td>\n</tr>\n<tr>\n<td>JovialSwallow</td>\n<td>0.501054</td>\n<td>0.42765</td>\n<td>0.47085</td>\n</tr>\n<tr>\n<td>LyricalHare</td>\n<td>0.605622</td>\n<td>0.59025</td>\n<td>0.49260</td>\n</tr>\n<tr>\n<td>NiftyGoldfinch</td>\n<td>0.468248</td>\n<td>0.48945</td>\n<td>0.49110</td>\n</tr>\n<tr>\n<td>PleasantMeerkat</td>\n<td>0.339524</td>\n<td>0.28320</td>\n<td>0.28800</td>\n</tr>\n<tr>\n<td>ReflectiveManatee</td>\n<td>0.877714</td>\n<td>0.91140</td>\n<td>0.89430</td>\n</tr>\n<tr>\n<td>SparklingTapir</td>\n<td>0.754358</td>\n<td>0.54135</td>\n<td>0.60420</td>\n</tr>\n<tr>\n<td>TranquilPanther</td>\n<td>0.500783</td>\n<td>0.58695</td>\n<td>0.52470</td>\n</tr>\n<tr>\n<td>UppityFerret</td>\n<td>0.600439</td>\n<td>0.63210</td>\n<td>0.63270</td>\n</tr>\n</tbody>\n</table>",
      "votes": null,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "3377738": "Wow, as a post comp experiment, I updated my final submission (code is [here][2]) to make zero predictions on AdaptableSnail private test video with frames_per_second=25. The result is Private LB = 0.535 which wins 2nd place, Wow! (This is a +0.012 improvement from 0.523)\n\n![](https://raw.githubusercontent.com/cdeotte/Kaggle_Images/refs/heads/main/Dec-2025/2nd_place.png)\n\nIf others want to see what their Private LB score is without making predictions on AdaptableSnail test video with frames_per_second=25, add the following code to the end of your submission\n\n    test = pd.read_csv(\"/kaggle/input/MABe-mouse-behavior-detection/test.csv\")\n    V = test.loc[(test.lab_id==\"AdaptableSnail\")&(test.frames_per_second==25)].video_id.unique()\n    df = pd.read_csv(\"submission.csv\")\n    df = df.loc[~df.video_id.isin(V)] \n    df.to_csv(\"submission.csv\",index=False)\n\nPersonally, I think it is unfair that the host and Kaggle both know that the targets are wrong for private test video AdaptableSnail with frames_per_second=25 but they still left it in private LB.  The host and Kaggle admits the targets are wrong in discussion [here][1].\n\nI expected that Kaggle would fix or remove this video. (So I did not do any adjusting to my final submission). What is the purpose of evaluating final scores intentionally using wrong targets? @annkennedy05 @addisonhoward @inversion \n\nMore discussion [here][3]\n\n[1]: https://www.kaggle.com/competitions/MABe-mouse-behavior-detection/discussion/612531#3305943\n[2]: https://www.kaggle.com/code/cdeotte/7th-place-gold-mouse-comp-cv-0-56-lb-0-56\n[3]: https://www.kaggle.com/competitions/MABe-mouse-behavior-detection/discussion/663466",
    "3377744": "Makes no sense to consolidate the final LB using wrong labels and is extremelly bad for Kaggle reputation.\nBest solution would be simply remove the bad data and rescored LB.",
    "3377745": "Absolutely agree. There is no point to knowingly evaluating submissions using wrong targets. It makes absolutely no sense whatsoever.",
    "3377786": "there is more to it - this is from 2nd place write-up (https://www.kaggle.com/competitions/MABe-mouse-behavior-detection/writeups/2nd-place-solution):\n\nAdaptableSnail 25 FPS Adjustment:\n    start_frame and stop_frame are multiplied by 30 / 25\n    When mouse ID swaps are present in the tracking data, this adjustment is not meaningful\n    The private dataset appears to include tracking sequences without mouse ID swaps\n        For these sequences, predictions are aligned to the 30 FPS labels\n        This resulted in a +0.009 improvement in the private score\n\nSo, if instead of dropping those videos you would scale them up, you could bet extra 9 points.\n\nI did drop those videos, but did not try to scale the prediction.",
    "3377824": "Skipping them was improving CV, therefore it makes sense that it improves LB too. One could also provide fps as a feature and the model could learn to reduce their probabilities. It is like any other Kaggle label noise. Rescore would be unfair as well.\n\nBut I think it was bad that the host said fps25 doesn’t exist in the test set. I think hosts shouldn’t provide wrong information about the test set. Or maybe shouldn’t provide any info at all, so that we can assume test set is similar to the train set.",
    "3377961": "Same for me; didn't drop those predictions and now after applying the fix private LB score would have been 0.530 (+0.014). Certainly Kaggle should have updated the datasets when these errors were found, now there is only bad decissions left.",
    "3377967": "I agree with you @cdeotte",
    "3377977": "I think the reason Adaptable Snail is very difficult to use comes from the high number of actions **combined** the high number of agents (three in total). This makes up a total of 74 distinct targets with 66 distinct with respect to all other targets. NiftyGoldfinch is rich in targets and actions as well.\n\n![AdaptableSnail is just rich and difficult](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F2259646%2F6a306e8d416610dae938807603b7e1c2%2FTarget-abundance-in-Adaptable-Snail.png?generation=1765961746579141&alt=media)\n\nIn the same time the frame population is pretty fragmented. This is how it looks like for some selected labs per actions:\n![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F2259646%2F777688cef2eb14d4377fccc0b2206c38%2FSelected-frame-counts-per-action-per-lab.png?generation=1765962207959801&alt=media)\n\nI suspect that if you fiddle around with NiftyGoldfinch you may be able to better the score even further by decreasing the input data noise.",
    "3378367": "Using post comp submissions, I have extracted my LB F1 score per lab (i.e. submit only 1 lab's predictions then multiply LB score by 15). We can see how the incorrectly labeled private test AdaptableSnail video is degrading the AdaptableSnail private LB F1 score:\n\n| lab_id              | CV       | Public LB | Private LB |\n|---------------------|----------|-----------|------------|\n| AdaptableSnail      | 0.541807 | 0.51000   | **0.12810**    |\n| BoisterousParrot    | 0.667919 | 0.75870   | 0.59460    |\n| CautiousGiraffe     | 0.601883 | 0.63405   | 0.64515    |\n| DeliriousFly        | 0.589313 | 0.58485   | 0.47280    |\n| ElegantMink         | 0.556870 | 0.60000   | 0.70815    |\n| GroovyShrew         | 0.523861 | 0.56550   | 0.53835    |\n| InvincibleJellyfish | 0.396364 | 0.30240   | 0.36060    |\n| JovialSwallow       | 0.501054 | 0.42765   | 0.47085    |\n| LyricalHare         | 0.605622 | 0.59025   | 0.49260    |\n| NiftyGoldfinch      | 0.468248 | 0.48945   | 0.49110    |\n| PleasantMeerkat    | 0.339524 | 0.28320   | 0.28800    |\n| ReflectiveManatee  | 0.877714 | 0.91140   | 0.89430    |\n| SparklingTapir     | 0.754358 | 0.54135   | 0.60420    |\n| TranquilPanther    | 0.500783 | 0.58695   | 0.52470    |\n| UppityFerret       | 0.600439 | 0.63210   | 0.63270    |",
    "3378870": "I made the call that this data issue was below the threshold for requiring a correction. I've heard your concerns and will take this feedback under consideration the next time a similar decision arises.",
    "3385172": "For future competitions, it would be helpful for Kaggle to clarify expectations in such situations: when incorrect labels are known to exist in a private test set, should competitors expect final evaluations to be corrected, or should they assume results will stand as-is?\n\nMore discussion including the effect it had on private LB rankings [here][1]\n\n[1]: https://www.kaggle.com/competitions/MABe-mouse-behavior-detection/discussion/663466",
    "3385249": "absolutely right"
  },
  "source": "meta"
}