{"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":"# Content\n1. [Bài toán](#1)\n1. [Mô tả dữ liệu](#2)\n1. [Phân tích dữ liệu](#3)\n1. [Khởi tạo đặc trưng](#4)\n1. [Chuẩn bị dữ liệu train và test](#5)\n1. [Huấn luyện](#6)\n1. [Kết quả](#7)","metadata":{}},{"cell_type":"markdown","source":"<a id=\"\"></a> <br>\n# 1. Bài toán\n","metadata":{}},{"cell_type":"markdown","source":"<p style=\"font-size:18px\"> Dự báo động đất là một trong những vấn đề quan trọng của khoa học vì những hậu quả tàn khốc của chúng. Những nghiên cứu hiện nay về vấn đề này sẽ thường tập trung vào ba câu hỏi: Khi nào ?, Ở đâu ? và Quy mô như thế nào ? </p>\n<p style=\"font-size:18px\"> Trong bài toán này, mục tiêu của ta là đi dự đoán khi nào động đất sẽ xảy ra. Cụ thể là dự đoán thời gian còn lại trước khi các trận động đất trong phòng thí nghiệm xảy ra từ dữ liệu địa chấn theo thời gian thực. Đây là một bài toán hết sức thực tế, vì nếu dự báo được càng sớm, càng chính xác thì ta sẽ có được những cảnh báo để giảm thiểu rủi ro. </p>\n","metadata":{}},{"cell_type":"markdown","source":"<a id=\"2\"></a> <br>\n# 2. Mô tả dữ liệu\n","metadata":{}},{"cell_type":"markdown","source":"<p style=\"font-size:18px\">\nDữ liệu được sử dụng cho việc đào tạo mô hình gồm 2 cột:</p>\n\n    \n1. `Acoustic_data`: <p style=\"font-size:18px\">là dữ liệu địa chấn (cường độ sóng thu được từ lòng đất) được mô tả dưới dạng kiểu số nguyên [int16] </p>\n2. `time_to_failure`: <p style=\"font-size:18px\">là thời gian mà trận động đất tiếp theo sẽ xảy ra trong phòng thí nghiệm (tính bằng giây) được mô tả dưới kiểu số thực [float64] </p>\n\n\n\n`train.csv`: <p style=\"font-size:18px\"> Trong mỗi lần thử nghiệm, dữ liệu địa chấn được và thời gian còn lại trước khi động đất xảy ra được đo trong 0.0375s với tần số ở 4MHz do đó sẽ có 150000 điểm dữ liệu cho mỗi phân đoạn đo (từ đây em sẽ gọi là 1 <i>segment</i> để không làm phức tạp ý đọc). File train là tập hợp gồm 629145480 tương đương với hơn 4194 segments.</p>\n\n<p style=\"font-size:18px\">\n    \n`test`:\n<p style=\"font-size:18px\">\nLà một folder gồm nhiều file nhỏ, mỗi file sẽ là dữ liệu địa chấn của 1 segment (gồm 150000 điểm dữ liệu) </p>\n\n`sample_submission.csv`:\n<p style=\"font-size:18px\">\nLà mẫu file submit của cuộc thi </p>","metadata":{}},{"cell_type":"markdown","source":"## 2.1. Đọc dữ liệu ","metadata":{}},{"cell_type":"markdown","source":"<p style=\"font-size:18px\"> Đầu tiên ta cần import những tư viện sẽ sử dụng trong notebook này</p>","metadata":{}},{"cell_type":"code","source":"import gc\nimport os\nimport time\nimport logging\nimport datetime\nimport warnings\nimport numpy as np\nimport pandas as pd\nimport seaborn as sns\nimport xgboost as xgb\nimport lightgbm as lgb\nfrom scipy import stats\nfrom tqdm import tqdm_notebook\nimport matplotlib.pyplot as plt\nfrom sklearn.preprocessing import StandardScaler\nfrom sklearn.linear_model import LinearRegression\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import explained_variance_score","metadata":{"execution":{"iopub.status.busy":"2021-06-11T04:03:15.958912Z","iopub.execute_input":"2021-06-11T04:03:15.959421Z","iopub.status.idle":"2021-06-11T04:03:18.799319Z","shell.execute_reply.started":"2021-06-11T04:03:15.959310Z","shell.execute_reply":"2021-06-11T04:03:18.798091Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<p style=\"font-size:18px\"> Cài đặt các đường dẫn đến bộ dữ liệu</p>","metadata":{}},{"cell_type":"code","source":"test_path = '../input/LANL-Earthquake-Prediction/test'\nsubmission_path = '../input/LANL-Earthquake-Prediction/sample_submission.csv'\ntrain_path = '../input/LANL-Earthquake-Prediction/train.csv'","metadata":{"execution":{"iopub.status.busy":"2021-06-11T04:03:18.801346Z","iopub.execute_input":"2021-06-11T04:03:18.801842Z","iopub.status.idle":"2021-06-11T04:03:18.807585Z","shell.execute_reply.started":"2021-06-11T04:03:18.801794Z","shell.execute_reply":"2021-06-11T04:03:18.805951Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 2.2. Biểu diễn file train","metadata":{}},{"cell_type":"markdown","source":"<p style=\"font-size:18px\"> Do file train khá nặng (9.7GB) nên thời gian đọc lâu và tốn nhiều RAM. Em sử dụng bộ thư viện Pandas để hỗ trợ đọc ghi file CSV, train_df sau khi chạy xong kết quả sẽ là một data frame</p>","metadata":{}},{"cell_type":"code","source":"%%time\ntrain_df = pd.read_csv(train_path,\n                       dtype={'acoustic_data': np.int16, 'time_to_failure': np.float64})","metadata":{"execution":{"iopub.status.busy":"2021-06-11T04:03:18.810504Z","iopub.execute_input":"2021-06-11T04:03:18.810990Z","iopub.status.idle":"2021-06-11T04:06:55.336949Z","shell.execute_reply.started":"2021-06-11T04:03:18.810940Z","shell.execute_reply":"2021-06-11T04:06:55.335627Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<p style=\"font-size:18px\"> 5 dòng đầu tiên của file train </p>","metadata":{}},{"cell_type":"code","source":"train_df.head()","metadata":{"execution":{"iopub.status.busy":"2021-06-11T04:06:55.339577Z","iopub.execute_input":"2021-06-11T04:06:55.339966Z","iopub.status.idle":"2021-06-11T04:06:55.374740Z","shell.execute_reply.started":"2021-06-11T04:06:55.339922Z","shell.execute_reply":"2021-06-11T04:06:55.373421Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<p style=\"font-size:18px\"> Kích cỡ của train_df. Bộ dữ liệu có hơn 600 triệu dòng và 2 cột. Đây là những dữ liệu thô thu thập được từ các máy trong phòng thí nghiệm. Em sẽ cần bước tạo ra các feature từ bộ dữ liệu này để làm dữ liệu huấn luyện mô hình </p>","metadata":{}},{"cell_type":"code","source":"train_df.shape","metadata":{"execution":{"iopub.status.busy":"2021-06-11T04:06:55.376657Z","iopub.execute_input":"2021-06-11T04:06:55.377225Z","iopub.status.idle":"2021-06-11T04:06:55.385181Z","shell.execute_reply.started":"2021-06-11T04:06:55.377174Z","shell.execute_reply":"2021-06-11T04:06:55.384047Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<p style=\"font-size:18px\"> Do pandas không thể hiện toàn bộ các chữ số sau dấu phẩy, nên ta sẽ xem đến 10 chữ số sau dấu phẩy bằng cách làm tròn như sau để thấy được sự thay đổi của thời gian </p>\n","metadata":{}},{"cell_type":"code","source":"pd.options.display.precision = 11\ntrain_df.head()","metadata":{"execution":{"iopub.status.busy":"2021-06-11T04:06:55.386519Z","iopub.execute_input":"2021-06-11T04:06:55.386845Z","iopub.status.idle":"2021-06-11T04:06:55.406953Z","shell.execute_reply.started":"2021-06-11T04:06:55.386812Z","shell.execute_reply":"2021-06-11T04:06:55.405938Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Nhận xét qua về train_df\n* <p style=\"font-size:18px\"> train_df là data frame có lượng dữ liệu rất lớn nhưng lại chỉ là dữ liệu thô lấy từ thực nghiệm. </p>\n* <p style=\"font-size:18px\"> Thời gian <b>time_to_failure</b> giảm dần trong mỗi segment.  </p>\n","metadata":{}},{"cell_type":"markdown","source":"## 2.3. Biểu diễn file test","metadata":{}},{"cell_type":"markdown","source":"<p style=\"font-size:18px\"> Ta có thể thấy 1 file test sẽ gồm 150000 hàng tương ứng với 1 phân đoạn thử nghiệm, nhiệm vụ của ta là dự đoán 150000 mốc thời gian <b>time_to_failure</b> cho mỗi điểm dữ liệu đó </p>\n","metadata":{}},{"cell_type":"code","source":"sample_test_df = pd.read_csv(test_path + \"/seg_00030f.csv\")\nsample_test_df","metadata":{"execution":{"iopub.status.busy":"2021-06-11T04:06:55.408499Z","iopub.execute_input":"2021-06-11T04:06:55.408803Z","iopub.status.idle":"2021-06-11T04:06:55.458455Z","shell.execute_reply.started":"2021-06-11T04:06:55.408775Z","shell.execute_reply":"2021-06-11T04:06:55.457224Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id=\"3\"></a> <br>\n# 3. Phân tích dữ liệu ","metadata":{}},{"cell_type":"markdown","source":"## 3.1. Xu hướng của acoustic_data và time_to_failure trong 1% dữ liệu\n<p style=\"font-size:18px\"> Để xem được xu hướng, đồ thị biểu diễn của dữ liệu, em sử dụng bộ thư viện <b>matplotlib</b>. Đây là bộ thư viện hỗ trợ vẽ biểu đồ dữ liệu </p> \n<p style=\"font-size:18px\"> Ở đây em vẽ đồng thời 2 loại dữ liệu <i>acoustic_data</i> và <i>time_to_failure</i> trong cùng một đồ thị để có thể nhìn thấy được sự tương quan với nhau </p>\n<p style=\"font-size:18px\"> values[::100] là slice, nghĩa là em sẽ lấy các giá trị cách nhau 100 bước nhảy, bắt đầu từ giá trị 0. Việc này nhằm đảm bảo lấy được 1% dữ liệu, đồng thời cũng tạo được sự bao quát toàn bộ dữ liệu thay vì việc lấy 6 triệu dữ liệu đầu tiên</p>","metadata":{}},{"cell_type":"code","source":"fig, ax1 = plt.subplots(figsize=(16, 8))\n\nplt.title(\"Xu hướng của acoustic_data và time_to_failure trong 1% dữ liệu (mỗi điểm cách nhau 100 bước nhảy)\")\nplt.plot(train_df.acoustic_data.values[::100], color='b')\nax1.set_ylabel('acoustic_data', color='b')\nplt.legend(['acoustic_data'])\n\nax2 = ax1.twinx()\nplt.plot(train_df.time_to_failure.values[::100], color='r')\nax2.set_ylabel('time_to_failure', color='r')\nplt.legend(['time_to_failure'], loc=(0.875, 0.9))\n","metadata":{"execution":{"iopub.status.busy":"2021-06-11T04:06:55.462243Z","iopub.execute_input":"2021-06-11T04:06:55.462718Z","iopub.status.idle":"2021-06-11T04:07:00.267758Z","shell.execute_reply.started":"2021-06-11T04:06:55.462681Z","shell.execute_reply":"2021-06-11T04:07:00.266972Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Nhận xét\n<p style=\"font-size:18px\"> Ta có thể thấy mỗi khi <b>time_to_failure</b> trở về 0 đồng nghĩa với xảy ra động đất thì giá trị <b>acoustic_data</b> cũng có sự thay đổi lớn ngay trước đó. <br>Một điểm đặc biệt nữa, khi nhìn vào biểu đồ 1% data này (sẽ lấy các giá trị cách nhau 100 bước nhảy) thì ta có thể phán đoán rằng bộ dữ liệu train có 16 lần xảy ra động đất. </p>\n","metadata":{}},{"cell_type":"markdown","source":"## 3.2. Xu hướng của time_to_failure và acoustic_data trong 7.5 triệu dòng dữ liệu (~50 segment) đầu tiên \n<p style=\"font-size:18px\"> Dựa theo biểu đồ trên, em ước lượng được trong khoảng 10tr dữ liệu đầu sẽ có 1 lần xảy ra động đất. Do đó em sẽ quan sát 7.5 triệu dòng dữ liệu đầu tiền (tương đương với 50 segment). </p>\n<p style=\"font-size:18px\"> 2 đồ thị dưới đây sẽ có cùng khoảng giá trị theo trục x. Nghĩa là tại 1 vị trí ở <b>time_to_failure</b>, ta gióng xuống đồ thị dưới sẽ được giá trị <b>acoustic_data</b> tương ứng. </p>","metadata":{}},{"cell_type":"code","source":"fig, ax = plt.subplots(2,1, figsize=(20,12))\nax[0].plot(train_df.index.values[:7500000], train_df.time_to_failure.values[:7500000], c=\"red\")\nax[0].set_title(\"Đồ thị của time_to_failure trong 7.5 triệu hàng đầu tiên\")\nax[0].set_ylabel(\"time_to_failure (ms)\")\n\nax[1].plot(train_df.index.values[:7500000], train_df.acoustic_data.values[:7500000], c=\"green\")\nax[1].set_title(\"Đồ thị của acoustic_data trong 7.5 triệu hàng đầu tiên\")\nax[1].set_ylabel(\"acoustic_data\")","metadata":{"execution":{"iopub.status.busy":"2021-06-11T04:07:00.269428Z","iopub.execute_input":"2021-06-11T04:07:00.270329Z","iopub.status.idle":"2021-06-11T04:07:05.003258Z","shell.execute_reply.started":"2021-06-11T04:07:00.270276Z","shell.execute_reply":"2021-06-11T04:07:05.002069Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Nhận xét\n\n<p style=\"font-size:18px\"> Quan sát trong 2 biểu đồ trên ta có thể thấy, trước khi trận động đất xảy ra (là khoảng thời gian <b>time_to_failure</b> đạt 0) thì sẽ có những thay đổi lớn trước đó ở giá trị địa chấn <b>acoustic_data</b> và sau đó là một khoảng thời gian ít biến động hơn bình thường </p>\n","metadata":{}},{"cell_type":"markdown","source":"## 3.3. Phân tích time_to_failure trong 150000 giá trị đầu","metadata":{}},{"cell_type":"markdown","source":"<p style=\"font-size:18px\"> Vậy giờ ta cùng xem thử trong 150000 điểm dữ liệu đầu (1 segment), xu hướng của <strong>time_to_failure</strong> diễn ra như thế nào </p>","metadata":{}},{"cell_type":"code","source":"plt.subplots(figsize=(25,8))\n\nplt.plot(train_df.index.values[:150000], train_df.time_to_failure.values[:150000], c=\"red\")\nplt.ylabel(\"Time_to_failure (ms)\")\nplt.title(\"Sự thay đổi của time_to_failure trong 150000 điểm dữ liệu đầu\")\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2021-06-11T04:07:05.004753Z","iopub.execute_input":"2021-06-11T04:07:05.005141Z","iopub.status.idle":"2021-06-11T04:07:05.253102Z","shell.execute_reply.started":"2021-06-11T04:07:05.005103Z","shell.execute_reply":"2021-06-11T04:07:05.251867Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Nhận xét\n<p style=\"font-size:18px\"> Giá trị của <strong>time_to_failure</strong> có xu hướng giảm dần theo từng bậc thang, liệu những bước giảm đó có đều nhau và những đường ngang có thật sự là không thay đổi giá trị ? </p>\n<p style=\"font-size:18px\"> Em sẽ làm rõ vấn đề này bằng cách vẽ ra biểu đồ thể hiện sự chênh lệch giữa các giá trị <b>time_to_failure</b> liền nhau và xu hướng biến động của 1 đường ngang đầu tiên. </p>","metadata":{}},{"cell_type":"code","source":"fig, ax = plt.subplots(2,1,figsize=(25,10))\n\nax[0].plot(train_df.index.values[0:149999], np.diff(train_df.time_to_failure.values[0:150000]), c=\"r\")\nax[0].set_ylabel(\"Độ lớn các bước giảm\")\nax[0].set_title(\"Chênh lệch độ lớn giữa các giá trị time_to_failure\");\n\nax[1].plot(train_df.index.values[0:4000], train_df.time_to_failure.values[0:4000], c=\"r\")\nax[1].set_ylabel(\"time_to_failure (ms)\")\nax[1].set_title(\"Xu hướng của time_to_failure trong một đường ngang\");","metadata":{"execution":{"iopub.status.busy":"2021-06-11T04:07:05.256797Z","iopub.execute_input":"2021-06-11T04:07:05.257167Z","iopub.status.idle":"2021-06-11T04:07:05.652246Z","shell.execute_reply.started":"2021-06-11T04:07:05.257133Z","shell.execute_reply":"2021-06-11T04:07:05.651007Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Nhận xét\n<p style=\"font-size:18px\"> Qua 2 biểu đồ trên ta có thể thấy, những bước nhảy trong biểu đồ <b><i>\"Sự thay đổi của time_to_failure trong 150000 điểm dữ liệu đầu\"</i></b> là <strong>không đều nhau</strong>. <br> Đồng thời, giá trị của time_to_failure trên từng đường ngang có xu hướng <strong>giảm tuyến tính</strong> </p>\n","metadata":{"execution":{"iopub.status.busy":"2021-06-09T23:24:51.410791Z","iopub.execute_input":"2021-06-09T23:24:51.411321Z","iopub.status.idle":"2021-06-09T23:24:51.417286Z","shell.execute_reply.started":"2021-06-09T23:24:51.411289Z","shell.execute_reply":"2021-06-09T23:24:51.416055Z"}}},{"cell_type":"markdown","source":"## 3.4. Mật độ của acoustic_data trong 7500000 giá trị đầu","metadata":{}},{"cell_type":"markdown","source":"<p style=\"font-size:18px\"> Em tạo ra 1 data frame gồm 7.5 triệu dòng dữ liệu đầu tiên để quan sát được mật độ cũng như mô tả của nó bằng hàm describe() được cung cấp bởi pandas </p>\n","metadata":{}},{"cell_type":"code","source":"train_7m5 = train_df[:7500000]\ntrain_7m5.describe()","metadata":{"execution":{"iopub.status.busy":"2021-06-11T04:07:05.654025Z","iopub.execute_input":"2021-06-11T04:07:05.654525Z","iopub.status.idle":"2021-06-11T04:07:06.496790Z","shell.execute_reply.started":"2021-06-11T04:07:05.654480Z","shell.execute_reply":"2021-06-11T04:07:06.495744Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<p style=\"font-size:18px\"> Biểu đồ dưới đây thể hiện mật độ phân bố của các dữ liệu trong train_7m5 </p>\n","metadata":{}},{"cell_type":"code","source":"train_7m5['acoustic_data'].hist(bins=30, range = [-15,15], align='mid')\nplt.title(\"Mật độ của acoustic_data trong 7500000 giá trị đầu\")\nplt.xlabel('acoustic data')\nplt.ylabel('examples')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2021-06-11T04:07:06.498255Z","iopub.execute_input":"2021-06-11T04:07:06.498572Z","iopub.status.idle":"2021-06-11T04:07:06.882883Z","shell.execute_reply.started":"2021-06-11T04:07:06.498542Z","shell.execute_reply":"2021-06-11T04:07:06.881540Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Nhận xét\n<p style=\"font-size:18px\"> Trong 7.5 triệu điểm dữ liệu đầu, giá trị <b>acoustic_data</b> phần lớn tập trung tại khoảng 0-10. <br>Đây có thể là cơ sở để ta drop đi những giá trị nhiễu </p>\n","metadata":{}},{"cell_type":"markdown","source":"## 3.5. Mô tả một vài file dữ liệu test","metadata":{}},{"cell_type":"code","source":"nameOfFileTest = ['seg_0012b5.csv', 'seg_00030f.csv', 'seg_00184e.csv']\nfor name in nameOfFileTest:\n    plt.subplots(figsize=(16, 8))\n    seg = pd.read_csv(test_path  + '/' + name)\n    plt.plot(seg.acoustic_data.values, c=\"green\")\n    plt.ylabel(\"acoustic_data\")\n    plt.title(\"Test \" + name);\n    plt.show()\n","metadata":{"execution":{"iopub.status.busy":"2021-06-11T04:07:06.884889Z","iopub.execute_input":"2021-06-11T04:07:06.885574Z","iopub.status.idle":"2021-06-11T04:07:07.819768Z","shell.execute_reply.started":"2021-06-11T04:07:06.885511Z","shell.execute_reply":"2021-06-11T04:07:07.818416Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Nhận xét:\n<p style=\"font-size:18px\"> Mỗi file test là một segment gồm 150000 điểm dữ liệu. Ta có thể dự đoán trong mỗi file test trong 3 file trên đều có xảy ra động đất do có một sự thay đổi giá trị mạnh bất thường tại 1 điểm </p>","metadata":{}},{"cell_type":"markdown","source":"<a id=\"4\"></a> <br>\n# 4. Khởi tạo đặc trưng","metadata":{}},{"cell_type":"markdown","source":"<p style=\"font-size:18px\"> Do lượng data quá lớn (hơn 600 triệu dòng), vậy nên em chia nhỏ data thành các segments với size là 150000 dòng dữ liệu. Điều này cũng phù hợp khi huấn luyện và dự đoán vì độ lớn của một file test cũng là 150000 dòng.</p>","metadata":{}},{"cell_type":"code","source":"rows = 150000\nsegments = int(np.floor(train_df.shape[0] / rows))\nprint(\"Số lượng segments là: \", segments)","metadata":{"execution":{"iopub.status.busy":"2021-06-11T04:07:07.821724Z","iopub.execute_input":"2021-06-11T04:07:07.822223Z","iopub.status.idle":"2021-06-11T04:07:07.830050Z","shell.execute_reply.started":"2021-06-11T04:07:07.822170Z","shell.execute_reply":"2021-06-11T04:07:07.828250Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<p style=\"font-size:18px\"> Khởi tạo giá trị X_train và y_train. Trong đó số lượng index là số lượng segments, y_train có 1 cột dữ liệu là <i>time_to_failure</i> còn đặc trưng của X_train sẽ được khởi tạo sau </p>","metadata":{}},{"cell_type":"code","source":"X_train = pd.DataFrame(index=range(segments), dtype=np.float64)\ny_train = pd.DataFrame(index=range(segments), dtype=np.float64, columns=['time_to_failure'])","metadata":{"execution":{"iopub.status.busy":"2021-06-11T04:07:07.831858Z","iopub.execute_input":"2021-06-11T04:07:07.832408Z","iopub.status.idle":"2021-06-11T04:07:07.850508Z","shell.execute_reply.started":"2021-06-11T04:07:07.832358Z","shell.execute_reply":"2021-06-11T04:07:07.849492Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Nhận xét\n<p style=\"font-size:18px\"> Dữ liệu <b>acoustic_data</b> là dữ liệu thô thu thập được từ máy đo sóng địa chất từ lòng đất, do đó ta không thể sử dụng nó như một đặc trưng để huấn luyện mô hình. Vì vậy, em tạo ra các đặc trưng từ dữ liệu thô đó và xem xét lựa chọn đặc trưng sử dụng cho việc huấn luyện mô hình. </p>\n<p style=\"font-size:18px\"> Các đặc trưng em khởi tạo bao gồm những đặc trưng cơ bản như mean, std, max, min, sum, quantile,.. của mỗi cả segment hoặc của 10000, 50000 giá trị. </p>\n<p style=\"font-size:18px\"> Ngoài ra còn có đặc trưng do biến đổi từ miền thời gian về miền tần số bằng <b>FFT (Fast Fourier Transform)</b> </p>","metadata":{}},{"cell_type":"code","source":"xc = pd.Series(seg['acoustic_data'].values)\ndef feature_generate(df, x, seg):\n    df.loc[seg, 'ave'] = x.mean() \n    df.loc[seg, 'std'] = x.std()  \n    df.loc[seg, 'max'] = x.max()\n    df.loc[seg, 'min'] = x.min()\n    df.loc[seg, 'sum'] = x.sum()\n    df.loc[seg, 'mad'] = x.mad()\n    df.loc[seg, 'skew'] = x.skew()\n    \n    df.loc[seg, 'abs_min'] = np.abs(x).min()\n    df.loc[seg, 'abs_max'] = np.abs(x).max()\n    df.loc[seg, 'abs_mean'] = np.abs(x).mean()\n    df.loc[seg, 'abs_std'] = np.abs(x).std()\n    \n    df.loc[seg, 'q01'] = np.quantile(x,0.01)\n    df.loc[seg, 'q05'] = np.quantile(x,0.05)\n    df.loc[seg, 'q95'] = np.quantile(x,0.95)\n    df.loc[seg, 'q99'] = np.quantile(x,0.99)\n    \n    df.loc[seg, 'abs_q01'] = np.quantile(np.abs(x), 0.01)\n    df.loc[seg, 'abs_q05'] = np.quantile(np.abs(x), 0.05)\n    df.loc[seg, 'abs_q95'] = np.quantile(np.abs(x), 0.95)\n    df.loc[seg, 'abs_q99'] = np.quantile(np.abs(x), 0.99)\n    \n    df.loc[seg, 'average_first_10000'] = x[:10000].mean()\n    df.loc[seg, 'average_last_10000']  =  x[-10000:].mean()\n    df.loc[seg, 'average_first_50000'] = x[:50000].mean()\n    df.loc[seg, 'average_last_50000'] = x[-50000:].mean()\n    \n    df.loc[seg, 'std_first_10000'] = x[:10000].std()\n    df.loc[seg, 'std_last_10000']  =  x[-10000:].std()\n    df.loc[seg, 'std_first_50000'] = x[:50000].std()\n    df.loc[seg, 'std_last_50000']  =  x[-50000:].std()\n    \n    df.loc[seg, 'std_first_10000'] = x[:10000].min()\n    df.loc[seg, 'std_last_10000']  =  x[-10000:].min()\n    df.loc[seg, 'std_first_50000'] = x[:50000].min()\n    df.loc[seg, 'std_last_50000']  =  x[-50000:].min()\n    \n    df.loc[seg, 'std_first_10000'] = x[:10000].max()\n    df.loc[seg, 'std_last_10000']  =  x[-10000:].max()\n    df.loc[seg, 'std_first_50000'] = x[:50000].max()\n    df.loc[seg, 'std_last_50000']  =  x[-50000:].max()\n    \n    df.loc[seg, '10q'] = np.percentile(x, 0.10)\n    df.loc[seg, '25q'] = np.percentile(x, 0.25)\n    df.loc[seg, '50q'] = np.percentile(x, 0.50)\n    df.loc[seg, '75q'] = np.percentile(x, 0.75)\n    df.loc[seg, '90q'] = np.percentile(x, 0.90)\n    \n    zc = np.fft.fft(xc)\n    realFFT = np.real(zc)\n    imagFFT = np.imag(zc)\n    df.loc[seg, 'Rmean'] = realFFT.mean()\n    df.loc[seg, 'Rstd'] = realFFT.std()\n    df.loc[seg, 'Rmax'] = realFFT.max()\n    df.loc[seg, 'Rmin'] = realFFT.min()\n    df.loc[seg, 'Imean'] = imagFFT.mean()\n    df.loc[seg, 'Istd'] = imagFFT.std()\n    df.loc[seg, 'Imax'] = imagFFT.max()\n    df.loc[seg, 'Imin'] = imagFFT.min()\n    df.loc[seg, 'Rmean_last_5000'] = realFFT[-5000:].mean()\n    df.loc[seg, 'Rstd__last_5000'] = realFFT[-5000:].std()\n    df.loc[seg, 'Rmax_last_5000'] = realFFT[-5000:].max()\n    df.loc[seg, 'Rmin_last_5000'] = realFFT[-5000:].min()\n    df.loc[seg, 'Rmean_last_15000'] = realFFT[-15000:].mean()\n    df.loc[seg, 'Rstd_last_15000'] = realFFT[-15000:].std()\n    df.loc[seg, 'Rmax_last_15000'] = realFFT[-15000:].max()\n    df.loc[seg, 'Rmin_last_15000'] = realFFT[-15000:].min()\n    \n    for w in [10, 100, 1000, 10000]:\n        x_roll_abs_mean = x.abs().rolling(w).mean().dropna().values\n        x_roll_mean = x.rolling(w).mean().dropna().values\n        x_roll_std = x.rolling(w).std().dropna().values\n        x_roll_min = x.rolling(w).min().dropna().values\n        x_roll_max = x.rolling(w).max().dropna().values\n        \n        df.loc[seg, 'ave_roll_std_' + str(w)] = x_roll_std.mean()\n        df.loc[seg, 'std_roll_std_' + str(w)] = x_roll_std.std()\n        df.loc[seg, 'max_roll_std_' + str(w)] = x_roll_std.max()\n        df.loc[seg, 'min_roll_std_' + str(w)] = x_roll_std.min()\n        df.loc[seg, 'q01_roll_std_' + str(w)] = np.quantile(x_roll_std, 0.01)\n        df.loc[seg, 'q05_roll_std_' + str(w)] = np.quantile(x_roll_std, 0.05)\n        df.loc[seg, 'q10_roll_std_' + str(w)] = np.quantile(x_roll_std, 0.10)\n        df.loc[seg, 'q95_roll_std_' + str(w)] = np.quantile(x_roll_std, 0.95)\n        df.loc[seg, 'q99_roll_std_' + str(w)] = np.quantile(x_roll_std, 0.99)\n        \n        df.loc[seg, 'ave_roll_mean_' + str(w)] = x_roll_mean.mean()\n        df.loc[seg, 'std_roll_mean_' + str(w)] = x_roll_mean.std()\n        df.loc[seg, 'max_roll_mean_' + str(w)] = x_roll_mean.max()\n        df.loc[seg, 'min_roll_mean_' + str(w)] = x_roll_mean.min()\n        df.loc[seg, 'q05_roll_mean_' + str(w)] = np.quantile(x_roll_mean, 0.05)\n        df.loc[seg, 'q95_roll_mean_' + str(w)] = np.quantile(x_roll_mean, 0.95)\n        \n        df.loc[seg, 'ave_roll_abs_mean_' + str(w)] = x_roll_abs_mean.mean()\n        df.loc[seg, 'std_roll_abs_mean_' + str(w)] = x_roll_abs_mean.std()\n        df.loc[seg, 'q05_roll_abs_mean_' + str(w)] = np.quantile(x_roll_abs_mean, 0.05)\n        df.loc[seg, 'q95_roll_abs_mean_' + str(w)] = np.quantile(x_roll_abs_mean, 0.95)\n        \n        df.loc[seg, 'std_roll_min_' + str(w)] = x_roll_min.std()\n        df.loc[seg, 'max_roll_min_' + str(w)] = x_roll_min.max()\n        df.loc[seg, 'q05_roll_min_' + str(w)] = np.quantile(x_roll_min, 0.05)\n        df.loc[seg, 'q95_roll_min_' + str(w)] = np.quantile(x_roll_min, 0.95)\n\n        df.loc[seg, 'std_roll_max_' + str(w)] = x_roll_max.std()\n        df.loc[seg, 'min_roll_max_' + str(w)] = x_roll_max.min()\n        df.loc[seg, 'q05_roll_max_' + str(w)] = np.quantile(x_roll_max, 0.05)\n        df.loc[seg, 'q95_roll_max_' + str(w)] = np.quantile(x_roll_max, 0.95)\n    return df","metadata":{"execution":{"iopub.status.busy":"2021-06-11T04:07:07.852190Z","iopub.execute_input":"2021-06-11T04:07:07.852963Z","iopub.status.idle":"2021-06-11T04:07:07.896081Z","shell.execute_reply.started":"2021-06-11T04:07:07.852910Z","shell.execute_reply":"2021-06-11T04:07:07.895122Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<p style=\"font-size:18px\"> Ta cùng tạo ra các đặc trưng cho X_train bằng cách truyền lần lượt các segment vào hàm feature_generate vừa tạo ở trên. </p>","metadata":{}},{"cell_type":"code","source":"for s in range(segments):\n    seg = train_df.iloc[s*150000:s*150000+150000]\n    x = pd.Series(seg['acoustic_data'].values)\n    y = seg['time_to_failure'].values[-1]\n    y_train.loc[s, 'time_to_failure'] = y\n    X_train = feature_generate(X_train,x,s)","metadata":{"execution":{"iopub.status.busy":"2021-06-11T04:07:07.897769Z","iopub.execute_input":"2021-06-11T04:07:07.898478Z","iopub.status.idle":"2021-06-11T04:26:05.745601Z","shell.execute_reply.started":"2021-06-11T04:07:07.898437Z","shell.execute_reply":"2021-06-11T04:26:05.744493Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<p style=\"font-size:18px\"> Cùng xem lại X_train sau khi đã được khởi tạo thêm các đặc trưng </p>","metadata":{}},{"cell_type":"code","source":"X_train","metadata":{"execution":{"iopub.status.busy":"2021-06-11T04:26:05.747207Z","iopub.execute_input":"2021-06-11T04:26:05.747521Z","iopub.status.idle":"2021-06-11T04:26:05.802571Z","shell.execute_reply.started":"2021-06-11T04:26:05.747490Z","shell.execute_reply":"2021-06-11T04:26:05.801488Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<p style=\"font-size:18px\"> Mô tả sơ lược về X_train. Sau khi xem qua, nếu hàng hay cột nào thiếu data hoặc data không dùng được ta sẽ drop đi để tránh gây nhiễu mô hình </p>","metadata":{}},{"cell_type":"code","source":"X_train.describe()","metadata":{"execution":{"iopub.status.busy":"2021-06-11T04:26:05.803880Z","iopub.execute_input":"2021-06-11T04:26:05.804215Z","iopub.status.idle":"2021-06-11T04:26:06.193509Z","shell.execute_reply.started":"2021-06-11T04:26:05.804182Z","shell.execute_reply":"2021-06-11T04:26:06.192407Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<p style=\"font-size:18px\"> Sau khi tạo xong X_train, y_train, ta cùng xem độ tương quan giữa 2 tập này. Dưới đây là hàm plot_feature, để mô tả sự tưởng quan của từng feature của X so với y_train. Đặc trưng nào không phù hợp ta sẽ loại bỏ </p>","metadata":{}},{"cell_type":"code","source":"def plot_feature(feature, X=X_train):\n    fig, ax = plt.subplots(figsize=(20, 8)) \n    ax.set_xlabel(feature)\n    ax.set_ylabel('time_to_failure')\n    plt.title('{} - time_to_falure correlation'.format(feature), color='r')\n    plt.scatter(x = X[feature], y = y_train)","metadata":{"execution":{"iopub.status.busy":"2021-06-11T04:26:06.194859Z","iopub.execute_input":"2021-06-11T04:26:06.195179Z","iopub.status.idle":"2021-06-11T04:26:06.201093Z","shell.execute_reply.started":"2021-06-11T04:26:06.195146Z","shell.execute_reply":"2021-06-11T04:26:06.200082Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<p style=\"font-size:18px\"> Vẽ biểu đồ mô tả sự tương quan giữa các đặc trưng của X_train so với y_train </p>","metadata":{}},{"cell_type":"code","source":"for feature in X_train.columns:\n    plot_feature(feature)","metadata":{"execution":{"iopub.status.busy":"2021-06-11T04:26:06.202735Z","iopub.execute_input":"2021-06-11T04:26:06.203123Z","iopub.status.idle":"2021-06-11T04:26:41.064292Z","shell.execute_reply.started":"2021-06-11T04:26:06.203081Z","shell.execute_reply":"2021-06-11T04:26:41.063129Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id=\"5\"></a> <br>\n# 5. Chuẩn bị dữ liệu train và test","metadata":{}},{"cell_type":"markdown","source":"## 5.1. Dữ liệu để train","metadata":{}},{"cell_type":"markdown","source":"### Nhận xét:\n<p style=\"font-size:18px\"> Qua những gì được biểu diễn trên đồ thị, có 2 đồ thị của <b>abs_min</b> và <b>abs_q01</b> là chỉ toàn giá trị 0 nên ta sẽ loại bỏ 2 đặc trưng này. </p>\n<p style=\"font-size:18px\"> Ngoài ra còn có các đặc trưng mà đồ thị tương quan không thể hiện được thông tin gì (không phải linear cũng không phải non-linear) nên em cũng bỏ những đặc trưng này để tránh làm nhiễu dữ liệu.  </p>","metadata":{}},{"cell_type":"code","source":"\nX_train = X_train.drop(columns=['abs_min', 'abs_q01', 'q05_roll_abs_mean_10000', 'q95_roll_mean_10000', 'q05_roll_mean_10000', 'ave_roll_mean_10000','q05_roll_abs_mean_1000', \n                                'ave_roll_mean_1000', 'q05_roll_abs_mean_100', 'ave_roll_mean_100', 'min_roll_std_100', 'ave_roll_mean_10', \n                                'average_first_50000', 'average_last_50000', 'average_first_10000', 'average_last_10000', 'sum', 'ave'])","metadata":{"_kg_hide-output":true,"execution":{"iopub.status.busy":"2021-06-11T04:26:41.068382Z","iopub.execute_input":"2021-06-11T04:26:41.068735Z","iopub.status.idle":"2021-06-11T04:26:41.083107Z","shell.execute_reply.started":"2021-06-11T04:26:41.068705Z","shell.execute_reply":"2021-06-11T04:26:41.081902Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<p style=\"font-size:18px\"> X_train sau khi bỏ các đặc trưng nhiễu còn lại 138 đặc trưng và 4194 hàng tương ứng 4194 segment. </p>","metadata":{}},{"cell_type":"code","source":"X_train","metadata":{"execution":{"iopub.status.busy":"2021-06-11T04:26:41.085217Z","iopub.execute_input":"2021-06-11T04:26:41.085654Z","iopub.status.idle":"2021-06-11T04:26:41.150910Z","shell.execute_reply.started":"2021-06-11T04:26:41.085619Z","shell.execute_reply":"2021-06-11T04:26:41.149865Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Nhận xét\n<p style=\"font-size:18px\"> Do các đặc trưng đang được biểu diễn bởi những miền giá trị khác nhau, vì vậy em sẽ chuẩn hoá chúng về cùng 1 miền giá trị. Việc các dữ liệu huấn luyện và test thuộc cùng một miền giá trị sẽ tốt hơn cho mô hình trong việc học cũng như việc dự đoán.</p>\n<p style=\"font-size:18px\"> Em sử dụng thư viện <b>Standard Scaler</b> để giải quyết vấn đề này </p>","metadata":{}},{"cell_type":"code","source":"scaler = StandardScaler()\nscaler.fit(X_train)\nscaled_X_train = pd.DataFrame(scaler.transform(X_train), columns=X_train.columns)","metadata":{"execution":{"iopub.status.busy":"2021-06-11T04:26:41.152579Z","iopub.execute_input":"2021-06-11T04:26:41.153016Z","iopub.status.idle":"2021-06-11T04:26:41.177555Z","shell.execute_reply.started":"2021-06-11T04:26:41.152970Z","shell.execute_reply":"2021-06-11T04:26:41.176502Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<p style=\"font-size:18px\"> Đây là X_train sau khi đã được chuẩn hoá.  </p>","metadata":{}},{"cell_type":"code","source":"scaled_X_train","metadata":{"execution":{"iopub.status.busy":"2021-06-11T04:26:41.181191Z","iopub.execute_input":"2021-06-11T04:26:41.181544Z","iopub.status.idle":"2021-06-11T04:26:41.218544Z","shell.execute_reply.started":"2021-06-11T04:26:41.181511Z","shell.execute_reply":"2021-06-11T04:26:41.217382Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 5.2. Dữ liệu để test","metadata":{}},{"cell_type":"markdown","source":"<p style=\"font-size:18px\"> Đây là dữ liệu ở folder test dùng để submit cho bài toán. Dữ liệu để validate cho mô hình em sẽ chia khi huấn luyện bằng KFold </p>\n<p style=\"font-size:18px\"> Đọc file submission và tạo X_test có cấu trúc bằng số cột của X_train. Còn số hàng sẽ ứng với số file test. <br>\n    Mỗi một file test em sẽ coi là 1 hàng của X_test và lại tạo feature từ 150000 điểm dữ liệu như cách làm với X_train rồi thêm hàng đó vào X_test </p>","metadata":{}},{"cell_type":"code","source":"submission = pd.read_csv(submission_path, index_col='seg_id')\nX_test = pd.DataFrame(columns=scaled_X_train.columns, dtype=np.float64, index=submission.index)\nfor s in X_test.index:\n    seg = pd.read_csv(test_path + '/' + s + '.csv')\n    x = pd.Series(seg['acoustic_data'].values)\n    X_test = feature_generate(X_test,x,s)","metadata":{"execution":{"iopub.status.busy":"2021-06-11T04:26:41.220021Z","iopub.execute_input":"2021-06-11T04:26:41.220360Z","iopub.status.idle":"2021-06-11T04:40:05.554998Z","shell.execute_reply.started":"2021-06-11T04:26:41.220329Z","shell.execute_reply":"2021-06-11T04:40:05.553709Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<p style=\"font-size:18px\"> Em cũng sẽ bỏ đi những đặc trưng không dùng được như X_train </p>","metadata":{}},{"cell_type":"code","source":"X_test = X_test.drop(columns=['abs_min', 'abs_q01', 'q05_roll_abs_mean_10000', 'q95_roll_mean_10000', 'q05_roll_mean_10000', 'ave_roll_mean_10000','q05_roll_abs_mean_1000', \n                                'ave_roll_mean_1000', 'q05_roll_abs_mean_100', 'ave_roll_mean_100', 'min_roll_std_100', 'ave_roll_mean_10', \n                                'average_first_50000', 'average_last_50000', 'average_first_10000', 'average_last_10000', 'sum', 'ave'])","metadata":{"execution":{"iopub.status.busy":"2021-06-11T04:40:05.556549Z","iopub.execute_input":"2021-06-11T04:40:05.556869Z","iopub.status.idle":"2021-06-11T04:40:05.566386Z","shell.execute_reply.started":"2021-06-11T04:40:05.556840Z","shell.execute_reply":"2021-06-11T04:40:05.565324Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<p style=\"font-size:18px\"> Biểu diễn X_test </p>","metadata":{}},{"cell_type":"code","source":"X_test","metadata":{"execution":{"iopub.status.busy":"2021-06-11T04:40:05.568541Z","iopub.execute_input":"2021-06-11T04:40:05.569389Z","iopub.status.idle":"2021-06-11T04:40:05.631070Z","shell.execute_reply.started":"2021-06-11T04:40:05.569335Z","shell.execute_reply":"2021-06-11T04:40:05.629877Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<p style=\"font-size:18px\"> Giống như với X_train, em cũng sẽ chuẩn hoá các giá trị của X_test về cùng một miền giá trị bằng Standard Scaler </p>","metadata":{}},{"cell_type":"code","source":"scaled_X_test = pd.DataFrame(scaler.transform(X_test), columns=X_test.columns)","metadata":{"execution":{"iopub.status.busy":"2021-06-11T04:40:05.632812Z","iopub.execute_input":"2021-06-11T04:40:05.633368Z","iopub.status.idle":"2021-06-11T04:40:05.645038Z","shell.execute_reply.started":"2021-06-11T04:40:05.633318Z","shell.execute_reply":"2021-06-11T04:40:05.643657Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<p style=\"font-size:18px\"> X_test sau khi được chuẩn hoá </p>","metadata":{}},{"cell_type":"code","source":"scaled_X_test","metadata":{"execution":{"iopub.status.busy":"2021-06-11T04:40:05.646534Z","iopub.execute_input":"2021-06-11T04:40:05.647033Z","iopub.status.idle":"2021-06-11T04:40:05.695562Z","shell.execute_reply.started":"2021-06-11T04:40:05.646960Z","shell.execute_reply":"2021-06-11T04:40:05.694414Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id=\"6\"></a> <br>\n# 6.Huấn luyện \n","metadata":{}},{"cell_type":"markdown","source":"## 6.1. Chuẩn bị","metadata":{}},{"cell_type":"markdown","source":"<p style=\"font-size:18px\"> Về huấn luyện mô hình, em đã thử với 2 mô hình là <b>SVR</b> và <b>LightGBM</b>. </p>\n<p style=\"font-size:18px\"> Do ban đầu kết quả của SVR chưa được tốt nên em có tìm hiểu các thuật toán khác để cải thiện kết quả. Và sau cùng em lựa chọn LightGBM. </p>\n<br>\n<p style=\"font-size:18px\">Trong mỗi mô hình em đều sử dụng <b>K-Fold cross validation</b>. K-Fold sẽ chia bộ dữ liệu của ta ra thành k folds, mỗi fold sẽ đều được thay phiên làm tập test một lần và các folds còn lại làm tập train. Từ đó sẽ giúp đánh giá mô hình được chính xác hơn từ nhiều góc nhìn. </p>\n<p style=\"font-size:18px\">Ngoài ra, bài toán còn giới thiệu một hàm lỗi là <b>mean_absoluted_error</b> với công thức như sau: </p>\n\n![image.png](attachment:5b144856-d684-4a98-9b3b-8bc3a12cd551.png)\n\n<p style=\"font-size:18px\">Do đây là cách tính hàm lỗi để tính điểm khi submit của bài toán nên em sẽ dùng luôn trong bài làm của mình. </p>\n","metadata":{},"attachments":{"5b144856-d684-4a98-9b3b-8bc3a12cd551.png":{"image/png":"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"}}},{"cell_type":"markdown","source":"## 6.2. Mô hình SVR","metadata":{}},{"cell_type":"markdown","source":"### Lý thuyết:\n<p style=\"font-size:18px\"> SVR (Support Vector Regression) là một mô hình hồi quy nhưng lại sử dụng thuật toán SVM (Support Vector Machine - thuật toán phân loại) để dự đoán giá trị của một biến liên tục. Ý tưởng cơ bản của SVR là ánh xạ không gian đầu vào sang một không gian đặc trưng nhiều chiều để ta có thể áp dụng được hồi quy tuyến tính. Để xây dựng được hàm hồi quy này thì ta không cần sử dụng hết toàn bộ các điểm trong bộ dữ liệu, nên những điểm nào có đóng góp vào việc xây dựng hàm hồi quy sẽ được gọi là Support Vector, và việc dự đoán giá trị hay phân lớp cũng chỉ phụ thuộc vào các Support Vector đó. </p>\n\n<p style=\"font-size:18px\"> Hàm hồi quy cần tìm có dạng: </p> \n\n![image.png](attachment:3e90d4cc-f94a-4735-ac6d-458d4a2740e3.png)\n\n<p style=\"font-size:18px\"> Trong đó: w là vector trọng số, x là vector đầu vào. Mục tiêu huấn luyện SVR là tìm ra được giá trị w và b. Để làm được điều đó, SVR đã sử dụng hàm lỗi ε-insensitive. Đặc điểm của hàm lỗi này là nếu sự sai lệch giữa giá trị dự đoán và giá trị đích nhỏ hơn ε (ε > 0) thì sẽ coi như độ sai lệch lỗi bằng 0. Mục tiêu sẽ đi tối ưu hàm mất mát mà vẫn thỏa mãn điều kiện sau: </p>\n\n![image.png](attachment:5c6da0ec-5825-477f-955b-fd4d487ce0bc.png)\n\n<p style=\"font-size:18px\"> Tuy nhiên, bộ dữ liệu sẽ thường có những điểm gây nhiễu, không có cách nào có thể đáp ứng tất cả các điểm trong bộ dữ liệu đó. Ví dụ có những điểm dữ liệu sẽ không bao giờ thỏa mãn, nằm trong khoảng ε của ta. Một ý tưởng được nảy ra để giải quyết vấn đề này là ta thêm một biến lỏng ξ (slack variable) với mục đích chấp nhận những điểm nhiễu kia đúng và vẫn đảm bảo được sự đúng đắn của mô hình. Khi đó, ta cần đi tối ưu hàm mất mát với điều kiện bài toán như sau </p>\n\n![image.png](attachment:f8d19822-6f97-4e78-8dd1-933636f498c1.png)\n\n<p style=\"font-size:14px\"> <b>Hình 4.3:</b> Hàm mất mát - Nguồn: bài báo “Support Vector Regression”</p>\n\n![image.png](attachment:18493b59-d4cb-448c-8ebf-762be5048c9e.png)\n\n<p style=\"font-size:14px\"> <b>Hình 4.4:</b> Điều kiện bài toán - Nguồn: bài báo “Support Vector Regression” </p>\n\n\n\n\n### Cài đặt cụ thể:\n<p style=\"font-size:18px\"> Để cài đặc được mô hình SVR, em đã sử dụng bộ công cụ <b>scikit-learn</b> để gọi hàm SVR. </p>\n<p style=\"font-size:18px\">Do bộ dữ liệu quá lớn, khi fine tuning bằng <b>GridSearchCV</b> em đã bị tràn RAM nên em quyết định thử params bằng tay dựa trên kinh nghiệm cá nhân. </p>","metadata":{},"attachments":{"3e90d4cc-f94a-4735-ac6d-458d4a2740e3.png":{"image/png":"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"},"5c6da0ec-5825-477f-955b-fd4d487ce0bc.png":{"image/png":"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"},"f8d19822-6f97-4e78-8dd1-933636f498c1.png":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAQ8AAABXCAYAAAAahcAQAAAZxklEQVR4Ae2dh7cU1bLG719171UfisIjqQ8kCApcchLwkBHJiCQFJElQgkdEgoJkJMg5iOScs+Scc7Tu+tVZ+7x26JnpifQ0tdfqNefMdPdU16797aqvau/5h1gzDZgGTANpaOAfaVxjl5gGTAOmATHwMCMwDZgG0tKAgUdaarOLTAOmAQMPswHTgGkgLQ0YeKSlNrvINGAaMPAwGzANmAbS0oCBR1pqs4tMA6YBAw+zAdOAaSAtDRh4pKU2u8g0YBow8DAbMA2YBtLSgIFHWmqzi0wDpgEDD7MB04BpIC0NGHikpTa7yDRgGjDwMBswDZgG0tKAgUdaarOLTAOmAQMPs4Gca+Dx4ydy6dJlOXHiTzl//rw8fvw4599pX5B7DRh45F7HL/033L9/X6ZOnSqdO3eVGTOKhf+tFb4GDDwKvw9D/wR4GkePHpMPP2wk331XLM+ePQu9zCZgcg0YeCTXkZ2RoQbwNFatWi2tW7eVkpKSDO9ml4dFA5EEj7/++ksePnxo7nFIrOzmzZsyZsxY6dmzlxw7diwkUpkYmWogUuDx5MkTwVBPnDgha9askY0bN2WqH7s+Qw0A5JcvX5aWLdvI9Okz5Nq1axne0S4PiwYiAx7E0VeuXJU5c+ZJs2YtpGbNWjJhwtdh0fNLK8fTp0/lyJGjUqlSZdm6dZtlWiJkCZEBjzt37sjPP8+XOXPmynvv1ZHq1d828AiBod66dUvmz1+gZOnJk6cET8RaNDQQGfCA0b99+45cv35dU4LvvlvTwCMENnrmzFkZOPAzGThwkIYvIRDJRMiSBiIDHl59YKy1atUpCPDArb97965cuXJFrl27Lo8ePYrU7Lx9+3Zp06adzJr1oz4jz2stGhqIJHgMHvy5hi5h5zwcT7N8+Qr56quxMnnyFDlw4IDcu3cvEtZFiLJ06TKpXbuuLF68RAnsBw8eROLZ7CEkmj/6NHjwkNCDBwOLzNCwYSOkRYvW0qlTF3n77Xelbt33Zdmy5ZHwPsh+ff/9THnrrcry+edDtTTdOI/owE5EPQ/Ao26owxYG1o4dO2TevJ/k0KHDcvLkScEDqVevgXz22edy8+atgrcygALOo6SkVM6ePashWcE/VJ4fAO8UWwljOPvSgwcdc/nyFXnw4KHO9hCvFy9eyoqhU1lJFghXnYF09erV8pCE2J+FYpcuXdL0JUZCZgIvpFev3sp/5NlOc/J1PCc6NY8jNfWiL2zz6tVrWp27ZcsWtSPsJCy6fOnBA35h0qQpcvz4CXn6tGwAf/nlKB3omXYSK0hnz56jAMEg+vrribJz5y5fK+K77t27Lx06fCxffDFS//Y9MURvYtwAI4Rv5sc9rQg2QlUUHKiQ3rFjp2zevEU++eRTGT/+a9m1a5ecO3c+KxNbNszopQcPUrvt238sGzZs1E65cOGifPBBQy1sytSQ9+3bJ0OHDpPDhw/r7Nu6dTtZvvxX337DLd29e7d069ZD3Xzfk0L2Jhmidet+13CLkMsdK1b8Kqkc7rrS0lKrQBURtjDAK61Vq7Y0a9ZS+bCuXbtL5crVZPToMeoph8EUDDxCAB54HTdu3JDhw7+QRYsWK5EaBuNIJsO5c+dkwIBBUrVqDT1q1HhXGjZsJJ06dQ14dJF27TroNdWrv6OvzLYve8Me8Ojginr37qu6dRXTrE5moglDiyh4lKVqcfWStTB4HnAhVMey5wV8S6YeT7JnztbnhHy41U2bNpfXXqsg//73a7o0AK9jz569sn///oTHvn37NYz79deV0q/fAF1SsH79HxmL58CYcnhkQb+EWIRWZLj4+0U2+pfJYtOmzbJ2bYncvn1b+xzOCxkfPnykdtC3b38NY4uKOusrq5KxE3i0MLRIggdFYiA1KzmTtRcNHnz/b7+t1Zj2/PkLSqhiHBj5i2wYOLMfsnAw20HWcfA+r7Rbt27L8uXLNbsFgNSo8Y5MmjRZCd+gIEh8T7aJxXNBwANwQJ7r12/4Ai0yAUhdunSXmTN/UADbvHmz/PDDLE0dM3BfZEOfpLA//bSP/PTTz3Lw4EF9bhYO4nkiHwsIJ0/+RpYsWaoVulOmfKN7oeCNUEntGveCmEcn+W6RAQ+Ux4yCIjt37ia40LjU9+8/UAOLp9wXBR7Ig6ykaocOHa6z0JkzZ+T48eOybNkK5WDiyZwrIwEQyIzcvXtPLly4INu2bZOVK1fKypWr1ZOA+acKdsuWrbrlgZMDMGGTH5YE4H1UqVJd17MAgEGfAQApLi5WT8YBk7u/95XP8HgOHz6i34EOYxufYQOkvPGAhgwZpoVqlSr9r3TsWCSEWy+qoQ/6uVq1t6W4+HspLV2ndorO3nyzktbDsGWja/TD1KnTtMgOHcU2wGXbtu3qsSTSW+x12fg/MuCBAe/YsUvGjBmnm840btxU2rVrLxMnTpYjR47EjRNfFHhgCMw6deq8L6+/XlENB+PmQG5qP4IOvGwYAvfAbYY4xl1u2bIsZTxu3HgZO3a8QNjxXlFRJ4H4JRRwDTm5liwR8r/yymvq+TEw6JcgDeCn7gWSOVFYASDhuvfr17+ciI69P1mu/v0HyhtvvKWFdyxVwOUfN26CnD59RgEy9pp8/Y+u2KKAlHy1ajXUU6MCt1WrtvLtt1Pl9OnTf/Om8N7wsrAXP3vAYxs16iu1c2w5qLeXjeeNDHigNAqr/vzzTwWLQ4cOacbk1KlTcufO3XI3O1ZpLwo8kJeO3759hw5YBq07KFHHHc1XwyhPnTqtBgh/QYUue6GwChZD5yCVDRBTxAaJhwfibcx66H7QoMFSoUJFefXV/5GmTVvIpk2bAhk0MuCOx3PBnccxZcq3OjsfPHgo7oDiWZhEWrVqI6tWrdKUJ0QjnhPA5DcIvc+Sy795josXL8rHH3eSHj0+Uc9u167dukkS4QqeXyoNcMbW0TuEOzVL+fJAIgMeqSjce2664EEHMRtwOLTHMN17GOjevcFTtV6Z0vkbI2Lwkhb2c+Xj3RPZAQYAgxR1//4D5Nix474eA8+D209sDskX2x49eqzPTK0K/AczP6lnwohMDZpQhbJ9vJ9fflmoRX2x3+/+h4SEgN26tSy8yiZYoGdIYgDV9bv73iCvhITwOt2791SuI5W+ind/dEOWiv7Dm83XhksGHimkajFCwAHAwaOhwxhQbrZk5oThx7gox8Z4WdMRpM4jnmEEfZ8wgoWAxPfEyUEaxk8YQLjxzjv/Jx06FClwxBsU3BfvY926+OEIumAmZY1OhQpvSOXKVdVTQWeJwpFE8iIPPAWhKOETO8UlauPHT1CyEe+N52OTKCp50VGm1a7cg42c165d6wuwieTiMzwD5Js7d55AkJfJd0WzK+gI+0qnIRfeR/PmLdWDjdeH6dw73jUGHimAB4a3e/cendVYxMbsQYET6TWAhcEFPwBZy4ZEEydO0nPzAR64wsOGDVeZiJuDNAbXkiXLdIDDC7ACNtEsDa/BrEkhXSLjZHYm20Es/89/viKVK1dRXTA40mkMMCp1CYXImCRa94P8cADduvXUkGDkyNG6JUC9evWV98DFz6ROAj3D6yxdurR8qUEqz8T1yDRkyFAFEIAb/oO1WPw0BQRvOg2PhrQ0kwAhmzcjk879glxj4BEAPDBIXMOFCxfprIMhssSc2ZBKwDVrftOQgcEIWUe5O2477Hn79h3z4nlglGRtALSg4MEM3rbtR+ohkN6m9DlRAzAYeMl4A0IUAHXatBmagYFArVKlmoJTOmlSwqiPPuqgOqUKN54Hw/cCUKSK8XxatGilHE2dOvWkUaP/qH5I42YSQqFnVgmT5cAmUml8LzwSg7t+/Q/Vlt5//wOpXbueFsixfAHPJJ3GxMbm0jVrvaeh3dGjR9O5TUrXGHgkAQ+Ag44B1Rs1aqxG+eOPs8vdzeLimdK4cROdGeEBKPBh/cq//vWqHs2btwoleMBPUFrOLAo3ATDiMWSz4YlRa0Pogj4aNPhQvYFU4/zff1+vMzMeHalsv4bsDBgIVUq4AXeeDw9o9eo1wqZEhAmsX8qkpQMe2BCAh9dK2EcGC7mo7yEVXibfDg2r0vWKACYmL7J3AAj1IrluBQkezhMgH04sm8oB0YX7DSDQmKkSrW2hM5mhIaNIrZECpDiJziJTQjk2A5CNlwEP7gsPwmDBZScGzXbYwuBjXQmejztwd3v37qOViMjl3ucVg8et9TZcf+oHqMuoWau21nR4P8/G3/QTXgOkKRkYjj59+iUMO2K/l3sAbMz2DRs21qxQ7DnonBkdz4uQgP5KdxC6e5cNxrt/0yO6RM8VK1bS4jOAzKtnbMnve5GP1Dt1RxR7UefB/bPd0BWbf1MzMmLEl9m+/XP3K0jwAMUhJdlIh4VnkIRBjxEjvtBNkh0jnQw8OA+CC+PFw6BAikZHwW+wKzibLTOrQHbhrpMVyCV4YIjEyqy2dEdRURflGOBiOnbsVP4+nw8a9JkWEnl7H6+AIip4BACOKsdcNPoKjwDwRU9UfKbi4XA910C+kmlhf5DYxoTwzTffan0KKWT6JlnjnETnAQJ4Lk6/7hU9o7MmTZorKLr3eSULRTrY2wAJQjWqSSmkQ9agLZF88e5BKTuTGfLkuhUkeNAhcA3z5/+iqSnSU0GPBQt+0doDF68mAg8Ml5kTjgMOA7DAEOhUls936dJNQYVdwP6fNL2oQAZ4YGQU/2Tb80AmAI1MjjvYA4QBCvHJjyu593llNo4l4uA38AKQEV6Ge+aiMQipyahbt75MmDBRf/A6lUEBIE+bNl29FvgZsljexr1w0SEbKQZ0HqX3HL+/uS99SR/7yYPcGzdu/Jse0SV6xhbYlxVPwqtnF856vw8vF34ELgr5EhHN7jrkQS48XD9Pxp3n90rtiOPa/D7P5nsFCR4oAKXiesPEp3bc0tSq68RE4EFx2erVq3XWwxWE96BTAS9mEEg8Buz69ev1feSiSpL3CFmaNGmm6yuyDR6ELXhEhCPuYBFanz59NWyBc3Hv8woJB9h5G+/hvQAezOjImKhh0O5IdJ73M/REjQehHl5OOtWd6JsMSzzPg/5jAAOE2IQfEHhlcn/juVLbQrrdb4AiOxOCV4/8jZ4ZnGzoTF2N93PsEC7J2zgHwCGNHtTrwDOjSA+dsXgwlUaIiJfMhJbrVrDgkS3FJAIPcucsToIXABB27ixbLo5B799/QGcf4mxmF4wWY2O9AvsusEAMN5Wiq2yDh9+zY8SpZFuQlTJvSuPhPP74Y0PCWRteifAjlToEQiNifLwCVxHqJ3ui99ArRWHwDLGcB58xOKnWJJygngP5HMAnAhJAHvDEI/MDj3gyoedUsi3UvCA3ITa1QcjHxAU4xZMP8GC9CrwFegvauF/79h3U/vCKct0MPBIQpiyPHz36K12rgctMKsztNgZIULTEwjY6DYOlrJzzAA8Mk5g56GZAmXZ0quCBzAAgGRBm9ZEjR+ksynM4o+aVgQU4sgqU8ABGP1njOrwjOADcdYCJwZJuo2KURXfUMHgLxPgefo2O1bh8xtoQyGLeo0SdehQ8NGRx388r/+MlMHG4Zw0qW6rggTyEkqRjp0//TjNxlMojH/ciNEEe19C/k89L7LvP473yHFxLARu814wZ38U7NWvvG3gkAA/IN0ACz4MQhCwKnU1hFa5+WSHYZCUAWafSvXsPJQXhQnBRmXXCCh5YENmhRYuW6ApPAI+1ERg2RkiDF9qzZ4/OmgxMPIkgg42Zc8WKFRrW8WtxQXmIeFbN7AtAAHKEDQ4IkIUB2LVrD+0juAgyOq+//qYeeCvUeOBhMRCZ8QETsjc8K55hqi1V8EB21vggu598EK8LFiwoF4PQrmzh3wAtQPRbBlB+sucPno3sIzaJl+yIfc8pWf/TwCMBeOBiUpFIlqVq1epCzQZkJOEBvAIMP4uvcJsbN26mdSDUNQAkdObevXvzBh6EWNQPECdTzxCkISODinoDngGj4zlYv9Kr16fSs+cnunqVylNSw0Hce2ZNQBZwxStDrkwbIE7hHfxMmfdzt/yWyESdBBkjdiOjpoRsAwfcBAMWQpg+AWwAMvgEshKQ56k2nocCLwoDg2SNKEpbunS5FqlRp+LkA6wBOQAO2R0gEk7iqeE9wMsEDRPZegKCFw8Njikov5Lq83vPN/BIAB4MLtx0ipSoWqQCkPjbxf7MxAwslnpj3Bixt3Q7lT1MvZ2Szt8MWoAOUMMAgzYGFB4GHgfPQqgBz8OszEBlpmf2QxfJGgOTlC/kJZtIkxkJcp33voQT8CveBkCQqWBFL2nn2IwLxDkh2OLFS2Xu3J+07HvevJ81TGAw4QkSJrjGZ6yRoX9SbegZsKW+w3loie7hbAi+jMI1Jx/ZQXa6a9CgoW5x4Dw67A3PiHJ1qpUdqCT6Dj4jc0QBGmEL2Z0gQJ/snsk+jwx4oHwURhwLV4F7CYGWaDk+yklEmHoNn07kcJ3sFMv/nBf7Pp/nEzycPC/qlefH2MeOHafkJcCaarjCPSAKcdtjGwAGsLEvR0lJie+9XV/QTwxsbICUKmXyjt+gr6i5wEPzbroT+325+N/ZkHt1QEtVrGuAEjVLZGhu3Ai2mxzPSriDF8y13CMfLTLggaHiEYwaNVrdVIyM1KVzc/0GNwoOCh7pdMbLAh7olhmZmZQUIc/tBd4guuMegD8eHvUSse3Zs7JsFitHGSAAg7dPGZCEEXh+zN54L8zuhE94JZyLTIRfLDNg0WKq4BYrUyr/8/3IRYqcV+wOj5XnoTrWNcCTLQ1IBTPxJWvcl8K0mTNnaVhN9gld5KNFAjxQIGsX2MgGZpsMAuw7KTWqGsmYxOMBDDwyNzPicryFrl27qUvP//RJ0MagJvQA6FkqQD2NXwNAAAd+05ewCE/HAQCzLZsUsZKX/WtZ48FqVTYZdgWBgAsZMDgGCs82bNjg9zVZf4/noySdzBOy6VGrtlYCs4WDN8RgqT4cGyEO6eRkvApgBHfTt28/LYEPypFk4yEjAR4w6JCXuHoYHgZD/E5nQZjRWWvWrPGNUQ08MjMjZkcGJLE73AKhBbxQkGPBgoVKqgIGffr0V+An+0B6M17DRQco4B1WrVpdTii6wQl4sFKVzYDYPgDgcDMxfzPQWP9B1S2bIOWjAR6kmPHKmNyQjwI1ntObTQFwCWHgLeCdeKZkvArELcshKCPg3FRAO9NnjwR4wKSj9AMHDpYrDwTGfa5f/wMFED53M5BXaQYeXm2k9jc6JqPEnqukSPH0KI4jqxD0oHK3YsW3ytcCtW3bPu7KWScdA4TvJjRxngcgRmqcGZtsBQDDoPU2VjyzBglbIDxINqt7r83kb+TF9gALyEyyPXgMTnZ3b87jM8h3iteCeBFkf8iY5RM0nLyRAA/WuZAViDUWOoi0Kik7yoNRcmwz8IjVSPD/IUXRL+lGlvVn44DI5L7Wwq+BSIDHkydPnwMOVE84AylFTn327LnPIT3nAB4QVN6fm8RthHyNBaNUu7OMMB1eXp4O8x8vnk/13mE4H/4BnoJCumwd/KAz5Ku18GsgEuART80QavAgVIdilH6uHa4rA5qBQGxMjQTxOgSe3/nxvsvvfZh9QIkiJ+7N9+QrzvaTJ9vvsQiMzEFqCxMTL2SkPxxHkW157X7Z1UBkwQMGm7gRIg9CjhDGrznAcMQU3gbxc6ZeB99FTIscjshiZWtsnOsnk71nGigEDUQSPPAYINPY84J9LKlIdOBQCJ1iMpoGCkEDkQQPgIK6A7IA8fZrKITOMRlNA2HWQOTAA6+DOg/WV7CUmxg6U+4izB0YJtlILabCWbC9AZWipFghqC2kC1NvJpclUuABp8BKRAqEKJxh+bxrcBjZ4DHc/ez1eQ2Ulpbqpsr89EMy0hNAZ/UtO52zipeCrwcP0vvBo+clsXfyoYHIgAdZEorE+LEfVi6ePXtOZ0FmQqr4qPln5ai13GmA1aBUTrIZTzKgBjyoz5k6darutEVxl6Voc9c3ubhzJMADjoNQhT0aKElfu3atVhBu27ZNNzumJJl1D+ns35ALpUftngABfcDgJ3XL/3ge8Q4+56BRXt2mzUdaGWrgUViWEQnwoByZrAqbq7BjExuuUPZcdlTTjWHY7MY8j+wbJ6BBZgvPgewWtSx4eyxExPvzO+A58BQBF3gptm40zyP7fZPrO0YCPPjVLbb1Z9/QeAe/0OVXnp5rBUf9/gAAVbpz5szVSl3AA/KTfoj3WzrwHKwtocjMwKNwLSQS4MGP+rKnAZv/xDu8qysLt7vCKTlZFhab8Zsh7J3BYi1WtJaWrvM9CDFZuEZ2xcAjnH0aRKpIgEeQB7VzcqMBuAtCEPYJJWxh70xAgZJ1tsbzO/AAARwLW3LTJ/m6q4FHvjQd0e+B82BLBDZfYrk5QMKygKKiTsplwGfEHj16QGqXKMFqnkfhGoaBR+H2XSgkJ2Rk42F+wwbSk184I+PCD12xR6ffAXHNYkHSuWzqw2rjhQsXW6o2FD0aXAgDj+C6sjN9NEAhHpvXsDsX+4+6H2Vy6dhEr/BUs2bN1m0B2TnL1iD5KDjEbxl4hLhzCkE0vIyVK1frjyixf0mQ3a94LkCFor7Zs+co+MyYUSxbt24NfH0h6CbqMhp4RL2H7flMAznSgIFHjhRrtzUNRF0DBh5R72F7PtNAjjRg4JEjxdptTQNR14CBR9R72J7PNJAjDRh45EixdlvTQNQ1YOAR9R625zMN5EgDBh45Uqzd1jQQdQ0YeES9h+35TAM50oCBR44Ua7c1DURdAwYeUe9hez7TQI40YOCRI8XabU0DUdfAfwHm9ArXwhhyqQAAAABJRU5ErkJggg=="},"18493b59-d4cb-448c-8ebf-762be5048c9e.png":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAQYAAACQCAYAAADqfcXWAAAgAElEQVR4Ae3dh7dURbY/8PdvvZnnmHgKqE9EBBT5KWYMiAgmFFEQAUVAJBpIKiKOoqJiRBxEBSOCgmnGgBGzYp76rU/1FB6a7r7d9/btG6haq1d3n1Onwq69vztUnar/CjllCmQKZAqUUeC/yv7nv5kCmQKZAiEDQ2aCTIFMgX0okIFhH5LkC5kCmQIZGDIPZApkCuxDgQwM+5AkX8gUyBTIwJB5IFMgU2AfCmRg2Ick+UKmQKZABobMA5kCmQL7UCADwz4kyRcyBTIFMjBkHsgUyBTYhwIZGPYhSb6QKZAp0CXA8Mcff4Rff/01/P777+Hf//53HoVMgUyBbkaBlgEDAAAIv/32W/jpp5/C+++/H954483wyy+/ZHDoZkyRm5Mp0DJgYCF89913YcuW18OUKdeGOXNuCjt2vBWthjwMmQKZAt2LAi0BBpbCt99+Gx599LEwYcLEsG7duggSwKKnuhLazRX68ssvw7Ztb0TXqHsNbfXWaPs333wbXn311Wi99dQxqN7DfKejFOh0YMB03IU339weLrnksrB+/TPht99+72i7u/x5YLd79+7wyCOPhMsuuzx89933Xd6mehqQAI21dtJJI6I7B+ByyhQoUqDTgYEAcSHWr18fJk+eEj7++JMeayUUCSdWsnPnzjB79pxw++13hB9//LF4u1v/Bg67dn0ZLrjgwrBy5arY9mw1dM8hMy4sa3E5iqhVIN7pwKAju3btCqtW3RNuvvmW8M0333TPEWiwVaygF17YFK644sqwffuO8PPPvzRYQtdmZ+H8/e/3RrD+6KOPYmC41S3C9BQHHgG0GZz2HgF0+eqrr8JTT60LK1asjHz29ddfh08//TQqJcoI/TojdTowcBs++eSTsHjxkrBy5d3hhx9+6Ix+tLRMDGxQ9Oe662bEwWsVkjeroz///HP44IMPw6WXXh7du65oPzD46quvw7/+9a/48T+nPykgfnXTTXPDmWeODA899HB45ZVXw9Kly8JFF10Sxo27OLz++uvBOHYGoLYAGH4LH3/8cbjlllvD6tX3h927f/qz5z30F9Puiy++CNdeOzVq3Z4YRCWErIYbb7wpLFmyLAJdZ2mf8mHGyKys2bNvDBdffGkYPXpM5I9mumPq0Edlsu5a1bfyvnbk/1tvvR3OP/+CcNppZ4Rp066LAHH00QPCsccODjfcMCt89NHOaG31eGB44IEHo6/UEWJ1h2cx29tvvxMuuuji8NJLL3WHJjXchiQ4ZoquuurqCN4ArhVJ3UziF198KRx//LBwxBFHhTvuuLPD1qRyWT60qLiWAOv8+QvC888/3yNdFRbDjBmzQv/+R4a+fftHQGAtPPbYY+Hzzz/v1BmllloMvQUY+H3Lli2PqP3551+0QpY6pQ5a9PXXt4Yrr7wqCqngVqsSLb5167Zw4onDw3HHDQ2vvbYlCnR760+gwDp96qmnw4QJVwXadcSIU8M//rEhBvDk6Unp/fc/CFddNSlO8b/88isROAUhATgA7Mz+tBgY1vRoi8FAECbBulGjRoeHH34k/PTTzzV5LTHsjz/ujlrs22+/22PaGmAxFwFZQtlqH1vbvvhiV1i48OaoWVsZGEY31sqAAceG8847P3z55VcNrwVJtP3+++/DW2+9Fe66a2UMBpuGPffcUWHBgkVhw4ZnY9m//15fkM74Ai1lfv31N/FZdGEluqfOtpJxtLZF/z788MN2jat61qx5KFx77bTw7rvvxnVAytU2n/0GGNIgE5YSIv45CMV79Q5OW4PXnvuJaUSJTz75lBi8qxa0S22G8ExCIMKfnzp1enjvvfdiH83WzJ07L0yefE1k6g8//KjNAU/lohEGwSyJJr79d893PYmA0rBnnXV2dCeU0YpE6BYtuiWayICJ6Q8ci32q1A7999FH+T/99LM4XXzOOaPCgAEDwwknnBhuu21xFEwCXW9/5FOmsXrmmWfC/PkLo7Zmuk+adE148smnAnCvNt7FtnJlzMIJEHJj8ECjSVsWLFgYbr/9zhjPwivAZt26p8MLL7wQg7b1jnGjdcvfLSwGA414zPJ33nk3bN26Nb5LgTiJCax/ePbZZ8Nnn31W1+C0hxhtPWMg+MYzZ86KwSCMqX2VEgYSccdQmHXYsOFhxowbwvbt28P33/8QNZDyRJYvvHBs9LMvv3xC9B2rDbi6lItJ3nnnnWj+b978YtRuGJtWo12ef/6FwAyVt1r7UpvlYQGNHHlOeOSRR6M5/8cflfuUnmnGt3ZaGCa+YNEbujz99Prw7LMbwz//+c/Yl0ptT/0kJIQXGAjGsTruu291FKIUcNS3epJ6jOVLL70cA6HKu+aaa+Os0/jxV0QfXzufe+75uuIgeJn1MmbM2LBx48ZYdj3tKObRz1tvvTWccsppYfr068PQoSeEPn0OD4cc0icMGXJCHKsffui8tTPdAhgQwZTm/fc/EC69dHwUpJkzZ0egcC8Rmi96ww0zO+SLFonf6G/alS9ME0Bt2q1SAmiE9847V0QfetCgweGee/4eWASsheXLbw/33nvfHjfixRdfjP7wkUf+XwQSTFopJWDQhnnz5ofhw0fE1YuPPLI21geELFrit5vW0r5KwlUs231AddNN86JmpDHrFahiOY38Vif6CTyiDatp4sSro3ATgLPOOids3PhcHPfy9tPGFMTpp58Zn6XR7777nkhX/UD7RpNnjAHwJnRm0ET8LQIDVtqJ96xbqTY2xToTvxoLQFfPM+l5/cVnXjA0FW7GBoD65r76vWTJ0shLaNFZqcuBASEwooCeYJQpTX7n2WefF3bs2BFNQYRlig8ePDSMGXNhXahdJJg6AAw/s56PvOUM6T/GI+wCQszUagJkGnDt2sfC0QMGBsJOe4gtsDZuvHFOOOqoo6M2YSFhog8++CC6Jocf3j8KCf+2WtIOcQmWlRfRlD927EURaCw5BzpLly4PmzZtikJS3o9K5WqD9yb45SyQX37ZV7iUgy710rESDdWtHBaRNSB9+vQN/fsfFYO4tDHtCnQPOODACFKURTmNWQPMdM8JLhJi9GvLBanU73SNGzNlytRw4IGHhAsvHBfee++fUfloJ1dFffjPmJdbc4ku2umej/Exy2KqUeDTeKZ78tWiDZBi8QEACwLNeukfK8qHwqmmkFJ/mvHd5cCgE4iLYBjUoIweXdJ6NGO6Z7UX09H0UyNIaRDk9xIXotbzIcSe8WxKpYVan8aVgrR/JW2c2moAuQ9MP8vAMRRwe/XV16L26dfviDgTgMn1OeUvAcP8yEip3krf2uVZzxEO4HDGGWdFMMDkGFP7taeehGnR5+qrJ4dbb71tH02tHHkAHouiHhqKIWhjuWD777qZEPSxpNzYog8B4s4cdNChYcyYcXGtQ/l7NdpBiQDbk046JfZ/+PCTwuLFS8O//vV+jFVUE7xqtNAfoHrQQYdE0LfUHQ9okw96Wn+j7UWaJrqgidkQgUYfViGL7tRTT48Lk959970995QtPwAolqVtlJYpXNYQt0i71CtvEVjKn6vWr45c7xbAkDpgQBGYMLEaNm/eHIUTk3sJa/z4CcGij3JmSc9X+kZQ/vasWTdGN4Wr0taHgBDiIlMbHG3gN9KulZhPfkzELD/00P8NQ4YcH5555h97tAjN4/rRA44Jd9+9Kg64/Fu2bAl9+x4RP6Z0CU5bSXswr/YcemifaImIv7SHabQbA1oizaTHkMVy9NUYEGKarC36uc+qevzxJ2Lfi30BqICA2Q48gT/hU597ArsHH3xoXPgkDlEcA+XIpz3oRomYNkYD5YmTcKHECtSRgKnYl2Jb0m9gClhKY3ZCDBIrJ5WF1pWScgk6mokFmA3h3ukXwLb+gHXof3L75DP25YpHP7maYhqCssBDnq5K3Q4YMLfoPa0qOmxQBB6Zx174oWGLqa1B9zwUZ2LPmDGzro8oORD49dc/I/uY1pSYlXr840r1GkjaASMwSwmHujGyQCTA+Mtf/if60DaqwQw067Jlt0dh4Hpwp+phiJIw745LZi1+0T+WSbVUy3jQPn6tMq65ZkrUyK6lpC50Zx5bcVcPHefNWxCnCtGtmIDA448/GYHfK/gpmIye+u2dABYD094iHnXXSp7jcoizXHHFhCiI4ham+UTwWSG1ynDPHiH61a/fkVGACScAFPRj1ldbratulpZ6xIwA/6pVq6K7iU/ES6ZPvy7+d9194EvpoEuRxkDMPXVXAsS2aFDrfnvudStgQGjz6oIrhx/eL9Ce0FxQjRtR7nPy+VkYhI5lUCkhvkEouRLM4LY/8pYPnHKgOKHw3gdBKg6sug0uX5S2OOywfnGqiWaT75NPPo3MxzLASIQAUwIOmoa24l+ro1pfiv3TPkJlmrFPn8OiG0B7lScCTcB8qgEO8LSO4OKLBfJK4GssUvJbW42F9vm0RcfkSpTTiJXDjRg0aEgcZzRTvnxiMGZm0Cgtny+2I7Wn/Bu9AA7+sBBI4LqkvU+O7xUQfH0sLws9zG6Y0eCOoT8LRjmUEV5Ubi1g0W7l6Iex9uHqsDbEbIw1eqV78snvuWJ7BDsnTZoSY0zGsZxu5X32Xx7jy3IyNtpZLLPSM/Ve63bAQMihL/+Tv8tfM/cvKFZOTANgMFkTCN7ZSR1p5qSSANNOtL+pLa6QiDYmwJRvvvlmZHpCkZ7FLKUg3GHh2GOPi8LgmnIMeHl/DbprSUhXrLgrWjA0E3+WlaM+01jJ2vFOh7gMK0zZlZK6BMlEvd94o/M2ndF2TI82I0acFqcpAZx+odFzzz0XTj31jAh2XvAqMXqlFle/phz088IRjc9fNw6VgEE+vEUJMflZhK6lpH40M+6NuK/oKQbSyKyEd0cE3M2ymK7HIxSU9mgDgKqkrDZs2BBdKZYNgOy1wIAYjz32RDStmXPiDczESuYc7fPgg2v+E0nf22RNg9vMb0JnpuSSSy6NVoz/xQS1zT0DBtNeIsqYxOCKMA8ceFxgYuuj67Qbn9Pc9PXX3xCR/5VXXolMxT/nGhCmlAw8QVcPd4ZvawENk5zGY1lt27YtWi0sAElezEPwMVelJA8BMT3mN4HojGS2QwzBbITov9iPPqmP9TNp0uRwxhkjY4ygWlvraVcCUGBgjQYhK9IxleG62ARrzXSg/4QvJfQXBEzrF+oVuvYAg/c6WBgU4tlnnxtnnG67bUl031hx3o9gGZSAtNRCfQKgpmsFXktA+qell/rRnu+WWAw7d5bernzggdpLohGeEGFig2X+mElGkNLAyoM4tiZTLoJC1HqXvLaHSOkZTKwtIs6EkiYpMgtmNoA0InN44cJFcR7bN00g8m3Q9c9yWcw4cOCg6Bt7KYu5L5BGyIcOHRbLSnVgcvP3pib5z3xwDMvkZaUQNhrKKj1rANDERxDO1CagKDJ9sU8Y7swzz95Lg6f7zfwGDDa1EZS78sqJMR6jz/ou/sKasoQZHauBkz5YTyAmYBFSrQ8aXX/9jGg9VLIYjKUZMLRjMXjLlKWhPWhonD0vbuT5elMRGOpd4PTZZ59H5WAaVnxKAFZQGVBo3zHHDIpjzs1BA/TRflOZAvIAvciL9ba1Wr6WAAPUnjt3fqgXGAw87Wpgdb7IJDrP9xMI41/TPNYDNJMo1YgFnAyKRSuWRHNzim3DPHzviRMnRea3go6AX3bZ+BhUxHTMxcGDjw/HHTckug9AgxXgWT42rWHaUvB11qzZ8Zq+qdfaeQxsAdPq1Q9EAQIcmzZtjkEzi3BYV2IvmNO0qrl0YGKlZCVzWD5gZklxZ9MRsGJs6y9YStxAFqHZBO6OoFsCwmpjoL333Xd/pB+AqfUBsGaGWFLoV84jAMiskbEE5GJDLL3hw0+OMQrAABTkK3+2WvtcVxd3mMXLKiy3LCs9a/xNPwtYa7cY1WGH9Y2gQEkCCi6jcdQeYE8+uJAADTA0M7UEGJiMgnZr1qypSSTEJxzMTXsdGJRkKRQ7jTkEa/jEXhk2EK1K2oi5R426ILoxgpApuQcoWD3cCL5taXenn6PJrJ1M5meeKZn2Ao/64hnPEhz3BaxMDXoJSBBPcl9ewTJ9T4yOPnaPwlSsB9ddU5Z2cA9oYgt1yq0qZaYYRGl3rW9TVzrlO9FHG8WSWHu0sz66hg6VxrvYmFQGYUOPtj7yoYXnypNr7rFarB94+OG1Ye3aR6Nrasq21rPlZRX/pzYqu1rdxfx+e0bf0YFLwxIwc+UbuLAugbz/8shvzQcQs6S8RwODiH0RPRMBmZhiCBhZEIVQiCQX8xYJyURmjtvZRvQ6BdqKeTrzN6a2AtK7DwS5PGFwGoDAFhnjz/5WfkNOXn0rbbE/NWoz2iEljJOER1kppXLdT5cxD8vq3HPPjwDjBaDiM56V32vX3CJz/8W6Utmd9a3uJDh+d2VSv/FKIIPvEli3ul3GCF1YTj4EXlyLKyoYzyXUNh/xKhYDBSNvM1NLLYZyYCDQzF4WAsSGfCXz6+VInEodRTgaxlLY0047M24JhkitTAZBBFvMgECVC1x720KYuRvMa3EDwa/29k0bxSBOP/2suJM1xi+mxIA0pAVdrKDyPMX8+XdrKAAUuAuC6ixHbpDgsjHy/gTwAmSsCmsenNFidg7vNDN1KTCIH/CbRfEFGseOvTiayhi0mrARFGsXEMWCFgQCMNXyN5NYqSztY4JbDCRqbTCbUb/BFZxLqwExQHvLRVtvgTI/06KpYlnoyEIzjWnVH2uhqzV3ou/++m18APQpp5wag+9mq8RQxJ1YdgkU8BurUiDbWh9uT7NBvUuBgVazvBgazpkzd4/7UGTgIpO4zu1AFCaUjTJN67E6qj1TfL5ZvwkQk98qPdFxcZH2avZimwQHCWhHgQYtzEacfPKpMfBI63ArioLPXLYE14IisZBKgcli2/LvzqeAcRMAnjZtegzIXnDB2DgzwpUA4onHjZ0gs7UgpjIFn3uVxaCjBMp6hGIQr9oQyA81xSEsO7YmH1GajZbV6i9eNxBmJ2wfz/Rr9sAU62r0NwAwBWl14ciR50bwBGSJsZQHTLl2QNkuzUXQaLS+nL95FDAOLIC33347LgbD78VxU5OxtIBq2LAT4ztA1jBUi8e1t2VdajFotE6nTz2dEFmHnlb5mfslkOWEq6ecjuah1QV9LEyywKTZwZ+OtA89MAoalQJTe7sJ7rNyrOf3fkQ5aHSk7vxsxyhgbIAD/qI0KwG261xo07u+yUClfB1pSZcDQ3saj3iI47urkoEgUJZIW1TUnYABTRKD+S6nk/+sBBuleqGnVkynq+ib661NgTS+zQaEVGuPBIbU+K78NjDAyeItC4R60klUmMm6BoGrbC10JRd137ozMHRgbIADk4/Z3lnI3YHmVX00gRr/FbjllClQToEMDOUUyf8zBTIFWrNLdFoSXb7AKdM/UyBToHtSIFsM3XNccqsyBbqUAhkYupT8ufJMge5JgQwM3XNccqsyBbqUAhkYupT8ufJMge5JgQwM3XNccqsyBbqUAhkYupT8ufJMge5JgQwM3XNccqsyBbqUAhkYupT8ufJMgeZRwIrW9Oloqd0WGHSwp6VmDUpP63dub9dTwJJ8L8N598VS946mbgcM1u57U9HWabWOXOtox5v9vHcmbLJhA9tmvxvf7Lbm8noPBQCCzX3s2GVzWDub2QXKXpEdeR27WwEDjUuo7BxsZ6HXXnutR4ygdtts1VmbEydeFY+j6xENz43s8RSwo5m3e+3k5GwOJ4DbCsAxj/biaO9+Jd0OGBwkYwdoOxfbmaanJGYcK8c5F06HYkH0RHeop9B7f2knHmJFU5gs6XK+8t82b87ftN2hs0WcO+LIAFvNu9+e1FJgeOihvbePL28ws8h27A4fcQJVs/fKL6+vmf8NIHPuhhtmxn0g+Xpd9Sq2ejETpuiqNjSTtvtrWXgKIOzY8Xa0COyizr22K7Q9Pb/77vvoRjim7vbb74yHGzm1ypaH9vl0XkZ7tz1sKTDYGKRaYCQhIzfCCUX2dWxvp7qKkbgTBu+cc86L26q1F6070n5AYD9HO2mzYJiSOfVMCuAf+4o6uduJZTZOtvmxc0adwiamYHvD225bHA9fcvRCOuHLDtIOKK60Z2Q91GgZMNgbke9TDRhoOEEU++nbi7B8V+N6OtPVeQghi8cGsQ63hfYArxVJPTQJJrHBqwNKtKMnWV3NphOQpFyMQyvHoln9wE+293cSuhPFLrvsing0n6P0HOv34osvxlkIez/aXn7RolviyVROrnJOi30926ucug0wGDiM7awIHQQUPS1hRMAH3BwpxtxrlSkPGLgyjrDjXzr70F6U6Yi7nkbL9rY3WZ7Gwe7jhMRZHXZd7mk8RSacrXn0gIGhX78j47mljgRYsGBhtAaAfuIvALB9+/Z4Xik56mjqNsBg52enOjGRDGbqcEc72MrnMaV28/nOP39MPK/B4LYq0Y78SoDg8Nsnnniy221S29m0oGWd7emELS6pA4KdGMasbq/27Ow2Vys/WdDcAwcUO+QorVMw1kUZSbynj80AwJYAg+ioQ22ruRI65TxIZ/PRdmYmXKuWEhFoBYACOQkgQiEYggrS+Pa/VlnV6ujIdVt633bbkjB//sI4mI2W9cknn4aHHno4Tjc1wsyEwm5ZZ5xxVoxMo3srganRfjYrvzHGA8zpO+5YEYNvDnu94IILw8KFN0ezmjVVFKRadcuHbniLOe6TeKweoStp7x3xiDkg1cgYFtvloGLuIJADCqYmjbGPMuvtT7HMen+3DBhuvHHOf06H3ntVFqFFbAwN2QmEga6WEANhDLSzGfnyjmLbsOHZ+BxEffTRx+KZfu457w8Rq4ED/EltUK9PGvziddfqHQjTSq+88kpcbIJZq9VdqY/yspyYjKZtq8VkKj2rXgfw8EEtdNm168s94NjZjFTenkQ79aa6Ex2K9+qlaXn5njNW6OPAH+6nQ44HDBgYA3AOZHGuhoBw+Snf5WWl/9qFt+ygbW2AQ2OdI2pNDR5jyVI2qR/pufJvoLJq1T0xzmPqupExLJbFjbjiiolh586P4/kRdiQXlBeQNJWvrZ2VWgIMhB4wPPnkk/t0xgAj9nPPPRfnYq3aqsYsBkTE/fXXX48gMmTICXHdgJkAFkeyEBwfPnXqtCggp5xyehzQakQk8JjHEfIYzKGyIvquYzzCtXnzi5HJgE5bTGGgPGcwr756UjybsxYwlQ+s8tU3bNjw6F82wlQ026JFN4cjj/y/qCkxjyDUxo3Phffee2+vY87K623mf30AUtwagTHRdLRL4GosXN+2bVvMV6/gpjYqn0UIdKdPvz4G5wYOPC440o1As9jUrx68VM+YJT7kfuEZZ6lOm3ZdnAZ0eHL//kfFMVFnW+NpzADTmDFjw8aNGyNfprY38g3kTz/9zNhHswza0KfP4fH72munRfrW07dG6kx5OxUYNNrgmIIUKX/55X1PscYsjuSycsvMBUugUjIYmAtaOqiVVnRuJIZnrmEIEXmBF/O7hHzo0BNC37794/l/1QIy6sfA6qcZjj12cCzXcePKFugZPvykqI0E9qqBVrHN8jBD77jjzshczNB6z4ZEM8DgCD6AVy8weI4Lwo1Am2uuuTZgHkFQ7WeBCIoCz3r6UOxPI7+1Q/m0qym20047I/YFk+sLemvDqFGjI02dy1gNtCvVq3zPGy8LeYwXc9tUOD7AI+qXr5FEyzt1HSAPHTosrFmzJloO+HHBgkURfPj6lJI+1Co/AQNXBr9qbyMJr+NJByY70NYMkwVMZiLQbcqUqbHcehVVI3WnvJ0KDAio8VZm0Z46W86UJeB4O07HEO5qgkADbN26Nc7pCihhfFpZ+VwHPqWAGxAyyOIU48ZdFBHWgg9WRKVkgEsafmdYv/4f4eSTTwm0D5Nt9uw5YfLka6KZSsh37ty5T/srlemafm3atCmYW6ZltKk84V30QKfi54UXNkWNtW7d+ti/dE/eSkyvD/JwQcxGoI/AmzlvjKkfNI2zDoGd/haT531S+fV8y18ppbbwj5999tkITCwYZnkJIEsAf9VVV0ezn0XTiOBoG2EFevp63HFDogCxEvSrEn0qtbP8GkXAUqCVWQp4lYAqz/gtXrwkKh9WWXnfE73SOOHVO+9cEfvOxcWj6V7KW15Gao/73rlxYDMe51o7h5Sie+utt2PcqTMBIbWjU4BBpxGVeU9TQDlMqtNFgvgNCAgC1Del5LlikgdRmffWN2AGWtFgGQAuwFVXTQr9+h0RD3HFIE6FMoDqPfTQ/43BKO5MtaQOTGXtBCHq2/eIeBis6L4AHkZUl7YV21+tPNfl1Ra+KcvGYBZTqtN0IsDhP/o4gZo5a4rq3nvvi0yR7nGzWFflGhZdd+/+KQY8HZ3OSuASEbg020MTHnPMoBiLKT6vHf7rI6tKm9v6oK2yq9HCdf1nuREoWt07JMz/dA+IoW+ji7A8jx8oAO6pOX4fGtXxBNaRoIU89SZlGgP0oVxuueXWCAzGPH3QUZ+L/Jn6gm74MI0TUASEp556RmwTwU738DH64jfPF5P/+MECJrENQKBe4yO/j/qNd2enpgODASHsAj9r1jwUzZ51656uqBXk1XEvfMycOTtqlPJOl5h+d3j44bVx0GifuXPnR+EXG1APrWGel4ll8NTPmqD5aUqLQzBMWwkT3Hff/WHQoMERHLg+RSFq6/nife3WDkJOU5dbG+4DMEBkZRuLJ3308bDD+oaBAwdFyyFdZ8oyT5VbTJhFLMR7GqwF2ioBEWbiyw8fPiLSY/PmvY9M1w7TqzNm3BDBWdCy1oe7Zebotde27AP0xTb5jXZr1jwcxIKANAFK/MGtufnmW6LyaESIUx36jHf0DQ0pC67j2LEXxdmv7dt3xLJZam2VjwbAjnLCR+hsSb44wV133R0D45XKSIAC9DyTxokbyJ3r37+09kC8IiF8BvYAABgFSURBVN1zXig3SLvUm5KyXGOZGmPWsf6Vg0fK39nfTQcGnTO1grloShqhElF1DNPSIgQXk1TK9+uvv0XfGYoecMCBUcj4rxLCmZk46KBDowDRksp0nb9YMqv7xQUurrWVCJxAnYAP4RS8Kw5eW88X7xtQzOsNUcBFkPxPSbkER+QZM/hYiOMjcIqpJk2aHEEzXceofGk0Libl6DuAGTRoSBSWREv3uEWDBw+NNAICaJSSdrBSxAME8pjotT7MbFPPLDZ11GJc9egfQSE4lu9qu5ki5RjHYltSmxr91kfBTFOVAMi4e6HIOzcO7QX4tdpp3F944YXo7rLUuJNmyFio4l7iINpZpuBjmfiXC2xs0jhRdABq8ODjwzXXTNlrDFesuCu89NJLceyLvIWWO3a8FWMKXGNtKt5vlCYdzd90YNBBnbKg5P77H4wmUTWLQcdpNvn4U5ViEBhpy5bX4/sHf/vbwZHgaTVfGhR+oSChGQvChwEJlRdKaGu+flsMqC18YNNMNDXNC1wqPccqoZGYrlY3VkrooG+0w8iR50aNXmROv9Wpf/IBrvThl3pLDoNwHdJ1DI62yi4m7VmxYmVkRG4EzZzqYs5bHHPEEUdFAP7hhx/3el4+guUZrhT/ttYH6LNOtCPVUWxL8TfaAawTT/x/8fPOO+9Gy43SIEz6hQaJDx5//MnoVmqPa/Um7UgWBDOelTZhwsQISDS015GBfDnd0nPaUpp5ODJMn35dXD3qlWXmP5786ae9tXtqV4oRGUNjk8aJq7BkybLIs+vWrdtrDI11Evoi/VwD+gCNMi0B0d6uRqo3faMRSxTP6l89z6Rn2/puOjCoMBEcs9Ho/L/HHnsizicXiSEvotKmzDFz/+WCiGC0OG148MGHRv8vEZZQmokQrcWABp6QmPpkvgIMAKEdBs49eVIbfKePMvmCtKVIOlCxOIZgGcwi0f1fterv0SrS9kpJfgFP8Q+Cqe56kvY0MiuBOcRy9POYY44NS5cu36Mh3XPcPV+emd3Wmo562tdIHsIKDIwd7clyYaKLDQgOJ+H3zUfnCs6efWPkiXSvkfrkRT/1GnOzOmPHjguXXHJp2LJlb4tNXrzA5+eCcTlZdtqbxlpZplITIPtfT8JLLIhGZiUoOfw2YMCx4emnn44gLe6D14A5/iErRf71+4knngqjRl0QLbPU7nra2FaeTgGGVKkB0jGRVX6phSPlAy4PU9aUkFdHEaGYBJIs9DHlZvDS6klEsi7CYDL5BKOUVVrDMD2wLs44Y2QEHWameAe/VuwhtcE3gmujqT5Mu3z57dH0O/zwfjFoybxj/gGN9Jx6DKRIcTWBxxxmY2hHAGbQ6kmNAgNXSxst7hEbMaWKNtpK89ImBFMgE8i1MmFcsR1am2tG8L2WXlrF9+finCTMtH16v6ReIazWH/03TsaH9jde5WVaSbh167boZnFHS1brF3uK1H7WExdFLKsolHsyVfjRHmAAAtxplqogqJgPq4PFadrS6kdKCEglPtQf/WOdG9t0vUKTGr7UqcCg4ZjTbIONV2hCg1VMiM2EZzab2jNtVBxAz/NnWR0HHnhIfMPMTAdiQXq+qugvATD1xU8eMuT4KCisFebx4sVLY+BNQIjfydRDRIO+bNnyqFFpMYMBpETMMTKrw/oLUWoDp+3cFJoPyAgQVRJ4fVKHN+NYNBil3kHT90YsBvXzWc3pAwBmqDbqBzDg63IzCGOlthbHotm/0YFl4P0X1p4pVLRNroK+ymMK9emn10fmBwzF8S9vk3uEAb+gL6AR86j2ESMA9uoo5z3/gbv4h/ZZv4BmgBbPUkizZs2OS/XRtN4xLAJDvQucgDnXlAupLQcddEgww0QZsl7xo9gXnqPIuC3iJ5TPhg0b4v9adCunY1v/OxUYVI74pvyYiKYsMUUx6YxrNJ2FSwJSmCUlzzOVWROmkpjLhABQPPXUUzHodN1118fAmiCX++PHXx7LM0BAx3LZtGqMeQf9DTLhAVgi0YJNpjTVR4gsRRWImjhxUrxOqHy8wQZETP+JnVQSNvViLGUCp3oZSp/RQ0yFz+tZDFMraa84xMqVd0cwRMNp06bHRTGsNLMQQK2RNtSqr5F7xlHd6MBExvgYOjGwb+1HR3m0l9VQy2LXD2NqGji9dWiqutYHTQSB1VVMyiJk3C9TqoKWpj4BLLAAaLQ2PjEOqd3FMir9xs8AhqIDhG2NoTK0Ba2WL78jWn7AoAQKgOGwqBRZweIQ5IElZirYbAeLNsXdKrWnPddaAgwCJMwkWpbQlCcEp9lp/zlz5kaNkAbBNwYzgFadPf7442HTphcjcQyAD+1MywoiMQ0xHybwrG/3BfS4ExdffFnUCO55lnsDlErPlOIPhJ2mAyCmsdSfypKPBQEYMHElgWO2cp/MLgDFRpP6tS3VW+v5RB/Mp23mvvWH5kVrrkalNtYqs1n30F7/r7xyYozYew26vC3az4276KJLI48A5bZSGjuWA9O6rQ/aJH4oL1tZ7lMKFrgRPABGQRn7Ws+Wl5X+K1N9xtHH/3pS6hfgQzfuKx7jCrOOKDfWsvvyil3hQ7E5Y9/M1BJgEODx5mSKD1TqgM4S+nPOGRXNvnJiYihENlBFYstHgAiSe+XC5D8GQmigI8BjwCXPKtdy5SLDpuuuFa+rl8CZy7dM1WBUaqc8tN/q1fdHQKvU3864VupL6aUl/W51Ko4Fmovn0Gr8ZDRHv2JKdAZmNjHlR1MArU7FdgNTbU/A3Oq2qM/YaYd1OmbaWISU0ejRF0YAc88aGNP8lkyXZk72VbgdaXvLgIGvXQsYdBaAMPXFC5rF2JgR6noF2gwBgGhv2dpolabBYL5hoGIimOqzFFieSis5i/l72299tz+haV50pgzM7VeLGxBIAogvxIloPuC+Pyc0oXC4V+jInURD8TTWTIp1mUoVs5k3b350I8pBt6M0bAkw0Bxega4FDEwv2kIwkEb2G5E6mjCauWREVibroL3lGjCxDi8kcWsMUhFkmO1cEC6RICjgaG9dHe13VzzP9DV2YjamkK1QFbSrxrRoh6asKwpBIJBbsL8mvAIoud2lmFjfGPcw1SuGxEVFS5/nn98Up9XxNeBtNqC2BBgEb+bMuakmMJSIUpo+go7lKwXbyyyYj4AiZtEtaLQ87TM3LtBpGtSsiKhwsUwWBd/UZrDew68mEI3W3VPyi9eY8hV0Y1FZm4AG1cCRMpAH0AIGrhca788Jvf7+93sjDwl+Atq1a9fGRWUpToLPVq9+IAIDhSs2AlCamVoCDAI7pR2cqu8SrVOEDKPIyy8tX9PQzI43WlYCBmhOw0HqoivhPgvCdKgFRSyHojXRaH09MT8a8ItLllTbKxcxusC0tR4Wlgn2NpvBexodSzT8Ma7LYUGl4HexH/hOoN27HQKQLAm0bGZqKTCI1NcyeRAFIeyJb/2AhSndKSG+9llrAbWL1gKkN1du3UCaxtSf/S3p8x9/lFaUttV3edGNlWDmCCgUadrW8731PhrgNR/KpZyP3AcOaCZoL195no7SpqXAYBqoLWAgcIJ2gMES3p6SMLWFT6yJasG2ntKX3M5MgW4FDIYDGgpIicYSsJ6SaD4vsogxALecMgV6MgW6HTAwiZhP5ml7ko9eMv9K+0T6nVOmQE+mQLcDhp5MzNz2TIHeQoEMDL1lJHM/MgWaSIEMDE0kZi4qU6C3UCADQ28ZydyPTIEmUiADQxOJmYvKFOgtFMjA0FtGMvcjU6CJFMjA0ERi5qIyBXoLBTIw9JaRzP3IFGgiBTIwNJGYuahMgd5CgQwMDY6klZnNfmGlwSbk7JkCnU6BDAx1ktgyZy9KeY/Dcu2cMgV6MwUyMLQxut7X8FKUd95tK+6kIm992g0qvybcBvHy7R5LgQwMbQwdUHBehT0rbR5jdyY7DdnizXVvVeaUKdDbKNCtgSH5863w6dXBXSivi1XgQBebu9rD39kVjrADEA4ksUlGTpkCvY0C3RIYmO92qLFFmIM1nDVggxfXaPBmCSMQoPHtgmNnJjtG2YzUIaa+gYI61e/kIweXOB3Ikeu2OreDTrPa0tsYK/enZ1OgWwID/91GLfZOvPrqSfG306XXrn0sbsLqnMpmJADksBNugpOQnIHgUFNbxNtLz7FpNosBAk5sHjNmbDwBy1mZjkq3nXetHama0cZcRqZAV1Cg2wEDc/6TT5x8fG3cjdkJUs4nGDVqdDxGjLYGGh1NrAVC7QwIJ0EvWnRztApsKTd8+IhYl3MRWQUffPBhBAl7UdoW3WnETuB2gG6tzWSSe1LJRWlv+1O7HTICwBzs60g71lWOd7SXqvm5cgp0O2AgaA7TmDBhYjzv0BFcDvTs2/eIeJ6g8y+Z/h1NBIybwCpwurBTsx1i67Rhh9/atdgR8knYfNvB2rbxH320s83qlc/NcNiNbdWTa9IRkPCsdji5SftOP/2seOhI6YzFpfGYv46U32ancob9hgLdDhgwNi3tXAJHuzua/IEH1oRXX311j1aUp6OJ4IohcB3GjBkXLQEzDbaFF2sAGsXDaeQHWgSzlpWQ2qWNwGDhwkXxoF3najhpqbS1evuOj2Ph2G7d8XjOtnBQqxO7uTQOJbG1vXUW9bQvtTN/ZwpUokBLgaGt7eM1kLA60chxcnfeuSJu1V4S0uZukU3Qnf3goFvWyZYtW/6zeKl0/mUlYjVyLQEPc3/KlKnx9GrHmDuW3ZkAwEcgtV4hVp5t1m+6aW4YOPC46PoAAYFSm9A6pAc42LpeuTllCnSEAi0FBpq/FtNifod4OtH32munRjMcUNCUBMA3QZKvo4lG57LMm7cgcE9o8lI9DgwtHZzbDMuEO+Ekb7EMoMBNGTLk+Hha0yOPlE4Y0sda/dJf9x2Ld9RRR4fhw0+KsYXUPgAxe/aN8Vh4AVIA0gwadZTG+fmeS4FuCAwO9FwfRo8eE5555h9xMdH48RPiLID1A4S4GVOEhErwkGVyxx13ho0bN8bTsM8665y4XsEsBZemowKWhBogOgbeqVxOLrYmgpA7ns3CKQf6sowq1aetnnd+4cEHHxrOPvvcGHBMwOA5x5oNGjQ4HHfc0AggzaBRz2Xr3PKOUqBlwHD99TNjrKCaxUAgHArLZ7ZmgOCcdNKIMGjQkD1a9rzzzg8bNmyo2/yuRhzad/fun+KRaGIYph6HDh0Wg51HDxgYhdV1y6ArCWq1ctu6riwCy4WxrFpMwJmNxx8/LC6YSgeXal8xAQBTuFOnTg8HHHBgBE3Hl6W2oekTTzwZXQmBWr9ZITllCrSXAt0GGEoC803UnrT13Lnz4iG4NOG9994XnnrqqfDWW2/tmSVob4cJE0EimATN+X+rVt0TVq9eHdcuPPjgmjgNyBxPGrm9ddV6TtmE1/oMgck0G7J9+/boyhSfBRRcnUsvHR/++7//GsaNuyi6QQkYuD5p2vXww/vFmZNqAFwsN//OFKhGgS4HhqRFrS4UwRdE27z5xfDVV19HLSmy74P5gUcShmodqnWdMDK7nVJNU9PYph756DSyetwnsPJ2pK5a7VC+lZaWWk+ePCXOWnArAKIFVeVuAGDYtevLSBvA4DRp9ErtQxvH47E8+vTpG12ODAy1RiDfa4sCXQ4MmP7rr78JAnHiCjQowUlM31YH6r2vPOWanpw27bpw003z4nqIcrO93vIayadu05zAZ+fOj8NLL70cZs26MbpLaUWl/lv+DRQcCltM2siCGTfu4vCXv/xPPB0aUCQalSyGjXGhVrYYipTLv9tLgS4HBnsbmCqcOPHqYDqT798ZiQVgYdSSJUvD5MnXxNWVrQAFfVGPGRDrDVgFRxxxVBTi66+fEazsZKnUslA8r+2WiP/1rwcES7IFK4vAYFWm6cr+/Y+KMRpgkVOmQHsp0KXAgOGZ8d5L4D87Rr7cjK7UMea+KU1a1u8kIJXypmsEhZnOhRDko8Hbek77mOyrVz8QduzY0ZAro2x1WGMAjEaPvjC+bzFy5Llh2bLl4ZVXXg2WNTP5a4GC9ruvn/PnLwh/+9vBsQ/vvvvenvYrw6vgZiWscWCR1EPHRJv8nSlQToEuBQaCI5YwfvwV0Uxm5pd8/F+jUGFuwlkuwMBk7tz58VVoKwEJjiSf/OlTfI4Z752CY445NqxYsTLWw1rRBh+rHFM5pbJKmt4z5503Or6vIV+xzHJiFv8rCxiJY1hyzWVYsmRZ+PDDj/ZYCMX8tX6rkxtk+lYMwUIpC6fU4d4PP/wYp0DVc+qpp+9ZGl2rzHwvU6AWBboUGDA7jewFqQEDBoYFCxZFht+2bVuMNdCKTGYCVhRIgAEQSlr8T+AgKKL3LA8rC4takynuxSeCdfbZ58X1EIKQb775Znz3wJoG6xb2BofS+xSvv741rsAs3qtFVPeSMDPx77//gWit6G8loGurrFSeGIT3IgYPHhrXLSQws4AqvVuybNntEXjqKTPnyRSoRoEuBQaCKzrv1eo+fQ4LAmc2QqH1vAtAgL0XsHz57VGwCBUgMWvx4IMPxaXTSVjd46sz+wGN2Q3uRtLyLBFTgf37HxkXCdGu1i/QvoTNM3z4zZs3R/PecwKh69c/Ewi35xtJ2mW1JuDxvHLEE2p97AjFGtKXSonVw2pAI201o4IeNowZMeLUGL/wope255Qp0BEKdCkwEB7CTGhOPHF4OOigQ8OBBx6y52Mxj2snnXRKFAhAYv3BvHnzo3DQ5AkY3GMteG0ayHju0ksviwJNexMWQmTtgjUDxXr8PuCAv4U+fQ4Ps2bN3uP7Wz9hJuC662ZEgW2E0AkYxBMs1tK/YcNOrPk588yz4zJwfamUXAcc3iGx+Gv27DnhrrtWxg1ktJOlJU/RuqpUTr6WKdAWBboUGDSupOl3B26DICR3QvzAt1eLvQpNs9OUyWJYubK096J9ElIyxSdmYD7/yiuvim9mjhx5dpwiJCgJHEz7Wf68ePHiCDDelZg/f2EM6Hm1e+bM2WHXrl3hl19+DS+//EoYO/aiaIU0ajGoj5B6v8FsBHeirY8NYay2TGCX+pa+lened999H/ebXLjw5ghkZnO4GVwVeXLKFOgoBbocGHQgCa0gGo3onQLaXzDSm4mm5/wGDGIB1iF4aUhMoJjc96w9EFgGtL+IfRIW3/KIWahH3IEgKod7Yvm1lZZAQB7vZZTeS9gSha5YVz2/CTFLRXk//tj2R53al9pbrQ7lAgHt1w/l1/NctfLy9UyBcgq0DBhmzPCuxINRUMsb4T/GxuyY3Ic/zR/34tR9990XI++EbOvWbXHvhNKah739fgJDUPj048ZdEpdQK7eYCB1NDjBSPbTtnDlzo0nuJSft8JYnS8IqQ4FOz+SUKbC/UKAlwPDBBx8EwMCUJpDlibDS2qb2zE6Yj7e9miDbDTfMinGIpHkBQml7t+fi9aRdgQKN601FLkilFZTychHEJgQ3vQLN//cC1YgRp8XpTPUoR3usxJw5c1Z0LVzPKVNgf6FAS4CBxqV9k5leTlwCa2Xg5ZdPiNu4eUPQzMStt94aZy1ofRqbNTB9+vXxTcSlS5fHuEQRGAivaUozHcXdl1J9CRj48mmVoKk/rooZAYAgD/DijgCmqVOnxc1gMzAkKubv/YECnQ4MhNqeh8uX3xE/hLs8EUbXBQ5pfJbFtm1vRFM/5QUMfGqr/yyI4mZwBRpJ6tEei4y8RXnXXXfHHY+sQCy6HMp9++23467QgpNWTBbvN1Jnzpsp0BMp0AJg+COubuQCcAtE/CslgkdTpzccAQH3ICVC7ZqXh8QE5C3eT/na+lYO7a8ewU5WgnJcTym1xW7VZjH8L95P+fJ3pkBvpUCnAwOhI4Si/gJ5NhjJ2re3slPuV2+hQKcDA0IBAua7KURnRAjsZQ3cW1go96M3UqAlwAAEkt8OGCwievnll2NcodyM741Ezn3KFOhpFGgJMCAKABAj4LNbi7B06bK40hFgZOuhp7FNbm9vp0DLgAEhAQCA4Fr4+J1TpkCmQPejQEuBoft1P7coUyBToBIFMjBUokq+limwn1MgA8N+zgC5+5kClSiQgaESVfK1TIH9nAIZGPZzBsjdzxSoRIEMDJWokq9lCuznFMjAsJ8zQO5+pkAlCmRgqESVfC1TYD+nQAaG/ZwBcvczBSpRIANDJarka5kC+zkFMjDs5wyQu58pUIkCGRgqUSVfyxTYzynw/wE4bUy5juyMVwAAAABJRU5ErkJggg=="}}},{"cell_type":"code","source":"from sklearn.svm import SVR\nfrom sklearn.metrics import mean_absolute_error\nfrom sklearn.model_selection import KFold\nimport re\nn_fold = 5\nfolds = KFold(n_splits=n_fold, shuffle=True, random_state=42)\nscaled_X_train = scaled_X_train.rename(columns = lambda x:re.sub('[^A-Za-z0-9_]+', '', x))\n\npredictions_svr = np.zeros(len(scaled_X_test))\n\nfor fold_, (train_idx, val_idx) in enumerate(folds.split(scaled_X_train,y_train.values)):\n    strLog = \"fold {}\".format(fold_)\n    print(strLog)\n    \n    X_tr, X_val = scaled_X_train.iloc[train_idx], scaled_X_train.iloc[val_idx]\n    y_tr, y_val = y_train.iloc[train_idx], y_train.iloc[val_idx]\n\n    model = SVR(kernel='rbf', C=1.0, epsilon=0.1, gamma='scale')\n    \n    model.fit(X_tr, y_tr)\n    \n    y_pred = model.predict(X_val)\n    mae = mean_absolute_error(y_val, y_pred)\n    print(\"MAE: \", mae)\n    predictions_svr += model.predict(scaled_X_test) / folds.n_splits","metadata":{"execution":{"iopub.status.busy":"2021-06-11T04:40:05.697472Z","iopub.execute_input":"2021-06-11T04:40:05.697912Z","iopub.status.idle":"2021-06-11T04:40:24.794576Z","shell.execute_reply.started":"2021-06-11T04:40:05.697864Z","shell.execute_reply":"2021-06-11T04:40:24.793579Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 6.3. Mô hình LightGBM","metadata":{}},{"cell_type":"markdown","source":"### Lý thuyết:\n<p style=\"font-size:18px\"> LightGBM là một framework được Microsoft phát triển mục đích xử lý thuật toán <b>Gradient boosting</b>. Ưu điểm của LightGBM so với các framework khác như XgBoost hay pGBRT là LightGBM sử dụng hai kĩ thuật mới <b>Gradient-based One-Side Sampling (GOSS)</b> và <b>Exclusive Feature Bundling (EFB)</b>. Nhờ đó mà cải thiện được tốc độ tính toán cũng như độ chính xác. Đặc biệt là ở những bộ dữ liệu lớn</p>\n<p style=\"font-size:18px\"> <b>Gradient-based One-Side Sampling (GOSS)</b> sẽ lấy những data instance có gradient lớn và chọn ngẫu nhiên x% trong số những data instance có gradient nhỏ để đưa vào làm dữ liệu huấn luyện. Giải thích cho điều này là bởi, những data có gradient lớn theo định nghĩa về mức tăng thông tin thì sẽ mang lại nhiều thông tin hơn. Do đó GOSS ưu tiên giữ lại những data có gradient lớn </p>\n<p style=\"font-size:18px\"> <b>Exclusive Feature Bundling (EFB)</b> giúp cải thiện tốc độ huấn luyện của LightGBM bằng cách down sample chiều dữ liệu. Những feature không đồng thời bằng 0, EFB sẽ chuẩn hoá về thành 1 feature duy nhất để giảm chiều dữ liệu, từ đó tốc độ huấn luyện được cải thiện. </p>\n\n\n### Cài đặt\n<p style=\"font-size:18px\"> Đối với mô hình này, em cũng cài đặt bằng bộ công cụ scikit_learn. Với tập params thu thập được và thử bằng tay. Tuy nhiên dù có thay đổi params thì kết quả thay đổi không đáng kể. </p>\n","metadata":{}},{"cell_type":"code","source":"params = {'num_leaves': 51,\n         'min_data_in_leaf': 10, \n         'objective':'regression',\n         'max_depth': -1,\n         'learning_rate': 0.001,\n         \"boosting\": \"gbdt\",\n         \"feature_fraction\": 0.9,\n         \"bagging_freq\": 1,\n         \"bagging_fraction\": 0.9,\n         \"bagging_seed\": 42,\n         \"metric\": 'mae',\n         \"lambda_l1\": 0.1,\n         \"verbosity\": -1,\n         \"random_state\": 42}","metadata":{"execution":{"iopub.status.busy":"2021-06-11T04:40:24.797408Z","iopub.execute_input":"2021-06-11T04:40:24.797948Z","iopub.status.idle":"2021-06-11T04:40:24.804665Z","shell.execute_reply.started":"2021-06-11T04:40:24.797897Z","shell.execute_reply":"2021-06-11T04:40:24.803609Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.model_selection import KFold\nimport re\nn_fold = 5\nfolds = KFold(n_splits=n_fold, shuffle=True, random_state=42)\nscaled_X_train = scaled_X_train.rename(columns = lambda x:re.sub('[^A-Za-z0-9_]+', '', x))\n\noof = np.zeros(len(scaled_X_train))\npredictions = np.zeros(len(scaled_X_test))\n\nfor fold_, (train_idx, val_idx) in enumerate(folds.split(scaled_X_train,y_train.values)):\n    strLog = \"fold {}\".format(fold_)\n    print(strLog)\n    \n    X_tr, X_val = scaled_X_train.iloc[train_idx], scaled_X_train.iloc[val_idx]\n    y_tr, y_val = y_train.iloc[train_idx], y_train.iloc[val_idx]\n\n    model = lgb.LGBMRegressor(**params, n_estimators = 10000, n_jobs = -1)\n    \n    model.fit(X_tr, y_tr, eval_set=[(X_tr, y_tr), (X_val, y_val)], eval_metric='mae',verbose=1000, early_stopping_rounds=500)\n    \n    oof[val_idx] = model.predict(X_val, num_iteration=model.best_iteration_)\n    predictions += model.predict(scaled_X_test, num_iteration=model.best_iteration_) / folds.n_splits","metadata":{"execution":{"iopub.status.busy":"2021-06-11T04:40:24.806344Z","iopub.execute_input":"2021-06-11T04:40:24.806669Z","iopub.status.idle":"2021-06-11T04:44:44.516334Z","shell.execute_reply.started":"2021-06-11T04:40:24.806639Z","shell.execute_reply":"2021-06-11T04:44:44.515452Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Nhận xét:\n<p style=\"font-size:18px\">Ta có thể thấy MAE của mô hình SVR có phần thấp hơn so với LightGBM, tuy nhiên, kết quả sau khi submit lại trái ngược. Kết quả của LightGBM cao vượt trội hơn so với SVR. Em phán đoán rằng mô hình SVR có thể đã bị overfitting với bộ dữ liệu huấn luyện, hoặc bộ dữ liệu submit có nhiều điểm gây nhiễu nằm ngoài ống hơn khiến cho mô hình SVR không còn được chính xác </p>\n","metadata":{}},{"cell_type":"code","source":"submission.time_to_failure = predictions\nsubmission.to_csv('submission.csv',index=True)","metadata":{"execution":{"iopub.status.busy":"2021-06-11T04:44:44.520856Z","iopub.execute_input":"2021-06-11T04:44:44.523091Z","iopub.status.idle":"2021-06-11T04:44:44.544273Z","shell.execute_reply.started":"2021-06-11T04:44:44.523020Z","shell.execute_reply":"2021-06-11T04:44:44.543165Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission.time_to_failure = predictions_svr\nsubmission.to_csv('submission_svr.csv',index=True)","metadata":{"execution":{"iopub.status.busy":"2021-06-11T04:44:44.545777Z","iopub.execute_input":"2021-06-11T04:44:44.546250Z","iopub.status.idle":"2021-06-11T04:44:44.562446Z","shell.execute_reply.started":"2021-06-11T04:44:44.546201Z","shell.execute_reply":"2021-06-11T04:44:44.561190Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"<a id=\"7\"></a> <br>\n# 7. Kết quả","metadata":{}},{"cell_type":"markdown","source":"## 7.1. LightBGM","metadata":{}},{"cell_type":"markdown","source":"![image.png](attachment:3a2ac249-cf34-4da1-a994-791fdce0f5dd.png)","metadata":{},"attachments":{"3a2ac249-cf34-4da1-a994-791fdce0f5dd.png":{"image/png":"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"}}},{"cell_type":"markdown","source":"## 7.2. SVR","metadata":{}},{"cell_type":"markdown","source":"![image.png](attachment:5a3ad77e-4772-427f-8201-d6c7db31e267.png)","metadata":{},"attachments":{"5a3ad77e-4772-427f-8201-d6c7db31e267.png":{"image/png":"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MAETMAETMAETWDQELGoXTVO6IiZgAiZgAiZgAiZgAiZgAiaw9AhY1C69NneNTcAETMAETMAETMAETMAETGDRELCoXTRN6YqYgAmYgAmYgAmYgAmYgAl0gsDExK3Uu/dA2rJ916w+xCUNW3sIWNS2h6NTMQETMAETMAETMAETMAETWCIEWhG0EsKkYWsPAYva9nB0KiZgAiZgAiZgAiZgAiZgAkuEgITpbKvbavzZ5rtY41nULtaWdb1MwARMwARMwARMwARMwATmhECrorTV+HNSqQWcqEXtAm48F90ETMAETMAETMAETMAETKDzBFoVpa3G73yNuztHi9rubh+XzgRMwARMwARMwARMwARMoMsItCpKW43fZTjmvTgWtfPeBC6ACZiACZiACZiACZiACZjAQiLQqihtNf5CYtWJslrUdoLyAszj5r2H6fWv+lPv4FjN0v/km2Pp80PDNcP4pAmYgAmYgAmYgAmYgAksJgKtitJW4y8mlu2oy4IQtQis9ccup+Hx2+2oc07j7tR0euWz/WnD8ZGW01w3cDmndW9quuW0uiWBf956Mv32mxvS2O0HlSJNP36Svjl5JW05dbVy7O3NJ3K48TtTlWP+YgImYAImYAJzTeDu3bupv78/bd26NZ07dy49evSooSwnJyfTrl270oEDB9KtW7X/R+SpU6fSwYMH0/j4+AtpP3nyJOer/NkvGmU8fPhw2rJlSw5bPM/+48eP05kzZ3KYgYGB9ODB83G3LLyPNUaA9oAn7deM0R6HDh3K8aamZs5tSPPixYtp27Ztad++fenOnTszkqafkF/Z58qVKzksaZad5xj9IBp9+vTp07lv0NfpT7buIdCqKG01fveQ6I6SLAhROzAykYXTsr1DbaM2OHY7p4mwbdVIAwE4ODbZalJdEX/y/nT6nX/6On3/yyOV8hy/civ9l3e35npyTjZxdyof+/HGAR3y1gRMwARMwATmlMDIyEj69re/nb71rW9VPm+99VYqipBiIdauXVsJT9yXXnopnThxohgs7w8PD1fCIoKjIYZffvnlynnSeuedd9LDhw8rwRAosXwKE8U35f3pT386I9yrr76abty4UUnHX5oncPXq1fTGG29UuJbdcKiW6ubNmyvxrl+/XglGu9HGsU3pPydPnqyE6e3tnXE+hqXvYaQZj8fvP/rRjyppIZhff/31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dcImYAImYAImYAImYAImYAImYAJzTcCidq4JO30TMAETMAETMAETMAETMAETMIE5I2BRO2donbAJmIAJmIAJmIAJmIAJmIAJmMBcE7ConWvCTt8ETMAETMAETMAETMAETMAETGDOCFjUzhlaJ2wCJmACJmACJmACJmACJmACJjDXBDomah8+fDjXdXH6JmACJmACJmACJmACJmACJmACS4xAR0Tt1atX07Jly9K9e/dmjffWrVstxZ91xoWIT548SatXr265LK98tj+tOXqpkPrc7X60ZzC9se7oCxn81cd704bjI2lg5Gb6vXc2l36+OHThhXg+YAImYAImYAImYAImYAImYALdQKAjovbRo0cJYduK7dixI505c6aVJNoSF1GLQL97925L6f3Jv/ekX+0baimNZiL/89aT6W8+7Xshyh+9tz19fmg43ZuazsIWcfv3a44kysd3PuN3pl6I5wMmYAImYAImYAImYAImYAIm0A0EOiJqHzx4kHbt2pXrOzo6mo4dO1apOx7YAwcOVPYvXLiQenp60p49e9KVK1fy8ZMnT6YVK1akdevWpUOHDlXC6gtpnjhxIp0+fTpt3749ET4ud56cnMzxdA6RjZEWcTGOUcbx8fG8T5kpR0yHExK1Fy9ezOF7e3sr5bxx40Yud07g2Z+BgYFE2KLVErW37j9M7+44lf5i2e709ubj6dLEUwE9dvtBwsO748y19NfL96V/WD+Qzl+/XUn60eMn6YPd53K819YcSV8fH0nv7Tydz9cTtZVEUsp548G1mYAJmIAJmIAJmIAJmIAJmEC3E+iIqL19+3b2bgJjaGgobdmypcLl2rVradWqVXmf73hBCXP27Nm0fPnyhCBFLG7cuDHt27cvXb9+vRJXXwhPPETp4OBgWrNmTTp69OlSW5Y8I4j379+fzp8/n9NBrGKIadLEENCkIdFMWNIpmkQtaSJYEdDEwxM9PT2dv0sYI4g5NzExUUwme0LLPLXTj5+kP/1gV/qzD3vT6iMXsohlWfDNew/T8Pjt9Ntvbkh//H5P+uzg+fTnH+3O35U4y4t//+db8jnEL2H/8ld78mmLWlHy1gRMwARMwARMwARMwARMYDER6CpRi5BE4OrZW7ylslrLjxG1CODHjx/n4MPDwxVBiujcunWrkkmkidBk+TBCFHGKHTx4MIeTkMUD29/fX4mnLxK1eIVleJ4llIknYUy51q5dq2AzttU8tf2XbqTf+aev092p6Rye/P7wX7alVUcuVETtiau38rmrk/ezcL1+50FCDCNij195eo4ACOMoajlf9mH5cTS8xPbURiL+bgImYAImYAImYAImYAIm0K0EukrU4ulEHCI68cwiTmX1RO3mzZsVNHt2JVYRmXG5M4EQriMjI1kEI4Zv3ryZX/6ER5h9BC9beVwrCYflx4SV4eXl5VEY38kbMYpH+tSpUwo2Y1tN1H564Hx66cOnS7UV4fWv+vNSY3lqdZwtIvXs2GQaHJvM31mCLHtn28kZohaBiwCOnz/4+db8TK3isLWojTT83QRMwARMwARMwARMwARMoJsJdFzU4o1dv359hQnCVcuPdRBPrbyvesFUPVEblzRLnJLekSNHZjyzyzEEq5YEs2SZpckSweyzJFnCVGXSVp5anv2VUVaJarzFxKVeiPP79+8r2IxtNVG77dTVvIQ4Bub5WZ6VrSVqedETArf/0vOlzi9/sm+GqK31oqiYn0VtpOHvJmACJmACJmACJmACJmAC3Uyg46IWwYrYu3TpUn5eFoErUcuSXkQlL21imfDKlSvzc7AAxOPa19eXzxWBIiqriVo9p4vXlXTx2iI6tVQZkU15eDEVpn09a1vMS6IWTzLPClMfvLTHjx+vBD18+HAWztu2bascK35B1PISJ56V1efho8dp4u5UXn78cd9QYn/n2WtZrLLkuJaoJX08sbzNeOOJkextReTG5ccWtcVW8L4JmIAJmIAJmIAJmIAJmMBCJ9BxUQswvKd4SxGXPH+qpbtTU1N52TEikw9LkfWmYl4QRRwJ4Ai+lqglHGKZuKTJM67y0nKOPDkuz6tEN8uTy0yilmdwVU4Et0QycVjOHNMsSwdRW3y+VW8q7hu+nv9fLOd/962N+YVRpDE8fifHiekRhuXH2J2p6cRbj3lZFG9O/scNA7MStZTDz9RGyv5uAiZgAiZgAiZgAiZgAibQrQQ6ImoRkYjKaFEExuN8R8hKzMZzCMqy4zFMte/ERcC203gGuKw8EuBl55rJH69tM3Z6dDJ7ehWHNyD/3ZeHteutCZiACZiACZiACZiACZiACSw6Ah0RtbyYCW/mUjC80Cybjm9H7lS9X11xIHt4+fc9+pc+vYNjncre+ZiACZiACZiACZiACZiACZhAxwl0RNTyRuBantmO13oOM+T/5I6Ojs5hDtWT5s3H35y8kt78eiD9687TSf/6p3oMnzEBEzABEzABEzABEzABEzCBhU2gI6J2YSNy6U3ABEzABEzABEzABEzABEzABLqVgEVtt7aMy2UCJmACJmACJmACJmACJmACJlCXgEVtXUQOYAImYAImYAImYAImYAImYAIm0K0ELGq7tWVcLhMwARMwARMwARMwARMwARMwgboELGrrInIAEzABEzABEzABEzABEzABEzCBbiVgUdutLeNymYAJmIAJmIAJmIAJmIAJmIAJ1CVgUVsXkQOYgAmYgAmYgAmYgAmYgAmYgAl0KwGL2m5tGZfLBEzABEzABEzABEzABEzABEygLgGL2rqIHMAETMAETMAETMAETMAETMAETKBbCVjUdmvLuFwmYAImYAImYAImYAImYAImYAJ1CVjU1kXkACZgAiZgAiZgAiZgAiZgAiZgAt1KwKK2W1vG5TIBEzABEzABEzABEzABEzABE6hLwKK2LiIHMAETMAETMAETMAETMAETMAET6FYCFrXd2jIulwmYgAmYgAmYgAmYgAmYgAmYQF0CXS1qr127lm7evFm1Evfv308XL15MT548qRpmticeP36c056ampptEi/Eu3LlSjp69OgLx5s90K50msmXdqA95soePXqUDh06lCYmJnIWt27dSlevXp2r7JyuCZiACZiACZiACZiACZjAIiHQ1aJ2w4YNqb+/vypqxN2yZcsSgqjdhmAm7evXr7ct6b6+vrR8+fKWy9uudJqp2JEjR9LGjRsbjnL79u20b9++ND093VCcu3fvZt6nTp3K4Y8dO5bWrl3bUFwHMgETMAETMAETMAETMAETWLoELGqrtP1ciFqywgPcDmtXOo2WpVlRy80Abgo8ePCg0SxmsLGobRibA5qACZiACZiACZiACZjAkibQMVF77969tH///rRmzZq0evXqdPDgwRkeS5YQnzhxInsD8dCdO3cuFT21N27cSHv27EmrVq1KO3fuTIODgzU9tQg/PL3r16/P6SKUJAaHhoZSb2/vjMYn7MDAQD4mUXv+/PmcF2XG88iyWNmBAwcSnkW21GvXrl2JeGfPns35bdmyJV2+fFnBUzFPhN/27dszj927d8/wCjdTdryhLGuG16ZNm9LJkycr9SRzynf69Ol0+PDh7P2k3vU8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"}}}]}