{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2021-10-22T02:42:52.026901Z","iopub.execute_input":"2021-10-22T02:42:52.027293Z","iopub.status.idle":"2021-10-22T02:42:52.061014Z","shell.execute_reply.started":"2021-10-22T02:42:52.027189Z","shell.execute_reply":"2021-10-22T02:42:52.060435Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# data analysis and wrangling\nimport pandas as pd\nimport numpy as np\nimport random as rnd\n\n# visualization\nimport seaborn as sns\nimport matplotlib.pyplot as plt\n%matplotlib inline\n\n# machine learning\nfrom sklearn.linear_model import LogisticRegression\nfrom sklearn.svm import SVC, LinearSVC\nfrom sklearn.ensemble import RandomForestClassifier\nfrom sklearn.neighbors import KNeighborsClassifier\nfrom sklearn.naive_bayes import GaussianNB\nfrom sklearn.linear_model import Perceptron\nfrom sklearn.linear_model import SGDClassifier\nfrom sklearn.tree import DecisionTreeClassifier\nfrom sklearn.preprocessing import OneHotEncoder","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:42:52.062349Z","iopub.execute_input":"2021-10-22T02:42:52.063090Z","iopub.status.idle":"2021-10-22T02:42:53.523785Z","shell.execute_reply.started":"2021-10-22T02:42:52.063052Z","shell.execute_reply":"2021-10-22T02:42:53.522876Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train = pd.read_csv(\"../input/restaurant-revenue-prediction/train.csv.zip\")\ntest = pd.read_csv(\"../input/restaurant-revenue-prediction/test.csv.zip\")","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:42:53.525005Z","iopub.execute_input":"2021-10-22T02:42:53.525304Z","iopub.status.idle":"2021-10-22T02:42:54.133527Z","shell.execute_reply.started":"2021-10-22T02:42:53.525264Z","shell.execute_reply":"2021-10-22T02:42:54.132683Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Data Viz**","metadata":{}},{"cell_type":"code","source":"train.head(5)","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:42:54.134646Z","iopub.execute_input":"2021-10-22T02:42:54.136716Z","iopub.status.idle":"2021-10-22T02:42:54.175912Z","shell.execute_reply.started":"2021-10-22T02:42:54.136680Z","shell.execute_reply":"2021-10-22T02:42:54.175206Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test.head(5)","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:42:54.177895Z","iopub.execute_input":"2021-10-22T02:42:54.178326Z","iopub.status.idle":"2021-10-22T02:42:54.204044Z","shell.execute_reply.started":"2021-10-22T02:42:54.178282Z","shell.execute_reply":"2021-10-22T02:42:54.203191Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Features Explanation**","metadata":{}},{"cell_type":"markdown","source":"Id : Restaurant id.\n\nOpen Date : opening date for a restaurant\n\nCity : City that the restaurant is in. Note that there are unicode in the names. \n\nCity Group: Type of the city. Big cities, or Other. \n\nType: Type of the restaurant. FC: Food Court, IL: Inline, DT: Drive Thru, MB: Mobile\n\nP1, P2 - P37: There are three categories of these obfuscated data. Demographic data are gathered from third party providers with GIS systems. These include population in any given area, age and gender distribution, development scales. Real estate data mainly relate to the m2 of the location, front facade of the location, car park availability. Commercial data mainly include the existence of points of interest including schools, banks, other QSR operators.\n\nRevenue: The revenue column indicates a (transformed) revenue of the restaurant in a given year and is the target of predictive analysis. Please note that the values are transformed so they don't mean real dollar values. ","metadata":{}},{"cell_type":"code","source":"display(train.columns)\n","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:42:54.205324Z","iopub.execute_input":"2021-10-22T02:42:54.205582Z","iopub.status.idle":"2021-10-22T02:42:54.220548Z","shell.execute_reply.started":"2021-10-22T02:42:54.205551Z","shell.execute_reply":"2021-10-22T02:42:54.219320Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.info()","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:42:54.223878Z","iopub.execute_input":"2021-10-22T02:42:54.224702Z","iopub.status.idle":"2021-10-22T02:42:54.252583Z","shell.execute_reply.started":"2021-10-22T02:42:54.224659Z","shell.execute_reply":"2021-10-22T02:42:54.251944Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test.columns\n","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:42:54.253555Z","iopub.execute_input":"2021-10-22T02:42:54.254070Z","iopub.status.idle":"2021-10-22T02:42:54.260378Z","shell.execute_reply.started":"2021-10-22T02:42:54.254035Z","shell.execute_reply":"2021-10-22T02:42:54.259526Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test.info()","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:42:54.261526Z","iopub.execute_input":"2021-10-22T02:42:54.261755Z","iopub.status.idle":"2021-10-22T02:42:54.333792Z","shell.execute_reply.started":"2021-10-22T02:42:54.261718Z","shell.execute_reply":"2021-10-22T02:42:54.332824Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Target Varaible = \"Revenue\"**\n","metadata":{}},{"cell_type":"code","source":"train[\"revenue\"].describe()","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:42:54.335522Z","iopub.execute_input":"2021-10-22T02:42:54.336099Z","iopub.status.idle":"2021-10-22T02:42:54.348754Z","shell.execute_reply.started":"2021-10-22T02:42:54.336053Z","shell.execute_reply":"2021-10-22T02:42:54.347569Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.distplot(train['revenue'])\n","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:42:54.350607Z","iopub.execute_input":"2021-10-22T02:42:54.351035Z","iopub.status.idle":"2021-10-22T02:42:54.674977Z","shell.execute_reply.started":"2021-10-22T02:42:54.350992Z","shell.execute_reply":"2021-10-22T02:42:54.674123Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train[\"revenue\"].head()","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:42:54.676206Z","iopub.execute_input":"2021-10-22T02:42:54.676546Z","iopub.status.idle":"2021-10-22T02:42:54.683278Z","shell.execute_reply.started":"2021-10-22T02:42:54.676516Z","shell.execute_reply":"2021-10-22T02:42:54.682677Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train[\"revenue\"].isna().sum()\n","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:42:54.684327Z","iopub.execute_input":"2021-10-22T02:42:54.684979Z","iopub.status.idle":"2021-10-22T02:42:54.700330Z","shell.execute_reply.started":"2021-10-22T02:42:54.684936Z","shell.execute_reply":"2021-10-22T02:42:54.699525Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#correlation matrix\ncorrmat = train.corr()\nf, ax = plt.subplots(figsize=(15, 12))\nsns.heatmap(corrmat, vmax=1, square=True);","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:42:54.705699Z","iopub.execute_input":"2021-10-22T02:42:54.706641Z","iopub.status.idle":"2021-10-22T02:42:55.690075Z","shell.execute_reply.started":"2021-10-22T02:42:54.706588Z","shell.execute_reply":"2021-10-22T02:42:55.689109Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train[\"City\"].head()","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:42:55.691705Z","iopub.execute_input":"2021-10-22T02:42:55.692018Z","iopub.status.idle":"2021-10-22T02:42:55.701015Z","shell.execute_reply.started":"2021-10-22T02:42:55.691977Z","shell.execute_reply":"2021-10-22T02:42:55.700014Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Data Preprocessing:\n\nEDA/Data Cleaning: Exploring Data & Identifying and correcting mistakes or errors in the data.\n\nFeature Selection: Identifying those input variables that are most relevant to the task.\n\nData Transforms: Changing the scale or distribution of variables.\n\nFeature Engineering: Deriving new variables from available data.\n\nDimensionality Reduction: Creating compact projections of the data.","metadata":{}},{"cell_type":"markdown","source":"Dropping Some Unncessary Features","metadata":{}},{"cell_type":"code","source":"drop_values = ['Id','Open Date']","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:42:55.702317Z","iopub.execute_input":"2021-10-22T02:42:55.702561Z","iopub.status.idle":"2021-10-22T02:42:55.712746Z","shell.execute_reply.started":"2021-10-22T02:42:55.702533Z","shell.execute_reply":"2021-10-22T02:42:55.711813Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.drop(drop_values,axis=1,inplace=True)\ntest.drop(drop_values,axis=1,inplace=True)","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:42:55.714044Z","iopub.execute_input":"2021-10-22T02:42:55.714269Z","iopub.status.idle":"2021-10-22T02:42:55.736949Z","shell.execute_reply.started":"2021-10-22T02:42:55.714241Z","shell.execute_reply":"2021-10-22T02:42:55.736019Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pip install dataprep","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:42:55.738414Z","iopub.execute_input":"2021-10-22T02:42:55.738875Z","iopub.status.idle":"2021-10-22T02:43:17.147209Z","shell.execute_reply.started":"2021-10-22T02:42:55.738842Z","shell.execute_reply":"2021-10-22T02:43:17.146210Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from dataprep.datasets import get_dataset_names\nfrom dataprep.datasets import load_dataset\nfrom dataprep.eda import create_report,plot,plot_missing\nimport scipy.stats as stats","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:43:17.148829Z","iopub.execute_input":"2021-10-22T02:43:17.149166Z","iopub.status.idle":"2021-10-22T02:43:19.107072Z","shell.execute_reply.started":"2021-10-22T02:43:17.149120Z","shell.execute_reply":"2021-10-22T02:43:19.106442Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# function for overall statistical report\ndef overall_stat(df):\n    # display the overall stat report\n    display(plot(df, display=['Stats', 'Insights']))\n    # display(df.info())\n\n    # store and display the numerical and nonn-numerical cols in df\n    num_cols=list(df.select_dtypes(include=['number']).columns)\n    non_num_cols=list((set(df.columns)-set(num_cols)))\n\n    print(f'Num cols = {num_cols}')\n    print(f'Non-num cols = {non_num_cols}')","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:43:19.108132Z","iopub.execute_input":"2021-10-22T02:43:19.108899Z","iopub.status.idle":"2021-10-22T02:43:19.114413Z","shell.execute_reply.started":"2021-10-22T02:43:19.108857Z","shell.execute_reply":"2021-10-22T02:43:19.113511Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# display the overall stats\noverall_stat(train)","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:43:19.116128Z","iopub.execute_input":"2021-10-22T02:43:19.116431Z","iopub.status.idle":"2021-10-22T02:43:21.012441Z","shell.execute_reply.started":"2021-10-22T02:43:19.116328Z","shell.execute_reply":"2021-10-22T02:43:21.011788Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Univariate Analysis**","metadata":{}},{"cell_type":"markdown","source":"![image.png](attachment:cea4d4c9-e1bb-454c-954c-76c4d44b527c.png)","metadata":{},"attachments":{"cea4d4c9-e1bb-454c-954c-76c4d44b527c.png":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAbIAAACkCAYAAADyi6suAAAgAElEQVR4Aezdh5tlRbU28O9P+T4ySDAregVEuQZUghcFUVBQQUCMeAUVBgSRZAJEsomgSA4ikiUqKNkEIooMCKLADDCJ+p5fTb9NzeH0dDwdZvbpZ3ftXbvyevdaq6pWVf2f0v26FuhaoGuBrgW6FpjDLfB/5nDZu6J3LdC1QNcCXQt0LVA6QdaBoGuBrgW6FuhaYE63QCfI5jT5usJ3LdC1QNcCXQt0gqzDQNcCE2yBF154objG8xtv+PGk3YXtWmB1bYExCbJ8sPkI2+fufjkz69ph1WiHZcuWlfZavHjx8POSJUuKZ+7SpUvr1d6LBwetX8J5J+6iRYvq+4TtcLNq4KajY3865lsatIAdVZAhkML4IFOozl2R2XXtseq0B2ED64TRn//853L88ceXu+66qz7/85//LKeeemr5+c9/Xp599tlhoSZsrgirCLy40nT//PPP1yvCrsPOqoOdjpYv0jKCPYqc50H+JizIUtDO7a+JdO0yN9slAoeguf7668s222xTvv3tb5f//Oc/9Xn77bcvRx55ZFmwYEEh2H7961+X++67ryxcuLD861//Kr/73e/KLbfcUh5++OHy3HPPlfnz55eHHnqo3H777eWBBx5YQYh1GJmbGOnoNna6Ee6+KW02yN+ogkzmCqFAHQHHTsCureZuW+k5wfu1115b9ttvv3LIIYeUa665ppx44on1+Tvf+U75wx/+UJ+/9a1vla997Wvl6quvLrfddlv5xje+UY466qh6CXPaaaeVgw8+uHz1q18tBx54YPnjH/843JPrMDJ3MdLRbnTakR3ppWqvQf46QTY0Yd8Bc3Rgrg5t5MMjyNSVcPr6179eTj/99CrAjj322HLCCSeUb37zm+X73/9++cpXvlKHGQm2ww47rAq3K6+8spxxxhlljz32KFdccUXtvf3gBz+o7+bNm1cuvPDCqqFGS10d2rSr4+r7bfmegvVZJcgUZrqBaZinleztfcrCL/f93MThatjRwvdLo/NbPT7IfHh6YYYRb7rppvLZz362XHrppeWHP/xhFWR6XZ///Odrj8s82plnnlnOOuus2vv63ve+V/bee+9y2WWXFUJOOoYe9d5+8pOfdPhbTZTHXh7T8qDch6d4bvlc3nOFyXvYzJW4/dx+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"}}},{"cell_type":"markdown","source":"Numerical Univariate Analysis","metadata":{}},{"cell_type":"code","source":"# define the interest feature you want to explore\ninter_features='revenue'\n\n# define the function for univariate analysis\ndef num_uni_analysis(df,inter_features):\n    display(plot(df,inter_features,display=['Stats','KDE Plot','Normal Q-Q Plot','Box Plot']))\n    skewness=df[inter_features].skew()\n    kurtosis=df[inter_features].kurtosis()\n    print(f'-The Skewness = {skewness}')\n    if abs(skewness)<1:\n        print(f'The [{inter_features}] distribution is nearly normal')\n    elif skewness>1:\n        print(f'The [{inter_features}] distribution is right skewed ')\n    else:\n        print(f'The [{inter_features}] distribution is left skewed ')\n    print(f'-The Kurtosis = {kurtosis}')","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:43:21.013740Z","iopub.execute_input":"2021-10-22T02:43:21.014100Z","iopub.status.idle":"2021-10-22T02:43:21.020332Z","shell.execute_reply.started":"2021-10-22T02:43:21.014069Z","shell.execute_reply":"2021-10-22T02:43:21.019706Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# display the univariate analysis result for feature [revenue]\nnum_uni_analysis(train,inter_features)","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:43:21.021451Z","iopub.execute_input":"2021-10-22T02:43:21.021805Z","iopub.status.idle":"2021-10-22T02:43:21.584940Z","shell.execute_reply.started":"2021-10-22T02:43:21.021776Z","shell.execute_reply":"2021-10-22T02:43:21.583615Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Categorical Univariate Analysis","metadata":{}},{"cell_type":"code","source":"# define the function for univariate analysis\ndef cat_uni_analysis(df,inter_features):\n    print(f'The Non-Numerical Column You Choose is: [{inter_features}]\\n')\n    display(plot(df,inter_features,display=['Stats','Pie Chart','Value Table']))","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:43:21.586199Z","iopub.execute_input":"2021-10-22T02:43:21.586439Z","iopub.status.idle":"2021-10-22T02:43:21.591277Z","shell.execute_reply.started":"2021-10-22T02:43:21.586409Z","shell.execute_reply":"2021-10-22T02:43:21.590476Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cat_uni_analysis(train,inter_features='Type')\ncat_uni_analysis(train,inter_features='City')\ncat_uni_analysis(train,inter_features='City Group')","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:43:21.592725Z","iopub.execute_input":"2021-10-22T02:43:21.592970Z","iopub.status.idle":"2021-10-22T02:43:22.272076Z","shell.execute_reply.started":"2021-10-22T02:43:21.592941Z","shell.execute_reply":"2021-10-22T02:43:22.271474Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Bivariate Analysis**","metadata":{}},{"cell_type":"code","source":"import matplotlib.pyplot as plt\nimport seaborn as sns","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:43:22.273149Z","iopub.execute_input":"2021-10-22T02:43:22.273462Z","iopub.status.idle":"2021-10-22T02:43:22.278695Z","shell.execute_reply.started":"2021-10-22T02:43:22.273433Z","shell.execute_reply":"2021-10-22T02:43:22.277880Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# overall num-num relationship: correlation heatmap\ndef heatmap(df,figsize):\n    fig, axs=plt.subplots(figsize=figsize)\n    sns.heatmap(df.corr(),annot=True, linewidths=.7,cmap='coolwarm',fmt='.1f',ax=axs)\n    ","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:43:22.280328Z","iopub.execute_input":"2021-10-22T02:43:22.280582Z","iopub.status.idle":"2021-10-22T02:43:22.291570Z","shell.execute_reply.started":"2021-10-22T02:43:22.280551Z","shell.execute_reply":"2021-10-22T02:43:22.290760Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"heatmap(df=train,figsize=(25,25))","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:43:22.292685Z","iopub.execute_input":"2021-10-22T02:43:22.293290Z","iopub.status.idle":"2021-10-22T02:43:29.263024Z","shell.execute_reply.started":"2021-10-22T02:43:22.293245Z","shell.execute_reply":"2021-10-22T02:43:29.262368Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Cat-Num Relationship","metadata":{}},{"cell_type":"code","source":"pip install scikit-posthocs","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:43:29.264079Z","iopub.execute_input":"2021-10-22T02:43:29.264885Z","iopub.status.idle":"2021-10-22T02:43:51.310504Z","shell.execute_reply.started":"2021-10-22T02:43:29.264844Z","shell.execute_reply":"2021-10-22T02:43:51.309205Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#kruskal test used for cat-num relationship\nimport scikit_posthocs as sp\n","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:43:51.313019Z","iopub.execute_input":"2021-10-22T02:43:51.313403Z","iopub.status.idle":"2021-10-22T02:43:51.383367Z","shell.execute_reply.started":"2021-10-22T02:43:51.313351Z","shell.execute_reply":"2021-10-22T02:43:51.382588Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# categoircal-numerical relationship (cat_feature - target)\n\ndef cat_num_relationship(df,cat_col,num_col):\n    # visualization\n    print(f'[{cat_col}] --- [{num_col}] relationship')\n    display(plot(df,num_col,cat_col))\n    \n    # hypothesis testing for catgorical-numerical relationship (Kruskal test)\n    pc = sp.posthoc_conover(df, val_col=num_col, group_col=cat_col,p_adjust = 'holm')\n    # visualization of the heatmap\n    heatmap_args = {'linewidths': 0.25, 'linecolor': '0.5', 'square': True, 'cbar_ax_bbox': [0.80, 0.35, 0.04, 0.3]}\n\n    # plot\n    fig, ax = plt.subplots(ncols=1)\n    fig.suptitle('Significance Plot')\n    sp.sign_plot(pc,**heatmap_args,ax=ax) \n    fig.show()","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:43:51.384782Z","iopub.execute_input":"2021-10-22T02:43:51.385288Z","iopub.status.idle":"2021-10-22T02:43:51.392194Z","shell.execute_reply.started":"2021-10-22T02:43:51.385255Z","shell.execute_reply":"2021-10-22T02:43:51.391503Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cat_num_relationship(df=train,\n                    cat_col='City',\n                    num_col='revenue')\n\ncat_num_relationship(df=train,\n                    cat_col='Type',\n                    num_col='revenue')\n\ncat_num_relationship(df=train,\n                    cat_col='City Group',\n                    num_col='revenue')","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:43:51.393418Z","iopub.execute_input":"2021-10-22T02:43:51.393742Z","iopub.status.idle":"2021-10-22T02:43:54.608304Z","shell.execute_reply.started":"2021-10-22T02:43:51.393700Z","shell.execute_reply":"2021-10-22T02:43:54.607402Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Categorical-Categorical Relationship**","metadata":{}},{"cell_type":"code","source":"from scipy.stats import chi2_contingency","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:43:54.609907Z","iopub.execute_input":"2021-10-22T02:43:54.610166Z","iopub.status.idle":"2021-10-22T02:43:54.615144Z","shell.execute_reply.started":"2021-10-22T02:43:54.610134Z","shell.execute_reply":"2021-10-22T02:43:54.613867Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# categoircal-categorical relationship\n\ndef cat_cat_relationship(df,cat_col_1,cat_col_2):\n    # visualization\n    plot(df,cat_col_1,\n         cat_col_2,\n         display=['Stacked Bar Chart','Heat Map'])\n    \n    # Chi-square test\n    \n    # 1st step convert the data into a contingency table with frequencies\n    chi_contigency=pd.crosstab(df[cat_col_1],df[cat_col_2])\n    print(f'Selected cols [{cat_col_1}] and [{cat_col_2}]')\n    print('chi2-contingency table')\n    display(chi_contigency)\n    \n    # 2nd step: Chi-square test of independence.\n    c, p, dof, expected = chi2_contingency(chi_contigency)\n    if p<0.05:\n      print('Reject Null Hypothesis')\n      print(f'The:\\n [{cat_col_1}],[{cat_col_2}] are not independent\\n')\n    else:\n      print('Fail to Reject Null Hypothesis')\n      print(f'The:\\n [{cat_col_1}],[{cat_col_2}] are independent\\n') \n    print(f'The P-value = {p}')","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:43:54.616525Z","iopub.execute_input":"2021-10-22T02:43:54.616757Z","iopub.status.idle":"2021-10-22T02:43:54.629149Z","shell.execute_reply.started":"2021-10-22T02:43:54.616722Z","shell.execute_reply":"2021-10-22T02:43:54.628085Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# display the result\ncat_cat_relationship(df=train,\n                    cat_col_1='City Group',\n                    cat_col_2='Type')","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:43:54.630507Z","iopub.execute_input":"2021-10-22T02:43:54.630739Z","iopub.status.idle":"2021-10-22T02:43:54.884641Z","shell.execute_reply.started":"2021-10-22T02:43:54.630710Z","shell.execute_reply":"2021-10-22T02:43:54.883805Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"nulls_train = train.isnull().sum()\nnulls_train[nulls_train > 0]","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:43:54.885844Z","iopub.execute_input":"2021-10-22T02:43:54.886082Z","iopub.status.idle":"2021-10-22T02:43:54.895583Z","shell.execute_reply.started":"2021-10-22T02:43:54.886053Z","shell.execute_reply":"2021-10-22T02:43:54.894455Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"nulls_test = test.isnull().sum()\nnulls_test[nulls_test > 0]","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:43:54.897078Z","iopub.execute_input":"2021-10-22T02:43:54.897360Z","iopub.status.idle":"2021-10-22T02:43:54.947252Z","shell.execute_reply.started":"2021-10-22T02:43:54.897321Z","shell.execute_reply":"2021-10-22T02:43:54.946615Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Label Encoding**","metadata":{}},{"cell_type":"code","source":"from sklearn import preprocessing\n","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:43:54.948586Z","iopub.execute_input":"2021-10-22T02:43:54.949022Z","iopub.status.idle":"2021-10-22T02:43:54.953113Z","shell.execute_reply.started":"2021-10-22T02:43:54.948990Z","shell.execute_reply":"2021-10-22T02:43:54.952239Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:43:54.954748Z","iopub.execute_input":"2021-10-22T02:43:54.955060Z","iopub.status.idle":"2021-10-22T02:43:54.993138Z","shell.execute_reply.started":"2021-10-22T02:43:54.955029Z","shell.execute_reply":"2021-10-22T02:43:54.992007Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# define the function for label or one-hot encoding\ndef label_encode_transform(df,cols):\n    cols=cols\n    le = preprocessing.LabelEncoder()\n    df[cols]=df[cols].apply(le.fit_transform)\n    return df\n    \ndef onehot_encode_transform(df,cols):\n    cols=cols\n    df=pd.get_dummies(df,columns=cols)\n    return df","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:43:54.994512Z","iopub.execute_input":"2021-10-22T02:43:54.994756Z","iopub.status.idle":"2021-10-22T02:43:55.001633Z","shell.execute_reply.started":"2021-10-22T02:43:54.994726Z","shell.execute_reply":"2021-10-22T02:43:54.999929Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df_encoded = label_encode_transform(df=train,cols = ['City'])\n\ntrain_df_encoded = onehot_encode_transform(df=train,cols = ['City Group','Type'])\n\ntest_df_encoded = label_encode_transform(df=test,cols = ['City'])\n\ntest_df_encoded = onehot_encode_transform(df=test,cols = ['City Group','Type'])","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:43:55.009670Z","iopub.execute_input":"2021-10-22T02:43:55.010738Z","iopub.status.idle":"2021-10-22T02:43:55.131743Z","shell.execute_reply.started":"2021-10-22T02:43:55.010681Z","shell.execute_reply":"2021-10-22T02:43:55.130769Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_df_encoded.info()","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:43:55.133009Z","iopub.execute_input":"2021-10-22T02:43:55.133336Z","iopub.status.idle":"2021-10-22T02:43:55.154189Z","shell.execute_reply.started":"2021-10-22T02:43:55.133302Z","shell.execute_reply":"2021-10-22T02:43:55.153309Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Defining X & Y**","metadata":{}},{"cell_type":"code","source":"# seperate the source and the target variables\nfeature_cols = [x for x in train_df_encoded.columns if x != 'revenue']\nX_train = train_df_encoded[feature_cols]\ny_train = train_df_encoded['revenue']\n\nX_test  = test_df_encoded[feature_cols]","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:43:55.155504Z","iopub.execute_input":"2021-10-22T02:43:55.155873Z","iopub.status.idle":"2021-10-22T02:43:55.194185Z","shell.execute_reply.started":"2021-10-22T02:43:55.155831Z","shell.execute_reply":"2021-10-22T02:43:55.193521Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Scaling**","metadata":{}},{"cell_type":"code","source":"import pandas as pd\nfrom sklearn.preprocessing import MinMaxScaler\n#for this post we will use MinMaxScaler\nscaler=MinMaxScaler()","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:43:55.195376Z","iopub.execute_input":"2021-10-22T02:43:55.195681Z","iopub.status.idle":"2021-10-22T02:43:55.199710Z","shell.execute_reply.started":"2021-10-22T02:43:55.195649Z","shell.execute_reply":"2021-10-22T02:43:55.198953Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train_scaled=pd.DataFrame(scaler.fit_transform(X_train.T).T,columns=X_train.columns)\nX_test_scaled=pd.DataFrame(scaler.fit_transform(X_test.T).T,columns=X_test.columns)","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:43:55.200759Z","iopub.execute_input":"2021-10-22T02:43:55.201283Z","iopub.status.idle":"2021-10-22T02:43:56.843207Z","shell.execute_reply.started":"2021-10-22T02:43:55.201251Z","shell.execute_reply":"2021-10-22T02:43:56.842337Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# decision tree for feature importance on a regression problem\nfrom sklearn.datasets import make_regression\nfrom sklearn.tree import DecisionTreeRegressor\nfrom matplotlib import pyplot\n\n# define the model\nmodel = DecisionTreeRegressor()\n# fit the model\nmodel.fit(X_train_scaled, y_train)\n# get importance\nimportance = model.feature_importances_\nfor i,v in enumerate(importance):\n    print('Feature: %0d, Score: %.5f' % (i,v))","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:43:56.844623Z","iopub.execute_input":"2021-10-22T02:43:56.844940Z","iopub.status.idle":"2021-10-22T02:43:56.866804Z","shell.execute_reply.started":"2021-10-22T02:43:56.844897Z","shell.execute_reply":"2021-10-22T02:43:56.866166Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"n_top_features = 25\ntop_features = importance.argsort()[-n_top_features:]\nprint(top_features)  # [ 0  4  7 12  5]","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:43:56.868081Z","iopub.execute_input":"2021-10-22T02:43:56.868348Z","iopub.status.idle":"2021-10-22T02:43:56.875085Z","shell.execute_reply.started":"2021-10-22T02:43:56.868307Z","shell.execute_reply":"2021-10-22T02:43:56.874012Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train_final = X_train_scaled.iloc[:, top_features]\nX_test_final = X_test_scaled.iloc[:, top_features]","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:43:56.876921Z","iopub.execute_input":"2021-10-22T02:43:56.877252Z","iopub.status.idle":"2021-10-22T02:43:56.894170Z","shell.execute_reply.started":"2021-10-22T02:43:56.877207Z","shell.execute_reply":"2021-10-22T02:43:56.893461Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train_final.info()","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:43:56.895901Z","iopub.execute_input":"2021-10-22T02:43:56.896153Z","iopub.status.idle":"2021-10-22T02:43:56.910751Z","shell.execute_reply.started":"2021-10-22T02:43:56.896122Z","shell.execute_reply":"2021-10-22T02:43:56.909594Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_test_final.info()","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:43:56.911954Z","iopub.execute_input":"2021-10-22T02:43:56.912196Z","iopub.status.idle":"2021-10-22T02:43:56.931197Z","shell.execute_reply.started":"2021-10-22T02:43:56.912166Z","shell.execute_reply":"2021-10-22T02:43:56.930309Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**Models**","metadata":{}},{"cell_type":"markdown","source":"Model Building\n\nLinear Regression\n\nRidge Regression\n\nLasso Regression\n\nKNN\n\nDecision Tree Algorithm\n\nRandom Regression\n\nSVM","metadata":{}},{"cell_type":"code","source":"##Linear Regression\n\nimport numpy as np\nfrom sklearn.linear_model import LinearRegression\n\nreg = LinearRegression().fit(X_train_final, y_train)\nreg.score(X_train_final, y_train)","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:43:56.932564Z","iopub.execute_input":"2021-10-22T02:43:56.932786Z","iopub.status.idle":"2021-10-22T02:43:56.953811Z","shell.execute_reply.started":"2021-10-22T02:43:56.932759Z","shell.execute_reply":"2021-10-22T02:43:56.952799Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"reg.coef_\n","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:45:38.072032Z","iopub.execute_input":"2021-10-22T02:45:38.072440Z","iopub.status.idle":"2021-10-22T02:45:38.082354Z","shell.execute_reply.started":"2021-10-22T02:45:38.072404Z","shell.execute_reply":"2021-10-22T02:45:38.081136Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"reg.intercept_\n","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:45:45.140876Z","iopub.execute_input":"2021-10-22T02:45:45.141982Z","iopub.status.idle":"2021-10-22T02:45:45.148088Z","shell.execute_reply.started":"2021-10-22T02:45:45.141926Z","shell.execute_reply":"2021-10-22T02:45:45.147093Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_train_pred = reg.predict(X_train_final)\n","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:45:56.406470Z","iopub.execute_input":"2021-10-22T02:45:56.406793Z","iopub.status.idle":"2021-10-22T02:45:56.412571Z","shell.execute_reply.started":"2021-10-22T02:45:56.406764Z","shell.execute_reply":"2021-10-22T02:45:56.411893Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn import metrics\n##MAE\nprint(\"MAE:\",metrics.mean_absolute_error(y_train,y_train_pred))\n##MSE\nprint(\"MSE:\",metrics.mean_squared_error(y_train,y_train_pred))\n##RMSE\nprint(\"RMSE:\",np.sqrt(metrics.mean_absolute_error(y_train,y_train_pred)))","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:46:24.126198Z","iopub.execute_input":"2021-10-22T02:46:24.126558Z","iopub.status.idle":"2021-10-22T02:46:24.136407Z","shell.execute_reply.started":"2021-10-22T02:46:24.126522Z","shell.execute_reply":"2021-10-22T02:46:24.135259Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"##Ridge Regression\n\nfrom sklearn.linear_model import Ridge\nimport numpy as np\nfrom pandas import read_csv\n# evaluate an ridge regression model on the dataset\nfrom numpy import mean\nfrom numpy import std\nfrom numpy import absolute\nfrom pandas import read_csv\nfrom sklearn.model_selection import cross_val_score\nfrom sklearn.model_selection import RepeatedKFold\nfrom sklearn.linear_model import Ridge\n\n\nridge = Ridge(alpha=0.1, normalize=True)\nridge.fit(X_train_final, y_train)\ny_train_ridge_pred = ridge.predict(X_train_final)","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:55:35.146871Z","iopub.execute_input":"2021-10-22T02:55:35.148854Z","iopub.status.idle":"2021-10-22T02:55:35.175645Z","shell.execute_reply.started":"2021-10-22T02:55:35.148729Z","shell.execute_reply":"2021-10-22T02:55:35.174594Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn import metrics\n##MAE\nprint(\"MAE:\",metrics.mean_absolute_error(y_train,y_train_ridge_pred))\n##MSE\nprint(\"MSE:\",metrics.mean_squared_error(y_train,y_train_ridge_pred))\n##RMSE\nprint(\"RMSE:\",np.sqrt(metrics.mean_absolute_error(y_train,y_train_ridge_pred)))","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:55:57.552948Z","iopub.execute_input":"2021-10-22T02:55:57.553232Z","iopub.status.idle":"2021-10-22T02:55:57.563506Z","shell.execute_reply.started":"2021-10-22T02:55:57.553202Z","shell.execute_reply":"2021-10-22T02:55:57.562280Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nfrom sklearn import model_selection\nfrom sklearn.linear_model import LinearRegression\nfrom sklearn.linear_model import Ridge\nfrom sklearn.linear_model import Lasso\nfrom sklearn.linear_model import ElasticNet\nfrom sklearn.neighbors import KNeighborsRegressor\nfrom sklearn.tree import DecisionTreeRegressor\nfrom sklearn.svm import SVR\nfrom sklearn.ensemble import RandomForestRegressor\nfrom sklearn.metrics import r2_score\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import mean_squared_error\nfrom math import sqrt\n\n##Lasso Regression\nmodel_lasso = Lasso(alpha=0.01)\nmodel_lasso.fit(X_train_final, y_train) \ny_train_lasso_pred = model_lasso.predict(X_train_final)","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:56:54.753846Z","iopub.execute_input":"2021-10-22T02:56:54.754182Z","iopub.status.idle":"2021-10-22T02:56:54.785640Z","shell.execute_reply.started":"2021-10-22T02:56:54.754149Z","shell.execute_reply":"2021-10-22T02:56:54.784742Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn import metrics\n##MAE\nprint(\"MAE:\",metrics.mean_absolute_error(y_train,y_train_lasso_pred))\n##MSE\nprint(\"MSE:\",metrics.mean_squared_error(y_train,y_train_lasso_pred))\n##RMSE\nprint(\"RMSE:\",np.sqrt(metrics.mean_absolute_error(y_train,y_train_lasso_pred)))","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:57:13.067568Z","iopub.execute_input":"2021-10-22T02:57:13.068264Z","iopub.status.idle":"2021-10-22T02:57:13.077414Z","shell.execute_reply.started":"2021-10-22T02:57:13.068227Z","shell.execute_reply":"2021-10-22T02:57:13.076752Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"##KNN\nmodel_knn = KNeighborsRegressor(n_neighbors=8)\nprint(model)\nKNeighborsRegressor(algorithm='auto', leaf_size=30, metric='minkowski',\n          metric_params=None, n_jobs=1, n_neighbors=8, p=2,\n          weights='uniform') \n\nmodel_knn.fit(X_train_final, y_train)\n\ny_train_knn_pred = model_knn.predict(X_train_final)","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:57:59.312929Z","iopub.execute_input":"2021-10-22T02:57:59.313247Z","iopub.status.idle":"2021-10-22T02:57:59.336966Z","shell.execute_reply.started":"2021-10-22T02:57:59.313204Z","shell.execute_reply":"2021-10-22T02:57:59.335479Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn import metrics\n##MAE\nprint(\"MAE:\",metrics.mean_absolute_error(y_train,y_train_knn_pred))\n##MSE\nprint(\"MSE:\",metrics.mean_squared_error(y_train,y_train_knn_pred))\n##RMSE\nprint(\"RMSE:\",np.sqrt(metrics.mean_absolute_error(y_train,y_train_knn_pred)))","metadata":{"execution":{"iopub.status.busy":"2021-10-22T02:58:16.616995Z","iopub.execute_input":"2021-10-22T02:58:16.617347Z","iopub.status.idle":"2021-10-22T02:58:16.627743Z","shell.execute_reply.started":"2021-10-22T02:58:16.617311Z","shell.execute_reply":"2021-10-22T02:58:16.626756Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Random Regression\nfrom sklearn.ensemble import RandomForestRegressor\nfrom sklearn.datasets import make_regression\nX, y = make_regression(n_features=4, n_informative=2,\n                       random_state=0, shuffle=False)\nregrr = RandomForestRegressor(max_depth=2, random_state=0)\nregrr.fit(X_train_final, y_train)\ny_train_rr_pred = regrr.predict(X_train_final)","metadata":{"execution":{"iopub.status.busy":"2021-10-22T03:00:55.898677Z","iopub.execute_input":"2021-10-22T03:00:55.899504Z","iopub.status.idle":"2021-10-22T03:00:56.120869Z","shell.execute_reply.started":"2021-10-22T03:00:55.899439Z","shell.execute_reply":"2021-10-22T03:00:56.119892Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn import metrics\n##MAE\nprint(\"MAE:\",metrics.mean_absolute_error(y_train,y_train_rr_pred))\n##MSE\nprint(\"MSE:\",metrics.mean_squared_error(y_train,y_train_rr_pred))\n##RMSE\nprint(\"RMSE:\",np.sqrt(metrics.mean_absolute_error(y_train,y_train_rr_pred)))","metadata":{"execution":{"iopub.status.busy":"2021-10-22T03:01:10.309202Z","iopub.execute_input":"2021-10-22T03:01:10.309568Z","iopub.status.idle":"2021-10-22T03:01:10.320773Z","shell.execute_reply.started":"2021-10-22T03:01:10.309529Z","shell.execute_reply":"2021-10-22T03:01:10.319766Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"##SVM\nfrom sklearn.svm import SVR\nfrom sklearn.pipeline import make_pipeline\nfrom sklearn.preprocessing import StandardScaler\nimport numpy as np\nn_samples, n_features = 10, 5\nregrsvm = make_pipeline(StandardScaler(), SVR(C=1.0, epsilon=0.2))\nregrsvm.fit(X_train_final, y_train)\n\ny_train_svm_pred = regrsvm.predict(X_train_final)","metadata":{"execution":{"iopub.status.busy":"2021-10-22T03:01:28.155870Z","iopub.execute_input":"2021-10-22T03:01:28.156732Z","iopub.status.idle":"2021-10-22T03:01:28.179433Z","shell.execute_reply.started":"2021-10-22T03:01:28.156689Z","shell.execute_reply":"2021-10-22T03:01:28.178651Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn import metrics\n##MAE\nprint(\"MAE:\",metrics.mean_absolute_error(y_train,y_train_svm_pred))\n##MSE\nprint(\"MSE:\",metrics.mean_squared_error(y_train,y_train_svm_pred))\n##RMSE\nprint(\"RMSE:\",np.sqrt(metrics.mean_absolute_error(y_train,y_train_svm_pred)))","metadata":{"execution":{"iopub.status.busy":"2021-10-22T03:01:49.792466Z","iopub.execute_input":"2021-10-22T03:01:49.793132Z","iopub.status.idle":"2021-10-22T03:01:49.808493Z","shell.execute_reply.started":"2021-10-22T03:01:49.793095Z","shell.execute_reply":"2021-10-22T03:01:49.807354Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pip install xgboost\n","metadata":{"execution":{"iopub.status.busy":"2021-10-22T03:14:10.591063Z","iopub.execute_input":"2021-10-22T03:14:10.591352Z","iopub.status.idle":"2021-10-22T03:14:19.565279Z","shell.execute_reply.started":"2021-10-22T03:14:10.591322Z","shell.execute_reply":"2021-10-22T03:14:19.564012Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pip install lightgbm\n","metadata":{"execution":{"iopub.status.busy":"2021-10-22T03:14:19.567520Z","iopub.execute_input":"2021-10-22T03:14:19.567832Z","iopub.status.idle":"2021-10-22T03:14:28.276926Z","shell.execute_reply.started":"2021-10-22T03:14:19.567796Z","shell.execute_reply":"2021-10-22T03:14:28.275722Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.linear_model import LassoCV\nfrom sklearn.linear_model import RidgeCV\nfrom sklearn.linear_model import ElasticNetCV\nimport lightgbm as lgb\nimport xgboost as xgb\n\nfrom sklearn.metrics import mean_squared_error","metadata":{"execution":{"iopub.status.busy":"2021-10-22T03:14:30.480071Z","iopub.execute_input":"2021-10-22T03:14:30.480453Z","iopub.status.idle":"2021-10-22T03:14:30.761993Z","shell.execute_reply.started":"2021-10-22T03:14:30.480410Z","shell.execute_reply":"2021-10-22T03:14:30.760955Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cv=25\n\n# fit the Models\nlassoCV=LassoCV(cv=cv).fit(X_train_final,y_train)\nridgeCV=RidgeCV(cv=cv).fit(X_train_final,y_train)\nelasticnetCV=ElasticNetCV(cv=cv).fit(X_train_final,y_train)\nlightgbm=lgb.LGBMRegressor().fit(X_train_final,y_train)\nxgboost=xgb.XGBRegressor().fit(X_train_final,y_train)\n\n# generate the prediction for train dataset\nlasso_train_pred=lassoCV.predict(X_train_final)\nridge_train_pred=ridgeCV.predict(X_train_final)\nelasticnet_train_pred=elasticnetCV.predict(X_train_final)\nlgbm_train_pred=lightgbm.predict(X_train_final)\nxgb_train_pred=xgboost.predict(X_train_final)\n\n# generate RMSE for each models\nlasso_RMSE= np.sqrt(mean_squared_error(y_train, lasso_train_pred))\nridge_RMSE= np.sqrt(mean_squared_error(y_train, ridge_train_pred))\nelasticnet_RMSE= np.sqrt(mean_squared_error(y_train, elasticnet_train_pred))\nlgbm_RMSE= np.sqrt(mean_squared_error(y_train, lgbm_train_pred))\nxgb_RMSE= np.sqrt(mean_squared_error(y_train, xgb_train_pred))","metadata":{"execution":{"iopub.status.busy":"2021-10-22T03:17:32.231265Z","iopub.execute_input":"2021-10-22T03:17:32.232079Z","iopub.status.idle":"2021-10-22T03:17:33.735257Z","shell.execute_reply.started":"2021-10-22T03:17:32.232034Z","shell.execute_reply":"2021-10-22T03:17:33.734371Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model_list=['Lasso','Ridge','ElasticNet','LGBM','XGBoost']\nrmse_list=[lasso_RMSE,ridge_RMSE,elasticnet_RMSE,lgbm_RMSE,xgb_RMSE]\n\n# plot the RMSE for each model\nax=sns.barplot(y=model_list,x=rmse_list)\nax.set_title('Model RMSE Result')\n\n# print the result RMSE number\nprint(f' lasso={lasso_RMSE} \\n ridge = {ridge_RMSE}\\n Elastic_Net = {elasticnet_RMSE}\\n LGBM = {lgbm_RMSE}\\n XGBoost= {xgb_RMSE}\\n')","metadata":{"execution":{"iopub.status.busy":"2021-10-22T03:17:33.736868Z","iopub.execute_input":"2021-10-22T03:17:33.737143Z","iopub.status.idle":"2021-10-22T03:17:33.965118Z","shell.execute_reply.started":"2021-10-22T03:17:33.737110Z","shell.execute_reply":"2021-10-22T03:17:33.964114Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**I choose KNN as the final model for prediction**","metadata":{}},{"cell_type":"code","source":"# generate prediction for test dataset\nKNN_test_pred=model_knn.predict(X_test_final)","metadata":{"execution":{"iopub.status.busy":"2021-10-22T03:23:30.875346Z","iopub.execute_input":"2021-10-22T03:23:30.875785Z","iopub.status.idle":"2021-10-22T03:23:31.657819Z","shell.execute_reply.started":"2021-10-22T03:23:30.875742Z","shell.execute_reply":"2021-10-22T03:23:31.657033Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# store the result\nsubmission_df=pd.DataFrame(\n{'Id':test.index,\n'Prediction':KNN_test_pred}\n)","metadata":{"execution":{"iopub.status.busy":"2021-10-22T03:24:15.170729Z","iopub.execute_input":"2021-10-22T03:24:15.171024Z","iopub.status.idle":"2021-10-22T03:24:15.178944Z","shell.execute_reply.started":"2021-10-22T03:24:15.170993Z","shell.execute_reply":"2021-10-22T03:24:15.178157Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submission_df.to_csv('submission_dcx.csv',index=False)","metadata":{"execution":{"iopub.status.busy":"2021-10-22T03:24:25.013358Z","iopub.execute_input":"2021-10-22T03:24:25.013754Z","iopub.status.idle":"2021-10-22T03:24:25.345912Z","shell.execute_reply.started":"2021-10-22T03:24:25.013716Z","shell.execute_reply":"2021-10-22T03:24:25.344832Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}