feature extracted

This commit is contained in:
2026-07-22 22:16:51 -04:00
parent c70040668b
commit ef084b3965

View File

@@ -11068,11 +11068,392 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 5,
"id": "b58e7aed",
"metadata": {},
"outputs": [],
"source": []
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>match_id</th>\n",
" <th>delivery_number</th>\n",
" <th>legal_ball</th>\n",
" <th>over_ball</th>\n",
" <th>score</th>\n",
" <th>wickets</th>\n",
" <th>target_score</th>\n",
" <th>innings_progress</th>\n",
" <th>balls_remaining</th>\n",
" <th>overs_completed</th>\n",
" <th>...</th>\n",
" <th>batting_strength_remaining</th>\n",
" <th>powerplay</th>\n",
" <th>middle_overs</th>\n",
" <th>death_overs</th>\n",
" <th>score_per_ball_remaining</th>\n",
" <th>score_wicket_combo</th>\n",
" <th>pressure_index</th>\n",
" <th>score_squared</th>\n",
" <th>progress_squared</th>\n",
" <th>score_progress_interaction</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1001349</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0.1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>168</td>\n",
" <td>0.008333</td>\n",
" <td>119</td>\n",
" <td>0.166667</td>\n",
" <td>...</td>\n",
" <td>0.083333</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0.000000</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0.000069</td>\n",
" <td>0.000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1001349</td>\n",
" <td>2</td>\n",
" <td>2</td>\n",
" <td>0.2</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>168</td>\n",
" <td>0.016667</td>\n",
" <td>118</td>\n",
" <td>0.333333</td>\n",
" <td>...</td>\n",
" <td>0.084034</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0.000000</td>\n",
" <td>0</td>\n",
" <td>0.0</td>\n",
" <td>0</td>\n",
" <td>0.000278</td>\n",
" <td>0.000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1001349</td>\n",
" <td>3</td>\n",
" <td>3</td>\n",
" <td>0.3</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>168</td>\n",
" <td>0.025000</td>\n",
" <td>117</td>\n",
" <td>0.500000</td>\n",
" <td>...</td>\n",
" <td>0.084746</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0.008475</td>\n",
" <td>10</td>\n",
" <td>0.0</td>\n",
" <td>1</td>\n",
" <td>0.000625</td>\n",
" <td>0.025</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1001349</td>\n",
" <td>4</td>\n",
" <td>4</td>\n",
" <td>0.4</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>168</td>\n",
" <td>0.033333</td>\n",
" <td>116</td>\n",
" <td>0.666667</td>\n",
" <td>...</td>\n",
" <td>0.085470</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0.025641</td>\n",
" <td>30</td>\n",
" <td>0.0</td>\n",
" <td>9</td>\n",
" <td>0.001111</td>\n",
" <td>0.100</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1001349</td>\n",
" <td>5</td>\n",
" <td>5</td>\n",
" <td>0.5</td>\n",
" <td>3</td>\n",
" <td>0</td>\n",
" <td>168</td>\n",
" <td>0.041667</td>\n",
" <td>115</td>\n",
" <td>0.833333</td>\n",
" <td>...</td>\n",
" <td>0.086207</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0.025862</td>\n",
" <td>30</td>\n",
" <td>0.0</td>\n",
" <td>9</td>\n",
" <td>0.001736</td>\n",
" <td>0.125</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 26 columns</p>\n",
"</div>"
],
"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": {