{
  "id": 667850,
  "title": "scoring error",
  "url": "/competitions/csiro-biomass/discussion/667850",
  "author_name": "",
  "post_date": "2026-01-14T11:15:12.401994400Z",
  "votes": -1,
  "comment_count": 2,
  "views": 0,
  "content": "<p>Hello everyone,</p>\n<p>can someone please explain why this <a href=\"https://www.kaggle.com/code/jordan1980/dino-vitl4-cls-single-fold\" target=\"_blank\">Notebook</a> is raising error only when I submit.\nError is \"scoring error\".</p>\n<p>Thanks</p>",
  "messages": [
    {
      "id": "3391077",
      "postDate": "01/14/2026 11:15:12",
      "content": "<p>Hello everyone,</p>\n<p>can someone please explain why this <a href=\"https://www.kaggle.com/code/jordan1980/dino-vitl4-cls-single-fold\" target=\"_blank\">Notebook</a> is raising error only when I submit.\nError is \"scoring error\".</p>\n<p>Thanks</p>",
      "rawMarkdown": "Hello everyone,\n\ncan someone please explain why this [Notebook](https://www.kaggle.com/code/jordan1980/dino-vitl4-cls-single-fold) is raising error only when I submit.\nError is \"scoring error\".\n\nThanks",
      "votes": null
    },
    {
      "id": "3391151",
      "postDate": "01/14/2026 13:48:50",
      "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F23653385%2F2ff1f0c262420a61cf57675d8886be2c%2FCaptura%20de%20pantalla%20de%202026-01-14%2008-43-25.png?generation=1768398472273019&amp;alt=media\" alt=\"\">   It only uses unique_image_paths (1 image).\nIt creates pred_map with image_id as the key.\nIt iterates over test_df[\"image_id\"], but test_df has multiple rows per image.\nIt does not preserve the order or merge correctly with the original test_df.  code;</p>\n<pre><code># 1. Cargar test.csv completo\ntest_df_full = pd.read_csv(CSV_PATH)\n\n# 2. Crear DataFrame wide con predicciones (una fila por imagen)\npreds_wide = pd.DataFrame({\n    'image_id': test_ids,\n    'Dry_Clover_g': calibrated_preds[:, 0],\n    'Dry_Dead_g': calibrated_preds[:, 1],\n    'Dry_Green_g': calibrated_preds[:, 2],\n    'Dry_Total_g': calibrated_preds[:, 3],  # Ya calculado antes\n    'GDM_g': calibrated_preds[:, 4]  # Ya calculado antes\n})\n\n# 3. Extraer image_id del test_df_full para hacer merge\ntest_df_full['image_id'] = test_df_full['image_path'].apply(\n    lambda x: os.path.splitext(os.path.basename(x))[0]\n)\n\n# 4. Merge con predicciones\ntest_df_with_preds = test_df_full.merge(\n    preds_wide,\n    on='image_id',\n    how='left'\n)\n\n# 5. Crear submission usando melt \ntarget_cols = ['Dry_Green_g', 'Dry_Dead_g', 'Dry_Clover_g', 'GDM_g', 'Dry_Total_g']\nsubmission = test_df_with_preds.melt(\n    id_vars=['sample_id'],\n    value_vars=target_cols,\n    var_name='target_name',\n    value_name='target'\n)\n\n# 6. Filtrar solo las filas donde target_name coincide\nsubmission = submission[\n    submission['target_name'] == submission.apply(\n        lambda row: row['sample_id'].split('__')[1] if '__' in row['sample_id'] else None,\n        axis=1\n    )\n]\n\n# 7. O mejor aún, hacer merge directo:\nsubmission_rows = []\nfor _, row in test_df_full.iterrows():\n    image_id = os.path.splitext(os.path.basename(row['image_path']))[0]\n    target_name = row['target_name'] if 'target_name' in row else row['sample_id'].split('__')[1]\n\n    pred_row = preds_wide[preds_wide['image_id'] == image_id].iloc[0]\n    target_value = pred_row[target_name]\n\n    submission_rows.append({\n        'sample_id': row['sample_id'],\n        'target': target_value\n    })\n\nsubmission = pd.DataFrame(submission_rows)\n\n# 8. Preservar orden original de test_df\nsubmission = test_df_full[['sample_id']].merge(\n    submission,\n    on='sample_id',\n    how='left'\n)\nsubmission['target'] = submission['target'].fillna(0.0)\n\nsubmission.to_csv(f\"{WORK_DIR}/submission.csv\", index=False)\n</code></pre>",
      "rawMarkdown": "![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F23653385%2F2ff1f0c262420a61cf57675d8886be2c%2FCaptura%20de%20pantalla%20de%202026-01-14%2008-43-25.png?generation=1768398472273019&alt=media)   It only uses unique_image_paths (1 image).\nIt creates pred_map with image_id as the key.\nIt iterates over test_df[\"image_id\"], but test_df has multiple rows per image.\nIt does not preserve the order or merge correctly with the original test_df.  code;\n\n```python\n# 1. Cargar test.csv completo\ntest_df_full = pd.read_csv(CSV_PATH)\n\n# 2. Crear DataFrame wide con predicciones (una fila por imagen)\npreds_wide = pd.DataFrame({\n    'image_id': test_ids,\n    'Dry_Clover_g': calibrated_preds[:, 0],\n    'Dry_Dead_g': calibrated_preds[:, 1],\n    'Dry_Green_g': calibrated_preds[:, 2],\n    'Dry_Total_g': calibrated_preds[:, 3],  # Ya calculado antes\n    'GDM_g': calibrated_preds[:, 4]  # Ya calculado antes\n})\n\n# 3. Extraer image_id del test_df_full para hacer merge\ntest_df_full['image_id'] = test_df_full['image_path'].apply(\n    lambda x: os.path.splitext(os.path.basename(x))[0]\n)\n\n# 4. Merge con predicciones\ntest_df_with_preds = test_df_full.merge(\n    preds_wide,\n    on='image_id',\n    how='left'\n)\n\n# 5. Crear submission usando melt \ntarget_cols = ['Dry_Green_g', 'Dry_Dead_g', 'Dry_Clover_g', 'GDM_g', 'Dry_Total_g']\nsubmission = test_df_with_preds.melt(\n    id_vars=['sample_id'],\n    value_vars=target_cols,\n    var_name='target_name',\n    value_name='target'\n)\n\n# 6. Filtrar solo las filas donde target_name coincide\nsubmission = submission[\n    submission['target_name'] == submission.apply(\n        lambda row: row['sample_id'].split('__')[1] if '__' in row['sample_id'] else None,\n        axis=1\n    )\n]\n\n# 7. O mejor aún, hacer merge directo:\nsubmission_rows = []\nfor _, row in test_df_full.iterrows():\n    image_id = os.path.splitext(os.path.basename(row['image_path']))[0]\n    target_name = row['target_name'] if 'target_name' in row else row['sample_id'].split('__')[1]\n    \n    pred_row = preds_wide[preds_wide['image_id'] == image_id].iloc[0]\n    target_value = pred_row[target_name]\n    \n    submission_rows.append({\n        'sample_id': row['sample_id'],\n        'target': target_value\n    })\n\nsubmission = pd.DataFrame(submission_rows)\n\n# 8. Preservar orden original de test_df\nsubmission = test_df_full[['sample_id']].merge(\n    submission,\n    on='sample_id',\n    how='left'\n)\nsubmission['target'] = submission['target'].fillna(0.0)\n\nsubmission.to_csv(f\"{WORK_DIR}/submission.csv\", index=False)\n```",
      "votes": null
    },
    {
      "id": "3391256",
      "postDate": "01/14/2026 16:18:08",
      "content": "<p>Thank you Rodriguez.</p>",
      "rawMarkdown": "Thank you Rodriguez.",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 3391151,
      "author_name": "giovannyrodrguez",
      "author_url": "",
      "post_date": "01/14/2026 13:48:50",
      "content": "<p><img src=\"https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F23653385%2F2ff1f0c262420a61cf57675d8886be2c%2FCaptura%20de%20pantalla%20de%202026-01-14%2008-43-25.png?generation=1768398472273019&amp;alt=media\" alt=\"\">   It only uses unique_image_paths (1 image).\nIt creates pred_map with image_id as the key.\nIt iterates over test_df[\"image_id\"], but test_df has multiple rows per image.\nIt does not preserve the order or merge correctly with the original test_df.  code;</p>\n<pre><code># 1. Cargar test.csv completo\ntest_df_full = pd.read_csv(CSV_PATH)\n\n# 2. Crear DataFrame wide con predicciones (una fila por imagen)\npreds_wide = pd.DataFrame({\n    'image_id': test_ids,\n    'Dry_Clover_g': calibrated_preds[:, 0],\n    'Dry_Dead_g': calibrated_preds[:, 1],\n    'Dry_Green_g': calibrated_preds[:, 2],\n    'Dry_Total_g': calibrated_preds[:, 3],  # Ya calculado antes\n    'GDM_g': calibrated_preds[:, 4]  # Ya calculado antes\n})\n\n# 3. Extraer image_id del test_df_full para hacer merge\ntest_df_full['image_id'] = test_df_full['image_path'].apply(\n    lambda x: os.path.splitext(os.path.basename(x))[0]\n)\n\n# 4. Merge con predicciones\ntest_df_with_preds = test_df_full.merge(\n    preds_wide,\n    on='image_id',\n    how='left'\n)\n\n# 5. Crear submission usando melt \ntarget_cols = ['Dry_Green_g', 'Dry_Dead_g', 'Dry_Clover_g', 'GDM_g', 'Dry_Total_g']\nsubmission = test_df_with_preds.melt(\n    id_vars=['sample_id'],\n    value_vars=target_cols,\n    var_name='target_name',\n    value_name='target'\n)\n\n# 6. Filtrar solo las filas donde target_name coincide\nsubmission = submission[\n    submission['target_name'] == submission.apply(\n        lambda row: row['sample_id'].split('__')[1] if '__' in row['sample_id'] else None,\n        axis=1\n    )\n]\n\n# 7. O mejor aún, hacer merge directo:\nsubmission_rows = []\nfor _, row in test_df_full.iterrows():\n    image_id = os.path.splitext(os.path.basename(row['image_path']))[0]\n    target_name = row['target_name'] if 'target_name' in row else row['sample_id'].split('__')[1]\n\n    pred_row = preds_wide[preds_wide['image_id'] == image_id].iloc[0]\n    target_value = pred_row[target_name]\n\n    submission_rows.append({\n        'sample_id': row['sample_id'],\n        'target': target_value\n    })\n\nsubmission = pd.DataFrame(submission_rows)\n\n# 8. Preservar orden original de test_df\nsubmission = test_df_full[['sample_id']].merge(\n    submission,\n    on='sample_id',\n    how='left'\n)\nsubmission['target'] = submission['target'].fillna(0.0)\n\nsubmission.to_csv(f\"{WORK_DIR}/submission.csv\", index=False)\n</code></pre>",
      "votes": null,
      "replies": [
        {
          "id": 3391256,
          "author_name": "jordan1980",
          "author_url": "",
          "post_date": "01/14/2026 16:18:08",
          "content": "<p>Thank you Rodriguez.</p>",
          "votes": null,
          "replies": []
        }
      ]
    }
  ],
  "raw_markdown_by_id": {
    "3391077": "Hello everyone,\n\ncan someone please explain why this [Notebook](https://www.kaggle.com/code/jordan1980/dino-vitl4-cls-single-fold) is raising error only when I submit.\nError is \"scoring error\".\n\nThanks",
    "3391151": "![](https://www.googleapis.com/download/storage/v1/b/kaggle-forum-message-attachments/o/inbox%2F23653385%2F2ff1f0c262420a61cf57675d8886be2c%2FCaptura%20de%20pantalla%20de%202026-01-14%2008-43-25.png?generation=1768398472273019&alt=media)   It only uses unique_image_paths (1 image).\nIt creates pred_map with image_id as the key.\nIt iterates over test_df[\"image_id\"], but test_df has multiple rows per image.\nIt does not preserve the order or merge correctly with the original test_df.  code;\n\n```python\n# 1. Cargar test.csv completo\ntest_df_full = pd.read_csv(CSV_PATH)\n\n# 2. Crear DataFrame wide con predicciones (una fila por imagen)\npreds_wide = pd.DataFrame({\n    'image_id': test_ids,\n    'Dry_Clover_g': calibrated_preds[:, 0],\n    'Dry_Dead_g': calibrated_preds[:, 1],\n    'Dry_Green_g': calibrated_preds[:, 2],\n    'Dry_Total_g': calibrated_preds[:, 3],  # Ya calculado antes\n    'GDM_g': calibrated_preds[:, 4]  # Ya calculado antes\n})\n\n# 3. Extraer image_id del test_df_full para hacer merge\ntest_df_full['image_id'] = test_df_full['image_path'].apply(\n    lambda x: os.path.splitext(os.path.basename(x))[0]\n)\n\n# 4. Merge con predicciones\ntest_df_with_preds = test_df_full.merge(\n    preds_wide,\n    on='image_id',\n    how='left'\n)\n\n# 5. Crear submission usando melt \ntarget_cols = ['Dry_Green_g', 'Dry_Dead_g', 'Dry_Clover_g', 'GDM_g', 'Dry_Total_g']\nsubmission = test_df_with_preds.melt(\n    id_vars=['sample_id'],\n    value_vars=target_cols,\n    var_name='target_name',\n    value_name='target'\n)\n\n# 6. Filtrar solo las filas donde target_name coincide\nsubmission = submission[\n    submission['target_name'] == submission.apply(\n        lambda row: row['sample_id'].split('__')[1] if '__' in row['sample_id'] else None,\n        axis=1\n    )\n]\n\n# 7. O mejor aún, hacer merge directo:\nsubmission_rows = []\nfor _, row in test_df_full.iterrows():\n    image_id = os.path.splitext(os.path.basename(row['image_path']))[0]\n    target_name = row['target_name'] if 'target_name' in row else row['sample_id'].split('__')[1]\n    \n    pred_row = preds_wide[preds_wide['image_id'] == image_id].iloc[0]\n    target_value = pred_row[target_name]\n    \n    submission_rows.append({\n        'sample_id': row['sample_id'],\n        'target': target_value\n    })\n\nsubmission = pd.DataFrame(submission_rows)\n\n# 8. Preservar orden original de test_df\nsubmission = test_df_full[['sample_id']].merge(\n    submission,\n    on='sample_id',\n    how='left'\n)\nsubmission['target'] = submission['target'].fillna(0.0)\n\nsubmission.to_csv(f\"{WORK_DIR}/submission.csv\", index=False)\n```",
    "3391256": "Thank you Rodriguez."
  },
  "source": "meta"
}