From ef084b396596e8b8c1138d45e196a816bbdb1006 Mon Sep 17 00:00:00 2001 From: Keshav Anand Date: Wed, 22 Jul 2026 22:16:51 -0400 Subject: [PATCH] feature extracted --- main.ipynb | 387 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 384 insertions(+), 3 deletions(-) diff --git a/main.ipynb b/main.ipynb index 4f078d7..6cb1319 100644 --- a/main.ipynb +++ b/main.ipynb @@ -11068,11 +11068,392 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "id": "b58e7aed", "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "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", + " \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", + "
match_iddelivery_numberlegal_ballover_ballscorewicketstarget_scoreinnings_progressballs_remainingovers_completed...batting_strength_remainingpowerplaymiddle_oversdeath_oversscore_per_ball_remainingscore_wicket_combopressure_indexscore_squaredprogress_squaredscore_progress_interaction
01001349110.1001680.0083331190.166667...0.0833331000.00000000.000.0000690.000
11001349220.2001680.0166671180.333333...0.0840341000.00000000.000.0002780.000
21001349330.3101680.0250001170.500000...0.0847461000.008475100.010.0006250.025
31001349440.4301680.0333331160.666667...0.0854701000.025641300.090.0011110.100
41001349550.5301680.0416671150.833333...0.0862071000.025862300.090.0017360.125
\n", + "

5 rows × 26 columns

\n", + "
" + ], + "text/plain": [ + " match_id delivery_number legal_ball over_ball score wickets \\\n", + "0 1001349 1 1 0.1 0 0 \n", + "1 1001349 2 2 0.2 0 0 \n", + "2 1001349 3 3 0.3 1 0 \n", + "3 1001349 4 4 0.4 3 0 \n", + "4 1001349 5 5 0.5 3 0 \n", + "\n", + " target_score innings_progress balls_remaining overs_completed ... \\\n", + "0 168 0.008333 119 0.166667 ... \n", + "1 168 0.016667 118 0.333333 ... \n", + "2 168 0.025000 117 0.500000 ... \n", + "3 168 0.033333 116 0.666667 ... \n", + "4 168 0.041667 115 0.833333 ... \n", + "\n", + " batting_strength_remaining powerplay middle_overs death_overs \\\n", + "0 0.083333 1 0 0 \n", + "1 0.084034 1 0 0 \n", + "2 0.084746 1 0 0 \n", + "3 0.085470 1 0 0 \n", + "4 0.086207 1 0 0 \n", + "\n", + " score_per_ball_remaining score_wicket_combo pressure_index \\\n", + "0 0.000000 0 0.0 \n", + "1 0.000000 0 0.0 \n", + "2 0.008475 10 0.0 \n", + "3 0.025641 30 0.0 \n", + "4 0.025862 30 0.0 \n", + "\n", + " score_squared progress_squared score_progress_interaction \n", + "0 0 0.000069 0.000 \n", + "1 0 0.000278 0.000 \n", + "2 1 0.000625 0.025 \n", + "3 9 0.001111 0.100 \n", + "4 9 0.001736 0.125 \n", + "\n", + "[5 rows x 26 columns]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "import numpy as np\n", + "\n", + "\n", + "df = pd.read_csv(\n", + " \"data/run_prediction_dataset_raw.csv\"\n", + ")\n", + "\n", + "\n", + "# =========================\n", + "# Time based features\n", + "# =========================\n", + "\n", + "# balls completed percentage\n", + "df[\"innings_progress\"] = (\n", + " df[\"legal_ball\"] / 120\n", + ")\n", + "\n", + "\n", + "df[\"balls_remaining\"] = (\n", + " 120 - df[\"legal_ball\"]\n", + ")\n", + "\n", + "\n", + "df[\"overs_completed\"] = (\n", + " df[\"legal_ball\"] / 6\n", + ")\n", + "\n", + "\n", + "df[\"overs_remaining\"] = (\n", + " df[\"balls_remaining\"] / 6\n", + ")\n", + "\n", + "\n", + "\n", + "# =========================\n", + "# Scoring rate features\n", + "# =========================\n", + "\n", + "# current run rate\n", + "df[\"run_rate\"] = np.where(\n", + " df[\"legal_ball\"] > 0,\n", + " df[\"score\"] / (df[\"legal_ball\"] / 6),\n", + " 0\n", + ")\n", + "\n", + "\n", + "# projected score if current rate continues\n", + "df[\"projected_score\"] = (\n", + " df[\"run_rate\"] * 20\n", + ")\n", + "\n", + "\n", + "# required scoring multiplier\n", + "# how much higher/lower than average T20 pace\n", + "df[\"run_rate_factor\"] = (\n", + " df[\"run_rate\"] / 8\n", + ")\n", + "\n", + "\n", + "\n", + "# =========================\n", + "# Wicket features\n", + "# =========================\n", + "\n", + "df[\"wickets_remaining\"] = (\n", + " 10 - df[\"wickets\"]\n", + ")\n", + "\n", + "\n", + "df[\"wicket_fraction\"] = (\n", + " df[\"wickets\"] / 10\n", + ")\n", + "\n", + "\n", + "# remaining batting resources\n", + "df[\"batting_strength_remaining\"] = (\n", + " df[\"wickets_remaining\"]\n", + " /\n", + " (df[\"balls_remaining\"] + 1)\n", + ")\n", + "\n", + "\n", + "\n", + "# =========================\n", + "# Phase features\n", + "# =========================\n", + "\n", + "df[\"powerplay\"] = (\n", + " df[\"legal_ball\"] <= 36\n", + ").astype(int)\n", + "\n", + "\n", + "df[\"middle_overs\"] = (\n", + " (df[\"legal_ball\"] > 36)\n", + " &\n", + " (df[\"legal_ball\"] <= 90)\n", + ").astype(int)\n", + "\n", + "\n", + "df[\"death_overs\"] = (\n", + " df[\"legal_ball\"] > 90\n", + ").astype(int)\n", + "\n", + "\n", + "\n", + "# =========================\n", + "# Interaction features\n", + "# =========================\n", + "\n", + "# score + time context\n", + "\n", + "df[\"score_per_ball_remaining\"] = (\n", + " df[\"score\"] /\n", + " (df[\"balls_remaining\"] + 1)\n", + ")\n", + "\n", + "\n", + "df[\"score_wicket_combo\"] = (\n", + " df[\"score\"] *\n", + " (df[\"wickets_remaining\"])\n", + ")\n", + "\n", + "\n", + "df[\"pressure_index\"] = (\n", + " df[\"wickets\"]\n", + " *\n", + " df[\"innings_progress\"]\n", + ")\n", + "\n", + "\n", + "\n", + "# =========================\n", + "# Polynomial features\n", + "# =========================\n", + "\n", + "df[\"score_squared\"] = (\n", + " df[\"score\"] ** 2\n", + ")\n", + "\n", + "\n", + "df[\"progress_squared\"] = (\n", + " df[\"innings_progress\"] ** 2\n", + ")\n", + "\n", + "\n", + "df[\"score_progress_interaction\"] = (\n", + " df[\"score\"]\n", + " *\n", + " df[\"innings_progress\"]\n", + ")\n", + "\n", + "\n", + "# =========================\n", + "# Cleanup\n", + "# =========================\n", + "\n", + "df = df.replace(\n", + " [np.inf, -np.inf],\n", + " 0\n", + ")\n", + "\n", + "df = df.fillna(0)\n", + "\n", + "\n", + "df.head()" + ] } ], "metadata": {