{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "ebf9ad89-fceb-4097-8ca7-652640702196", "metadata": {}, "outputs": [], "source": [ "# Import all necessary libraries \n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns\n", "import os\n", "from sklearn.model_selection import train_test_split, GridSearchCV\n", "from sklearn.preprocessing import StandardScaler, PolynomialFeatures\n", "from sklearn.metrics import (\n", " accuracy_score, precision_score, recall_score, f1_score,\n", " classification_report, confusion_matrix\n", ")\n", "from sklearn.linear_model import LogisticRegression\n", "from sklearn.naive_bayes import GaussianNB\n", "from sklearn.discriminant_analysis import LinearDiscriminantAnalysis, QuadraticDiscriminantAnalysis\n", "from sklearn.neighbors import KNeighborsClassifier\n", "import warnings\n", "warnings.filterwarnings('ignore')\n", "import pickle" ] }, { "cell_type": "code", "execution_count": 2, "id": "6d632d88-ff88-4d59-b75d-d5408b02cbcc", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Dataset 1 - Weak Link Scores:\n", "Shape: (2096, 17)\n", "Columns: ['ID', 'Date', 'SCORE', 'ForwardHead', 'LeftArmFallForward', 'RightArmFallForward', 'LeftShoulderElevation', 'RightShoulderElevation', 'ExcessiveForwardLean', 'LeftAsymmetricalWeightShift', 'RightAsymmetricalWeightShift', 'LeftKneeMovesInward', 'RightKneeMovesInward', 'LeftKneeMovesOutward', 'RightKneeMovesOutward', 'LeftHeelRises', 'RightHeelRises']\n", "\n", "First few rows:\n", " ID Date SCORE \\\n", "0 cf0e95ab-d6ec-475a-9cc0-c9444b8dd080.Kinect 7/19/2018 0.612532 \n", "1 6210cc6d-575d-4e9f-bab1-4fe1da2a30a3.Kinect 7/30/2018 0.388809 \n", "\n", " ForwardHead LeftArmFallForward RightArmFallForward \\\n", "0 0.31 1.34 1.15 \n", "1 1.49 1.42 1.39 \n", "\n", " LeftShoulderElevation RightShoulderElevation ExcessiveForwardLean \\\n", "0 0.33 0.49 0.00 \n", "1 0.00 0.00 1.08 \n", "\n", " LeftAsymmetricalWeightShift RightAsymmetricalWeightShift \\\n", "0 0.0 0.08 \n", "1 0.1 0.00 \n", "\n", " LeftKneeMovesInward RightKneeMovesInward LeftKneeMovesOutward \\\n", "0 0.0 0.0 0.0 \n", "1 0.0 0.0 0.0 \n", "\n", " RightKneeMovesOutward LeftHeelRises RightHeelRises \n", "0 0.77 0.0 0.0 \n", "1 0.40 0.0 0.0 \n", "\n", "\n", "\n", "Dataset 2 - Movement Features:\n", "Shape: (2094, 43)\n", "Columns: ['AimoScore', 'No_1_Angle_Deviation', 'No_2_Angle_Deviation', 'No_3_Angle_Deviation', 'No_4_Angle_Deviation', 'No_5_Angle_Deviation', 'No_6_Angle_Deviation', 'No_7_Angle_Deviation', 'No_8_Angle_Deviation', 'No_9_Angle_Deviation']...\n", "\n", "First few rows:\n", " AimoScore No_1_Angle_Deviation No_2_Angle_Deviation \\\n", "0 0.323667 0.538020 0.815878 \n", "1 0.323699 0.443807 0.306552 \n", "\n", " No_3_Angle_Deviation No_4_Angle_Deviation No_5_Angle_Deviation \\\n", "0 0.346724 0.382114 0.302248 \n", "1 0.823529 0.188905 0.497370 \n", "\n", " No_6_Angle_Deviation No_7_Angle_Deviation No_8_Angle_Deviation \\\n", "0 0.947872 0.275945 0.52176 \n", "1 0.140124 0.664275 0.52176 \n", "\n", " No_9_Angle_Deviation ... No_20_NASM_Deviation No_21_NASM_Deviation \\\n", "0 0.457198 ... 0.656624 0.642276 \n", "1 0.729316 ... 0.721186 0.826399 \n", "\n", " No_22_NASM_Deviation No_23_NASM_Deviation No_24_NASM_Deviation \\\n", "0 0.552846 0.648972 0.578192 \n", "1 0.805356 0.848876 0.889048 \n", "\n", " No_25_NASM_Deviation No_1_Time_Deviation No_2_Time_Deviation \\\n", "0 0.560019 0.821616 0.818747 \n", "1 0.816834 0.307987 0.248207 \n", "\n", " EstimatedScore ID \n", "0 0.209947 0003cdcc-86ed-494a-a3b5-90d09e96e06b.Kinect \n", "1 0.457198 003115c4-bdb8-491c-b571-8fcebdecf8ed.Kinect \n", "\n", "[2 rows x 43 columns]\n" ] } ], "source": [ "# Configuration \n", "\n", "REPO_ROOT = os.path.abspath(os.path.join(os.getcwd(), \"..\"))\n", "DATA_DIR = os.path.join(REPO_ROOT, \"Datasets_all\")\n", "\n", "# Dataset 1: New dataset with Weak link scores with 14 categories\n", "weaklink_scores_df = pd.read_csv(os.path.join(DATA_DIR,\"scores_and_weaklink.csv\"))\n", "\n", "# Dataset 2: Movement features 38 features\n", "movement_features_df = pd.read_csv(os.path.join(DATA_DIR, \"aimoscores.csv\"))\n", "\n", "print(\"Dataset 1 - Weak Link Scores:\")\n", "print(f\"Shape: {weaklink_scores_df.shape}\")\n", "print(f\"Columns: {list(weaklink_scores_df.columns)}\")\n", "print(\"\\nFirst few rows:\")\n", "print(weaklink_scores_df.head(2))\n", "\n", "print(\"\\n\\n\")\n", "\n", "print(\"Dataset 2 - Movement Features:\")\n", "print(f\"Shape: {movement_features_df.shape}\")\n", "print(f\"Columns: {list(movement_features_df.columns)[:10]}...\") \n", "print(\"\\nFirst few rows:\")\n", "print(movement_features_df.head(2))" ] }, { "cell_type": "code", "execution_count": 3, "id": "df7685aa-319d-45e2-9b33-9e0758654626", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Weakest Link Distribution:\n", "WeakestLink\n", "LeftArmFallForward 629\n", "RightArmFallForward 472\n", "RightKneeMovesOutward 278\n", "RightShoulderElevation 250\n", "ForwardHead 117\n", "ExcessiveForwardLean 100\n", "LeftAsymmetricalWeightShift 73\n", "LeftShoulderElevation 58\n", "LeftKneeMovesOutward 49\n", "RightKneeMovesInward 45\n", "RightAsymmetricalWeightShift 19\n", "LeftKneeMovesInward 3\n", "LeftHeelRises 2\n", "RightHeelRises 1\n", "Name: count, dtype: int64\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABJ8AAAJOCAYAAAAZP6bBAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjcsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvTLEjVAAAAAlwSFlzAAAPYQAAD2EBqD+naQAA8vZJREFUeJzs3QeYnUX5sPFJobdQpFcVhVAFpDcBCeWPlIiAlKBIkx660kFAihSlqCCggAhKkSJVBKUXUYoiKApIByGAUnO+6558z8nsydkkwB6yu3P/rmtJsudkszu87zszzzzzzIBGo9FIkiRJkiRJUgcM7MQXlSRJkiRJkgw+SZIkSZIkqaPMfJIkSZIkSVLHGHySJEmSJElSxxh8kiRJkiRJUscYfJIkSZIkSVLHGHySJEmSJElSxxh8kiRJkiRJUscYfJIkSZIkSVLHGHySJGkS+N3vfpcGDBjQ/PjnP/85yf8/8D2U3xPfYzjssMOan59//vlTb3Duued2+X77m2uvvTatttpqaYYZZmj+jEOGDEn92bbbbtv8WVdfffVUK+6xaAfuvY+qv98rkqTez+CTJEk9EDziY/LJJ8+Bgk9+8pNprbXWSocffnh66qmnOt6+TNLje2Dy3h/UPll+8MEH04YbbphuvfXWNGrUqIn+e0svvXSzzdZbb71xXt966627tOs//vGPLq/fd999XV7/zW9+0yM/T19XtgnX5kcJ6vZEMEmSpL5m8KT+BiRJ6i/efffd/EGw4Iknnkg33XRTOvLII9PBBx+cPwYOHLvm86lPfSodf/zxzT/PNNNMaVLjeyi/J77H3uzzn/98l++3P7n00kvTO++8k38/xRRTpD333DPNMsssacoppxzv31t11VXT/fffn39/2223pdGjR3e57n7/+993eT9/Jlgabrnllubv+XsrrbRSj/1Mmnjf/va302uvvZZ/v+KKK9p0kqQ+z+CTJEk9YLPNNkvLLLNMnjAy+b/uuuvS+++/nz/IdHjuuefSGWec0Xz/PPPMk/bZZ59e0fYEORqNRpp++ul7zfc0MRZZZJH80R/961//6hJkO/bYYyfq7xF8Ovnkk/PvCYI+8MADaamllsp/Jguv/Logs2rEiBFd/hyWWGKJfE3o47f99tvb7JKkfsVtd5Ik9YB11lknB27IdLr66qvztqkFFlig+fqZZ56Za/hMTM2nN998Mx1xxBE5aDDddNOlySabLM0666xpySWXzJPS+DpRh6nMVjnvvPPaft3WrXkPPfRQ2mijjdLMM8+cM2v+8pe/jLfmU6vXX3897b333jmIRjbO0KFD0w9+8IMcxJrYLYHtttbF9/C1r32ty3vbbVua0Na8//3vf+mkk07K2Tszzjhj3hY522yz5e1oF1988Tjvb/1/wpa0008/PS2++OL5Z+T/wTe+8Y30n//8J30QBCB/8pOfpDXXXDNnL/H/k3b/whe+kH784x+n9957b5w2Oeecc5qf+8Mf/jDR2ypXWWWVLm1RZjqVgaU55phjnNf5f8e/VQaySrTH7rvvnhZeeOE0zTTTpKmmmir/fz/ggAPSSy+91LY9t9tuu3wd8+9xnU099dTp05/+dP7/yz0ysd5444208sorN9uBdowML/zpT39KX//613O2Ht/XtNNOmz73uc+lo48+Ot9PrQjC7bjjjmnBBRfM7+f/71xzzZWvlZEjR+b7obx+S3zvna5/1l3Np05co2TVxdcbNGhQvlbBdUkgc4UVVsi1xgYPHpyvWwK+22yzTbrooos68rNLkvqphiRJ+sBuvvlmoizNj3POOWec99x9991d3rP22mt3+/efeOKJ5murr756l9daPzbbbLP8vkMPPXS87yu/7mqrrdb83Oc+97nGNNNM0+V9f/zjH/N7y8/xPYby35ptttkayyyzTNt/b7fdduvSBuW/O2LEiC6v0Wbl30Xr99Dug++lu78fnn322cYiiywy3q8zfPjwxrvvvtvt/5OVV1657d9bddVVJ/o6eeONN/L7x/d98O+8/vrrbX+m1o/WNmxn6NChzfdvsskmzc/vuOOO+XPTTTddl/+fzz33XH79wQcf7PJv/fKXv2z+3csvv7wx9dRTd/t9zTXXXI1HHnmky/ex9957j/dnmXzyyRs33HBDl7/Dzxevc+3gv//9b5fraNZZZ238+c9/bv6d008/vTF48OBu/x3ag+shPP/8841PfOIT4/3ezjjjjPze8t9t9zHffPNN8P9H6zUd1+/48HXbvf/DXqPd3Sv77rtv83ODBg1qXHDBBW3/X7T7WG655Sb4c0iSFNx2J0lSh7Bdiq1LZGVE5glZMGQXdIeMi8g4ouYOGQaf+cxncmYJdaTKbKS11147Z3iwnS8KR7P1jy2A46sl9cc//jFn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uunII49Mp512Wg5ISZIkSZIkqY8En+aZZ5609tprp5/97GfpzTff7LGvy7Y6spfWWmutLp+/77770rvvvtvl8wsttFCad9550x133JH/zK+LLbZYmm222ZrvGTZsWBo1alR6+OGHe+x7lCRJkiRJUoeDT0cccUTe9jZixIgc7Nlqq63Stddem0aPHv2hv+ZFF12U7r///nTMMceM89pzzz2XJp988jRkyJAun+ff5rV4Txl4itfjtXbefvvtHJwqPyRJkiRJkjSJg0/f+ta30kMPPZQzknbaaaf0u9/9Lq233nppzjnnzLWZ7r333g/09Z566qm0xx57pAsuuCBNOeWU6eNCoGuGGWZofpDRJUmSJEmSpF5ScPxzn/tcOuGEE3Lw6IYbbshb5qjFtNxyy6WhQ4emo48+Op9ANyEEsV544YW01FJLpcGDB+cPioqfeuqp+fdkMFG36dVXX+3y9zjtbvbZZ8+/59fW0+/iz/GeVgceeGCuJxUf/BySJEmSJEnqZafdDRgwIK2yyio5+2n55ZdPjUYjPfbYY+mwww5Ln/zkJ9Omm2463iLla665ZnrwwQfTAw880PxYZpllcvHx+P1kk02WbrrppubfefTRR3Nga4UVVsh/5le+BkGsQEBs+umnz4GwdqaYYor8evkhSZIkSZKkD2Zw6qCbb745b5f71a9+lWsmUfSbbCgCR2QtkQlFBtTWW2+dbrzxxrZfY7rppkuLLrpol89NM800aeaZZ25+frvttksjR45MM800Uw4S7bbbbjngRLALFEAnyMS/c9xxx+U6TwcddFAuYk6QSZIkSZIkSX0k+PSnP/0pB5x+/vOf58LjbGv7xje+kbbZZpscfCrts88+uY4Tv34UJ510Uho4cGAaPnx4LhTOSXann3568/VBgwalq666Ku288845KEXwioLoFEeXJEmSJElSHwo+UetpqqmmShtttFEOOH3xi1/MgaHuLLLIIs3tcROLIuYlAlinnXZa/ujOfPPNl6655poP9O9IkiRJkiSplwWffvKTn6Qvf/nLadppp52o93/hC1/IH5IkSZIkSep/ejz4tO222/b0l5QkSZIkSVIf1eOn3Z166qm55lJ31l133XTGGWf09D8rSZIkSZKkGoJPZ599dj5Zrju89qMf/ain/1lJkiRJkiTVEHz6+9//nhZeeOFuX19ooYXyeyRJkiRJktT/9XjwafLJJ0/PPfdct68/++yz4z39TpIkSZIkSf1Hj0eBll9++XTuueem119/fZzXXnvttXTOOefk90iSJEmSJKn/6/HT7g499NC02mqrpSWXXDLtueeeaZFFFsmff+ihh9LJJ5+cM58uvPDCnv5nJUmSJEmSVEPwabnllktXXnll2nHHHdMee+yRBgwYkD/faDTSAgsskH7961+nFVZYoaf/WUmSJEmSJNUQfMIXv/jF9Pjjj6c//vGPzeLin/rUp9JSSy3VDEZJkiRJkiSp/+tI8AkUFV966aXzhyRJkiRJkurUseDTI488kv7xj3+k//znP3nLXattttmmU/+0JEmSJEmS+mvwiW12W221Vbr77rvbBp3A1juDT5IkSZIkSf1fjwefKDT+4IMP5pPtVllllTTjjDP29D8hSZIkSZKkWoNPt912W/rWt76Vdtttt57+0pIkSZIkSepjBvb0F5xlllnSDDPM0NNfVpIkSZIkSX1Qjwefdtppp3T++een999/v6e/tCRJkiRJkmrfdveZz3wmB56WWGKJ9PWvfz3NM888adCgQeO8b5NNNunpf1qSJEmSJEn9Pfi02WabNX+/zz77dHvanZlRkiRJkiRJ/V+PB59uvvnmnv6SkiRJkiRJ6qN6PPi02mqr9fSXlCRJkiRJUh/V48Gn8Pbbb6f7778/vfDCC2mllVbKp+BJkiRJkiSpLj1+2h1OPfXUNMccc6SVV145Fxb/85//nD//0ksv5SDUT37yk078s5IkSZIkServwadzzjkn7bnnnmmdddZJZ599dmo0Gs3XCDytscYa6aKLLurpf1aSJEmSJEk1BJ9OPPHEtOGGG6YLL7wwbbDBBuO8vvTSS6eHH364p/9ZSZIkSZIk1RB8evzxx9O6667b7eszzTRTevnll3v6n5UkSZIkSVINwachQ4bk2k7deeSRR9Lss8/e0/+sJEmSJEmSagg+rbfeeulHP/pRevXVV8d5je12P/7xj9OXvvSlnv5nJUmSJEmSVEPw6aijjkrvv/9+WnTRRdNBBx2UBgwYkM4777y01VZbpWWWWSbNOuus6ZBDDunpf1aSJEmSJEk1BJ/mnHPOdN999+XT7n7xi1/k0+5+9rOfpSuvvDJtscUW6c4778yn3kmSJEmSJKn/G9yJL0p201lnnZU/XnzxxTR69Oj0iU98Ig0c2OOxLkmSJEmSJNUWfCoRdJIkSZIkSVKdejz4dMQRR0zwPdSBOvjgg3v6n5YkSZIkSVJ/Dz4ddthh4w06UQPK4JMkSZIkSVIderwIE/WdWj/ee++99Pe//z3ttdde+cS7F154oaf/WUmSJEmSJPVCH0sFcAqNL7DAAumEE05ICy64YNptt90+jn9WkiRJkiRJk9jHfvzcqquumq655pqP+5+VJEmSJElSDcGne++9N2dCSZIkSZIkqf/r8YLjP/3pT9t+/tVXX0233npruvTSS9M3vvGNnv5nJUmSJEmSVEPwadttt+32tVlmmSUdcMAB6ZBDDunpf1aSJEmSJEk1BJ+eeOKJcT43YMCANOOMM6bpppuup/85SZIkSZIk1RR8mm+++Xr6S0qSJEmSJKmPsvK3JEmSJEmS+k7wiZPsBg0a9IE+Bg8efwLWGWeckRZffPE0/fTT548VVlgh/eY3v2m+/tZbb6VddtklzTzzzGnaaadNw4cPT88//3yXr/Hkk0+m9ddfP0099dRp1llnTfvuu2967733evrHlyRJkiRJUie33VFM/PLLL08PP/xwGjZsWPrsZz+bP//Xv/41XX/99WnRRRdNG2200Qf6mnPPPXc69thj04ILLpgajUY677zz0oYbbpj++Mc/pkUWWSTttdde6eqrr06XXHJJmmGGGdKuu+6aNtlkk3Tbbbflv//+++/nwNPss8+ebr/99vTss8+mbbbZJk022WTp6KOP7ukmkCRJkiRJUqeCT3POOWd64YUX0kMPPdQMPIW//OUvaY011sjv2X777Sf6a26wwQZd/vyd73wnZ0PdeeedOTB19tlnpwsvvDB/bZxzzjlp4YUXzq8vv/zyOej1yCOPpBtvvDHNNttsackll0xHHnlk2n///dNhhx2WJp988h766SVJkiRJktTRbXfHH398zjxqDTyBgBCvHXfccR/665PFdNFFF6U333wzb7+777770rvvvpvWWmut5nsWWmihNO+886Y77rgj/5lfF1tssRx4CmRljRo1KmdotfP222/n18sPSZIkSZIkTeLg09NPP523s3WH13jPB/Xggw/mek5TTDFF2mmnndJll12Whg4dmp577rmcuTRkyJAu7yfQxGvg1zLwFK/Ha+0cc8wxeQtffMwzzzwf+HuWJEmSJEmqXY8Hn6jpdPrpp6d///vf47xG0InXyEL6oMikeuCBB9Jdd92Vdt555zRixIi8la5TDjzwwPTaa681P5566qmO/VuSJEmSJEn9VY/XfDrppJPylrbPfOYzaeONN06f/vSn8+cfe+yxXIicguHnn3/+B/66ZDfF11p66aXTPffck0455ZS02WabpXfeeSe9+uqrXbKfOO2OAuPg17vvvrvL14vT8OI9rciw4kOSJEmSJEm9KPi08sor5+ykgw8+OG+N+9///pc/P9VUU+Wg1OGHH/6hMp9ajR49OtdlIhDFVr6bbropDR8+PL/26KOPpieffDLXhAK/UqScQuizzjpr/twNN9yQpp9++rx1T5IkSZIkSX0k+BRb7wg8ESB68cUX8+c+8YlPpIEDB37oLXDrrrtuLiL++uuv55Ptfve736Xrrrsu12Pabrvt0siRI9NMM82UA0q77bZbDjhx0h3WXnvtHGTaeuutc7Fz6jwddNBBaZdddjG7SZIkSZIkqa8FnwLBpimnnDIXCv+wgSeQsbTNNtukZ599NgebFl988Rx4+uIXv9jc6sfXJ/OJbCgyrKgtFQYNGpSuuuqqXCuKoNQ000yTa0YdccQRPfJzSpIkSZIk6WMMPt177705s+jWW2/N9Ziuv/76tMYaa6SXXnopZynttddeafXVV5/or3f22WeP93UCXKeddlr+6M58882Xrrnmmg/0c0iSJEmSJKmXnXZ3++2357pPFBjfaqut8ta7MMsss+ST4374wx/29D8rSZIkSZKkGoJP3/rWt9LCCy+cHnnkkXT00UeP8/oXvvCFXJBckiRJkiRJ/V+PB5/uueee9LWvfS0X8h4wYMA4r88111y54LckSZIkSZL6vx4PPk022WRdttq1+ve//50LkEuSJEmSJKn/6/Hg0/LLL59++ctftn3tzTffTOecc05abbXVevqflSRJkiRJUg2n3R1++OE5uLT++uunLbbYIn/uT3/6U/rHP/6RTjjhhPTiiy+mgw8+uKf/WUkTYdiRV/fadrru4PUn9bcgSZIkSeoLwaflllsuXXPNNWnnnXdO22yzTf7c3nvvnX/91Kc+lV9bfPHFe/qflSRJkiRJUn8PPjUajfT666+nFVdcMT366KPpgQceSI899liuAUXgaemll25bhFySJEmSJEn9U48Gn955550000wzpaOPPjrtt99+ackll8wfkiRJ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t77Be9V285rrG7xXbTuvub5j+l46359hhhkm+J5qgk8gk2nEiBFpmWWWScsuu2w6+eST05tvvplPv5MkSZIkSVLPqyr4tNlmm6UXX3wxHXLIIem5555LSy65ZLr22mvHKUIuSZIkSZKknlFV8AlssWu3za6vY4vgoYceOs5WQdluXnO9i/eqbec11zd4r9p2XnN9h/er7eY11zd4r9bddtWcdidJkiRJkqSP38BJ8G9KkiRJkiSpEgafJEmSJEmS1DEGnyRJkiRJktQxBp/UL1nKzLaTJEl9n2M6SeofDD71AXa6H8xLL72UBgwYYLt9SLTd6NGjP+xflyRJ+shuueWW/Ktjug/H+YOk3sbgUy917rnnpoMOOij/3k534nH85JxzzpmefPJJ2+0D+uY3v5lWWmml/PuBAwcagFLHXXfddemtt96ypfWxTsbef/99W1wfm4svvjhdfvnltvgHdOyxx6Zddtkl/exnP8t/diz8wZ91tJkm3jHHHJMOOeQQg3ZSBxl86oX++9//pt///vfp2muvTd/97nfz5+x0J85WW22VVllllbTqqqumf/3rX7bbRHrvvfdyu73wwgtpo402yp8zAKVO+vvf/57WXXfdtOeee6a3337bxtbH4tlnn02DBg3Kv//JT36S/vSnP9ny6uj1dvTRR6cf/vCHeUynibfZZpulBRdcMN+n5513Xv6cY+GJc9ddd6X7778//36HHXZIJ554opfeRJhqqqnSUUcdlY4//ngDUB8yy+6JJ55Izz//vNfbRBpd4U4Tg0+90NRTT52+853v5GDAlVdemY488sj8eTvdCWOgQtbY0KFD0+qrr56efvpp220iDB48OH35y19OJ5xwQnr88cfThhtumD9vAOrDdxymu4/fpz71qfTrX/86XXDBBWmvvfZK//vf/ybmUlVxbT366KM5ePLII4/YLhNwzz335EHx3HPPnSdl++67b/r2t7+dhgwZYtt9gGvuP//5T3r55Zdts4k0xxxz5MATAfbTTz89XXXVVbbdRHjnnXfSAgsskNtuxhlnTBdeeGE6//zz82uOhbt3+OGHpzvvvDNtsskmeTy3zTbb5LZba621vO4m4hnHYtiZZ56ZDjzwwHTccceld99913b7AFl2ZHhuvvnm6Re/+EV6/fXXbbuJmD8MHDgmFPPjH/84XX311VW0mcGnXngDk4Uy++yzp2233TYtvPDC6aKLLkonnXRSft1Od8IBgD/84Q9pjTXWyJlPw4YNcwveRLbdZJNNlj/IfCLoueWWW+bPG4Aa//0aHQedLoEUtpLFvVrjisbEthtt83//93/pkksuySvbRxxxRHrzzTcn9bfWJ3Bt/epXv0orrrhi2njjjdMKK6yQJ2lqb/nll0977LFHmm666dKOO+6YF3Z+9KMf5UnafPPNZ6B4Iq+5yy67LK2//vppmWWWSfvvv3964IEHvOTGg2ccWzyXW265XEZh1KhR+T698cYbbbcJtNvkk0+ef//HP/4x36MEj9mGx3g4rkcXeLpaZ5118hiE5x3jkJtuuin/+ayzzkpLLLFEfo9t1h7tEm3zla98JW+9IwDF/eo4buL6BxYTt9hiizx3YDGb/rZsX3U/f9h///3TYYcdlhcTWeDp7ww+9dIsFCZk++23X16p/fe//51TZul4Yac7rriBaTNuYmy//fbN7WTWgJpw2+299945G4ABMpNaAlBmQE1cPQXajtR2BisjR45M2223XbNtHbh0f92xysPkgmwUthiTiWINqPFfc3Gowre+9a28sk09FH6/884753oV6oogE1sAbr/99jTLLLOkmWeeOWfZcZ2xJUoT5957783PODIoeL4RBGB7ShSE1rjoH9jiSdDu0ksvTa+++mreekd2SixSqH3fAPrTrbfeOvcPBxxwQM6GOuWUU8yAauPBBx/Mmf5XXHFF/jMBTnYAUAOVfvbuu+9uXpOOSdrfq1x3LOoQLKYsAP3F7rvv7ha8iUAfy/ZixnG02UwzzZRefPHFnAFF4Nh5a/trDt/73vfyAiz3KWM5Mj37vYZ6nfvuu68xzTTTNH784x83/v3vfzeeeuqpxle/+tXG5z//+caxxx7bfN/o0aMn6ffZ2/zlL39pzD333I1f//rXzc/96U9/aqy88sqN+eefv/Hkk0/mz9lu47rlllsas8wyS/4Vb731VuO8887L7bbRRhs13/f+++9/DP8n+5a///3vjbXWWqvx5z//OV9jP/zhDxuLLLJI4ytf+UrzPbbbuK655prGlFNO2Tj55JMbP/nJTxqHHXZYY/LJJ29885vfbPzvf//7WP8f9iXXXntt47jjjmvssccejXfffbf5+TPOOKMxcODAxjHHHDNJv7/e5le/+lXjs5/9bO5XjzrqqMbOO+/cuP322xu77LJLY4oppmjceOON+X1lW2rcZ9zxxx/fOPLII5ufu+uuuxpLLbVUY+ONN2787ne/s8m6QZ862WST5X6B6+7qq6/O/cO6667buO6662y3Qjk2e/zxx/P44/LLL29+7oknnmisvfbajSWXXLJx0UUXtf17tfrPf/6Tx7/bbrtt41vf+lZj6qmnbrzwwguN+++/v/GpT30qj0fuvvvuSf1t9moPPvhgY7rppsv36htvvJHnXsy56Fe/+93vOo4bj9dffz33B6eeemrjv//9b74GV1pppcbss8/eGDRoUOOKK674+P5H9iFvv/12Y+utt87XVzz3Lr744saqq67a2Gmnnfpt32rwqRdo7Ti58OgsXn311ebneAjSecw555x5sqauE3oedv/4xz9yh0vAqXwPA74ZZpih8bnPfS4PXjRuMOQ3v/lN4xOf+ETj5Zdf7tKZnHLKKY0BAwY0ttlmG5utDYImq6++emPzzTfPnQjefPPNxk9/+tPG0KFDG5tttlm393ntvv71r3dpH1x66aU5ALXnnnvmwZ/GvW8Z1HFPLrHEEuMETAhAEdA7+OCDbbr/j6Dwl770pcZCCy2U242+FM8//3xj++23zwGocoD3ne98p/Hwww/bfv//mcUEdq655soLYgQ8S3fccUfuVzfddNPGDTfcYJu1cfjhhzdWXHHFLp+77bbbckCUhbEIftauHJO89tprjeeee67xyU9+shlkeu+99/KvTz/9dF4oW2655fLzrnaMNwJjXQKdjIP/+c9/dvk8cwoWsfk9Vltttcbpp5/eqF05LqMf+PSnP50X/UtHH3107jtoLxcp2mO+wJiOcQnX34Ybbtj4wQ9+kPuPDTbYIAdY1H4e8MUvfjEH1H/5y1821lhjjcaaa67Z+NrXvtZYcMEF8xi5P84dDD71AnFhsULGaiKBADoKovBlp/zYY481hgwZ0phnnnnyynfNyptx3333bXzjG9/IAShu4JEjR3Z5fdSoUY3ll18+r17wQNRYRxxxRO5Q//rXv+aB3i9+8YtxVryZeNDx0q4ai+ycQw89NN+rTMBKEYBabLHFclaUumIiwcp/mR0Wk4v9998/X29mQLV/3hEgZjWWNjrnnHPGubROOumkxswzz9x46aWXqr3sCF6Wq/wMfgkyMeEiYBJefPHFHIBiZZagE69zz8a1WLPy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yRqvtRvQ1TyZ1YfHJJ/aOmQABALqZPOQCUXGydChQ/OJdqye1a58vjORpe1Iaee5VtYtIgA1zzzz5K3Z7bYV1462IqMpFiGiNhHYhsI4pfbJa3fbd6JeIvcngZQYs5E1wfXIQkXtR4x3h+AJbUR2Hdko1KEsX6PeU3myca3K8QQZ1ywYkmkd/URcjwSgKDfB9tiyZozGIsDONkVKJLAoUZ5qR/Yn9cfK55/UyQAU81i2/zsuqcfA1GEDBw5Mf/vb39IhhxyS/3zJJZekxRdfPD3++OP5z3PNNVcaMmRIWm211dIf/vCHdOONN6ZFF100v0ZwbN11102f+cxnUo3uv//+tOWWW6aTTjopjRw5Mu24445psskmSwMGDMivL7XUUun3v/99WmihhdJvf/vbNMssszTbjTblffw+3l+rG264If3yl79M11xzTTriiCPSiBEj0r/+9a+0yiqr5Paccsop05577pkOOuigdN111+U20xjRFrTRCy+8kN56661m06ywwgpp7bXXTr/4xS/SqFGjxmmyQYMG2Yz6wF555ZX8zOK5x/2I5ZdfPn3ve99LF110UVpjjTXSyy+/nJ544onqn22jR4/u0gbPPvts/njkkUfS22+/nSaffPL07rvv5tc23XTT3IY//OEP8zNRXZ9ztNVMM82Urrrqqvy5KaaYIrchlllmmfTOO+80xzRK+bq75ZZb0rbbbpv233//dN9996WLL744j+HuuOOO3ERbb711+vrXv54effTRdNxxxzWvxVrv1XbmmWee9L///S/tsssu6YADDkg77bRT/jyfO/PMM9M000yTZp999o/5u+1daIsYT/B8W3HFFdO3v/3t9Prrr6fHHnssf/7/L6an2WabLW2//fZpvfXWy32J47mxoi2mm266dN5556Vll102bbjhhrlP4H7m/mSs/PDDD0+S/8+qz4ILLpiOP/74tOqqqzbn/qpAJyNbpHFy4hpbnFilILo5aNCg5kkesZWO7CdqPLFaobGoccJq/+yzz96YfvrpmxlhZRYZWxPLo8fNchoX9WKoP4GLLroory6efvrp+c9sIYvT7Lgea84Wa90SW2IbAMUBf/Ob33RpG1bJyBbwtCd9lOsuVsBidZvtO2Q4kcFDweJWZHbWfEoW2AIb2xMPPPDAnL0Jnm1kdm6xxRbNOlnltnW2ateelRg/P9vU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Sk899VT+80EHHZSWWGKJ9PWvfz0deuih6emnn05XXXVVGjRoUDrppJPS888/n6+7AQMG5K/BrzV66KGH0sorr5w23HDD5uduueWW9Ic//CFfb//3f/+XNt5447TDDjvkdt15553ztbfbbrtN0u9bfd97772X78t55pknvfvuu+moo45KN910U/rzn/+cpphiinTxxRenRRZZJG266abpxBNPTAsssMCk/pZ7FZ5lM888c/r1r3+dttlmm3T88cen7bffPj/PrrzyyvSvf/0r7brrrmnaaadt/p3Bg3usi+8TeK7zM//zn/9Mc8wxR/NztNkVV1yRrzFepx2vvfba9OUvfzmPSc4777w066yzptpF3/j3v/89/562mn/++dMhhxySfve73+VxHuMT7uX3338/HX744en6669Pv/3tb/M9XCPaa9lll839JmNg2uGJJ55oXn9vvvlmbkfGfXzw+xlmmCE9/vjjac4555zU336vw1yB/oGxMeNinnM77rhjfu1Pf/pT/jx9w0ILLdTl2Vgb2uKCCy7Iz6/zzz8/vfPOO83XYowcFl100dxXTDnllGnppZeeBN+tJI01gAhU6gGXXXZZDo5ceuml6bHHHsvBk3XWWSf98Ic/zK+//fbbuVN+7rnn0mSTTZYHf7UHnhjI/fjHP04/+tGP8mRrr732yp+/55570sEHH5z+9re/5clZ6ySs/Bo1KX9ugk2nnnpqWmmlldKdd96ZPv3pT6ef//zn+Vc+f8011+QB8XLLLZevtUsuuSRfdwyYaxyohJEjR+ZJGJMLMJGg/V566aUcZHrggQfSV77ylRyw+89//pNuvfXWtMEGG1TdZuo52223Xe4ruI8Jgq6xxhpp9913TyussEIOPBFQrl13z/fTTjst9wv0pfQXTHTB4gX3LJMKJms14/nOJIwgHGONr371q+mvf/1r+ulPf5rWXHPNfL2xyLP55punGWecMd1www35773++utpuummm9Tffq/wy1/+MvcTBJg++clP5jb85je/mf7yl7+k4cOHp1GjRuWgCe3HBPg3v/lN+tznPpdqRTtFkJegMEFNAnb33ntvXjykvYYMGZLva36PddddN5177rn597WOScrnXNkGLFxzvV199dV50YtgE9566638nCOActFFF1U5Bi7xzOJao//8whe+kNuP6RyBJnDN8SzkffzK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9esnLVu2lKNHj2oWZ4cOHeTQoUMycOBAnc1z48aNEhISIrGxsZoBheMbsqOIiIh8ATOfiIjors6AQq8UBJ5wwhYdHa0BKSIiX4YJEdDPDkFylA3Xr19fs50aNmwoWbJkkeXLl0uBAgVk6dKlsmTJEs3qLFmypJYao/wYAfbKlStrYOrpp59O6T+HiIiIwSciIro7A1DIGkAD3nfeeUebi2/btk0DTyy1IyJf9v7772vQCKV0v/76qwbTkdnZvHlzPZY1aNBA/Pz8dMY7BKDgwIEDmumEjCgc+1CKh6DUunXr5L777kvpP4mIiIhld0REdPeW4KG/EwNPRJSaAk/du3eXadOmSUREhMyePVvOnDkjy5Yt0ywoBJJwP8rwzPENMPMdmpBj1s/OnTvr7y1atIiBJyIi8hns+URERHdlAGr8+PHSo0cP2b59OzOeiMjnrV27Vl588UUJCwuTVq1a6X1169bVLCc0Ej937pxcuHBBA0rffPONTqiA0mLMiGc/9qEhOUrvKlWqlIJ/DRERkTv2fCIiorseS+2IKDWUDGMGu1y5cmnPuipVqkiLFi1k5cqVEhwcrI3Ec+bMKQ8//LArOIUg+4wZMyRt2rSu2fGQIYWeT0RERL6EwSciIiIiIh/qWYdgUlxcnJw/f14+/PBDCQwM1Gwm9IAaPXq0nD59Wp555hntaQdXr17V3yEiIvJVDD4REREREflQAKpbt26yadMmmTlzps7WaYeg1NatW3UWPAaciIgotWDwiYiIiIjIh+zfv18bj6N8DjPfIdCUUAkxM56IiCi1YPCJiIiIiMhHS/Bg0KBB2lyciIgotWI3QiIiIiIiH4OZ6yZPnqyldT179tSZO4mIiFIrBp+IiIiIiHw0ADV27FipXbu2BAUFpfTLISIiumUsuyMiIiIiSgX+/fdf7QNFRESU2jD4REREREREREREXsNLJ0RERERERERE5DUMPhERERERERERkdcw+ERERERERERERF7D4BMREREREREREXkNg09EREREREREROQ1DD4REREREREREZHXMPhEREREjvbCCy9I1qxZvfb8a9eulTRp0ujXW/3dRYsWeeW1ERERESUHBp+IiIgo2SxYsECDKUuXLo33WIUKFfSxyMjIeI/df//9UqNGDfE1Q4cO1dccExMjvurMmTPyxhtv6PpFkC1z5swSFBQk/fv3l2PHjiX5+b744gv9u4mIiIgSi8EnIiIiSja1atXSr1FRUfECJDt37pR06dLJhg0b3B47fPiw3szvpja1a9eWCxcu6NfkduDAAalYsaIMHz5cypYtK6NHj5bJkydL3bp15YMPPpBHH330loJPCGYRERERJVa6RC9JREREdJsKFiwoxYoVixd82rhxo1iWJU8//XS8x8zPqTX4dM8990imTJmS/f+9cuWKtGjRQk6cOKHle57rb8SIERqMultdvHhRMmTIoOufiIiIUhY/jYmIiChZIQiyZcsWzQYykO1Urlw5adSokXz//ffy77//uj2G0raaNWu67vv444+lcuXKWkJ27733Stu2bTU7ym79+vUazELJXsaMGaVw4cLSq1cvt//3erZu3Sp58+bVzKBz587d8Z5PeF6Uvu3evVuzkLJkySKFChWSMWPG3PT5Ll26JI0bN5YcOXLId999d93lFi9eLNu2bZOwsLAEA3fZs2fXAFRS1hf6Y02dOlW/x99kbgbet4kTJ+p7iYBb/vz55aWXXpLY2Fi3/xvLoXQPwUj87VgHWBdFixbV/8MzewuvC+8zlq1evbp8/vnnCa7j+fPny6BBg3RdYlm8j7h/woQJ8f5+rDs8Fh4efpM1TkRERLeLmU9ERESUrBAI+eijj+SHH35wlX0hwISeTrjFxcVpCd4DDzzgeiwwMFBy586tPyNgMnjwYGndurV07txZTp06Je+8846WtSGolTNnTl1u4cKFcv78eenatav+7o8//qjLHTlyRB+7nk2bNsnjjz8uVapUkWXLlmmAyxsQkGnYsKFmJ+FvQVNx9GEqX768BuESgkBQs2bN5KeffpKvv/5aqlatet3nX758uX597rnnEvV6ErO+EEhCn6iIiAh9Dz3h8dmzZ0uHDh0kNDRUDh48KFOmTNH3Be9j+vTpdbnXXntNA21NmjTRdY0gGb4iW8kOWVvYJvC68Hx4XXPmzJGmTZvq+nrqqafclkd5IbKd+vTpo0E6bDcIWs6bN08DaXa4L1u2bLo+iYiIyMssIiIiomS0a9cuC0OQ4cOH68///POP5efnZ82ZM0d/zp8/vzV16lT9/syZM1batGmtLl266M+//fab/jxixAi359yxY4eVLl06t/vPnz8f7/8eOXKklSZNGuvQoUOu+55//nn9/yEqKsrKnj279eSTT1oXL1686d8yZMgQ/VtOnTp13WUiIyN1GXw16tSpo/fNnTvXdd+lS5csf39/q2XLlvF+d+HChdbZs2f19/LkyWNt2bLlpq+tUqVKVo4cOazESuz66t69u74mT+vXr9f7582b53b/qlWr3O7/448/9L1q3ry523JDhw7V5fB+GD179tT78NwG1kOxYsWsokWLWlevXnVbT8WLF4/3d7z77rv6WHR0tOu+y5cv63q0/19ERETkPSy7IyIiomRVpkwZzWAxvZyQ9fL333+7ZrPDV9N0HL2grl696iobW7JkiZZsIVMIM8yZm7+/v5QqVcptpjx7xhKeH8vhudFbCpk4nvC7yL557LHH9P9B6Zk3Yea5Z5991vUzMnaqVaumZWaekA0WHBwsv/zyi5aYoYn4zaCJOzJ7Eiup68sTsqNQCtigQQO39wblkfhbzXuzZs0a7UfVrVs3t98PCQlJsLk51om9bBDP9eKLL8pvv/2mpXp2zz//fLxMNWwrKAFEppOxevVqfW329U9ERETew+ATERERJSv02UFQw/R2QqApX758UrJkyXjBJ/PVBB/27t2rwRAEmtCTyX6Ljo6WkydPuv6f33//XfsHoVcQAhZYpk6dOq5gjh3KvZ588kmpVKmSLFiwQANB3nbfffe59UuCXLlyxeuPBD179tRyQJTaoZ9SYqCn09mzZxP9epKyvhKC9wbL4b30fG/QN8u8N4cOHdKv5v028P/i77fDsgEBAQkGMO3PZaCZvSeUYaK875NPPnHdh0AU+kLVq1fvpn8XERER3T72fCIiIqJkh2DSihUrZMeOHa5+Twa+79u3rxw9elSzo9CUunjx4voYglUI2Hz55ZeSNm3aeM+LoAkgWwoZOH/99Zf2UULvHz8/P31OBFjsDc0BWU5PPPGE9nhatWqVNvT2toRePyC45gl9idBMe9SoUTJ37txEzeCGvxkZS2jEjubhN5LU9ZUQLIPAkz3DyA5BKG+7Xn+u9u3ba2YWmoyjpxb6YSHzijPhERERJQ8Gn4iIiCjZmUwmBJcQfEJmj4EyLQSDUF6GpuQIChklSpTQ4AwyXEqXLn3d50dQ69dff9Xm1Ag8GGiUnRAEtBA0QZAHM6shuGWaofuC5s2ba9kdAkEopZs+ffpNfwfZPpjJDTMDosH3jSRlfXlma9nfG2RmocH3jZq0FylSRL/u27fPLVPpzz//jJf1hWX37NkT7zlQfmh/rptBY3cEv/AeP/TQQ9rAPLGN2ImIiOj2seyOiIiIkh1mkjN9eJBdY898QuDpwQcflKlTp2rvIXu/H8wMh4yhN954I16GEH5GAMOeVWRfBt9PmjTpuq8JpXbo9YQZ5BC4wWxvvgRBocmTJ8uMGTM0O+lmWrVqpVk+mB0QvbM8oSQvLCwsyesLGVFw+vTpeL2VkEGFGec8oceTWR49tdKlSxcvgIZZ8Twh8Ij3wf76sU3MnDlTihYtKmXLlpXEwP/Xrl07LanEbHxYL2Y2RSIiIvI+Zj4RERFRskOgB0Ge9evXa7AJ2U52CEaNHz9ev7cHn5Bd8+abb2omDxpOIyMImUAHDx6UpUuXaiPqPn36aNkYlsX3CG6h/9HixYsT7Kdkh4ydlStXai+gRo0aybp16yQoKOimf8/bb78tWbJkcbsPJV0DBw6UO6lHjx7aSBxBIzT3vtHzp0+fXoNp9evXl9q1a2twCFlJuH/Xrl3aAwk9lhCcSsr6Mu9VaGioNmhH4Kpt27baH+qll16SkSNHytatWzVTC/8XekGh5A2BLATE8ufPL6+88oq+v02bNtWsJDSdR7ZZnjx53DKrBgwYoNlbeC/w/6EvFLKz8H7j9SWlbM4E79D4fPTo0Ule90RERHQbvDiTHhEREdF1vfbaa0izsWrUqBHvsSVLluhj2bJls65cuRLv8cWLF1u1atWy/Pz89BYYGGh1797d2rNnj2uZ3bt3W/Xr17eyZs1q5cmTx+rSpYu1bds2fd4PP/zQtdzzzz+vz2EXExNjlS1b1vL397f27t173b9hyJAh+nwJ3dKmTavLREZG6s/4atSpU8cqV65cvOfDaylSpIjrZ/O7CxcudFuuX79+ev+UKVOsm4mNjbVef/11q3z58laWLFmsTJkyWUFBQbr+jx8/nuT1hfcjJCTEyps3r5UmTRp93G7mzJlW5cqVrcyZM+v7h/8Xr/fYsWNuzzF48GBdv1iuXr16VnR0tJU7d27r5Zdfdnu+/fv3W61atbJy5sypr71atWrWypUr3Za53nryhHV+zz33WEeOHLnpeiMiIqI7Jw3+uZ3gFRERERHR7UJZHjKxkNlmygHvNMxmiOypNWvWeOX5iYiIKGHs+UREREREyerChQvx7ps4caJ+9Vaj959++knLAe0N1YmIiCh5MPOJiIiIiJIVmn7jhobiWbNm1VkP0dsJfaJWr159R/+vnTt3yubNm7XHVExMjBw4cECb3RMREVHyYcNxIiIiIkpWmGkOM9CNGTNGG6ibJuQoubvTFi1aJMOGDZOAgAANcDHwRERElPyY+URERERERERERF7Dnk9EREREREREROQ1DD4REREREREREZHXMPhERERERERERERew+ATERERERERERF5DYNPRERERERERETkNQw+ERERERERERGR1zD4REREREREREREXsPgExEREREREREReQ2DT0REREREREREJN7yf9PmkXM1MbNYAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Define the 14 weak link categories (column names)\n", "weaklink_categories = [\n", " \"ForwardHead\",\n", " \"LeftArmFallForward\", \"RightArmFallForward\",\n", " \"LeftShoulderElevation\", \"RightShoulderElevation\",\n", " \"ExcessiveForwardLean\",\n", " \"LeftAsymmetricalWeightShift\", \"RightAsymmetricalWeightShift\",\n", " \"LeftKneeMovesInward\", \"RightKneeMovesInward\",\n", " \"LeftKneeMovesOutward\", \"RightKneeMovesOutward\",\n", " \"LeftHeelRises\", \"RightHeelRises\",\n", "]\n", "\n", "# For each row, find the column name with the maximum score\n", "# This is our TARGET variable (what we want to predict)\n", "weaklink_scores_df['WeakestLink'] = weaklink_scores_df[weaklink_categories].idxmax(axis=1)\n", "\n", "print(f\"\\nWeakest Link Distribution:\")\n", "print(weaklink_scores_df['WeakestLink'].value_counts())\n", "\n", "# Visualize the distribution\n", "plt.figure(figsize=(12, 6))\n", "weaklink_scores_df['WeakestLink'].value_counts().plot(kind='bar', color='steelblue')\n", "plt.title('Distribution of Weakest Links', fontsize=14, fontweight='bold')\n", "plt.xlabel('Weak Link Category', fontsize=12)\n", "plt.ylabel('Frequency', fontsize=12)\n", "plt.xticks(rotation=45, ha='right')\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 4, "id": "dfe33797-776b-4edb-ae58-bda12d577553", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Datasets merged successfully!\n", "Merged dataset shape: (2094, 44)\n", "\n", "Columns in merged dataset:\n", "['AimoScore', 'No_1_Angle_Deviation', 'No_2_Angle_Deviation', 'No_3_Angle_Deviation', 'No_4_Angle_Deviation', 'No_5_Angle_Deviation', 'No_6_Angle_Deviation', 'No_7_Angle_Deviation', 'No_8_Angle_Deviation', 'No_9_Angle_Deviation', 'No_10_Angle_Deviation', 'No_11_Angle_Deviation', 'No_12_Angle_Deviation', 'No_13_Angle_Deviation', 'No_1_NASM_Deviation', 'No_2_NASM_Deviation', 'No_3_NASM_Deviation', 'No_4_NASM_Deviation', 'No_5_NASM_Deviation', 'No_6_NASM_Deviation', 'No_7_NASM_Deviation', 'No_8_NASM_Deviation', 'No_9_NASM_Deviation', 'No_10_NASM_Deviation', 'No_11_NASM_Deviation', 'No_12_NASM_Deviation', 'No_13_NASM_Deviation', 'No_14_NASM_Deviation', 'No_15_NASM_Deviation', 'No_16_NASM_Deviation', 'No_17_NASM_Deviation', 'No_18_NASM_Deviation', 'No_19_NASM_Deviation', 'No_20_NASM_Deviation', 'No_21_NASM_Deviation', 'No_22_NASM_Deviation', 'No_23_NASM_Deviation', 'No_24_NASM_Deviation', 'No_25_NASM_Deviation', 'No_1_Time_Deviation', 'No_2_Time_Deviation', 'EstimatedScore', 'ID', 'WeakestLink']\n", "\n", "First few rows:\n", " AimoScore No_1_Angle_Deviation No_2_Angle_Deviation \\\n", "0 0.323667 0.538020 0.815878 \n", "1 0.323699 0.443807 0.306552 \n", "2 0.848327 0.603539 0.373984 \n", "3 0.351332 0.484935 0.623625 \n", "4 0.627181 0.860832 0.657580 \n", "\n", " No_3_Angle_Deviation No_4_Angle_Deviation No_5_Angle_Deviation \\\n", "0 0.346724 0.382114 0.302248 \n", "1 0.823529 0.188905 0.497370 \n", "2 0.346724 0.590626 0.341942 \n", "3 0.380201 0.975132 0.509326 \n", "4 0.745576 0.552846 0.375897 \n", "\n", " No_6_Angle_Deviation No_7_Angle_Deviation No_8_Angle_Deviation \\\n", "0 0.947872 0.275945 0.521760 \n", "1 0.140124 0.664275 0.521760 \n", "2 0.298900 0.276901 0.623625 \n", "3 0.888570 0.363462 0.847441 \n", "4 0.483022 0.388331 0.521760 \n", "\n", " No_9_Angle_Deviation ... No_21_NASM_Deviation No_22_NASM_Deviation \\\n", "0 0.457198 ... 0.642276 0.552846 \n", "1 0.729316 ... 0.826399 0.805356 \n", "2 0.658058 ... 0.642276 0.690579 \n", "3 0.237207 ... 0.642276 0.552846 \n", "4 0.387853 ... 0.642276 0.552846 \n", "\n", " No_23_NASM_Deviation No_24_NASM_Deviation No_25_NASM_Deviation \\\n", "0 0.648972 0.578192 0.560019 \n", "1 0.848876 0.889048 0.816834 \n", "2 0.648972 0.578192 0.555715 \n", "3 0.648972 0.578192 0.744620 \n", "4 0.648972 0.578192 0.308943 \n", "\n", " No_1_Time_Deviation No_2_Time_Deviation EstimatedScore \\\n", "0 0.821616 0.818747 0.209947 \n", "1 0.307987 0.248207 0.457198 \n", "2 0.218556 0.235294 0.107126 \n", "3 0.458154 0.432807 0.612626 \n", "4 0.805356 0.774271 0.153515 \n", "\n", " ID WeakestLink \n", "0 0003cdcc-86ed-494a-a3b5-90d09e96e06b.Kinect RightShoulderElevation \n", "1 003115c4-bdb8-491c-b571-8fcebdecf8ed.Kinect RightArmFallForward \n", "2 00316bfb-ed43-489f-a55b-11c7f01c852d.Kinect LeftArmFallForward \n", "3 00607608-6f2f-459b-a69d-e14067489459.Kinect RightShoulderElevation \n", "4 007396ec-3463-4a05-915c-02244ff8d3de.Kinect ForwardHead \n", "\n", "[5 rows x 44 columns]\n", "\n", "Missing values:\n", "0\n" ] } ], "source": [ "# Keep only ID and WeakestLink from the first dataset\n", "target_df = weaklink_scores_df[['ID', 'WeakestLink']].copy()\n", "\n", "# Join with movement features dataset\n", "merged_df = movement_features_df.merge(target_df, on='ID', how='inner')\n", "\n", "print(f\"Datasets merged successfully!\")\n", "print(f\"Merged dataset shape: {merged_df.shape}\")\n", "print(f\"\\nColumns in merged dataset:\")\n", "print(list(merged_df.columns))\n", "print(f\"\\nFirst few rows:\")\n", "print(merged_df.head())\n", "\n", "# Check for missing values\n", "print(f\"\\nMissing values:\")\n", "print(merged_df.isnull().sum().sum())" ] }, { "cell_type": "code", "execution_count": 5, "id": "483b6227-5a06-445f-9f62-cf0ed0474d06", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Features (X) shape: (2094, 41)\n", "Target (y) shape: (2094,)\n", "\n", "Number of features: 41\n", "Feature names: ['AimoScore', 'No_1_Angle_Deviation', 'No_2_Angle_Deviation', 'No_3_Angle_Deviation', 'No_4_Angle_Deviation', 'No_5_Angle_Deviation', 'No_6_Angle_Deviation', 'No_7_Angle_Deviation', 'No_8_Angle_Deviation', 'No_9_Angle_Deviation']...\n", "\n", "Number of classes: 14\n", "Classes: ['ExcessiveForwardLean', 'ForwardHead', 'LeftArmFallForward', 'LeftAsymmetricalWeightShift', 'LeftHeelRises', 'LeftKneeMovesInward', 'LeftKneeMovesOutward', 'LeftShoulderElevation', 'RightArmFallForward', 'RightAsymmetricalWeightShift', 'RightHeelRises', 'RightKneeMovesInward', 'RightKneeMovesOutward', 'RightShoulderElevation']\n" ] } ], "source": [ "# Drop non-feature columns \n", "exclude_from_X = ['ID', 'WeakestLink', 'EstimatedScore']\n", "feature_columns = [col for col in merged_df.columns if col not in exclude_from_X]\n", "\n", "X = merged_df[feature_columns].copy()\n", "y = merged_df['WeakestLink'].copy()\n", "\n", "print(f\"Features (X) shape: {X.shape}\")\n", "print(f\"Target (y) shape: {y.shape}\")\n", "print(f\"\\nNumber of features: {len(feature_columns)}\")\n", "print(f\"Feature names: {feature_columns[:10]}...\") # Show first 10\n", "print(f\"\\nNumber of classes: {y.nunique()}\")\n", "print(f\"Classes: {sorted(y.unique())}\")" ] }, { "cell_type": "code", "execution_count": 6, "id": "8d6b31e8-a219-4bf4-96c8-484f25a219e1", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training set size: 1675 samples\n", "Testing set size: 419 samples\n", "\n", "Training set class distribution:\n", "WeakestLink\n", "LeftArmFallForward 500\n", "RightArmFallForward 373\n", "RightKneeMovesOutward 228\n", "RightShoulderElevation 203\n", "ForwardHead 91\n", "ExcessiveForwardLean 79\n", "LeftAsymmetricalWeightShift 57\n", "LeftShoulderElevation 47\n", "LeftKneeMovesOutward 40\n", "RightKneeMovesInward 34\n", "RightAsymmetricalWeightShift 17\n", "LeftKneeMovesInward 3\n", "LeftHeelRises 2\n", "RightHeelRises 1\n", "Name: count, dtype: int64\n" ] } ], "source": [ "# Split the data\n", "X_train, X_test, y_train, y_test = train_test_split(\n", " X, y, \n", " test_size=0.2, \n", " random_state=42\n", ")\n", "\n", "print(f\"Training set size: {X_train.shape[0]} samples\")\n", "print(f\"Testing set size: {X_test.shape[0]} samples\")\n", "print(f\"\\nTraining set class distribution:\")\n", "print(y_train.value_counts())" ] }, { "cell_type": "code", "execution_count": 7, "id": "94110586-d85f-4dae-8aec-20786b95b5c5", "metadata": {}, "outputs": [], "source": [ "# Standardize features (mean=0, std=1)\n", "scaler = StandardScaler()\n", "X_train_scaled = scaler.fit_transform(X_train)\n", "X_test_scaled = scaler.transform(X_test)" ] }, { "cell_type": "code", "execution_count": 8, "id": "f25703fc-dab7-49f0-aaf7-c38da9f44b3d", "metadata": {}, "outputs": [], "source": [ "def train_and_evaluate_variants(X_train, X_test, y_train, y_test, models_dict):\n", " results = []\n", " trained_models = {} \n", " for name, model in models_dict.items():\n", " try:\n", " model.fit(X_train, y_train)\n", " y_pred = model.predict(X_test)\n", " \n", " accuracy = accuracy_score(y_test, y_pred)\n", " error_rate = 1 - accuracy \n", " precision = precision_score(y_test, y_pred, average='weighted', zero_division=0)\n", " recall = recall_score(y_test, y_pred, average='weighted', zero_division=0)\n", " f1 = f1_score(y_test, y_pred, average='weighted', zero_division=0)\n", " \n", " results.append({\n", " 'Model': name,\n", " 'Accuracy': accuracy,\n", " 'Error Rate': error_rate,\n", " 'Precision': precision,\n", " 'Recall': recall,\n", " 'F1-Score': f1\n", " })\n", " trained_models[name] = model # Store trained model\n", " except Exception as e:\n", " print(f\"Failed to train {name}: {e}\")\n", "\n", " results_df = pd.DataFrame(results).sort_values('F1-Score', ascending=False)\n", " return results_df, trained_models" ] }, { "cell_type": "code", "execution_count": 9, "id": "21eef0e4-374d-4dad-8a22-dc45f984cade", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Models defined:\n", "Parametric: ['Logistic Regression', 'Naive Bayes', 'Linear Discriminant Analysis', 'Quadratic Discriminant Analysis']\n", "Non-Parametric: ['KNN (k=3)', 'KNN (k=5)', 'KNN (k=7)']\n" ] } ], "source": [ "# Train different model variants\n", "\n", "models_14class = {\n", " 'Logistic Regression': LogisticRegression(max_iter=1000, random_state =42, class_weight='balanced'),\n", " 'Naive Bayes': GaussianNB(),\n", " 'LDA': LinearDiscriminantAnalysis(),\n", " 'QDA': QuadraticDiscriminantAnalysis(),\n", " 'KNN (k=5)': KNeighborsClassifier(n_neighbors=5),\n", " 'KNN (k=7)': KNeighborsClassifier(n_neighbors=7),\n", " 'KNN (k=10)': KNeighborsClassifier(n_neighbors=10)\n", "}\n", "\n", "print(\"Models defined:\")\n", "print(\"Parametric:\", ['Logistic Regression', 'Naive Bayes', 'Linear Discriminant Analysis', 'Quadratic Discriminant Analysis'])\n", "print(\"Non-Parametric:\", ['KNN (k=3)', 'KNN (k=5)', 'KNN (k=7)'])" ] }, { "cell_type": "code", "execution_count": 10, "id": "3313afe6-aeb0-4222-937e-de34dbe660c0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Failed to train QDA: y has only 1 sample in class RightHeelRises, covariance is ill defined.\n", "\n", " Classification Performance (Baseline - 14 classes): \n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ModelAccuracyError RatePrecisionRecallF1-Score
2LDA0.5656320.4343680.5782200.5656320.566721
0Logistic Regression0.5465390.4534610.6148490.5465390.562310
4KNN (k=7)0.5536990.4463010.5482310.5536990.545808
5KNN (k=10)0.5560860.4439140.5517040.5560860.540911
3KNN (k=5)0.5393790.4606210.5327380.5393790.530905
1Naive Bayes0.4343680.5656320.5116230.4343680.449053
\n", "
" ], "text/plain": [ " Model Accuracy Error Rate Precision Recall F1-Score\n", "2 LDA 0.565632 0.434368 0.578220 0.565632 0.566721\n", "0 Logistic Regression 0.546539 0.453461 0.614849 0.546539 0.562310\n", "4 KNN (k=7) 0.553699 0.446301 0.548231 0.553699 0.545808\n", "5 KNN (k=10) 0.556086 0.443914 0.551704 0.556086 0.540911\n", "3 KNN (k=5) 0.539379 0.460621 0.532738 0.539379 0.530905\n", "1 Naive Bayes 0.434368 0.565632 0.511623 0.434368 0.449053" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# 2. Call the function\n", "results_14class_baseline, trained_14class = train_and_evaluate_variants(X_train_scaled, X_test_scaled, y_train, y_test, models_14class)\n", "\n", "# 3. View results\n", "print(\"\\n Classification Performance (Baseline - 14 classes): \")\n", "display(results_14class_baseline)" ] }, { "cell_type": "code", "execution_count": 11, "id": "c6f7b43f-4ff8-41b9-bfe2-c08904770688", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "CHAMPION: LDA\n", "F1-Score: 0.5667\n" ] } ], "source": [ "# Identify champion\n", "champion_14class_baseline = results_14class_baseline.iloc[0]['Model']\n", "champion_14class_f1_baseline = results_14class_baseline.iloc[0]['F1-Score']\n", "\n", "print(f\"\\nCHAMPION: {champion_14class_baseline}\")\n", "print(f\"F1-Score: {champion_14class_f1_baseline:.4f}\")" ] }, { "cell_type": "markdown", "id": "646254ce-5de3-43cc-b62a-e29b3452222b", "metadata": {}, "source": [ "### Hyperparameter tuning (14-class)" ] }, { "cell_type": "code", "execution_count": 12, "id": "6cecb844-b3b1-448f-b0fa-e917e4f979d7", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Tuning Logistic Regression...\n", " Parameters to test: {'C': [0.001, 0.01, 0.1, 1, 10, 100], 'solver': ['lbfgs', 'saga'], 'class_weight': [None, 'balanced']}\n", "Best params: {'C': 100, 'class_weight': None, 'solver': 'saga'}\n", "CV F1-Score: 0.5976\n", "Test F1-Score: 0.6101\n", "Improvement: +0.0478\n", "\n", "Tuning LDA...\n", " Parameters to test: {'solver': ['svd', 'lsqr', 'eigen']}\n", "Best params: {'solver': 'svd'}\n", "CV F1-Score: 0.5785\n", "Test F1-Score: 0.5667\n", "Improvement: +0.0000\n", "\n", "Tuning KNN (k=5)...\n", " Parameters to test: {'n_neighbors': [3, 5, 7, 9, 11, 13], 'weights': ['uniform', 'distance'], 'metric': ['euclidean', 'manhattan']}\n", "Best params: {'metric': 'manhattan', 'n_neighbors': 5, 'weights': 'distance'}\n", "CV F1-Score: 0.5529\n", "Test F1-Score: 0.5494\n", "Improvement: +0.0185\n", "\n", "\n", "Hyperparameter Tuning Results (14-class):\n", "\n", "\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ModelBest ParamsCV ScoreTest AccuracyTest F1-ScoreImprovement
0Logistic Regression (Tuned){'C': 100, 'class_weight': None, 'solver': 'sa...0.5975750.6133650.6100900.047780
1LDA (Tuned){'solver': 'svd'}0.5785490.5656320.5667210.000000
2KNN (k=5) (Tuned){'metric': 'manhattan', 'n_neighbors': 5, 'wei...0.5528860.5608590.5494440.018539
\n", "
" ], "text/plain": [ " Model \\\n", "0 Logistic Regression (Tuned) \n", "1 LDA (Tuned) \n", "2 KNN (k=5) (Tuned) \n", "\n", " Best Params CV Score Test Accuracy \\\n", "0 {'C': 100, 'class_weight': None, 'solver': 'sa... 0.597575 0.613365 \n", "1 {'solver': 'svd'} 0.578549 0.565632 \n", "2 {'metric': 'manhattan', 'n_neighbors': 5, 'wei... 0.552886 0.560859 \n", "\n", " Test F1-Score Improvement \n", "0 0.610090 0.047780 \n", "1 0.566721 0.000000 \n", "2 0.549444 0.018539 " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Define tuning configurations for top 3 models\n", "tuning_configs_14class = {\n", " 'Logistic Regression': {\n", " 'model': LogisticRegression(max_iter=1000, random_state=42, class_weight='balanced'),\n", " 'params': {\n", " 'C': [0.001, 0.01, 0.1, 1, 10, 100],\n", " 'solver': ['lbfgs', 'saga'],\n", " 'class_weight': [None, 'balanced'] \n", " }\n", " },\n", " 'LDA': {\n", " 'model': LinearDiscriminantAnalysis(),\n", " 'params': {\n", " 'solver': ['svd', 'lsqr', 'eigen']\n", " }\n", " },\n", " 'KNN (k=5)': {\n", " 'model': KNeighborsClassifier(),\n", " 'params': {\n", " 'n_neighbors': [3, 5, 7, 9, 11, 13],\n", " 'weights': ['uniform', 'distance'],\n", " 'metric': ['euclidean', 'manhattan']\n", " }\n", " }\n", "}\n", "\n", "tuning_results_14class = []\n", "best_models_14class = {}\n", "\n", "for name, config in tuning_configs_14class.items():\n", " print(f\"\\nTuning {name}...\")\n", " print(f\" Parameters to test: {config['params']}\")\n", " \n", " # GridSearchCV with cross-validation\n", " grid = GridSearchCV(\n", " config['model'],\n", " config['params'],\n", " cv=5, # 5-fold cross-validation\n", " scoring='f1_weighted',\n", " n_jobs=-1,\n", " verbose=0\n", " )\n", " \n", " # Fit with cross-validation\n", " grid.fit(X_train_scaled, y_train)\n", " \n", " # Get best model\n", " best_model = grid.best_estimator_\n", " best_models_14class[name] = best_model\n", " \n", " # Evaluate on test set\n", " y_pred = best_model.predict(X_test_scaled)\n", " \n", " accuracy = accuracy_score(y_test, y_pred)\n", " f1 = f1_score(y_test, y_pred, average='weighted', zero_division=0)\n", " \n", " tuning_results_14class.append({\n", " 'Model': f\"{name} (Tuned)\",\n", " 'Best Params': str(grid.best_params_),\n", " 'CV Score': grid.best_score_, \n", " 'Test Accuracy': accuracy,\n", " 'Test F1-Score': f1,\n", " 'Improvement': f1 - results_14class_baseline[results_14class_baseline['Model']==name]['F1-Score'].values[0]\n", " })\n", " \n", " print(f\"Best params: {grid.best_params_}\")\n", " print(f\"CV F1-Score: {grid.best_score_:.4f}\")\n", " print(f\"Test F1-Score: {f1:.4f}\")\n", " print(f\"Improvement: {tuning_results_14class[-1]['Improvement']:+.4f}\")\n", "\n", "tuning_df_14class = pd.DataFrame(tuning_results_14class).sort_values('Test F1-Score', ascending=False)\n", "\n", "print(\"\\n\")\n", "print(\"Hyperparameter Tuning Results (14-class):\")\n", "print(\"\\n\")\n", "display(tuning_df_14class)" ] }, { "cell_type": "markdown", "id": "ef10daaa-f356-46e4-94dc-9ebc987494d5", "metadata": {}, "source": [ "### Trying the alternative option (mentioned in slide 6 - Alternatively find the body region with the weakest link, e.g., upper body (shoulders and arms) vs lower body (hips and legs) )" ] }, { "cell_type": "code", "execution_count": 13, "id": "9a43d212-4268-4921-8926-0ee1a017d771", "metadata": {}, "outputs": [], "source": [ "# The alternative approach was chosen because of severe class imbalance. Highest clss shows 500 labels but lowest shows only 1.\n", "# Also quadratic discriminant analysis was not possible in previous example due to very few data points belonging to a class." ] }, { "cell_type": "code", "execution_count": 14, "id": "2256f87c-6d23-4a03-a614-53cfe31916bc", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "New Class Distribution based on two Body Regions\n", "WeakestRegion\n", "Upper Body 1525\n", "Lower Body 569\n", "Name: count, dtype: int64\n", "(2094, 45)\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
AimoScoreNo_1_Angle_DeviationNo_2_Angle_DeviationNo_3_Angle_DeviationNo_4_Angle_DeviationNo_5_Angle_DeviationNo_6_Angle_DeviationNo_7_Angle_DeviationNo_8_Angle_DeviationNo_9_Angle_Deviation...No_22_NASM_DeviationNo_23_NASM_DeviationNo_24_NASM_DeviationNo_25_NASM_DeviationNo_1_Time_DeviationNo_2_Time_DeviationEstimatedScoreIDWeakestLinkWeakestRegion
00.3236670.5380200.8158780.3467240.3821140.3022480.9478720.2759450.5217600.457198...0.5528460.6489720.5781920.5600190.8216160.8187470.2099470003cdcc-86ed-494a-a3b5-90d09e96e06b.KinectRightShoulderElevationUpper Body
10.3236990.4438070.3065520.8235290.1889050.4973700.1401240.6642750.5217600.729316...0.8053560.8488760.8890480.8168340.3079870.2482070.457198003115c4-bdb8-491c-b571-8fcebdecf8ed.KinectRightArmFallForwardUpper Body
20.8483270.6035390.3739840.3467240.5906260.3419420.2989000.2769010.6236250.658058...0.6905790.6489720.5781920.5557150.2185560.2352940.10712600316bfb-ed43-489f-a55b-11c7f01c852d.KinectLeftArmFallForwardUpper Body
\n", "

3 rows × 45 columns

\n", "
" ], "text/plain": [ " AimoScore No_1_Angle_Deviation No_2_Angle_Deviation \\\n", "0 0.323667 0.538020 0.815878 \n", "1 0.323699 0.443807 0.306552 \n", "2 0.848327 0.603539 0.373984 \n", "\n", " No_3_Angle_Deviation No_4_Angle_Deviation No_5_Angle_Deviation \\\n", "0 0.346724 0.382114 0.302248 \n", "1 0.823529 0.188905 0.497370 \n", "2 0.346724 0.590626 0.341942 \n", "\n", " No_6_Angle_Deviation No_7_Angle_Deviation No_8_Angle_Deviation \\\n", "0 0.947872 0.275945 0.521760 \n", "1 0.140124 0.664275 0.521760 \n", "2 0.298900 0.276901 0.623625 \n", "\n", " No_9_Angle_Deviation ... No_22_NASM_Deviation No_23_NASM_Deviation \\\n", "0 0.457198 ... 0.552846 0.648972 \n", "1 0.729316 ... 0.805356 0.848876 \n", "2 0.658058 ... 0.690579 0.648972 \n", "\n", " No_24_NASM_Deviation No_25_NASM_Deviation No_1_Time_Deviation \\\n", "0 0.578192 0.560019 0.821616 \n", "1 0.889048 0.816834 0.307987 \n", "2 0.578192 0.555715 0.218556 \n", "\n", " No_2_Time_Deviation EstimatedScore \\\n", "0 0.818747 0.209947 \n", "1 0.248207 0.457198 \n", "2 0.235294 0.107126 \n", "\n", " ID WeakestLink \\\n", "0 0003cdcc-86ed-494a-a3b5-90d09e96e06b.Kinect RightShoulderElevation \n", "1 003115c4-bdb8-491c-b571-8fcebdecf8ed.Kinect RightArmFallForward \n", "2 00316bfb-ed43-489f-a55b-11c7f01c852d.Kinect LeftArmFallForward \n", "\n", " WeakestRegion \n", "0 Upper Body \n", "1 Upper Body \n", "2 Upper Body \n", "\n", "[3 rows x 45 columns]" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Define the groups as mentioned in Slide 6 into 3 distinct regions\n", "def get_region(label):\n", " upper = [\"ForwardHead\", \"LeftArmFallForward\", \"RightArmFallForward\", \n", " \"LeftShoulderElevation\", \"RightShoulderElevation\"]\n", " lower = [\"LeftKneeMovesInward\", \"RightKneeMovesInward\", \n", " \"LeftKneeMovesOutward\", \"RightKneeMovesOutward\", \n", " \"LeftHeelRises\", \"RightHeelRises\", \n", " \"ExcessiveForwardLean\", \n", " \"LeftAsymmetricalWeightShift\", \"RightAsymmetricalWeightShift\"]\n", " \n", " if label in upper: \n", " return \"Upper Body\"\n", " else: \n", " return \"Lower Body\"\n", "\n", "merged_df['WeakestRegion'] = merged_df['WeakestLink'].apply(get_region)\n", "\n", "print(\"New Class Distribution based on two Body Regions\")\n", "print(merged_df['WeakestRegion'].value_counts())\n", "print(merged_df.shape)\n", "merged_df.head(3)" ] }, { "cell_type": "code", "execution_count": 15, "id": "c556f1ac-552b-4ccb-82a1-6c3b782c3c75", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Training set: 1675 samples\n", "Test set: 419 samples\n" ] } ], "source": [ "# Prepare data for region wise classification\n", "\n", "exclude_region = ['ID', 'WeakestLink', 'WeakestRegion', 'EstimatedScore']\n", "features_region = [c for c in merged_df.columns if c not in exclude_region]\n", "\n", "X_region = merged_df[features_region].copy()\n", "y_region = merged_df['WeakestRegion'].copy()\n", "\n", "X_train_region, X_test_region, y_train_region, y_test_region = train_test_split(\n", " X_region, y_region, test_size=0.2, random_state=42, stratify=y_region\n", ")\n", "\n", "# Scaling\n", "scaler_region = StandardScaler()\n", "X_train_region_scaled = scaler_region.fit_transform(X_train_region)\n", "X_test_region_scaled = scaler_region.transform(X_test_region)\n", "\n", "print(f\"\\nTraining set: {X_train_region.shape[0]} samples\")\n", "print(f\"Test set: {X_test_region.shape[0]} samples\")" ] }, { "cell_type": "code", "execution_count": 16, "id": "cc39415b-8dab-4af3-bd1c-830c01735921", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Final Classification Performance\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ModelAccuracyError RatePrecisionRecallF1-Score
5KNN (k=7)0.8377090.1622910.8326730.8377090.827772
2LDA0.8305490.1694510.8241480.8305490.824773
6KNN (k=10)0.8329360.1670640.8265750.8329360.824195
4KNN (k=5)0.8305490.1694510.8238080.8305490.823450
0Logistic Regression0.8114560.1885440.8347990.8114560.817984
1Naive Bayes0.7708830.2291170.7639690.7708830.766729
3QDA0.6634840.3365160.7502280.6634840.681889
\n", "
" ], "text/plain": [ " Model Accuracy Error Rate Precision Recall F1-Score\n", "5 KNN (k=7) 0.837709 0.162291 0.832673 0.837709 0.827772\n", "2 LDA 0.830549 0.169451 0.824148 0.830549 0.824773\n", "6 KNN (k=10) 0.832936 0.167064 0.826575 0.832936 0.824195\n", "4 KNN (k=5) 0.830549 0.169451 0.823808 0.830549 0.823450\n", "0 Logistic Regression 0.811456 0.188544 0.834799 0.811456 0.817984\n", "1 Naive Bayes 0.770883 0.229117 0.763969 0.770883 0.766729\n", "3 QDA 0.663484 0.336516 0.750228 0.663484 0.681889" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "models_region = {\n", " 'Logistic Regression': LogisticRegression(max_iter=1000, random_state=42, class_weight='balanced'),\n", " 'Naive Bayes': GaussianNB(),\n", " 'LDA': LinearDiscriminantAnalysis(),\n", " 'QDA': QuadraticDiscriminantAnalysis(),\n", " 'KNN (k=5)': KNeighborsClassifier(n_neighbors=5),\n", " 'KNN (k=7)': KNeighborsClassifier(n_neighbors=7),\n", " 'KNN (k=10)': KNeighborsClassifier(n_neighbors=10)\n", "}\n", "\n", "# Train and evaluate\n", "results_region_baseline, trained_region = train_and_evaluate_variants(\n", " X_train_region_scaled, X_test_region_scaled, \n", " y_train_region, y_test_region, \n", " models_region\n", ")\n", "\n", "# 3. View results\n", "print(\"\\nFinal Classification Performance\")\n", "display(results_region_baseline)" ] }, { "cell_type": "code", "execution_count": 17, "id": "c291d288-2668-4c28-a731-0ccc845dc4d1", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Baseline Champion (Body Regions): KNN (k=7)\n", "F1-Score: 0.8278\n" ] } ], "source": [ "champion_region_baseline = results_region_baseline.iloc[0]['Model']\n", "champion_region_f1_baseline = results_region_baseline.iloc[0]['F1-Score']\n", "print(f\"\\nBaseline Champion (Body Regions): {champion_region_baseline}\")\n", "print(f\"F1-Score: {champion_region_f1_baseline:.4f}\")" ] }, { "cell_type": "markdown", "id": "892d5911-e7ea-45ce-ae1b-6aaf4aff30b7", "metadata": {}, "source": [ "### Hyperparameter tuning (Body regions)" ] }, { "cell_type": "code", "execution_count": 18, "id": "aafe02c6-101b-4494-8679-70c6f8c67563", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Tuning Logistic Regression...\n", " Parameters to test: {'C': [0.01, 0.1, 1, 10, 100], 'solver': ['lbfgs', 'saga', 'newton-cg']}\n", "Best params: {'C': 1, 'solver': 'lbfgs'}\n", "CV F1-Score: 0.8266\n", "Test F1-Score: 0.8180\n", "Improvement: +0.0000\n", "\n", "Tuning LDA...\n", " Parameters to test: {'solver': ['svd', 'lsqr', 'eigen']}\n", "Best params: {'solver': 'svd'}\n", "CV F1-Score: 0.8395\n", "Test F1-Score: 0.8248\n", "Improvement: +0.0000\n", "\n", "Tuning KNN (k=10)...\n", " Parameters to test: {'n_neighbors': [7, 9, 10, 11, 13, 15], 'weights': ['uniform', 'distance'], 'metric': ['euclidean', 'manhattan', 'minkowski']}\n", "Best params: {'metric': 'manhattan', 'n_neighbors': 7, 'weights': 'distance'}\n", "CV F1-Score: 0.8672\n", "Test F1-Score: 0.8263\n", "Improvement: +0.0022\n", "Hyperparameter Tuning Results (Body Regions):\n", "\n", "\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ModelBest ParamsCV ScoreTest AccuracyTest F1-ScoreImprovement
2KNN (k=10) (Tuned){'metric': 'manhattan', 'n_neighbors': 7, 'wei...0.8671940.8353220.8263470.002153
1LDA (Tuned){'solver': 'svd'}0.8394620.8305490.8247730.000000
0Logistic Regression (Tuned){'C': 1, 'solver': 'lbfgs'}0.8265770.8114560.8179840.000000
\n", "
" ], "text/plain": [ " Model \\\n", "2 KNN (k=10) (Tuned) \n", "1 LDA (Tuned) \n", "0 Logistic Regression (Tuned) \n", "\n", " Best Params CV Score Test Accuracy \\\n", "2 {'metric': 'manhattan', 'n_neighbors': 7, 'wei... 0.867194 0.835322 \n", "1 {'solver': 'svd'} 0.839462 0.830549 \n", "0 {'C': 1, 'solver': 'lbfgs'} 0.826577 0.811456 \n", "\n", " Test F1-Score Improvement \n", "2 0.826347 0.002153 \n", "1 0.824773 0.000000 \n", "0 0.817984 0.000000 " ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "tuning_configs_region = {\n", " 'Logistic Regression': {\n", " 'model': LogisticRegression(max_iter=1000, random_state=42, class_weight='balanced'),\n", " 'params': {\n", " 'C': [0.01, 0.1, 1, 10, 100],\n", " 'solver': ['lbfgs', 'saga', 'newton-cg']\n", " }\n", " },\n", " 'LDA': {\n", " 'model': LinearDiscriminantAnalysis(),\n", " 'params': {\n", " 'solver': ['svd', 'lsqr', 'eigen']\n", " }\n", " },\n", " 'KNN (k=10)': {\n", " 'model': KNeighborsClassifier(),\n", " 'params': {\n", " 'n_neighbors': [7, 9, 10, 11, 13, 15],\n", " 'weights': ['uniform', 'distance'],\n", " 'metric': ['euclidean', 'manhattan', 'minkowski']\n", " }\n", " }\n", "}\n", "\n", "tuning_results_region = []\n", "best_models_region = {}\n", "\n", "for name, config in tuning_configs_region.items():\n", " print(f\"\\nTuning {name}...\")\n", " print(f\" Parameters to test: {config['params']}\")\n", " \n", " grid = GridSearchCV(\n", " config['model'],\n", " config['params'],\n", " cv=5,\n", " scoring='f1_weighted',\n", " n_jobs=-1,\n", " verbose=0\n", " )\n", " \n", " grid.fit(X_train_region_scaled, y_train_region)\n", " \n", " best_model = grid.best_estimator_\n", " best_models_region[name] = best_model\n", " \n", " y_pred = best_model.predict(X_test_region_scaled)\n", " \n", " accuracy = accuracy_score(y_test_region, y_pred)\n", " f1 = f1_score(y_test_region, y_pred, average='weighted', zero_division=0)\n", " \n", " tuning_results_region.append({\n", " 'Model': f\"{name} (Tuned)\",\n", " 'Best Params': str(grid.best_params_),\n", " 'CV Score': grid.best_score_,\n", " 'Test Accuracy': accuracy,\n", " 'Test F1-Score': f1,\n", " 'Improvement': f1 - results_region_baseline[results_region_baseline['Model']==name]['F1-Score'].values[0]\n", " })\n", " \n", " print(f\"Best params: {grid.best_params_}\")\n", " print(f\"CV F1-Score: {grid.best_score_:.4f}\")\n", " print(f\"Test F1-Score: {f1:.4f}\")\n", " print(f\"Improvement: {tuning_results_region[-1]['Improvement']:+.4f}\")\n", "\n", "tuning_df_region = pd.DataFrame(tuning_results_region).sort_values('Test F1-Score', ascending=False)\n", "\n", "print(\"Hyperparameter Tuning Results (Body Regions):\")\n", "print(\"\\n\")\n", "display(tuning_df_region)" ] }, { "cell_type": "markdown", "id": "d30296f1-afb5-45ea-9dc4-60e8e0843500", "metadata": {}, "source": [ "### FEature engineering" ] }, { "cell_type": "code", "execution_count": 19, "id": "4080074b-fd20-4ed2-8130-84ee3c45c888", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Original features: 41\n", "After polynomial transformation: 861\n", "New features created: 820\n", "\n", "Training Logistic Regression with polynomial features...\n", "\n", "Polynomial Features Results:\n", "Accuracy: 0.8473\n", "F1-Score: 0.8481\n", "Baseline F1: 0.8278\n", "Improvement: +0.0203\n" ] } ], "source": [ "# Create polynomial features\n", "poly = PolynomialFeatures(degree=2, include_bias=False, interaction_only=True)\n", "X_train_poly = poly.fit_transform(X_train_region)\n", "X_test_poly = poly.transform(X_test_region)\n", "\n", "print(f\"Original features: {X_train_region.shape[1]}\")\n", "print(f\"After polynomial transformation: {X_train_poly.shape[1]}\")\n", "print(f\"New features created: {X_train_poly.shape[1] - X_train_region.shape[1]}\")\n", "\n", "# Scale polynomial features\n", "scaler_poly = StandardScaler()\n", "X_train_poly_scaled = scaler_poly.fit_transform(X_train_poly)\n", "X_test_poly_scaled = scaler_poly.transform(X_test_poly)\n", "\n", "# Train champion model with polynomial features\n", "print(f\"\\nTraining Logistic Regression with polynomial features...\")\n", "lr_poly = LogisticRegression(max_iter=1000, random_state=42)\n", "lr_poly.fit(X_train_poly_scaled, y_train_region)\n", "\n", "y_pred_poly = lr_poly.predict(X_test_poly_scaled)\n", "poly_accuracy = accuracy_score(y_test_region, y_pred_poly)\n", "poly_f1 = f1_score(y_test_region, y_pred_poly, average='weighted')\n", "\n", "print(f\"\\nPolynomial Features Results:\")\n", "print(f\"Accuracy: {poly_accuracy:.4f}\")\n", "print(f\"F1-Score: {poly_f1:.4f}\")\n", "print(f\"Baseline F1: {champion_region_f1_baseline:.4f}\")\n", "print(f\"Improvement: {poly_f1 - champion_region_f1_baseline:+.4f}\")" ] }, { "cell_type": "code", "execution_count": 20, "id": "6aaac401-c2d4-43b9-aba0-45a3315fd932", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "ALL ITERATIONS RANKED BY PERFORMANCE:\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ApproachIterationModelF1-Score
4Body RegionsPolynomialLR + Poly Features0.848068
2Body RegionsBaselineKNN (k=7)0.827772
3Body RegionsTunedKNN (k=10) (Tuned)0.826347
114-ClassTunedLogistic Regression (Tuned)0.610090
014-ClassBaselineLDA0.566721
\n", "
" ], "text/plain": [ " Approach Iteration Model F1-Score\n", "4 Body Regions Polynomial LR + Poly Features 0.848068\n", "2 Body Regions Baseline KNN (k=7) 0.827772\n", "3 Body Regions Tuned KNN (k=10) (Tuned) 0.826347\n", "1 14-Class Tuned Logistic Regression (Tuned) 0.610090\n", "0 14-Class Baseline LDA 0.566721" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "FINAL CHAMPION MODEL\n", "Approach: Body Regions\n", "Iteration: Polynomial\n", "Model: LR + Poly Features\n", "F1-Score: 0.8481\n", "Improvement over baseline: +0.0203\n" ] } ], "source": [ "all_iterations = pd.DataFrame([\n", " # 14-class approaches\n", " {'Approach': '14-Class', 'Iteration': 'Baseline', \n", " 'Model': champion_14class_baseline, \n", " 'F1-Score': champion_14class_f1_baseline},\n", " {'Approach': '14-Class', 'Iteration': 'Tuned', \n", " 'Model': tuning_df_14class.iloc[0]['Model'], \n", " 'F1-Score': tuning_df_14class.iloc[0]['Test F1-Score']},\n", " \n", " # Body region approaches\n", " {'Approach': 'Body Regions', 'Iteration': 'Baseline', \n", " 'Model': champion_region_baseline, \n", " 'F1-Score': champion_region_f1_baseline},\n", " {'Approach': 'Body Regions', 'Iteration': 'Tuned', \n", " 'Model': tuning_df_region.iloc[0]['Model'], \n", " 'F1-Score': tuning_df_region.iloc[0]['Test F1-Score']},\n", " {'Approach': 'Body Regions', 'Iteration': 'Polynomial', \n", " 'Model': 'LR + Poly Features', \n", " 'F1-Score': poly_f1},\n", "])\n", "\n", "all_iterations = all_iterations.sort_values('F1-Score', ascending=False)\n", "\n", "print(\"\\nALL ITERATIONS RANKED BY PERFORMANCE:\")\n", "display(all_iterations)\n", "\n", "# Identify overall champion\n", "final_champion_row = all_iterations.iloc[0]\n", "print(\"FINAL CHAMPION MODEL\")\n", "print(f\"Approach: {final_champion_row['Approach']}\")\n", "print(f\"Iteration: {final_champion_row['Iteration']}\")\n", "print(f\"Model: {final_champion_row['Model']}\")\n", "print(f\"F1-Score: {final_champion_row['F1-Score']:.4f}\")\n", "print(f\"Improvement over baseline: +{final_champion_row['F1-Score'] - champion_region_f1_baseline:.4f}\")" ] }, { "cell_type": "code", "execution_count": 21, "id": "bb170b58-c408-4db5-a262-0fc00b93ba07", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Classification Report:\n", "----------------------------------------------------------------------------------------------------\n", " precision recall f1-score support\n", "\n", " Lower Body 0.71 0.74 0.72 114\n", " Upper Body 0.90 0.89 0.89 305\n", "\n", " accuracy 0.85 419\n", " macro avg 0.81 0.81 0.81 419\n", "weighted avg 0.85 0.85 0.85 419\n", "\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Determine which champion to use\n", "if final_champion_row['Approach'] == 'Body Regions':\n", " if final_champion_row['Iteration'] == 'Tuned':\n", " final_model = best_models_region[tuning_df_region.iloc[0]['Model'].replace(' (Tuned)', '')]\n", " X_test_final = X_test_region_scaled\n", " y_test_final = y_test_region\n", " elif final_champion_row['Iteration'] == 'Polynomial':\n", " final_model = lr_poly\n", " X_test_final = X_test_poly_scaled\n", " y_test_final = y_test_region\n", " else: # Baseline\n", " final_model = trained_region[champion_region_baseline]\n", " X_test_final = X_test_region_scaled\n", " y_test_final = y_test_region\n", " \n", " classes = sorted(y_region.unique())\n", "else: # 14-class\n", " final_model = best_models_14class[tuning_df_14class.iloc[0]['Model'].replace(' (Tuned)', '')]\n", " X_test_final = X_test_scaled\n", " y_test_final = y_test\n", " classes = sorted(y.unique())\n", "\n", "# Get predictions\n", "y_pred_final = final_model.predict(X_test_final)\n", "\n", "# Classification report\n", "print(\"\\nClassification Report:\")\n", "print(\"-\"*100)\n", "print(classification_report(y_test_final, y_pred_final, zero_division=0))\n", "\n", "# Confusion matrix\n", "cm = confusion_matrix(y_test_final, y_pred_final, labels=classes)\n", "cm_df = pd.DataFrame(cm, index=classes, columns=classes)\n", "\n", "plt.figure(figsize=(8, 6))\n", "sns.heatmap(cm_df, annot=True, fmt='d', cmap='Greens', cbar_kws={'label': 'Count'})\n", "plt.title(f'Final Champion: {final_champion_row[\"Model\"]}\\n({final_champion_row[\"Approach\"]} - {final_champion_row[\"Iteration\"]})', \n", " fontweight='bold', fontsize=14)\n", "plt.ylabel('Actual', fontsize=12)\n", "plt.xlabel('Predicted', fontsize=12)\n", "plt.tight_layout()\n", "plt.show()\n" ] }, { "cell_type": "code", "execution_count": 22, "id": "b894966a-0c41-4d24-83a9-3d9eef777493", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model saved: final_champion_model_A3.pkl\n" ] } ], "source": [ "# Save the champion model\n", "model_filename = 'final_champion_model_A3.pkl'\n", "with open(model_filename, 'wb') as f:\n", " pickle.dump(final_model, f)\n", "print(f\"Model saved: {model_filename}\")" ] }, { "cell_type": "code", "execution_count": null, "id": "3410f235-b475-4d97-a5d5-25601c8fa52a", "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "id": "560d3057-2d3a-4ebe-a4e6-0e125efe9270", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.14.0" } }, "nbformat": 4, "nbformat_minor": 5 }