{"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":"markdown","source":"# TPS_OCT_2022_EDA_LGBM_part_3🚀⚽","metadata":{}},{"cell_type":"markdown","source":"* Log Loss (Logarithmic loss) : the log loss value of the best model is 0.\n* Log loss score is the average of the log loss values.\n* https://scikit-learn.org/stable/modules/generated/sklearn.metrics.log_loss.html","metadata":{}},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\n\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nfrom datetime import datetime\nfrom tqdm.notebook import tqdm\n\nfrom sklearn import preprocessing\nfrom sklearn.model_selection import train_test_split, KFold, StratifiedKFold\nfrom sklearn.metrics import log_loss, accuracy_score\n\nimport lightgbm as lgb\nimport optuna\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))","metadata":{"execution":{"iopub.status.busy":"2022-10-30T03:11:11.323146Z","iopub.execute_input":"2022-10-30T03:11:11.323597Z","iopub.status.idle":"2022-10-30T03:11:13.967079Z","shell.execute_reply.started":"2022-10-30T03:11:11.323513Z","shell.execute_reply":"2022-10-30T03:11:13.965698Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def add_feature(data):\n    # between ball and player (Distance = sqrt((Bx - Px)^2) + ((By - Py)^2) +((Bz - Pz)^2)) e.g. Bx = ball position x, Px = player position x\n    data['p0_dist_ball'] = ((data['ball_pos_x'] - data['p0_pos_x'])**2 + (data['ball_pos_y'] - data['p0_pos_y'])**2 + (data['ball_pos_z'] - data['p0_pos_z'])**2)** 0.5\n    data['p1_dist_ball'] = ((data['ball_pos_x'] - data['p1_pos_x'])**2 + (data['ball_pos_y'] - data['p1_pos_y'])**2 + (data['ball_pos_z'] - data['p1_pos_z'])**2)** 0.5\n    data['p2_dist_ball'] = ((data['ball_pos_x'] - data['p2_pos_x'])**2 + (data['ball_pos_y'] - data['p2_pos_y'])**2 + (data['ball_pos_z'] - data['p2_pos_z'])**2)** 0.5\n    data['p3_dist_ball'] = ((data['ball_pos_x'] - data['p3_pos_x'])**2 + (data['ball_pos_y'] - data['p3_pos_y'])**2 + (data['ball_pos_z'] - data['p3_pos_z'])**2)** 0.5\n    data['p4_dist_ball'] = ((data['ball_pos_x'] - data['p4_pos_x'])**2 + (data['ball_pos_y'] - data['p2_pos_y'])**2 + (data['ball_pos_z'] - data['p4_pos_z'])**2)** 0.5\n    data['p5_dist_ball'] = ((data['ball_pos_x'] - data['p5_pos_x'])**2 + (data['ball_pos_y'] - data['p5_pos_y'])**2 + (data['ball_pos_z'] - data['p5_pos_z'])**2)** 0.5\n    \n     # distance between goal and player\n    goal_a_0 = [0, -120, 1.2]\n    goal_a_1 = [20, -120, 1.2]\n    goal_a_2 = [-20, -120, 1.2]\n    goal_b_0 = [0, -120, 1.2]\n    goal_b_1 = [20, 120, 1.2]\n    goal_b_2 = [-20, 120, 1.2]\n    \n    data['p0_dist_goal_0'] = ((goal_a_0[0] - data['p0_pos_x'])**2 + (goal_a_1[1] - data['p1_pos_y'])**2 + (goal_a_1[2] - data['p0_pos_z'])**2)** 0.5\n    data['p1_dist_goal_0'] = ((goal_a_0[0] - data['p1_pos_x'])**2 + (goal_a_1[1] - data['p1_pos_y'])**2 + (goal_a_1[2] - data['p1_pos_z'])**2)** 0.5\n    data['p2_dist_goal_0'] = ((goal_a_0[0] - data['p2_pos_x'])**2 + (goal_a_1[1] - data['p2_pos_y'])**2 + (goal_a_1[2] - data['p2_pos_z'])**2)** 0.5\n    data['p0_dist_goal_1'] = ((goal_a_1[0] - data['p0_pos_x'])**2 + (goal_a_1[1] - data['p1_pos_y'])**2 + (goal_a_1[2] - data['p0_pos_z'])**2)** 0.5\n    data['p1_dist_goal_1'] = ((goal_a_1[0] - data['p1_pos_x'])**2 + (goal_a_1[1] - data['p1_pos_y'])**2 + (goal_a_1[2] - data['p1_pos_z'])**2)** 0.5\n    data['p2_dist_goal_1'] = ((goal_a_1[0] - data['p2_pos_x'])**2 + (goal_a_1[1] - data['p2_pos_y'])**2 + (goal_a_1[2] - data['p2_pos_z'])**2)** 0.5\n    data['p0_dist_goal_2'] = ((goal_a_2[0] - data['p0_pos_x'])**2 + (goal_a_2[1] - data['p1_pos_y'])**2 + (goal_a_2[2] - data['p0_pos_z'])**2)** 0.5\n    data['p1_dist_goal_2'] = ((goal_a_2[0] - data['p1_pos_x'])**2 + (goal_a_2[1] - data['p1_pos_y'])**2 + (goal_a_2[2] - data['p1_pos_z'])**2)** 0.5\n    data['p2_dist_goal_2'] = ((goal_a_2[0] - data['p2_pos_x'])**2 + (goal_a_2[1] - data['p2_pos_y'])**2 + (goal_a_2[2] - data['p2_pos_z'])**2)** 0.5\n    \n    data['p3_dist_goal_0'] = ((goal_b_0[0] - data['p3_pos_x'])**2 + (goal_b_1[1] - data['p3_pos_y'])**2 + (goal_b_1[2] - data['p3_pos_z'])**2)** 0.5\n    data['p4_dist_goal_0'] = ((goal_b_0[0] - data['p4_pos_x'])**2 + (goal_b_1[1] - data['p4_pos_y'])**2 + (goal_b_1[2] - data['p4_pos_z'])**2)** 0.5\n    data['p5_dist_goal_0'] = ((goal_b_0[0] - data['p5_pos_x'])**2 + (goal_b_1[1] - data['p5_pos_y'])**2 + (goal_b_1[2] - data['p5_pos_z'])**2)** 0.5\n    data['p3_dist_goal_1'] = ((goal_b_1[0] - data['p3_pos_x'])**2 + (goal_b_1[1] - data['p3_pos_y'])**2 + (goal_b_1[2] - data['p3_pos_z'])**2)** 0.5\n    data['p4_dist_goal_1'] = ((goal_b_1[0] - data['p4_pos_x'])**2 + (goal_b_1[1] - data['p4_pos_y'])**2 + (goal_b_1[2] - data['p4_pos_z'])**2)** 0.5\n    data['p5_dist_goal_1'] = ((goal_b_1[0] - data['p5_pos_x'])**2 + (goal_b_1[1] - data['p5_pos_y'])**2 + (goal_b_1[2] - data['p5_pos_z'])**2)** 0.5\n    data['p3_dist_goal_2'] = ((goal_b_2[0] - data['p3_pos_x'])**2 + (goal_b_2[1] - data['p3_pos_y'])**2 + (goal_b_2[2] - data['p3_pos_z'])**2)** 0.5\n    data['p4_dist_goal_2'] = ((goal_b_2[0] - data['p4_pos_x'])**2 + (goal_b_2[1] - data['p4_pos_y'])**2 + (goal_b_2[2] - data['p4_pos_z'])**2)** 0.5\n    data['p5_dist_goal_2'] = ((goal_b_2[0] - data['p5_pos_x'])**2 + (goal_b_2[1] - data['p5_pos_y'])**2 + (goal_b_2[2] - data['p5_pos_z'])**2)** 0.5\n    \n    \n      # between ball and goal\n    data[\"goal_a_distance\"] = ((data[\"ball_pos_x\"] - 0)**2 + (data[\"ball_pos_y\"] - 120)**2 + (data[\"ball_pos_z\"] - 1.2)**2)**0.5\n    data[\"goal_b_distance\"] = ((data[\"ball_pos_x\"] - 0)**2 + (data[\"ball_pos_y\"] + 120)**2 + (data[\"ball_pos_z\"] - 1.2)**2)**0.5\n    \n     # spped (speed = sqrt(Vx^2 + Vy^2 + Vz^2)) \n    data['ball_speed'] = ((data['ball_vel_x'])**2 + (data['ball_vel_y'])**2 +  (data['ball_vel_z'])**2)** 0.5\n    data['p0_speed'] = ((data['p0_vel_x'])**2 + (data['p0_vel_y'])**2 +  (data['p0_vel_z'])**2)** 0.5\n    data['p1_speed'] = ((data['p1_vel_x'])**2 + (data['p1_vel_y'])**2 + (data['p1_vel_z'])**2)** 0.5\n    data['p2_speed'] = ((data['p2_vel_x'])**2 + (data['p2_vel_y'])**2 + (data['p2_vel_z'])**2)** 0.5\n    data['p3_speed'] = ((data['p3_vel_x'])**2 + (data['p3_vel_y'])**2 + (data['p3_vel_z'])**2)** 0.5\n    data['p4_speed'] = ((data['p4_vel_x'])**2 + (data['p4_vel_y'])**2 + (data['p4_vel_z'])**2)** 0.5\n    \n     # coordinate direction angle\n    data['ball-cos_a'] = data['ball_vel_x'] / (((data['ball_vel_x'])**2 + (data['ball_vel_y'])**2 +  (data['ball_vel_z'])**2)** 0.5)\n    data['ball-cos_b'] = data['ball_vel_y'] / (((data['ball_vel_x'])**2 + (data['ball_vel_y'])**2 +  (data['ball_vel_z'])**2)** 0.5)\n    data['ball-cos_c'] = data['ball_vel_z'] / (((data['ball_vel_x'])**2 + (data['ball_vel_y'])**2 +  (data['ball_vel_z'])**2)** 0.5)\n    \n    data['p0_cos_a'] = data['p0_vel_x'] /  (((data['p0_vel_x'])**2 + (data['p0_vel_y'])**2 + (data['p0_vel_z'])**2)** 0.5)\n    data['p0_cos_b'] = data['p0_vel_y'] /  (((data['p0_vel_x'])**2 + (data['p0_vel_y'])**2 + (data['p0_vel_z'])**2)** 0.5)\n    data['p0_cos_c'] = data['p0_vel_z'] /  (((data['p0_vel_x'])**2 + (data['p0_vel_y'])**2 + (data['p0_vel_z'])**2)** 0.5)\n    data['p1_cos_a'] = data['p1_vel_x'] / (((data['p1_vel_x'])**2 + (data['p1_vel_y'])**2 + (data['p1_vel_z'])**2)** 0.5)\n    data['p1_cos_b'] = data['p1_vel_y'] / (((data['p1_vel_x'])**2 + (data['p1_vel_y'])**2 + (data['p1_vel_z'])**2)** 0.5)\n    data['p1_cos_c'] = data['p1_vel_z'] / (((data['p1_vel_x'])**2 + (data['p1_vel_y'])**2 + (data['p1_vel_z'])**2)** 0.5)\n    data['p2_cos_a'] = data['p2_vel_x'] / (((data['p2_vel_x'])**2 + (data['p2_vel_y'])**2 + (data['p2_vel_z'])**2)** 0.5)\n    data['p2_cos_b'] = data['p2_vel_y'] / (((data['p2_vel_x'])**2 + (data['p2_vel_y'])**2 + (data['p2_vel_z'])**2)** 0.5)\n    data['p2_cos_c'] = data['p2_vel_z'] / (((data['p2_vel_x'])**2 + (data['p2_vel_y'])**2 + (data['p2_vel_z'])**2)** 0.5)\n    data['p3_cos_a'] = data['p3_vel_x'] / (((data['p3_vel_x'])**2 + (data['p3_vel_y'])**2 + (data['p3_vel_z'])**2)** 0.5)\n    data['p3_cos_b'] = data['p3_vel_y'] / (((data['p3_vel_x'])**2 + (data['p3_vel_y'])**2 + (data['p3_vel_z'])**2)** 0.5)\n    data['p3_cos_c'] = data['p3_vel_z'] / (((data['p3_vel_x'])**2 + (data['p3_vel_y'])**2 + (data['p3_vel_z'])**2)** 0.5)\n    data['p4_cos_a'] = data['p4_vel_x'] / (((data['p4_vel_x'])**2 + (data['p4_vel_y'])**2 + (data['p4_vel_z'])**2)** 0.5)\n    data['p4_cos_b'] = data['p4_vel_y'] / (((data['p4_vel_x'])**2 + (data['p4_vel_y'])**2 + (data['p4_vel_z'])**2)** 0.5)\n    data['p4_cos_c'] = data['p4_vel_z'] / (((data['p4_vel_x'])**2 + (data['p4_vel_y'])**2 + (data['p4_vel_z'])**2)** 0.5)\n    data['p5_cos_a'] = data['p5_vel_x'] / (((data['p5_vel_x'])**2 + (data['p5_vel_y'])**2 + (data['p5_vel_z'])**2)** 0.5)\n    data['p5_cos_b'] = data['p5_vel_y'] / (((data['p5_vel_x'])**2 + (data['p5_vel_y'])**2 + (data['p5_vel_z'])**2)** 0.5)\n    data['p5_cos_c'] = data['p5_vel_z'] / (((data['p5_vel_x'])**2 + (data['p5_vel_y'])**2 + (data['p5_vel_z'])**2)** 0.5)\n    \n    return data","metadata":{"execution":{"iopub.status.busy":"2022-10-30T03:11:13.969800Z","iopub.execute_input":"2022-10-30T03:11:13.970277Z","iopub.status.idle":"2022-10-30T03:11:14.029923Z","shell.execute_reply.started":"2022-10-30T03:11:13.970238Z","shell.execute_reply":"2022-10-30T03:11:14.028218Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# drop list\ndrp_= ['game_num', 'event_id', 'event_time','player_scoring_next', 'team_scoring_next', 'team_A_scoring_within_10sec', 'team_B_scoring_within_10sec']\ndrp_1 = ['ball_pos_x','ball_pos_y','ball_pos_z','p0_pos_x','p0_pos_y','p0_pos_z','p1_pos_x','p1_pos_y','p1_pos_z','p2_pos_x','p2_pos_y','p2_pos_z','p3_pos_x','p3_pos_y','p3_pos_z','p4_pos_x','p4_pos_y','p4_pos_z','p5_pos_x','p5_pos_y','p5_pos_z']\ndrp_2 = ['ball_vel_x','ball_vel_y','ball_vel_z','p0_vel_x','p0_vel_y','p0_vel_z','p1_vel_x','p1_vel_y','p1_vel_z','p2_vel_x','p2_vel_y','p2_vel_z','p3_vel_x','p3_vel_y','p3_vel_z','p4_vel_x','p4_vel_y','p4_vel_z','p5_vel_x','p5_vel_y','p5_vel_z']\ndrp_3 = ['p0_boost','boost0_timer','p1_boost','boost1_timer','p2_boost','boost2_timer','p3_boost','boost3_timer','p4_boost','boost4_timer','p5_boost','boost5_timer'] ","metadata":{"execution":{"iopub.status.busy":"2022-10-30T03:11:14.031067Z","iopub.execute_input":"2022-10-30T03:11:14.031480Z","iopub.status.idle":"2022-10-30T03:11:14.049730Z","shell.execute_reply.started":"2022-10-30T03:11:14.031430Z","shell.execute_reply":"2022-10-30T03:11:14.048141Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_dtypes = pd.read_csv(\"/kaggle/input/tabular-playground-series-oct-2022/train_dtypes.csv\")\ntrain_dtypes = dict(train_dtypes.to_records(index=False))\n\ntest_dtypes = pd.read_csv(\"/kaggle/input/tabular-playground-series-oct-2022/test_dtypes.csv\")\ntest_dtypes = dict(test_dtypes.to_records(index=False))\n\ntest = pd.read_csv(\"/kaggle/input/tabular-playground-series-oct-2022/test.csv\")\ntest = test.interpolate(limit_direction = 'both', axis=1)\nadd_feature(test)\ntest = test.drop(['id'], axis = 1)\ntest = test.drop(drp_1, axis = 1)\n#test = test.drop(drp_2, axis = 1)\n#test = test.drop(drp_3, axis = 1)\n\ndisplay(test)\n","metadata":{"execution":{"iopub.status.busy":"2022-10-30T03:11:14.052387Z","iopub.execute_input":"2022-10-30T03:11:14.053253Z","iopub.status.idle":"2022-10-30T03:11:36.449793Z","shell.execute_reply.started":"2022-10-30T03:11:14.053214Z","shell.execute_reply":"2022-10-30T03:11:36.448523Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"n_splits = 5\nseed = 42\n\nparams = {'objective':'binary',\n          'metric' : 'auc',\n          'seed': 42,\n          'num_leaves' : 64,\n          'min_child_samples': 20,\n          'max_depth' :7,\n          'n_estimators': 300,\n          'learning_rate': 0.1,\n         }\n\nmodel = lgb.LGBMClassifier(**params)   ","metadata":{"execution":{"iopub.status.busy":"2022-10-30T03:11:36.451068Z","iopub.execute_input":"2022-10-30T03:11:36.451383Z","iopub.status.idle":"2022-10-30T03:11:36.457444Z","shell.execute_reply.started":"2022-10-30T03:11:36.451358Z","shell.execute_reply":"2022-10-30T03:11:36.456364Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def models_(X,y, n_splits, model, sub):\n   \n    for i in range(2):\n        cv = list(StratifiedKFold(n_splits = n_splits, shuffle=True, random_state = seed).split(X, y[i]))\n        preds = []\n        \n        for nfold in np.arange(n_splits):\n            idx_train, idx_val = cv[nfold][0], cv[nfold][1]\n            X_train, y_train = X.iloc[idx_train], y[i].iloc[idx_train]\n            X_val, y_val = X.iloc[idx_val], y[i].iloc[idx_val]\n            model.fit(X_train,y_train)\n            pred_ = model.predict_proba(X_val)[:,1]\n            loss = log_loss(y_val ,pred_)\n            pred = model.predict_proba(test)[:,1]\n            print(f\"{y[i]}\\n nfold = {nfold} Logloss = {loss}\\n prediction {pred}\\n\")\n            preds.append(pred)\n            \n        if i == 0:\n            sub['team_A_scoring_within_10sec'] = np.mean(np.column_stack(preds), axis = 1)\n        else:\n            sub['team_B_scoring_within_10sec'] = np.mean(np.column_stack(preds), axis = 1)\n            \n    return sub","metadata":{"execution":{"iopub.status.busy":"2022-10-30T03:11:36.458969Z","iopub.execute_input":"2022-10-30T03:11:36.459608Z","iopub.status.idle":"2022-10-30T03:11:36.473891Z","shell.execute_reply.started":"2022-10-30T03:11:36.459562Z","shell.execute_reply":"2022-10-30T03:11:36.472297Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub = pd.read_csv(\"/kaggle/input/tabular-playground-series-oct-2022/sample_submission.csv\")\n \ntrain_ = pd.DataFrame()\nfor i in tqdm(range(10)):\n    train_i = pd.read_csv(f\"/kaggle/input/tabular-playground-series-oct-2022/train_{i}.csv\", dtype = train_dtypes)\n    train_ = pd.concat([train_, train_i])\n    del train_i\n\n    \ntrain_['team_A_scoring_within_10sec']= train_['team_A_scoring_within_10sec'].astype(int)\ntrain_['team_B_scoring_within_10sec']= train_['team_B_scoring_within_10sec'].astype(int)\n\ny = [train_['team_A_scoring_within_10sec'],train_['team_B_scoring_within_10sec']]\n    \ntrain_ = train_.drop(drp_, axis=1)\ntrain_ = train_.interpolate(limit_direction = 'both', axis=1)\nadd_feature(train_)\ntrain_ = train_.drop(drp_1, axis = 1)\n#train_ = train_.drop(drp_2, axis = 1)\n#train_ = train_.drop(drp_3, axis = 1)\n    \nX = train_\ndisplay(X)\n    \nmodels_(X,y, n_splits, model, sub)\nsub.to_csv('submission.csv', index=False)\n\ndisplay(sub)","metadata":{"execution":{"iopub.status.busy":"2022-10-30T03:11:36.475455Z","iopub.execute_input":"2022-10-30T03:11:36.475765Z","iopub.status.idle":"2022-10-30T07:49:44.615821Z","shell.execute_reply.started":"2022-10-30T03:11:36.475740Z","shell.execute_reply":"2022-10-30T07:49:44.609320Z"},"scrolled":true,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"* Even though the public score for each training data(train_0, train_1...) and combined training data(all) were similar, the log loss values obtained the model were quite different.\n* e.g. \n> * the log loss values of train_0 is 0.1468 and the public score is 0.19962.\n> * the log loss values of all train data is 0.18988 and the public score is 0.19982.\n* These considerations will help you make the final choice. GOOD LUCK!","metadata":{}},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}