{"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":"#### Hi all.  🙋\n\n#### Nice to meet you! \n\n#### We all know that feature engineering is the key to dynamically growing a model's performance in machine learning.\n\n#### You will try a lot of thought and various methods when doing feature engineering! I'm going to suggest a lot of ways to reduce the trouble and process.\n\n#### The methods I will introduce are both known and unfamiliar methods. I hope you will refer to them when conducting competitions on Kaggle in the future! 💯\n\n","metadata":{}},{"cell_type":"code","source":"import numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nfrom sklearn.model_selection import train_test_split\nimport seaborn as sns\nimport matplotlib.pyplot as plt","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2021-11-26T08:02:11.939919Z","iopub.execute_input":"2021-11-26T08:02:11.940543Z","iopub.status.idle":"2021-11-26T08:02:13.020812Z","shell.execute_reply.started":"2021-11-26T08:02:11.94042Z","shell.execute_reply":"2021-11-26T08:02:13.019743Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train = pd.read_csv('../input/house-prices-advanced-regression-techniques/train.csv')\ntrain = train.drop(['Id'],axis =1)\npd.set_option('display.max_columns', None)\ntrain.head()","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:13.022526Z","iopub.execute_input":"2021-11-26T08:02:13.022812Z","iopub.status.idle":"2021-11-26T08:02:13.125624Z","shell.execute_reply.started":"2021-11-26T08:02:13.022772Z","shell.execute_reply":"2021-11-26T08:02:13.124694Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# data segmentation\nX = train.drop('SalePrice', axis=1)\ny = train['SalePrice']\n\ntrain_x, test_x, train_y, test_y = train_test_split(X, y, test_size=0.2, shuffle=True, random_state=0) # train, valid 8:2 분할","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:13.126655Z","iopub.execute_input":"2021-11-26T08:02:13.126879Z","iopub.status.idle":"2021-11-26T08:02:13.139557Z","shell.execute_reply.started":"2021-11-26T08:02:13.126844Z","shell.execute_reply":"2021-11-26T08:02:13.138724Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# We need to duplicate the original state of our training data and test data.\ntrain_x_saved = train_x.copy()\ntest_x_saved = test_x.copy()\n\n# Functions that return training data and test data\ndef load_data():\n    train_x, test_x = train_x_saved.copy(), test_x_saved.copy()\n    return train_x, test_x","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:13.141429Z","iopub.execute_input":"2021-11-26T08:02:13.141789Z","iopub.status.idle":"2021-11-26T08:02:13.147872Z","shell.execute_reply.started":"2021-11-26T08:02:13.141755Z","shell.execute_reply":"2021-11-26T08:02:13.147063Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Store the numeric variable to be converted into a list\nnum_cols = ['MSSubClass', 'LotFrontage', 'LotArea', 'OverallQual',\n            'OverallCond', 'YearBuilt', 'YearRemodAdd', 'MasVnrArea', 'BsmtFinSF1', '1stFlrSF', '2ndFlrSF',\n           'GrLivArea', 'GarageYrBlt', 'GarageArea', 'WoodDeckSF']","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:13.148873Z","iopub.execute_input":"2021-11-26T08:02:13.149087Z","iopub.status.idle":"2021-11-26T08:02:13.160205Z","shell.execute_reply.started":"2021-11-26T08:02:13.149063Z","shell.execute_reply":"2021-11-26T08:02:13.159252Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Linear Transform","metadata":{}},{"cell_type":"markdown","source":"<div style=\"background-color:rgba(0, 255, 255, 0.6);border-radius:5px;display:fill;\">\n    <h1><center style =\"margin-left : 20px;\">Standardization</center></h1>\n</div>","metadata":{}},{"cell_type":"markdown","source":"#### This is the most basic transformation method. \n#### It is a method that makes the mean 0 and the standard deviation 1 through a linear transformation!","metadata":{}},{"cell_type":"markdown","source":"![캡처.PNG](attachment:1f1a31d7-34c7-4485-8929-617724947a4a.PNG)","metadata":{},"attachments":{"1f1a31d7-34c7-4485-8929-617724947a4a.PNG":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAOoAAABqCAYAAACyJM2WAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAA4nSURBVHhe7Z0J8FVTHMdjtCOSoUlITKEihIwsRRNlkES2UGiZRrZqyL5Vg2ps2YmaijJJyb4bVNZQtuxLm52yHfP5dc/zet7//f//59+799z3/cycqXfuufXem/t955zfdmo5IUTikVCFCAAJVYgAkFCFCAAJVYgAkFCFCAAJVYgAkFCFCAAJVYgAkFCFCAAJVYgAkFCFCAAJVYgAkFCFCAAJVYgAkFCFCAAJVYgAkFCFCAAJVYgAkFCFCAAJVYgAkFCFCAAJVYgAkFCFCAAJVYgAkFCFCAAJVYgAkFBFXn788Uf37rvvukmTJrkFCxZEvWvz9ttvu7PPPtvNmzcv6gmD3377zY0aNcode+yxbvTo0fa6ELfddpvr06ePGzFihFu+fHnUW1okVJFh1apVbsyYMa5///5u6623drVr13a1atVyXbt2dcuWLYtGreGpp55yzZs3t+sdO3Z0X3/9dXQl+bzzzjuuadOm9t6PPPLIqDc/S5cude3bt7exu+++u/vuu++iK6VFQhUZmEX3228/t+eee7p27dq5OnXq2ANKYwbyLF68OCNS2hZbbOEWLlwYXU0+Y8eOzbz3mTNnRr35mT17duYH65prrol6S4+EKtaCZSAz608//eQGDhyYeaAPOeQQ9/PPP9uYk08+2Wbdm2++2R199NHuqquucr///rtdSzo//PCDO+igg+wz8WP066+/Rlf+yx9//OH69u1rY5s1a+Zef/316ErpkVBFhXz00Uduhx12sAd10003tZn0sccec/369bOHGP7888/M30Pg5ZdfthUAn+n888+PevPz5ZdfulatWtnYww8/POqNBwlVFGT48OH2oLL8mzx5su1h33jjjehqeGA84vPUq1fPfnQKcd9997kNNtjAxt94441RbzxIqKIgDz74oFt//fXtYWX5d9ddd0VXqsenn35q1mGWj8W21157zb355pu2ly4Glr3du3e3z7LXXntVasEdNGiQjd14443dhx9+GPXGg4QqCoI1d5dddrEHdquttnIffPBBdKXqsDz2e70GDRoU3erWresaNmzoZs2aFf3L1QM3U5MmTex9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"}}},{"cell_type":"code","source":"# Load Data\ntrain_x, test_x = load_data()","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:13.161645Z","iopub.execute_input":"2021-11-26T08:02:13.161868Z","iopub.status.idle":"2021-11-26T08:02:13.17417Z","shell.execute_reply.started":"2021-11-26T08:02:13.161841Z","shell.execute_reply":"2021-11-26T08:02:13.173338Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.preprocessing import StandardScaler","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:13.175309Z","iopub.execute_input":"2021-11-26T08:02:13.17576Z","iopub.status.idle":"2021-11-26T08:02:13.183977Z","shell.execute_reply.started":"2021-11-26T08:02:13.17573Z","shell.execute_reply":"2021-11-26T08:02:13.183345Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"scaler = StandardScaler()\nscaler.fit(train_x[num_cols])","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:13.184925Z","iopub.execute_input":"2021-11-26T08:02:13.185583Z","iopub.status.idle":"2021-11-26T08:02:13.202274Z","shell.execute_reply.started":"2021-11-26T08:02:13.185542Z","shell.execute_reply":"2021-11-26T08:02:13.201344Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Permuting each column after normalization\ntrain_x[num_cols] = scaler.transform(train_x[num_cols])\ntest_x[num_cols] = scaler.transform(test_x[num_cols])","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:13.203318Z","iopub.execute_input":"2021-11-26T08:02:13.203968Z","iopub.status.idle":"2021-11-26T08:02:13.219641Z","shell.execute_reply.started":"2021-11-26T08:02:13.203931Z","shell.execute_reply":"2021-11-26T08:02:13.218781Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<div style=\"background-color:red;border-radius:5px;display:fill;\">\n    <h1><center style =\"margin-left : 20px;\">BAD Standardization</center></h1>\n</div>","metadata":{}},{"cell_type":"markdown","source":"#### In this method, training data and test data are transformed according to the mean and standard deviation of different criteria. \n\n#### If the distribution of each data does not differ significantly from each other, it is not a problem. However, this method should not be used. 💥","metadata":{}},{"cell_type":"code","source":"train_x, test_x = load_data()","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:13.222022Z","iopub.execute_input":"2021-11-26T08:02:13.222463Z","iopub.status.idle":"2021-11-26T08:02:13.228822Z","shell.execute_reply.started":"2021-11-26T08:02:13.222429Z","shell.execute_reply":"2021-11-26T08:02:13.227943Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.preprocessing import StandardScaler","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:13.230139Z","iopub.execute_input":"2021-11-26T08:02:13.230468Z","iopub.status.idle":"2021-11-26T08:02:13.242284Z","shell.execute_reply.started":"2021-11-26T08:02:13.230425Z","shell.execute_reply":"2021-11-26T08:02:13.241585Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Normalize training data and test data respectively (bad example)\nscaler_train = StandardScaler()\nscaler_train.fit(train_x[num_cols])\ntrain_x[num_cols] = scaler_train.transform(train_x[num_cols])\n\nscaler_test = StandardScaler()\nscaler_test.fit(test_x[num_cols])\ntest_x[num_cols] = scaler_test.transform(test_x[num_cols])","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:13.243512Z","iopub.execute_input":"2021-11-26T08:02:13.244052Z","iopub.status.idle":"2021-11-26T08:02:13.271237Z","shell.execute_reply.started":"2021-11-26T08:02:13.244007Z","shell.execute_reply":"2021-11-26T08:02:13.270406Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<div style=\"background-color:rgba(0, 255, 255, 0.6);border-radius:5px;display:fill;\">\n    <h1><center style =\"margin-left : 20px;\">Min-Max Scaling</center></h1>\n</div>","metadata":{}},{"cell_type":"markdown","source":"#### This is a Min-Max Scaling method that converts the range taken by the variable value into a specific interval (between 0 and 1).","metadata":{}},{"cell_type":"markdown","source":"![min max.PNG](attachment:672ff330-b426-4986-8be3-ffcd502b763c.PNG)","metadata":{},"attachments":{"672ff330-b426-4986-8be3-ffcd502b763c.PNG":{"image/png":"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"}}},{"cell_type":"code","source":"train_x, test_x = load_data()","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:13.272366Z","iopub.execute_input":"2021-11-26T08:02:13.272593Z","iopub.status.idle":"2021-11-26T08:02:13.278037Z","shell.execute_reply.started":"2021-11-26T08:02:13.272567Z","shell.execute_reply":"2021-11-26T08:02:13.277257Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.preprocessing import MinMaxScaler\n\nscaler = MinMaxScaler()\nscaler.fit(train_x[num_cols])","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:13.279363Z","iopub.execute_input":"2021-11-26T08:02:13.279591Z","iopub.status.idle":"2021-11-26T08:02:13.293745Z","shell.execute_reply.started":"2021-11-26T08:02:13.279564Z","shell.execute_reply":"2021-11-26T08:02:13.292867Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_x[num_cols] = scaler.transform(train_x[num_cols])\ntest_x[num_cols] = scaler.transform(test_x[num_cols])","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:13.295114Z","iopub.execute_input":"2021-11-26T08:02:13.295981Z","iopub.status.idle":"2021-11-26T08:02:13.315837Z","shell.execute_reply.started":"2021-11-26T08:02:13.295939Z","shell.execute_reply":"2021-11-26T08:02:13.314723Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_x[num_cols].describe().T.style.bar(subset=['mean'], color='#205ff2')\\\n                            .background_gradient(subset=['min'], cmap='Reds')\\\n                            .background_gradient(subset=['max'], cmap='coolwarm')\n\n## The minimum value is 0 and the maximum value is 1.","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:13.318931Z","iopub.execute_input":"2021-11-26T08:02:13.319492Z","iopub.status.idle":"2021-11-26T08:02:13.520066Z","shell.execute_reply.started":"2021-11-26T08:02:13.31945Z","shell.execute_reply":"2021-11-26T08:02:13.519273Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Non-linear Transformation","metadata":{}},{"cell_type":"markdown","source":"<div style=\"background-color:rgba(0, 255, 255, 0.6);border-radius:5px;display:fill;\">\n    <h1><center style =\"margin-left : 20px;\">Log</center></h1>\n</div>","metadata":{}},{"cell_type":"markdown","source":"#### It is recommended that the distribution of variables is not skewed to one side. \n\n#### For example, a variable representing a specific amount or number of times tends\n\n#### to have a distribution that is biased in one direction, \n\n#### so log transformation is sometimes performed. And when the value is 0, \n\n#### log(x+1) transformation is often used because it cannot take the log as it is.","metadata":{}},{"cell_type":"code","source":"train_x, test_x = load_data()","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:13.521091Z","iopub.execute_input":"2021-11-26T08:02:13.521326Z","iopub.status.idle":"2021-11-26T08:02:13.525822Z","shell.execute_reply.started":"2021-11-26T08:02:13.521299Z","shell.execute_reply":"2021-11-26T08:02:13.525252Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"x = train_x[num_cols]","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:13.526812Z","iopub.execute_input":"2021-11-26T08:02:13.52711Z","iopub.status.idle":"2021-11-26T08:02:13.538718Z","shell.execute_reply.started":"2021-11-26T08:02:13.527084Z","shell.execute_reply":"2021-11-26T08:02:13.537728Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# take log\nx1 = np.log(x)\nx1","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:13.539894Z","iopub.execute_input":"2021-11-26T08:02:13.540518Z","iopub.status.idle":"2021-11-26T08:02:13.570755Z","shell.execute_reply.started":"2021-11-26T08:02:13.540477Z","shell.execute_reply":"2021-11-26T08:02:13.57014Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Add 1 and then take the logarithm\nx2 = np.log1p(x)\nx2","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:13.571715Z","iopub.execute_input":"2021-11-26T08:02:13.572258Z","iopub.status.idle":"2021-11-26T08:02:13.596632Z","shell.execute_reply.started":"2021-11-26T08:02:13.572225Z","shell.execute_reply":"2021-11-26T08:02:13.595615Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# After taking the logarithm of the absolute value, add the original sign\nx3 = np.sign(x) * np.log(np.abs(x))\nx3","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:13.597958Z","iopub.execute_input":"2021-11-26T08:02:13.598428Z","iopub.status.idle":"2021-11-26T08:02:13.624297Z","shell.execute_reply.started":"2021-11-26T08:02:13.598387Z","shell.execute_reply":"2021-11-26T08:02:13.623401Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<div style=\"background-color:rgba(0, 255, 255, 0.6);border-radius:5px;display:fill;\">\n    <h1><center style =\"margin-left : 20px;\">Box-Cox Transform</center></h1>\n</div>","metadata":{}},{"cell_type":"markdown","source":"#### In addition to the BOX-COX Transform, which is a generalized log transformation, \n\n#### there is also the Yeo-Johnson Transform that can be applied to variables with negative values. \n#### These transformations approximate a normal distribution after log transformation.","metadata":{}},{"cell_type":"markdown","source":"![박스 칵스.PNG](attachment:9b085297-8728-451a-a81f-d145ab3db9f6.PNG)","metadata":{},"attachments":{"9b085297-8728-451a-a81f-d145ab3db9f6.PNG":{"image/png":"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"}}},{"cell_type":"code","source":"train_x, test_x = load_data()","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:13.625777Z","iopub.execute_input":"2021-11-26T08:02:13.626153Z","iopub.status.idle":"2021-11-26T08:02:13.632988Z","shell.execute_reply.started":"2021-11-26T08:02:13.62611Z","shell.execute_reply":"2021-11-26T08:02:13.631702Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Storing variables that take only positive integer values ​​as conversion targets in a list\n# Also, if missing values ​​are included, be careful because (~(train_x[c] <= 0.0)).all() should be used.\npos_cols = [c for c in num_cols if (train_x[c] > 0.0).all() and (test_x[c] > 0.0).all()]\n\n## List of features with positive values\npos_cols","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:13.634123Z","iopub.execute_input":"2021-11-26T08:02:13.634584Z","iopub.status.idle":"2021-11-26T08:02:13.651587Z","shell.execute_reply.started":"2021-11-26T08:02:13.634551Z","shell.execute_reply":"2021-11-26T08:02:13.650905Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.preprocessing import PowerTransformer","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:13.652754Z","iopub.execute_input":"2021-11-26T08:02:13.653101Z","iopub.status.idle":"2021-11-26T08:02:13.661281Z","shell.execute_reply.started":"2021-11-26T08:02:13.653061Z","shell.execute_reply":"2021-11-26T08:02:13.660618Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pt = PowerTransformer(method='box-cox')\npt.fit(train_x[pos_cols])","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:13.66245Z","iopub.execute_input":"2021-11-26T08:02:13.662794Z","iopub.status.idle":"2021-11-26T08:02:13.708558Z","shell.execute_reply.started":"2021-11-26T08:02:13.662756Z","shell.execute_reply":"2021-11-26T08:02:13.707877Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# 변환 후의 데이터로 각 열을 치환\ntrain_x[pos_cols] = pt.transform(train_x[pos_cols])\ntest_x[pos_cols] = pt.transform(test_x[pos_cols])","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:13.709564Z","iopub.execute_input":"2021-11-26T08:02:13.709905Z","iopub.status.idle":"2021-11-26T08:02:13.722727Z","shell.execute_reply.started":"2021-11-26T08:02:13.709878Z","shell.execute_reply":"2021-11-26T08:02:13.721951Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### LotArea column before after comparison","metadata":{}},{"cell_type":"code","source":"x = train.LotArea.values\nsns.kdeplot(x)\nplt.title(\"before Box-Cox-transform\")\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:13.724195Z","iopub.execute_input":"2021-11-26T08:02:13.724667Z","iopub.status.idle":"2021-11-26T08:02:13.962101Z","shell.execute_reply.started":"2021-11-26T08:02:13.724627Z","shell.execute_reply":"2021-11-26T08:02:13.961177Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"x = train_x.LotArea.values\nsns.kdeplot(x)\nplt.title(\"after Box-Cox-transform\")\nplt.show()\n\n\n## The existing data also has a form of a normal distribution, \n## so there is little difference between it and after the Box-Cox transformation.","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:13.96715Z","iopub.execute_input":"2021-11-26T08:02:13.967428Z","iopub.status.idle":"2021-11-26T08:02:14.168965Z","shell.execute_reply.started":"2021-11-26T08:02:13.9674Z","shell.execute_reply":"2021-11-26T08:02:14.16814Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### GrLivArea column before after comparison","metadata":{}},{"cell_type":"code","source":"x = train.GrLivArea.values\nsns.kdeplot(x)\nplt.title(\"before Box-Cox-transform\")\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:14.170141Z","iopub.execute_input":"2021-11-26T08:02:14.170404Z","iopub.status.idle":"2021-11-26T08:02:14.394989Z","shell.execute_reply.started":"2021-11-26T08:02:14.170375Z","shell.execute_reply":"2021-11-26T08:02:14.39421Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"x = train_x.GrLivArea.values\nsns.kdeplot(x)\nplt.title(\"after Box-Cox-transform\")\nplt.show()\n\n\n## The existing data also has a form of a normal distribution, \n## so there is little difference between it and after the Box-Cox transformation.","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:14.396468Z","iopub.execute_input":"2021-11-26T08:02:14.396688Z","iopub.status.idle":"2021-11-26T08:02:14.601934Z","shell.execute_reply.started":"2021-11-26T08:02:14.396663Z","shell.execute_reply":"2021-11-26T08:02:14.601124Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<div style=\"background-color:rgba(0, 255, 255, 0.6);border-radius:5px;display:fill;\">\n    <h1><center style =\"margin-left : 20px;\">Yeo-Johnson Transform</center></h1>\n</div>","metadata":{}},{"cell_type":"markdown","source":"#### Yeo-Johnson transform can also take negative values.","metadata":{}},{"cell_type":"markdown","source":"![여존슨.PNG](attachment:667c009f-ca8a-4188-84b3-9539717b9634.PNG)","metadata":{},"attachments":{"667c009f-ca8a-4188-84b3-9539717b9634.PNG":{"image/png":"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"}}},{"cell_type":"code","source":"train_x, test_x = load_data()","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:03:03.5054Z","iopub.execute_input":"2021-11-26T08:03:03.505663Z","iopub.status.idle":"2021-11-26T08:03:03.511111Z","shell.execute_reply.started":"2021-11-26T08:03:03.505636Z","shell.execute_reply":"2021-11-26T08:03:03.510467Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.preprocessing import PowerTransformer","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:03:05.84426Z","iopub.execute_input":"2021-11-26T08:03:05.844535Z","iopub.status.idle":"2021-11-26T08:03:05.848654Z","shell.execute_reply.started":"2021-11-26T08:03:05.844507Z","shell.execute_reply":"2021-11-26T08:03:05.847681Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pt = PowerTransformer(method='yeo-johnson')\npt.fit(train_x[num_cols])","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:03:21.226286Z","iopub.execute_input":"2021-11-26T08:03:21.227013Z","iopub.status.idle":"2021-11-26T08:03:21.249011Z","shell.execute_reply.started":"2021-11-26T08:03:21.226963Z","shell.execute_reply":"2021-11-26T08:03:21.248094Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# 변환 후의 데이터로 각 열을 치환\ntrain_x[num_cols] = pt.transform(train_x[num_cols])\ntest_x[num_cols] = pt.transform(test_x[num_cols])","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:03:27.57963Z","iopub.execute_input":"2021-11-26T08:03:27.580284Z","iopub.status.idle":"2021-11-26T08:03:27.58791Z","shell.execute_reply.started":"2021-11-26T08:03:27.580247Z","shell.execute_reply":"2021-11-26T08:03:27.587367Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_x[num_cols]","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:03:40.919638Z","iopub.execute_input":"2021-11-26T08:03:40.92004Z","iopub.status.idle":"2021-11-26T08:03:40.991125Z","shell.execute_reply.started":"2021-11-26T08:03:40.92001Z","shell.execute_reply":"2021-11-26T08:03:40.990451Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import plotly.graph_objects as go\n\nfig = go.Figure()\nfig.add_trace(go.Histogram(\n    x = train.MSSubClass,\n    xbins=dict( # bins used for histogram\n        start=-100,\n        end=200\n    ),\n    marker_color='blue',\n    opacity=1\n))\n\nfig.update_layout(\n    title_text='MSSubClass yeo-johnson Before',\n    xaxis_title_text='MSSubClass',\n    yaxis_title_text='Value', \n    bargap=0.05, # gap between bars of adjacent location coordinates\n    xaxis =  {'showgrid': False },\n    yaxis = {'showgrid': False },\n    template = 'plotly_dark'\n)\n\nfig.show()","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:14.748176Z","iopub.execute_input":"2021-11-26T08:02:14.748877Z","iopub.status.idle":"2021-11-26T08:02:15.700955Z","shell.execute_reply.started":"2021-11-26T08:02:14.748831Z","shell.execute_reply":"2021-11-26T08:02:15.700007Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import plotly.graph_objects as go\n\nfig = go.Figure()\nfig.add_trace(go.Histogram(\n    x = train_x.MSSubClass,\n    xbins=dict( # bins used for histogram\n        start=0,\n        end=200\n\n    ),\n    marker_color='blue',\n    opacity=1\n))\n\nfig.update_layout(\n    title_text='MSSubClass yeo-johnson After',\n    xaxis_title_text='MSSubClass',\n    yaxis_title_text='Value', \n    bargap=0.05, # gap between bars of adjacent location coordinates\n    xaxis =  {'showgrid': False },\n    yaxis = {'showgrid': False },\n    template = 'plotly_dark'\n)\n\nfig.show()\n\n\n## The spread distribution was forced to approximate the normal distribution.","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:15.702445Z","iopub.execute_input":"2021-11-26T08:02:15.702737Z","iopub.status.idle":"2021-11-26T08:02:15.74052Z","shell.execute_reply.started":"2021-11-26T08:02:15.702698Z","shell.execute_reply":"2021-11-26T08:02:15.739937Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Setting TransForm","metadata":{}},{"cell_type":"markdown","source":"<div style=\"background-color:rgba(0, 255, 255, 0.6);border-radius:5px;display:fill;\">\n    <h1><center style =\"margin-left : 20px;\">Clipping</center></h1>\n</div>","metadata":{}},{"cell_type":"markdown","source":"#### Numerical variables sometimes include outliers, but you can exclude outliers \n#### outside a certain range by setting upper and lower limits and replacing values \n#### outside the range with upper and lower limits. It is also a good idea to check the distribution first and then set the threshold.","metadata":{}},{"cell_type":"code","source":"train_x, test_x = load_data()","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:15.741456Z","iopub.execute_input":"2021-11-26T08:02:15.74206Z","iopub.status.idle":"2021-11-26T08:02:15.746911Z","shell.execute_reply.started":"2021-11-26T08:02:15.742027Z","shell.execute_reply":"2021-11-26T08:02:15.746165Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Check 1%, 99% points of training data per column\np01 = train_x[num_cols].quantile(0.01)\np99 = train_x[num_cols].quantile(0.99)\n\np01\np99","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:15.74798Z","iopub.execute_input":"2021-11-26T08:02:15.748353Z","iopub.status.idle":"2021-11-26T08:02:15.769156Z","shell.execute_reply.started":"2021-11-26T08:02:15.748313Z","shell.execute_reply":"2021-11-26T08:02:15.768534Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Values ​​below 1% point are clipped to 1% point, and values ​​above 99% point are clipped to 99% point.\ntrain_x[num_cols] = train_x[num_cols].clip(p01, p99, axis=1)\ntest_x[num_cols] = test_x[num_cols].clip(p01, p99, axis=1)","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:15.770196Z","iopub.execute_input":"2021-11-26T08:02:15.770509Z","iopub.status.idle":"2021-11-26T08:02:15.817594Z","shell.execute_reply.started":"2021-11-26T08:02:15.770481Z","shell.execute_reply":"2021-11-26T08:02:15.816724Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### LotArea column before after comparison","metadata":{}},{"cell_type":"code","source":"import plotly.graph_objects as go\n\nfig = go.Figure()\nfig.add_trace(go.Histogram(\n    x = train.LotArea,\n    xbins=dict( # bins used for histogram\n        start=0,\n        end=50000,\n        size=2\n    ),\n    marker_color='#e8ab60',\n    opacity=1\n))\n\nfig.update_layout(\n    title_text='LotArea Clipping Before',\n    xaxis_title_text='LotArea',\n    yaxis_title_text='COUNT', \n    bargap=0.05, # gap between bars of adjacent location coordinates\n    xaxis =  {'showgrid': False },\n    yaxis = {'showgrid': False },\n    template = 'plotly_dark'\n)\n\nfig.show()","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:15.818677Z","iopub.execute_input":"2021-11-26T08:02:15.819027Z","iopub.status.idle":"2021-11-26T08:02:15.8539Z","shell.execute_reply.started":"2021-11-26T08:02:15.818998Z","shell.execute_reply":"2021-11-26T08:02:15.852933Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import plotly.graph_objects as go\n\nfig = go.Figure()\nfig.add_trace(go.Histogram(\n    x = train_x.LotArea,\n    xbins=dict( # bins used for histogram\n        start=0,\n        end=50000\n    ),\n    marker_color='#e8ab60',\n    opacity=1\n))\n\nfig.update_layout(\n    title_text='LotArea Clipping After',\n    xaxis_title_text='LotArea',\n    yaxis_title_text='COUNT', \n    bargap=0.05, # gap between bars of adjacent location coordinates\n    xaxis =  {'showgrid': False },\n    yaxis = {'showgrid': False },\n    template = 'plotly_dark'\n)\n\nfig.show()\n\n\n## Values ​​from 0 to 80 are substituted.","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:15.855499Z","iopub.execute_input":"2021-11-26T08:02:15.856136Z","iopub.status.idle":"2021-11-26T08:02:15.891722Z","shell.execute_reply.started":"2021-11-26T08:02:15.856085Z","shell.execute_reply":"2021-11-26T08:02:15.890694Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### RestingBP column before after comparison","metadata":{}},{"cell_type":"code","source":"fig = go.Figure()\nfig.add_trace(go.Histogram(\n    x = train.GrLivArea,\n    xbins=dict( # bins used for histogram\n        start=0,\n        end=10000,\n        size=15\n    ),\n    marker_color='#FE6F5E',\n    opacity=1\n))\n\nfig.update_layout(\n    title_text='GrLivArea Clipping Before',\n    xaxis_title_text='GrLivArea',\n    yaxis_title_text='COUNT', \n    bargap=0.05, # gap between bars of adjacent location coordinates\n    xaxis =  {'showgrid': False },\n    yaxis = {'showgrid': False },\n    template = 'plotly_dark'\n)\n\nfig.show()","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:15.893249Z","iopub.execute_input":"2021-11-26T08:02:15.89395Z","iopub.status.idle":"2021-11-26T08:02:15.931429Z","shell.execute_reply.started":"2021-11-26T08:02:15.893907Z","shell.execute_reply":"2021-11-26T08:02:15.930665Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"fig = go.Figure()\nfig.add_trace(go.Histogram(\n    x = train_x.GrLivArea,\n    xbins=dict( # bins used for histogram\n        start=0,\n        end=10000,\n        size=15\n    ),\n    marker_color='#FE6F5E',\n    opacity=1\n))\n\nfig.update_layout(\n    title_text='GrLivArea Clipping After',\n    xaxis_title_text='GrLivArea',\n    yaxis_title_text='COUNT', \n    bargap=0.05, # gap between bars of adjacent location coordinates\n    xaxis =  {'showgrid': False },\n    yaxis = {'showgrid': False },\n    template = 'plotly_dark'\n)\n\nfig.show()","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:15.932594Z","iopub.execute_input":"2021-11-26T08:02:15.93335Z","iopub.status.idle":"2021-11-26T08:02:15.967476Z","shell.execute_reply.started":"2021-11-26T08:02:15.9333Z","shell.execute_reply":"2021-11-26T08:02:15.966729Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### If you look at the graph, you can clearly see that the values ​​are not spread widely but are clustered like a normal distribution.","metadata":{}},{"cell_type":"markdown","source":"<div style=\"background-color:rgba(0, 255, 255, 0.6);border-radius:5px;display:fill;\">\n    <h1><center style =\"margin-left : 20px;\">Rank Gauss</center></h1>\n</div>","metadata":{}},{"cell_type":"markdown","source":"#### This is a method of converting numeric variables into ranks and then semi-forced normal \n#### distributions while maintaining the order. The method used by Kaggle Grandmaster \n#### Michael Jahrer was revealed in the 1st solution in Porto Seguro's Safe Driver Prediction competition. \n#### In particular, it is said to have better performance than general standardization as a transformation when building a model in a neural network.","metadata":{}},{"cell_type":"code","source":"train_x, test_x = load_data()\n\nfrom sklearn.preprocessing import QuantileTransformer","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:15.968928Z","iopub.execute_input":"2021-11-26T08:02:15.969248Z","iopub.status.idle":"2021-11-26T08:02:15.976874Z","shell.execute_reply.started":"2021-11-26T08:02:15.969217Z","shell.execute_reply":"2021-11-26T08:02:15.976063Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"transformer = QuantileTransformer(n_quantiles=100, random_state=0, output_distribution='normal')\ntransformer.fit(train_x[num_cols])","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:15.97811Z","iopub.execute_input":"2021-11-26T08:02:15.978452Z","iopub.status.idle":"2021-11-26T08:02:15.997021Z","shell.execute_reply.started":"2021-11-26T08:02:15.978415Z","shell.execute_reply":"2021-11-26T08:02:15.996389Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_x[num_cols] = transformer.transform(train_x[num_cols])\ntest_x[num_cols] = transformer.transform(test_x[num_cols])","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:15.998408Z","iopub.execute_input":"2021-11-26T08:02:15.998725Z","iopub.status.idle":"2021-11-26T08:02:16.03187Z","shell.execute_reply.started":"2021-11-26T08:02:15.998699Z","shell.execute_reply":"2021-11-26T08:02:16.031238Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_x[num_cols]","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:16.032929Z","iopub.execute_input":"2021-11-26T08:02:16.033286Z","iopub.status.idle":"2021-11-26T08:02:16.055966Z","shell.execute_reply.started":"2021-11-26T08:02:16.033257Z","shell.execute_reply":"2021-11-26T08:02:16.055409Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"p = sns.boxplot(x=train.GarageArea, color = 'teal')\np.set_title(\"GarageArea RankGauss Before\")\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:16.056952Z","iopub.execute_input":"2021-11-26T08:02:16.057293Z","iopub.status.idle":"2021-11-26T08:02:16.223443Z","shell.execute_reply.started":"2021-11-26T08:02:16.057266Z","shell.execute_reply":"2021-11-26T08:02:16.222886Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"p = sns.boxplot(x=train_x.GarageArea, color = 'teal')\np.set_title(\"GarageArea RankGauss After\")\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2021-11-26T08:02:16.224401Z","iopub.execute_input":"2021-11-26T08:02:16.224684Z","iopub.status.idle":"2021-11-26T08:02:16.375485Z","shell.execute_reply.started":"2021-11-26T08:02:16.224659Z","shell.execute_reply":"2021-11-26T08:02:16.374558Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### The values ​​were semi-forced to be normally distributed. The impact of outliers is also expected to decrease.","metadata":{}},{"cell_type":"markdown","source":"# NEXT PLAN","metadata":{}},{"cell_type":"markdown","source":"#### The following tabular data conversion will deal with numeric conversion of category types. \n#### If you are interested in my kernel, please find the next category type conversion kernel as well.","metadata":{}}]}