File size: 97,011 Bytes
3c8c0e4 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 |
{
"cells": [
{
"attachments": {},
"cell_type": "markdown",
"id": "92e48866",
"metadata": {},
"source": [
"## Model Training"
]
},
{
"cell_type": "markdown",
"id": "25791a74",
"metadata": {},
"source": [
"#### 1.1 Import Data and Required Packages\n",
"##### Importing Pandas, Numpy, Matplotlib, Seaborn and Warings Library."
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "b080dfb2",
"metadata": {},
"outputs": [],
"source": [
"# Basic Import\n",
"import numpy as np\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"\n",
"# Modelling\n",
"from sklearn.metrics import mean_squared_error, r2_score\n",
"from sklearn.neighbors import KNeighborsRegressor\n",
"from sklearn.tree import DecisionTreeRegressor\n",
"from sklearn.ensemble import RandomForestRegressor, AdaBoostRegressor\n",
"from sklearn.svm import SVR\n",
"from sklearn.linear_model import LinearRegression, Ridge, Lasso\n",
"from sklearn.metrics import r2_score, mean_absolute_error, mean_squared_error\n",
"from sklearn.model_selection import RandomizedSearchCV\n",
"from catboost import CatBoostRegressor\n",
"from xgboost import XGBRegressor\n",
"import warnings"
]
},
{
"cell_type": "markdown",
"id": "e45079ad",
"metadata": {},
"source": [
"#### Import the CSV Data as Pandas DataFrame"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "e11c6255",
"metadata": {},
"outputs": [],
"source": [
"df = pd.read_csv('data/stud.csv')"
]
},
{
"cell_type": "markdown",
"id": "20634923",
"metadata": {},
"source": [
"#### Show Top 5 Records"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "e7e412a2",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>gender</th>\n",
" <th>race_ethnicity</th>\n",
" <th>parental_level_of_education</th>\n",
" <th>lunch</th>\n",
" <th>test_preparation_course</th>\n",
" <th>math_score</th>\n",
" <th>reading_score</th>\n",
" <th>writing_score</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>female</td>\n",
" <td>group B</td>\n",
" <td>bachelor's degree</td>\n",
" <td>standard</td>\n",
" <td>none</td>\n",
" <td>72</td>\n",
" <td>72</td>\n",
" <td>74</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>female</td>\n",
" <td>group C</td>\n",
" <td>some college</td>\n",
" <td>standard</td>\n",
" <td>completed</td>\n",
" <td>69</td>\n",
" <td>90</td>\n",
" <td>88</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>female</td>\n",
" <td>group B</td>\n",
" <td>master's degree</td>\n",
" <td>standard</td>\n",
" <td>none</td>\n",
" <td>90</td>\n",
" <td>95</td>\n",
" <td>93</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>male</td>\n",
" <td>group A</td>\n",
" <td>associate's degree</td>\n",
" <td>free/reduced</td>\n",
" <td>none</td>\n",
" <td>47</td>\n",
" <td>57</td>\n",
" <td>44</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>male</td>\n",
" <td>group C</td>\n",
" <td>some college</td>\n",
" <td>standard</td>\n",
" <td>none</td>\n",
" <td>76</td>\n",
" <td>78</td>\n",
" <td>75</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" gender race_ethnicity parental_level_of_education lunch \\\n",
"0 female group B bachelor's degree standard \n",
"1 female group C some college standard \n",
"2 female group B master's degree standard \n",
"3 male group A associate's degree free/reduced \n",
"4 male group C some college standard \n",
"\n",
" test_preparation_course math_score reading_score writing_score \n",
"0 none 72 72 74 \n",
"1 completed 69 90 88 \n",
"2 none 90 95 93 \n",
"3 none 47 57 44 \n",
"4 none 76 78 75 "
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head()"
]
},
{
"cell_type": "markdown",
"id": "fbd32281",
"metadata": {},
"source": [
"#### Preparing X and Y variables"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "56d72fde",
"metadata": {},
"outputs": [],
"source": [
"X = df.drop(columns=[\"math_score\"], axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "cd613177",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>gender</th>\n",
" <th>race_ethnicity</th>\n",
" <th>parental_level_of_education</th>\n",
" <th>lunch</th>\n",
" <th>test_preparation_course</th>\n",
" <th>reading_score</th>\n",
" <th>writing_score</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>female</td>\n",
" <td>group B</td>\n",
" <td>bachelor's degree</td>\n",
" <td>standard</td>\n",
" <td>none</td>\n",
" <td>72</td>\n",
" <td>74</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>female</td>\n",
" <td>group C</td>\n",
" <td>some college</td>\n",
" <td>standard</td>\n",
" <td>completed</td>\n",
" <td>90</td>\n",
" <td>88</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>female</td>\n",
" <td>group B</td>\n",
" <td>master's degree</td>\n",
" <td>standard</td>\n",
" <td>none</td>\n",
" <td>95</td>\n",
" <td>93</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>male</td>\n",
" <td>group A</td>\n",
" <td>associate's degree</td>\n",
" <td>free/reduced</td>\n",
" <td>none</td>\n",
" <td>57</td>\n",
" <td>44</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>male</td>\n",
" <td>group C</td>\n",
" <td>some college</td>\n",
" <td>standard</td>\n",
" <td>none</td>\n",
" <td>78</td>\n",
" <td>75</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" gender race_ethnicity parental_level_of_education lunch \\\n",
"0 female group B bachelor's degree standard \n",
"1 female group C some college standard \n",
"2 female group B master's degree standard \n",
"3 male group A associate's degree free/reduced \n",
"4 male group C some college standard \n",
"\n",
" test_preparation_course reading_score writing_score \n",
"0 none 72 74 \n",
"1 completed 90 88 \n",
"2 none 95 93 \n",
"3 none 57 44 \n",
"4 none 78 75 "
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X.head()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "f237ea14",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Categories in 'gender' variable: ['female' 'male']\n",
"Categories in 'race_ethnicity' variable: ['group B' 'group C' 'group A' 'group D' 'group E']\n",
"Categories in'parental level of education' variable: [\"bachelor's degree\" 'some college' \"master's degree\" \"associate's degree\"\n",
" 'high school' 'some high school']\n",
"Categories in 'lunch' variable: ['standard' 'free/reduced']\n",
"Categories in 'test preparation course' variable: ['none' 'completed']\n"
]
}
],
"source": [
"print(\"Categories in 'gender' variable: \", end=\" \")\n",
"print(df[\"gender\"].unique())\n",
"\n",
"print(\"Categories in 'race_ethnicity' variable: \", end=\" \")\n",
"print(df[\"race_ethnicity\"].unique())\n",
"\n",
"print(\"Categories in'parental level of education' variable:\", end=\" \")\n",
"print(df[\"parental_level_of_education\"].unique())\n",
"\n",
"print(\"Categories in 'lunch' variable: \", end=\" \")\n",
"print(df[\"lunch\"].unique())\n",
"\n",
"print(\"Categories in 'test preparation course' variable: \", end=\" \")\n",
"print(df[\"test_preparation_course\"].unique())"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "924b7f9d",
"metadata": {},
"outputs": [],
"source": [
"y = df[\"math_score\"]"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "ffc69816",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 72\n",
"1 69\n",
"2 90\n",
"3 47\n",
"4 76\n",
" ..\n",
"995 88\n",
"996 62\n",
"997 59\n",
"998 68\n",
"999 77\n",
"Name: math_score, Length: 1000, dtype: int64"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y"
]
},
{
"cell_type": "code",
"execution_count": 10,
"id": "1e290fe3",
"metadata": {},
"outputs": [],
"source": [
"# Create Column Transformer with 3 types of transformers\n",
"num_features = X.select_dtypes(exclude=\"object\").columns\n",
"cat_features = X.select_dtypes(include=\"object\").columns\n",
"\n",
"from sklearn.preprocessing import OneHotEncoder, StandardScaler\n",
"from sklearn.compose import ColumnTransformer\n",
"\n",
"numeric_transformer = StandardScaler()\n",
"oh_transformer = OneHotEncoder()\n",
"\n",
"preprocessor = ColumnTransformer(\n",
" [\n",
" (\"OneHotEncoder\", oh_transformer, cat_features),\n",
" (\"StandardScaler\", numeric_transformer, num_features),\n",
" ]\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "9c68f99a",
"metadata": {},
"outputs": [],
"source": [
"X = preprocessor.fit_transform(X)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"id": "1f57b3ec",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 1. , 0. , 0. , ..., 1. ,\n",
" 0.19399858, 0.39149181],\n",
" [ 1. , 0. , 0. , ..., 0. ,\n",
" 1.42747598, 1.31326868],\n",
" [ 1. , 0. , 0. , ..., 1. ,\n",
" 1.77010859, 1.64247471],\n",
" ...,\n",
" [ 1. , 0. , 0. , ..., 0. ,\n",
" 0.12547206, -0.20107904],\n",
" [ 1. , 0. , 0. , ..., 0. ,\n",
" 0.60515772, 0.58901542],\n",
" [ 1. , 0. , 0. , ..., 1. ,\n",
" 1.15336989, 1.18158627]])"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X"
]
},
{
"cell_type": "code",
"execution_count": 12,
"id": "72459f1d",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(1000, 19)"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"X.shape"
]
},
{
"cell_type": "code",
"execution_count": 13,
"id": "ed5c4e99",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"((800, 19), (200, 19))"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# separate dataset into train and test\n",
"from sklearn.model_selection import train_test_split\n",
"\n",
"X_train, X_test, y_train, y_test = train_test_split(\n",
" X, y, test_size=0.2, random_state=42\n",
")\n",
"X_train.shape, X_test.shape"
]
},
{
"cell_type": "markdown",
"id": "4cd80317",
"metadata": {},
"source": [
"#### Create an Evaluate Function to give all metrics after model Training"
]
},
{
"cell_type": "code",
"execution_count": 15,
"id": "8c247bd0",
"metadata": {},
"outputs": [],
"source": [
"def evaluate_model(true, predicted):\n",
" mae = mean_absolute_error(true, predicted)\n",
" # mse = mean_squared_error(true, predicted)\n",
" rmse = np.sqrt(mean_squared_error(true, predicted))\n",
" r2_square = r2_score(true, predicted)\n",
" return mae, rmse, r2_square"
]
},
{
"cell_type": "code",
"execution_count": 16,
"id": "79ccb8e7",
"metadata": {
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Linear Regression\n",
"Model performance for Training set\n",
"- Root Mean Squared Error: 5.3231\n",
"- Mean Absolute Error: 4.2667\n",
"- R2 Score: 0.8743\n",
"----------------------------------\n",
"Model performance for Test set\n",
"- Root Mean Squared Error: 5.3940\n",
"- Mean Absolute Error: 4.2148\n",
"- R2 Score: 0.8804\n",
"===================================\n",
"\n",
"\n",
"Lasso\n",
"Model performance for Training set\n",
"- Root Mean Squared Error: 6.5938\n",
"- Mean Absolute Error: 5.2063\n",
"- R2 Score: 0.8071\n",
"----------------------------------\n",
"Model performance for Test set\n",
"- Root Mean Squared Error: 6.5197\n",
"- Mean Absolute Error: 5.1579\n",
"- R2 Score: 0.8253\n",
"===================================\n",
"\n",
"\n",
"Ridge\n",
"Model performance for Training set\n",
"- Root Mean Squared Error: 5.3233\n",
"- Mean Absolute Error: 4.2650\n",
"- R2 Score: 0.8743\n",
"----------------------------------\n",
"Model performance for Test set\n",
"- Root Mean Squared Error: 5.3904\n",
"- Mean Absolute Error: 4.2111\n",
"- R2 Score: 0.8806\n",
"===================================\n",
"\n",
"\n",
"K-Neighbors Regressor\n",
"Model performance for Training set\n",
"- Root Mean Squared Error: 5.7079\n",
"- Mean Absolute Error: 4.5168\n",
"- R2 Score: 0.8555\n",
"----------------------------------\n",
"Model performance for Test set\n",
"- Root Mean Squared Error: 7.2530\n",
"- Mean Absolute Error: 5.6210\n",
"- R2 Score: 0.7838\n",
"===================================\n",
"\n",
"\n",
"Decision Tree\n",
"Model performance for Training set\n",
"- Root Mean Squared Error: 0.2795\n",
"- Mean Absolute Error: 0.0187\n",
"- R2 Score: 0.9997\n",
"----------------------------------\n",
"Model performance for Test set\n",
"- Root Mean Squared Error: 7.9294\n",
"- Mean Absolute Error: 6.4050\n",
"- R2 Score: 0.7416\n",
"===================================\n",
"\n",
"\n",
"Random Forest Regressor\n",
"Model performance for Training set\n",
"- Root Mean Squared Error: 2.3125\n",
"- Mean Absolute Error: 1.8477\n",
"- R2 Score: 0.9763\n",
"----------------------------------\n",
"Model performance for Test set\n",
"- Root Mean Squared Error: 5.9646\n",
"- Mean Absolute Error: 4.6275\n",
"- R2 Score: 0.8538\n",
"===================================\n",
"\n",
"\n",
"XGBRegressor\n",
"Model performance for Training set\n",
"- Root Mean Squared Error: 1.0073\n",
"- Mean Absolute Error: 0.6875\n",
"- R2 Score: 0.9955\n",
"----------------------------------\n",
"Model performance for Test set\n",
"- Root Mean Squared Error: 6.4733\n",
"- Mean Absolute Error: 5.0577\n",
"- R2 Score: 0.8278\n",
"===================================\n",
"\n",
"\n",
"CatBoosting Regressor\n",
"Model performance for Training set\n",
"- Root Mean Squared Error: 3.0427\n",
"- Mean Absolute Error: 2.4054\n",
"- R2 Score: 0.9589\n",
"----------------------------------\n",
"Model performance for Test set\n",
"- Root Mean Squared Error: 6.0086\n",
"- Mean Absolute Error: 4.6125\n",
"- R2 Score: 0.8516\n",
"===================================\n",
"\n",
"\n",
"AdaBoost Regressor\n",
"Model performance for Training set\n",
"- Root Mean Squared Error: 5.8340\n",
"- Mean Absolute Error: 4.7767\n",
"- R2 Score: 0.8490\n",
"----------------------------------\n",
"Model performance for Test set\n",
"- Root Mean Squared Error: 6.0478\n",
"- Mean Absolute Error: 4.7079\n",
"- R2 Score: 0.8497\n",
"===================================\n",
"\n",
"\n"
]
}
],
"source": [
"models = {\n",
" \"Linear Regression\": LinearRegression(),\n",
" \"Lasso\": Lasso(),\n",
" \"Ridge\": Ridge(),\n",
" \"K-Neighbors Regressor\": KNeighborsRegressor(),\n",
" \"Decision Tree\": DecisionTreeRegressor(),\n",
" \"Random Forest Regressor\": RandomForestRegressor(),\n",
" \"XGBRegressor\": XGBRegressor(),\n",
" \"CatBoosting Regressor\": CatBoostRegressor(verbose=False),\n",
" \"AdaBoost Regressor\": AdaBoostRegressor(),\n",
"}\n",
"model_list = []\n",
"r2_list = []\n",
"\n",
"for i in range(len(list(models))):\n",
" model = list(models.values())[i]\n",
" model.fit(X_train, y_train) # Train model\n",
"\n",
" # Make predictions\n",
" y_train_pred = model.predict(X_train)\n",
" y_test_pred = model.predict(X_test)\n",
"\n",
" # Evaluate Train and Test dataset\n",
" model_train_mae, model_train_rmse, model_train_r2 = evaluate_model(\n",
" y_train, y_train_pred\n",
" )\n",
"\n",
" model_test_mae, model_test_rmse, model_test_r2 = evaluate_model(y_test, y_test_pred)\n",
"\n",
" print(list(models.keys())[i])\n",
" model_list.append(list(models.keys())[i])\n",
"\n",
" print(\"Model performance for Training set\")\n",
" print(\"- Root Mean Squared Error: {:.4f}\".format(model_train_rmse))\n",
" print(\"- Mean Absolute Error: {:.4f}\".format(model_train_mae))\n",
" print(\"- R2 Score: {:.4f}\".format(model_train_r2))\n",
"\n",
" print(\"----------------------------------\")\n",
"\n",
" print(\"Model performance for Test set\")\n",
" print(\"- Root Mean Squared Error: {:.4f}\".format(model_test_rmse))\n",
" print(\"- Mean Absolute Error: {:.4f}\".format(model_test_mae))\n",
" print(\"- R2 Score: {:.4f}\".format(model_test_r2))\n",
" r2_list.append(model_test_r2)\n",
"\n",
" print(\"=\" * 35)\n",
" print(\"\\n\")"
]
},
{
"cell_type": "markdown",
"id": "06480b5a",
"metadata": {},
"source": [
"### Results"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "e0159e5f",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Model Name</th>\n",
" <th>R2_Score</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Ridge</td>\n",
" <td>0.880593</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Linear Regression</td>\n",
" <td>0.880433</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>Random Forest Regressor</td>\n",
" <td>0.853797</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>CatBoosting Regressor</td>\n",
" <td>0.851632</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>AdaBoost Regressor</td>\n",
" <td>0.849691</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>XGBRegressor</td>\n",
" <td>0.827797</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Lasso</td>\n",
" <td>0.825320</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>K-Neighbors Regressor</td>\n",
" <td>0.783813</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Decision Tree</td>\n",
" <td>0.741615</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Model Name R2_Score\n",
"2 Ridge 0.880593\n",
"0 Linear Regression 0.880433\n",
"5 Random Forest Regressor 0.853797\n",
"7 CatBoosting Regressor 0.851632\n",
"8 AdaBoost Regressor 0.849691\n",
"6 XGBRegressor 0.827797\n",
"1 Lasso 0.825320\n",
"3 K-Neighbors Regressor 0.783813\n",
"4 Decision Tree 0.741615"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pd.DataFrame(\n",
" list(zip(model_list, r2_list)), columns=[\"Model Name\", \"R2_Score\"]\n",
").sort_values(by=[\"R2_Score\"], ascending=False)"
]
},
{
"cell_type": "markdown",
"id": "357a7c1c",
"metadata": {},
"source": [
"## Linear Regression"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "9a6ad559",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" Accuracy of the model is 88.04\n"
]
}
],
"source": [
"lin_model = LinearRegression(fit_intercept=True)\n",
"lin_model = lin_model.fit(X_train, y_train)\n",
"y_pred = lin_model.predict(X_test)\n",
"score = r2_score(y_test, y_pred) * 100\n",
"print(\" Accuracy of the model is %.2f\" % score)"
]
},
{
"cell_type": "markdown",
"id": "1d31453e",
"metadata": {},
"source": [
"## Plot y_pred and y_test"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "eb557b0a",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Text(0, 0.5, 'Predicted')"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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xnvvvWd8+9vf9gYyPGd73Hnnncbll18e8Ptut9twuVzGI4884n2tsrLSyMzMNF566aVYLLFFGDVqlHHLLbf4vHbdddcZY8aMMQyD52yXpoGMmee6efNmQ5KxZs0a7zXvvvuu4XA4jL1799q6Po6WLDp16pTWrl2rkpIS72spKSkqKSlRaWlpHFfWslRVVUmS8vLyJElr165VXV2dz3Pv06ePunfvznMPw8SJEzVq1Cif5ynxnO3y5ptvauDAgfrBD36gzp0768ILL9T8+fO939+xY4fKy8t9nrPT6dQll1zCc7bgsssu09KlS7V161ZJ0saNG7Vy5UpdccUVknjO0WLmuZaWlio3N1cDBw70XlNSUqKUlBStXr3a1vUkxaylRHLw4EHV19c3G1qZn5+vzz//PE6ralncbremTJmiwYMHq1+/fpKk8vJyZWRkKDc31+fa/Px8lZeXx2GVyevll1/WunXrtGbNmmbf4znb48svv9S8efM0bdo0/frXv9aaNWt0++23KyMjQ+PGjfM+S3//HeE5m3fXXXepurpaffr0UWpqqurr6zV79myNGTNGknjOUWLmuZaXl6tz584+309LS1NeXp7tz55ABgln4sSJ2rRpk1auXBnvpbQ4e/bs0eTJk/Xee+8pKysr3stpsdxutwYOHKgHHnhAknThhRdq06ZNevrppzVu3Lg4r67l+Nvf/qYXXnhBL774os4991xt2LBBU6ZMUZcuXXjOrQhHSxZ16tRJqampzao4Kioq5HK54rSqlmPSpEl66623tHz5cp155pne110ul06dOqXKykqf63nu1qxdu1YHDhzQgAEDlJaWprS0NK1YsUKPP/640tLSlJ+fz3O2QUFBgYqKinxe69u3r3bv3i1J3mfJf0cic8cdd+iuu+7SDTfcoPPOO0833nijpk6dqjlz5kjiOUeLmefqcrl04MABn++fPn1ahw8ftv3ZE8hYlJGRoYsuukhLly71vuZ2u7V06VIVFxfHcWXJzTAMTZo0SYsWLdKyZctUWFjo8/2LLrpI6enpPs99y5Yt2r17N8/dgqFDh+rTTz/Vhg0bvF8DBw7UmDFjvP/Mc47c4MGDm7UP2Lp1q3r06CFJKiwslMvl8nnO1dXVWr16Nc/ZghMnTiglxfdjLDU1VW63WxLPOVrMPNfi4mJVVlZq7dq13muWLVsmt9utSy65xN4F2Zo63Eq8/PLLRmZmpvHnP//Z2Lx5s/HTn/7UyM3NNcrLy+O9tKQ1YcIEw+l0Gv/85z+N/fv3e79OnDjhvea2224zunfvbixbtsz4+OOPjeLiYqO4uDiOq24ZGlctGQbP2Q5lZWVGWlqaMXv2bGPbtm3GCy+8YLRp08ZYuHCh95oHH3zQyM3NNd544w3jk08+Ma6++mrKgi0aN26c0bVrV2/59WuvvWZ06tTJ+NWvfuW9huccnqNHjxrr16831q9fb0gyHn30UWP9+vXGrl27DMMw91xHjBhhXHjhhcbq1auNlStXGr1796b8OpH84Q9/MLp3725kZGQYgwYNMlatWhXvJSU1SX6/nnvuOe81J0+eNH72s58ZHTp0MNq0aWNce+21xv79++O36BaiaSDDc7bH4sWLjX79+hmZmZlGnz59jGeeecbn+26325gxY4aRn59vZGZmGkOHDjW2bNkSp9Ump+rqamPy5MlG9+7djaysLOOss84yfvOb3xi1tbXea3jO4Vm+fLnf/yaPGzfOMAxzz/XQoUPG6NGjjXbt2hk5OTnGzTffbBw9etT2tToMo1ELRAAAgCRCjgwAAEhaBDIAACBpEcgAAICkRSADAACSFoEMAABIWgQyAAAgaRHIAACApEUgAwAAkhaBDABIcjgcev311+O9DAAWEcgAiLnS0lKlpqZq1KhRln6uZ8+emjt3bnQWBSApEcgAiLkFCxbo5z//uT744APt27cv3ssBkMQIZADE1LFjx/TKK69owoQJGjVqlP785z/7fH/x4sW6+OKLlZWVpU6dOunaa6+VJH3nO9/Rrl27NHXqVDkcDjkcDknSvffeq/79+/vcY+7cuerZs6f3z2vWrNGwYcPUqVMnOZ1Offvb39a6deui+WsCiBECGQAx9be//U19+vTRN77xDY0dO1bPPvusPLNr3377bV177bUaOXKk1q9fr6VLl2rQoEGSpNdee01nnnmmfvvb32r//v3av3+/6fc8evSoxo0bp5UrV2rVqlXq3bu3Ro4cqaNHj0bldwQQO2nxXgCA1mXBggUaO3asJGnEiBGqqqrSihUr9J3vfEezZ8/WDTfcoPvuu897/QUXXCBJysvLU2pqqtq3by+Xy2XpPYcMGeLz52eeeUa5ublasWKF/ud//ifC3whAPLEjAyBmtmzZorKyMo0ePVqSlJaWph/96EdasGCBJGnDhg0aOnSo7e9bUVGh8ePHq3fv3nI6ncrJydGxY8e0e/du298LQGyxIwMgZhYsWKDTp0+rS5cu3tcMw1BmZqaeeOIJZWdnW75nSkqK92jKo66uzufP48aN06FDh/T73/9ePXr0UGZmpoqLi3Xq1KnwfhEACYMdGQAxcfr0aT3//PP63e9+pw0bNni/Nm7cqC5duuill17S+eefr6VLlwa8R0ZGhurr631eO+OMM1ReXu4TzGzYsMHnmo8++ki33367Ro4cqXPPPVeZmZk6ePCgrb8fgPhgRwZATLz11ls6cuSIbr31VjmdTp/vXX/99VqwYIEeeeQRDR06VL169dINN9yg06dP65133tGdd94pqaGPzAcffKAbbrhBmZmZ6tSpk77zne/oq6++0sMPP6zvf//7WrJkid59913l5OR479+7d2/99a9/1cCBA1VdXa077rgjrN0fAImHHRkAMbFgwQKVlJQ0C2KkhkDm448/Vl5enl599VW9+eab6t+/v4YMGaKysjLvdb/97W+1c+dO9erVS2eccYYkqW/fvnrqqaf05JNP6oILLlBZWZl++ctfNnvvI0eOaMCAAbrxxht1++23q3PnztH9hQHEhMNoergMAACQJNiRAQAASYtABgAAJC0CGQAAkLQIZAAAQNIikAEAAEmLQAYAACQtAhkAAJC0CGQAAEDSIpABAABJi0AGAAAkLQIZAACQtP5/0c8KD7dW8akAAAAASUVORK5CYII=",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.scatter(y_test, y_pred)\n",
"plt.xlabel(\"Actual\")\n",
"plt.ylabel(\"Predicted\")"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "1e707ec3",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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CQkJ2gcffKBt3bpVu+yyy7SMjAytvLw8hCNveRYsWKAlJydrn3zyibZ3717tvffe02JjY7Wnnnqq9jX8rP33n//8R7vvvvu0lStXagC0VatWuTzvy2c6evRobcCAAdr333+vffPNN1rPnj21a6+9NijjZYDy/8444wxt2rRptT87HA4tPT1dW7hwYQhH1bocOXJEA6B99dVXmqZpWmFhoRYREaG99957ta/59ddfNQDaunXrQjXMFqu4uFjr1auX9tlnn2nnnXdebYDCzzkw/vKXv2hnn3221+edTqeWmpqqPfroo7XHCgsLtaioKO3tt99ujiG2Gpdccol20003uRwbM2aMNn78eE3T+FkHgnuA4stn+ssvv2gAtI0bN9a+5tNPP9VMJpOWk5MT8DFyigdAVVUVsrOzkZmZWXvMbDYjMzMT69atC+HIWpeioiIAQFJSEgAgOzsb1dXVLp97nz590LVrV37ujTBt2jRccsklLp8nwM85UD766CMMGTIEV199NTp27IhBgwbhxRdfrH1+7969yM3NdfmcExISMHToUH7OfjrrrLOwdu1a7Ny5EwCwdetWfPvtt7jooosA8LMOBl8+03Xr1iExMRFDhgypfU1mZibMZjPWr18f8DGFbLPAcHLs2DE4HI46GxWmpKRg+/btIRpV6+J0OjFjxgwMHz4cp556KgAgNzcXkZGRSExMdHltSkoKcnNzQzDKlmvFihX44YcfsHHjxjrP8XMOjD179uCFF17AzJkzce+992Ljxo244447EBkZiQkTJtR+lp7+P8LP2T9z5syB3W5Hnz59YLFY4HA4sGDBAowfPx4A+FkHgS+faW5uLjp27OjyvNVqRVJSUlA+dwYo1CymTZuGn376Cd9++22oh9LqHDhwAHfeeSc+++wzREdHh3o4rZbT6cSQIUPwyCOPAAAGDRqEn376CUuWLMGECRNCPLrW5d1338Vbb72F5cuX45RTTsGWLVswY8YMpKen87NuQzjFA6BDhw6wWCx1VjXk5eUhNTU1RKNqPaZPn45PPvkEX3zxBTp37lx7PDU1FVVVVSgsLHR5PT93/2RnZ+PIkSM47bTTYLVaYbVa8dVXX+Hpp5+G1WpFSkoKP+cASEtLQ9++fV2OnXzyydi/fz8A1H6W/P9I091zzz2YM2cOxo0bh379+uGGG27AXXfdhYULFwLgZx0MvnymqampOHLkiMvzNTU1yM/PD8rnzgAFQGRkJAYPHoy1a9fWHnM6nVi7di2GDRsWwpG1bJqmYfr06Vi1ahWysrKQkZHh8vzgwYMRERHh8rnv2LED+/fv5+fuhwsuuAA//vgjtmzZUvs1ZMgQjB8/vvZ7fs5NN3z48DrL5Hfu3Ilu3boBADIyMpCamuryOdvtdqxfv56fs5/KyspgNrveniwWC5xOJwB+1sHgy2c6bNgwFBYWIjs7u/Y1WVlZcDqdGDp0aOAHFfCy2xZqxYoVWlRUlLZs2TLtl19+0SZPnqwlJiZqubm5oR5aizV16lQtISFB+/LLL7XDhw/XfpWVldW+5tZbb9W6du2qZWVlaZs2bdKGDRumDRs2LISjbh2Mq3g0jZ9zIGzYsEGzWq3aggULtF27dmlvvfWWFhMTo7355pu1r1m0aJGWmJioffjhh9q2bdu0yy+/nEtfG2HChAlap06dapcZr1y5UuvQoYM2e/bs2tfws/ZfcXGxtnnzZm3z5s0aAO3xxx/XNm/erO3bt0/TNN8+09GjR2uDBg3S1q9fr3377bdar169uMy4OTzzzDNa165dtcjISO2MM87Qvv/++1APqUUD4PHr1VdfrX1NeXm5dtttt2nt27fXYmJitCuvvFI7fPhw6AbdSrgHKPycA+Pjjz/WTj31VC0qKkrr06ePtnTpUpfnnU6nNm/ePC0lJUWLiorSLrjgAm3Hjh0hGm3LZbfbtTvvvFPr2rWrFh0drZ144onafffdp1VWVta+hp+1/7744guP/0+eMGGCpmm+fabHjx/Xrr32Wi02NlaLj4/XbrzxRq24uDgo4+VuxkRERBR2WINCREREYYcBChEREYUdBihEREQUdhigEBERUdhhgEJERERhhwEKERERhR0GKERERBR2GKAQERFR2GGAQkRB9fvvv8NkMmHLli2hHgoRtSAMUIgoYCZOnIgrrrgi1MMgolaAAQoRkUF1dXWoh0BEYIBC1GaNGDECt99+O2bMmIH27dsjJSUFL774IkpLS3HjjTciLi4OPXv2xKeffgoAcDgcuPnmm5GRkQGbzYbevXvjqaeeqj3fAw88gNdeew0ffvghTCYTTCYTvvzyy9rn9+zZg/PPPx8xMTEYMGAA1q1b59M49+3bh0svvRTt27dHu3btcMopp+A///lP7fM///wz/vjHPyI+Ph5xcXE455xzsHv3bgCA0+nEgw8+iM6dOyMqKgoDBw7E6tWra9+rpp/eeecdnHfeeYiOjsZbb70FAHjppZdw8sknIzo6Gn369MHzzz/f6M+aiBohKFsQElHYO++887S4uDjtoYce0nbu3Kk99NBDmsVi0S666CJt6dKl2s6dO7WpU6dqycnJWmlpqVZVVaXNnz9f27hxo7Znzx7tzTff1GJiYrR33nlH0zTZyv2aa67RRo8erR0+fFg7fPiwVllZqe3du1cDoPXp00f75JNPtB07dmhXXXWV1q1bN626urrBcV5yySXaH/7wB23btm3a7t27tY8//lj76quvNE3TtIMHD2pJSUnamDFjtI0bN2o7duzQXnnlFW379u2apmna448/rsXHx2tvv/22tn37dm327NlaRESEtnPnTk3TtNqxde/eXXv//fe1PXv2aIcOHdLefPNNLS0trfbY+++/ryUlJWnLli0L0j8NInLHAIWojTrvvPO0s88+u/bnmpoarV27dtoNN9xQe+zw4cMaAG3dunUezzFt2jRt7NixtT9PmDBBu/zyy11eo4KAl156qfbYzz//rAHQfv311wbH2a9fP+2BBx7w+NzcuXO1jIwMraqqyuPz6enp2oIFC1yOnX766dptt93mMrYnn3zS5TU9evTQli9f7nLsoYce0oYNG9bgeIkoMKyhzN4QUWj179+/9nuLxYLk5GT069ev9lhKSgoA4MiRIwCA5557Dq+88gr279+P8vJyVFVVYeDAgX5fKy0trfa8ffr0qfd9d9xxB6ZOnYr//ve/yMzMxNixY2vPtWXLFpxzzjmIiIio8z673Y5Dhw5h+PDhLseHDx+OrVu3uhwbMmRI7felpaXYvXs3br75ZkyaNKn2eE1NDRISEnz6XYmo6ViDQtSGud/YTSaTyzGTyQRAajlWrFiBu+++GzfffDP++9//YsuWLbjxxhtRVVXl97WM523ILbfcgj179uCGG27Ajz/+iCFDhuCZZ54BANhsNp+u3ZB27drVfl9SUgIAePHFF7Fly5bar59++gnff/99QK5HRA1jgEJEPvnuu+9w1lln4bbbbsOgQYPQs2fP2mJUJTIyEg6HI+DX7tKlC2699VasXLkSs2bNwosvvghAsjLffPONx5U38fHxSE9Px3fffVfn9+jbt6/Xa6WkpCA9PR179uxBz549Xb4yMjIC+4sRkVec4iEin/Tq1Quvv/461qxZg4yMDLzxxhvYuHGjy027e/fuWLNmDXbs2IHk5OSATInMmDEDF110EU466SQUFBTgiy++wMknnwwAmD59Op555hmMGzcOc+fORUJCAr7//nucccYZ6N27N+655x789a9/RY8ePTBw4EC8+uqr2LJlS+1KHW/+9re/4Y477kBCQgJGjx6NyspKbNq0CQUFBZg5c2aTfyciahgDFCLyyZQpU7B582b86U9/gslkwrXXXovbbrutdhkyAEyaNAlffvklhgwZgpKSEnzxxRfo3r17k67rcDgwbdo0HDx4EPHx8Rg9ejSeeOIJAEBycjKysrJwzz334LzzzoPFYsHAgQNr607uuOMOFBUVYdasWThy5Aj69u2Ljz76CL169ar3mrfccgtiYmLw6KOP4p577kG7du3Qr18/zJgxo0m/CxH5zqRpmhbqQRAREREZsQaFiIiIwg4DFCIKqYsuugixsbEevx555JFQD4+IQoRTPEQUUjk5OSgvL/f4XFJSEpKSkpp5REQUDhigEBERUdjhFA8RERGFHQYoREREFHYYoBAREVHYYYBCREREYYcBChEREYUdBihEREQUdhigEBERUdhhgEJERERh5/8AtWJ5knyXj0wAAAAASUVORK5CYII=",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sns.regplot(x=y_test, y=y_pred, ci=None, color=\"red\");"
]
},
{
"cell_type": "markdown",
"id": "79c2fe28",
"metadata": {},
"source": [
"#### Difference between Actual and Predicted Values"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "7c9a8b48",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Actual Value</th>\n",
" <th>Predicted Value</th>\n",
" <th>Difference</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>521</th>\n",
" <td>91</td>\n",
" <td>76.387970</td>\n",
" <td>14.612030</td>\n",
" </tr>\n",
" <tr>\n",
" <th>737</th>\n",
" <td>53</td>\n",
" <td>58.885970</td>\n",
" <td>-5.885970</td>\n",
" </tr>\n",
" <tr>\n",
" <th>740</th>\n",
" <td>80</td>\n",
" <td>76.990265</td>\n",
" <td>3.009735</td>\n",
" </tr>\n",
" <tr>\n",
" <th>660</th>\n",
" <td>74</td>\n",
" <td>76.851804</td>\n",
" <td>-2.851804</td>\n",
" </tr>\n",
" <tr>\n",
" <th>411</th>\n",
" <td>84</td>\n",
" <td>87.627378</td>\n",
" <td>-3.627378</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>408</th>\n",
" <td>52</td>\n",
" <td>43.409149</td>\n",
" <td>8.590851</td>\n",
" </tr>\n",
" <tr>\n",
" <th>332</th>\n",
" <td>62</td>\n",
" <td>62.152214</td>\n",
" <td>-0.152214</td>\n",
" </tr>\n",
" <tr>\n",
" <th>208</th>\n",
" <td>74</td>\n",
" <td>67.888395</td>\n",
" <td>6.111605</td>\n",
" </tr>\n",
" <tr>\n",
" <th>613</th>\n",
" <td>65</td>\n",
" <td>67.022287</td>\n",
" <td>-2.022287</td>\n",
" </tr>\n",
" <tr>\n",
" <th>78</th>\n",
" <td>61</td>\n",
" <td>62.345132</td>\n",
" <td>-1.345132</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>200 rows × 3 columns</p>\n",
"</div>"
],
"text/plain": [
" Actual Value Predicted Value Difference\n",
"521 91 76.387970 14.612030\n",
"737 53 58.885970 -5.885970\n",
"740 80 76.990265 3.009735\n",
"660 74 76.851804 -2.851804\n",
"411 84 87.627378 -3.627378\n",
".. ... ... ...\n",
"408 52 43.409149 8.590851\n",
"332 62 62.152214 -0.152214\n",
"208 74 67.888395 6.111605\n",
"613 65 67.022287 -2.022287\n",
"78 61 62.345132 -1.345132\n",
"\n",
"[200 rows x 3 columns]"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"pred_df = pd.DataFrame(\n",
" {\"Actual Value\": y_test, \"Predicted Value\": y_pred, \"Difference\": y_test - y_pred}\n",
")\n",
"pred_df"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "3acf1fbc",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.0"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
|