{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-10-28T02:09:55.565034Z","iopub.execute_input":"2022-10-28T02:09:55.566029Z","iopub.status.idle":"2022-10-28T02:09:55.603964Z","shell.execute_reply.started":"2022-10-28T02:09:55.565932Z","shell.execute_reply":"2022-10-28T02:09:55.602645Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"dtypes_df = pd.read_csv('/kaggle/input/tabular-playground-series-oct-2022/train_dtypes.csv')\ndtypes = {k: v for (k, v) in zip(dtypes_df.column, dtypes_df.dtype)}\ntrain0_df = pd.read_csv('/kaggle/input/tabular-playground-series-oct-2022/train_0.csv', dtype=dtypes)","metadata":{"execution":{"iopub.status.busy":"2022-10-28T02:09:58.925823Z","iopub.execute_input":"2022-10-28T02:09:58.926177Z","iopub.status.idle":"2022-10-28T02:10:24.193134Z","shell.execute_reply.started":"2022-10-28T02:09:58.92615Z","shell.execute_reply":"2022-10-28T02:10:24.191464Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train1_df = pd.read_csv('/kaggle/input/tabular-playground-series-oct-2022/train_1.csv', dtype=dtypes)\ntrain2_df = pd.read_csv('/kaggle/input/tabular-playground-series-oct-2022/train_2.csv', dtype=dtypes)\ntrain3_df = pd.read_csv('/kaggle/input/tabular-playground-series-oct-2022/train_3.csv', dtype=dtypes)\ntrain4_df = pd.read_csv('/kaggle/input/tabular-playground-series-oct-2022/train_4.csv', dtype=dtypes)\ntrain5_df = pd.read_csv('/kaggle/input/tabular-playground-series-oct-2022/train_5.csv', dtype=dtypes)\ntrain6_df = pd.read_csv('/kaggle/input/tabular-playground-series-oct-2022/train_6.csv', dtype=dtypes)\ntrain7_df = pd.read_csv('/kaggle/input/tabular-playground-series-oct-2022/train_7.csv', dtype=dtypes)\ntrain8_df = pd.read_csv('/kaggle/input/tabular-playground-series-oct-2022/train_8.csv', dtype=dtypes)\ntrain9_df = pd.read_csv('/kaggle/input/tabular-playground-series-oct-2022/train_9.csv', dtype=dtypes)","metadata":{"execution":{"iopub.status.busy":"2022-10-22T03:55:21.974809Z","iopub.execute_input":"2022-10-22T03:55:21.976049Z","iopub.status.idle":"2022-10-22T04:01:14.483745Z","shell.execute_reply.started":"2022-10-22T03:55:21.975998Z","shell.execute_reply":"2022-10-22T04:01:14.48235Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df = pd.concat([train0_df, train1_df, train2_df, train3_df, train4_df, train5_df, train6_df, train7_df,\n                     train8_df, train9_df])\ntrain_df.head()","metadata":{"execution":{"iopub.status.busy":"2022-10-22T04:01:29.527194Z","iopub.execute_input":"2022-10-22T04:01:29.527703Z","iopub.status.idle":"2022-10-22T04:01:34.440377Z","shell.execute_reply.started":"2022-10-22T04:01:29.527659Z","shell.execute_reply":"2022-10-22T04:01:34.439326Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"del train0_df,train1_df,train2_df,train3_df,train4_df,train5_df,train6_df,train7_df,train8_df,train9_df","metadata":{"execution":{"iopub.status.busy":"2022-10-22T04:01:52.906451Z","iopub.execute_input":"2022-10-22T04:01:52.906955Z","iopub.status.idle":"2022-10-22T04:01:53.000001Z","shell.execute_reply.started":"2022-10-22T04:01:52.906916Z","shell.execute_reply":"2022-10-22T04:01:52.998388Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## EDA","metadata":{}},{"cell_type":"code","source":"train0_df.describe()","metadata":{"execution":{"iopub.status.busy":"2022-10-28T02:11:42.878006Z","iopub.execute_input":"2022-10-28T02:11:42.878375Z","iopub.status.idle":"2022-10-28T02:11:48.482301Z","shell.execute_reply.started":"2022-10-28T02:11:42.878347Z","shell.execute_reply":"2022-10-28T02:11:48.480952Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train0_df.isnull().sum()","metadata":{"execution":{"iopub.status.busy":"2022-10-28T02:12:55.43314Z","iopub.execute_input":"2022-10-28T02:12:55.433487Z","iopub.status.idle":"2022-10-28T02:12:55.716055Z","shell.execute_reply.started":"2022-10-28T02:12:55.43346Z","shell.execute_reply":"2022-10-28T02:12:55.713943Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"proporciones_A = train0_df[\"team_A_scoring_within_10sec\"].value_counts().reset_index()\nproporciones_A[\"Prop\"] = proporciones_A[\"team_A_scoring_within_10sec\"]/proporciones_A.team_A_scoring_within_10sec.sum()*100","metadata":{"execution":{"iopub.status.busy":"2022-10-28T02:33:42.041971Z","iopub.execute_input":"2022-10-28T02:33:42.042331Z","iopub.status.idle":"2022-10-28T02:33:42.062012Z","shell.execute_reply.started":"2022-10-28T02:33:42.042304Z","shell.execute_reply":"2022-10-28T02:33:42.060928Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"proporciones_A","metadata":{"execution":{"iopub.status.busy":"2022-10-28T02:33:43.961487Z","iopub.execute_input":"2022-10-28T02:33:43.962014Z","iopub.status.idle":"2022-10-28T02:33:43.971906Z","shell.execute_reply.started":"2022-10-28T02:33:43.961985Z","shell.execute_reply":"2022-10-28T02:33:43.97055Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(5,4))\nsns.countplot(x=\"team_A_scoring_within_10sec\", data=train0_df)\nplt.title(\"team A score\")\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2022-10-28T02:46:05.075135Z","iopub.execute_input":"2022-10-28T02:46:05.07546Z","iopub.status.idle":"2022-10-28T02:46:05.323993Z","shell.execute_reply.started":"2022-10-28T02:46:05.075434Z","shell.execute_reply":"2022-10-28T02:46:05.323162Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"proporciones_B = train0_df[\"team_B_scoring_within_10sec\"].value_counts().reset_index()\nproporciones_B[\"Prop\"] = proporciones_B[\"team_B_scoring_within_10sec\"]/proporciones_B.team_B_scoring_within_10sec.sum()*100","metadata":{"execution":{"iopub.status.busy":"2022-10-28T02:34:43.556796Z","iopub.execute_input":"2022-10-28T02:34:43.557242Z","iopub.status.idle":"2022-10-28T02:34:43.578796Z","shell.execute_reply.started":"2022-10-28T02:34:43.557208Z","shell.execute_reply":"2022-10-28T02:34:43.577568Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"proporciones_B","metadata":{"execution":{"iopub.status.busy":"2022-10-28T02:35:21.231496Z","iopub.execute_input":"2022-10-28T02:35:21.231811Z","iopub.status.idle":"2022-10-28T02:35:21.242373Z","shell.execute_reply.started":"2022-10-28T02:35:21.231776Z","shell.execute_reply":"2022-10-28T02:35:21.240619Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(5,4))\nsns.countplot(x=\"team_B_scoring_within_10sec\", data=train0_df)\nplt.title(\"team B score\")\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2022-10-28T02:46:25.938231Z","iopub.execute_input":"2022-10-28T02:46:25.938922Z","iopub.status.idle":"2022-10-28T02:46:26.194541Z","shell.execute_reply.started":"2022-10-28T02:46:25.93889Z","shell.execute_reply":"2022-10-28T02:46:26.193737Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train0_df[['event_time', 'ball_pos_x', 'ball_pos_y',\n       'ball_pos_z', 'ball_vel_x', 'ball_vel_y', 'ball_vel_z', 'p0_pos_x',\n       'p0_pos_y', 'p0_pos_z', 'p0_vel_x', 'p0_vel_y', 'p0_vel_z', 'p0_boost',\n       'p1_pos_x', 'p1_pos_y', 'p1_pos_z', 'p1_vel_x', 'p1_vel_y', 'p1_vel_z',\n       'p1_boost', 'p2_pos_x', 'p2_pos_y', 'p2_pos_z', 'p2_vel_x', 'p2_vel_y',\n       'p2_vel_z', 'p2_boost', 'p3_pos_x', 'p3_pos_y', 'p3_pos_z', 'p3_vel_x',\n       'p3_vel_y', 'p3_vel_z', 'p3_boost', 'p4_pos_x', 'p4_pos_y', 'p4_pos_z',\n       'p4_vel_x', 'p4_vel_y', 'p4_vel_z', 'p4_boost', 'p5_pos_x', 'p5_pos_y',\n       'p5_pos_z', 'p5_vel_x', 'p5_vel_y', 'p5_vel_z', 'p5_boost',\n       'boost0_timer', 'boost1_timer', 'boost2_timer', 'boost3_timer',\n       'boost4_timer', 'boost5_timer', 'player_scoring_next']]","metadata":{"execution":{"iopub.status.busy":"2022-10-28T02:43:08.584946Z","iopub.execute_input":"2022-10-28T02:43:08.585356Z","iopub.status.idle":"2022-10-28T02:43:08.907089Z","shell.execute_reply.started":"2022-10-28T02:43:08.585326Z","shell.execute_reply":"2022-10-28T02:43:08.905549Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train0_df.columns","metadata":{"execution":{"iopub.status.busy":"2022-10-28T02:41:57.710985Z","iopub.execute_input":"2022-10-28T02:41:57.711348Z","iopub.status.idle":"2022-10-28T02:41:57.720707Z","shell.execute_reply.started":"2022-10-28T02:41:57.711321Z","shell.execute_reply":"2022-10-28T02:41:57.719145Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\nimport seaborn as sns","metadata":{"execution":{"iopub.status.busy":"2022-10-28T02:44:29.966569Z","iopub.execute_input":"2022-10-28T02:44:29.966935Z","iopub.status.idle":"2022-10-28T02:44:30.441411Z","shell.execute_reply.started":"2022-10-28T02:44:29.966908Z","shell.execute_reply":"2022-10-28T02:44:30.43947Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(12,10))\nsns.heatmap(train0_df[['event_time', 'ball_pos_x', 'ball_pos_y',\n       'ball_pos_z', 'ball_vel_x', 'ball_vel_y', 'ball_vel_z', 'p0_pos_x',\n       'p0_pos_y', 'p0_pos_z', 'p0_vel_x', 'p0_vel_y', 'p0_vel_z', 'p0_boost',\n       'p1_pos_x', 'p1_pos_y', 'p1_pos_z', 'p1_vel_x', 'p1_vel_y', 'p1_vel_z',\n       'p1_boost', 'p2_pos_x', 'p2_pos_y', 'p2_pos_z', 'p2_vel_x', 'p2_vel_y',\n       'p2_vel_z', 'p2_boost', 'p3_pos_x', 'p3_pos_y', 'p3_pos_z', 'p3_vel_x',\n       'p3_vel_y', 'p3_vel_z', 'p3_boost', 'p4_pos_x', 'p4_pos_y', 'p4_pos_z',\n       'p4_vel_x', 'p4_vel_y', 'p4_vel_z', 'p4_boost', 'p5_pos_x', 'p5_pos_y',\n       'p5_pos_z', 'p5_vel_x', 'p5_vel_y', 'p5_vel_z', 'p5_boost',\n       'boost0_timer', 'boost1_timer', 'boost2_timer', 'boost3_timer',\n       'boost4_timer', 'boost5_timer', 'player_scoring_next']].corr())\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2022-10-28T02:44:32.651794Z","iopub.execute_input":"2022-10-28T02:44:32.652133Z","iopub.status.idle":"2022-10-28T02:44:46.976764Z","shell.execute_reply.started":"2022-10-28T02:44:32.652082Z","shell.execute_reply":"2022-10-28T02:44:46.975275Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Posicion Balon VS gol/no gol en proximos 10 segundos\n\ntrain0_df[\"Target\"] = train0_df[\"team_A_scoring_within_10sec\"].astype(str)+train0_df[\"team_B_scoring_within_10sec\"].astype(str)\ntrain0_df[\"Target\"] = train0_df[\"Target\"].map({\"00\":\"no gol\", \"10\":\"Equipo A gol\",\"01\":\"Equipo B gol\"})\n\nplt.figure(figsize = (12,12))\nsns.scatterplot(x = train0_df[\"ball_pos_x\"], y = train0_df[\"ball_pos_y\"],hue = train0_df['Target'])\nplt.title(\"Posicion Balon VS gol/no gol en proximos 10 segundos\")\nplt.legend(loc='upper right')\nplt.show()\n","metadata":{"execution":{"iopub.status.busy":"2022-10-28T03:04:52.142787Z","iopub.execute_input":"2022-10-28T03:04:52.144872Z","iopub.status.idle":"2022-10-28T03:05:33.52641Z","shell.execute_reply.started":"2022-10-28T03:04:52.144809Z","shell.execute_reply":"2022-10-28T03:05:33.525616Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"len(train0_df.game_num.unique())","metadata":{"execution":{"iopub.status.busy":"2022-10-28T02:23:13.030506Z","iopub.execute_input":"2022-10-28T02:23:13.030841Z","iopub.status.idle":"2022-10-28T02:23:13.051782Z","shell.execute_reply.started":"2022-10-28T02:23:13.030817Z","shell.execute_reply":"2022-10-28T02:23:13.049635Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# cONVIERTO NAN en NIN String\ntrain_df[\"team_scoring_next\"] = train_df[\"team_scoring_next\"].fillna(\"NIN\")","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Creación del Modelo","metadata":{}},{"cell_type":"markdown","source":"### Crear una muestra","metadata":{}},{"cell_type":"code","source":"conteo_ganado = train_df.groupby(\"game_num\")[\"team_scoring_next\"].unique().reset_index()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"combi = conteo_ganado[\"team_scoring_next\"].apply(lambda x: ''.join(x))\nconteo_ganado[\"combi\"] = combi","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"valores_muestra = combi.value_counts()/conteo_ganado.shape[0]\nprint(valores_muestra)\nvalores_muestra_int = round(valores_muestra*3000)\n\nvalores_muestra_int = valores_muestra_int.reset_index()\nvalores_muestra_int.columns = [\"combi\",\"cnt\"]\n","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from random import sample","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#De los 7365 vamos hacer una muestra de 3000\n\nABNIN = sample(list(conteo_ganado[conteo_ganado[\"combi\"] == \"ABNIN\"][\"game_num\"]),int(valores_muestra_int[valores_muestra_int.combi == \"ABNIN\"][\"cnt\"]))\nBANIN = sample(list(conteo_ganado[conteo_ganado[\"combi\"] == \"BANIN\"][\"game_num\"]),int(valores_muestra_int[valores_muestra_int.combi == \"BANIN\"][\"cnt\"]))\nANIN = sample(list(conteo_ganado[conteo_ganado[\"combi\"] == \"ANIN\"][\"game_num\"]),int(valores_muestra_int[valores_muestra_int.combi == \"ANIN\"][\"cnt\"]))\nBNIN = sample(list(conteo_ganado[conteo_ganado[\"combi\"] == \"BNIN\"][\"game_num\"]),int(valores_muestra_int[valores_muestra_int.combi == \"BNIN\"][\"cnt\"]))\nAB = sample(list(conteo_ganado[conteo_ganado[\"combi\"] == \"AB\"][\"game_num\"]),int(valores_muestra_int[valores_muestra_int.combi == \"AB\"][\"cnt\"]))\nBA = sample(list(conteo_ganado[conteo_ganado[\"combi\"] == \"BA\"][\"game_num\"]),int(valores_muestra_int[valores_muestra_int.combi == \"BA\"][\"cnt\"]))\nB = sample(list(conteo_ganado[conteo_ganado[\"combi\"] == \"B\"][\"game_num\"]),int(valores_muestra_int[valores_muestra_int.combi == \"B\"][\"cnt\"]))\nA = sample(list(conteo_ganado[conteo_ganado[\"combi\"] == \"A\"][\"game_num\"]),int(valores_muestra_int[valores_muestra_int.combi == \"A\"][\"cnt\"]))\nNINA = sample(list(conteo_ganado[conteo_ganado[\"combi\"] == \"NINA\"][\"game_num\"]),int(valores_muestra_int[valores_muestra_int.combi == \"NINA\"][\"cnt\"]))\nNINB = sample(list(conteo_ganado[conteo_ganado[\"combi\"] == \"NINB\"][\"game_num\"]),int(valores_muestra_int[valores_muestra_int.combi == \"NINB\"][\"cnt\"]))\nNIN = sample(list(conteo_ganado[conteo_ganado[\"combi\"] == \"NIN\"][\"game_num\"]),int(valores_muestra_int[valores_muestra_int.combi == \"NIN\"][\"cnt\"]))\nANINB = sample(list(conteo_ganado[conteo_ganado[\"combi\"] == \"ANINB\"][\"game_num\"]),int(valores_muestra_int[valores_muestra_int.combi == \"ANINB\"][\"cnt\"]))\nBNINA = sample(list(conteo_ganado[conteo_ganado[\"combi\"] == \"BNINA\"][\"game_num\"]),int(valores_muestra_int[valores_muestra_int.combi == \"BNINA\"][\"cnt\"]))","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df_muestra = train_df[train_df.game_num.isin(ABNIN +BANIN+ANIN+BNIN+AB+BA+B+A+NINA+NINB+NIN+ANINB+BNINA)]","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df=train_df_muestra.drop([\"player_scoring_next\",\"team_scoring_next\",\"game_num\",\"event_id\",\"event_time\"],axis = 1)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"valores_nulos = train_df.isnull().sum().reset_index().sort_values(0, ascending=False)\nvalores_nulos = valores_nulos.rename(columns={0:\"cant_nan\"})\nvalores_nulos","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"valores_nulos[valores_nulos.cant_nan != 0]","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Crear variables nuevas","metadata":{}},{"cell_type":"code","source":"from scipy.spatial import distance","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def distancia(data):\n    # Distancia \n\n    #Reemplazo todos los valores nulos de las posiciones de los jugadores en 9999\n    for i in range(0,6):\n        data[\"p\"+str(i)+\"_pos_x\"][data[\"p\"+str(i)+\"_pos_x\"].isnull()] = 99999\n        data[\"p\"+str(i)+\"_pos_y\"][data[\"p\"+str(i)+\"_pos_y\"].isnull()] = 99999\n        data[\"p\"+str(i)+\"_pos_z\"][data[\"p\"+str(i)+\"_pos_z\"].isnull()] = 99999\n\n    #creo una nueva variable que identifique los que tenian nulo \n    for i in range(0,6):\n        data[\"pos\"+str(i)+\"_null\"] =data[\"p\"+str(i)+\"_pos_x\"].apply(lambda x: 1 if x == 99999 else 0)\n\n    #creo una variable donde estén los vectores de los jugadores \n    player_pos = data[[\"p\"+str(2)+\"_pos_x\",\"p\"+str(2)+\"_pos_y\",\"p\"+str(2)+\"_pos_z\"]].apply(lambda x: (x[0],x[1],x[2]), axis = 1)\n\n    # creo una variable donde estén los vectores de posición del balón\n    ball_pos =  data[[\"ball_pos_x\",\"ball_pos_y\",\"ball_pos_z\"]].apply(lambda x: (x[0],x[1],x[2]), axis = 1)\n\n    data[\"dist_euclidean\"] = pd.DataFrame({\"player_pos\":player_pos,\"ball_pos\":ball_pos}).apply(lambda x: distance.euclidean(x[0],x[1]), axis = 1)\n\n    return data\n","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df = distancia(train_df)\ntrain_df = train_df.fillna(0)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# creación de más variables\ndef SignoFn(train_df):\n    ball_pos_y = train_df[['ball_pos_y']].values\n    size = ball_pos_y.shape[0]\n    signo = np.zeros((size, 1))\n    for i in range(size):\n            if ball_pos_y[i] > 0:\n                signo[i] = 1\n            else:\n                signo[i] = 0\n    signo_pd = signo\n    return signo_pd\n\n\n\ntrain_df[\"signoY\"] = SignoFn(train_df)\n\ndef dist_cm_teamA(train_df):\n    p0_pos_x = train_df[['p0_pos_x']].values\n    p0_pos_y = train_df[['p0_pos_y']].values\n\n    p1_pos_x = train_df[['p1_pos_x']].values\n    p1_pos_y = train_df[['p1_pos_y']].values\n\n    p2_pos_x = train_df[['p2_pos_x']].values\n    p2_pos_y = train_df[['p2_pos_y']].values\n    \n    x_cm = (p0_pos_x + p1_pos_x + p2_pos_x) / 3\n    y_cm = (p0_pos_y + p1_pos_y + p2_pos_y) / 3\n    \n    dist_cm_to_goalA = np.sqrt(x_cm**2 + (y_cm - 120)**2)   \n    dist_cm_to_goalA_pd = dist_cm_to_goalA\n    \n    return dist_cm_to_goalA_pd\n\n\ntrain_df[\"signoA\"] = dist_cm_teamA(train_df)\n\n\ndef dist_cm_teamB(train_df):\n    p3_pos_x = train_df[['p3_pos_x']].values\n    p3_pos_y = train_df[['p3_pos_y']].values\n\n    p4_pos_x = train_df[['p4_pos_x']].values\n    p4_pos_y = train_df[['p4_pos_y']].values\n\n    p5_pos_x = train_df[['p5_pos_x']].values\n    p5_pos_y = train_df[['p5_pos_y']].values\n    \n    x_cm = (p3_pos_x + p4_pos_x + p5_pos_x) / 3\n    y_cm = (p3_pos_y + p4_pos_y + p5_pos_y) / 3\n    \n    dist_cm_to_goalB = np.sqrt(x_cm**2 + (y_cm + 120)**2)   \n    dist_cm_to_goalB_pd = dist_cm_to_goalB\n    \n    return dist_cm_to_goalB_pd\n\n\ntrain_df[\"signoB\"] = dist_cm_teamB(train_df)\n\n\n#### Funcion que calcula las distancias al arco A y B\ndef dist_goal(df):\n    df['dist_goal_A'] = np.sqrt((df.ball_pos_x)**2 + (df.ball_pos_y - 120)**2 + (df.ball_pos_z - 6)**2)\n    df['dist_goal_B'] = np.sqrt((df.ball_pos_x)**2 + (df.ball_pos_y + 120)**2 + (df.ball_pos_z - 6)**2)\n    \n    return df\n\ntrain_df = dist_goal(train_df)\n","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## LIGHTGBM","metadata":{}},{"cell_type":"code","source":"import lightgbm as lgb","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#pip install bayesian-optimization\nfrom bayes_opt import BayesianOptimization","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X = train_df[['ball_pos_x', 'ball_pos_y', 'ball_pos_z', 'ball_vel_x', 'ball_vel_y',\n       'ball_vel_z', 'p0_pos_x', 'p0_pos_y', 'p0_pos_z', 'p0_vel_x',\n       'p0_vel_y', 'p0_vel_z', 'p0_boost', 'p1_pos_x', 'p1_pos_y', 'p1_pos_z',\n       'p1_vel_x', 'p1_vel_y', 'p1_vel_z', 'p1_boost', 'p2_pos_x', 'p2_pos_y',\n       'p2_pos_z', 'p2_vel_x', 'p2_vel_y', 'p2_vel_z', 'p2_boost', 'p3_pos_x',\n       'p3_pos_y', 'p3_pos_z', 'p3_vel_x', 'p3_vel_y', 'p3_vel_z', 'p3_boost',\n       'p4_pos_x', 'p4_pos_y', 'p4_pos_z', 'p4_vel_x', 'p4_vel_y', 'p4_vel_z',\n       'p4_boost', 'p5_pos_x', 'p5_pos_y', 'p5_pos_z', 'p5_vel_x', 'p5_vel_y',\n       'p5_vel_z', 'p5_boost', 'boost0_timer', 'boost1_timer', 'boost2_timer',\n       'boost3_timer', 'boost4_timer', 'boost5_timer',\n       'pos0_null', 'pos1_null', 'pos2_null', 'pos3_null', 'pos4_null',\n       'pos5_null', 'dist_euclidean']]\ny = train_df[['team_A_scoring_within_10sec','team_B_scoring_within_10sec']]#, \nX = X.reset_index(drop = True)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_A = y.iloc[:,0]\ny_B = y.iloc[:,1]","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### tuning hiperparameter","metadata":{}},{"cell_type":"code","source":"%%time\ndef bayes_parameter_opt_lgb(X, y, init_round=15, opt_round=25, n_folds=3, random_seed=6,n_estimators=1000, output_process=False):\n    # prepare data\n    train_data = lgb.Dataset(data=X, label=y, free_raw_data=False)\n    # parameters\n    def lgb_eval(learning_rate,num_leaves, feature_fraction, bagging_fraction, max_depth, max_bin, min_data_in_leaf,min_sum_hessian_in_leaf,subsample):\n        params = {'application':'binary', 'metric':'auc'}\n        params['learning_rate'] = max(min(learning_rate, 1), 0)\n        params[\"num_leaves\"] = int(round(num_leaves))\n        params['feature_fraction'] = max(min(feature_fraction, 1), 0)\n        params['bagging_fraction'] = max(min(bagging_fraction, 1), 0)\n        params['max_depth'] = int(round(max_depth))\n        params['max_bin'] = int(round(max_depth))\n        params['min_data_in_leaf'] = int(round(min_data_in_leaf))\n        params['min_sum_hessian_in_leaf'] = min_sum_hessian_in_leaf\n        params['subsample'] = max(min(subsample, 1), 0)\n        \n        cv_result = lgb.cv(params, train_data, nfold=n_folds, seed=random_seed, stratified=True, verbose_eval =200, metrics=['binary_logloss'])\n        return max(cv_result['auc-mean'])\n     \n    lgbBO = BayesianOptimization(lgb_eval, {'learning_rate': (0.01, 1.0),\n                                            'num_leaves': (24, 80),\n                                            'feature_fraction': (0.1, 0.9),\n                                            'bagging_fraction': (0.8, 1),\n                                            'max_depth': (5, 30),\n                                            'max_bin':(20,90),\n                                            'min_data_in_leaf': (20, 80),\n                                            'min_sum_hessian_in_leaf':(0,100),\n                                           'subsample': (0.01, 1.0)}, random_state=200)\n\n    \n    #n_iter: How many steps of bayesian optimization you want to perform. The more steps the more likely to find a good maximum you are.\n    #init_points: How many steps of random exploration you want to perform. Random exploration can help by diversifying the exploration space.\n    \n    lgbBO.maximize(init_points=init_round, n_iter=opt_round)\n    \n    model_auc=[]\n    for model in range(len( lgbBO.res)):\n        model_auc.append(lgbBO.res[model]['target'])\n    \n    # return best parameters\n    return lgbBO.res[pd.Series(model_auc).idxmax()]['target'],lgbBO.res[pd.Series(model_auc).idxmax()]['params']\n\nopt_params = bayes_parameter_opt_lgb(X, y_A, init_round=5, opt_round=10, n_folds=3, random_seed=6,n_estimators=1000)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"lgb_params = {\"learning_rate\": 0.01,\n              \"num_leaves\": 80,\n              \"min_data_in_leaf\": 39,\n              #\"boosting\": \"gbdt\",\n              #\"num_iterations\": 50,\n              \"bagging_fraction\": 0.8,\n              \"feature_fraction\": 0.9,\n              \"seed\": 44,\n              #\"num_threads\": -1,\n              #\"min_child_samples\":20,\n              \"max_depth\" : 26,\n              \"n_estimators\":1000,\n              #'max_bin': 57,\n              #\"min_split_gain\":10,\n              #'min_sum_hessian_in_leaf': 34,\n              'subsample': 0.01\n              }","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.2, random_state=44)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model_junto = multiclass.OneVsRestClassifier(lgb.LGBMClassifier(**lgb_params))","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model_junto.fit(X_train, y_train)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"results_test = model_junto.predict_proba(X_test)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Predict submission","metadata":{}},{"cell_type":"code","source":"test = pd.read_csv('/kaggle/input/tabular-playground-series-oct-2022/test.csv', dtype=dtypes)\nid_vecto = test[\"id\"]\ntest = test.drop(\"id\", axis = 1)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data_test = distancia(test)\ndata_test = data_test.fillna(0)\ndata_test[\"signoY\"] = SignoFn(data_test)\ndata_test[\"signoA\"] = dist_cm_teamA(data_test)\ndata_test[\"signoB\"] = dist_cm_teamB(data_test)\ndata_test = dist_goal(data_test)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"set(train_df)-set(data_test.columns)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"results_final_junto = model_junto.predict_proba(data_test)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission_junto = pd.DataFrame({\"id\":id_vecto,\"team_A_scoring_within_10sec\":results_final_junto[:,0],\"team_B_scoring_within_10sec\":results_final_junto[:,1] })\nsubmission_junto.to_csv(\"submission.csv\",index=False)\n","metadata":{},"execution_count":null,"outputs":[]}]}