feature extracted
This commit is contained in:
387
main.ipynb
387
main.ipynb
@@ -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": {
|
||||
|
||||
Reference in New Issue
Block a user