{"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":"<center><h1 class=\"list-group-item list-group-item-success\">House Prices - Advanced Regression Techniques</h1></center>\n\n<br>\n<center><img src = \"https://www.realmediahub.com/wp-content/uploads/2021/08/buzz.jpg\"></center>\n\n## Problem Statement<br>\n<font size = 4>   \nAsk a home buyer to describe their dream house, and they probably won't begin with the height of the basement ceiling or the proximity to an east-west railroad. But this playground competition's dataset proves that much more influences price negotiations than the number of bedrooms or a white-picket fence.\n\nWith 79 explanatory variables describing (almost) every aspect of residential homes in Ames, Iowa, this competition challenges you to predict the final price of each home. </font>\n    \n## Team Members <br>\n  \n<font size = 4>\n1.   Azizi Hamza <br><br> \n2.   Ben Taleb Aziz<br><br>\n3.   ElElmi Mohamed<br>","metadata":{}},{"cell_type":"code","source":"import pandas as pd \nimport numpy as np\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nfrom scipy.stats import ttest_ind\nfrom scipy.stats import chi2_contingency","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Data = pd.read_csv('train.csv',low_memory=False)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Data","metadata":{"scrolled":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Data.describe()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Data.info()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Data.dtypes.value_counts().plot.pie()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"##modalite des variables Quali\nfor i in Data.select_dtypes('object'):\n    print(f'{i:-<20}{Data[i].unique()}')","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#Verification de la distribution des variables numériques\n\nfor i in Data.select_dtypes(exclude='object'):\n    plt.figure()\n    sns.distplot(Data[i])\n    plt.legend()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(15,15))\nsns.heatmap(Data.corr())","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(15,15))\nsns.heatmap(Data.isnull())","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"percent_missing = Data.isnull().sum() * 100 / len(Data)\nmissing_value_df = pd.DataFrame({'column_name': Data.columns,\n                                 'percent_missing': percent_missing})\nplt.figure(figsize = (18,8))\nplt.rcParams.update({'font.size': 15})\nplt.xticks(rotation=90)\nplt.title(\"Missing Value Analysis\")\nplt.xlabel(\"Features\")\nplt.ylabel(\"% of missing values\")\nplt.bar(missing_value_df[\"column_name\"],missing_value_df[\"percent_missing\"],color=(0.1, 0.1, 0.1, 0.1),edgecolor='blue')","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Traitement des variables ","metadata":{}},{"cell_type":"code","source":"ordinal_encoding = {'LotShape': {np.nan: 0, 'Reg': 1, 'IR1': 2, 'IR2': 3, 'IR3': 4}, \\\n                    'Utilities': {np.nan: 0, 'ElO': 1, 'NoSeWa': 2, 'NoSeWr': 3, 'AllPub': 4}, \\\n                    'LandSlope': {np.nan: 0, 'Gtl': 1, 'Mod': 2, 'Sev': 3}, \\\n                    'ExterQual': {np.nan: 0, 'Po': 1, 'Fa': 2, 'TA': 3, 'Gd': 4, 'Ex': 5}, \\\n                    'ExterCond': {np.nan: 0, 'Po': 1, 'Fa': 2, 'TA': 3, 'Gd': 4, 'Ex': 5}, \\\n                    'BsmtQual': {np.nan: 0, 'Po': 1, 'Fa': 2, 'TA': 3, 'Gd': 4, 'Ex': 5}, \\\n                    'BsmtCond': {np.nan: 0, 'Po': 1, 'Fa': 2, 'TA': 3, 'Gd': 4, 'Ex': 5}, \\\n                    'BsmtExposure': {np.nan: 0, 'No': 1, 'Mn': 2, 'Av': 3, 'Gd': 4}, \\\n                    'BsmtFinType1': {np.nan: 0, 'Unf': 1, 'LwQ': 2, 'Rec': 3, 'BLQ': 4, 'ALQ': 5, 'GLQ': 6}, \\\n                    'BsmtFinType2': {np.nan: 0, 'Unf': 1, 'LwQ': 2, 'Rec': 3, 'BLQ': 4, 'ALQ': 5, 'GLQ': 6}, \\\n                    'HeatingQC': {np.nan: 0, 'Po': 1, 'Fa': 2, 'TA': 3, 'Gd': 4, 'Ex': 5}, \\\n                    'CentralAir': {np.nan: 0, 'N': 1, 'Y': 2}, \\\n                    'Electrical': {np.nan: 0, 'Mix': 1, 'FuseP': 2, 'FuseF': 3, 'FuseA': 4, 'SBrkr': 5}, \\\n                    'KitchenQual': {np.nan: 0, 'Po': 1, 'Fa': 2, 'TA': 3, 'Gd': 4, 'Ex': 5}, \\\n                    'Functional': {np.nan: 0, 'Sal': 1, 'Sev': 2, 'Maj2': 3, 'Maj1': 4, 'Mod': 5, 'Min2': 6, 'Min1': 7, 'Typ': 8}, \\\n                    'FireplaceQu': {np.nan: 0, 'Po': 1, 'Fa': 2, 'TA': 3, 'Gd': 4, 'Ex': 5}, \\\n                    'GarageFinish': {np.nan: 0, 'Unf': 1, 'RFn': 2, 'Fin': 3}, \\\n                    'GarageQual': {np.nan: 0, 'Po': 1, 'Fa': 2, 'TA': 3, 'Gd': 4, 'Ex': 5}, \\\n                    'GarageCond': {np.nan: 0, 'Po': 1, 'Fa': 2, 'TA': 3, 'Gd': 4, 'Ex': 5}, \\\n                    'PavedDrive': {np.nan: 0, 'N': 1, 'P': 2, 'Y': 3}, \\\n                    'PoolQC': {np.nan: 0, 'Fa': 1, 'TA': 2, 'Gd': 3, 'Ex': 4}}\nData.replace(ordinal_encoding, inplace=True)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Data.info()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Data.isna().sum()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Data[\"Alley\"].fillna(\"No\",inplace=True)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ordinal_encoding = {'Street': {'Pave': 0, 'Grvl': 1}}\nData.replace(ordinal_encoding, inplace=True)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Data[\"Fence\"].fillna(\"No\",inplace=True)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Data.drop('Id', axis=1,inplace=True)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Data.drop('MiscFeature', axis=1,inplace=True)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Data[\"GarageType\"].fillna(\"No\",inplace=True)\nData[\"GarageYrBlt\"].fillna(\"No\",inplace=True)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Data[\"MasVnrType\"].fillna(\"NoMasVnr\",inplace=True)\nData[\"MasVnrArea\"].fillna(0,inplace=True)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.scatter(Data[\"LotFrontage\"],Data[\"LotArea\"])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"nominal_features = ['MSSubClass', 'MSZoning', 'Street', 'LandContour', 'LotConfig', \\\n                    'Neighborhood', 'Condition1', 'Condition2', 'BldgType', 'HouseStyle', \\\n                    'RoofStyle', 'RoofMatl', 'Exterior1st', 'Exterior2nd', 'MasVnrType', \\\n                    'Foundation', 'Heating', 'SaleType', 'SaleCondition','GarageType', \\\n                    'Alley', 'Fence']","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"dummies = pd.get_dummies(Data[nominal_features]).sort_index()\nData = pd.concat([Data, dummies], axis=1)\nData.drop(nominal_features, axis=1, inplace=True)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Data.info()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for col in Data.select_dtypes(\"object\"):\n    print(col)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Les correlations des variables avec SalePrice (Target)","metadata":{}},{"cell_type":"code","source":"for col in Data.columns.values:\n    try:\n        print(col, \":\" ,Data[\"SalePrice\"].corr(Data[col]))\n    except Exception:\n        pass","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Data[\"SalePrice\"].corr(Data['OverallQual'])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# OverrallQual est la variable la plus corrélée avec SalePrice","metadata":{}},{"cell_type":"code","source":"var = 'OverallQual'\ndata = pd.concat([Data['SalePrice'], Data[var]], axis=1)\nf, ax = plt.subplots(figsize=(8, 6))\nfig = sns.boxplot(x=var, y=\"SalePrice\", data=data)\nfig.axis(ymin=0, ymax=800000)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# plus la qualité est meilleure plus le prix augmente \n# De meme pour la variable \" KitchenQual \" et \" ExterQual \"","metadata":{}},{"cell_type":"code","source":"Data[\"SalePrice\"].corr(Data['KitchenQual'])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"var=\"KitchenQual\"\ndata = pd.concat([Data['SalePrice'], Data[var]], axis=1)\nf, ax = plt.subplots(figsize=(8, 6))\nfig = sns.boxplot(x=var, y=\"SalePrice\", data=data)\nfig.axis(ymin=0, ymax=800000)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"var=\"ExterQual\"\ndata = pd.concat([Data['SalePrice'], Data[var]], axis=1)\nf, ax = plt.subplots(figsize=(8, 6))\nfig = sns.boxplot(x=var, y=\"SalePrice\", data=data)\nfig.axis(ymin=0, ymax=800000)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Data[\"GarageYrBlt\"]=Data[\"GarageYrBlt\"].str.replace('No',\"0\")","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for col in Data.select_dtypes(\"object\"):\n    Data[col]=Data[col].astype(\"float\")","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Data[\"GarageYrBlt\"].fillna(0,inplace=True)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for col in Data.select_dtypes(\"object\"):\n    print(col)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for col in Data.columns:\n    if(Data[col].isna().sum()!=0):\n        print(col)","metadata":{"scrolled":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"l=Data.columns\nl","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Data","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=(15,15))\nsns.heatmap(Data.isnull())","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"lr_data=pd.concat([Data[\"LotArea\"],Data[\"LotFrontage\"],],axis=1)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"lr_data.dropna(inplace=True)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.scatter(Data[\"LotArea\"],Data[\"LotFrontage\"],color = \"green\")","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from scipy.stats import pearsonr\ncorr,_=pearsonr(lr_data[\"LotArea\"],lr_data[\"LotFrontage\"])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"corr","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Les correlations des variables les plus correlées avec la variable \" Lot Frontage \"","metadata":{}},{"cell_type":"code","source":"Data.corr()[:1]","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for col in Data.corr()[:1].columns:\n    if((Data.corr()[:1])[col].item()>0.2):\n        print(col,\" : \",Data.corr()[:1][col].item())","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.scatter(Data[\"LotArea\"],Data[\"LotFrontage\"],color = \"green\")","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.scatter(Data[\"1stFlrSF\"],Data[\"LotFrontage\"],color = \"blue\")","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.scatter(Data[\"GrLivArea\"],Data[\"LotFrontage\"],color = \"orange\")","metadata":{"scrolled":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Data[\"LotFrontage\"].unique()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn import linear_model","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"lr_data=pd.concat([Data[\"LotArea\"],Data[\"LotFrontage\"],Data[\"GrLivArea\"],Data[\"1stFlrSF\"],Data[\"TotalBsmtSF\"],Data[\"BldgType_1Fam\"]],axis=1)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"lr_data.dropna(inplace=True)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X=lr_data.drop([\"LotFrontage\"],axis=1)\ny=lr_data[\"LotFrontage\"]","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.model_selection import train_test_split\n\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2,shuffle=True)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"regr = linear_model.LinearRegression()\nregr.fit(X_train, y_train)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_pred =  regr.predict(X_test) ","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.metrics import r2_score\nfrom sklearn.metrics import mean_squared_error\n#####\nscore=r2_score(y_test,y_pred)\nprint('R2 Score is',score)\nprint('Mean_Sqrd_Error is ==',mean_squared_error(y_test,y_pred))\nprint('Root_Mean_Squared Error is ==',np.sqrt(mean_squared_error(y_test,y_pred)))","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"regr.predict(X_test)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"lr_data=pd.concat([Data[\"LotArea\"],Data[\"LotFrontage\"],Data[\"GrLivArea\"],Data[\"1stFlrSF\"],Data[\"TotalBsmtSF\"],Data[\"BldgType_1Fam\"]],axis=1)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"lr_data.fillna(-1,inplace=True)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pred=lr_data[lr_data[\"LotFrontage\"]==-1]","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pred","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pred=pred.drop(\"LotFrontage\",axis=1)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pred=regr.predict(pred)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Data[\"LotFrontage\"].unique()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Data[\"LotFrontage\"].fillna(-1,inplace=True)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"k=0\nfor i in range(len(Data[\"LotFrontage\"])):\n    if(Data[\"LotFrontage\"][i]==-1):\n        Data[\"LotFrontage\"][i]=pred[k]\n        k=k+1","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for col in Data.columns:\n    if(Data[col].isna().sum()!=0):\n        print(\"***\",col)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"","metadata":{}},{"cell_type":"code","source":"Data.info()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def test_chi_deux(Data,alpha):\n    for col in Data.columns.values:\n        cont_tab=pd.crosstab(Data[col],Data['SalePrice'])\n        if (chi2_contingency(cont_tab,correction=True)[1]<alpha):\n            print(f'{col :-<50} {\"H0 Rejetée\"}')\n        else:\n            print(f'{col :-<50} {\"H0 Acceptée\"}')","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_chi_deux(Data,0.05)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for col in Data.columns.values:\n    plt.figure()\n    sns.distplot(Data[col])\n    plt.legend()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from scipy import stats","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.distplot(Data[\"SalePrice\"])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ax1 = plt.subplot()\n## Plotting the QQ_Plot.\nres=stats.probplot(Data[\"SalePrice\"],plot=plt)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# on effectue une transformation log","metadata":{}},{"cell_type":"code","source":"Data[\"SalePrice\"] = np.log1p(Data[\"SalePrice\"]) #logarithms to normalize","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sns.distplot(Data[\"SalePrice\"])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ax1 = plt.subplot()\n## Plotting the QQ_Plot.\nres=stats.probplot(Data[\"SalePrice\"],plot=plt)","metadata":{"scrolled":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X = Data[:1460]","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Data.shape","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# PCA","metadata":{}},{"cell_type":"code","source":"X = Data.drop('SalePrice', axis=1)\ny = Data['SalePrice']\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.preprocessing import StandardScaler\nsc = StandardScaler() #this is a requirement for pca .. otherwise it breaks\nX = sc.fit_transform(X)\n\n### Checking the curve on the explained variance we have around 250 components that explain most (~80%) of the variance ","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.decomposition import PCA\npca_com = 100\npca = PCA(n_components=217) #978\nX = pca.fit_transform(X)\n# X_test = pca.transform(X_test)\n\nexplained_variance = pca.explained_variance_ratio_ #X_train #explained varience is pretty self explanotory","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"### 5.3.1 PCA insights\n\nplt.figure()\nplt.plot(np.cumsum(pca.explained_variance_ratio_))\nplt.xlabel('Number of Components')\nplt.ylabel('Variance (%)') \nplt.title('Explained Variance')\nplt.show()","metadata":{"scrolled":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Around 100 variable is what we need","metadata":{}},{"cell_type":"code","source":"les_colonnes=Data.columns\nles_colonnes.drop(\"SalePrice\")","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Var_matrix =(pd.concat([pd.DataFrame(list(les_colonnes), columns=[\"Factors\"] )\n           ,pd.DataFrame(list(explained_variance**2), columns=[\"^2 Variance\"] )]\n          , axis=1).sort_values(by='^2 Variance', ascending = False)[0:pca_com])\n \nlist(Var_matrix['Factors'])","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_new = Data[list(Var_matrix['Factors'])]\nX_new.shape","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y.shape","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_new=X_new.drop(\"SalePrice\",axis=1)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.metrics import mean_squared_error, r2_score\nfrom sklearn.linear_model import Ridge\nfrom sklearn.linear_model import Lasso\nfrom sklearn.linear_model import ElasticNet\nfrom sklearn.svm import SVR\nfrom sklearn.ensemble import RandomForestRegressor\nfrom xgboost import XGBRegressor\nfrom lightgbm import LGBMRegressor","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def rsqr_score(test, pred):\n    \n    r2_ = r2_score(test, pred)\n    return r2_\n\n\n# RMSE\ndef rmse_score(test, pred):\n    \n    rmse_ = np.sqrt(mean_squared_error(test, pred))\n    return rmse_\n\n\n# Print the scores\ndef print_score(test, pred):\n    \n    print(f\"- Regressor: {regr.__class__.__name__}\")\n    print(f\"R²: {rsqr_score(test, pred)}\")\n    print(f\"RMSE: {rmse_score(test, pred)}\\n\")","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.model_selection import train_test_split\n\nX_train, X_test, y_train, y_test = train_test_split(X_new, y, test_size = 0.4,shuffle=True)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ridge = Ridge()\nlasso = Lasso(alpha=0.001)\nelastic = ElasticNet(alpha=0.001)\nsvr = SVR()\nrdf = RandomForestRegressor()\nxgboost = XGBRegressor()\nlgbm = LGBMRegressor()\n\n# Train models on X_train and y_train\nfor regr in [ridge, lasso, elastic, svr, rdf, xgboost, lgbm]:\n    # fit the corresponding model\n    regr.fit(X_train, y_train)\n    y_pred = regr.predict(X_test)\n    # Print the defined metrics above for each classifier\n    print_score(y_test, y_pred)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"len(lasso.coef_)\nfeatures=X_new.columns","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"importance=np.abs(lasso.coef_)\nlen(importance)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"np.array(features)[importance==0]","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Ridge is the best model who fits our data","metadata":{}},{"cell_type":"code","source":"y_pred = ridge.predict(X_test) #predicting the values","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_pred,y_test\nPred = pd.DataFrame(y_pred, columns=['SalePrice'])\ndf100 = pd.concat([y_test, Pred], axis=1)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def plotGraph(y_test,y_pred,regressorName):\n    if max(y_test) >= max(y_pred):\n        my_range = int(max(y_test))\n    else:\n        my_range = int(max(y_pred))\n    plt.scatter(range(len(y_test)), y_test, color='blue')\n    plt.scatter(range(len(y_pred)), y_pred, color='red')\n    plt.title(regressorName)\n    plt.show()\n    return\n\n\nplotGraph(y_test, y_pred, \"Actual vs Predicted\")","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_pred = ridge.predict(X_test)\nplt.figure()\nplt.title(\"Actual vs. Predicted house prices\\n (Ridge)\", fontsize=20)\nplt.scatter(np.exp(y_test), np.exp(y_pred),\n            color=\"deepskyblue\", marker=\"o\", facecolors=\"none\")\nplt.plot([0, 800000], [0, 800000], \"darkorange\", lw=2)\nplt.xlim(0, 800000)\nplt.ylim(0, 800000)\nplt.xlabel(\"\\nActual Price\", fontsize=16)\nplt.ylabel(\"Predicted Price\\n\", fontsize=16)\nplt.show()","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Back Tracking ","metadata":{}},{"cell_type":"code","source":"import statsmodels.api as sm\n\nX_nou = np.append(arr = np.ones((X_new.shape[0], 1)).astype(int), values = X_new, axis = 1)\nX_opt = X_nou[:,:]\nregressor_OLS = sm.OLS(endog = y, exog = X_opt).fit()\nresult=regressor_OLS.summary()\nprint(result)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"a=np.arange(100)\nb=True\nwhile(b==True):\n    dic={}\n    print(a)\n    X_opt = X_nou[:, a]\n    regressor_OLS = sm.OLS(endog = y, exog = X_opt).fit()\n    regressor_OLS.summary()\n    result=np.array(regressor_OLS.pvalues)\n    for i in range(len(regressor_OLS.pvalues)):\n        dic[i]=a[i]\n    b=False\n    for i in (regressor_OLS.pvalues):\n        if i>0.05:\n            b=True\n    \n        \n    \n            \n    pmax =regressor_OLS.pvalues.max()\n    indice=np.where(result==regressor_OLS.pvalues.max())\n    v=dic[int(indice[0])]\n    a=a[a!=v]","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(regressor_OLS.summary())","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Les variables les plus pertinents par rapport aux 100 variables du PCA\n## Critere = p_value","metadata":{}},{"cell_type":"code","source":"print(len(a))","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train, X_test, y_train, y_test = train_test_split(X_opt, y, test_size = 0.4,shuffle=True)\n\nridge = Ridge()\nlasso = Lasso(alpha=0.001)\nelastic = ElasticNet(alpha=0.001)\nsvr = SVR()\nrdf = RandomForestRegressor()\nxgboost = XGBRegressor()\nlgbm = LGBMRegressor()\n\n# Train models on X_train and y_train\nfor regr in [ridge, lasso, elastic, svr, rdf, xgboost, lgbm]:\n    # fit the corresponding model\n    regr.fit(X_train, y_train)\n    y_pred = regr.predict(X_test)\n    # Print the defined metrics above for each classifier\n    print_score(y_test, y_pred)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.model_selection import cross_val_score\nfrom sklearn.model_selection import GridSearchCV\nfrom sklearn.feature_selection import VarianceThreshold","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"scores_ridge = cross_val_score(voting_clf, X_train, y_train,\n                                cv=5)\n\nprint(\"Mean scores (Ridge Model):\\n\", np.mean(scores_ridge))\nprint(\"Standard deviation of scores (Ridge Model):\\n\", np.std(scores_ridge))","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"scores_ridge","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# GridSearchCV : Ridge","metadata":{}},{"cell_type":"code","source":"alphas = np.linspace(0, 40, 100).tolist()\n\ntuned_parameters = {\"alpha\": alphas}\n\n# GridSearch\nridge_cv = GridSearchCV(Ridge(), tuned_parameters, cv=5, n_jobs=-1, verbose=1)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ridge_cv.fit(X_train, y_train)\n\n# print best params and the corresponding R²\nprint(f\"Best hyperparameters: {ridge_cv.best_params_}\")\nprint(f\"Best R² (train): {ridge_cv.best_score_}\")","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model_ridge_opt = Ridge(alpha = ridge_cv.best_params_[\"alpha\"])\nmodel_ridge_opt.fit(X_train, y_train)\ny_pred_ridge_opt = model_ridge_opt.predict(X_test)\nprint(f\"R²: {rsqr_score(y_test, y_pred_ridge_opt)}\")\nprint(f\"RMSE: {rmse_score(y_test, y_pred_ridge_opt)}\\n\")","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# The best performing models : Ridge /// Lasso /// Elastic /// LGBM /// Xgboost ","metadata":{}},{"cell_type":"code","source":"\nfrom sklearn.ensemble import VotingRegressor\n\nridge = Ridge(ridge_cv.best_params_[\"alpha\"])\nxgboost = XGBRegressor()\nlgbm = LGBMRegressor()\n\nvoting_clf = VotingRegressor(estimators=[('rg', ridge), ('xgb', xgboost),('lgbm', lgbm)])\nvoting_clf.fit(X_train, y_train)\n\ny_pred = voting_clf.predict(X_test)\nprint(f\"R²: {rsqr_score(y_test, y_pred)}\")\nprint(f\"RMSE: {rmse_score(y_test, y_pred)}\\n\")","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# The best model with be the voting model","metadata":{}},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}