{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.11.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":112509,"databundleVersionId":14254895,"sourceType":"competition"}],"dockerImageVersionId":31153,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# 🌱 CSIRO Img2Bio: Simple Statistical Predictions\n\n### 🗂️ Data Exploration\n- **Train.csv** contains metadata: sampling date, state, species, NDVI, height, target values.\n- **Test.csv** contains sample IDs, image paths, and target names (no target values).\n- Targets include:\n  - 🌿 Dry_Clover_g\n  - 🍂 Dry_Dead_g\n  - 🌱 Dry_Green_g\n  - 🌾 Dry_Total_g\n  - 🌍 GDM_g\n\n### 📈 Distribution Analysis\n- Histograms plotted for each target class.\n- Helps visualize spread and skewness of biomass values.\n- Median values computed per target class:\n  - Dry_Clover_g → **1.42**\n  - Dry_Dead_g → **7.98**\n  - Dry_Green_g → **20.8**\n  - Dry_Total_g → **40.3**\n  - GDM_g → **27.1**\n\n### 🧮 Naive Statistical Prediction\n- **Assumption tested:** Predict test targets using **median of training distribution** for each class.\n- This is a **baseline approach** — simple, naive, but important to benchmark.\n- Submission created with these median values mapped to test samples.\n\n### 📑 Results\n- Public score: **0.23**\n- Best score: **0.23**\n- Confirms that even naive assumptions (like median prediction) provide a baseline to compare against more complex models.\n\n### ✅ Key Takeaway\n- Testing **simple assumptions** (even naive ones) is crucial:\n  - Provides a baseline.\n  - Highlights data distribution properties.\n  - Ensures reproducibility and transparency before moving to advanced ML models.\n\n---\n\n✨ **Lesson:** Always start simple — even median-based predictions can reveal important insights and set a benchmark for improvement.\n","metadata":{}},{"cell_type":"code","source":"import pandas as pd\nimport warnings\n\nwarnings.simplefilter(action='ignore', category=FutureWarning)\nPATH_DATA = \"/kaggle/input/csiro-biomass\"","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"_kg_hide-input":true,"execution":{"iopub.status.busy":"2025-11-01T08:23:52.493613Z","iopub.execute_input":"2025-11-01T08:23:52.493792Z","iopub.status.idle":"2025-11-01T08:23:54.511591Z","shell.execute_reply.started":"2025-11-01T08:23:52.493776Z","shell.execute_reply":"2025-11-01T08:23:54.510689Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Browse the metadata","metadata":{}},{"cell_type":"code","source":"# You might need to adjust the file path based on the actual extracted files.\ntest_df = pd.read_csv(f'{PATH_DATA}/test.csv')\ndisplay(test_df.head())","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-01T08:23:54.513346Z","iopub.execute_input":"2025-11-01T08:23:54.513748Z","iopub.status.idle":"2025-11-01T08:23:54.554367Z","shell.execute_reply.started":"2025-11-01T08:23:54.513725Z","shell.execute_reply":"2025-11-01T08:23:54.553433Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# You might need to adjust the file path based on the actual extracted files.\ntrain_df = pd.read_csv(f'{PATH_DATA}/train.csv')\ndisplay(train_df.head())","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-01T08:23:54.555287Z","iopub.execute_input":"2025-11-01T08:23:54.555622Z","iopub.status.idle":"2025-11-01T08:23:54.580998Z","shell.execute_reply.started":"2025-11-01T08:23:54.555600Z","shell.execute_reply":"2025-11-01T08:23:54.580100Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Dictribution\n\nPlot the distribution of the `target` column for each `target_name` class in the `train` table.","metadata":{}},{"cell_type":"code","source":"import matplotlib.pyplot as plt\nimport seaborn as sns\n\ngrouped_train_data = train_df.groupby('target_name')\n\nplt.figure(figsize=(12, 8))\nfor target_name, group_data in grouped_train_data:\n    sns.histplot(data=group_data, x='target', kde=True, label=target_name)\n\nplt.title('Distribution of Target for Each Target Name Class')\nplt.xlabel('Target')\nplt.ylabel('Frequency')\nplt.legend(title='Target Name')\nplt.grid(True) # Added grid here\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-01T08:23:54.581820Z","iopub.execute_input":"2025-11-01T08:23:54.582080Z","iopub.status.idle":"2025-11-01T08:23:56.929859Z","shell.execute_reply.started":"2025-11-01T08:23:54.582061Z","shell.execute_reply":"2025-11-01T08:23:56.928672Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"target_median_lookup = train_df.groupby('target_name')['target'].median().to_dict()\nprint(target_median_lookup)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-01T08:23:56.931101Z","iopub.execute_input":"2025-11-01T08:23:56.931575Z","iopub.status.idle":"2025-11-01T08:23:56.942508Z","shell.execute_reply.started":"2025-11-01T08:23:56.931494Z","shell.execute_reply":"2025-11-01T08:23:56.941336Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Stat prediction","metadata":{}},{"cell_type":"code","source":"test_df['target'] = test_df['target_name'].map(target_median_lookup)\ndisplay(test_df.head())","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-01T08:23:56.943664Z","iopub.execute_input":"2025-11-01T08:23:56.944040Z","iopub.status.idle":"2025-11-01T08:23:56.968533Z","shell.execute_reply.started":"2025-11-01T08:23:56.944011Z","shell.execute_reply":"2025-11-01T08:23:56.967646Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Create a submission dataframe with 'sample_id' and 'target' columns\nsubmission_df = test_df[['sample_id', 'target']]\n\n# Save the submission dataframe to a CSV file\nsubmission_df.to_csv('submission.csv', index=False)\n\nprint(\"Submission file 'submission.csv' created successfully.\")\n!head submission.csv","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2025-11-01T08:23:56.970858Z","iopub.execute_input":"2025-11-01T08:23:56.971253Z","iopub.status.idle":"2025-11-01T08:23:57.115199Z","shell.execute_reply.started":"2025-11-01T08:23:56.971225Z","shell.execute_reply":"2025-11-01T08:23:57.114052Z"}},"outputs":[],"execution_count":null}]}