{"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-12-16T10:46:46.618046Z","iopub.execute_input":"2022-12-16T10:46:46.618435Z","iopub.status.idle":"2022-12-16T10:46:46.67912Z","shell.execute_reply.started":"2022-12-16T10:46:46.618353Z","shell.execute_reply":"2022-12-16T10:46:46.6778Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train = pd.read_csv(\"../input/avito-demand-prediction/train.csv\")\ndf_test = pd.read_csv(\"../input/avito-demand-prediction/test.csv\")","metadata":{"execution":{"iopub.status.busy":"2022-12-16T10:46:46.681244Z","iopub.execute_input":"2022-12-16T10:46:46.681607Z","iopub.status.idle":"2022-12-16T10:47:27.729893Z","shell.execute_reply.started":"2022-12-16T10:46:46.681569Z","shell.execute_reply":"2022-12-16T10:47:27.728829Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data = df_train[\"activation_date\"].str.split(\"-\", expand=True)\ndata.columns = ['year','month','day']\ndf_train = pd.concat([df_train, data], axis = 1)\ndf_train.drop(columns=\"activation_date\",inplace = True)\n\ndata = df_test[\"activation_date\"].str.split(\"-\", expand=True)\ndata.columns = ['year','month','day']\ndf_test = pd.concat([df_test, data], axis = 1)\ndf_test.drop(columns=\"activation_date\",inplace = True)","metadata":{"execution":{"iopub.status.busy":"2022-12-16T10:47:27.731597Z","iopub.execute_input":"2022-12-16T10:47:27.731993Z","iopub.status.idle":"2022-12-16T10:47:35.731809Z","shell.execute_reply.started":"2022-12-16T10:47:27.731954Z","shell.execute_reply":"2022-12-16T10:47:35.730795Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"missing_values = df_train.isnull().sum()\nmissing_values = missing_values[missing_values > 0]\nmissing_values.sort_values(inplace=True)\nmissing_values","metadata":{"execution":{"iopub.status.busy":"2022-12-16T10:47:35.734497Z","iopub.execute_input":"2022-12-16T10:47:35.735193Z","iopub.status.idle":"2022-12-16T10:47:36.871009Z","shell.execute_reply.started":"2022-12-16T10:47:35.735151Z","shell.execute_reply":"2022-12-16T10:47:36.870012Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train['price'] = df_train['price'].fillna(df_train['price'].mean())\ndf_test['price'] = df_test['price'].fillna(df_test['price'].mean())\n\nfor col in ['param_1', 'param_2', 'param_3', 'image_top_1', 'title', 'description']:\n    df_train[col] = df_train[col].fillna('')\n    df_test[col] = df_test[col].fillna('')","metadata":{"execution":{"iopub.status.busy":"2022-12-16T10:47:36.872481Z","iopub.execute_input":"2022-12-16T10:47:36.873583Z","iopub.status.idle":"2022-12-16T10:47:37.934759Z","shell.execute_reply.started":"2022-12-16T10:47:36.873543Z","shell.execute_reply":"2022-12-16T10:47:37.933518Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y = df_train['deal_probability']\n\ndf_train.drop(['image', 'item_id', 'user_id','description','title','deal_probability'], axis=1, inplace=True)\ndf_test.drop(['image', 'item_id', 'user_id','description','title'], axis=1, inplace=True)","metadata":{"execution":{"iopub.status.busy":"2022-12-16T10:47:37.936283Z","iopub.execute_input":"2022-12-16T10:47:37.9367Z","iopub.status.idle":"2022-12-16T10:47:40.356362Z","shell.execute_reply.started":"2022-12-16T10:47:37.936649Z","shell.execute_reply":"2022-12-16T10:47:40.355378Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"features = ['region', 'city', 'parent_category_name', 'category_name', 'param_1', 'param_2', 'param_3', 'user_type', 'image_top_1','year', 'month','day' ]\ndf_train['image_top_1'] = df_train['image_top_1'].astype('str')\ndf_test['image_top_1'] = df_test['image_top_1'].astype('str')","metadata":{"execution":{"iopub.status.busy":"2022-12-16T10:47:40.358241Z","iopub.execute_input":"2022-12-16T10:47:40.358671Z","iopub.status.idle":"2022-12-16T10:47:41.009571Z","shell.execute_reply.started":"2022-12-16T10:47:40.358629Z","shell.execute_reply":"2022-12-16T10:47:41.008546Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from catboost import CatBoostRegressor, Pool\nfrom tqdm.notebook import tqdm_notebook\nfrom sklearn.model_selection import StratifiedKFold\n\n\nspliter = StratifiedKFold(n_splits=4, shuffle=True, random_state=3)\n\n_y = (y.round(2) * 100).astype(int)\n\nsplit_list = list(spliter.split(_y, _y))\n\nmodels = []\npredictions = np.zeros(shape=[df_train.shape[0]])\n\ndef rmse(predictions, y):\n    return np.sqrt(((predictions - y) ** 2).mean())\n\nfor fold_id, (train_idx, val_idx) in tqdm_notebook(enumerate(split_list)):\n    X_train, Y_train = df_train.loc[train_idx], y.loc[train_idx]\n    X_val, Y_val = df_train.loc[val_idx], y.loc[val_idx]\n    \n    train_dataset = Pool(X_train, Y_train, cat_features = features)\n    eval_dataset = Pool(X_val, Y_val,cat_features = features)\n    \n    model = CatBoostRegressor(learning_rate=0.1, iterations=1000, eval_metric='RMSE',metric_period=50, early_stopping_rounds=20, task_type=\"GPU\",)\n    model.fit(train_dataset, eval_set=eval_dataset)\n    models.append(model)\n    \n    preds = model.predict(X_val)\n    predictions[val_idx] += preds\n    \n    print('№:', fold_id,'RMSE:', rmse(Y_val, preds))","metadata":{"execution":{"iopub.status.busy":"2022-12-16T10:47:41.011221Z","iopub.execute_input":"2022-12-16T10:47:41.011632Z","iopub.status.idle":"2022-12-16T11:04:42.423543Z","shell.execute_reply.started":"2022-12-16T10:47:41.011593Z","shell.execute_reply":"2022-12-16T11:04:42.422239Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pred = np.zeros(shape=[X_val.shape[0]])\n\nfor model in tqdm_notebook(models):\n    preds = model.predict(X_val)\n    pred += preds\npreds /= len(models)\nprint('RMSE',  rmse(Y_val, preds))","metadata":{"execution":{"iopub.status.busy":"2022-12-16T11:04:42.425417Z","iopub.execute_input":"2022-12-16T11:04:42.426558Z","iopub.status.idle":"2022-12-16T11:05:12.552383Z","shell.execute_reply.started":"2022-12-16T11:04:42.426492Z","shell.execute_reply":"2022-12-16T11:05:12.551317Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pred = np.zeros(shape=[df_test.shape[0]])\n\nfor model in tqdm_notebook(models):\n    preds = model.predict(df_test)\n    pred += preds\npred /= len(models)\n\nsample_sub = pd.read_csv('../input/avito-demand-prediction/sample_submission.csv')\nsample_sub","metadata":{"execution":{"iopub.status.busy":"2022-12-16T11:05:12.555782Z","iopub.execute_input":"2022-12-16T11:05:12.556498Z","iopub.status.idle":"2022-12-16T11:05:54.179142Z","shell.execute_reply.started":"2022-12-16T11:05:12.556457Z","shell.execute_reply":"2022-12-16T11:05:54.178122Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sample_sub['deal_probability'] = np.clip(pred, 0, 1)\nsample_sub.to_csv('sub.csv', index=False)\nsample_sub","metadata":{"execution":{"iopub.status.busy":"2022-12-16T11:05:54.18057Z","iopub.execute_input":"2022-12-16T11:05:54.181336Z","iopub.status.idle":"2022-12-16T11:05:55.508099Z","shell.execute_reply.started":"2022-12-16T11:05:54.181297Z","shell.execute_reply":"2022-12-16T11:05:55.507013Z"},"trusted":true},"execution_count":null,"outputs":[]}]}