{"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":"<a id='import libraries'></a>\n# Load required libraries","metadata":{}},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport datatable as dt\n\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.preprocessing import LabelEncoder\n\nimport lightgbm as lgbm\n\npd.set_option('display.max_columns', 100)","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-10-12T15:11:35.490769Z","iopub.execute_input":"2022-10-12T15:11:35.491167Z","iopub.status.idle":"2022-10-12T15:11:35.497692Z","shell.execute_reply.started":"2022-10-12T15:11:35.491135Z","shell.execute_reply":"2022-10-12T15:11:35.496397Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id='import datasets'></a>\n# Import datasets","metadata":{}},{"cell_type":"code","source":"%%time\ntrain0_df = dt.fread('../input/tabular-playground-series-oct-2022/train_0.csv').to_pandas()\ntrain1_df = dt.fread('../input/tabular-playground-series-oct-2022/train_1.csv').to_pandas()\ntrain2_df = dt.fread('../input/tabular-playground-series-oct-2022/train_2.csv').to_pandas()\ntrain3_df = dt.fread('../input/tabular-playground-series-oct-2022/train_3.csv').to_pandas()\ntrain4_df = dt.fread('../input/tabular-playground-series-oct-2022/train_4.csv').to_pandas()\ntrain5_df = dt.fread('../input/tabular-playground-series-oct-2022/train_5.csv').to_pandas()\ntrain6_df = dt.fread('../input/tabular-playground-series-oct-2022/train_6.csv').to_pandas()\ntrain7_df = dt.fread('../input/tabular-playground-series-oct-2022/train_7.csv').to_pandas()\ntrain8_df = dt.fread('../input/tabular-playground-series-oct-2022/train_8.csv').to_pandas()\ntrain9_df = dt.fread('../input/tabular-playground-series-oct-2022/train_9.csv').to_pandas()","metadata":{"execution":{"iopub.status.busy":"2022-10-12T15:07:37.296476Z","iopub.execute_input":"2022-10-12T15:07:37.297190Z","iopub.status.idle":"2022-10-12T15:08:52.044415Z","shell.execute_reply.started":"2022-10-12T15:07:37.297145Z","shell.execute_reply":"2022-10-12T15:08:52.043245Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_df = dt.fread('../input/tabular-playground-series-oct-2022/test.csv').to_pandas()\nsub_df = dt.fread('../input/tabular-playground-series-oct-2022/sample_submission.csv').to_pandas()\nprint('train_0 shape:', train0_df.shape)\ndisplay(train0_df.head(4))\nprint('test data shape:', test_df.shape)\ndisplay(test_df.head(3))","metadata":{"execution":{"iopub.status.busy":"2022-10-12T15:08:52.045763Z","iopub.execute_input":"2022-10-12T15:08:52.046274Z","iopub.status.idle":"2022-10-12T15:08:54.725275Z","shell.execute_reply.started":"2022-10-12T15:08:52.046241Z","shell.execute_reply":"2022-10-12T15:08:54.723668Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id='reduce memory'></a>\n# Reduce the size of datasets","metadata":{}},{"cell_type":"code","source":"train_list = [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-12T15:08:54.731441Z","iopub.execute_input":"2022-10-12T15:08:54.733517Z","iopub.status.idle":"2022-10-12T15:08:54.744027Z","shell.execute_reply.started":"2022-10-12T15:08:54.733387Z","shell.execute_reply":"2022-10-12T15:08:54.741679Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%time\ndef reduce_memory_usage(df, verbose=True):\n    numerics = [\"int8\", \"int16\", \"int32\", \"int64\", \"float16\", \"float32\", \"float64\"]\n    start_mem = df.memory_usage().sum() / 1024 ** 2\n    for col in df.columns:\n        col_type = df[col].dtypes\n        if col_type in numerics:\n            c_min = df[col].min()\n            c_max = df[col].max()\n            if str(col_type)[:3] == \"int\":\n                if c_min > np.iinfo(np.int8).min and c_max < np.iinfo(np.int8).max:\n                    df[col] = df[col].astype(np.int8)\n                elif c_min > np.iinfo(np.int16).min and c_max < np.iinfo(np.int16).max:\n                    df[col] = df[col].astype(np.int16)\n                elif c_min > np.iinfo(np.int32).min and c_max < np.iinfo(np.int32).max:\n                    df[col] = df[col].astype(np.int32)\n                elif c_min > np.iinfo(np.int64).min and c_max < np.iinfo(np.int64).max:\n                    df[col] = df[col].astype(np.int64)\n            else:\n                if (\n                    c_min > np.finfo(np.float16).min\n                    and c_max < np.finfo(np.float16).max\n                ):\n                    df[col] = df[col].astype(np.float16)\n                elif (\n                    c_min > np.finfo(np.float32).min\n                    and c_max < np.finfo(np.float32).max\n                ):\n                    df[col] = df[col].astype(np.float32)\n                else:\n                    df[col] = df[col].astype(np.float64)\n    end_mem = df.memory_usage().sum() / 1024 ** 2\n    if verbose:\n        print(\n            \"Mem. usage decreased to {:.2f} Mb ({:.1f}% reduction)\".format(\n                end_mem, 100 * (start_mem - end_mem) / start_mem\n            )\n        )\n    return df\n\nfor train in train_list:\n    train = reduce_memory_usage(train)","metadata":{"execution":{"iopub.status.busy":"2022-10-12T15:08:54.746823Z","iopub.execute_input":"2022-10-12T15:08:54.747980Z","iopub.status.idle":"2022-10-12T15:10:48.237058Z","shell.execute_reply.started":"2022-10-12T15:08:54.747929Z","shell.execute_reply":"2022-10-12T15:10:48.235966Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id='prepare data and train'></a>\n# Prepare data and train the LGBM model","metadata":{}},{"cell_type":"code","source":"%%time\ntotal_train = pd.concat(train_list, axis=0)\ntrain_sample = total_train.sample(frac=0.1)\ntrain_sample[\"target\"] = train_sample[\"team_A_scoring_within_10sec\"].astype(str)+train_sample[\"team_B_scoring_within_10sec\"].astype(str)\nencoder = LabelEncoder()\ntrain_sample[\"target\"] = encoder.fit_transform(train_sample[\"target\"])","metadata":{"execution":{"iopub.status.busy":"2022-10-12T15:11:42.338189Z","iopub.execute_input":"2022-10-12T15:11:42.338897Z","iopub.status.idle":"2022-10-12T15:11:56.706029Z","shell.execute_reply.started":"2022-10-12T15:11:42.338846Z","shell.execute_reply":"2022-10-12T15:11:56.704562Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%time\n\nparams = {\n#      \"device_type\": 'gpu',\n     'learning_rate': 0.001,\n     'objective': 'multiclass',\n     'num_class':3,\n     'metric': 'multi_logloss',\n     'verbosity': -1,\n         }\n\nX = train_sample.drop(['team_A_scoring_within_10sec', 'team_B_scoring_within_10sec', 'game_num', 'event_id', 'event_time', 'player_scoring_next', 'team_scoring_next'], axis=1)\ny = X.pop('target')\n\nX_train, X_valid, y_train, y_valid = train_test_split(X, y)\n\nlgbm_train = lgbm.Dataset(X_train, label=y_train, free_raw_data=False)\nlgbm_eval = lgbm.Dataset(X_valid, y_valid, reference=lgbm_train, free_raw_data=False)\n\nmodel = lgbm.train(params, train_set=lgbm_train, num_boost_round=2000, valid_sets=[lgbm_eval],  callbacks=[lgbm.early_stopping(100), lgbm.log_evaluation(2000)], )","metadata":{"_kg_hide-output":false,"execution":{"iopub.status.busy":"2022-10-12T15:15:57.937260Z","iopub.execute_input":"2022-10-12T15:15:57.937731Z","iopub.status.idle":"2022-10-12T15:18:04.582036Z","shell.execute_reply.started":"2022-10-12T15:15:57.937694Z","shell.execute_reply":"2022-10-12T15:18:04.581038Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id='submission'></a>\n# Make a submission","metadata":{}},{"cell_type":"code","source":"%%time\ntest = test_df.drop('id', axis=1)\nsub_df['team_A_scoring_within_10sec'] = model.predict(test)[:, 2]\nsub_df['team_B_scoring_within_10sec'] = model.predict(test)[:, 1]\nsub_df.to_csv('submission.csv', index=False)\nsub_df.head()","metadata":{"execution":{"iopub.status.busy":"2022-10-12T15:18:58.767270Z","iopub.execute_input":"2022-10-12T15:18:58.767700Z","iopub.status.idle":"2022-10-12T15:19:07.530856Z","shell.execute_reply.started":"2022-10-12T15:18:58.767662Z","shell.execute_reply":"2022-10-12T15:19:07.529782Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}