{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":81933,"databundleVersionId":9643020,"sourceType":"competition"}],"dockerImageVersionId":30822,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Problem\n\n<div style=\"border-radius:12px;  border:2px solid blue; padding: 15px; background-color: #f6f5f5; font-size:120%; text-align:left\">\n    \n- The main aim of the competition is to use our training data to predict **`sii`** or **`Severity Impairment Index`**, which is a standard measure of Problematic Internet Use (PIU).\n- The training data comprises 3,960 records of children and young people with 81 columns (not including the ID column).\n- Of particular importance in the data are results of the **`Parent-Child Internet Addiction Test (PCIAT)`**.","metadata":{}},{"cell_type":"markdown","source":"# <p style=\"padding:15px; background-color:#81BFDA; font-family:arial; font-weight:bold; color:white; font-size:100%; letter-spacing: 2px; text-align:left; border-radius: 10px 10px\"> I. Import necessary libraries and Read data from input files</p>","metadata":{"execution":{"iopub.status.busy":"2024-12-19T03:56:55.812501Z","iopub.execute_input":"2024-12-19T03:56:55.812861Z","iopub.status.idle":"2024-12-19T03:56:55.816743Z","shell.execute_reply.started":"2024-12-19T03:56:55.812834Z","shell.execute_reply":"2024-12-19T03:56:55.815808Z"}}},{"cell_type":"code","source":"import numpy as np, pandas as pd, os\nimport seaborn as sns\nfrom sklearn.model_selection import cross_val_score, StratifiedKFold\nimport xgboost as xgb\nimport plotly.express as px, seaborn as sns, matplotlib.pyplot as plt\nsns.set_style('darkgrid')\nfrom sklearn.metrics import make_scorer, cohen_kappa_score\nimport eli5\nfrom eli5.sklearn import PermutationImportance\nimport warnings\nwarnings.simplefilter('ignore')","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:06:36.626340Z","iopub.execute_input":"2024-12-21T06:06:36.626753Z","iopub.status.idle":"2024-12-21T06:06:36.632931Z","shell.execute_reply.started":"2024-12-21T06:06:36.626720Z","shell.execute_reply":"2024-12-21T06:06:36.631625Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train_df = pd.read_csv(\"/kaggle/input/child-mind-institute-problematic-internet-use/train.csv\")\ntest_df = pd.read_csv(\"/kaggle/input/child-mind-institute-problematic-internet-use/test.csv\")\nsample = pd.read_csv(\"/kaggle/input/child-mind-institute-problematic-internet-use/sample_submission.csv\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:06:36.640197Z","iopub.execute_input":"2024-12-21T06:06:36.640525Z","iopub.status.idle":"2024-12-21T06:06:36.697445Z","shell.execute_reply.started":"2024-12-21T06:06:36.640497Z","shell.execute_reply":"2024-12-21T06:06:36.696309Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# <p style=\"padding:15px; background-color:#81BFDA; font-family:arial; font-weight:bold; color:white; font-size:100%; letter-spacing: 2px; text-align:left; border-radius: 10px 10px\">II. Exploratory Data Analysis</p>","metadata":{"execution":{"iopub.status.busy":"2024-12-19T03:58:28.352279Z","iopub.execute_input":"2024-12-19T03:58:28.352616Z","iopub.status.idle":"2024-12-19T03:58:28.356621Z","shell.execute_reply.started":"2024-12-19T03:58:28.352591Z","shell.execute_reply":"2024-12-19T03:58:28.355409Z"}}},{"cell_type":"code","source":"train_df.head()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:06:36.699175Z","iopub.execute_input":"2024-12-21T06:06:36.699549Z","iopub.status.idle":"2024-12-21T06:06:36.726299Z","shell.execute_reply.started":"2024-12-21T06:06:36.699504Z","shell.execute_reply":"2024-12-21T06:06:36.725090Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Data Type Transformation","metadata":{}},{"cell_type":"markdown","source":"- Transform different data types into Numerical(float, int), Categorical or String.","metadata":{}},{"cell_type":"code","source":"def convert_dtype(df, cols, dtype):\n    for col in cols:\n        if col in df.columns:\n            df[col] = df[col].astype(dtype)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:06:36.728235Z","iopub.execute_input":"2024-12-21T06:06:36.728531Z","iopub.status.idle":"2024-12-21T06:06:36.740564Z","shell.execute_reply.started":"2024-12-21T06:06:36.728492Z","shell.execute_reply":"2024-12-21T06:06:36.739660Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"float_cols = [\"Basic_Demos-Age\",\"Physical-BMI\",\"Physical-Height\",\"Physical-Weight\",\"FGC-FGC_GSND\",\"FGC-FGC_GSD\",\"FGC-FGC_SRL\",\"FGC-FGC_SRR\",\"BIA-BIA_BMC\",\n           \"BIA-BIA_BMI\",\"BIA-BIA_BMR\",\"BIA-BIA_DEE\",\"BIA-BIA_ECW\",\"BIA-BIA_FFM\",\"BIA-BIA_FFMI\",\"BIA-BIA_FMI\",\"BIA-BIA_Fat\",\"BIA-BIA_ICW\",\"BIA-BIA_LDM\",\n           \"BIA-BIA_LST\",\"BIA-BIA_SMM\",\"BIA-BIA_TBW\",\"PAQ_A-PAQ_A_Total\",\"PAQ_C-PAQ_C_Total\",\"CGAS-CGAS_Score\",\"Physical-Waist_Circumference\",\"Physical-Diastolic_BP\",\n           \"Physical-HeartRate\",\"Physical-Systolic_BP\",\"Fitness_Endurance-Max_Stage\",\"Fitness_Endurance-Time_Mins\",\"Fitness_Endurance-Time_Sec\",\"FGC-FGC_CU\",\"FGC-FGC_PU\",\n           \"FGC-FGC_TL\",\"PCIAT-PCIAT_Total\",\"SDS-SDS_Total_Raw\",\"SDS-SDS_Total_T\"]\n\ncategory_cols = [\"Basic_Demos-Sex\",\"FGC-FGC_CU_Zone\",\"FGC-FGC_GSND_Zone\",\"FGC-FGC_GSD_Zone\",\"FGC-FGC_PU_Zone\",\"FGC-FGC_SRL_Zone\",\"FGC-FGC_SRR_Zone\",\"FGC-FGC_TL_Zone\",\n            \"BIA-BIA_Activity_Level_num\",\"BIA-BIA_Frame_num\",\"PCIAT-PCIAT_01\",\"PCIAT-PCIAT_02\",\"PCIAT-PCIAT_03\",\"PCIAT-PCIAT_04\",\"PCIAT-PCIAT_05\",\"PCIAT-PCIAT_06\",\n            \"PCIAT-PCIAT_07\",\"PCIAT-PCIAT_08\",\"PCIAT-PCIAT_09\",\"PCIAT-PCIAT_10\",\"PCIAT-PCIAT_11\",\"PCIAT-PCIAT_12\",\"PCIAT-PCIAT_13\",\"PCIAT-PCIAT_14\",\"PCIAT-PCIAT_15\",\n            \"PCIAT-PCIAT_16\",\"PCIAT-PCIAT_17\",\"PCIAT-PCIAT_18\",\"PCIAT-PCIAT_19\",\"PCIAT-PCIAT_20\",\n            \"Basic_Demos-Enroll_Season\",\"CGAS-Season\",\"Physical-Season\",\"Fitness_Endurance-Season\",\"FGC-Season\",\"BIA-Season\",\"PAQ_A-Season\",\"PAQ_C-Season\",\"PCIAT-Season\",\"SDS-Season\",\"PreInt_EduHx-Season\",\"PreInt_EduHx-computerinternet_hoursday\"]\n\nstring_cols = [\"id\"]\n\nconvert_dtype(train_df, float_cols, 'float64')\nconvert_dtype(train_df, category_cols, 'category')\nconvert_dtype(train_df, string_cols, 'string')\n\nconvert_dtype(test_df, float_cols, 'float64')\nconvert_dtype(test_df, category_cols, 'category')\nconvert_dtype(test_df, string_cols, 'string')\n\ntrain_df.info()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:06:36.741740Z","iopub.execute_input":"2024-12-21T06:06:36.742066Z","iopub.status.idle":"2024-12-21T06:06:36.839233Z","shell.execute_reply.started":"2024-12-21T06:06:36.742041Z","shell.execute_reply":"2024-12-21T06:06:36.838123Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Evaluation of Fields containing missing values","metadata":{}},{"cell_type":"code","source":"# Display missing function\ndef display_missing(df, feature_cols):\n    n_rows = df.shape[0]\n    for col in feature_cols:\n        if col in df.columns:\n            missing_count = df[col].isnull().sum()\n            if missing_count > 0:\n                print(f\"{col} has {missing_count} missing values, {missing_count*100/n_rows:.2f}% missing percentage.\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:06:36.840454Z","iopub.execute_input":"2024-12-21T06:06:36.840787Z","iopub.status.idle":"2024-12-21T06:06:36.846002Z","shell.execute_reply.started":"2024-12-21T06:06:36.840754Z","shell.execute_reply":"2024-12-21T06:06:36.844996Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"n_rows = train_df[\"id\"].shape[0]\n\n# Calculating the number of missing values and the missing percentage for each column\nmissing_data = train_df.isnull().sum()\n\n# Calculating the missing percentage \nmissing_percentage = (missing_data / len(train_df)) * 100\nmissing_percentage = missing_percentage.round(2)\n\n# Create a DataFrame describing all the missing values\nmissing_df = pd.DataFrame({\n    'Feature': missing_data.index,\n    'Missing Count': missing_data.values,\n    'Missing Percentage (%)': missing_percentage.values\n})\n\nstyled_df = missing_df.style.background_gradient(subset=['Missing Count','Missing Percentage (%)'], cmap='YlOrRd')\nstyled_df.format({'Missing Percentage (%)': '{:.2f}%'})","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:06:36.847214Z","iopub.execute_input":"2024-12-21T06:06:36.847596Z","iopub.status.idle":"2024-12-21T06:06:36.898169Z","shell.execute_reply.started":"2024-12-21T06:06:36.847554Z","shell.execute_reply":"2024-12-21T06:06:36.897030Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"**Note:** *A greate number of columns having missing values percentage larger than 50%*","metadata":{}},{"cell_type":"markdown","source":"## Detailed Analysis","metadata":{}},{"cell_type":"code","source":"def calculate_stats(data, columns):\n    if isinstance(columns, str):\n        columns = [columns]\n\n    stats = []\n    for col in columns:\n        if data[col].dtype in ['object', 'category']:\n            counts = data[col].value_counts(dropna=False, sort=False)\n            percents = data[col].value_counts(normalize=True, dropna=False, sort=False) * 100\n            formatted = counts.astype(str) + ' (' + percents.round(2).astype(str) + '%)'\n            stats_col = pd.DataFrame({'count (%)': formatted})\n            stats.append(stats_col)\n        else:\n            stats_col = data[col].describe().to_frame().transpose()\n            stats_col['missing'] = data[col].isnull().sum()\n            stats_col.index.name = col\n            stats.append(stats_col)\n\n    return pd.concat(stats, axis=0)\n\n\ntrain_cols = set(train_df.columns)\ntest_cols = set(test_df.columns)\ncolumns_not_in_test = sorted(list(train_cols - test_cols))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:06:36.900679Z","iopub.execute_input":"2024-12-21T06:06:36.901121Z","iopub.status.idle":"2024-12-21T06:06:36.909247Z","shell.execute_reply.started":"2024-12-21T06:06:36.901078Z","shell.execute_reply":"2024-12-21T06:06:36.908124Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### 1. Analyzing the relationship between`sii` and `PCIAT-PCIAT_Total`","metadata":{}},{"cell_type":"markdown","source":"#### General Description\n- Field `sii` is described as a standard measure of problematic internet use, which is divided into 4 categories:\n\n  `0` : `None`\n  \n  `1` : `Mild`\n  \n  `2` : `Moderate`\n  \n  `3` : `Severe`\n\n- `PCIAT-PCIAT_Total`: 20-item scale that measures characteristics and behaviors associated with compulsive use of the Internet including compulsivity, escapism, and dependency. Each question has 5 selections ranged from 1 to 5 to demonstrate the frequency of different behaviors.\n\n    ","metadata":{}},{"cell_type":"code","source":"fig, ax = plt.subplots(1, 2, figsize = (2 * 5.5, 1 * 4.5))\nsns.countplot(data=train_df, x='sii', palette='flare', ax=ax[0])\nsns.histplot(data=train_df, x='PCIAT-PCIAT_Total', bins=15, kde=True, palette='flare', ax=ax[1])\n\nplt.tight_layout()\nplt.show()\n\ntrain_df[\"sii\"].value_counts(normalize = True).to_frame()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:06:36.910938Z","iopub.execute_input":"2024-12-21T06:06:36.911235Z","iopub.status.idle":"2024-12-21T06:06:37.552207Z","shell.execute_reply.started":"2024-12-21T06:06:36.911208Z","shell.execute_reply":"2024-12-21T06:06:37.550956Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"**Note:** *By observing the chart, we can tell that the distribution of `sii` is uneven as there is 14% for the value '2' and only 1.2% for value '3'*","metadata":{}},{"cell_type":"markdown","source":"#### The relationship between 2 fields\n\n- Index `sii` is derived from `PICAT-PCIAT_Total` with 4 levels:\n\n    Severity Impairment Index: 0-30 = `None`; 31-49 = `Mild`; 50-79 = `Moderate`; 80-100 = `Severe`\n\n- Let's create a function converting `PICAT-PCIAT_Total` to `sii` and evaluate the correlation between 2 fields.","metadata":{},"attachments":{"04595d03-d4a1-4053-8cb0-5daa63977992.png":{"image/png":"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"},"9813e29f-1e78-407f-ab46-8baca78626ea.png":{"image/png":"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"},"df85abd2-c1ee-4a3b-b9ae-3f8e7475c098.png":{"image/png":"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"},"974c2bab-1a87-4173-945b-9741ef207c07.png":{"image/png":"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"}}},{"cell_type":"code","source":"def pciat_to_sii(pciat_total):\n    # Applying conditions to classify the SII index\n    if pciat_total <= 30:\n        return 0\n    elif 30 < pciat_total < 50:\n        return 1\n    elif 50 <= pciat_total < 80:\n        return 2\n    elif pciat_total >= 80:\n        return 3","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:06:37.553572Z","iopub.execute_input":"2024-12-21T06:06:37.554035Z","iopub.status.idle":"2024-12-21T06:06:37.559974Z","shell.execute_reply.started":"2024-12-21T06:06:37.553989Z","shell.execute_reply":"2024-12-21T06:06:37.558671Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"sns.histplot(data=train_df, x='PCIAT-PCIAT_Total', hue='sii', bins=20, kde=True, palette='coolwarm')\nplt.show()\n\ndisplay_missing(train_df, ['PCIAT-PCIAT_Total', 'sii'])","metadata":{"trusted":true,"_kg_hide-input":false,"execution":{"iopub.status.busy":"2024-12-21T06:06:37.561249Z","iopub.execute_input":"2024-12-21T06:06:37.561613Z","iopub.status.idle":"2024-12-21T06:06:38.136624Z","shell.execute_reply.started":"2024-12-21T06:06:37.561577Z","shell.execute_reply":"2024-12-21T06:06:38.135295Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"## Analyzing the difference\ncondition_null = train_df[(train_df['sii'].isnull() & ~train_df['PCIAT-PCIAT_Total'].isnull()) | \\\n                 (~train_df['sii'].isnull() & train_df['PCIAT-PCIAT_Total'].isnull())]\n\n\ncondition_convert = train_df[~train_df['sii'].isnull() & ~train_df['PCIAT-PCIAT_Total'].isnull() & \\\n                    (train_df['sii'] != train_df['PCIAT-PCIAT_Total'].apply(pciat_to_sii))]\nprint(\"DIFFERENCE\")\nprint(f\"Null: {condition_null.shape[0]}\")\nprint(f\"Convert: {condition_convert.shape[0]}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:06:38.138184Z","iopub.execute_input":"2024-12-21T06:06:38.138604Z","iopub.status.idle":"2024-12-21T06:06:38.168341Z","shell.execute_reply.started":"2024-12-21T06:06:38.138561Z","shell.execute_reply":"2024-12-21T06:06:38.167042Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"**Note:** Witnessing the difference of the number of missing values, we can infer the equivalence of missing data between `sii` and `PCIAT-PCIAT_Total`. In addition, converting `PCIAT-PCIAT_Total` to `sii` has no problems.\n\n  **Therefore, we can conclude that 2 fields `PCIAT-PCIAT_Total` and `sii` are completely equivalent and they both play a significant role in training ML models**.","metadata":{}},{"cell_type":"markdown","source":"### 2. Age","metadata":{}},{"cell_type":"code","source":"train_df['Age Group'] = pd.cut(\n    train_df['Basic_Demos-Age'],\n    bins=[4, 12, 18, 22],\n    labels=['Children (5-12)', 'Adolescents (13-18)', 'Adults (19-22)']\n)\ncalculate_stats(train_df, 'Age Group')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:06:38.169577Z","iopub.execute_input":"2024-12-21T06:06:38.169930Z","iopub.status.idle":"2024-12-21T06:06:38.199685Z","shell.execute_reply.started":"2024-12-21T06:06:38.169901Z","shell.execute_reply":"2024-12-21T06:06:38.198437Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"stats = train_df.groupby(['Age Group', 'sii'], observed=False).size().unstack(fill_value=0)\nfig, axes = plt.subplots(1, len(stats), figsize=(18, 5))\n\nfor i, age_group in enumerate(stats.index):\n    group_counts = stats.loc[age_group] / stats.loc[age_group].sum()\n    axes[i].pie(\n        group_counts, labels=group_counts.index, autopct='%1.1f%%',\n        startangle=90, colors=sns.color_palette(\"Set3\"),\n        labeldistance=1.05, pctdistance=0.80\n    )\n    axes[i].set_title(f'SII Distribution for {age_group}')\n    axes[i].axis('equal')\n\nplt.tight_layout()\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:06:38.201205Z","iopub.execute_input":"2024-12-21T06:06:38.201604Z","iopub.status.idle":"2024-12-21T06:06:38.708079Z","shell.execute_reply.started":"2024-12-21T06:06:38.201566Z","shell.execute_reply":"2024-12-21T06:06:38.706719Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### 3. GCAS-CGAS_Score","metadata":{}},{"cell_type":"markdown","source":"- The charts illustrate the distribution of the Severe Impairment Index across three age groups, indicating that this level increases proportionally with the growth of the age groups.","metadata":{}},{"cell_type":"code","source":"plt.figure(figsize=(12, 5))\n\n# CGAS-Season\nplt.subplot(1, 2, 1)\ncgas_season_counts = train_df['CGAS-Season'].value_counts(normalize=True)\nplt.pie(\n    cgas_season_counts, \n    labels=cgas_season_counts.index, \n    autopct='%1.1f%%', \n    startangle=90, \n    colors=sns.color_palette(\"Set3\")\n)\nplt.title('CGAS-Season')\nplt.axis('equal')\n\n# CGAS-CGAS_Score without outliers (score == 999)\nplt.subplot(1, 2, 2)\nsns.histplot(\n    train_df['CGAS-CGAS_Score'].dropna(),\n     kde=True\n)\nplt.title('CGAS-CGAS_Score')\nplt.xlabel('CGAS Score')\nplt.ylabel('Count')\nplt.xlim(0, 100)\n\nplt.tight_layout()\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:06:38.713122Z","iopub.execute_input":"2024-12-21T06:06:38.713483Z","iopub.status.idle":"2024-12-21T06:06:39.852553Z","shell.execute_reply.started":"2024-12-21T06:06:38.713451Z","shell.execute_reply":"2024-12-21T06:06:39.851081Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"bins = np.arange(0, 101, 10)\nlabels = [\n    \"1-10: Needs constant supervision (24 hour care)\",\n    \"11-20: Needs considerable supervision\",\n    \"21-30: Unable to function in almost all areas\",\n    \"31-40: Major impairment in functioning in several areas\",\n    \"41-50: Moderate degree of interference in functioning\",\n    \"51-60: Variable functioning with sporadic difficulties\",\n    \"61-70: Some difficulty in a single area\",\n    \"71-80: No more than slight impairment in functioning\",\n    \"81-90: Good functioning in all areas\",\n    \"91-100: Superior functioning\"\n]\n\ntrain_df['CGAS_Score_Bin'] = pd.cut(\n    train_df['CGAS-CGAS_Score'], bins=bins, labels=labels\n)\n\ncounts = train_df['CGAS_Score_Bin'].value_counts().reindex(labels)\nprop = (counts / counts.sum() * 100).round(1)\ncount_prop_labels = counts.astype(str) + \" (\" + prop.astype(str) + \"%)\"\n\nplt.figure(figsize=(18, 6))\nbars = plt.barh(labels, counts)\nplt.xlabel('Count')\nplt.title('CGAS Score Distribution')\nfor bar, label in zip(bars, count_prop_labels):\n    plt.text(\n        bar.get_width(), bar.get_y() + bar.get_height() / 2, label, va='center'\n    )\n\nplt.gca().invert_yaxis()\nplt.tight_layout()\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:06:39.854632Z","iopub.execute_input":"2024-12-21T06:06:39.855036Z","iopub.status.idle":"2024-12-21T06:06:40.422639Z","shell.execute_reply.started":"2024-12-21T06:06:39.855004Z","shell.execute_reply":"2024-12-21T06:06:40.421348Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"calculate_stats(train_df, 'CGAS-CGAS_Score')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:06:40.423647Z","iopub.execute_input":"2024-12-21T06:06:40.423971Z","iopub.status.idle":"2024-12-21T06:06:40.442169Z","shell.execute_reply.started":"2024-12-21T06:06:40.423941Z","shell.execute_reply":"2024-12-21T06:06:40.441175Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"- The charts shows that the distribution of `CGAS-CGAS_Score` ranges mainly from 50 to 80, indicating that the psychological state of children is quite good. However, there are still a few cases whose score are below 50 which should not be ignored.\n**Note:** *A number of values don't range from 0 to 100 need readjusting*","metadata":{}},{"cell_type":"markdown","source":"### 4. Physic","metadata":{}},{"cell_type":"code","source":"features_physical = [\n    \"Physical-BMI\",\"Physical-Height\",\"Physical-Weight\",\n    \"Physical-Waist_Circumference\", \"Physical-Diastolic_BP\",\"Physical-HeartRate\",\"Physical-Systolic_BP\", \n    \"Physical-Season\"\n]\n\ncols = [\n    \"Physical-BMI\",\"Physical-Height\",\"Physical-Weight\",\n    \"Physical-Waist_Circumference\", \"Physical-Diastolic_BP\",\"Physical-HeartRate\",\"Physical-Systolic_BP\", \n]\n\nplt.figure(figsize=(24, 10))\nn_cols = 4\nn_rows = len(cols) // n_cols + 1\n\nfor i, col in enumerate(cols):\n    plt.subplot(n_rows, n_cols, i + 1)\n    train_df[col].hist(bins=20)\n    plt.title(col)\n\nplt.subplot(n_rows, n_cols, len(cols) + 1)\nseason_counts = train_df['Physical-Season'].value_counts(dropna=False)\nplt.pie(\n    season_counts,\n    labels=season_counts.index,\n    autopct='%1.1f%%',\n    startangle=90,\n    colors=sns.color_palette(\"Set3\")\n)\nplt.title('Physical-Season')\n\nplt.suptitle('Histograms for Physical Measures and Physical-Season Pie Chart', y=1.05)\nplt.tight_layout()\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:06:40.443442Z","iopub.execute_input":"2024-12-21T06:06:40.443866Z","iopub.status.idle":"2024-12-21T06:06:43.426723Z","shell.execute_reply.started":"2024-12-21T06:06:40.443810Z","shell.execute_reply":"2024-12-21T06:06:43.425589Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"correlation_matrix = train_df[cols].corr()\n\nplt.figure(figsize=(5, 5))\nsns.heatmap(correlation_matrix, annot=True, fmt=\".2f\", cmap='flare', cbar=True)\nplt.title(f\"Correlation Matrix Heatmap\", fontsize=16)\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:06:43.428045Z","iopub.execute_input":"2024-12-21T06:06:43.428424Z","iopub.status.idle":"2024-12-21T06:06:43.874647Z","shell.execute_reply.started":"2024-12-21T06:06:43.428387Z","shell.execute_reply":"2024-12-21T06:06:43.873637Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"plt.figure(figsize=(12, 5))\n\n# Diastolic BP vs Heart Rate\nplt.subplot(1, 2, 1)\nsns.scatterplot(x='Physical-Diastolic_BP', y='Physical-HeartRate', data=train_df)\nplt.title('Diastolic BP vs Heart Rate')\nplt.xlabel('Diastolic Blood Pressure (mmHg)')\nplt.ylabel('Heart rate (beats/min)')\n\n# Systolic BP vs Heart Rate\nplt.subplot(1, 2, 2)\nsns.scatterplot(x='Physical-Systolic_BP', y='Physical-HeartRate', data=train_df)\nplt.title('Systolic BP vs Heart Rate')\nplt.xlabel('Systolic Blood Pressure (mmHg)')\nplt.ylabel('Heart rate (beats/min)')\n\nplt.tight_layout()\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:06:43.875774Z","iopub.execute_input":"2024-12-21T06:06:43.876159Z","iopub.status.idle":"2024-12-21T06:06:44.680373Z","shell.execute_reply.started":"2024-12-21T06:06:43.876119Z","shell.execute_reply":"2024-12-21T06:06:44.679238Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"calculate_stats(train_df, cols)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:06:44.681597Z","iopub.execute_input":"2024-12-21T06:06:44.682048Z","iopub.status.idle":"2024-12-21T06:06:44.720318Z","shell.execute_reply.started":"2024-12-21T06:06:44.682006Z","shell.execute_reply":"2024-12-21T06:06:44.719173Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"* The correlation of fields relating to Physics is quite high\n \n**Note:** *The fields in the Physic section have a significant amount of missing values. Some fields, such as `Physical-Waist_Circumference`, may require further processing..*","metadata":{}},{"cell_type":"markdown","source":"### 5. FGC và BIA","metadata":{}},{"cell_type":"code","source":"## Categorical feature\ncols = [\"FGC-FGC_CU_Zone\",\"FGC-FGC_GSND_Zone\",\"FGC-FGC_GSD_Zone\",\"FGC-FGC_PU_Zone\",\"FGC-FGC_SRL_Zone\",\"FGC-FGC_SRR_Zone\",\"FGC-FGC_TL_Zone\",\n            \"BIA-BIA_Activity_Level_num\",\"BIA-BIA_Frame_num\"]\nn_rows = 2\nn_cols = 5\n\nfig, ax = plt.subplots(n_rows, n_cols, figsize = (n_cols * 3.5, n_rows * 4.5))\n\nfor r in range(0, n_rows):\n    for c in range(0, n_cols):\n        i = r*n_cols + c# index to loop through lis cols\n        if i < len(cols):\n            ax_i = ax[r, c]\n            sns.countplot(data = train_df, x = cols[i], hue = \"sii\", palette = \"flare\", ax = ax_i)\n            ax_i.set_title(f'Figure {i+1}: SII vs {cols[i]}')\nplt.tight_layout()\nplt.show()\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:06:44.721478Z","iopub.execute_input":"2024-12-21T06:06:44.721865Z","iopub.status.idle":"2024-12-21T06:06:47.189988Z","shell.execute_reply.started":"2024-12-21T06:06:44.721817Z","shell.execute_reply":"2024-12-21T06:06:47.188839Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"## Numerical features\nnum_features = [\"FGC-FGC_GSND\",\"FGC-FGC_GSD\",\"FGC-FGC_SRL\",\"FGC-FGC_SRR\",\"BIA-BIA_BMC\",\n           \"BIA-BIA_BMI\",\"BIA-BIA_BMR\",\"BIA-BIA_DEE\",\"BIA-BIA_ECW\",\"BIA-BIA_FFM\",\"BIA-BIA_FFMI\",\"BIA-BIA_FMI\",\"BIA-BIA_Fat\",\"BIA-BIA_ICW\",\"BIA-BIA_LDM\",\n           \"BIA-BIA_LST\",\"BIA-BIA_SMM\",\"BIA-BIA_TBW\",\"FGC-FGC_CU\",\"FGC-FGC_PU\",\n           \"FGC-FGC_TL\"]\nnum_categories = ['Low', 'Moderate', 'Q.High', 'High']\nn_rows = 6\nn_cols = 4\n\nfig, ax = plt.subplots(n_rows, n_cols, figsize = (n_cols * 4, n_rows * 5))\n\nfor r in range(0, n_rows):\n    for c in range(0, n_cols):\n        i = r*n_cols + c# index to loop through lis cols\n        if i < len(num_features):\n            ax_i = ax[r, c]\n            if (num_features[i] == \"FGC-FGC_PU\"):\n                num_categories = ['Low', 'High']\n                quartile_data = pd.qcut(train_df[num_features[i]], 2,duplicates = \"drop\", labels = num_categories )\n            else:\n                num_categories = ['Low', 'Moderate', 'Q.High', 'High']\n                quartile_data = pd.qcut(train_df[num_features[i]], 4, duplicates = \"drop\", labels = num_categories)\n            max_fea = train_df[num_features[i]].max()  # Giá trị lớn nhất\n            min_fea = train_df[num_features[i]].min()  # Giá trị nhỏ nhất\n            sns.countplot(data = train_df, x = quartile_data, hue = train_df[\"sii\"], palette = \"flare\", ax = ax_i)\n            ax_i.set_title(f'Figure {i+1}: SII vs {num_features[i]} {min_fea} - {max_fea}')\nax.flat[-1].set_visible(False)\nax.flat[-2].set_visible(False)\nax.flat[-3].set_visible(False)\n\n\nplt.tight_layout()\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:06:47.191402Z","iopub.execute_input":"2024-12-21T06:06:47.191825Z","iopub.status.idle":"2024-12-21T06:06:53.224356Z","shell.execute_reply.started":"2024-12-21T06:06:47.191788Z","shell.execute_reply":"2024-12-21T06:06:53.223006Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"**Note:**  \n\n*- These charts shows that many fields suc as `FGC-FGC_GSD`, has diverse distributions of `sii` values* \n\n*- Overall, most fields tend to have higher sii levels as their values increase* \n\n*- Similar to the fields in Physic, features within the same group (e.g., FGC, BIA) demonstrate relatively high correlation levels*","metadata":{}},{"cell_type":"markdown","source":"### 6. Internet Hours","metadata":{}},{"cell_type":"code","source":"data = train_df[train_df['PreInt_EduHx-computerinternet_hoursday'].notna()]\nage_range = data['Basic_Demos-Age']\nprint(\n    f\"Age range for participants with measured PreInt_EduHx-computerinternet_hoursday data:\"\n    f\" {age_range.min()} - {age_range.max()} years\"\n)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:06:53.225510Z","iopub.execute_input":"2024-12-21T06:06:53.225829Z","iopub.status.idle":"2024-12-21T06:06:53.237858Z","shell.execute_reply.started":"2024-12-21T06:06:53.225802Z","shell.execute_reply":"2024-12-21T06:06:53.236499Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"sns.countplot(data=train_df, x='PreInt_EduHx-computerinternet_hoursday', hue='sii', palette='flare')\nplt.title(\"SII vs PreInt_EduHx-computerinternet_hoursday\")\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:06:53.238999Z","iopub.execute_input":"2024-12-21T06:06:53.239375Z","iopub.status.idle":"2024-12-21T06:06:53.569259Z","shell.execute_reply.started":"2024-12-21T06:06:53.239347Z","shell.execute_reply":"2024-12-21T06:06:53.568143Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# <p style=\"padding:15px; background-color:#81BFDA; font-family:arial; font-weight:bold; color:white; font-size:100%; letter-spacing: 2px; text-align:left; border-radius: 10px 10px\">III. Data Engineering & Wrangling</p>","metadata":{}},{"cell_type":"markdown","source":"## Encode Categoricals\n- Some models require features to be numerical values; therefore, we need to create functions to convert categorical values into appropriate numerical representations.","metadata":{}},{"cell_type":"code","source":"category_cols","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:06:53.570149Z","iopub.execute_input":"2024-12-21T06:06:53.570411Z","iopub.status.idle":"2024-12-21T06:06:53.576913Z","shell.execute_reply.started":"2024-12-21T06:06:53.570387Z","shell.execute_reply":"2024-12-21T06:06:53.575812Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"#Season encode\nseason_cols = ['Basic_Demos-Enroll_Season',\n             'CGAS-Season',\n             'Physical-Season',\n             'Fitness_Endurance-Season',\n             'FGC-Season',\n             'BIA-Season',\n             'PAQ_A-Season',\n             'PAQ_C-Season',\n             'SDS-Season',\n             'PreInt_EduHx-Season']\n\ndef season_encode(df, season_cols):\n    for col in season_cols:\n        if col in df.columns:\n            df[col] = df[col].astype('object')\n            df[col] = df[col].fillna(0)\n            df[col] = df[col].replace({'Missing':0, 'Spring':1, 'Summer':2, 'Fall':3, 'Winter':4})\n            df[col] = df[col].astype('float64')\n\n\ndef cate_to_float(df, cols):\n    for col in cols:\n        if col in df.columns:\n            df[col] = df[col].astype('float64')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:06:53.578059Z","iopub.execute_input":"2024-12-21T06:06:53.578339Z","iopub.status.idle":"2024-12-21T06:06:53.593403Z","shell.execute_reply.started":"2024-12-21T06:06:53.578313Z","shell.execute_reply":"2024-12-21T06:06:53.592269Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Data Preprocessing","metadata":{}},{"cell_type":"markdown","source":"### 1. PCIAT-PCIAT_Score and sii\n- As in the data analyzed, we can notice that these 2 features are quite similar and have the same number of missing value. Therefore, we need to eliminate all the rows containing missing `sii` values to increase the accuracy of ML training model","metadata":{}},{"cell_type":"code","source":"train_df = train_df.dropna(subset = 'sii')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:06:53.594635Z","iopub.execute_input":"2024-12-21T06:06:53.595049Z","iopub.status.idle":"2024-12-21T06:06:53.620044Z","shell.execute_reply.started":"2024-12-21T06:06:53.595012Z","shell.execute_reply":"2024-12-21T06:06:53.618865Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### 2. CGAS-CGAS_Score\n- In the EDA step, we inferred that feature `CGAS-CGAS_Score` has some missing values and some even exceeding the valid range (0-100).","metadata":{}},{"cell_type":"code","source":"sns.stripplot(data = train_df, x = 'CGAS-CGAS_Score', size= 5, jitter=0.3, color ='red')\nplt.title(\"CGAS-CGAS_Score (without Outlier)\")\nplt.xlim(0, 100)\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:06:53.621327Z","iopub.execute_input":"2024-12-21T06:06:53.621723Z","iopub.status.idle":"2024-12-21T06:06:53.839865Z","shell.execute_reply.started":"2024-12-21T06:06:53.621674Z","shell.execute_reply":"2024-12-21T06:06:53.838786Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"- Due to the fact that `CGAS-CGAS_Score` distributes mainly around value 60, we will replace the outliers and null values with the mean value","metadata":{}},{"cell_type":"code","source":"# train_df\ntrain_df['CGAS-CGAS_Score'] = train_df['CGAS-CGAS_Score'].apply(\n    lambda x: x if (0 <= x <= 100) else pd.NA\n)\n\ntrain_df['CGAS-CGAS_Score'].fillna(train_df['CGAS-CGAS_Score'].mean(), inplace=True)\n\n# test_df\ntest_df['CGAS-CGAS_Score'] = test_df['CGAS-CGAS_Score'].apply(\n    lambda x: x if (0 <= x <= 100) else pd.NA\n)\n\ntest_df['CGAS-CGAS_Score'].fillna(test_df['CGAS-CGAS_Score'].mean(), inplace=True)\n\n# Results\ntrain_df['CGAS-CGAS_Score'].describe()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:06:53.841047Z","iopub.execute_input":"2024-12-21T06:06:53.841425Z","iopub.status.idle":"2024-12-21T06:06:53.857900Z","shell.execute_reply.started":"2024-12-21T06:06:53.841387Z","shell.execute_reply":"2024-12-21T06:06:53.856904Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### 3. SEASON\n- Features belonging to the season group are categorica`\n- Missing values in these features indicate no participation. Therefore, `null` values will be filled with `Missing` (`0`)","metadata":{}},{"cell_type":"code","source":"## fill missing value for season \n\ntrain_df[season_cols] = train_df[season_cols].astype('string').fillna('Missing').astype('category')\ntest_df[season_cols] = test_df[season_cols].astype('string').fillna('Missing').astype('category')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:06:53.858938Z","iopub.execute_input":"2024-12-21T06:06:53.859325Z","iopub.status.idle":"2024-12-21T06:06:53.904935Z","shell.execute_reply.started":"2024-12-21T06:06:53.859286Z","shell.execute_reply":"2024-12-21T06:06:53.903871Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### 4. Physical-Waist_Circumference","metadata":{}},{"cell_type":"code","source":"features = [\"Age Group\", \"CGAS_Score_Bin\",\"id\",\"Basic_Demos-Enroll_Season\",\"CGAS-Season\",\"Physical-Season\",\"FGC-Season\",\"BIA-Season\",\"PAQ_A-Season\",\"PAQ_C-Season\",\"PCIAT-Season\",\"SDS-Season\",\"PreInt_EduHx-Season\"]\n\n# Drop the 'id' column if present\ntrain_data_no_id = train_df.drop(columns=[\"Age Group\",\"id\"], errors='ignore')\nseason_cols = [col for col in train_data_no_id.columns if 'Season' in col]\ntrain_data_no_id = train_data_no_id.drop(season_cols, axis=1) \ntrain_data_no_id = train_df[float_cols]\n\n# Calculate the correlation matrix\ncorrelation_matrix = train_data_no_id.corr()\n# Plot the heatmap\nplt.figure(figsize=(30, 30))\nsns.heatmap(correlation_matrix, annot=True, fmt='.1f', cmap='flare', square=True)\nplt.title('Correlation Heatmap')\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:06:53.906070Z","iopub.execute_input":"2024-12-21T06:06:53.906454Z","iopub.status.idle":"2024-12-21T06:06:58.028492Z","shell.execute_reply.started":"2024-12-21T06:06:53.906415Z","shell.execute_reply":"2024-12-21T06:06:58.027187Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"- From the Correlation Heatmap figure, we can see that most of the features that lost more than 50% of their value have no interaction with other features in train and test.","metadata":{}},{"cell_type":"markdown","source":"- Furthermore, from the above chart, we can see that the Waist circumference (in) index is highly correlated with the BIA-BIA index, so although this index has a missing value of up to 82.35%, it can be calculated from a standard Waist circumference formula from BMI, so we will keep this attribute.\nMen: A formula based on BMI can be:\nWaist circumference=0.74 × BMI + 12.5\nWomen: Similarly, for women, the formula can be used:\nWaist circumference=0.75 × BMI + 13","metadata":{}},{"cell_type":"markdown","source":"- Filling feature Physical-Waist_Circumference","metadata":{}},{"cell_type":"code","source":"def fill_waist_circumference(row):\n    if pd.isnull(row['Physical-Waist_Circumference']):  # Checking if Physical-Waist_Circumference columns is missing\n        if row['Basic_Demos-Sex'] == 0:\n            return 0.74 * row['Physical-BMI'] + 12.5\n        elif row['Basic_Demos-Sex'] == 1:\n            return 0.75 * row['Physical-BMI'] + 13\n    return row['Physical-Waist_Circumference']  # If the values exists, do nothing\ntrain_df['Physical-Waist_Circumference'] = train_df.apply(fill_waist_circumference, axis=1)\ntest_df['Physical-Waist_Circumference'] = test_df.apply(fill_waist_circumference, axis=1)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:06:58.029448Z","iopub.execute_input":"2024-12-21T06:06:58.029740Z","iopub.status.idle":"2024-12-21T06:06:58.102546Z","shell.execute_reply.started":"2024-12-21T06:06:58.029716Z","shell.execute_reply":"2024-12-21T06:06:58.101342Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### 5. BIA","metadata":{}},{"cell_type":"markdown","source":"- After filling Physical Waist_Circumference we can use a KNN method to sort the rows by Physical Waist_Circumference and then fill the missing values by taking the median of the 3 nearest cells. This is a simple K-nearest neighbors (KNN) method, but instead of using a complex algorithm, you will choose to take the median of the rows nearest to Physical Waist_Circumference","metadata":{}},{"cell_type":"code","source":"def fill_with_median_train(df, bia_bia_prefix='BIA-BIA', waist_column='Physical-Waist_Circumference'):\n    # Sort the data by the waist_column column\n    df_sorted = df.sort_values(by=waist_column).reset_index(drop=True)\n\n    # A function to calculate the median of the 5 nearest BIA-BIA values based on the waist_column\n    def get_median_of_nearest(index, data_waist, data_bia_bia):\n        # Determine the range of the nearest values in the waist_column.\n        start = max(0, index - 10)\n        end = min(len(data_waist), index + 11)\n    \n        # Filter rows where the BIA-BIA values are not missing.\n        nearest_values = data_bia_bia[start:end]\n        nearest_waist_values = data_waist[start:end]\n        \n        # Filter the BIA-BIA values that are not missing\n        valid_bia_bia_values = nearest_values[~nearest_values.isna()]\n        \n        # Check if there are not enough values to calculate the median.\n        if len(valid_bia_bia_values) == 0:\n            return np.nan  # Return NaN if there are no valid values.\n        \n        # Calculate the median of the BIA-BIA values that are not missing\n        return np.median(valid_bia_bia_values)\n\n    # Fill the NaN values in columns starting with bia_bia_prefix\n    for col in df.columns:\n        if col.startswith(bia_bia_prefix):\n            df[col] = df.apply(\n                lambda row: get_median_of_nearest(\n                    row.name, df_sorted[waist_column], df_sorted[col]) if pd.isna(row[col]) else row[col], axis=1)\n\n    return df\ndef fill_with_median_test(df, bia_bia_prefix='BIA-BIA', waist_column='Physical-Waist_Circumference'):\n    # Sort the data by the waist_column\n    df_sorted = df.sort_values(by=waist_column).reset_index(drop=True)\n\n    # A function to calculate the median of the 5 nearest BIA-BIA values based on the waist_column\n    def get_median_of_nearest(index, data_waist, data_bia_bia):\n        # Determine the range of the nearest values in the waist_column\n        start = max(0, index - 2)\n        end = min(len(data_waist), index + 3)\n        \n        # Filter rows where the BIA-BIA values are not missing\n        nearest_values = data_bia_bia[start:end]\n        nearest_waist_values = data_waist[start:end]\n        \n        # Filter the BIA-BIA values that are not missing\n        valid_bia_bia_values = nearest_values[~nearest_values.isna()]\n        \n        # Check if there are not enough values to calculate the median\n        if len(valid_bia_bia_values) == 0:\n            return np.nan  # Trả về NaN nếu không có giá trị hợp lệ\n        \n        # Calculate the median of the BIA-BIA values that are not missing\n        return np.median(valid_bia_bia_values)\n\n    # Fill the NaN values in the columns starting with bia_bia_prefix\n    for col in df.columns:\n        if col.startswith(bia_bia_prefix):\n            df[col] = df.apply(\n                lambda row: get_median_of_nearest(\n                    row.name, df_sorted[waist_column], df_sorted[col]) if pd.isna(row[col]) else row[col], axis=1)\n\n    return df\n    \ntrain_df = fill_with_median_train(train_df)\ntest_df = fill_with_median_test(test_df)\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:06:58.104048Z","iopub.execute_input":"2024-12-21T06:06:58.104468Z","iopub.status.idle":"2024-12-21T06:07:02.888016Z","shell.execute_reply.started":"2024-12-21T06:06:58.104427Z","shell.execute_reply":"2024-12-21T06:07:02.886858Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Extension","metadata":{}},{"cell_type":"markdown","source":"### 1. CGAS_Hoursday\n- It is observed that the questions in PCIAT_PCIAT are related to behaviors and psychological aspects concerning time spent online.\n   **For example:** `PCIAT_PCIAT_18` \"How often does your child become angry or belligerent when your place time limits on how much time he or shes is allowed to spend online?\"\n\n- Based on this observation, we created the feature `CGAS_Hoursday`, which combines `CGAS-CGAS_Score` (indicating psychological state) and `PreInt_EduHx-computerinternet_hoursday` (indicating time spent online).\"","metadata":{},"attachments":{"d9c049d3-5f23-4462-9910-90c925741f66.png":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAp0AAAAZCAIAAAD8CQKOAAALcUlEQVR4Ae1b3XnjMAzLXBmo83SaTpK3DtP7SIkiQP3Y8Tlp0zIPF0kkARCS7aTtXW75SgfSgXQgHUgH0oHf4sDldrt95SsdSAfSgXQgHUgHXt+B2+2Wz/XX38bsIB1IB9KBdCAdUAfyuZ4HIR1IB9KBdCAd+D0O5HP99+xldpIOpAPpQDqQDuRzPc9AOpAOpAPpQDrwexzI5/rv2cvsJB1IB9KBdCAdeJHn+uf79aKv6/vnUzbt4+1yeRbXUxpakUizbx+jDPXdfFh4MgvNkUdsuXaqA8fMx62EMZ2EU2V+A9gxZ75B6P9Rwvb9H9B91Y89KtDUMaJjVfdZsJn96BM4eK5r3+E2D2ZuSj4/YaTofBZC/N6GScrjJ/NDRtfAwpNZaI78+K7+PMMx83ErYUwn4dWtPebMy3UN2/dM7Y89KtDUMaJjVScb+OgT+BLPddjKYm+3cLLrX1+PZzhd8nHAnYds4ckstBP5uPSsnDtwzHzcShzPeZ4bOUPTMWee2+cJbGdYtUPGk2iqkpPZTobbYZemCG347ry3dFdePtfHNn3Tdo/FPHp15yFbeDIL7UR+dIN/E/+Y+biVOP4pHp6h6ZgzP8WB3TrOsGoH2ZNoqpKT2U6G22GXpgjtT3yu6w8zyq+8L6BQl0FvcC2GwYUJoH5xbjzyK2+BhJf98rd8xbaAryrA24fDQwjoZejIbx9B+JfXCwV02HZpQI1VsaTS0TKRThk1AHVYJeMi/jL++wBEbU6UKg+1AP/cAok27DJnCzI5ayF2PKp1MSGCAd6IcReyqi9oak09E4i7PuaqlSxRyGW3SkmVc31/F12wi2w1asBTFGoCZvjTkxK913ypMq9m46+gyXpcGDuWKqv2MtJ6tEbXLKb3B1x9B0tR/VeVXMJFjO8TUG+2MK3SPVOFoCFsqxejZSyu4ZiqolaRfWs0q4q9vn8CsLNLiYHQBRuOEW8nVBT1gw1CdgvLe6lF3iLe5XmG1hHZNl3twqqOEbUqGcCrorpWvj5bz7ZdrdQdLx2Mji5WL054TQMNuFe6DGytk1IG4UPf19UPh9cpmtJCH2+X6/Vqu2BNhxbtxLWqcifyKp3DtODQAnRkrlu8bl5FD064FOypumoIRc9M3pwauT7frw6Am+erCIRqzB+Tg3mChDRaF54X3qNWGozcmuuYqxCvA7dqLanaFdauaWczbX4wiZ/b6EPGBDrXG9F3IRde1UhNLahRvpze9meaXNNzWSbloUtcQo8ZIaU6UIEQ8SQUP1qPUKVDZlSCocrCbSGp2hiTVhRIgR7Wt6PvmOSxclTExz10zPSLm88CnzF2q2pKuJ62FZ2KWxnKuuuOrWtsBtPOQCcYttKG8bBRjSiuiayJs6ICx17ekarx/3lVTs+nu7QikljTS5OgfXTTNsf9vq1UhMcyWih6NktTwDE+b8nihM+e6+2ziA9MH2OrWFCCUfUF7o6S5npbm1hSFwEweN34TI4sdMCyUBNCDCJNwIAC0tbyAjzedwADqXxMyDCBoSULVvUuRpEG0qzS36UQXWsRqYJ9iYBWA+swVJQ4N+i47nMZASf6NtMZGw+XmGOPJEF0QW26B+/EHiCm4CFAHRMgTZx9sCyQhoNjL7IRkOuSz2U0Mb97okx238v3wxLnlgYnIEk8sVbrO9q1uvkEbu/ghDsJasDHOq0XvcJbPYlRkKSayDrqGjMlAHMYUgk/2IXaNhnTpBo2gZAxDxnLOvLimNVJLkT30kEJltOYkQMRZyJcTCzdhH/jTlUusyq0EeENbJ62xsfo6oTPnuu0oeS/2hLCaJUfk/rJ7+Ot9hx6sRa3AJldq4Jb2qx/AKmjelYDayitItCuyBAAOLyktuDoqlEYoIXhhiGYKSjY0UirMi2+ERYE2NEIaPJ9PUogDcZn2gDZ73OKMN6yDtwAR825pqgBIqakNLKgNiZ771KtlyAFuEi9rE8ueN4QqjL2urfGactAFmRYRn2P0UbStaUbAddLv+N0zBqQEHmPm7DYyT3J0DHpCP1WS9suy2B88wnOOP5hVSAF3IGh+oQGmHdNbjspHOkuT6CyTMQFTu9LErveShXkE3KXjoeEMplmcEey4xRCNN1Nh2yzMSGr1mkmBjTThIDorlv0W4IAIkMIQ2SFAmkBQKsgLPLakZHB+ITf/1zXvkF5I7Y1Y7Yf6MhcYiPBUrwJiLYVc6DPKULJ7GhDac3qNHhaF5KS1sswatTlXXLlZf5Q1HgQB8ctuTF2fhmEpHpWK2yDIaxGQ1UEtBPu6x2UhxrdCNm1dwheNwsN10F60DCdDnGcvo00z3oPxxRoJR+4tKpsOG96KFEaq5tJGq4DEAybbB/EaENrA8/1kWmSlclY6/seN2HxCrgnGWWQJldtI4GVPVvffIIzjn9YlfHru+EhGo5bsuuIYYOQVM9qhTCIUUACEF0dHmbIB9Rw3ikSJ0BTQriA43CiaDqTEclo/xEcx4SsCBjFMcEBl+Tw9VuDQ52SXQ83DKWCuAI+XA6etoWvt9DtE37/c12lWhdVqcuSBZFW/sCtKJd5+VMC6CT0uARk+IFbXUJAB95JalyGuQzn8iARSONwuFuaVOo/2qcwWVwzanjSkVRCiGVMpYYqzJuMcdkU+13Daed5MeI1y2shdIcoOO7PCERhCKxxGLeM5gIBPjuiZI2MmNydSyHvPgqROBKFvoIMrAyZEnKVPgollIUVOJ72uAULjiHeWAMkEy5N+tIqrn2LkXl38xGMMf4KfV4VZRQU3lZZQ9KB1WNJ8XoPZFExzH0oLiA5zj2LkWfrnBXa0CBW4rjPhSgMOwZcwLzZeEkE10Gfh0xokq8LJ1oZMCQ82UfHKKd/nLaBv/PxeuC5Xr50gfhOiRhyvZZv6dKM/Ir97c3n2KCM1cAFoBDQzbJzXBcgZf5L/Q6risEmdOyUa3lT6nZrCTsfuq9k1OB+xiBVpnBcAhVLta80q0NG14CAm8fKW5mCBiStIUw0eSymHJL6V2occp1rW1BebzlGGZ+oQbxqN7XcSLzVAnhN9G+z6JihOYulW5ZHymi75R7TMFizzix54YDkmZrJuAL3PW7AGju0Zkz1LlEPgBBAMsooNwsIWrf2Lhq2bj4L/P0tkCpjr+8Skxe0t3GXQ95abcVB7ZiqOqKl5o5MKki3Dg8npNabca3h9dllUm/fxinqgJfGIRSmO+lm4LgekMOUMpXVxe+4aWsFHE+B86nMHC623/ZukbbGt+/NG4/XI89127p2XdsBbKqLNF/W1rHdltkGJaVCeqXGJTZY0uTmYeHsARYONnIdOED9fyNIuZJXr9gxdV1dNB/NqqpWjFOpoVluUGZeCZaGKpla77MxIg3sMuLy+cpJDbbEfT3cAhHdtWiRCGovgkOp4Urupwtq084iyv8etNMmXDZmcAGGiPKozFBiLEUINWIhe1+3DGRWUN+PmY82TsbTHsMBa6eoWtRJLc3X7QQPglcoo0JpTYenjUdHpZp2qzx4oDjgH1PF5kcRviXt8KI7EnbacEEFN5iofsSkYsugvjxDzAiYGIR9AE3dFWok8i5o+iqmIi+O+UqxQuBDGdEe40PA2XhNhFVj8bZHcEaMvrwLRHtBA1tHq6EIAKAHSW6okBC+IBSbfLmoAbivr8FzvXHn4CkO6C75Jj2FM0ke44DuJV1g/Qozv97u9x31K9zjH5w9b1vDE+IPep0t9w7kc7335LkreVN8rt8PZdPNjB/EcR7ZX3D37+4x9vwH5k/c1nyu/4HzdHeL+Vy/27JzC/RnKPQN71z8RHuyA+WxN/4hXSflRXf/rh67pn//wjO3NZ/rv/883d9hPtfv9ywr0oF0IB1IB9KBn+pAPtd/6s6krnQgHUgH0oF04H4H6nP9lq90IB1IB9KBdCAd+BUO/AMP0kXMthclnAAAAABJRU5ErkJggg=="},"a53c40b3-f3e3-4ac2-aa08-998a07d5efda.png":{"image/png":"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"},"f5777988-2e42-496d-aab8-064d71172382.png":{"image/png":"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"},"5d784c52-7376-44ff-8ae2-a1e4899f79c1.png":{"image/png":"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"}}},{"cell_type":"code","source":"train_df['CGAS_Hoursday'] = (train_df['PreInt_EduHx-computerinternet_hoursday'].astype('float64') + 1.25)/train_df['CGAS-CGAS_Score'] \ntest_df['CGAS_Hoursday'] =  (test_df['PreInt_EduHx-computerinternet_hoursday'].astype('float64') + 1.25)/test_df['CGAS-CGAS_Score']","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:07:02.889274Z","iopub.execute_input":"2024-12-21T06:07:02.889666Z","iopub.status.idle":"2024-12-21T06:07:02.897916Z","shell.execute_reply.started":"2024-12-21T06:07:02.889627Z","shell.execute_reply":"2024-12-21T06:07:02.896519Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"- `PreInt_EduHx-computerinternet_hoursday` is incremented to prevent its value from being 0, which would result in 0 when divided by `CGAS-CGAS_Score`.\n- The parameter value of 1.25 is adjusted to align with the training model requirements","metadata":{}},{"cell_type":"markdown","source":"# <p style=\"padding:15px; background-color:#81BFDA; font-family:arial; font-weight:bold; color:white; font-size:100%; letter-spacing: 2px; text-align:left; border-radius: 10px 10px\">IV. Model</p>","metadata":{}},{"cell_type":"markdown","source":"\n*  Idea: By examining the dataset, we observe a wide variety of features, many of which have over `30%` null values. Additionally, the significance of these features does not clearly indicate a strong relationship with sii and PCIAT-PCIAT_Total. To avoid overfitting and dealing with excessive null values, we decided to use **`XGBoost`** as the training model.\n*  During the EDA, we identified a strong correlation between the features `sii` and `PCIAT-PCIAT_Total`, making it feasible to choose either a classification or regression model.\n*  Both models will be developed, and we will use **`cross-validation`** to compare the results and select the better-performing model\n","metadata":{}},{"cell_type":"markdown","source":"## 1. Data Filtering","metadata":{}},{"cell_type":"markdown","source":"From the data analysis and processing steps, select the data that meets the following criteria\n* The missing values of the feature do not exceed 50%.\n* The feature has a high correlation with `sii` and `PCIAT-PCIAT_Total`.\n* The feature's significance impacts the prediction of the outcome.","metadata":{}},{"cell_type":"markdown","source":"### Missing value \n\n* Filter out features with missing values exceeding 50%","metadata":{}},{"cell_type":"code","source":"half_missing = [val for val in train_df.columns[train_df.isnull().sum()>len(train_df)/2]]\nhalf_missing","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:07:02.903279Z","iopub.execute_input":"2024-12-21T06:07:02.903627Z","iopub.status.idle":"2024-12-21T06:07:02.925095Z","shell.execute_reply.started":"2024-12-21T06:07:02.903596Z","shell.execute_reply":"2024-12-21T06:07:02.924008Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Correlation\n- Create a table sorting the correlation between features and `PCIAT-PCIAT_Total`","metadata":{}},{"cell_type":"code","source":"season_encode(train_df, season_cols)\n\next_float_cols = [\n    'PreInt_EduHx-computerinternet_hoursday',\n    'FGC-FGC_GSD_Zone',\n    'FGC-FGC_GSND_Zone',\n    'FGC-FGC_PU_Zone',\n    'FGC-FGC_SRL_Zone',\n    'FGC-FGC_SRR_Zone',\n    'BIA-BIA_Activity_Level_num',\n    'BIA-BIA_Frame_num',\n    'FGC-FGC_TL_Zone',\n    'CGAS_Hoursday'\n]\n\ncate_to_float(train_df, ext_float_cols)\n\ncorrdata = train_df[float_cols + season_cols + ext_float_cols]\ncorr = pd.DataFrame(corrdata.corr()['PCIAT-PCIAT_Total'].sort_values(ascending = False))\ncorr.style.background_gradient(cmap='YlOrRd')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:07:02.927521Z","iopub.execute_input":"2024-12-21T06:07:02.927986Z","iopub.status.idle":"2024-12-21T06:07:03.013270Z","shell.execute_reply.started":"2024-12-21T06:07:02.927935Z","shell.execute_reply":"2024-12-21T06:07:03.012221Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"* Filter features with a correlation greater than 0.2 and cross-check, remove features with more than 50% missing values.","metadata":{}},{"cell_type":"code","source":"selection = corr[(corr['PCIAT-PCIAT_Total']>.11) | (corr['PCIAT-PCIAT_Total']<-.11)]\nselection = [val for val in selection.index]\nselection.remove('PCIAT-PCIAT_Total')\n\n## BIA-BIA_BMI and Physical-BMI are similar, choose only one\nselection.remove('BIA-BIA_BMI')\nselection.remove('Physical-Waist_Circumference')\n\nselection.remove('SDS-SDS_Total_Raw')\n\nselection = [i for i in selection if i not in half_missing]\nselection","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:07:03.014451Z","iopub.execute_input":"2024-12-21T06:07:03.014775Z","iopub.status.idle":"2024-12-21T06:07:03.023452Z","shell.execute_reply.started":"2024-12-21T06:07:03.014741Z","shell.execute_reply":"2024-12-21T06:07:03.022485Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Meaning \n\n* In the PCIAT-PCIAT questions, there are several items addressing how internet use affects physical activity time.\n     Ex: `PCIAT-PCIAT_11`, 'PCIAT-PCIAT_14`\n\n* In reality, spending excessive time on the internet can impact several aspects of health as follows:\n \n\n     - Reduced mobility.\n\n     - The spine is affected due to prolonged sitting.\n\n     - Stamina and flexibility are generally low.","metadata":{},"attachments":{"56cd97dd-4300-4894-beec-75ebad94c8f7.png":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAASYAAAAZCAIAAAAT/RRBAAACrUlEQVR4Ae2cUY7rIAxFs64uKOvparqS/M1iGNnBYBtDVI2GVOXm44VgDObo3iSNRm87cIAACEwksB3HkXCAAAhMIXAcByw3hTQWAQEmAMtBCCAwlQAsNxU3FgMBWA4aAIGpBGC5qbixGAjActAACEwlEFju5/nY9LG/fEV2xOP5kwe89m2rV5KVR6tpbP54LZ7FJ6i58ip2RC3i30qS3cmZFtq2trCU0iAk2TivQ6BjOatZ7aNGPyT2PDzUN3XuO/3TWDfLsS7W467WEAmrpFtKUqUqu/s9DkJqAjRXInBpucSqEYGzur2uCq/Icuy4F9/po7wopcxXGtZyH1GSqY3uOczJblHQBaGSjsZqBK4tx245LScS6kEK/JMdd75diXFVfpCiotKkhXVyzbqtJCmtnAe+GoRKOhqrELi2nBI1KT1+PzxxVScIPurJd/42SIPiXkmXM9WgLPcJJUlp5Tzw1SBU0tFYhcCV5VgtY9dUVN4/Vmo+ynlhZ50xt2iiYrnPKCmsUUC5oOXggrhcjEDHcuorYpF6/vRmf64YXM4/XmkuzKltH/WUIy92uqz0zi7JbLJ34Xerxg1CahSaaxDoWE6JWnFg6cQhHmX943wihrGWtSlqLdOkqeJ1byvJ1EcXXIndnIwZhGQIzssQeMtyp6w6b0/+h1mkM36CGVn+1XK3ldQoJNpvHjQINdOg49sJvGe5fC8vn0SYzmuXJ5D2T+suGtz06pQ+a9Js/JSTx8v0kppiB74ahJpp0PHtBN61HPFgBcl7ov57E+WfxlsZpO9XKQPUQ8vdU1Kp1tFgLvFPUB0q6WisRiCw3GoIsF8QmEkAlptJG2uBQILlLkXA78L1PVq3zJegy4kwAARSguWgAhCYSwBPubm8sdryBLLlJv4fflgKBFYn8As759RTCJnUzgAAAABJRU5ErkJggg=="},"cb72c755-451b-49ee-bab9-bbf938b202b5.png":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAASYAAAAZCAIAAAAT/RRBAAACrUlEQVR4Ae2cUY7rIAxFs64uKOvparqS/M1iGNnBYBtDVI2GVOXm44VgDObo3iSNRm87cIAACEwksB3HkXCAAAhMIXAcByw3hTQWAQEmAMtBCCAwlQAsNxU3FgMBWA4aAIGpBGC5qbixGAjActAACEwlEFju5/nY9LG/fEV2xOP5kwe89m2rV5KVR6tpbP54LZ7FJ6i58ip2RC3i30qS3cmZFtq2trCU0iAk2TivQ6BjOatZ7aNGPyT2PDzUN3XuO/3TWDfLsS7W467WEAmrpFtKUqUqu/s9DkJqAjRXInBpucSqEYGzur2uCq/Icuy4F9/po7wopcxXGtZyH1GSqY3uOczJblHQBaGSjsZqBK4tx245LScS6kEK/JMdd75diXFVfpCiotKkhXVyzbqtJCmtnAe+GoRKOhqrELi2nBI1KT1+PzxxVScIPurJd/42SIPiXkmXM9WgLPcJJUlp5Tzw1SBU0tFYhcCV5VgtY9dUVN4/Vmo+ynlhZ50xt2iiYrnPKCmsUUC5oOXggrhcjEDHcuorYpF6/vRmf64YXM4/XmkuzKltH/WUIy92uqz0zi7JbLJ34Xerxg1CahSaaxDoWE6JWnFg6cQhHmX943wihrGWtSlqLdOkqeJ1byvJ1EcXXIndnIwZhGQIzssQeMtyp6w6b0/+h1mkM36CGVn+1XK3ldQoJNpvHjQINdOg49sJvGe5fC8vn0SYzmuXJ5D2T+suGtz06pQ+a9Js/JSTx8v0kppiB74ahJpp0PHtBN61HPFgBcl7ov57E+WfxlsZpO9XKQPUQ8vdU1Kp1tFgLvFPUB0q6WisRiCw3GoIsF8QmEkAlptJG2uBQILlLkXA78L1PVq3zJegy4kwAARSguWgAhCYSwBPubm8sdryBLLlJv4fflgKBFYn8As759RTCJnUzgAAAABJRU5ErkJggg=="},"8cfd16f8-910e-4021-990a-2abea5bd6614.png":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAASYAAAAZCAIAAAAT/RRBAAACrUlEQVR4Ae2cUY7rIAxFs64uKOvparqS/M1iGNnBYBtDVI2GVOXm44VgDObo3iSNRm87cIAACEwksB3HkXCAAAhMIXAcByw3hTQWAQEmAMtBCCAwlQAsNxU3FgMBWA4aAIGpBGC5qbixGAjActAACEwlEFju5/nY9LG/fEV2xOP5kwe89m2rV5KVR6tpbP54LZ7FJ6i58ip2RC3i30qS3cmZFtq2trCU0iAk2TivQ6BjOatZ7aNGPyT2PDzUN3XuO/3TWDfLsS7W467WEAmrpFtKUqUqu/s9DkJqAjRXInBpucSqEYGzur2uCq/Icuy4F9/po7wopcxXGtZyH1GSqY3uOczJblHQBaGSjsZqBK4tx245LScS6kEK/JMdd75diXFVfpCiotKkhXVyzbqtJCmtnAe+GoRKOhqrELi2nBI1KT1+PzxxVScIPurJd/42SIPiXkmXM9WgLPcJJUlp5Tzw1SBU0tFYhcCV5VgtY9dUVN4/Vmo+ynlhZ50xt2iiYrnPKCmsUUC5oOXggrhcjEDHcuorYpF6/vRmf64YXM4/XmkuzKltH/WUIy92uqz0zi7JbLJ34Xerxg1CahSaaxDoWE6JWnFg6cQhHmX943wihrGWtSlqLdOkqeJ1byvJ1EcXXIndnIwZhGQIzssQeMtyp6w6b0/+h1mkM36CGVn+1XK3ldQoJNpvHjQINdOg49sJvGe5fC8vn0SYzmuXJ5D2T+suGtz06pQ+a9Js/JSTx8v0kppiB74ahJpp0PHtBN61HPFgBcl7ov57E+WfxlsZpO9XKQPUQ8vdU1Kp1tFgLvFPUB0q6WisRiCw3GoIsF8QmEkAlptJG2uBQILlLkXA78L1PVq3zJegy4kwAARSguWgAhCYSwBPubm8sdryBLLlJv4fflgKBFYn8As759RTCJnUzgAAAABJRU5ErkJggg=="},"fa9f8e62-43b5-4943-bda3-108a4782def9.png":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAASYAAAAZCAIAAAAT/RRBAAACrUlEQVR4Ae2cUY7rIAxFs64uKOvparqS/M1iGNnBYBtDVI2GVOXm44VgDObo3iSNRm87cIAACEwksB3HkXCAAAhMIXAcByw3hTQWAQEmAMtBCCAwlQAsNxU3FgMBWA4aAIGpBGC5qbixGAjActAACEwlEFju5/nY9LG/fEV2xOP5kwe89m2rV5KVR6tpbP54LZ7FJ6i58ip2RC3i30qS3cmZFtq2trCU0iAk2TivQ6BjOatZ7aNGPyT2PDzUN3XuO/3TWDfLsS7W467WEAmrpFtKUqUqu/s9DkJqAjRXInBpucSqEYGzur2uCq/Icuy4F9/po7wopcxXGtZyH1GSqY3uOczJblHQBaGSjsZqBK4tx245LScS6kEK/JMdd75diXFVfpCiotKkhXVyzbqtJCmtnAe+GoRKOhqrELi2nBI1KT1+PzxxVScIPurJd/42SIPiXkmXM9WgLPcJJUlp5Tzw1SBU0tFYhcCV5VgtY9dUVN4/Vmo+ynlhZ50xt2iiYrnPKCmsUUC5oOXggrhcjEDHcuorYpF6/vRmf64YXM4/XmkuzKltH/WUIy92uqz0zi7JbLJ34Xerxg1CahSaaxDoWE6JWnFg6cQhHmX943wihrGWtSlqLdOkqeJ1byvJ1EcXXIndnIwZhGQIzssQeMtyp6w6b0/+h1mkM36CGVn+1XK3ldQoJNpvHjQINdOg49sJvGe5fC8vn0SYzmuXJ5D2T+suGtz06pQ+a9Js/JSTx8v0kppiB74ahJpp0PHtBN61HPFgBcl7ov57E+WfxlsZpO9XKQPUQ8vdU1Kp1tFgLvFPUB0q6WisRiCw3GoIsF8QmEkAlptJG2uBQILlLkXA78L1PVq3zJegy4kwAARSguWgAhCYSwBPubm8sdryBLLlJv4fflgKBFYn8As759RTCJnUzgAAAABJRU5ErkJggg=="},"1d6e25d3-fb8c-4f7c-ba2b-b5c03e2eef37.png":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAASYAAAAZCAIAAAAT/RRBAAACuUlEQVR4Ae2czZGDMAyFXVcKop5Uk0q4bTHsWLFs/RlPDjEZ/DgsYCxLenlfAsnMph0bFIACExVI+74f2KAAFJiiwL7vQG6K0kgCBUgBIAcjQIGpCgC5qXIjGRQAcvAAFJiqAJCbKjeSQQEgBw9AgakKBMj9PR9JbtvLVqRnPJ5/ZcJrS6mdcVSZLZbR8ee5aBUbINYqWfSMVsTXSuLueJ8TpeQLk/W3sjgK+/UU6CDXzEFWaqeHs1Y2e7ke+jsPblv+49A9DlpOrN55AUSOEsMpc8AlJYlKBe5hj1T9tlWZRCgO11NgiNxBhmIqyN2hr7J0EXJE3IsuRXFRiH8VNHI/UVItkvWhfdBiqd20UMNxsJoCY+QESOyunkgBP4W4GMcOpX5569eW6LKSXJFUiUOujtoWXDwGFlFgjJwwdXZ6fH/4VquRwOpV4nrM+RAOlXvj118oSZZHx1SUQU6MmRZcOAZWUWCEHJmGMRvxYa8Lx/U+0GxIrLvy62+U5ArVzdLl3BxDqFpwwRhYR4EOcuJbRH6M4+8p2EOBRoYfa0JzmRbwY3mkbiXZm7I6OrukoFU/ZLs1j69Azku25kgHOWFqoQu5Kr5EszQ/hhMGRiOrQ0Quddj362UlqfryCVUimlNvHdx8in5FcUth4M4KfITc21b1XsnpovixFsyzyYbClr0nPLtyH7nLSrIlOuTMhJMWzEyc3luBz5Ar7+XtCSWL89r4RzKJnKerzHXBHH0i9KlfiW23avkw/lpJrloqQ72dqCmnLaiZOLm3Ap8il9UoHuebpXanKfwdE+c/50TIidBDv84vqVZrUpMqAXnDFuqCOLi3AgFy924Y3UGBaxUActfqj+zLKQDkhi853SPzXbTeBzeQw+UwYXEFgNziBkD7sxUAcrMVR77FFSjITfwffkgFBVZX4B9a98aHqmLqHAAAAABJRU5ErkJggg=="},"d1f06d2b-855b-4e95-9108-87746fe26be1.png":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAASYAAAAZCAIAAAAT/RRBAAACuUlEQVR4Ae2czZGDMAyFXVcKop5Uk0q4bTHsWLFs/RlPDjEZ/DgsYCxLenlfAsnMph0bFIACExVI+74f2KAAFJiiwL7vQG6K0kgCBUgBIAcjQIGpCgC5qXIjGRQAcvAAFJiqAJCbKjeSQQEgBw9AgakKBMj9PR9JbtvLVqRnPJ5/ZcJrS6mdcVSZLZbR8ee5aBUbINYqWfSMVsTXSuLueJ8TpeQLk/W3sjgK+/UU6CDXzEFWaqeHs1Y2e7ke+jsPblv+49A9DlpOrN55AUSOEsMpc8AlJYlKBe5hj1T9tlWZRCgO11NgiNxBhmIqyN2hr7J0EXJE3IsuRXFRiH8VNHI/UVItkvWhfdBiqd20UMNxsJoCY+QESOyunkgBP4W4GMcOpX5569eW6LKSXJFUiUOujtoWXDwGFlFgjJwwdXZ6fH/4VquRwOpV4nrM+RAOlXvj118oSZZHx1SUQU6MmRZcOAZWUWCEHJmGMRvxYa8Lx/U+0GxIrLvy62+U5ArVzdLl3BxDqFpwwRhYR4EOcuJbRH6M4+8p2EOBRoYfa0JzmRbwY3mkbiXZm7I6OrukoFU/ZLs1j69Azku25kgHOWFqoQu5Kr5EszQ/hhMGRiOrQ0Quddj362UlqfryCVUimlNvHdx8in5FcUth4M4KfITc21b1XsnpovixFsyzyYbClr0nPLtyH7nLSrIlOuTMhJMWzEyc3luBz5Ar7+XtCSWL89r4RzKJnKerzHXBHH0i9KlfiW23avkw/lpJrloqQ72dqCmnLaiZOLm3Ap8il9UoHuebpXanKfwdE+c/50TIidBDv84vqVZrUpMqAXnDFuqCOLi3AgFy924Y3UGBaxUActfqj+zLKQDkhi853SPzXbTeBzeQw+UwYXEFgNziBkD7sxUAcrMVR77FFSjITfwffkgFBVZX4B9a98aHqmLqHAAAAABJRU5ErkJggg=="},"9a4a05fa-7987-4367-88c8-4203b55a6f53.png":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAASYAAAAZCAIAAAAT/RRBAAACuUlEQVR4Ae2czZGDMAyFXVcKop5Uk0q4bTHsWLFs/RlPDjEZ/DgsYCxLenlfAsnMph0bFIACExVI+74f2KAAFJiiwL7vQG6K0kgCBUgBIAcjQIGpCgC5qXIjGRQAcvAAFJiqAJCbKjeSQQEgBw9AgakKBMj9PR9JbtvLVqRnPJ5/ZcJrS6mdcVSZLZbR8ee5aBUbINYqWfSMVsTXSuLueJ8TpeQLk/W3sjgK+/UU6CDXzEFWaqeHs1Y2e7ke+jsPblv+49A9DlpOrN55AUSOEsMpc8AlJYlKBe5hj1T9tlWZRCgO11NgiNxBhmIqyN2hr7J0EXJE3IsuRXFRiH8VNHI/UVItkvWhfdBiqd20UMNxsJoCY+QESOyunkgBP4W4GMcOpX5569eW6LKSXJFUiUOujtoWXDwGFlFgjJwwdXZ6fH/4VquRwOpV4nrM+RAOlXvj118oSZZHx1SUQU6MmRZcOAZWUWCEHJmGMRvxYa8Lx/U+0GxIrLvy62+U5ArVzdLl3BxDqFpwwRhYR4EOcuJbRH6M4+8p2EOBRoYfa0JzmRbwY3mkbiXZm7I6OrukoFU/ZLs1j69Azku25kgHOWFqoQu5Kr5EszQ/hhMGRiOrQ0Quddj362UlqfryCVUimlNvHdx8in5FcUth4M4KfITc21b1XsnpovixFsyzyYbClr0nPLtyH7nLSrIlOuTMhJMWzEyc3luBz5Ar7+XtCSWL89r4RzKJnKerzHXBHH0i9KlfiW23avkw/lpJrloqQ72dqCmnLaiZOLm3Ap8il9UoHuebpXanKfwdE+c/50TIidBDv84vqVZrUpMqAXnDFuqCOLi3AgFy924Y3UGBaxUActfqj+zLKQDkhi853SPzXbTeBzeQw+UwYXEFgNziBkD7sxUAcrMVR77FFSjITfwffkgFBVZX4B9a98aHqmLqHAAAAABJRU5ErkJggg=="},"7bcd1734-cb0f-4b45-916b-d63dade45501.png":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAASYAAAAZCAIAAAAT/RRBAAACuUlEQVR4Ae2czZGDMAyFXVcKop5Uk0q4bTHsWLFs/RlPDjEZ/DgsYCxLenlfAsnMph0bFIACExVI+74f2KAAFJiiwL7vQG6K0kgCBUgBIAcjQIGpCgC5qXIjGRQAcvAAFJiqAJCbKjeSQQEgBw9AgakKBMj9PR9JbtvLVqRnPJ5/ZcJrS6mdcVSZLZbR8ee5aBUbINYqWfSMVsTXSuLueJ8TpeQLk/W3sjgK+/UU6CDXzEFWaqeHs1Y2e7ke+jsPblv+49A9DlpOrN55AUSOEsMpc8AlJYlKBe5hj1T9tlWZRCgO11NgiNxBhmIqyN2hr7J0EXJE3IsuRXFRiH8VNHI/UVItkvWhfdBiqd20UMNxsJoCY+QESOyunkgBP4W4GMcOpX5569eW6LKSXJFUiUOujtoWXDwGFlFgjJwwdXZ6fH/4VquRwOpV4nrM+RAOlXvj118oSZZHx1SUQU6MmRZcOAZWUWCEHJmGMRvxYa8Lx/U+0GxIrLvy62+U5ArVzdLl3BxDqFpwwRhYR4EOcuJbRH6M4+8p2EOBRoYfa0JzmRbwY3mkbiXZm7I6OrukoFU/ZLs1j69Azku25kgHOWFqoQu5Kr5EszQ/hhMGRiOrQ0Quddj362UlqfryCVUimlNvHdx8in5FcUth4M4KfITc21b1XsnpovixFsyzyYbClr0nPLtyH7nLSrIlOuTMhJMWzEyc3luBz5Ar7+XtCSWL89r4RzKJnKerzHXBHH0i9KlfiW23avkw/lpJrloqQ72dqCmnLaiZOLm3Ap8il9UoHuebpXanKfwdE+c/50TIidBDv84vqVZrUpMqAXnDFuqCOLi3AgFy924Y3UGBaxUActfqj+zLKQDkhi853SPzXbTeBzeQw+UwYXEFgNziBkD7sxUAcrMVR77FFSjITfwffkgFBVZX4B9a98aHqmLqHAAAAABJRU5ErkJggg=="}}},{"cell_type":"markdown","source":"From the above observations, we can consider certain `FitnessGram` features that may influence predictions:\n* `FGC-FGC_TL_Zone` represents the ability to perform a prone trunk lift.,\n* `FGC-FGC_SRR_Zone` represents the ability to perform a right-sided sit-and-reach.\n* `BIA-BIA_FFMI` **(Body Impedance Analysis Fat-Free Mass Index)** evaluates the muscle mass in the body, unaffected by fat. Therefore, it can reflect the level of physical activity and muscular condition\n* These metrics reflect the flexibility of the body and the spine, making them relevant features to include in the training process.","metadata":{},"attachments":{"68364e2a-bf88-4589-b5e2-f286a5702982.png":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAASYAAAAZCAIAAAAT/RRBAAADAUlEQVR4Ae1cyZHjMAx0XBOQ45loHIl+E4y2AIokTh1bMsuSW58hcaOJpmU/5jHhAQJAYCACj2maZjxAAAgMQWCaJlBuCNJIAgQYAVAOgwAEhiIAyg2FG8mAACiHGQACQxEA5YbCjWRAAJTDDACBoQgElPv7/Xno5+f3rxdl1c9X1/FKGyhfbakNKaUytur/TxSUJRssgV9Pk18X63Zk7x7VgHOBAAjMc0K5ZHTKmMnZJ14IY2dg9AryFZ2LMxtjZ2D0KpHdkLMouqhDofXM95TfB83toflWBA5QbnuomAeSkOuoZiw5PZEtI2RXKLSe2X675MwT8m9DYD/leKrW+HR47MjBfdjM/Hn2ODWRPdSQXaHQeiZ78tUlMxjtvVN2Q7bPV9cbBDjU4mhUSXKIr4XAbsptE8rP3QYUMeXekMjWQZW6cQ6F1jPcu8aNgLctH+8aQWnXVNx6o+c2EGE1EH44Agnl2v1MCx6JYByq0TIyanr2tM0ha5B3JrLFhJWGQusZ7MlPfcJppNhD2tC60WqeRVqjUbogMUTXRCChXLt4W1fJnWsmRg5Tc6UF2bVnmTgKeXoilTXZiKK7RSjs6mTFfQkGLa1qiSIPeQh1T+tuIMbLA5RUAvFFENhNuUIaMSulwT4x5TvYkQmJKfeGRPYsRNFdFQq7OlyRj701mDkWJzJcZGJJMXva0DFMC+GVEdhPuZhSfWKW3z3qZO0AJaHc+YlsLbLopguFTRstmCP+jqFABgUZm9aCkUIlllE6yO6BwAHKVU7JgTFTx1s1UXSL+6ks2GWUOz2RPapwtkOh9RR707rVCJQoct/SLqacu2tWsBPpsLwWAocox63xALWvZZ5PC+2qRca3uRBrRX1eInskFNklNukCCxXGtFnbrWRS0VQu0lQr9WLJ4VVY5aeyY3NdBALKXbcZVA4EPh8BUO7zzwgV3gqBm1FOvc/Vl73yV7zM7T3Bc6PtzQq7eyNwM8rd+7DQ3R0QAOXucIro4UIILJQb+D/8kAoIfDsC/wDeEZL2lJCU7gAAAABJRU5ErkJggg=="},"44eb3516-7b59-4237-bace-17a17889d00b.png":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAASYAAAAZCAIAAAAT/RRBAAADAUlEQVR4Ae1cyZHjMAx0XBOQ45loHIl+E4y2AIokTh1bMsuSW58hcaOJpmU/5jHhAQJAYCACj2maZjxAAAgMQWCaJlBuCNJIAgQYAVAOgwAEhiIAyg2FG8mAACiHGQACQxEA5YbCjWRAAJTDDACBoQgElPv7/Xno5+f3rxdl1c9X1/FKGyhfbakNKaUytur/TxSUJRssgV9Pk18X63Zk7x7VgHOBAAjMc0K5ZHTKmMnZJ14IY2dg9AryFZ2LMxtjZ2D0KpHdkLMouqhDofXM95TfB83toflWBA5QbnuomAeSkOuoZiw5PZEtI2RXKLSe2X675MwT8m9DYD/leKrW+HR47MjBfdjM/Hn2ODWRPdSQXaHQeiZ78tUlMxjtvVN2Q7bPV9cbBDjU4mhUSXKIr4XAbsptE8rP3QYUMeXekMjWQZW6cQ6F1jPcu8aNgLctH+8aQWnXVNx6o+c2EGE1EH44Agnl2v1MCx6JYByq0TIyanr2tM0ha5B3JrLFhJWGQusZ7MlPfcJppNhD2tC60WqeRVqjUbogMUTXRCChXLt4W1fJnWsmRg5Tc6UF2bVnmTgKeXoilTXZiKK7RSjs6mTFfQkGLa1qiSIPeQh1T+tuIMbLA5RUAvFFENhNuUIaMSulwT4x5TvYkQmJKfeGRPYsRNFdFQq7OlyRj701mDkWJzJcZGJJMXva0DFMC+GVEdhPuZhSfWKW3z3qZO0AJaHc+YlsLbLopguFTRstmCP+jqFABgUZm9aCkUIlllE6yO6BwAHKVU7JgTFTx1s1UXSL+6ks2GWUOz2RPapwtkOh9RR707rVCJQoct/SLqacu2tWsBPpsLwWAocox63xALWvZZ5PC+2qRca3uRBrRX1eInskFNklNukCCxXGtFnbrWRS0VQu0lQr9WLJ4VVY5aeyY3NdBALKXbcZVA4EPh8BUO7zzwgV3gqBm1FOvc/Vl73yV7zM7T3Bc6PtzQq7eyNwM8rd+7DQ3R0QAOXucIro4UIILJQb+D/8kAoIfDsC/wDeEZL2lJCU7gAAAABJRU5ErkJggg=="},"928462ef-9d6e-4423-ba4d-478eeb7ed696.png":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAASYAAAAZCAIAAAAT/RRBAAADAUlEQVR4Ae1cyZHjMAx0XBOQ45loHIl+E4y2AIokTh1bMsuSW58hcaOJpmU/5jHhAQJAYCACj2maZjxAAAgMQWCaJlBuCNJIAgQYAVAOgwAEhiIAyg2FG8mAACiHGQACQxEA5YbCjWRAAJTDDACBoQgElPv7/Xno5+f3rxdl1c9X1/FKGyhfbakNKaUytur/TxSUJRssgV9Pk18X63Zk7x7VgHOBAAjMc0K5ZHTKmMnZJ14IY2dg9AryFZ2LMxtjZ2D0KpHdkLMouqhDofXM95TfB83toflWBA5QbnuomAeSkOuoZiw5PZEtI2RXKLSe2X675MwT8m9DYD/leKrW+HR47MjBfdjM/Hn2ODWRPdSQXaHQeiZ78tUlMxjtvVN2Q7bPV9cbBDjU4mhUSXKIr4XAbsptE8rP3QYUMeXekMjWQZW6cQ6F1jPcu8aNgLctH+8aQWnXVNx6o+c2EGE1EH44Agnl2v1MCx6JYByq0TIyanr2tM0ha5B3JrLFhJWGQusZ7MlPfcJppNhD2tC60WqeRVqjUbogMUTXRCChXLt4W1fJnWsmRg5Tc6UF2bVnmTgKeXoilTXZiKK7RSjs6mTFfQkGLa1qiSIPeQh1T+tuIMbLA5RUAvFFENhNuUIaMSulwT4x5TvYkQmJKfeGRPYsRNFdFQq7OlyRj701mDkWJzJcZGJJMXva0DFMC+GVEdhPuZhSfWKW3z3qZO0AJaHc+YlsLbLopguFTRstmCP+jqFABgUZm9aCkUIlllE6yO6BwAHKVU7JgTFTx1s1UXSL+6ks2GWUOz2RPapwtkOh9RR707rVCJQoct/SLqacu2tWsBPpsLwWAocox63xALWvZZ5PC+2qRca3uRBrRX1eInskFNklNukCCxXGtFnbrWRS0VQu0lQr9WLJ4VVY5aeyY3NdBALKXbcZVA4EPh8BUO7zzwgV3gqBm1FOvc/Vl73yV7zM7T3Bc6PtzQq7eyNwM8rd+7DQ3R0QAOXucIro4UIILJQb+D/8kAoIfDsC/wDeEZL2lJCU7gAAAABJRU5ErkJggg=="},"8ad97fd2-f7da-4b41-a729-72ddd490c2a2.png":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAASYAAAAZCAIAAAAT/RRBAAADAUlEQVR4Ae1cyZHjMAx0XBOQ45loHIl+E4y2AIokTh1bMsuSW58hcaOJpmU/5jHhAQJAYCACj2maZjxAAAgMQWCaJlBuCNJIAgQYAVAOgwAEhiIAyg2FG8mAACiHGQACQxEA5YbCjWRAAJTDDACBoQgElPv7/Xno5+f3rxdl1c9X1/FKGyhfbakNKaUytur/TxSUJRssgV9Pk18X63Zk7x7VgHOBAAjMc0K5ZHTKmMnZJ14IY2dg9AryFZ2LMxtjZ2D0KpHdkLMouqhDofXM95TfB83toflWBA5QbnuomAeSkOuoZiw5PZEtI2RXKLSe2X675MwT8m9DYD/leKrW+HR47MjBfdjM/Hn2ODWRPdSQXaHQeiZ78tUlMxjtvVN2Q7bPV9cbBDjU4mhUSXKIr4XAbsptE8rP3QYUMeXekMjWQZW6cQ6F1jPcu8aNgLctH+8aQWnXVNx6o+c2EGE1EH44Agnl2v1MCx6JYByq0TIyanr2tM0ha5B3JrLFhJWGQusZ7MlPfcJppNhD2tC60WqeRVqjUbogMUTXRCChXLt4W1fJnWsmRg5Tc6UF2bVnmTgKeXoilTXZiKK7RSjs6mTFfQkGLa1qiSIPeQh1T+tuIMbLA5RUAvFFENhNuUIaMSulwT4x5TvYkQmJKfeGRPYsRNFdFQq7OlyRj701mDkWJzJcZGJJMXva0DFMC+GVEdhPuZhSfWKW3z3qZO0AJaHc+YlsLbLopguFTRstmCP+jqFABgUZm9aCkUIlllE6yO6BwAHKVU7JgTFTx1s1UXSL+6ks2GWUOz2RPapwtkOh9RR707rVCJQoct/SLqacu2tWsBPpsLwWAocox63xALWvZZ5PC+2qRca3uRBrRX1eInskFNklNukCCxXGtFnbrWRS0VQu0lQr9WLJ4VVY5aeyY3NdBALKXbcZVA4EPh8BUO7zzwgV3gqBm1FOvc/Vl73yV7zM7T3Bc6PtzQq7eyNwM8rd+7DQ3R0QAOXucIro4UIILJQb+D/8kAoIfDsC/wDeEZL2lJCU7gAAAABJRU5ErkJggg=="},"f36b7509-376b-429e-bebc-e4d134b3ef04.png":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAASYAAAAZCAIAAAAT/RRBAAADAUlEQVR4Ae1cyZHjMAx0XBOQ45loHIl+E4y2AIokTh1bMsuSW58hcaOJpmU/5jHhAQJAYCACj2maZjxAAAgMQWCaJlBuCNJIAgQYAVAOgwAEhiIAyg2FG8mAACiHGQACQxEA5YbCjWRAAJTDDACBoQgElPv7/Xno5+f3rxdl1c9X1/FKGyhfbakNKaUytur/TxSUJRssgV9Pk18X63Zk7x7VgHOBAAjMc0K5ZHTKmMnZJ14IY2dg9AryFZ2LMxtjZ2D0KpHdkLMouqhDofXM95TfB83toflWBA5QbnuomAeSkOuoZiw5PZEtI2RXKLSe2X675MwT8m9DYD/leKrW+HR47MjBfdjM/Hn2ODWRPdSQXaHQeiZ78tUlMxjtvVN2Q7bPV9cbBDjU4mhUSXKIr4XAbsptE8rP3QYUMeXekMjWQZW6cQ6F1jPcu8aNgLctH+8aQWnXVNx6o+c2EGE1EH44Agnl2v1MCx6JYByq0TIyanr2tM0ha5B3JrLFhJWGQusZ7MlPfcJppNhD2tC60WqeRVqjUbogMUTXRCChXLt4W1fJnWsmRg5Tc6UF2bVnmTgKeXoilTXZiKK7RSjs6mTFfQkGLa1qiSIPeQh1T+tuIMbLA5RUAvFFENhNuUIaMSulwT4x5TvYkQmJKfeGRPYsRNFdFQq7OlyRj701mDkWJzJcZGJJMXva0DFMC+GVEdhPuZhSfWKW3z3qZO0AJaHc+YlsLbLopguFTRstmCP+jqFABgUZm9aCkUIlllE6yO6BwAHKVU7JgTFTx1s1UXSL+6ks2GWUOz2RPapwtkOh9RR707rVCJQoct/SLqacu2tWsBPpsLwWAocox63xALWvZZ5PC+2qRca3uRBrRX1eInskFNklNukCCxXGtFnbrWRS0VQu0lQr9WLJ4VVY5aeyY3NdBALKXbcZVA4EPh8BUO7zzwgV3gqBm1FOvc/Vl73yV7zM7T3Bc6PtzQq7eyNwM8rd+7DQ3R0QAOXucIro4UIILJQb+D/8kAoIfDsC/wDeEZL2lJCU7gAAAABJRU5ErkJggg=="},"7e9f8131-9841-4913-a445-9bb75eb35d04.png":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAASYAAAAZCAIAAAAT/RRBAAADAUlEQVR4Ae1cyZHjMAx0XBOQ45loHIl+E4y2AIokTh1bMsuSW58hcaOJpmU/5jHhAQJAYCACj2maZjxAAAgMQWCaJlBuCNJIAgQYAVAOgwAEhiIAyg2FG8mAACiHGQACQxEA5YbCjWRAAJTDDACBoQgElPv7/Xno5+f3rxdl1c9X1/FKGyhfbakNKaUytur/TxSUJRssgV9Pk18X63Zk7x7VgHOBAAjMc0K5ZHTKmMnZJ14IY2dg9AryFZ2LMxtjZ2D0KpHdkLMouqhDofXM95TfB83toflWBA5QbnuomAeSkOuoZiw5PZEtI2RXKLSe2X675MwT8m9DYD/leKrW+HR47MjBfdjM/Hn2ODWRPdSQXaHQeiZ78tUlMxjtvVN2Q7bPV9cbBDjU4mhUSXKIr4XAbsptE8rP3QYUMeXekMjWQZW6cQ6F1jPcu8aNgLctH+8aQWnXVNx6o+c2EGE1EH44Agnl2v1MCx6JYByq0TIyanr2tM0ha5B3JrLFhJWGQusZ7MlPfcJppNhD2tC60WqeRVqjUbogMUTXRCChXLt4W1fJnWsmRg5Tc6UF2bVnmTgKeXoilTXZiKK7RSjs6mTFfQkGLa1qiSIPeQh1T+tuIMbLA5RUAvFFENhNuUIaMSulwT4x5TvYkQmJKfeGRPYsRNFdFQq7OlyRj701mDkWJzJcZGJJMXva0DFMC+GVEdhPuZhSfWKW3z3qZO0AJaHc+YlsLbLopguFTRstmCP+jqFABgUZm9aCkUIlllE6yO6BwAHKVU7JgTFTx1s1UXSL+6ks2GWUOz2RPapwtkOh9RR707rVCJQoct/SLqacu2tWsBPpsLwWAocox63xALWvZZ5PC+2qRca3uRBrRX1eInskFNklNukCCxXGtFnbrWRS0VQu0lQr9WLJ4VVY5aeyY3NdBALKXbcZVA4EPh8BUO7zzwgV3gqBm1FOvc/Vl73yV7zM7T3Bc6PtzQq7eyNwM8rd+7DQ3R0QAOXucIro4UIILJQb+D/8kAoIfDsC/wDeEZL2lJCU7gAAAABJRU5ErkJggg=="},"31721e00-57fa-45e9-8cc4-f7ef69a324c1.png":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAASYAAAAZCAIAAAAT/RRBAAADAUlEQVR4Ae1cyZHjMAx0XBOQ45loHIl+E4y2AIokTh1bMsuSW58hcaOJpmU/5jHhAQJAYCACj2maZjxAAAgMQWCaJlBuCNJIAgQYAVAOgwAEhiIAyg2FG8mAACiHGQACQxEA5YbCjWRAAJTDDACBoQgElPv7/Xno5+f3rxdl1c9X1/FKGyhfbakNKaUytur/TxSUJRssgV9Pk18X63Zk7x7VgHOBAAjMc0K5ZHTKmMnZJ14IY2dg9AryFZ2LMxtjZ2D0KpHdkLMouqhDofXM95TfB83toflWBA5QbnuomAeSkOuoZiw5PZEtI2RXKLSe2X675MwT8m9DYD/leKrW+HR47MjBfdjM/Hn2ODWRPdSQXaHQeiZ78tUlMxjtvVN2Q7bPV9cbBDjU4mhUSXKIr4XAbsptE8rP3QYUMeXekMjWQZW6cQ6F1jPcu8aNgLctH+8aQWnXVNx6o+c2EGE1EH44Agnl2v1MCx6JYByq0TIyanr2tM0ha5B3JrLFhJWGQusZ7MlPfcJppNhD2tC60WqeRVqjUbogMUTXRCChXLt4W1fJnWsmRg5Tc6UF2bVnmTgKeXoilTXZiKK7RSjs6mTFfQkGLa1qiSIPeQh1T+tuIMbLA5RUAvFFENhNuUIaMSulwT4x5TvYkQmJKfeGRPYsRNFdFQq7OlyRj701mDkWJzJcZGJJMXva0DFMC+GVEdhPuZhSfWKW3z3qZO0AJaHc+YlsLbLopguFTRstmCP+jqFABgUZm9aCkUIlllE6yO6BwAHKVU7JgTFTx1s1UXSL+6ks2GWUOz2RPapwtkOh9RR707rVCJQoct/SLqacu2tWsBPpsLwWAocox63xALWvZZ5PC+2qRca3uRBrRX1eInskFNklNukCCxXGtFnbrWRS0VQu0lQr9WLJ4VVY5aeyY3NdBALKXbcZVA4EPh8BUO7zzwgV3gqBm1FOvc/Vl73yV7zM7T3Bc6PtzQq7eyNwM8rd+7DQ3R0QAOXucIro4UIILJQb+D/8kAoIfDsC/wDeEZL2lJCU7gAAAABJRU5ErkJggg=="},"b1ce5078-bd18-42e0-a39b-195d68a29ec1.png":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAASYAAAAZCAIAAAAT/RRBAAADAUlEQVR4Ae1cyZHjMAx0XBOQ45loHIl+E4y2AIokTh1bMsuSW58hcaOJpmU/5jHhAQJAYCACj2maZjxAAAgMQWCaJlBuCNJIAgQYAVAOgwAEhiIAyg2FG8mAACiHGQACQxEA5YbCjWRAAJTDDACBoQgElPv7/Xno5+f3rxdl1c9X1/FKGyhfbakNKaUytur/TxSUJRssgV9Pk18X63Zk7x7VgHOBAAjMc0K5ZHTKmMnZJ14IY2dg9AryFZ2LMxtjZ2D0KpHdkLMouqhDofXM95TfB83toflWBA5QbnuomAeSkOuoZiw5PZEtI2RXKLSe2X675MwT8m9DYD/leKrW+HR47MjBfdjM/Hn2ODWRPdSQXaHQeiZ78tUlMxjtvVN2Q7bPV9cbBDjU4mhUSXKIr4XAbsptE8rP3QYUMeXekMjWQZW6cQ6F1jPcu8aNgLctH+8aQWnXVNx6o+c2EGE1EH44Agnl2v1MCx6JYByq0TIyanr2tM0ha5B3JrLFhJWGQusZ7MlPfcJppNhD2tC60WqeRVqjUbogMUTXRCChXLt4W1fJnWsmRg5Tc6UF2bVnmTgKeXoilTXZiKK7RSjs6mTFfQkGLa1qiSIPeQh1T+tuIMbLA5RUAvFFENhNuUIaMSulwT4x5TvYkQmJKfeGRPYsRNFdFQq7OlyRj701mDkWJzJcZGJJMXva0DFMC+GVEdhPuZhSfWKW3z3qZO0AJaHc+YlsLbLopguFTRstmCP+jqFABgUZm9aCkUIlllE6yO6BwAHKVU7JgTFTx1s1UXSL+6ks2GWUOz2RPapwtkOh9RR707rVCJQoct/SLqacu2tWsBPpsLwWAocox63xALWvZZ5PC+2qRca3uRBrRX1eInskFNklNukCCxXGtFnbrWRS0VQu0lQr9WLJ4VVY5aeyY3NdBALKXbcZVA4EPh8BUO7zzwgV3gqBm1FOvc/Vl73yV7zM7T3Bc6PtzQq7eyNwM8rd+7DQ3R0QAOXucIro4UIILJQb+D/8kAoIfDsC/wDeEZL2lJCU7gAAAABJRU5ErkJggg=="}}},{"cell_type":"code","source":"selection = [\n    'Physical-BMI',\n    'Physical-Height',\n    'Basic_Demos-Age',\n    'PreInt_EduHx-computerinternet_hoursday',\n    'Physical-Weight',\n    'FGC-FGC_CU',\n    'FGC-FGC_SRL_Zone',\n    'FGC-FGC_SRR_Zone',\n    'BIA-BIA_FFMI',\n    'SDS-SDS_Total_T',\n    'PAQ_A-Season',\n    'FGC-FGC_PU',\n    'BIA-BIA_Frame_num',\n    'Physical-Systolic_BP',\n    'PAQ_C-Season',\n    'FGC-FGC_TL_Zone',\n    'FGC-FGC_TL',\n    'CGAS_Hoursday',\n]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:07:03.024385Z","iopub.execute_input":"2024-12-21T06:07:03.024647Z","iopub.status.idle":"2024-12-21T06:07:03.037560Z","shell.execute_reply.started":"2024-12-21T06:07:03.024613Z","shell.execute_reply":"2024-12-21T06:07:03.036427Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Final features","metadata":{}},{"cell_type":"code","source":"selection","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:07:03.038639Z","iopub.execute_input":"2024-12-21T06:07:03.039028Z","iopub.status.idle":"2024-12-21T06:07:03.053961Z","shell.execute_reply.started":"2024-12-21T06:07:03.038988Z","shell.execute_reply":"2024-12-21T06:07:03.052941Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"#missing value\nnull = train_df[selection].isna().sum().sort_values(ascending = False).head(46)\nnull = pd.DataFrame(null)\nnull = null.rename(columns= {0:'Missing'})\nnull.style.background_gradient(cmap='YlOrRd')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:07:03.055010Z","iopub.execute_input":"2024-12-21T06:07:03.055377Z","iopub.status.idle":"2024-12-21T06:07:03.081001Z","shell.execute_reply.started":"2024-12-21T06:07:03.055343Z","shell.execute_reply":"2024-12-21T06:07:03.079802Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"columns_to_include = selection + ['PCIAT-PCIAT_Total', 'sii']\ncorrelation_matrix = train_df[columns_to_include].corr()\n    \n# Drawing heatmap\nplt.figure(figsize=(15, 10))\nsns.heatmap(correlation_matrix, annot=True, fmt=\".2f\", cmap='flare', cbar=True)\nplt.title(f\"Correlation Matrix Heatmap\", fontsize=16)\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:07:03.082021Z","iopub.execute_input":"2024-12-21T06:07:03.082316Z","iopub.status.idle":"2024-12-21T06:07:04.446462Z","shell.execute_reply.started":"2024-12-21T06:07:03.082289Z","shell.execute_reply":"2024-12-21T06:07:04.445153Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## 2. Building the ML MODEL","metadata":{}},{"cell_type":"code","source":"X = train_df[selection]\ny = train_df['sii']\n\ntest = test_df[selection]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:07:04.447667Z","iopub.execute_input":"2024-12-21T06:07:04.448044Z","iopub.status.idle":"2024-12-21T06:07:04.455783Z","shell.execute_reply.started":"2024-12-21T06:07:04.448015Z","shell.execute_reply":"2024-12-21T06:07:04.454647Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def quadratic_kappa(y_true, y_pred):\n    return cohen_kappa_score(y_true, y_pred, weights='quadratic')\nkappa_scorer = make_scorer(quadratic_kappa)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:07:04.456922Z","iopub.execute_input":"2024-12-21T06:07:04.457238Z","iopub.status.idle":"2024-12-21T06:07:04.470670Z","shell.execute_reply.started":"2024-12-21T06:07:04.457212Z","shell.execute_reply":"2024-12-21T06:07:04.469555Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Classification model approach","metadata":{}},{"cell_type":"code","source":"params = {\n    'max_depth': 3, \n    'n_estimators': 202,\n    'learning_rate': 0.07956777025142073, \n    'subsample': 0.8197358255094112, \n    'colsample_bytree': 0.645036755035947\n}\nskf = StratifiedKFold(n_splits=10)\nclf = xgb.XGBClassifier(**params)\n\ntrain_df.info()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:07:04.471729Z","iopub.execute_input":"2024-12-21T06:07:04.471994Z","iopub.status.idle":"2024-12-21T06:07:04.506671Z","shell.execute_reply.started":"2024-12-21T06:07:04.471972Z","shell.execute_reply":"2024-12-21T06:07:04.505464Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"scores = cross_val_score(clf, X, y, cv=skf, scoring=kappa_scorer, error_score='raise')\nprint(\"QWK Scores:\", scores)\nprint(\"Mean QWK Score:\", np.mean(scores))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:07:04.507859Z","iopub.execute_input":"2024-12-21T06:07:04.508225Z","iopub.status.idle":"2024-12-21T06:07:09.165904Z","shell.execute_reply.started":"2024-12-21T06:07:04.508195Z","shell.execute_reply":"2024-12-21T06:07:09.163731Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"clf.fit(X,y)\nfeature_imp = pd.Series(clf.feature_importances_,index=X.columns).sort_values(ascending=False)\nsns.barplot(x=feature_imp, y=feature_imp.index)\nplt.xlabel('Feature Importance Score')\nplt.title(\"Feature Importances\")\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:07:09.166542Z","iopub.execute_input":"2024-12-21T06:07:09.166826Z","iopub.status.idle":"2024-12-21T06:07:10.025588Z","shell.execute_reply.started":"2024-12-21T06:07:09.166800Z","shell.execute_reply":"2024-12-21T06:07:10.024476Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"preds = clf.predict(test)\nprint(preds)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:07:10.026828Z","iopub.execute_input":"2024-12-21T06:07:10.027121Z","iopub.status.idle":"2024-12-21T06:07:10.046680Z","shell.execute_reply.started":"2024-12-21T06:07:10.027095Z","shell.execute_reply":"2024-12-21T06:07:10.044567Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Regression Model Approach","metadata":{}},{"cell_type":"code","source":"y = train_df['PCIAT-PCIAT_Total']","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:07:10.047333Z","iopub.execute_input":"2024-12-21T06:07:10.047602Z","iopub.status.idle":"2024-12-21T06:07:10.064924Z","shell.execute_reply.started":"2024-12-21T06:07:10.047577Z","shell.execute_reply":"2024-12-21T06:07:10.064026Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def convert(scores):\n    scores = np.array(scores) * 1.25342583\n    bins = np.zeros_like(scores)\n    bins[scores <= 30] = 0\n    bins[(scores > 30) & (scores < 50)] = 1\n    bins[(scores >= 50) & (scores < 80)] = 2\n    bins[scores >= 80] = 3\n    return bins","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:07:10.065570Z","iopub.execute_input":"2024-12-21T06:07:10.065851Z","iopub.status.idle":"2024-12-21T06:07:10.082988Z","shell.execute_reply.started":"2024-12-21T06:07:10.065825Z","shell.execute_reply":"2024-12-21T06:07:10.081587Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"- The parameter `1.2536183` is calibrated to yield optimal results.","metadata":{}},{"cell_type":"code","source":"def quadratic_kappa(y_true, y_pred):\n    y_true_cat = convert(y_true)\n    y_pred_cat = convert(y_pred)\n    return cohen_kappa_score(y_true_cat, y_pred_cat, weights='quadratic')\n\nkappa_scorer = make_scorer(quadratic_kappa, greater_is_better=True)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:07:10.084266Z","iopub.execute_input":"2024-12-21T06:07:10.084587Z","iopub.status.idle":"2024-12-21T06:07:10.102029Z","shell.execute_reply.started":"2024-12-21T06:07:10.084558Z","shell.execute_reply":"2024-12-21T06:07:10.100631Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"params = {'max_depth': 3, \n          'n_estimators': 59, \n          'learning_rate': 0.07327652118259573, \n          'subsample': 0.5968194045365575, \n          'colsample_bytree': 0.9123669348125403\n         }\nmodel = xgb.XGBRegressor(**params)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:07:10.103179Z","iopub.execute_input":"2024-12-21T06:07:10.103934Z","iopub.status.idle":"2024-12-21T06:07:10.119418Z","shell.execute_reply.started":"2024-12-21T06:07:10.103890Z","shell.execute_reply":"2024-12-21T06:07:10.118107Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"scores = cross_val_score(model, X, y, cv=skf, scoring=kappa_scorer)\nprint(\"QWK Scores:\", scores)\nprint(\"Mean QWK Score:\", np.mean(scores))","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:07:10.120637Z","iopub.execute_input":"2024-12-21T06:07:10.121040Z","iopub.status.idle":"2024-12-21T06:07:11.996265Z","shell.execute_reply.started":"2024-12-21T06:07:10.121001Z","shell.execute_reply":"2024-12-21T06:07:11.995476Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"model.fit(X,y)\nfeature_imp = pd.Series(model.feature_importances_,index=X.columns).sort_values(ascending=False)\nfeature_imp","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:07:11.996914Z","iopub.execute_input":"2024-12-21T06:07:11.997167Z","iopub.status.idle":"2024-12-21T06:07:12.080342Z","shell.execute_reply.started":"2024-12-21T06:07:11.997135Z","shell.execute_reply":"2024-12-21T06:07:12.079532Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"sns.barplot(x=feature_imp, y=feature_imp.index)\nplt.xlabel('Feature Importance Score')\nplt.title(\"Feature Importances\")\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:07:12.081485Z","iopub.execute_input":"2024-12-21T06:07:12.081806Z","iopub.status.idle":"2024-12-21T06:07:12.512748Z","shell.execute_reply.started":"2024-12-21T06:07:12.081778Z","shell.execute_reply":"2024-12-21T06:07:12.511589Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":" # <p style=\"padding:15px; background-color:#81BFDA; font-family:arial; font-weight:bold; color:white; font-size:100%; letter-spacing: 2px; text-align:left; border-radius: 10px 10px\">V. Conclusion</p>\n- **Based on the correlation matrix, it can be observed that the correlation of the parameters with `PCIAT-PCIAT_Total` is stronger. Additionally, the cross-validation results of the regression model outperform those of the classification model. Therefore, we choose the XGBoost Regressor model for prediction.**","metadata":{}},{"cell_type":"code","source":"model.fit(X,y)\npreds = model.predict(test)\npreds = convert(preds) # convert raw scores to sii categories if using regressor\npreds = pd.Series(preds)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:07:12.513788Z","iopub.execute_input":"2024-12-21T06:07:12.514053Z","iopub.status.idle":"2024-12-21T06:07:12.584771Z","shell.execute_reply.started":"2024-12-21T06:07:12.514031Z","shell.execute_reply":"2024-12-21T06:07:12.583944Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"Submission = pd.DataFrame({\n    'id': sample['id'],\n    'sii': preds\n})\nSubmission.to_csv('submission.csv', index=False)\nprint(Submission['sii'].value_counts())","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-21T06:07:12.585402Z","iopub.execute_input":"2024-12-21T06:07:12.585653Z","iopub.status.idle":"2024-12-21T06:07:12.596595Z","shell.execute_reply.started":"2024-12-21T06:07:12.585629Z","shell.execute_reply":"2024-12-21T06:07:12.594758Z"}},"outputs":[],"execution_count":null}]}