{"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":"# !kaggle competitions download -c competitive-data-science-predict-future-sales","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# from zipfile import ZipFile","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# with ZipFile('competitive-data-science-predict-future-sales.zip', 'r') as zipObj:\n#     zipObj.extractall()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport seaborn as sns","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.set_theme()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df = pd.read_csv('../input/competitive-data-science-predict-future-sales/sales_train.csv')\ntrain_df.head()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df['date'] = pd.to_datetime(train_df['date'])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# EDA","metadata":{}},{"cell_type":"code","source":"train_df.info()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.describe(include=np.number)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.isna().sum()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.shape","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pd.get_dummies(train_df, columns=['shop_id']).info()","metadata":{"scrolled":true,"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"items_df = pd.read_csv('../input/competitive-data-science-predict-future-sales/items.csv')\nitems_df.head()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"items_map = pd.Series(data=items_df['item_category_id'], index=items_df['item_id'])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.groupby(['date'])[['item_cnt_day']].sum().plot(title=\"Count of sold item per day\")","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.groupby(['date'])[['item_cnt_day']].sum()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Data preprocessing","metadata":{}},{"cell_type":"code","source":"def preprocess_data(df, test=False):\n    df['item_id_category'] = df['item_id'].map(items_map)\n    if test:\n        df['date'] = '2015-12-11'\n        df['date'] = pd.to_datetime(df['date'])\n        df['date_block_num'] = 33\n        df.drop(['ID'], inplace=True, axis=1)\n    else:\n        df.drop(['item_price'], inplace=True, axis=1)\n    df['day'] = df['date'].dt.day\n    df['week'] = df['date'].dt.week\n    df['month'] = df['date'].dt.month\n    df['dayofweek'] = df['date'].dt.dayofweek\n    df.drop(['date'], inplace=True, axis=1)\n    return df","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df = preprocess_data(train_df)\ntrain_df.head()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df.shape","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_df = pd.read_csv('../input/competitive-data-science-predict-future-sales/test.csv')\ntest_df.head()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_id = test_df['ID']","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_df.shape","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_df = preprocess_data(test_df, test=True)\ntest_df.head()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_df.shape","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model defining","metadata":{}},{"cell_type":"code","source":"from xgboost import XGBRegressor\nfrom sklearn.metrics import mean_squared_error","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X = train_df.drop(['item_cnt_day'], axis=1)\nY = train_df['item_cnt_day']","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X.shape, Y.shape","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_test = test_df","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_test.shape","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = XGBRegressor(n_estimators=500, max_depth=10, verbose=10)\nmodel.fit(X, Y)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Y_pred = model.predict(X)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Y_pred","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"np.sqrt(mean_squared_error(Y, Y_pred))","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Y_test = model.predict(X_test)\nY_test","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"solution = pd.DataFrame({'ID': test_id, 'item_cnt_month': np.clip(Y_test, 0, 20)})\nsolution.to_csv('submission.csv', index=False)","metadata":{},"execution_count":null,"outputs":[]}]}