{"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":"## 1. Tìm hiểu về tập dữ liệu","metadata":{"id":"MnjglPBqqYKG"}},{"cell_type":"code","source":"import numpy as np \nimport pandas as pd \nimport matplotlib.pyplot as plt\nimport seaborn as sns\nfrom scipy import stats\nfrom scipy.stats import norm\n\n%matplotlib inline\ncolor = sns.color_palette()\nsns.set_style('darkgrid')","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:00:03.742957Z","iopub.status.busy":"2022-06-23T07:00:03.741952Z","iopub.status.idle":"2022-06-23T07:00:03.751982Z","shell.execute_reply":"2022-06-23T07:00:03.750849Z","shell.execute_reply.started":"2022-06-23T07:00:03.742915Z"},"id":"gqLyE7ipqYKH","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train = pd.read_csv('/kaggle/input/house-prices-advanced-regression-techniques/train.csv')\ntest = pd.read_csv('/kaggle/input/house-prices-advanced-regression-techniques/test.csv')","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:00:03.754189Z","iopub.status.busy":"2022-06-23T07:00:03.753886Z","iopub.status.idle":"2022-06-23T07:00:03.809436Z","shell.execute_reply":"2022-06-23T07:00:03.808618Z","shell.execute_reply.started":"2022-06-23T07:00:03.754162Z"},"id":"kb6znAN0qYKI","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.shape","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:00:03.811609Z","iopub.status.busy":"2022-06-23T07:00:03.810915Z","iopub.status.idle":"2022-06-23T07:00:03.81765Z","shell.execute_reply":"2022-06-23T07:00:03.816679Z","shell.execute_reply.started":"2022-06-23T07:00:03.811579Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test.shape","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:00:03.820152Z","iopub.status.busy":"2022-06-23T07:00:03.819042Z","iopub.status.idle":"2022-06-23T07:00:03.832009Z","shell.execute_reply":"2022-06-23T07:00:03.8312Z","shell.execute_reply.started":"2022-06-23T07:00:03.820106Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"- Thoạt nhìn, kích thước của tập dữ liệu huấn luyện và tập dữ liệu kiểm tra tương ứng với 1460 hàng × 81 cột và 1459 hàng × 80 cột, có nghĩa là chúng ta có tổng cộng 2919 mẫu và 80 đặc trưng của các ngôi nhà. Cột cuối cùng là 'SalePrice', giá của căn nhà.","metadata":{"id":"FCnsDWFeqYKJ"}},{"cell_type":"markdown","source":"- Thứ hai, nhiều cột trong tập dữ liệu có định dạng 'object'. Phần còn lại có định dạng 'int64' hoặc 'float'. Đối với định dạng 'object', có rất nhiều giá trị bị thiếu. Điều này không có nghĩa là \"không tồn tại\" giá trị cho các đặc trưng này, chúng có ý nghĩa riêng của chúng. Ví dụ: các giá trị rỗng trong 'Alley' biểu thị \"No alley access\". Tuy nhiên, những giá trị còn thiếu này cần được điền hoặc xóa trước khi thực hiện quá trình huấn luyện.","metadata":{"id":"3cfLCorJqYKK"}},{"cell_type":"code","source":"## PUT YOUR CODE HERE:\n# In ra tổng số giá trị bị thiếu trong tập train\nprint('Number of missing values in the training dataset:',sum(train.isnull().sum()))","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:00:03.835811Z","iopub.status.busy":"2022-06-23T07:00:03.835097Z","iopub.status.idle":"2022-06-23T07:00:03.851872Z","shell.execute_reply":"2022-06-23T07:00:03.850965Z","shell.execute_reply.started":"2022-06-23T07:00:03.835746Z"},"id":"TZWYxk_QqYKK","outputId":"9f3363e6-c536-43f8-b711-2d96d4c635e0","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## PUT YOUR CODE HERE:\n# In ra tổng số giá trị bị thiếu trong tập test\nprint('Number of missing values in the test dataset:', sum(test.isnull().sum()))","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:00:03.854216Z","iopub.status.busy":"2022-06-23T07:00:03.853178Z","iopub.status.idle":"2022-06-23T07:00:03.873934Z","shell.execute_reply":"2022-06-23T07:00:03.872799Z","shell.execute_reply.started":"2022-06-23T07:00:03.854171Z"},"id":"bGEBHWEjqYKK","outputId":"85ff23fb-60b6-4234-aae6-a16b923aac30","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"- Chúng ta sẽ vẽ đồ thị thể hiện tỉ lệ của các \"missing values\" của từng cột dữ liệu.","metadata":{"id":"LEKGLL3mqYKL"}},{"cell_type":"code","source":"## PUT YOUR CODE HERE:\n# Tạo một Dataframe chứa tỉ lệ giá trị bị thiếu (xét riêng từng đặc trưng) của từng đặc trưng\ny = train['SalePrice']\nall_data = pd.concat((train, test)).reset_index(drop=True)\nall_data.drop(['SalePrice'], axis=1, inplace=True)\n\nall_data_na = (all_data.isnull().sum() / len(all_data)) * 100\nall_data_na = all_data_na.drop(all_data_na[all_data_na == 0].index).sort_values(ascending=False)[:30]\nmissing_data = pd.DataFrame({'Missing Ratio' :all_data_na})\nmissing_data.head(5)","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:00:03.87611Z","iopub.status.busy":"2022-06-23T07:00:03.875679Z","iopub.status.idle":"2022-06-23T07:00:03.928702Z","shell.execute_reply":"2022-06-23T07:00:03.927888Z","shell.execute_reply.started":"2022-06-23T07:00:03.876069Z"},"id":"9Da6KkreqYKL","outputId":"7b4c1f51-2203-4923-d368-f27b23f7d525","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(\"all_data size is : {}\".format(all_data.shape))","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:00:03.930715Z","iopub.status.busy":"2022-06-23T07:00:03.930157Z","iopub.status.idle":"2022-06-23T07:00:03.935862Z","shell.execute_reply":"2022-06-23T07:00:03.934819Z","shell.execute_reply.started":"2022-06-23T07:00:03.930683Z"},"id":"pR9bJYZyqYKL","outputId":"dda80a08-4c7e-4bd8-d00b-9361dc0beef0","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## PUT YOUR CODE HERE:\n# Vẽ đồ thị cột thể hiện tỉ lệ thuộc tính bị thiếu của từng đặc trưng\nf, ax = plt.subplots(figsize=(15, 8))\nplt.xticks(rotation='90')\nsns.barplot(x=all_data_na.index, y=missing_data['Missing Ratio'].values)\nplt.xlabel('Features', fontsize=15)\nplt.ylabel('Percent of missing values', fontsize=15)\nplt.title('Percent missing data by feature', fontsize=15)","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:00:03.937672Z","iopub.status.busy":"2022-06-23T07:00:03.937151Z","iopub.status.idle":"2022-06-23T07:00:04.409807Z","shell.execute_reply":"2022-06-23T07:00:04.408972Z","shell.execute_reply.started":"2022-06-23T07:00:03.937642Z"},"id":"eb0i4KKMqYKL","outputId":"3e7fe722-1b20-4fbb-f2d9-5b16b00babed","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"- Như vậy chúng ta có thể thấy có 4 đặc trưng có tỉ lệ missing values khá cao, lần lượt là **'PoolQC', 'Fence', 'MiscFeature'** và **'Alley'**. Chúng ta sẽ xử lý các \"missing values\" này cũng như các \"missing values\" khác.","metadata":{"id":"hcdhLgUjqYKM"}},{"cell_type":"markdown","source":"- Dựa trên hình ảnh bên dưới, chúng ta có thể chắc chắn rằng hầu hết tất cả các ngôi nhà ở Ames đều có giá khoảng \\$100000 đến \\$200000. Và phân bố này cũng bị lệch phải","metadata":{"id":"F7GnX_-UqYKM"}},{"cell_type":"code","source":"## PUT YOUR CODE HERE:\nplt.subplots(figsize=(10,5))\nsns.distplot(y, fit=norm);\n\n# Tìm trung bình và độ lệch chuẩn của phân phối normal khớp với dữ liệu y\n(mu, sigma) = norm.fit(y)\nprint( '\\n mu = {:.2f} and sigma = {:.2f}\\n'.format(mu, sigma))\n\n#Now plot the distribution\nplt.legend(['Normal dist. ($\\mu=$ {:.2f} and $\\sigma=$ {:.2f} )'.format(mu, sigma)],\n            loc='best')\nplt.ylabel('Frequency')\nplt.title('SalePrice distribution')\n\n# Vẽ đồ thị QQ-plot\nfig = plt.figure(figsize=(10,5))\nres = stats.probplot(train['SalePrice'], plot=plt)\nplt.show()","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:00:04.411566Z","iopub.status.busy":"2022-06-23T07:00:04.411082Z","iopub.status.idle":"2022-06-23T07:00:04.959576Z","shell.execute_reply":"2022-06-23T07:00:04.958289Z","shell.execute_reply.started":"2022-06-23T07:00:04.411534Z"},"id":"uRc75TcPqYKM","outputId":"884f227f-22dd-4c02-808f-9ca6e7b75e2e","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"- Chúng ta cũng sẽ tìm hiểu mối tương quan giữa các tính chất của mô nhà bằng ma trận tương quan. Theo như bảng dưới mô tả thì có khá nhiều dữ liệu dạng số có độ tương quan cao với giá nhà. Mặc khác, một vài tính chất của ngôi nhà có độ tương quan thấp giá bán như **'MSSubClass', 'OverallCond', 'YrSold'** và **'MoSold'** vốn dĩ là biến hạng mục mặc dù mang giá trị số.","metadata":{"id":"5idTGttkqYKM"}},{"cell_type":"code","source":"## PUT YOUR CODE HERE:\n# Tìm ma trận tương quan của tập train\ncorrmat = train.corr()\nplt.subplots(figsize=(30,30))\nsns.heatmap(corrmat, vmax=0.9, square=True, annot=True)","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:00:04.965294Z","iopub.status.busy":"2022-06-23T07:00:04.964567Z","iopub.status.idle":"2022-06-23T07:00:11.008233Z","shell.execute_reply":"2022-06-23T07:00:11.007065Z","shell.execute_reply.started":"2022-06-23T07:00:04.965226Z"},"id":"l2GVOFFRqYKM","outputId":"5d8f4a5d-8552-4324-b086-6b095274b5c7","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 2. Tiền xử lý dữ liệu","metadata":{"id":"G92kUIkHqYKN"}},{"cell_type":"markdown","source":"- Nạp lại tập dữ liệu","metadata":{"id":"Y1D76f3ISuR6"}},{"cell_type":"code","source":"## PUT YOUR CODE HERE:\n\n# Nạp 'train.csv' và 'test.csv'\ntrain = pd.read_csv('/kaggle/input/house-prices-advanced-regression-techniques/train.csv')\ntest = pd.read_csv('/kaggle/input/house-prices-advanced-regression-techniques/test.csv')\n\n# Chúng ta sẽ kết hợp 2 tập dữ liệu train và test ở các bước sau để xử lý\n# tiền dữ liệu nên phải cần lưu lại số lượng dữ liệu ở mỗi tập để tách chúng\n# trở lại\nntrain = train.shape[0]\nntest = test.shape[0]\n\n# Đặc trưng cần được dự đoán\ny = train.SalePrice.values\n\n# all_data được sử dụng để xử lý data ở bước 2:\nall_data = pd.concat((train, test)).reset_index(drop=True)\nall_data.drop(['SalePrice'], axis=1, inplace=True)","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:00:11.009896Z","iopub.status.busy":"2022-06-23T07:00:11.009555Z","iopub.status.idle":"2022-06-23T07:00:11.076065Z","shell.execute_reply":"2022-06-23T07:00:11.075007Z","shell.execute_reply.started":"2022-06-23T07:00:11.009867Z"},"id":"Vs5VewdAqYKV","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"- Do đặc trưng **Id** chỉ mang ý nghĩa thứ tự của dữ liệu trong tập dữ liệu nên ta có thể xóa nó là không làm ảnh hưởng đến chất lượng của mô hình","metadata":{"id":"MXawznuubAnl"}},{"cell_type":"code","source":"## PUT YOUR CODE HERE:\n\n# In chiều dữ liệu trước khi xóa cột 'Id'\nprint(\"The train data size before dropping Id feature is : {} \".format(train.shape))\nprint(\"The test data size before dropping Id feature is : {} \".format(test.shape))\n\n# Tách cột Id ra riêng phòng trường hợp sử dụng khi cần thiết\ntrain_ID = train['Id']\ntest_ID = test['Id']\n\n# Xóa cột 'Id' trong tập dữ liệu train và test\ntrain.drop(\"Id\", axis = 1, inplace = True)\ntest.drop(\"Id\", axis = 1, inplace = True)\n\n# In chiều dữ liệu sau khi xóa cột 'Id'\nprint(\"\\nThe train data size after dropping Id feature is : {} \".format(train.shape)) \nprint(\"The test data size after dropping Id feature is : {} \".format(test.shape))","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:00:11.077701Z","iopub.status.busy":"2022-06-23T07:00:11.077407Z","iopub.status.idle":"2022-06-23T07:00:11.08972Z","shell.execute_reply":"2022-06-23T07:00:11.088467Z","shell.execute_reply.started":"2022-06-23T07:00:11.077673Z"},"id":"oz_k64pcqYKV","outputId":"91306556-99ce-46a1-c059-7d8fec174921","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Chúng ta xử lý các giá trị bị thiếu bằng cách xử lý tuần tự từng đặc trưng có giá trị bị thiếu.","metadata":{"id":"_PFCQzYBqYKW"}},{"cell_type":"markdown","source":"## 2.1 Xử lý đặc trưng bị thiếu","metadata":{"id":"zr29UGEWSuR7"}},{"cell_type":"markdown","source":"- Ở phần này, chúng ta sẽ điền vào các giá trị dữ liệu đang bị thiếu (khuyết) tùy vào tính chất và ý nghĩa của các đặc trưng trong bảng dữ liệu.\n\n**Lưu ý**: học viên nên tạo một bản sao của tập dữ liệu trước khi tiến hành **tiền xử lý tập dữ liệu** đó nhằm phục vụ cho mục đích sửa lỗi sau này một cách dễ dàng và thuận tiện","metadata":{"id":"5UTh8WRpcELG"}},{"cell_type":"code","source":"all_data_nomissing = all_data.copy()","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:00:11.091876Z","iopub.status.busy":"2022-06-23T07:00:11.091543Z","iopub.status.idle":"2022-06-23T07:00:11.100976Z","shell.execute_reply":"2022-06-23T07:00:11.100002Z","shell.execute_reply.started":"2022-06-23T07:00:11.091846Z"},"id":"XN5uoduJu9PR","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"- **PoolQC**: mô tả dữ liệu cho biết NA có nghĩa là \"No  Pool\". Điều đó khá dễ hiểu, với tỷ lệ giá trị bị thiếu rất lớn (hơn 99%) và phần lớn các ngôi nhà nói chung không có hồ bơi, thay thế dữ liệu bằng 'None'\n\n- **MiscFeature** : mô tả dữ liệu cho biết NA có nghĩa là \"no misc feature\", thay thế dữ liệu bằng 'None'\n\n- **Alley** : mô tả dữ liệu cho biết NA có nghĩa là \"no alley access\", thay thế dữ liệu bằng 'None'\n\n- **Fence** : mô tả dữ liệu cho biết NA có nghĩa là \"no fence\", thay thế dữ liệu bằng 'None'\n\n- **FireplaceQu** : mô tả dữ liệu cho biết NA có nghĩa là \"no fireplace\", thay thế dữ liệu bằng 'None'\n\n- **MSSubClass** : Na rất có thể có nghĩa là \"no building class\". Chúng ta có thể thay thế các giá trị bị thiếu bằng \"None\"\n\n- **GarageType, GarageFinish, GarageQual** và **GarageCond** : thay thế dữ liệu bằng 'None'","metadata":{"id":"w74KtNRBqYKX"}},{"cell_type":"code","source":"## PUT YOUR CODE HERE:\n\nmissing_cols_group1 = ['PoolQC', 'MiscFeature', 'Alley', 'Fence', \n                       'FireplaceQu', 'MSSubClass', 'GarageType', \n                       'GarageFinish', 'GarageQual', 'GarageCond']\n## PUT YOUR CODE HERE:\n# Điền dữ liệu bị thiếu bằng giá trị 'None'\nfor col in missing_cols_group1:\n    all_data_nomissing[col] = all_data[col].fillna('None')","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:00:11.10292Z","iopub.status.busy":"2022-06-23T07:00:11.102522Z","iopub.status.idle":"2022-06-23T07:00:11.118768Z","shell.execute_reply":"2022-06-23T07:00:11.117819Z","shell.execute_reply.started":"2022-06-23T07:00:11.102892Z"},"id":"ozcuici5qYKX","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"- **LotFrontage** : chúng ta có thể **điền các giá trị còn thiếu bằng giá trị trung bình LotFrontage của khu vực lân cận**. (do các ngôi nhà trong các khu vực gần nhau thường có diện tích tương đồng)","metadata":{"id":"Dkk5LzDNqYKX"}},{"cell_type":"code","source":"#Group by neighborhood and fill in missing value by the median LotFrontage of all the neighborhood\n## PUT YOUR CODE HERE:\n# Điền dữ liệu bị thiếu bằng giá trị median\nall_data_nomissing[\"LotFrontage\"] = all_data.groupby(\"Neighborhood\")[\"LotFrontage\"].transform(lambda x: x.fillna(x.median()))","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:00:11.120718Z","iopub.status.busy":"2022-06-23T07:00:11.120156Z","iopub.status.idle":"2022-06-23T07:00:11.139611Z","shell.execute_reply":"2022-06-23T07:00:11.13882Z","shell.execute_reply.started":"2022-06-23T07:00:11.120678Z"},"id":"Gw9eh9UlqYKX","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"- **GarageYrBlt, GarageArea** và **GarageCars** : Thay thế dữ liệu bị thiếu bằng 0 (Vì Không có ga ra đồng nghĩa không có ô tô nào trong ga ra đó và diện tích của ga ra bằng 0.)\n\n- **BsmtFinSF1, BsmtFinSF2, BsmtUnfSF, TotalBsmtSF, BsmtFullBath** và **BsmtHalfBath** : Thay thế dữ liệu bị thiếu bằng 0 (ý nghĩa tương tự như ga ra)\n\n- **BsmtQual, BsmtCond, BsmtExposure, BsmtFinType1** và **BsmtFinType2** : Thay thế dữ liệu bị thiếu bằng 'None' (ý nghĩa tương tự như ga ra)","metadata":{"id":"uTn05P1AqYKY"}},{"cell_type":"code","source":"missing_cols_group3 = ['GarageYrBlt', 'GarageArea', 'GarageCars', \n                       'BsmtFinSF1', 'BsmtFinSF2', 'BsmtUnfSF', \n                       'TotalBsmtSF', 'BsmtFullBath', 'BsmtHalfBath']\n## PUT YOUR CODE HERE:\n# Điền dữ liệu bị thiếu bằng giá trị 0\nfor col in missing_cols_group3:\n    all_data_nomissing[col] = all_data[col].fillna(0)","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:00:11.141495Z","iopub.status.busy":"2022-06-23T07:00:11.140984Z","iopub.status.idle":"2022-06-23T07:00:11.149178Z","shell.execute_reply":"2022-06-23T07:00:11.148284Z","shell.execute_reply.started":"2022-06-23T07:00:11.141464Z"},"id":"kt0bvZYyqYKY","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"missing_cols_group4 = ['BsmtQual', 'BsmtCond', 'BsmtExposure', 'BsmtFinType1', 'BsmtFinType2']\n## PUT YOUR CODE HERE:\n# Điền dữ liệu bị thiếu bằng giá trị 'None'\nfor col in missing_cols_group4:\n    all_data_nomissing[col] = all_data[col].fillna('None')","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:00:11.15108Z","iopub.status.busy":"2022-06-23T07:00:11.150524Z","iopub.status.idle":"2022-06-23T07:00:11.162512Z","shell.execute_reply":"2022-06-23T07:00:11.161559Z","shell.execute_reply.started":"2022-06-23T07:00:11.15104Z"},"id":"aw6pQfpFqYKY","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"- **MasVnrArea** and **MasVnrType** : NA rất có thể có nghĩa là không có ván xây cho những ngôi nhà này. Chúng ta có thể điền 0 cho Area và None cho Type.","metadata":{"id":"aYwcDF_GqYKY"}},{"cell_type":"code","source":"## PUT YOUR CODE HERE:\n# Điền dữ liệu bị thiếu bằng giá trị 'None' và 0 tùy vào đặc trưng\nall_data_nomissing[\"MasVnrType\"] = all_data[\"MasVnrType\"].fillna(\"None\")\nall_data_nomissing[\"MasVnrArea\"] = all_data[\"MasVnrArea\"].fillna(0)","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:00:11.165035Z","iopub.status.busy":"2022-06-23T07:00:11.164299Z","iopub.status.idle":"2022-06-23T07:00:11.171361Z","shell.execute_reply":"2022-06-23T07:00:11.170293Z","shell.execute_reply.started":"2022-06-23T07:00:11.164993Z"},"id":"hwqKZzI4qYKY","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"- **MSZoning (The general zoning classification)** :  'RL' là giá trị phổ biến nhất. Vì vậy, chúng ta có thể điền vào các giá trị còn thiếu bằng 'RL'","metadata":{"id":"2sQNTXLNqYKY"}},{"cell_type":"code","source":"## PUT YOUR CODE HERE:\n# Điền dữ liệu bị thiếu bằng giá trị mode\nall_data_nomissing[\"MSZoning\"] = all_data[\"MSZoning\"].fillna(all_data[\"MSZoning\"].mode()[0])","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:00:11.173456Z","iopub.status.busy":"2022-06-23T07:00:11.172825Z","iopub.status.idle":"2022-06-23T07:00:11.185158Z","shell.execute_reply":"2022-06-23T07:00:11.184211Z","shell.execute_reply.started":"2022-06-23T07:00:11.173414Z"},"id":"pmzOfHbbqYKY","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"- **Functional** : mô tả dữ liệu cho biết NA có nghĩa là chức năng điển hình, chúng ta điền các giá trị bị thiếu bằng \"Typ\"\n\n- **Electrical** : Nó chỉ có một giá trị NA. Vì giá trị của đặc trưng này chủ yếu là 'SBrkr', nên chúng ta có thể đặt giá trị đó cho giá trị còn thiếu.\n\n- **KitchenQual**: tương tự với Electrical, chúng ta đặt 'TA' (là giá trị phổ biến nhất) cho dữ liệu bị thiếu trong KitchenQual.\n\n- **Exterior1st và Exterior2nd** : tương tự với Electrical, điền các giá trị bị thiếu bằng giá trị phổ biến nhất\n\n- **SaleType** : tương tự với Electrical, điền các giá trị bị thiếu bằng giá trị phổ biến nhất","metadata":{"id":"f-bhlHfLqYKY"}},{"cell_type":"code","source":"## PUT YOUR CODE HERE:\n# Điền dữ liệu bị thiếu bằng giá trị 'Typ'\nall_data_nomissing[\"Functional\"] = all_data['Functional'].fillna(\"Typ\")","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:00:11.187155Z","iopub.status.busy":"2022-06-23T07:00:11.186328Z","iopub.status.idle":"2022-06-23T07:00:11.196592Z","shell.execute_reply":"2022-06-23T07:00:11.195635Z","shell.execute_reply.started":"2022-06-23T07:00:11.187122Z"},"id":"AFOf9vNcqYKZ","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.impute import SimpleImputer\n\nmissing_cols_group5 = ['Electrical', 'KitchenQual', 'Exterior1st', 'Exterior2nd', 'SaleType', 'Utilities']\n## PUT YOUR CODE HERE:\n# Sử dụng SimpleImputer để điền các giá trị bị thiếu \n# trong bảng dữ liệu bằng giá trị phổ biến nhất\nsi = SimpleImputer(strategy='most_frequent')\nall_data_nomissing[missing_cols_group5] = si.fit_transform(all_data[missing_cols_group5])","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:00:11.198439Z","iopub.status.busy":"2022-06-23T07:00:11.197897Z","iopub.status.idle":"2022-06-23T07:00:11.21521Z","shell.execute_reply":"2022-06-23T07:00:11.214188Z","shell.execute_reply.started":"2022-06-23T07:00:11.198408Z"},"id":"8a7W46BESuR9","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"- Kiểm tra các giá trị bị thiếu còn tồn tại hay không","metadata":{"id":"uDGIgplZqYKZ"}},{"cell_type":"code","source":"## PUT YOUR CODE HERE:\n# Làm tương tự như ở phần 1\nall_data_na = (all_data_nomissing.isnull().sum() / len(all_data_nomissing)) * 100\nall_data_na = all_data_na.drop(all_data_na[all_data_na == 0].index).sort_values(ascending=False)\nmissing_data = pd.DataFrame({'Missing Ratio' :all_data_na})\nmissing_data","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:00:11.216884Z","iopub.status.busy":"2022-06-23T07:00:11.216308Z","iopub.status.idle":"2022-06-23T07:00:11.24555Z","shell.execute_reply":"2022-06-23T07:00:11.244432Z","shell.execute_reply.started":"2022-06-23T07:00:11.216855Z"},"id":"XawOHlDnqYKZ","outputId":"127d0eee-c64f-414c-f120-aa642fc16f3c","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Tập dữ liệu đã không còn các giá trị bị thiếu.","metadata":{"id":"WafQXAEoqYKZ"}},{"cell_type":"markdown","source":"## 2.2 Xử lý biến dữ liệu số thật ra là biến hạng mục","metadata":{"id":"f_6W6XgYSuR-"}},{"cell_type":"markdown","source":"- Tiếp theo, chúng ta biến đổi một số biến giá trị số thực ra là biến đặc trưng","metadata":{"id":"71c_BnTQqYKZ"}},{"cell_type":"markdown","source":"**Lưu ý**: học viên nên tạo một bản sao của tập dữ liệu trước khi tiến hành **tiền xử lý tập dữ liệu** đó nhằm phục vụ cho mục đích sửa lỗi sau này một cách dễ dàng và thuận tiện","metadata":{"id":"GQ4MlXV7dSex"}},{"cell_type":"code","source":"all_data_nomissing_2 = all_data_nomissing.copy()","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:00:11.249154Z","iopub.status.busy":"2022-06-23T07:00:11.248861Z","iopub.status.idle":"2022-06-23T07:00:11.255312Z","shell.execute_reply":"2022-06-23T07:00:11.254252Z","shell.execute_reply.started":"2022-06-23T07:00:11.249127Z"},"id":"b5ZRotCsu9PU","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# 'MSSubClass' is transformed into categorical features.\n# Changing 'OverallCond' into a categorical variable\n# 'YrSold' and 'MoSold' are transformed into categorical features.\n\n## PUT YOUR CODE HERE:\nfake_nummeric_cols = ['MSSubClass', 'OverallQual', 'OverallCond', 'YrSold', 'MoSold']\n## PUT YOUR CODE HERE:\n# Đổi định dạng của các đặc trưng số sang định dạng chuỗi (string)\nfor col in fake_nummeric_cols:\n    all_data_nomissing_2[col] = all_data[col].astype(str)","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:00:43.998856Z","iopub.status.busy":"2022-06-23T07:00:43.99819Z","iopub.status.idle":"2022-06-23T07:00:44.021462Z","shell.execute_reply":"2022-06-23T07:00:44.020576Z","shell.execute_reply.started":"2022-06-23T07:00:43.998801Z"},"id":"jFkfTfxkqYKZ","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 2.3 Thêm một vài đặc trưng mới theo suy luận","metadata":{"id":"Klf9WCpvqYKa"}},{"cell_type":"markdown","source":"**Lưu ý**: học viên nên tạo một bản sao của tập dữ liệu trước khi tiến hành **tiền xử lý tập dữ liệu** đó nhằm phục vụ cho mục đích sửa lỗi sau này một cách dễ dàng và thuận tiện","metadata":{"id":"8mnn1CBsdZHY"}},{"cell_type":"code","source":"all_data_nomissing_3 = all_data_nomissing_2.copy()","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:00:44.060251Z","iopub.status.busy":"2022-06-23T07:00:44.059332Z","iopub.status.idle":"2022-06-23T07:00:44.069242Z","shell.execute_reply":"2022-06-23T07:00:44.068163Z","shell.execute_reply.started":"2022-06-23T07:00:44.060204Z"},"id":"7y7WbbQCu9PU","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"all_data_nomissing_3.shape","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:00:44.086729Z","iopub.status.busy":"2022-06-23T07:00:44.085789Z","iopub.status.idle":"2022-06-23T07:00:44.093338Z","shell.execute_reply":"2022-06-23T07:00:44.092106Z","shell.execute_reply.started":"2022-06-23T07:00:44.086687Z"},"id":"2oVxXuolu9PV","outputId":"3b3e60f8-2fb3-4a67-8eb7-a80633b9ffb7","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Vì các đặc điểm liên quan đến diện tích rất quan trọng để xác định giá nhà nên chúng ta bổ sung thêm một đặc điểm nữa là tổng diện tích tầng hầm, diện tích tầng 1 và tầng 2 của mỗi ngôi nhà","metadata":{"id":"Hb4ZrJWJqYKa"}},{"cell_type":"code","source":"## PUT YOUR CODE HERE:\nall_data_nomissing_3['TotalSF'] = all_data_nomissing_3['TotalBsmtSF'] + all_data_nomissing_3['1stFlrSF'] + all_data_nomissing_3['2ndFlrSF']","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:00:44.112824Z","iopub.status.busy":"2022-06-23T07:00:44.112021Z","iopub.status.idle":"2022-06-23T07:00:44.118491Z","shell.execute_reply":"2022-06-23T07:00:44.117692Z","shell.execute_reply.started":"2022-06-23T07:00:44.11279Z"},"id":"C9AO3ApOqYKa","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 2.4 Mã hóa số nguyên (Label encoding) một số biến hạng mục.","metadata":{"id":"c0tln8ejqYKa"}},{"cell_type":"markdown","source":"- Ta sẽ mã hóa một số biến hạng mục bởi vì các biến này chứa các giá trị được xếp hạng (ranking). Giá trị nào được xếp hạng càng cao thì giá trị mã hóa sẽ càng cao\n\n**Lưu ý**: học viên nên tạo một bản sao của tập dữ liệu trước khi tiến hành **tiền xử lý tập dữ liệu** đó nhằm phục vụ cho mục đích sửa lỗi sau này một cách dễ dàng và thuận tiện","metadata":{"id":"6X4tFWYooyp8"}},{"cell_type":"code","source":"all_data_nomissing_4 = all_data_nomissing_3.copy()","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:00:44.136272Z","iopub.status.busy":"2022-06-23T07:00:44.135729Z","iopub.status.idle":"2022-06-23T07:00:44.14232Z","shell.execute_reply":"2022-06-23T07:00:44.141322Z","shell.execute_reply.started":"2022-06-23T07:00:44.136241Z"},"id":"Bwn4Tys9oyp9","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def label_encoding(data, values_in_feature):\n    return values_in_feature.index(data) ","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:00:44.169884Z","iopub.status.busy":"2022-06-23T07:00:44.169338Z","iopub.status.idle":"2022-06-23T07:00:44.173797Z","shell.execute_reply":"2022-06-23T07:00:44.17303Z","shell.execute_reply.started":"2022-06-23T07:00:44.169853Z"},"id":"hNOD9k79oyp9","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"- **'OverallQual', 'OverallCond'**: có các label là **'1', '2', '3', '4', '5', '6', '7', '8', '9', '10'**","metadata":{"id":"4wfOYliooyp9"}},{"cell_type":"code","source":"print(all_data_nomissing_3['OverallQual'].unique())\nprint(all_data_nomissing_3['OverallCond'].unique())","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:00:44.193671Z","iopub.status.busy":"2022-06-23T07:00:44.193066Z","iopub.status.idle":"2022-06-23T07:00:44.200576Z","shell.execute_reply":"2022-06-23T07:00:44.199394Z","shell.execute_reply.started":"2022-06-23T07:00:44.193637Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## PUT YOUR CODE HERE:\n\n#Ta thêm '0' vào để thuận tiện cho việc mã hóa theo index\nlabels_0 = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10']  \nlabels_columns_0 = ['OverallQual', 'OverallCond']\n\n# mã hóa số nguyên bằng cách sử dụng hàm label_encoding\nfor col in labels_columns_0:\n    all_data_nomissing_4[col] = all_data_nomissing_3[col].apply(lambda x: label_encoding(x, labels_0))\n\nall_data_nomissing_4[labels_columns_0].head()","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:03:25.274857Z","iopub.status.busy":"2022-06-23T07:03:25.274484Z","iopub.status.idle":"2022-06-23T07:03:25.294833Z","shell.execute_reply":"2022-06-23T07:03:25.293809Z","shell.execute_reply.started":"2022-06-23T07:03:25.274826Z"},"id":"xZzWsAtdoyp9","outputId":"f5c574d3-d1c9-442c-db6c-c98f5f65353e","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(all_data_nomissing_4['OverallQual'].unique())\nprint(all_data_nomissing_4['OverallCond'].unique())","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:03:25.360263Z","iopub.status.busy":"2022-06-23T07:03:25.359865Z","iopub.status.idle":"2022-06-23T07:03:25.367249Z","shell.execute_reply":"2022-06-23T07:03:25.366036Z","shell.execute_reply.started":"2022-06-23T07:03:25.360229Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"- **'BsmtQual', 'BsmtCond', 'ExterQual', 'ExterCond', 'HeatingQC', 'KitchenQual', 'PoolQC'** có chung các label là **'None', 'Po', 'Fa', 'TA', 'Gd', 'Ex'**","metadata":{"id":"p8xfQV6toyp9"}},{"cell_type":"code","source":"labels_1 = ['None', 'Po', 'Fa', 'TA', 'Gd', 'Ex']\nlabels_columns_1 = ['BsmtQual', 'BsmtCond', 'ExterQual', 'ExterCond', 'HeatingQC', 'KitchenQual', 'PoolQC']\n\n## PUT YOUR CODE HERE:\n# mã hóa số nguyên bằng cách sử dụng hàm label_encoding\nfor col in labels_columns_1:\n    all_data_nomissing_4[col] = all_data_nomissing_3[col].apply(lambda x:label_encoding(x, labels_1))\n\nall_data_nomissing_4[labels_columns_1].head()","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:03:25.441203Z","iopub.status.busy":"2022-06-23T07:03:25.440014Z","iopub.status.idle":"2022-06-23T07:03:25.478911Z","shell.execute_reply":"2022-06-23T07:03:25.478107Z","shell.execute_reply.started":"2022-06-23T07:03:25.441137Z"},"id":"52GxGHH3oyp9","outputId":"68ae35f4-7f6c-4c5e-d139-75ba1b8adc9c","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"- **'BsmtExposure'** có các label là **'None', 'No', 'Mn', 'Av', 'Gd'**","metadata":{"id":"cX7vn9yjoyp_"}},{"cell_type":"code","source":"labels_2 = ['None', 'No', 'Mn', 'Av', 'Gd']\nlabels_columns_2 = ['BsmtExposure']\n\n## PUT YOUR CODE HERE:\n# mã hóa số nguyên bằng cách sử dụng hàm label_encoding\nfor col in labels_columns_2:\n    all_data_nomissing_4[col] = all_data_nomissing_3[col].apply(lambda x:label_encoding(x,labels_2))\n    \nall_data_nomissing_4[labels_columns_2].head()","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:03:25.546185Z","iopub.status.busy":"2022-06-23T07:03:25.545246Z","iopub.status.idle":"2022-06-23T07:03:25.561674Z","shell.execute_reply":"2022-06-23T07:03:25.560626Z","shell.execute_reply.started":"2022-06-23T07:03:25.546135Z"},"id":"qEM8BIvhoyp_","outputId":"7894b2c3-0ecf-403a-9fd1-d26abb810c49","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"- **'BsmtFinType1', 'BsmtFinType2'** có chung các label là **'None', 'Unf', 'LwQ', 'Rec', 'BLQ', 'ALQ', 'GLQ'**","metadata":{"id":"arBJwwSeoyqA"}},{"cell_type":"code","source":"labels_3 = ['None', 'Unf', 'LwQ', 'Rec', 'BLQ', 'ALQ', 'GLQ']\nlabels_columns_3 = ['BsmtFinType1', 'BsmtFinType2']\n\n## PUT YOUR CODE HERE:\n# mã hóa số nguyên bằng cách sử dụng hàm label_encoding\nfor col in labels_columns_3:\n    all_data_nomissing_4[col] = all_data_nomissing_3[col].apply(lambda x:label_encoding(x,labels_3))\n    \nall_data_nomissing_4[labels_columns_3].head()","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:03:25.657955Z","iopub.status.busy":"2022-06-23T07:03:25.657202Z","iopub.status.idle":"2022-06-23T07:03:25.675685Z","shell.execute_reply":"2022-06-23T07:03:25.674931Z","shell.execute_reply.started":"2022-06-23T07:03:25.657918Z"},"id":"Y8OLGCKEoyqA","outputId":"66193f8c-4aa8-4ddf-bfe0-3871e05bba7f","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"- **'CentralAir'** có các label là **'N', 'Y'**\n- **'GarageFinish'** có các label là **'None', 'Unf', 'RFn', 'Fin'**\n- **'Fence'** có các label là **'None', 'MnWw', 'GdWo', 'MnPrv', 'GdPrv'**","metadata":{"id":"nSPRjF_MoyqA"}},{"cell_type":"code","source":"labels_4 = ['N', 'Y']\nlabels_columns_4 = ['CentralAir']\n\nlabels_5 = ['None', 'Unf', 'RFn', 'Fin']\nlabels_columns_5 = ['GarageFinish']\n\nlabels_6 = ['None', 'MnWw', 'GdWo', 'MnPrv', 'GdPrv']\nlabels_columns_6 = ['Fence']\n\n## PUT YOUR CODE HERE:\n# mã hóa số nguyên bằng cách sử dụng hàm label_encoding\nfor col in labels_columns_4:\n    all_data_nomissing_4[col] = all_data_nomissing_3[col].apply(lambda x:label_encoding(x,labels_4))\n\nfor col in labels_columns_5:\n    all_data_nomissing_4[col] = all_data_nomissing_3[col].apply(lambda x:label_encoding(x,labels_5))\n    \nfor col in labels_columns_6:\n    all_data_nomissing_4[col] = all_data_nomissing_3[col].apply(lambda x:label_encoding(x,labels_6))\n    \nall_data_nomissing_4[labels_columns_4 + labels_columns_5 + labels_columns_6].head()","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:03:25.766113Z","iopub.status.busy":"2022-06-23T07:03:25.765231Z","iopub.status.idle":"2022-06-23T07:03:25.791677Z","shell.execute_reply":"2022-06-23T07:03:25.79062Z","shell.execute_reply.started":"2022-06-23T07:03:25.766068Z"},"id":"L3fb2v-coyqA","outputId":"09ec44c0-06ca-422c-d51a-595decaf503b","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"- Danh sách các cột được mã hóa số nguyên","metadata":{"id":"y0bt2J6qoyqA"}},{"cell_type":"code","source":"label_cols = labels_columns_0 + labels_columns_1 + labels_columns_2 + labels_columns_3 + labels_columns_4 + labels_columns_5 + labels_columns_6\nlabel_cols","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:03:25.868682Z","iopub.status.busy":"2022-06-23T07:03:25.868183Z","iopub.status.idle":"2022-06-23T07:03:25.875508Z","shell.execute_reply":"2022-06-23T07:03:25.874788Z","shell.execute_reply.started":"2022-06-23T07:03:25.868643Z"},"id":"NFmuIhGioyqA","outputId":"83ac4907-ed7f-44a0-c00d-a55a20cc6f37","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 2.5 Mã hóa One-hot (One-hot encoding) biến hạng mục","metadata":{"id":"6DUMrMm-4myI"}},{"cell_type":"markdown","source":"**Lưu ý**: học viên nên tạo một bản sao của tập dữ liệu trước khi tiến hành **tiền xử lý tập dữ liệu** đó nhằm phục vụ cho mục đích sửa lỗi sau này một cách dễ dàng và thuận tiện","metadata":{"id":"6U87heh64myJ"}},{"cell_type":"markdown","source":"**Lưu ý**: học viên nhớ loại bỏ các cột dữ liệu đã được mã hóa số nguyên ở phần trước","metadata":{"id":"m_6o0c77FF7u"}},{"cell_type":"code","source":"all_data_nomissing_5 = all_data_nomissing_3.copy()\n## PUT YOUR CODE HERE:\n# Tách riêng các cột không chứa các đặc trưng đã được mã hóa số nguyên\nnumber_categorical_cols = [col for col in all_data_nomissing_3.columns if col not in label_cols] ","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:03:25.979658Z","iopub.status.busy":"2022-06-23T07:03:25.979306Z","iopub.status.idle":"2022-06-23T07:03:25.986075Z","shell.execute_reply":"2022-06-23T07:03:25.985337Z","shell.execute_reply.started":"2022-06-23T07:03:25.979628Z"},"id":"2Q-4uEsK4myJ","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"number_categorical_cols","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:03:26.094741Z","iopub.status.busy":"2022-06-23T07:03:26.094093Z","iopub.status.idle":"2022-06-23T07:03:26.101556Z","shell.execute_reply":"2022-06-23T07:03:26.100487Z","shell.execute_reply.started":"2022-06-23T07:03:26.094706Z"},"id":"7Ohc-1mP4myJ","outputId":"b04959d5-6c43-4ac8-8da7-573f93d7a15d","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"- Bây giờ chúng ta bắt đầu quá trình làm sạch dữ liệu, sau đó chúng ta sẽ xử lý các giá trị dữ liệu số và hạng mục riêng biệt. Chúng ta sẽ chia các cột dữ liệu vào 2 loại chính: Dữ liệu số ('int64' hoặc 'float64') và hạng mục ('object').","metadata":{"id":"VaW-ee9h4myJ"}},{"cell_type":"code","source":"## PUT YOUR CODE HERE:\n\n# Danh sách các đặc trưng là dữ liệu số\nnumber_cols = [col for col in number_categorical_cols if all_data_nomissing_5[col].dtype=='int64' or all_data_nomissing_3[col].dtype=='float64'] # Numerical\n\n# Danh sách các đặc trưng là dữ liệu hạng mục\ncategorical_cols=[col for col in number_categorical_cols if all_data_nomissing_5[col].dtype=='object'] # Categorical","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:03:26.202517Z","iopub.status.busy":"2022-06-23T07:03:26.202147Z","iopub.status.idle":"2022-06-23T07:03:26.213832Z","shell.execute_reply":"2022-06-23T07:03:26.212744Z","shell.execute_reply.started":"2022-06-23T07:03:26.202485Z"},"id":"03eH_kIB4myJ","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(len(number_cols), len(categorical_cols), len(all_data_nomissing_3.columns))","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:03:26.299634Z","iopub.status.busy":"2022-06-23T07:03:26.299262Z","iopub.status.idle":"2022-06-23T07:03:26.304865Z","shell.execute_reply":"2022-06-23T07:03:26.303947Z","shell.execute_reply.started":"2022-06-23T07:03:26.299601Z"},"id":"S98YkUx-4myJ","outputId":"f447f98e-8b0d-4fa8-ea98-0f58f7fa9e8e","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Chúng ta sẽ mã hóa dữ liệu hạng mục bằng phương pháp mã hóa **One-hot Encoding**","metadata":{"id":"M-opa8sn4myJ"}},{"cell_type":"markdown","source":"- Sử dụng hàm get_dummies() để mã hóa dữ liệu dạng hạng mục","metadata":{"id":"KmLc6oL64myK"}},{"cell_type":"code","source":"## PUT YOUR CODE HERE:\n# Tách riêng tập dữ liệu hạng mục và sử dụng get_dummies\ncat_data = all_data_nomissing_5[categorical_cols].copy()\ncat_data_dummy = pd.get_dummies(cat_data)\n\nprint(cat_data_dummy.shape)","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:03:26.398738Z","iopub.status.busy":"2022-06-23T07:03:26.398341Z","iopub.status.idle":"2022-06-23T07:03:26.445808Z","shell.execute_reply":"2022-06-23T07:03:26.444656Z","shell.execute_reply.started":"2022-06-23T07:03:26.398696Z"},"id":"YsoS5O0-4myK","outputId":"b9a8aa59-3ff1-415e-89f7-2eef249a1e93","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 2.6 Co dãn dữ liệu số","metadata":{"id":"6SFQs3-ESuSB"}},{"cell_type":"markdown","source":"- Chúng ta sẽ co dãn dữ liệu số thành dữ liệu ở dạng **phân phối chuẩn**","metadata":{"id":"_c0iWqKudljv"}},{"cell_type":"code","source":"from sklearn.preprocessing import StandardScaler\n## PUT YOUR CODE HERE:\nscaler = StandardScaler()\n# Tách riêng tập dữ liệu số và sử dụng StandardScaler\nall_data_nomissing_5[number_cols] = scaler.fit_transform(all_data_nomissing_5[number_cols])","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:03:26.494858Z","iopub.status.busy":"2022-06-23T07:03:26.493922Z","iopub.status.idle":"2022-06-23T07:03:26.511368Z","shell.execute_reply":"2022-06-23T07:03:26.510546Z","shell.execute_reply.started":"2022-06-23T07:03:26.49482Z"},"id":"wMtnmpYcu9PW","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"- Kết hợp các tập dữ liệu","metadata":{"id":"Jsm6fq1R4myK"}},{"cell_type":"code","source":"# Kết hợp tập dữ liệu số và tập dữ liệu hạng mục sau khi đã xử lý\n# thành một tập dữ liệu mới\nall_data_nomissing_6 = pd.concat([all_data_nomissing_5[number_cols].copy(), cat_data_dummy, all_data_nomissing_4[label_cols]], axis=1)","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:03:26.591955Z","iopub.status.busy":"2022-06-23T07:03:26.591275Z","iopub.status.idle":"2022-06-23T07:03:26.60159Z","shell.execute_reply":"2022-06-23T07:03:26.600501Z","shell.execute_reply.started":"2022-06-23T07:03:26.591919Z"},"id":"iQo4h1_Y4myK","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"all_data_nomissing_6.shape","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:03:26.694988Z","iopub.status.busy":"2022-06-23T07:03:26.694314Z","iopub.status.idle":"2022-06-23T07:03:26.700913Z","shell.execute_reply":"2022-06-23T07:03:26.699952Z","shell.execute_reply.started":"2022-06-23T07:03:26.694951Z"},"id":"R7O-WCCw4myK","outputId":"75834d72-8ffe-4846-84a8-139d4ff1304c","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cat_data_dummy","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:03:26.808512Z","iopub.status.busy":"2022-06-23T07:03:26.808142Z","iopub.status.idle":"2022-06-23T07:03:26.831561Z","shell.execute_reply":"2022-06-23T07:03:26.830659Z","shell.execute_reply.started":"2022-06-23T07:03:26.80848Z"},"id":"th47oYGN4myK","outputId":"e256d80e-9b17-43db-dfbf-848835dfd755","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cat_data_dummy.shape","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:03:26.910186Z","iopub.status.busy":"2022-06-23T07:03:26.909384Z","iopub.status.idle":"2022-06-23T07:03:26.917723Z","shell.execute_reply":"2022-06-23T07:03:26.916524Z","shell.execute_reply.started":"2022-06-23T07:03:26.910143Z"},"id":"MVZdVFoT4myK","outputId":"a96d4cdd-258c-4046-fabe-8177080bba82","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 3. Lựa chọn đặc trưng","metadata":{"id":"oWmfNCz_u9PW"}},{"cell_type":"markdown","source":"Ở phần này, chúng ta sẽ sử dụng 2 phương pháp dùng để lựa chọn đặc trưng đã học là:\n  - Sử dụng mô hình hồi quy **Lasso**\n  - Sử dụng phương pháp loại và thêm đặc trưng bằng **đệ quy**\n  \nSau đó chúng ta sẽ so sánh hiệu quả của 2 phương pháp trên đối với tập dữ liệu này ","metadata":{"id":"hstOulpAe55j"}},{"cell_type":"markdown","source":"## Loại bỏ  các đặc trưng bị trùng","metadata":{"id":"DKs2CabO4myL"}},{"cell_type":"code","source":"!pip install feature_engine","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:05:05.212019Z","iopub.status.busy":"2022-06-23T07:05:05.211603Z","iopub.status.idle":"2022-06-23T07:05:16.091606Z","shell.execute_reply":"2022-06-23T07:05:16.090479Z","shell.execute_reply.started":"2022-06-23T07:05:05.211984Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from feature_engine.selection import DropDuplicateFeatures","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:05:16.093865Z","iopub.status.busy":"2022-06-23T07:05:16.093526Z","iopub.status.idle":"2022-06-23T07:05:16.099731Z","shell.execute_reply":"2022-06-23T07:05:16.098115Z","shell.execute_reply.started":"2022-06-23T07:05:16.093834Z"},"id":"-WxryIEa4myL","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## PUT YOUR CODE HERE:\n# Loại bỏ các đặc trưng bị trùng bằng hàm DropDuplicateFeatures\nsel = DropDuplicateFeatures(variables=None, missing_values='raise')\n\nsel.fit(all_data_nomissing_6)","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:05:16.10147Z","iopub.status.busy":"2022-06-23T07:05:16.101045Z","iopub.status.idle":"2022-06-23T07:05:17.906469Z","shell.execute_reply":"2022-06-23T07:05:17.905148Z","shell.execute_reply.started":"2022-06-23T07:05:16.101439Z"},"id":"antzgZjS4myL","outputId":"08b554fd-fd63-4b0b-8405-bbf39dd73001","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sel.duplicated_feature_sets_","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:05:17.909438Z","iopub.status.busy":"2022-06-23T07:05:17.908986Z","iopub.status.idle":"2022-06-23T07:05:17.917433Z","shell.execute_reply":"2022-06-23T07:05:17.916156Z","shell.execute_reply.started":"2022-06-23T07:05:17.909404Z"},"id":"LgT_nlwF4myL","outputId":"ed1092dd-6eb2-41e4-9d48-d9d181b92bc5","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sel.features_to_drop_","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:05:17.920374Z","iopub.status.busy":"2022-06-23T07:05:17.919519Z","iopub.status.idle":"2022-06-23T07:05:17.931165Z","shell.execute_reply":"2022-06-23T07:05:17.929891Z","shell.execute_reply.started":"2022-06-23T07:05:17.920326Z"},"id":"GBmXLKy64myL","outputId":"29817729-385c-46cf-a0a0-757ebcbfd394","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## PUT YOUR CODE HERE:\n# Tiến hành loại bỏ đặc trưng bị trùng\nall_data_preprocessed = sel.transform(all_data_nomissing_6)\n\nall_data_preprocessed.shape","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:05:17.933903Z","iopub.status.busy":"2022-06-23T07:05:17.933135Z","iopub.status.idle":"2022-06-23T07:05:17.95311Z","shell.execute_reply":"2022-06-23T07:05:17.951847Z","shell.execute_reply.started":"2022-06-23T07:05:17.933858Z"},"id":"bvfDI5Fo4myM","outputId":"1d09cb9f-ebdc-4313-c5e4-9e33cfe053ea","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"- Tách tập dữ liệu thành tập train và test cho mục đích lựa chọn đặc trưng","metadata":{"id":"7Vvy8hgj_pI_"}},{"cell_type":"code","source":"train_preprocessed = all_data_preprocessed.iloc[:ntrain,:].copy()\ntest_preprocessed = all_data_preprocessed.iloc[ntrain:,:].copy()","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:05:17.955388Z","iopub.status.busy":"2022-06-23T07:05:17.95452Z","iopub.status.idle":"2022-06-23T07:05:17.962346Z","shell.execute_reply":"2022-06-23T07:05:17.961053Z","shell.execute_reply.started":"2022-06-23T07:05:17.955345Z"},"id":"1av4zNi4u9PW","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"(train_preprocessed.values).shape","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:05:17.965086Z","iopub.status.busy":"2022-06-23T07:05:17.964287Z","iopub.status.idle":"2022-06-23T07:05:17.980931Z","shell.execute_reply":"2022-06-23T07:05:17.980022Z","shell.execute_reply.started":"2022-06-23T07:05:17.965037Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"(y.shape)","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:05:17.982985Z","iopub.status.busy":"2022-06-23T07:05:17.982169Z","iopub.status.idle":"2022-06-23T07:05:17.992645Z","shell.execute_reply":"2022-06-23T07:05:17.991807Z","shell.execute_reply.started":"2022-06-23T07:05:17.982952Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 3.1 Lựa chọn đặc trưng bằng đệ quy","metadata":{"id":"_STeSniku9PW"}},{"cell_type":"markdown","source":"### Loại đặc trưng bằng đệ quy","metadata":{"id":"DDdOit5Nu9PX"}},{"cell_type":"markdown","source":"**Lưu ý**: học viên nên tạo một bản sao của tập dữ liệu trước khi tiến hành **lựa chọn đặc trưng trên tập dữ liệu** đó nhằm phục vụ cho mục đích sửa lỗi sau này một cách dễ dàng và thuận tiện","metadata":{"id":"eCs_de8Tfz7d"}},{"cell_type":"code","source":"from sklearn.ensemble import GradientBoostingRegressor\nfrom feature_engine.selection import RecursiveFeatureElimination","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:05:17.997086Z","iopub.status.busy":"2022-06-23T07:05:17.996418Z","iopub.status.idle":"2022-06-23T07:05:18.004962Z","shell.execute_reply":"2022-06-23T07:05:18.004142Z","shell.execute_reply.started":"2022-06-23T07:05:17.997051Z"},"id":"K80vbBJ0u9PX","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Khởi tạo mô hình dùng để lựa chọn đặc trưng\nmodel = GradientBoostingRegressor(n_estimators=10, max_depth=4, random_state=0)\n\n# Thiết lập trình lựa chọn đặc trưng\n## PUT YOUR CODE HERE:\nsel = RecursiveFeatureElimination(\n    variables=None, # automatically evaluate all numerical variables\n    estimator =model , # the ML model\n    scoring = 'neg_mean_squared_error', # the metric we want to evalute\n    threshold = 0.001, # the maximum performance drop allowed to remove a feature\n    cv=3, # cross-validation\n)\n\n## PUT YOUR CODE HERE:\n# Tiến hành khớp dữ liệu\nsel.fit(train_preprocessed, y )","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:05:18.006859Z","iopub.status.busy":"2022-06-23T07:05:18.006489Z","iopub.status.idle":"2022-06-23T07:06:55.643582Z","shell.execute_reply":"2022-06-23T07:06:55.642499Z","shell.execute_reply.started":"2022-06-23T07:05:18.006826Z"},"id":"YXCMgUsJu9PX","outputId":"af6b1932-15b4-41df-aea2-06b8f16d6ac1","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sel.features_to_drop_","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:06:55.645857Z","iopub.status.busy":"2022-06-23T07:06:55.645051Z","iopub.status.idle":"2022-06-23T07:06:55.652689Z","shell.execute_reply":"2022-06-23T07:06:55.651542Z","shell.execute_reply.started":"2022-06-23T07:06:55.645823Z"},"id":"CpFnr5hyu9PX","outputId":"4bfe71df-0a96-4e8f-e2d2-5a3dff4d0de1","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## PUT YOUR CODE HERE:\n# Tiến hành lựa chọn đặc trưng\ntrain_recursive_ellimination_selected = sel.transform(train_preprocessed)\ntest_recursive_ellimination_selected = sel.transform(test_preprocessed)","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:06:55.654946Z","iopub.status.busy":"2022-06-23T07:06:55.654511Z","iopub.status.idle":"2022-06-23T07:06:55.670678Z","shell.execute_reply":"2022-06-23T07:06:55.66951Z","shell.execute_reply.started":"2022-06-23T07:06:55.654906Z"},"id":"c-Nw0zs5u9PX","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Thêm đặc trưng bằng đệ quy","metadata":{"id":"iSF4FeR0u9PX"}},{"cell_type":"markdown","source":"**Lưu ý**: học viên nên tạo một bản sao của tập dữ liệu trước khi tiến hành **lựa chọn đặc trưng trên tập dữ liệu** đó nhằm phục vụ cho mục đích sửa lỗi sau này một cách dễ dàng và thuận tiện","metadata":{"id":"leb1mCq7zrQ9"}},{"cell_type":"code","source":"from sklearn.ensemble import GradientBoostingRegressor\nfrom feature_engine.selection import RecursiveFeatureAddition","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:06:55.674625Z","iopub.status.busy":"2022-06-23T07:06:55.673658Z","iopub.status.idle":"2022-06-23T07:06:55.679923Z","shell.execute_reply":"2022-06-23T07:06:55.678918Z","shell.execute_reply.started":"2022-06-23T07:06:55.67458Z"},"id":"6CQAvdRIu9PX","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Khởi tạo mô hình dùng để lựa chọn đặc trưng\nmodel = GradientBoostingRegressor(n_estimators=10, max_depth=4, random_state=0)\n\n\n# Thiết lập trình lựa chọn đặc trưng\n## PUT YOUR CODE HERE:\nrfa = RecursiveFeatureAddition(\n    variables=None,  # automatically evaluate all numerical variables\n    estimator=model,  # the ML model\n    scoring='neg_mean_squared_error',  # the metric we want to evalute\n    threshold=0.001,  # the minimum performance increase needed to select a feature\n    cv=3,  # cross-validation\n)\n\n## PUT YOUR CODE HERE:\n# Tiến hành khớp dữ liệu\nrfa.fit(train_preprocessed, y)","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:06:55.682523Z","iopub.status.busy":"2022-06-23T07:06:55.681511Z","iopub.status.idle":"2022-06-23T07:07:21.545405Z","shell.execute_reply":"2022-06-23T07:07:21.544086Z","shell.execute_reply.started":"2022-06-23T07:06:55.682481Z"},"id":"Dc9fau7Zu9PX","outputId":"9e84431f-329f-41ed-88f9-1095ffe40162","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"rfa.features_to_drop_","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:07:21.54721Z","iopub.status.busy":"2022-06-23T07:07:21.546819Z","iopub.status.idle":"2022-06-23T07:07:21.560524Z","shell.execute_reply":"2022-06-23T07:07:21.559229Z","shell.execute_reply.started":"2022-06-23T07:07:21.547178Z"},"id":"A8OcJoHCu9PY","outputId":"891bdb1b-35d5-430b-9586-746abd5ccba9","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## PUT YOUR CODE HERE:\n# Tiến hành lựa chọn đặc trưng\ntrain_recursive_addition_selected = rfa.transform(train_preprocessed)\ntest_recursive_addition_selected = rfa.transform(test_preprocessed)","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:07:21.563748Z","iopub.status.busy":"2022-06-23T07:07:21.562312Z","iopub.status.idle":"2022-06-23T07:07:21.574588Z","shell.execute_reply":"2022-06-23T07:07:21.573821Z","shell.execute_reply.started":"2022-06-23T07:07:21.563711Z"},"id":"RC0TfOaZu9PY","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"- Tập dữ liệu sau khi đã lựa chọn bằng phương pháp đệ quy. Như ta có thể thấy, số đặc trưng đã giảm khá nhiều. ","metadata":{"id":"D7YVJzwtu9PY"}},{"cell_type":"code","source":"test_recursive_ellimination_selected","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:07:21.575938Z","iopub.status.busy":"2022-06-23T07:07:21.575619Z","iopub.status.idle":"2022-06-23T07:07:21.607658Z","shell.execute_reply":"2022-06-23T07:07:21.606626Z","shell.execute_reply.started":"2022-06-23T07:07:21.575909Z"},"id":"oahybfpn0BRZ","outputId":"a07f28b4-a4c9-4e8f-dea2-2709a766abbb","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_recursive_addition_selected","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:07:21.60938Z","iopub.status.busy":"2022-06-23T07:07:21.609065Z","iopub.status.idle":"2022-06-23T07:07:21.63143Z","shell.execute_reply":"2022-06-23T07:07:21.630449Z","shell.execute_reply.started":"2022-06-23T07:07:21.609352Z"},"id":"iGxgpaGNu9PY","outputId":"c23ccfea-821b-4bba-816b-f93b03670855","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 3.2 Lựa chọn đặc trưng bằng mô hình Lasso","metadata":{"id":"OQNtMKksu9PY"}},{"cell_type":"markdown","source":"**Lưu ý**: học viên nên tạo một bản sao của tập dữ liệu trước khi tiến hành **lựa chọn đặc trưng trên tập dữ liệu** đó nhằm phục vụ cho mục đích sửa lỗi sau này một cách dễ dàng và thuận tiện","metadata":{"id":"YjxJMKvagDtf"}},{"cell_type":"markdown","source":"- Sử dụng hồi quy **Lasso** để lựa chọn các đặc trưng phù hợp cho mô hình","metadata":{"id":"E-QWt44Qu9PY"}},{"cell_type":"code","source":"from sklearn.linear_model import Lasso\nfrom sklearn.feature_selection import SelectFromModel\nfrom sklearn.model_selection import GridSearchCV","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:07:21.633257Z","iopub.status.busy":"2022-06-23T07:07:21.632916Z","iopub.status.idle":"2022-06-23T07:07:21.637871Z","shell.execute_reply":"2022-06-23T07:07:21.636707Z","shell.execute_reply.started":"2022-06-23T07:07:21.633229Z"},"id":"ZXkrJBgju9PY","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"- Sử dụng **GridSearchCV** để lựa chọn mô hình Lasso tốt nhất có thể, sau đó sử dụng mô hình này để lựa chọn các đặc trưng\n\n**Lưu ý**: sử dụng độ đo **MSE** (Mean squared error)","metadata":{"id":"zMMAmAl-u9PY"}},{"cell_type":"code","source":"parameters = {'alpha':[0.01, 1, 10, 100]}\nmodel = Lasso(normalize=True)\n## PUT YOUR CODE HERE:\n# Khởi tạo lưới tìm kiếm trên mô hình Lasso\nclf = GridSearchCV(model, parameters, scoring = 'neg_mean_squared_error')\nclf.fit(train_preprocessed, y)","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:07:21.640772Z","iopub.status.busy":"2022-06-23T07:07:21.639749Z","iopub.status.idle":"2022-06-23T07:07:26.96464Z","shell.execute_reply":"2022-06-23T07:07:26.963384Z","shell.execute_reply.started":"2022-06-23T07:07:21.640721Z"},"id":"RdrMTkw0u9PZ","outputId":"9a931d91-531e-43d6-e37d-b130c26a5135","scrolled":true,"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"clf.best_params_","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:07:26.989189Z","iopub.status.busy":"2022-06-23T07:07:26.981201Z","iopub.status.idle":"2022-06-23T07:07:27.017869Z","shell.execute_reply":"2022-06-23T07:07:27.016346Z","shell.execute_reply.started":"2022-06-23T07:07:26.989104Z"},"id":"gUQXcNXAu9PZ","outputId":"697f38dd-644d-4f13-e340-f1307d47cd28","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## PUT YOUR CODE HERE:\n# Tiến hành lựa chọn đặc trưng\nsel = SelectFromModel(Lasso(alpha = clf.best_params_['alpha'], normalize=True))\nsel.fit(train_preprocessed, y)","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:07:27.044232Z","iopub.status.busy":"2022-06-23T07:07:27.031746Z","iopub.status.idle":"2022-06-23T07:07:27.145323Z","shell.execute_reply":"2022-06-23T07:07:27.144135Z","shell.execute_reply.started":"2022-06-23T07:07:27.044152Z"},"id":"zlhiqfyyu9PZ","outputId":"f075fbe0-d02e-4cf0-e855-60778a2737a5","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Danh sách đặc trưng chúng ta chọn giữ lại\nselected_feat = train_preprocessed.columns[(sel.get_support())]\n\n# Số đặc trưng trước khi giảm\nprint('total features: {}'.format((train.shape[1])))\n\n# Số đặc trưng sau khi giảm\n## PUT YOUR CODE HERE:\nprint('selected features: {}'.format(len(selected_feat)))\n\n## PUT YOUR CODE HERE:\n# Số đặc trưng đã được loại bỏ\nprint('features with coefficients shrank to zero: {}'.format(\n    np.sum(sel.estimator_.coef_ == 0)))","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:07:27.15338Z","iopub.status.busy":"2022-06-23T07:07:27.150591Z","iopub.status.idle":"2022-06-23T07:07:27.165401Z","shell.execute_reply":"2022-06-23T07:07:27.163928Z","shell.execute_reply.started":"2022-06-23T07:07:27.153329Z"},"id":"U2kqaj2zu9PZ","outputId":"3b5477ad-a910-44ff-f924-1eddccbf88b4","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"selected_feat","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:07:27.168547Z","iopub.status.busy":"2022-06-23T07:07:27.167619Z","iopub.status.idle":"2022-06-23T07:07:27.190586Z","shell.execute_reply":"2022-06-23T07:07:27.187932Z","shell.execute_reply.started":"2022-06-23T07:07:27.168491Z"},"id":"0a50YWc4u9PZ","outputId":"27bd71a6-a51e-4081-d5d5-e8f5bd0d60bc","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"- Chọn tập dữ liệu mới với các đặc trưng đã lựa chọn","metadata":{"id":"mIJLgYx2u9PZ"}},{"cell_type":"code","source":"## PUT YOUR CODE HERE:\ntrain_lasso_selected = train_preprocessed[selected_feat]\ntest_lasso_selected = test_preprocessed[selected_feat]","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:07:27.19981Z","iopub.status.busy":"2022-06-23T07:07:27.198741Z","iopub.status.idle":"2022-06-23T07:07:27.216534Z","shell.execute_reply":"2022-06-23T07:07:27.214812Z","shell.execute_reply.started":"2022-06-23T07:07:27.199728Z"},"id":"iY1mVvuyu9PZ","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 4. Đánh giá hiệu quả mô hình","metadata":{"id":"pN_zVLEru9PZ"}},{"cell_type":"markdown","source":"Chúng ta sẽ sử dụng phương pháp **K-fold cross validation** (kiểm chứng chéo) để đánh giá độ hiệu quả của các mô hình trong việc đưa ra dự đoán.","metadata":{"id":"dLdkUhkMjGXp"}},{"cell_type":"code","source":"from sklearn.model_selection import KFold, cross_val_score\nfrom sklearn.metrics import mean_squared_log_error\nfrom sklearn.linear_model import Ridge, ElasticNet\nfrom sklearn.svm import SVR\nfrom sklearn.tree import DecisionTreeRegressor\nfrom sklearn.ensemble import RandomForestRegressor","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:07:27.226309Z","iopub.status.busy":"2022-06-23T07:07:27.221919Z","iopub.status.idle":"2022-06-23T07:07:27.239547Z","shell.execute_reply":"2022-06-23T07:07:27.238063Z","shell.execute_reply.started":"2022-06-23T07:07:27.226241Z"},"id":"kmpxEo9au9Pa","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"- Xây dựng hàm kiểm chứng chéo bằng cách sử dụng hàm **cross_val_score** và **KFold** của sklearn. Tuy nhiên, hàm này không có đặc trưng xáo trộn, chúng ta thêm vào một dòng mã dùng để xáo trộn tập dữ liệu trước khi kiểm chứng chéo. Điều này giúp có được kết quả khách quan hơn.","metadata":{"id":"3WVsbEAfu9Pa"}},{"cell_type":"code","source":"# Số fold bằng 10\nn_folds = 10\n\ndef rmse_cv(model, train, y):\n  \n    # Tạo danh sách các fold\n    kf = KFold(n_folds, shuffle=True, random_state=0).get_n_splits(train.values)\n\n    # Tiến hành kiểm chứng chéo với metric là MSE\n    mse= np.sqrt(-cross_val_score(model, train.values, np.log(y), scoring=\"neg_mean_squared_error\", cv = kf))\n\n    # Trả về mảng giá trị MSE của từng fold\n    return(mse)","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:07:27.260016Z","iopub.status.busy":"2022-06-23T07:07:27.257831Z","iopub.status.idle":"2022-06-23T07:07:27.267444Z","shell.execute_reply":"2022-06-23T07:07:27.26631Z","shell.execute_reply.started":"2022-06-23T07:07:27.259977Z"},"id":"lgWtQ3Xlu9Pa","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 4.1 Các mô hình cơ sở","metadata":{"id":"m3V0DBliu9Pa"}},{"cell_type":"markdown","source":"- Chúng ta sẽ dùng các mô hình hồi quy đã học để so sánh hiệu quả của 3 tập dữ liệu đã được rút gọn đặc trưng bằng phương pháp hồi quy Lasso và đệ quy","metadata":{"id":"V73BXT-3pOBW"}},{"cell_type":"markdown","source":"### Ridge Regression","metadata":{"id":"GOIYfpFhu9Pa"}},{"cell_type":"code","source":"model = Ridge(alpha = 1e+3, tol = 0.0001, random_state=0)\n\n## PUT YOUR CODE HERE:\n# Kiểm chứng chéo trên các tập dữ liệu đã được lựa chọn thuộc tính\n\nscore = rmse_cv(model, train_lasso_selected, y)\nprint(\"Lasso Selection: Averaged base models score: {:.4f} ({:.4f})\\n\".format(score.mean(), score.std()))\n\nscore = rmse_cv(model, train_recursive_ellimination_selected, y)\nprint(\"Recursive Ellimination Selection: Averaged base models score: {:.4f} ({:.4f})\\n\".format(score.mean(), score.std()))\n\nscore = rmse_cv(model, train_recursive_addition_selected, y)\nprint(\"Recursive Addition Selection: Averaged base models score: {:.4f} ({:.4f})\\n\".format(score.mean(), score.std()))","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:07:27.269582Z","iopub.status.busy":"2022-06-23T07:07:27.269124Z","iopub.status.idle":"2022-06-23T07:07:27.985549Z","shell.execute_reply":"2022-06-23T07:07:27.983455Z","shell.execute_reply.started":"2022-06-23T07:07:27.26954Z"},"id":"JmUUT0iUu9Pa","outputId":"369c03e0-3e92-47e9-df34-06f5404f32d1","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Elastic Net Regression","metadata":{"id":"16-1oNbJu9Pa"}},{"cell_type":"code","source":"model = ElasticNet(alpha = 8, l1_ratio = 0.01, tol = 0.0001, random_state=0)\n\n## PUT YOUR CODE HERE:\n# Kiểm chứng chéo trên các tập dữ liệu đã được lựa chọn thuộc tính\n\nscore = rmse_cv(model, train_lasso_selected,y)\nprint(\"Lasso Selection: Averaged base models score: {:.4f} ({:.4f})\\n\".format(score.mean(), score.std()))\n\nscore = rmse_cv(model, train_recursive_ellimination_selected, y)\nprint(\"Recursive Ellimination Selection: Averaged base models score: {:.4f} ({:.4f})\\n\".format(score.mean(), score.std()))\n\nscore = rmse_cv(model, train_recursive_addition_selected, y)\nprint(\"Recursive Addition Selection: Averaged base models score: {:.4f} ({:.4f})\\n\".format(score.mean(), score.std()))","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:07:27.991556Z","iopub.status.busy":"2022-06-23T07:07:27.988734Z","iopub.status.idle":"2022-06-23T07:07:28.537021Z","shell.execute_reply":"2022-06-23T07:07:28.535872Z","shell.execute_reply.started":"2022-06-23T07:07:27.991501Z"},"id":"i2eAp7CZu9Pb","outputId":"4d8c3b19-e632-4775-aaeb-7eab9c33f8c0","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Support Vector Regression","metadata":{"id":"P0i5Fxwcu9Pb"}},{"cell_type":"code","source":"model = SVR(kernel = 'sigmoid')\n\n## PUT YOUR CODE HERE:\n# Kiểm chứng chéo trên các tập dữ liệu đã được lựa chọn thuộc tính\n\nscore = rmse_cv(model, train_lasso_selected, y)\nprint(\"Lasso Selection: Averaged base models score: {:.4f} ({:.4f})\\n\".format(score.mean(), score.std()))\n\nscore = rmse_cv(model, train_recursive_ellimination_selected, y)\nprint(\"Recursive Ellimination Selection: Averaged base models score: {:.4f} ({:.4f})\\n\".format(score.mean(), score.std()))\n\nscore = rmse_cv(model, train_recursive_addition_selected, y)\nprint(\"Recursive Addition Selection: Averaged base models score: {:.4f} ({:.4f})\\n\".format(score.mean(), score.std()))","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:07:28.541238Z","iopub.status.busy":"2022-06-23T07:07:28.538851Z","iopub.status.idle":"2022-06-23T07:07:36.670208Z","shell.execute_reply":"2022-06-23T07:07:36.669039Z","shell.execute_reply.started":"2022-06-23T07:07:28.541189Z"},"id":"xbhU9iaZu9Pb","outputId":"731a5dce-c818-4c34-bd5f-a25289717d18","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Decision Tree Regression","metadata":{"id":"wwEH3kDEu9Pb"}},{"cell_type":"code","source":"model = DecisionTreeRegressor(random_state = 0)\n\n## PUT YOUR CODE HERE:\n# Kiểm chứng chéo trên các tập dữ liệu đã được lựa chọn thuộc tính\n\nscore = rmse_cv(model, train_lasso_selected, y)\nprint(\"Lasso Selection: Averaged base models score: {:.4f} ({:.4f})\\n\".format(score.mean(), score.std()))\n\nscore = rmse_cv(model, train_recursive_ellimination_selected, y)\nprint(\"Recursive Ellimination Selection: Averaged base models score: {:.4f} ({:.4f})\\n\".format(score.mean(), score.std()))\n\nscore = rmse_cv(model, train_recursive_addition_selected, y)\nprint(\"Recursive Addition Selection: Averaged base models score: {:.4f} ({:.4f})\\n\".format(score.mean(), score.std()))","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:07:36.672267Z","iopub.status.busy":"2022-06-23T07:07:36.67186Z","iopub.status.idle":"2022-06-23T07:07:37.566022Z","shell.execute_reply":"2022-06-23T07:07:37.564799Z","shell.execute_reply.started":"2022-06-23T07:07:36.672225Z"},"id":"qDR4gGX7u9Pb","outputId":"b2b47ecd-ef1d-42fb-debe-f617baefa253","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Random Forest Regression","metadata":{"id":"J4Gt7TRbu9Pb"}},{"cell_type":"code","source":"model = RandomForestRegressor(n_estimators = 10, random_state = 0)\n\n## PUT YOUR CODE HERE:\n# Kiểm chứng chéo trên các tập dữ liệu đã được lựa chọn thuộc tính\n\nscore = rmse_cv(model, train_lasso_selected, y)\nprint(\"Lasso Selection: Averaged base models score: {:.4f} ({:.4f})\\n\".format(score.mean(), score.std()))\n\nscore = rmse_cv(model, train_recursive_ellimination_selected, y)\nprint(\"Recursive Ellimination Selection: Averaged base models score: {:.4f} ({:.4f})\\n\".format(score.mean(), score.std()))\n\nscore = rmse_cv(model, train_recursive_addition_selected, y)\nprint(\"Recursive Addition Selection: Averaged base models score: {:.4f} ({:.4f})\\n\".format(score.mean(), score.std()))","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:07:37.567978Z","iopub.status.busy":"2022-06-23T07:07:37.567639Z","iopub.status.idle":"2022-06-23T07:07:42.922091Z","shell.execute_reply":"2022-06-23T07:07:42.920896Z","shell.execute_reply.started":"2022-06-23T07:07:37.567946Z"},"id":"rrYSwafFu9Pb","outputId":"e57fba15-e03a-4ca6-8c91-611333a3e0bf","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 4.2 Tìm kiếm tham số tối ưu","metadata":{"id":"1aCoWJ5Nu9Pb"}},{"cell_type":"markdown","source":"- Như vậy ta sẽ lựa chọn mô hình cho ra kết quả đụ đoán hầu như tốt nhất trên 3 tập dữ liệu Lasso và Đệ Quy làm mô hình chính cho bài toán, kế tiếp ta sẽ lựa chọn các tham số phù hợp để cho ra các kết quả tốt hơn\n\n**Lưu ý**: sử dụng độ đo **MSE** (Mean squared error)","metadata":{"id":"_CMyik6Ju9Pc"}},{"cell_type":"code","source":"## PUT YOUR CODE HERE:\n# Khởi tạo các tham số cần tối ưu cho lưới tìm kiếm\nparameters = {'n_estimators': [10, 20, 50, 100]}\n\n# Khởi tạo lưới tìm kiếm trên mô hình đã được lựa chọn\n# trên tập dữ liệu loại đặc trưng bằng Lasso\nmodel_lasso = Lasso(random_state = 0)\ngrid_lasso = GridSearchCV(estimator=RandomForestRegressor(random_state=0),\n             param_grid={'n_estimators': [10, 20, 50, 100]},\n             scoring='neg_mean_squared_error')\ngrid_lasso.fit(train_lasso_selected, y)","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:07:42.924203Z","iopub.status.busy":"2022-06-23T07:07:42.923351Z","iopub.status.idle":"2022-06-23T07:08:00.168697Z","shell.execute_reply":"2022-06-23T07:08:00.167601Z","shell.execute_reply.started":"2022-06-23T07:07:42.924166Z"},"id":"uoXWbG9pu9Pc","outputId":"0cbb4ace-afeb-40ac-e2dd-9b723c889584","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"grid_lasso.best_params_","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:08:00.171035Z","iopub.status.busy":"2022-06-23T07:08:00.170125Z","iopub.status.idle":"2022-06-23T07:08:00.177926Z","shell.execute_reply":"2022-06-23T07:08:00.176792Z","shell.execute_reply.started":"2022-06-23T07:08:00.170987Z"},"id":"RrBqjCZdu9Pc","outputId":"20e8d881-bc91-4902-e4a9-d6112e6fe186","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## PUT YOUR CODE HERE:\n# Khởi tạo các tham số cần tối ưu cho lưới tìm kiếm\nparameters = {'n_estimators': [10, 20, 50, 100]}\n\n# Khởi tạo lưới tìm kiếm trên mô hình đã được lựa chọn\n# trên tập dữ liệu loại đặc trưng bằng đệ quy\nmodel_recursive_ellimination = GradientBoostingRegressor(random_state = 0)\ngrid_recursive_ellimination = GridSearchCV(estimator=RandomForestRegressor(random_state=0),\n             param_grid={'n_estimators': [10, 20, 50, 100]},\n             scoring='neg_mean_squared_error')\ngrid_recursive_ellimination.fit(train_recursive_ellimination_selected, y)","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:08:00.18144Z","iopub.status.busy":"2022-06-23T07:08:00.181145Z","iopub.status.idle":"2022-06-23T07:08:25.117478Z","shell.execute_reply":"2022-06-23T07:08:25.116394Z","shell.execute_reply.started":"2022-06-23T07:08:00.181414Z"},"id":"WXbtgls21AO9","outputId":"07739f86-4b91-49fc-b923-a1e00127287f","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"grid_recursive_ellimination.best_params_","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:08:25.119258Z","iopub.status.busy":"2022-06-23T07:08:25.118933Z","iopub.status.idle":"2022-06-23T07:08:25.12525Z","shell.execute_reply":"2022-06-23T07:08:25.124246Z","shell.execute_reply.started":"2022-06-23T07:08:25.119229Z"},"id":"O1f8ytWp1AUq","outputId":"2bb33cb7-f9bc-4825-edef-06173ede33d1","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## PUT YOUR CODE HERE:\n# Khởi tạo các tham số cần tối ưu cho lưới tìm kiếm\nparameters = {'n_estimators': [10, 20, 50, 100]}\n\n# Khởi tạo lưới tìm kiếm trên mô hình đã được lựa chọn \n# trên tập dữ liệu thêm đặc trưng bằng đệ quy\nmodel_recursive_addition = GradientBoostingRegressor(random_state = 0)\ngrid_recursive_addition = GridSearchCV(estimator=RandomForestRegressor(random_state=0),\n             param_grid={'n_estimators': [10, 20, 50, 100]},\n             scoring='neg_mean_squared_error')\ngrid_recursive_addition.fit(train_recursive_addition_selected, y)","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:08:25.12715Z","iopub.status.busy":"2022-06-23T07:08:25.126836Z","iopub.status.idle":"2022-06-23T07:08:31.662033Z","shell.execute_reply":"2022-06-23T07:08:31.660778Z","shell.execute_reply.started":"2022-06-23T07:08:25.127114Z"},"id":"CiaM-PUHu9Pc","outputId":"473b714d-e7aa-4413-a80e-d62227d904db","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"grid_recursive_addition.best_params_","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:08:31.664742Z","iopub.status.busy":"2022-06-23T07:08:31.663735Z","iopub.status.idle":"2022-06-23T07:08:31.674292Z","shell.execute_reply":"2022-06-23T07:08:31.67288Z","shell.execute_reply.started":"2022-06-23T07:08:31.664693Z"},"id":"pv7KyuAVu9Pc","outputId":"54faeb0a-283d-4b9e-fb1d-f6d5217b8c86","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## PUT YOUR CODE HERE:\n# Kiểm chứng chéo mô hình với các tham số tối ưu\nfrom sklearn.ensemble import  GradientBoostingRegressor\n\nmodel_lasso = GradientBoostingRegressor(n_estimators = grid_lasso.best_params_['n_estimators'], random_state = 0)\nscore = rmse_cv(model_lasso, train_lasso_selected, y)\nprint(\"Lasso Selection: Averaged base models score: {:.4f} ({:.4f})\\n\".format(score.mean(), score.std()))\n\nmodel_recursive = GradientBoostingRegressor(n_estimators = grid_recursive_ellimination.best_params_['n_estimators'], random_state = 0)\nscore = rmse_cv(model_recursive, train_recursive_ellimination_selected, y)\nprint(\"Recursive Ellimination Selection: Averaged base models score: {:.4f} ({:.4f})\\n\".format(score.mean(), score.std()))\n\nmodel_recursive = GradientBoostingRegressor(n_estimators = grid_recursive_addition.best_params_['n_estimators'], random_state = 0)\nscore = rmse_cv(model_recursive , train_recursive_addition_selected, y)\nprint(\"Recursive Addition Selection: Averaged base models score: {:.4f} ({:.4f})\\n\".format(score.mean(), score.std()))","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:08:31.676584Z","iopub.status.busy":"2022-06-23T07:08:31.676066Z","iopub.status.idle":"2022-06-23T07:08:49.872062Z","shell.execute_reply":"2022-06-23T07:08:49.870842Z","shell.execute_reply.started":"2022-06-23T07:08:31.67655Z"},"id":"FdC-umyau9Pc","outputId":"24759700-3a29-40ee-dc99-4e4a132ef456","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"- Bây giờ mô hình đã cho ra kết quả tốt hơn, và bạn có thể dùng mô hình này để đưa ra dự đoán trên tập dữ liệu test","metadata":{"id":"CniDAgqbu9Pc"}},{"cell_type":"code","source":"## PUT YOUR CODE HERE:\n# Đưa ra dự đoán trên tập test\nmodel_lasso = Lasso(alpha = grid_lasso.best_params_['n_estimators'], random_state = 0)\nmodel_lasso.fit(train_lasso_selected, y)\nmodel_lasso.predict(test_lasso_selected)","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:08:49.874496Z","iopub.status.busy":"2022-06-23T07:08:49.873829Z","iopub.status.idle":"2022-06-23T07:08:49.928705Z","shell.execute_reply":"2022-06-23T07:08:49.927386Z","shell.execute_reply.started":"2022-06-23T07:08:49.874453Z"},"id":"dmp3SqQYu9Pc","outputId":"feb8d0b5-5f54-4d36-ea35-7f53186747e6","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## PUT YOUR CODE HERE:\n# Đưa ra dự đoán trên tập test\nmodel_ellimination = GradientBoostingRegressor(n_estimators = grid_recursive_ellimination.best_params_['n_estimators'], random_state = 0)\nmodel_ellimination.fit(train_recursive_ellimination_selected, y)\nmodel_ellimination.predict(test_recursive_ellimination_selected)","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:08:49.932957Z","iopub.status.busy":"2022-06-23T07:08:49.931252Z","iopub.status.idle":"2022-06-23T07:08:50.953053Z","shell.execute_reply":"2022-06-23T07:08:50.95197Z","shell.execute_reply.started":"2022-06-23T07:08:49.93291Z"},"id":"6hOO0HqTu9Pd","outputId":"505fbbc4-add8-49c4-c560-93b2e812355c","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## PUT YOUR CODE HERE:\n# Đưa ra dự đoán trên tập test\nmodel_addition = GradientBoostingRegressor(n_estimators = grid_recursive_ellimination.best_params_['n_estimators'], random_state = 0)\nmodel_addition.fit(train_recursive_addition_selected, y)\nmodel_addition.predict(test_recursive_addition_selected)","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:08:50.955606Z","iopub.status.busy":"2022-06-23T07:08:50.954916Z","iopub.status.idle":"2022-06-23T07:08:51.243862Z","shell.execute_reply":"2022-06-23T07:08:51.242744Z","shell.execute_reply.started":"2022-06-23T07:08:50.955564Z"},"id":"Rot2V5Qn1cQq","outputId":"e2c918e9-b5db-4d93-f09c-b9eca0c31b56","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 4.3 Submit kết quả dự đoán của tập test lên Kaggle","metadata":{"id":"-XRCbX2ToyqL"}},{"cell_type":"code","source":"# Tạo file dùng để submit\nsub = pd.DataFrame()\nsub['Id'] = test_ID\nsub['SalePrice'] = model_lasso.predict(test_lasso_selected)\nsub.to_csv('submission_lasso_select.csv',index=False)","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:08:51.246073Z","iopub.status.busy":"2022-06-23T07:08:51.245398Z","iopub.status.idle":"2022-06-23T07:08:51.272726Z","shell.execute_reply":"2022-06-23T07:08:51.271448Z","shell.execute_reply.started":"2022-06-23T07:08:51.246031Z"},"id":"KNC_Cd2NoyqL","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Tạo file dùng để submit\nsub = pd.DataFrame()\nsub['Id'] = test_ID\nsub['SalePrice'] = model_ellimination.predict(test_recursive_ellimination_selected)\nsub.to_csv('submission_recuresive_ellimination.csv',index=False)","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:08:51.27553Z","iopub.status.busy":"2022-06-23T07:08:51.274732Z","iopub.status.idle":"2022-06-23T07:08:51.311899Z","shell.execute_reply":"2022-06-23T07:08:51.310567Z","shell.execute_reply.started":"2022-06-23T07:08:51.275489Z"},"id":"VfUmf1QzoyqM","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Tạo file dùng để submit\nsub = pd.DataFrame()\nsub['Id'] = test_ID\nsub['SalePrice'] = model_addition.predict(test_recursive_addition_selected)\nsub.to_csv('submission_recuresive_addition.csv',index=False)","metadata":{"execution":{"iopub.execute_input":"2022-06-23T07:08:51.314818Z","iopub.status.busy":"2022-06-23T07:08:51.314025Z","iopub.status.idle":"2022-06-23T07:08:51.342659Z","shell.execute_reply":"2022-06-23T07:08:51.34138Z","shell.execute_reply.started":"2022-06-23T07:08:51.314775Z"},"id":"N4O3xBNyoyqM","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{"id":"IJkaHStbu9Pd"},"execution_count":null,"outputs":[]}]}