{"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-08-04T15:29:54.271460Z","iopub.execute_input":"2022-08-04T15:29:54.271876Z","iopub.status.idle":"2022-08-04T15:29:54.280262Z","shell.execute_reply.started":"2022-08-04T15:29:54.271841Z","shell.execute_reply":"2022-08-04T15:29:54.279108Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"data = pd.read_csv('../input/house-prices-advanced-regression-techniques/train.csv')\n# data = data.fillna(0)\n\ntest_data = pd.read_csv('../input/house-prices-advanced-regression-techniques/test.csv')\n\ndata.head()\n\ntest_data","metadata":{"execution":{"iopub.status.busy":"2022-08-04T15:29:54.369135Z","iopub.execute_input":"2022-08-04T15:29:54.370244Z","iopub.status.idle":"2022-08-04T15:29:54.442295Z","shell.execute_reply.started":"2022-08-04T15:29:54.370200Z","shell.execute_reply":"2022-08-04T15:29:54.441238Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Splitting the Dataset\n\ntarget_col = 'SalePrice'\n\nX = data.drop(columns=[target_col, 'Id'])\ny = data[target_col]\n\ntest_X = test_data.drop(columns=['Id'])\n\nX.isna().sum(), test_X.isna().sum()","metadata":{"execution":{"iopub.status.busy":"2022-08-04T15:29:54.471853Z","iopub.execute_input":"2022-08-04T15:29:54.472296Z","iopub.status.idle":"2022-08-04T15:29:54.496134Z","shell.execute_reply.started":"2022-08-04T15:29:54.472258Z","shell.execute_reply":"2022-08-04T15:29:54.495291Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Train-Valid Split\n\nfrom sklearn.model_selection import train_test_split\n\nX_train, X_valid, y_train, y_valid = train_test_split(X, y, random_state = 30)\n\nX_train.isna().sum().sum()","metadata":{"execution":{"iopub.status.busy":"2022-08-04T15:29:54.600536Z","iopub.execute_input":"2022-08-04T15:29:54.601281Z","iopub.status.idle":"2022-08-04T15:29:54.616900Z","shell.execute_reply.started":"2022-08-04T15:29:54.601244Z","shell.execute_reply":"2022-08-04T15:29:54.615588Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Dealing with Missing Values\n\nnum_cols = X.select_dtypes(include='number').columns\ncat_cols = X.select_dtypes(exclude='number').columns\n\nnum_na_cols = []\ncat_na_cols = []\n\nfor column in num_cols:\n    if X[column].isna().sum() != 0:\n        num_na_cols.append(column)\n        \nfor column in cat_cols:\n    if X[column].isna().sum() != 0:\n        cat_na_cols.append(column)\n        \nnum_na_cols, cat_na_cols","metadata":{"execution":{"iopub.status.busy":"2022-08-04T15:29:54.731661Z","iopub.execute_input":"2022-08-04T15:29:54.732499Z","iopub.status.idle":"2022-08-04T15:29:54.775580Z","shell.execute_reply.started":"2022-08-04T15:29:54.732457Z","shell.execute_reply":"2022-08-04T15:29:54.774251Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Imputing Missing Num Values\n        \nfrom sklearn.impute import SimpleImputer\n\nmy_imputer = SimpleImputer(strategy='mean')\n\ntrain_imputed_values = my_imputer.fit_transform(X_train[num_na_cols])\nvalid_imputed_values = my_imputer.transform(X_valid[num_na_cols])\ntest_imputed_values = my_imputer.transform(test_X[num_na_cols])\n\nX_train[num_na_cols] = train_imputed_values\nX_valid[num_na_cols] = valid_imputed_values\ntest_X[num_na_cols] = test_imputed_values\n\ntest_X.isna().sum().sum()","metadata":{"execution":{"iopub.status.busy":"2022-08-04T15:29:54.829141Z","iopub.execute_input":"2022-08-04T15:29:54.829580Z","iopub.status.idle":"2022-08-04T15:29:54.854876Z","shell.execute_reply.started":"2022-08-04T15:29:54.829544Z","shell.execute_reply":"2022-08-04T15:29:54.853873Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Imputing Missing Cat values\n\nvalues = {'Alley': 'No Alley Access', 'PoolQC': 'No Pool', 'Fence': 'No Fence', 'MiscFeature': 'None'}\n\nX_train.fillna(value=values, inplace=True)\nX_valid.fillna(value=values, inplace=True)\ntest_X.fillna(value=values, inplace=True)\n\ndrop_cols = [column for column in X_train.columns if X_train[column].isnull().any() or test_X[column].isnull().any()]\n\nX_train = X_train.drop(columns=drop_cols)\nX_valid = X_valid.drop(columns=drop_cols)\ntest_X = test_X.drop(columns=drop_cols)\n\nprint(drop_cols)\n\nX_train.isna().sum().sum(), X_valid.isna().sum().sum(), test_X.isna().sum().sum() # придумать как исправить оставшиеся колонки","metadata":{"execution":{"iopub.status.busy":"2022-08-04T15:29:54.919904Z","iopub.execute_input":"2022-08-04T15:29:54.920630Z","iopub.status.idle":"2022-08-04T15:29:54.994104Z","shell.execute_reply.started":"2022-08-04T15:29:54.920586Z","shell.execute_reply":"2022-08-04T15:29:54.993336Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.preprocessing import OrdinalEncoder\n\nord_encoder = OrdinalEncoder(categories=[['Po', 'Fa', 'TA', 'Gd', 'Ex']])\n\nX_train['ExterQual'] = ord_encoder.fit_transform(X_train[['ExterQual']])\nX_valid['ExterQual'] = ord_encoder.transform(X_valid[['ExterQual']])\ntest_X['ExterQual'] = ord_encoder.transform(test_X[['ExterQual']])\n\nX_train['ExterCond'] = ord_encoder.fit_transform(X_train[['ExterCond']])\nX_valid['ExterCond'] = ord_encoder.transform(X_valid[['ExterCond']])\ntest_X['ExterCond'] = ord_encoder.transform(test_X[['ExterCond']])\n\nX_train['HeatingQC'] = ord_encoder.fit_transform(X_train[['HeatingQC']])\nX_valid['HeatingQC'] = ord_encoder.transform(X_valid[['HeatingQC']])\ntest_X['HeatingQC'] = ord_encoder.transform(test_X[['HeatingQC']])\n\n# X_train['KitchenQual'] = ord_encoder.fit_transform(X_train[['KitchenQual']])\n# X_valid['KitchenQual'] = ord_encoder.transform(X_valid[['KitchenQual']])\n# test_X['KitchenQual'] = ord_encoder.transform(test_X[['KitchenQual']])\n\nX_train['ExterQual']","metadata":{"execution":{"iopub.status.busy":"2022-08-04T15:29:55.191727Z","iopub.execute_input":"2022-08-04T15:29:55.192531Z","iopub.status.idle":"2022-08-04T15:29:55.224043Z","shell.execute_reply.started":"2022-08-04T15:29:55.192485Z","shell.execute_reply":"2022-08-04T15:29:55.222987Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from category_encoders import MEstimateEncoder, TargetEncoder\n\ny_train_log = np.log10(y_train)\ny_valid_log = np.log10(y_valid)\n\ncat_cols = [column for column in X_train.columns]\n\ncat_cols = [column for column in cat_cols if column not in ['ExterQual', 'ExterCond', 'HeatingQC', 'KitchenQual']]\n\ntarget_encoder = MEstimateEncoder(cols = X_train[cat_cols], m=5.0)\n\nX_train = target_encoder.fit_transform(X_train, y_train)\nX_valid = target_encoder.transform(X_valid)\ntest_X = target_encoder.transform(test_X)","metadata":{"execution":{"iopub.status.busy":"2022-08-04T15:29:55.225964Z","iopub.execute_input":"2022-08-04T15:29:55.226313Z","iopub.status.idle":"2022-08-04T15:29:56.044857Z","shell.execute_reply.started":"2022-08-04T15:29:55.226282Z","shell.execute_reply":"2022-08-04T15:29:56.043650Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.linear_model import LinearRegression\nfrom sklearn.model_selection import train_test_split, GridSearchCV\nfrom sklearn.preprocessing import StandardScaler, RobustScaler, LabelEncoder, OneHotEncoder\nfrom sklearn.pipeline import make_pipeline","metadata":{"execution":{"iopub.status.busy":"2022-08-04T15:29:56.046513Z","iopub.execute_input":"2022-08-04T15:29:56.046950Z","iopub.status.idle":"2022-08-04T15:29:56.052717Z","shell.execute_reply.started":"2022-08-04T15:29:56.046909Z","shell.execute_reply":"2022-08-04T15:29:56.051619Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# dummy_features = pd.get_dummies(data[cat_cols])\n# X = pd.concat([data[num_cols], dummy_features], axis=1)\n\n# scaler = StandardScaler()\n# X_scaled = scaler.fit_transform(X[num_cols])\n# X_scaled_col = pd.DataFrame(X_scaled, columns=num_cols)\n# X = pd.concat([X_scaled_col, dummy_features], axis=1)\n\n# feature_cols = X.columns\n\n# X = X[1:]\n# X = X.fillna(0)\n# X.shape","metadata":{"execution":{"iopub.status.busy":"2022-08-04T15:29:56.055520Z","iopub.execute_input":"2022-08-04T15:29:56.056210Z","iopub.status.idle":"2022-08-04T15:29:56.064588Z","shell.execute_reply.started":"2022-08-04T15:29:56.056145Z","shell.execute_reply":"2022-08-04T15:29:56.063735Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.metrics import mean_squared_error\nfrom math import sqrt\n\n# X_train, X_valid, y_train, y_valid = train_test_split(X[feature_cols], target)\n\nlr = LinearRegression()\nlr.fit(X_train, y_train_log)\n\ny_preds = lr.predict(X_valid)\nsqrt(mean_squared_error(y_preds, y_valid_log))","metadata":{"execution":{"iopub.status.busy":"2022-08-04T15:29:56.066262Z","iopub.execute_input":"2022-08-04T15:29:56.066673Z","iopub.status.idle":"2022-08-04T15:29:56.105468Z","shell.execute_reply.started":"2022-08-04T15:29:56.066632Z","shell.execute_reply":"2022-08-04T15:29:56.104245Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_preds = lr.predict(test_X)\ntest_preds = np.power(10, test_preds)\ntest_preds = pd.DataFrame(test_preds, columns=[target_col])\ntest_preds = test_preds.reset_index(drop=False)\ntest_preds = test_preds.rename(columns={'index':'Id'})\ntest_preds['Id'] += 1461\ntest_preds","metadata":{"execution":{"iopub.status.busy":"2022-08-04T15:29:56.107259Z","iopub.execute_input":"2022-08-04T15:29:56.107708Z","iopub.status.idle":"2022-08-04T15:29:56.157998Z","shell.execute_reply.started":"2022-08-04T15:29:56.107665Z","shell.execute_reply":"2022-08-04T15:29:56.156756Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_preds.to_csv('./subm_test.csv', index=False)","metadata":{"execution":{"iopub.status.busy":"2022-08-04T15:29:56.159763Z","iopub.execute_input":"2022-08-04T15:29:56.161103Z","iopub.status.idle":"2022-08-04T15:29:56.183938Z","shell.execute_reply.started":"2022-08-04T15:29:56.161055Z","shell.execute_reply":"2022-08-04T15:29:56.182572Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# data_test = pd.read_csv('../input/house-prices-advanced-regression-techniques/test.csv', index_col='Id')\n\n# dummy_features = pd.get_dummies(data_test[cat_cols])\n# X_test = pd.concat([data_test[num_cols], dummy_features], axis=1)\n\n# X_scaled = scaler.fit_transform(X_test[num_cols])\n# X_scaled_col = pd.DataFrame(X_scaled, columns=num_cols)\n# X_test = pd.concat([X_scaled_col, dummy_features], axis=1)\n\n# X_test = X_test[1:]\n# X_test = X_test.fillna(0)\n# X_test.shape","metadata":{"execution":{"iopub.status.busy":"2022-08-04T15:29:56.185784Z","iopub.execute_input":"2022-08-04T15:29:56.186262Z","iopub.status.idle":"2022-08-04T15:29:56.193774Z","shell.execute_reply.started":"2022-08-04T15:29:56.186218Z","shell.execute_reply":"2022-08-04T15:29:56.192479Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# y_preds_test = lr.predict(X_test)","metadata":{"execution":{"iopub.status.busy":"2022-08-04T15:29:56.197354Z","iopub.execute_input":"2022-08-04T15:29:56.200287Z","iopub.status.idle":"2022-08-04T15:29:56.205986Z","shell.execute_reply.started":"2022-08-04T15:29:56.200235Z","shell.execute_reply":"2022-08-04T15:29:56.204821Z"},"trusted":true},"execution_count":null,"outputs":[]}]}