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",
+ " match_id | \n",
+ " delivery_number | \n",
+ " legal_ball | \n",
+ " over_ball | \n",
+ " score | \n",
+ " wickets | \n",
+ " target_score | \n",
+ " innings_progress | \n",
+ " balls_remaining | \n",
+ " overs_completed | \n",
+ " ... | \n",
+ " batting_strength_remaining | \n",
+ " powerplay | \n",
+ " middle_overs | \n",
+ " death_overs | \n",
+ " score_per_ball_remaining | \n",
+ " score_wicket_combo | \n",
+ " pressure_index | \n",
+ " score_squared | \n",
+ " progress_squared | \n",
+ " score_progress_interaction | \n",
+ "
\n",
+ " \n",
+ " \n",
+ " \n",
+ " | 0 | \n",
+ " 1001349 | \n",
+ " 1 | \n",
+ " 1 | \n",
+ " 0.1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 168 | \n",
+ " 0.008333 | \n",
+ " 119 | \n",
+ " 0.166667 | \n",
+ " ... | \n",
+ " 0.083333 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0.000000 | \n",
+ " 0 | \n",
+ " 0.0 | \n",
+ " 0 | \n",
+ " 0.000069 | \n",
+ " 0.000 | \n",
+ "
\n",
+ " \n",
+ " | 1 | \n",
+ " 1001349 | \n",
+ " 2 | \n",
+ " 2 | \n",
+ " 0.2 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 168 | \n",
+ " 0.016667 | \n",
+ " 118 | \n",
+ " 0.333333 | \n",
+ " ... | \n",
+ " 0.084034 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0.000000 | \n",
+ " 0 | \n",
+ " 0.0 | \n",
+ " 0 | \n",
+ " 0.000278 | \n",
+ " 0.000 | \n",
+ "
\n",
+ " \n",
+ " | 2 | \n",
+ " 1001349 | \n",
+ " 3 | \n",
+ " 3 | \n",
+ " 0.3 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 168 | \n",
+ " 0.025000 | \n",
+ " 117 | \n",
+ " 0.500000 | \n",
+ " ... | \n",
+ " 0.084746 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0.008475 | \n",
+ " 10 | \n",
+ " 0.0 | \n",
+ " 1 | \n",
+ " 0.000625 | \n",
+ " 0.025 | \n",
+ "
\n",
+ " \n",
+ " | 3 | \n",
+ " 1001349 | \n",
+ " 4 | \n",
+ " 4 | \n",
+ " 0.4 | \n",
+ " 3 | \n",
+ " 0 | \n",
+ " 168 | \n",
+ " 0.033333 | \n",
+ " 116 | \n",
+ " 0.666667 | \n",
+ " ... | \n",
+ " 0.085470 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0.025641 | \n",
+ " 30 | \n",
+ " 0.0 | \n",
+ " 9 | \n",
+ " 0.001111 | \n",
+ " 0.100 | \n",
+ "
\n",
+ " \n",
+ " | 4 | \n",
+ " 1001349 | \n",
+ " 5 | \n",
+ " 5 | \n",
+ " 0.5 | \n",
+ " 3 | \n",
+ " 0 | \n",
+ " 168 | \n",
+ " 0.041667 | \n",
+ " 115 | \n",
+ " 0.833333 | \n",
+ " ... | \n",
+ " 0.086207 | \n",
+ " 1 | \n",
+ " 0 | \n",
+ " 0 | \n",
+ " 0.025862 | \n",
+ " 30 | \n",
+ " 0.0 | \n",
+ " 9 | \n",
+ " 0.001736 | \n",
+ " 0.125 | \n",
+ "
\n",
+ " \n",
+ "
\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": {