{"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\n# df_test = pd.read_csv('../input/tabular-playground-series-oct-2022/test.csv')","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-10-31T15:49:03.857444Z","iopub.execute_input":"2022-10-31T15:49:03.857862Z","iopub.status.idle":"2022-10-31T15:49:03.885274Z","shell.execute_reply.started":"2022-10-31T15:49:03.857776Z","shell.execute_reply":"2022-10-31T15:49:03.884344Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# import libralies","metadata":{}},{"cell_type":"code","source":"import datatable as dt\nimport lightgbm as lgb\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import mean_squared_error\nimport matplotlib.pyplot as plt\nimport seaborn as sns","metadata":{"execution":{"iopub.status.busy":"2022-10-31T15:49:03.887056Z","iopub.execute_input":"2022-10-31T15:49:03.887600Z","iopub.status.idle":"2022-10-31T15:49:05.183954Z","shell.execute_reply.started":"2022-10-31T15:49:03.887568Z","shell.execute_reply":"2022-10-31T15:49:05.182959Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# read data","metadata":{}},{"cell_type":"markdown","source":"this code to read big size data is from [this page](https://www.kaggle.com/competitions/tabular-playground-series-oct-2022/discussion/356544#1969255)  \nthank you [Sergey Saharovskiy](https://www.kaggle.com/competitions/tabular-playground-series-oct-2022/discussion/356544#1969255)!","metadata":{}},{"cell_type":"code","source":"dtypes_dict = {\n    'game_num': 'int16', 'event_id': 'int32', 'event_time': 'float16',\n    'ball_pos_x': 'float16', 'ball_pos_y': 'float16', 'ball_pos_z': 'float16',\n    'ball_vel_x': 'float16', 'ball_vel_y': 'float16', 'ball_vel_z': 'float16',\n    'p0_pos_x': 'float16', 'p0_pos_y': 'float16', 'p0_pos_z': 'float16',\n    'p0_vel_x': 'float16', 'p0_vel_y': 'float16', 'p0_vel_z': 'float16',\n    'p0_boost': 'float16', 'p1_pos_x': 'float16', 'p1_pos_y': 'float16',\n    'p1_pos_z': 'float16', 'p1_vel_x': 'float16', 'p1_vel_y': 'float16',\n    'p1_vel_z': 'float16', 'p1_boost': 'float16', 'p2_pos_x': 'float16',\n    'p2_pos_y': 'float16', 'p2_pos_z': 'float16', 'p2_vel_x': 'float16',\n    'p2_vel_y': 'float16', 'p2_vel_z': 'float16', 'p2_boost': 'float16',\n    'p3_pos_x': 'float16', 'p3_pos_y': 'float16', 'p3_pos_z': 'float16',\n    'p3_vel_x': 'float16', 'p3_vel_y': 'float16', 'p3_vel_z': 'float16',\n    'p3_boost': 'float16', 'p4_pos_x': 'float16', 'p4_pos_y': 'float16',\n    'p4_pos_z': 'float16', 'p4_vel_x': 'float16', 'p4_vel_y': 'float16',\n    'p4_vel_z': 'float16', 'p4_boost': 'float16', 'p5_pos_x': 'float16',\n    'p5_pos_y': 'float16', 'p5_pos_z': 'float16', 'p5_vel_x': 'float16',\n    'p5_vel_y': 'float16', 'p5_vel_z': 'float16', 'p5_boost': 'float16',\n    'boost0_timer': 'float16', 'boost1_timer': 'float16', 'boost2_timer': 'float16',\n    'boost3_timer': 'float16', 'boost4_timer': 'float16', 'boost5_timer': 'float16',\n    'player_scoring_next': 'O', 'team_scoring_next': 'O', 'team_A_scoring_within_10sec': 'int8',\n    'team_B_scoring_within_10sec': 'int8'}\n\n\npath_to_data = '../input/tabular-playground-series-oct-2022'\ndf = pd.DataFrame({}, columns=dtypes_dict.keys())\ndf = df.astype(dtypes_dict)\n\ndef read_data(num_start,num_end,df_):\n    for i in range(num_start,num_end):\n        dt_read = dt.fread(f'{path_to_data}/train_{i}.csv').to_pandas()\n        dt_read = dt_read.astype(dtypes_dict)\n        df_ = pd.concat([df_, dt_read])\n    return df_\n\ndf_08=read_data(0,10,df)\ndf_08=df_08.reset_index()\ndf_08=df_08.drop(['index','game_num','event_id','player_scoring_next','team_scoring_next'],axis=1)\ndf_08.head()","metadata":{"execution":{"iopub.status.busy":"2022-10-31T15:49:05.185501Z","iopub.execute_input":"2022-10-31T15:49:05.185788Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# check data","metadata":{}},{"cell_type":"code","source":"print('number of train data column is : ', len(df_08.columns))\ncols_with_missing = [col for col in df_08.columns if df_08[col].isnull().any()]\nprint('number of missing columns in train data is : ',len(cols_with_missing))\nprint(cols_with_missing)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# add some feature","metadata":{}},{"cell_type":"code","source":"p_num=['0','1','2','3','4','5']\npos_x = df_08.columns[df_08.columns.str.contains('pos_x')].tolist()[1:]\nprint(pos_x)\npos_y = df_08.columns[df_08.columns.str.contains('pos_y')].tolist()[1:]\npos_z = df_08.columns[df_08.columns.str.contains('pos_z')].tolist()[1:]\nvel_x = df_08.columns[df_08.columns.str.contains('vel_x')].tolist()[1:]\nprint(vel_x)\nvel_y = df_08.columns[df_08.columns.str.contains('vel_y')].tolist()[1:]\nvel_z = df_08.columns[df_08.columns.str.contains('vel_z')].tolist()[1:]\nvel_=df_08.columns[df_08.columns.str.contains('vel_')].tolist()\nprint(vel_)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_08['x_sum_A']=df_08['p0_pos_x']+df_08['p1_pos_x']+df_08['p2_pos_x']\ndf_08['x_sum_B']=df_08['p3_pos_x']+df_08['p4_pos_x']+df_08['p5_pos_x']\ndf_08['y_sum_A']=df_08['p0_pos_y']+df_08['p1_pos_y']+df_08['p2_pos_y']\ndf_08['y_sum_B']=df_08['p3_pos_y']+df_08['p4_pos_y']+df_08['p5_pos_y']\ndf_08['z_sum_A']=df_08['p0_pos_z']+df_08['p1_pos_z']+df_08['p2_pos_z']\ndf_08['z_sum_B']=df_08['p3_pos_z']+df_08['p4_pos_z']+df_08['p5_pos_z']\n\nfor x,y,z,num in zip (pos_x,pos_y,pos_z,p_num):\n    col_name_='p'+num+'_distance'\n    df_08[col_name_]=np.sqrt((df_08[x]-df_08['ball_pos_x'])**2+(df_08[y]-df_08['ball_pos_y'])**2)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_08['event_time_log']=np.log10(df_08['event_time']*(-1)+1)\nmin_=df_08['event_time_log'].min()\nmax_=df_08['event_time_log'].max()\ndf_08['event_time_log']=(df_08['event_time_log']-min_)/(max_-min_)\nevent_time_log_border=(np.log10(11)-min_)/(max_-min_)\nprint(event_time_log_border)\nsns.histplot(data=df_08,x=\"event_time_log\")","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# create model","metadata":{}},{"cell_type":"code","source":"def get_reg_model(X,y,importance):\n    model = lgb.LGBMRegressor(\n        random_state = 42,\n        num_leaves=2500,\n        subsample=0.7,\n        reg_lambda=0.9,\n        reg_alpha=0.6\n    )\n    model.fit(X, y)\n    if importance:\n        plt.figure(figsize=(10,10))\n        importances = pd.Series(model.feature_importances_, index = X.columns)\n        importances = importances.sort_values()\n        importances.plot(kind = \"barh\")\n        plt.title(\"importance\")\n    return model","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# make train data","metadata":{}},{"cell_type":"code","source":"train_columns=df_08.columns.tolist()\nto_remove=['event_time','team_A_scoring_within_10sec','team_B_scoring_within_10sec','event_time_log']\n\n#set target dataset\ny_time_log=df_08.event_time_log\ny_A=df_08.team_A_scoring_within_10sec\ny_B=df_08.team_B_scoring_within_10sec\n\n#set explanatory variable\ndf_08=df_08.drop(to_remove,axis=1)\n\n#split train and validation data\nX_train, X_test, y_time_log_train,  y_time_log_test , y_A_train, y_A_test , y_B_train, y_B_test = train_test_split(df_08,y_time_log,y_A,y_B,test_size=0.1)\ny_time_log=0\ny_A=0\ny_B=0","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# training","metadata":{}},{"cell_type":"code","source":"reg_log_model=get_reg_model(X_train, y_time_log_train,True)\npred_log=reg_log_model.predict(X_test)\nprint(mean_squared_error(y_time_log_test, pred_log))\n# reg_log_model=get_reg_model(pd.concat([X_train,X_test],axis=0), pd.concat([y_time_log_train,y_time_log_test],axis=0),False)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.histplot(pd.DataFrame(pred_log.tolist()))","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"reg_A_model=get_reg_model(X_train, y_A_train,True)\npred_A=reg_A_model.predict(X_test)\nprint(mean_squared_error(y_A_test, pred_A))\n# reg_A_model=get_reg_model(pd.concat([X_train,X_test],axis=0), pd.concat([y_A_train,y_A_test],axis=0),False)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"reg_B_model=get_reg_model(X_train, y_B_train,True)\npred_B=reg_B_model.predict(X_test)\nprint(mean_squared_error(y_B_test, pred_B))\n# reg_B_model=get_reg_model(pd.concat([X_train,X_test],axis=0), pd.concat([y_B_train,y_B_test],axis=0),False)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# tune values","metadata":{}},{"cell_type":"code","source":"df_predict=pd.DataFrame()\ndf_predict['time_log']=pred_log.tolist()\ndf_predict['p_A']=pred_A.tolist()\ndf_predict['p_B']=pred_B.tolist()\ndf_predict['t_A']=y_A_test.reset_index()['team_A_scoring_within_10sec']\ndf_predict['t_B']=y_B_test.reset_index()['team_B_scoring_within_10sec']\ndf_predict['sum']=df_predict['t_A']+df_predict['t_B']\ndf_predict['p_time_log']=(1+event_time_log_border)-df_predict['time_log']\nprint(len(df_predict))\ndf_predict.describe()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.histplot(df_predict['p_time_log'])","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_predict_A=df_predict[(df_predict['p_A']>df_predict['p_B'])&(df_predict['p_time_log']>1)]\ndf_predict_B=df_predict[(df_predict['p_B']>df_predict['p_A'])&(df_predict['p_time_log']>1)]\ndf_predict_less=df_predict[(df_predict['p_time_log']<0.75)]\ndf_predict_other=df_predict[(df_predict['p_time_log']<=1)&(df_predict['p_time_log']>=0.75)]\nprint(len(df_predict_A),',',len(df_predict_B),',',len(df_predict_less),',',len(df_predict_other))\n\ndf_predict_A['p_A']=df_predict_A['p_A']*df_predict_A['p_time_log']\ndf_predict_A['p_B']=df_predict_A['p_B']*(df_predict_A['time_log'])\n\ndf_predict_B['p_B']=df_predict_B['p_B']*df_predict_B['p_time_log']\ndf_predict_B['p_A']=df_predict_B['p_A']*(df_predict_B['time_log'])\n\ndf_predict_less['p_A']=df_predict_less['p_A']*df_predict_less['p_time_log']\ndf_predict_less['p_B']=df_predict_less['p_B']*df_predict_less['p_time_log']\n\ndf_predict_resum=pd.concat([df_predict_A,df_predict_B,df_predict_less,df_predict_other],axis=0)\ndf_predict_resum.loc[df_predict_resum['p_A']>1,'p_A']=1.0\ndf_predict_resum.loc[df_predict_resum['p_A']<0,'p_A']=0.0\ndf_predict_resum.loc[df_predict_resum['p_B']>1,'p_B']=1.0\ndf_predict_resum.loc[df_predict_resum['p_B']<0,'p_B']=0.0\n\nprint(mean_squared_error(df_predict_resum['t_A'], df_predict_resum['p_A']))#0.03621022873331162\nprint(mean_squared_error(df_predict_resum['t_B'], df_predict_resum['p_B']))#0.03499121406848447\ndf_predict_resum","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# make test data","metadata":{}},{"cell_type":"code","source":"dtypes_test_dict = {'id': 'int64',\n    'ball_pos_x': 'float16', 'ball_pos_y': 'float16', 'ball_pos_z': 'float16',\n    'ball_vel_x': 'float16', 'ball_vel_y': 'float16', 'ball_vel_z': 'float16',\n    'p0_pos_x': 'float16', 'p0_pos_y': 'float16', 'p0_pos_z': 'float16',\n    'p0_vel_x': 'float16', 'p0_vel_y': 'float16', 'p0_vel_z': 'float16',\n    'p0_boost': 'float16', 'p1_pos_x': 'float16', 'p1_pos_y': 'float16',\n    'p1_pos_z': 'float16', 'p1_vel_x': 'float16', 'p1_vel_y': 'float16',\n    'p1_vel_z': 'float16', 'p1_boost': 'float16', 'p2_pos_x': 'float16',\n    'p2_pos_y': 'float16', 'p2_pos_z': 'float16', 'p2_vel_x': 'float16',\n    'p2_vel_y': 'float16', 'p2_vel_z': 'float16', 'p2_boost': 'float16',\n    'p3_pos_x': 'float16', 'p3_pos_y': 'float16', 'p3_pos_z': 'float16',\n    'p3_vel_x': 'float16', 'p3_vel_y': 'float16', 'p3_vel_z': 'float16',\n    'p3_boost': 'float16', 'p4_pos_x': 'float16', 'p4_pos_y': 'float16',\n    'p4_pos_z': 'float16', 'p4_vel_x': 'float16', 'p4_vel_y': 'float16',\n    'p4_vel_z': 'float16', 'p4_boost': 'float16', 'p5_pos_x': 'float16',\n    'p5_pos_y': 'float16', 'p5_pos_z': 'float16', 'p5_vel_x': 'float16',\n    'p5_vel_y': 'float16', 'p5_vel_z': 'float16', 'p5_boost': 'float16',\n    'boost0_timer': 'float16', 'boost1_timer': 'float16', 'boost2_timer': 'float16',\n    'boost3_timer': 'float16', 'boost4_timer': 'float16', 'boost5_timer': 'float16'}\n\ndf_test = dt.fread('../input/tabular-playground-series-oct-2022/test.csv').to_pandas()\ndf_test = df_test.astype(dtypes_test_dict)\n\ndf_test['x_sum_A']=df_test['p0_pos_x']+df_test['p1_pos_x']+df_test['p2_pos_x']\ndf_test['x_sum_B']=df_test['p3_pos_x']+df_test['p4_pos_x']+df_test['p5_pos_x']\ndf_test['y_sum_A']=df_test['p0_pos_y']+df_test['p1_pos_y']+df_test['p2_pos_y']\ndf_test['y_sum_B']=df_test['p3_pos_y']+df_test['p4_pos_y']+df_test['p5_pos_y']\ndf_test['z_sum_A']=df_test['p0_pos_z']+df_test['p1_pos_z']+df_test['p2_pos_z']\ndf_test['z_sum_B']=df_test['p3_pos_z']+df_test['p4_pos_z']+df_test['p5_pos_z']\n\nfor x,y,z,num in zip (pos_x,pos_y,pos_z,p_num):\n    col_name_='p'+num+'_distance'\n    df_test[col_name_]=np.sqrt((df_test[x]-df_test['ball_pos_x'])**2+(df_test[y]-df_test['ball_pos_y'])**2)\n\ndf_test.head()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# predict with model","metadata":{}},{"cell_type":"code","source":"test_log=reg_log_model.predict(df_test.drop('id',axis=1))\ntest_A=reg_A_model.predict(df_test.drop('id',axis=1))\ntest_B=reg_B_model.predict(df_test.drop('id',axis=1))\n\ndf_test['p_A']=test_A.tolist()\ndf_test['p_B']=test_B.tolist()\ndf_test['time_log']=test_log.tolist()\ndf_test['p_time_log']=(1+event_time_log_border)-df_test['time_log']\ndf_test.describe()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.histplot(df_test['p_time_log'])","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_predict_A=df_test[(df_test['p_A']>df_test['p_B'])&(df_test['p_time_log']>1)]\ndf_predict_B=df_test[(df_test['p_B']>df_test['p_A'])&(df_test['p_time_log']>1)]\ndf_predict_less=df_test[(df_test['p_time_log']<0.75)]\ndf_predict_other=df_test[(df_test['p_time_log']<=1)&(df_test['p_time_log']>=0.75)]\nprint(len(df_predict_A),',',len(df_predict_B),',',len(df_predict_less),',',len(df_predict_other))\n\ndf_predict_A['p_A']=df_predict_A['p_A']*df_predict_A['p_time_log']\ndf_predict_A['p_B']=df_predict_A['p_B']*(df_predict_A['time_log'])\n\ndf_predict_B['p_B']=df_predict_B['p_B']*df_predict_B['p_time_log']\ndf_predict_B['p_A']=df_predict_B['p_A']*(df_predict_B['time_log'])\n\ndf_predict_less['p_A']=df_predict_less['p_A']*df_predict_less['p_time_log']\ndf_predict_less['p_B']=df_predict_less['p_B']*df_predict_less['p_time_log']\n\ndf_predict_resum=pd.concat([df_predict_A,df_predict_B,df_predict_less,df_predict_other],axis=0)\ndf_predict_resum.loc[df_predict_resum['p_A']>1,'p_A']=1.0\ndf_predict_resum.loc[df_predict_resum['p_A']<0,'p_A']=0.0\ndf_predict_resum.loc[df_predict_resum['p_B']>1,'p_B']=1.0\ndf_predict_resum.loc[df_predict_resum['p_B']<0,'p_B']=0.0\n\ndf_predict_resum.sort_values('id')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission = pd.read_csv('../input/tabular-playground-series-oct-2022/sample_submission.csv')\nsubmission['team_A_scoring_within_10sec']=df_predict_resum['p_A']\nsubmission['team_B_scoring_within_10sec']=df_predict_resum['p_B']","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission.to_csv('submission.csv', index=False)\nsubmission","metadata":{"trusted":true},"execution_count":null,"outputs":[]}]}