{"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":"import os\n!pip install ../input/sklearn24/scikit_learn-0.24.0-cp37-cp37m-manylinux2010_x86_64.whl\n!cp -r ../input/d/tezdhar/mlb-codes/archive/* /kaggle/working/.","metadata":{"execution":{"iopub.status.busy":"2021-07-31T13:00:59.347483Z","iopub.execute_input":"2021-07-31T13:00:59.347785Z","iopub.status.idle":"2021-07-31T13:01:32.250242Z","shell.execute_reply.started":"2021-07-31T13:00:59.347713Z","shell.execute_reply":"2021-07-31T13:01:32.249183Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import warnings\nwarnings.filterwarnings('ignore')\n","metadata":{"execution":{"iopub.status.busy":"2021-07-31T13:01:32.253793Z","iopub.execute_input":"2021-07-31T13:01:32.254083Z","iopub.status.idle":"2021-07-31T13:01:32.260152Z","shell.execute_reply.started":"2021-07-31T13:01:32.254052Z","shell.execute_reply":"2021-07-31T13:01:32.259359Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from dataclasses import dataclass\nimport gc\nimport itertools\nimport json\nimport joblib\n\nimport lightgbm as lgb\nimport numpy as np\nimport pandas as pd\nfrom pathlib import Path\nimport pytorch_lightning as pl\nfrom sklearn.metrics import mean_absolute_error as mae\nfrom sklearn.pipeline import make_pipeline, make_union, FeatureUnion, Pipeline\nfrom sklearn.preprocessing import PowerTransformer, QuantileTransformer\nfrom sklearn.linear_model import LinearRegression, LogisticRegression\nfrom src.constants import *\nfrom src.pipelines.artifacts import *\nfrom src.data_preparation import get_dataprep_pipelines\nfrom src.feature_gen1 import get_feature_pipeline1","metadata":{"execution":{"iopub.status.busy":"2021-07-31T13:01:32.262152Z","iopub.execute_input":"2021-07-31T13:01:32.262698Z","iopub.status.idle":"2021-07-31T13:01:37.578153Z","shell.execute_reply.started":"2021-07-31T13:01:32.262661Z","shell.execute_reply":"2021-07-31T13:01:37.577119Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"READ_ROOT = \"../input/mlb-player-digital-engagement-forecasting\"\n\nTRAIN_FILE = \"../input/mlb-player-digital-engagement-forecasting/train_updated.csv\"\nPLAYERS_FILE = \"../input/mlb-player-digital-engagement-forecasting/players.csv\"\nVAL_START_DATE = 20210801\nSAVE_DATA = \"./data/artifacts/v0\"\nRUN_TRAIN  = False\nDEBUG = False\n\nSEED1 = 786\nSEED2 = 20211102\nESTIMATORS1 = [3000, 1000, 2500, 2000]\nESTIMATORS2 = [3000, 1000, 2500, 2000]","metadata":{"execution":{"iopub.status.busy":"2021-07-31T13:01:37.57984Z","iopub.execute_input":"2021-07-31T13:01:37.580182Z","iopub.status.idle":"2021-07-31T13:01:37.58628Z","shell.execute_reply.started":"2021-07-31T13:01:37.580145Z","shell.execute_reply":"2021-07-31T13:01:37.585248Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"playerid_mapper = make_pipeline(\n    DataLoader(READ_ROOT, \"csv\"),\n    FilterDf(filter_query=\"playerForTestSetAndFuturePreds == True\"),\n    GetUnique(\"playerId\"),\n    CreateArtifact(SAVE_DATA, playerid_mapping, \"joblib\"),\n)\nplayerid_mapper.transform(\"players.csv\")\nprint(\"Playerid integer mapping created!\")\n\nteamid_mapper = make_pipeline(\n    DataLoader(READ_ROOT, \"csv\"),\n    GetUnique(\"id\"),\n    CreateArtifact(SAVE_DATA, teamid_mapping, \"joblib\"),\n)\nteamid_mapper.transform(\"teams.csv\")\nprint(\"Teamid integer mapping created!\")\n\ntr = pd.read_csv(TRAIN_FILE)\nprint(tr.shape)\n","metadata":{"execution":{"iopub.status.busy":"2021-07-31T13:01:37.587636Z","iopub.execute_input":"2021-07-31T13:01:37.588067Z","iopub.status.idle":"2021-07-31T13:02:56.666404Z","shell.execute_reply.started":"2021-07-31T13:01:37.588031Z","shell.execute_reply":"2021-07-31T13:02:56.665338Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"dataprep_pipeline1, dataprep_pipeline2 = get_dataprep_pipelines(SAVE_DATA)\nstatus = dataprep_pipeline1.transform(tr)\nprint(f\"Status for fitting datapipeline on train data: {status}\")","metadata":{"execution":{"iopub.status.busy":"2021-07-31T13:04:57.657206Z","iopub.execute_input":"2021-07-31T13:04:57.657535Z","iopub.status.idle":"2021-07-31T13:12:48.459462Z","shell.execute_reply.started":"2021-07-31T13:04:57.657505Z","shell.execute_reply":"2021-07-31T13:12:48.458581Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"seasons = pd.read_csv(\"../input/mlb-player-digital-engagement-forecasting/seasons.csv\")\nseason_start = seasons.set_index(\"seasonId\")[\"seasonStartDate\"].to_dict()\nseason_end = seasons.set_index(\"seasonId\")[\"seasonEndDate\"].to_dict()\ndate_df = []\nfor year in range(2018, 2022):\n    year_data = seasons.loc[seasons.seasonId == year]\n    dates = pd.DataFrame({\"date\": pd.date_range(f\"{year}-01-01\", f\"{year}-12-31\")})\n    dates[\"seasonflag\"] = 0\n    dates.loc[\n        dates.date.between(\n            year_data.preSeasonStartDate.iloc[0], year_data.preSeasonEndDate.iloc[0]\n        ),\n        \"seasonflag\",\n    ] = 1\n    dates.loc[\n        dates.date.between(year_data.seasonStartDate.iloc[0], year_data.seasonEndDate.iloc[0]),\n        \"seasonflag\",\n    ] = 2\n    dates.loc[\n        dates.date.between(\n            year_data.postSeasonStartDate.iloc[0], year_data.postSeasonEndDate.iloc[0]\n        ),\n        \"seasonflag\",\n    ] = 3\n    dates.loc[dates.date == year_data.allStarDate.iloc[0], \"seasonflag\"] = 4\n\n    dates[\"season_start\"] = year_data.seasonStartDate.iloc[0]\n    dates[\"season_end\"] = year_data.seasonEndDate.iloc[0]\n    dates[\"all_star\"] = year_data.allStarDate.iloc[0]\n    date_df.append(dates)\ndate_df = pd.concat(date_df)\ndate_df[\"date\"] = date_df.date.apply(lambda x: x.strftime(\"%Y%m%d\")).astype(int)\ndate_df.to_csv(f\"{SAVE_DATA}/seasons_formatted.csv\", index=False)\ndel date_df, seasons, dates, season_start, season_end\ngc.collect()","metadata":{"execution":{"iopub.status.busy":"2021-07-31T13:12:48.460985Z","iopub.execute_input":"2021-07-31T13:12:48.461329Z","iopub.status.idle":"2021-07-31T13:12:48.673558Z","shell.execute_reply.started":"2021-07-31T13:12:48.461292Z","shell.execute_reply":"2021-07-31T13:12:48.672645Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"if RUN_TRAIN:\n    TARGETS = [\"target1\", \"target2\", \"target3\", \"target4\"]\n    roster_2021 = pd.read_csv(\"../input/mlb-player-digital-engagement-forecasting/players.csv\")\n    roster_2021 = roster_2021.loc[roster_2021.playerForTestSetAndFuturePreds == True]\n    target_enc = ParseJsonField(data_field=\"nextDayPlayerEngagement\", use_cols=TARGETS + [\"playerId\"])\n    tr_index = target_enc.transform(tr).reset_index(drop=False)\n    tr_index = tr_index.loc[tr_index.playerId.isin(roster_2021.playerId)]\n    if DEBUG:\n        tr_index = tr_index.loc[tr_index.date > 20210630]\n    del tr\n    gc.collect()\n    print(tr_index.shape)","metadata":{"execution":{"iopub.status.busy":"2021-07-31T13:12:48.675493Z","iopub.execute_input":"2021-07-31T13:12:48.675845Z","iopub.status.idle":"2021-07-31T13:12:48.68221Z","shell.execute_reply.started":"2021-07-31T13:12:48.67581Z","shell.execute_reply":"2021-07-31T13:12:48.681095Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"DEVICE = 'gpu'\nfeature_pipeline_tr1, feature_pipeline_te1 = get_feature_pipeline1(SAVE_DATA, 'gpu', [7, 30, 150, 1500], [10, 30, 150], [30, 150])\nfeature_pipeline_tr2, feature_pipeline_te2 = get_feature_pipeline1(SAVE_DATA, 'gpu', [7, 30, 90, 500], [7, 21, 90], [21, 90])","metadata":{"execution":{"iopub.status.busy":"2021-07-31T13:12:48.684177Z","iopub.execute_input":"2021-07-31T13:12:48.684555Z","iopub.status.idle":"2021-07-31T13:12:48.700288Z","shell.execute_reply.started":"2021-07-31T13:12:48.684518Z","shell.execute_reply":"2021-07-31T13:12:48.699541Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"gc.collect()","metadata":{"execution":{"iopub.status.busy":"2021-07-31T13:12:48.701376Z","iopub.execute_input":"2021-07-31T13:12:48.701952Z","iopub.status.idle":"2021-07-31T13:12:48.840981Z","shell.execute_reply.started":"2021-07-31T13:12:48.701915Z","shell.execute_reply":"2021-07-31T13:12:48.839923Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"if RUN_TRAIN:\n    X_tr = feature_pipeline_tr1.transform(tr_index)\n    print(X_tr.shape, X_tr.dtype)\n    \n    y_tr = tr_index[TARGETS].values\n    cond = X_tr[:, -1] > 0\n    X_tr = X_tr[cond]\n    y_tr = y_tr[cond]\n    print(X_tr.shape, y_tr.shape)\n    \n    tr1 = lgb.Dataset(X_tr, y_tr[:, 0])\n    tr2 = lgb.Dataset(X_tr, y_tr[:, 1])\n    tr3 = lgb.Dataset(X_tr, y_tr[:, 2])\n    tr4 = lgb.Dataset(X_tr, y_tr[:, 3])\n\n    params = {\n        \"n_estimators\": 5000,\n        \"learning_rate\": 0.02,\n        \"num_leaves\": 255,\n        \"max_depth\": -1,\n        \"min_data_in_leaf\": 20,\n        \"colsample_bytree\": 0.5,\n        \"subsample\": 0.95,\n        \"bagging_freq\": 1,\n        \"reg_alpha\": 0.1,\n        \"reg_lambda\": 0.1,\n        \"extra_trees\": False,\n        \"max_bin\": 127,\n        'device': 'gpu',\n        'gpu_use_dp': False,\n        'gpu_device_id': 0,\n        \"boost_from_average\": True,\n        \"reg_sqrt\": True,\n        \"objective\": \"mae\",\n        \"metric\": \"mae\",\n        \"verbose\": -1,\n        \"seed\": SEED1,\n        \"min_data_per_group\": 10,\n        \"cat_l2\": 10,\n        \"cat_smooth\": 10,\n        \"num_threads\": 4,\n    }\n    params['n_estimators'] = ESTIMATORS1[0]\n    bst14_1 = lgb.train(params, tr1)\n    print(\"Target1 done\")\n\n    params['n_estimators'] = ESTIMATORS1[1]\n    bst24_1 = lgb.train(params, tr2)\n    print(\"Target2 done\")\n    \n    params['n_estimators'] = ESTIMATORS1[2]\n    bst34_1 = lgb.train(params, tr3)\n    print(\"Target3 done\")\n    \n    params['n_estimators'] = ESTIMATORS1[3]\n    bst44_1 = lgb.train(params, tr4)\n    print(\"Target4 done\")\n\n    del X_tr, tr1, tr2, tr3, tr4\n    gc.collect()","metadata":{"execution":{"iopub.status.busy":"2021-07-31T13:12:48.842679Z","iopub.execute_input":"2021-07-31T13:12:48.843147Z","iopub.status.idle":"2021-07-31T13:12:48.85561Z","shell.execute_reply.started":"2021-07-31T13:12:48.843108Z","shell.execute_reply":"2021-07-31T13:12:48.854761Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"if RUN_TRAIN:\n    X_tr = feature_pipeline_tr2.transform(tr_index)\n    print(X_tr.shape)\n\n    y_tr = tr_index[TARGETS].values\n    cond = X_tr[:, -1] > 0\n    X_tr = X_tr[cond]\n    y_tr = y_tr[cond]\n    print(X_tr.shape, y_tr.shape)\n\n    tr1 = lgb.Dataset(X_tr, y_tr[:, 0])\n    tr2 = lgb.Dataset(X_tr, y_tr[:, 1])\n    tr3 = lgb.Dataset(X_tr, y_tr[:, 2])\n    tr4 = lgb.Dataset(X_tr, y_tr[:, 3])\n\n    params = {\n        \"n_estimators\": 5000,\n        \"learning_rate\": 0.02,\n        \"num_leaves\": 255,\n        \"max_depth\": -1,\n        \"min_data_in_leaf\": 20,\n        \"colsample_bytree\": 0.4,\n        \"subsample\": 0.95,\n        \"bagging_freq\": 1,\n        \"reg_alpha\": 0.1,\n        \"reg_lambda\": 0.1,\n        \"extra_trees\": False,\n        \"max_bin\": 127,\n        'device': 'gpu',\n        'gpu_use_dp': False,\n        'gpu_device_id': 0,\n        \"boost_from_average\": True,\n        \"reg_sqrt\": True,\n        \"objective\": \"mae\",\n        \"metric\": \"mae\",\n        \"verbose\": 1,\n        \"seed\": SEED2,\n        \"min_data_per_group\": 10,\n        \"cat_l2\": 10,\n        \"cat_smooth\": 10,\n        \"num_threads\": 4,\n    }\n    params['n_estimators'] = ESTIMATORS2[0]\n    bst14_2 = lgb.train(params, tr1)\n    print(\"Target1 done\")\n    \n    params['n_estimators'] = ESTIMATORS2[1]\n    bst24_2 = lgb.train(params, tr2)\n    print(\"Target2 done\")\n    \n    params['n_estimators'] = ESTIMATORS2[2]\n    bst34_2 = lgb.train(params, tr3)\n    print(\"Target3 done\")\n    \n    params['n_estimators'] = ESTIMATORS2[3]\n    bst44_2 = lgb.train(params, tr4)\n    print(\"Target4 done\")\n\n    del X_tr, tr1, tr2, tr3, tr4\n    gc.collect()","metadata":{"execution":{"iopub.status.busy":"2021-07-31T13:12:48.857227Z","iopub.execute_input":"2021-07-31T13:12:48.857721Z","iopub.status.idle":"2021-07-31T13:12:48.87035Z","shell.execute_reply.started":"2021-07-31T13:12:48.857564Z","shell.execute_reply":"2021-07-31T13:12:48.869295Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"bst11_1 = lgb.Booster(model_file='../input/mlb-artifacts-mk/bst1_train_v401_1.pkl')\nbst21_1 = lgb.Booster(model_file='../input/mlb-artifacts-mk/bst2_train_v401_1.pkl') \nbst31_1 = lgb.Booster(model_file='../input/mlb-artifacts-mk/bst3_train_v401_1.pkl') \nbst41_1 = lgb.Booster(model_file='../input/mlb-artifacts-mk/bst4_train_v401_1.pkl') \n\nbst11_2 = lgb.Booster(model_file='../input/mlb-artifacts-mk/bst1_train_v401_2.pkl')\nbst21_2 = lgb.Booster(model_file='../input/mlb-artifacts-mk/bst2_train_v401_2.pkl') \nbst31_2 = lgb.Booster(model_file='../input/mlb-artifacts-mk/bst3_train_v401_2.pkl') \nbst41_2 = lgb.Booster(model_file='../input/mlb-artifacts-mk/bst4_train_v401_2.pkl') ","metadata":{"execution":{"iopub.status.busy":"2021-07-31T13:12:48.873693Z","iopub.execute_input":"2021-07-31T13:12:48.874095Z","iopub.status.idle":"2021-07-31T13:13:01.320485Z","shell.execute_reply.started":"2021-07-31T13:12:48.874059Z","shell.execute_reply":"2021-07-31T13:13:01.31956Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"bst12_1 = lgb.Booster(model_file='../input/mlb-artifacts-mk/bst1_train_v402_1.pkl')\nbst22_1 = lgb.Booster(model_file='../input/mlb-artifacts-mk/bst2_train_v402_1.pkl') \nbst32_1 = lgb.Booster(model_file='../input/mlb-artifacts-mk/bst3_train_v402_1.pkl') \nbst42_1 = lgb.Booster(model_file='../input/mlb-artifacts-mk/bst4_train_v402_1.pkl') \n\nbst12_2 = lgb.Booster(model_file='../input/mlb-artifacts-mk/bst1_train_v402_2.pkl')\nbst22_2 = lgb.Booster(model_file='../input/mlb-artifacts-mk/bst2_train_v402_2.pkl') \nbst32_2 = lgb.Booster(model_file='../input/mlb-artifacts-mk/bst3_train_v402_2.pkl') \nbst42_2 = lgb.Booster(model_file='../input/mlb-artifacts-mk/bst4_train_v402_2.pkl') ","metadata":{"execution":{"iopub.status.busy":"2021-07-31T13:13:01.322009Z","iopub.execute_input":"2021-07-31T13:13:01.32234Z","iopub.status.idle":"2021-07-31T13:13:07.01402Z","shell.execute_reply.started":"2021-07-31T13:13:01.322305Z","shell.execute_reply":"2021-07-31T13:13:07.013139Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"bst13_1 = lgb.Booster(model_file='../input/mlb-artifacts-mk/bst1_train_v403_1.pkl')\nbst23_1 = lgb.Booster(model_file='../input/mlb-artifacts-mk/bst2_train_v403_1.pkl') \nbst33_1 = lgb.Booster(model_file='../input/mlb-artifacts-mk/bst3_train_v403_1.pkl') \nbst43_1 = lgb.Booster(model_file='../input/mlb-artifacts-mk/bst4_train_v403_1.pkl') \n\nbst13_2 = lgb.Booster(model_file='../input/mlb-artifacts-mk/bst1_train_v403_2.pkl')\nbst23_2 = lgb.Booster(model_file='../input/mlb-artifacts-mk/bst2_train_v403_2.pkl') \nbst33_2 = lgb.Booster(model_file='../input/mlb-artifacts-mk/bst3_train_v403_2.pkl') \nbst43_2 = lgb.Booster(model_file='../input/mlb-artifacts-mk/bst4_train_v403_2.pkl') ","metadata":{"execution":{"iopub.status.busy":"2021-07-31T13:13:07.015212Z","iopub.execute_input":"2021-07-31T13:13:07.015539Z","iopub.status.idle":"2021-07-31T13:13:18.724719Z","shell.execute_reply.started":"2021-07-31T13:13:07.015507Z","shell.execute_reply":"2021-07-31T13:13:18.723784Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import torch\nfrom torch import nn\nfrom torch.utils.data import Dataset, DataLoader\n\nclass RandomData(Dataset):\n    def __init__(self, data, labels, scaler):\n        super().__init__()\n        self.data = data.copy()\n        self.data[np.isnan(self.data)] = 0\n        self.data = scaler.transform(self.data)\n        self.labels = labels\n\n    def __len__(self):\n        return len(self.data)\n\n    def __getitem__(self, idx):        \n        return self.data[idx].astype(np.float32), np.sqrt(self.labels[idx]).astype(np.float32)/10.0\n\n\nclass FCModel(nn.Module):\n    def __init__(self, in_f, out_f, d, p):\n        super().__init__()\n        self.fc1 = nn.Linear(in_f, d)\n        self.h1 = nn.Linear(d, d)\n        self.h2 = nn.Linear(d, d)\n        self.classifier = nn.Linear(d, 4)\n        self.bnorm1 = nn.BatchNorm1d(in_f, momentum=0.1)\n        self.relu = nn.ReLU()\n        self.sigmoid = nn.Tanh()\n        self.bnorm2 = nn.BatchNorm1d(d)\n        self.drop = nn.Dropout(p)\n        self.drop2 = nn.Dropout(p)\n    \n    def forward(self, x):\n        x = self.bnorm1(x)\n        x = self.fc1(self.drop(x))\n        x = self.relu(x)\n        x = x + x * self.sigmoid(self.h1(x))\n        x = self.relu(x)\n        x = self.classifier(self.drop2(x))\n        return x\n\n\nclass LitModel(pl.LightningModule):\n    \"\"\"PL Model\"\"\"\n    def __init__(\n        self,\n        in_f=503,\n        out_f=4,\n        d=196,\n        p=0.05,\n        lr=0.003,\n        wd=0.001,\n        grad_avg=True,\n        steps=[30],\n        gamma=0.1,\n    ):\n        super().__init__()\n        self.save_hyperparameters()\n        self.model = FCModel(in_f, out_f, d, p)\n        self.criterion = torch.nn.L1Loss()\n\n    def forward(self, x):\n        return self.model(x)\n\n    def step(self, batch):\n        x, y = batch\n        yhat = self.forward(x)\n        loss = self.criterion(yhat, y)\n        return loss, torch.square(10*yhat), torch.square(10*y)\n\n    def training_step(self, batch, batch_idx):\n        loss, preds, y = self.step(batch)\n        loss_corr = self.criterion(y, preds)\n        self.log(\"train/loss\", loss_corr, on_step=True, on_epoch=True, prog_bar=True)\n        return {\"loss\": loss}\n\n    def validation_step(self, batch, batch_idx):\n        loss, preds, y = self.step(batch)\n        loss_corr = self.criterion(y, preds)\n\n        self.log(\"val/loss\", loss_corr, on_step=False, on_epoch=True, prog_bar=True)\n        return {\"loss\": loss}\n\n    def test_step(self, batch, batch_idx):\n        loss, preds, y = self.step(batch)\n        return {\"loss\": loss, \"preds\": preds}\n\n    def test_epoch_end(self, outputs):\n        preds = torch.cat([o[\"preds\"] for o in outputs], 0).cpu().numpy()\n        self.log(\"output\", preds)\n\n    def configure_optimizers(self):\n        optimizer = torch.optim.Adam(self.parameters(), lr=self.hparams.lr, weight_decay=self.hparams.wd)\n\n        #optimizer = NovoGrad(self.parameters(), grad_averaging=self.hparams.grad_avg, lr=self.hparams.lr, weight_decay=self.hparams.wd)\n        scheduler = torch.optim.lr_scheduler.MultiStepLR(optimizer, gamma=self.hparams.gamma, milestones=self.hparams.steps)\n        return [optimizer], [{\"scheduler\": scheduler, \"interval\": \"epoch\"}]\n","metadata":{"execution":{"iopub.status.busy":"2021-07-31T13:13:18.726088Z","iopub.execute_input":"2021-07-31T13:13:18.726419Z","iopub.status.idle":"2021-07-31T13:13:18.751725Z","shell.execute_reply.started":"2021-07-31T13:13:18.726383Z","shell.execute_reply":"2021-07-31T13:13:18.748806Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"scaler201_1 = joblib.load(\"../input/mlb-artifacts-mk/min_max_scaler_v2.pkl\")\nscaler201_2 = joblib.load(\"../input/mlb-artifacts-mk/min_max_scaler_v3.pkl\")\nscaler202_1 = joblib.load(\"../input/mlb-artifacts-mk/min_max_scaler_v202_1.pkl\")\nscaler202_2 = joblib.load(\"../input/mlb-artifacts-mk/min_max_scaler_v202_2.pkl\")\n\nBATCH_SIZE = 4096\nNUM_WORKERS = 2\nIN_F = 639\nD = 300\nP = 0.1\nLR = 0.01\nWD = 0.001\nGRAD_AVG = True\nMAX_EPOCHS = 75\nSTEPS = [20, 40, 60]\nGAMMA = 0.2\nversion = 'v2'\n\nmodel = LitModel(IN_F, 4, D, P, lr=LR, wd=WD, grad_avg=GRAD_AVG, steps=STEPS, gamma=GAMMA)\n\ndef get_preds(model, loader, device='cuda'):\n    model.eval()\n    model.to(device)\n    out = []\n    with torch.no_grad():\n        for batch in loader:\n            x, y = batch\n            x = x.to(device)\n            yhat = torch.square(10*model(x))\n            out.append(yhat)\n    return torch.cat(out, 0).cpu().numpy()\n            ","metadata":{"execution":{"iopub.status.busy":"2021-07-31T13:23:47.293764Z","iopub.execute_input":"2021-07-31T13:23:47.294151Z","iopub.status.idle":"2021-07-31T13:23:47.321628Z","shell.execute_reply.started":"2021-07-31T13:23:47.294119Z","shell.execute_reply":"2021-07-31T13:23:47.320882Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import mlb\nenv = mlb.make_env()\niterator = env.iter_test()\n","metadata":{"execution":{"iopub.status.busy":"2021-07-31T13:13:18.851281Z","iopub.execute_input":"2021-07-31T13:13:18.851583Z","iopub.status.idle":"2021-07-31T13:13:18.882775Z","shell.execute_reply.started":"2021-07-31T13:13:18.851556Z","shell.execute_reply":"2021-07-31T13:13:18.88193Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"nn_files_201_1 = ['../input/mlb-artifacts-mk/nn_v201_1_1p1023.ckpt',\n            '../input/mlb-artifacts-mk/nn_v201_1_1p1034.ckpt']\n\nnn_files_201_2 = ['../input/mlb-artifacts-mk/nn_v201_2_1p1054.ckpt',\n            '../input/mlb-artifacts-mk/nn_v201_2_1p1071.ckpt']\n\nnn_files_202_1 = ['../input/mlb-artifacts-mk/nn_v202_1_8484.ckpt',\n            '../input/mlb-artifacts-mk/nn_v202_1_8502.ckpt']\n\nnn_files_202_2 = ['../input/mlb-artifacts-mk/nn_v202_2_8415.ckpt',\n            '../input/mlb-artifacts-mk/nn_v202_2_8452.ckpt']","metadata":{"execution":{"iopub.status.busy":"2021-07-31T13:13:18.885958Z","iopub.execute_input":"2021-07-31T13:13:18.886202Z","iopub.status.idle":"2021-07-31T13:13:18.89212Z","shell.execute_reply.started":"2021-07-31T13:13:18.886179Z","shell.execute_reply":"2021-07-31T13:13:18.891347Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for i, (test_df, sub_df) in enumerate(iterator):\n    test_df = test_df.reset_index(drop=False)    \n    test_df = test_df.rename(columns={'index': 'date'})\n    \n    # If not able to update data, just make predictions on old\n    try:\n        dataprep_pipeline2.transform(test_df)\n    except Exception:\n        print(\"Artifact updation failed.\")\n        \n    # If not abe to parse date or playerId, do nothing\n    try:\n        sub_df['date'] = sub_df.date_playerId.str.slice(0, 8).astype(int)\n        sub_df['playerId'] = sub_df.date_playerId.str.slice(9, ).astype(int)\n    except Exception:\n        env.predict(sub_df)\n        continue\n    \n    # try predictions on feature set 1\n    preds_all = []\n    \n    try:\n        X_test = feature_pipeline_te1.transform(sub_df)\n        \n        preds_f1 = []\n        # LGB till june01\n        preds_lgb11 = bst11_1.predict(X_test)\n        preds_lgb21 = bst21_1.predict(X_test)\n        preds_lgb31 = bst31_1.predict(X_test)\n        preds_lgb41 = bst41_1.predict(X_test)\n        pp = np.vstack((preds_lgb11, preds_lgb21, preds_lgb31, preds_lgb41)).T\n        print(\"LGB1 \", pp[:2])\n        preds_f1.append(pp)\n        \n        # LGB till July 01\n        preds_lgb12 = bst12_1.predict(X_test)\n        preds_lgb22 = bst22_1.predict(X_test)\n        preds_lgb32 = bst32_1.predict(X_test)\n        preds_lgb42 = bst42_1.predict(X_test)\n        pp = np.vstack((preds_lgb12, preds_lgb22, preds_lgb32, preds_lgb42)).T\n        print(\"LGB2 \", pp[:2])\n        preds_f1.append(pp)\n\n        # LGB till July 17\n        preds_lgb13 = bst13_1.predict(X_test)\n        preds_lgb23 = bst23_1.predict(X_test)\n        preds_lgb33 = bst33_1.predict(X_test)\n        preds_lgb43 = bst43_1.predict(X_test)\n        pp = np.vstack((preds_lgb13, preds_lgb23, preds_lgb33, preds_lgb43)).T\n        print(\"LGB3 \", pp[:2])\n        preds_f1.append(pp)\n\n        # NN 2 checkpoints:\n        try:\n            te_ds = RandomData(X_test, sub_df[TARGETS].values, scaler201_1)\n            te_dl = DataLoader(te_ds, batch_size=BATCH_SIZE, shuffle=False, drop_last=False, num_workers=NUM_WORKERS)\n            for file in nn_files_201_1:\n                model.load_state_dict(torch.load(str(file), map_location='cuda:0')[\"state_dict\"], strict=False)\n                preds_nn = get_preds(model, te_dl, device='cuda')\n                print(\"NN preds \", preds_nn[:2])\n                preds_f1.append(preds_nn)\n                \n            te_ds = RandomData(X_test, sub_df[TARGETS].values, scaler202_1)\n            te_dl = DataLoader(te_ds, batch_size=BATCH_SIZE, shuffle=False, drop_last=False, num_workers=NUM_WORKERS)\n            for file in nn_files_202_1:\n                model.load_state_dict(torch.load(str(file), map_location='cuda:0')[\"state_dict\"], strict=False)\n                preds_nn = get_preds(model, te_dl, device='cuda')\n                print(\"NN preds \", preds_nn[:2])\n                preds_f1.append(preds_nn)\n        except:\n            print(\"NN prediction failed.\")\n            \n        preds_f1 = np.mean(preds_f1, 0)\n        print(\"first row from feature set1 ensemble\", preds_f1[0])\n        if RUN_TRAIN:\n            try:\n                preds_lgb14 = bst14_1.predict(X_test)\n                preds_lgb24 = bst24_1.predict(X_test)\n                preds_lgb34 = bst34_1.predict(X_test)\n                preds_lgb44 = bst44_1.predict(X_test)\n                preds_lgb4 = np.vstack((preds_lgb14, preds_lgb24, preds_lgb34, preds_lgb44)).T\n                print(\"first row from all train data\", preds_lgb4[0])\n                preds_f1 = 0.5*preds_f1 + 0.5*preds_lgb4\n            except:\n                print(\"all data train prediction failed\")\n        del X_test\n        preds_all.append(preds_f1)\n        gc.collect()\n    except:\n        print(\"prediction 1 failed\")\n\n    # Try predictions on fature set2\n    try:\n        X_test = feature_pipeline_te2.transform(sub_df)\n        preds_f2 = []\n        preds_lgb11 = bst11_2.predict(X_test)\n        preds_lgb21 = bst21_2.predict(X_test)\n        preds_lgb31 = bst31_2.predict(X_test)\n        preds_lgb41 = bst41_2.predict(X_test)\n        pp = np.vstack((preds_lgb11, preds_lgb21, preds_lgb31, preds_lgb41)).T\n        print(\"LGB1 \", pp[:2])\n        preds_f2.append(pp)\n        \n        preds_lgb12 = bst12_2.predict(X_test)\n        preds_lgb22 = bst22_2.predict(X_test)\n        preds_lgb32 = bst32_2.predict(X_test)\n        preds_lgb42 = bst42_2.predict(X_test)\n        pp = np.vstack((preds_lgb12, preds_lgb22, preds_lgb32, preds_lgb42)).T\n        print(\"LGB2 \", pp[:2])\n        preds_f2.append(pp)\n\n        preds_lgb13 = bst13_2.predict(X_test)\n        preds_lgb23 = bst23_2.predict(X_test)\n        preds_lgb33 = bst33_2.predict(X_test)\n        preds_lgb43 = bst43_2.predict(X_test)\n        pp = np.vstack((preds_lgb13, preds_lgb23, preds_lgb33, preds_lgb43)).T\n        print(\"LGB3 \", pp[:2])\n        preds_f2.append(pp)\n        \n        # NN 2 checkpoints:\n        try:\n            te_ds = RandomData(X_test, sub_df[TARGETS].values, scaler201_2)\n            te_dl = DataLoader(te_ds, batch_size=BATCH_SIZE, shuffle=False, drop_last=False, num_workers=NUM_WORKERS)\n            for file in nn_files_201_2:\n                model.load_state_dict(torch.load(str(file), map_location='cuda:0')[\"state_dict\"], strict=False)\n                preds_nn = get_preds(model, te_dl, device='cuda')\n                print(\"NN preds \", preds_nn[:2])\n                preds_f2.append(preds_nn)\n    \n            te_ds = RandomData(X_test, sub_df[TARGETS].values, scaler202_2)\n            te_dl = DataLoader(te_ds, batch_size=BATCH_SIZE, shuffle=False, drop_last=False, num_workers=NUM_WORKERS)\n            for file in nn_files_202_2:\n                model.load_state_dict(torch.load(str(file), map_location='cuda:0')[\"state_dict\"], strict=False)\n                preds_nn = get_preds(model, te_dl, device='cuda')\n                print(\"NN preds \", preds_nn[:2])\n                preds_f2.append(preds_nn)\n\n        except:\n            print(\"NN prediction failed.\")\n\n        preds_f2 = np.mean(preds_f2, 0)\n        print(\"first row from feature set1 ensemble\", preds_f2[:2])\n        if RUN_TRAIN:\n            try:\n                preds_lgb14 = bst14_2.predict(X_test)\n                preds_lgb24 = bst24_2.predict(X_test)\n                preds_lgb34 = bst34_2.predict(X_test)\n                preds_lgb44 = bst44_2.predict(X_test)\n                preds_lgb4 = np.vstack((preds_lgb14, preds_lgb24, preds_lgb34, preds_lgb44)).T\n                print(\"first row from all train data\", preds_lgb4[:2])\n\n                preds_f2 = preds_f2 * 0.5 + preds_lgb4 * 0.5\n            except:\n                print(\"all data prediction failed.\")\n        del X_test\n        preds_all.append(preds_f2)\n        gc.collect()\n    except:\n        print(\"prediction 2 failed\")\n    \n    if len(preds_all) == 0:\n        preds_all = sub_df[TARGETS]\n    else:\n        preds_all = np.mean(preds_all, 0)\n\n    sub_df['target1'] = np.clip(preds_all[:, 0], 0, 100)\n    sub_df['target2'] = np.clip(preds_all[:, 1], 0, 100)\n    sub_df['target3'] = np.clip(preds_all[:, 2], 0, 100)\n    sub_df['target4'] = np.clip(preds_all[:, 3], 0, 100)\n\n    sub_df['target1'] = sub_df.target1.fillna(sub_df.target1.median())\n    sub_df['target2'] = sub_df.target2.fillna(sub_df.target2.median())\n    sub_df['target3'] = sub_df.target3.fillna(sub_df.target3.median())\n    sub_df['target4'] = sub_df.target4.fillna(sub_df.target4.median())\n\n    del sub_df['date'], sub_df['playerId']\n    env.predict(sub_df)","metadata":{"execution":{"iopub.status.busy":"2021-07-31T13:13:18.894797Z","iopub.execute_input":"2021-07-31T13:13:18.895175Z","iopub.status.idle":"2021-07-31T13:20:17.336227Z","shell.execute_reply.started":"2021-07-31T13:13:18.895126Z","shell.execute_reply":"2021-07-31T13:20:17.335357Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#env.predict(sub_df)","metadata":{"execution":{"iopub.status.busy":"2021-07-31T13:23:52.553385Z","iopub.execute_input":"2021-07-31T13:23:52.553834Z","iopub.status.idle":"2021-07-31T13:23:52.945937Z","shell.execute_reply.started":"2021-07-31T13:23:52.553791Z","shell.execute_reply":"2021-07-31T13:23:52.943675Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}