{"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 pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\nimport numpy as np\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":"2022-07-20T02:48:53.591651Z","iopub.execute_input":"2022-07-20T02:48:53.592026Z","iopub.status.idle":"2022-07-20T02:48:53.601032Z","shell.execute_reply.started":"2022-07-20T02:48:53.591996Z","shell.execute_reply":"2022-07-20T02:48:53.599813Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_data = pd.read_csv('../input/titanic/test.csv')\ntrain_data = pd.read_csv('../input/titanic/train.csv')\nprint(train_data.info(),test_data.info())","metadata":{"execution":{"iopub.status.busy":"2022-07-20T02:48:54.870417Z","iopub.execute_input":"2022-07-20T02:48:54.870791Z","iopub.status.idle":"2022-07-20T02:48:54.901280Z","shell.execute_reply.started":"2022-07-20T02:48:54.870762Z","shell.execute_reply":"2022-07-20T02:48:54.900259Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Dividir la data de entrenamiento para validacion [*]\n# Para el entrenamiento retirar filas sin valores de survival [*]\n\n# Separar la data en categoricas e int [*]\n# limpiar la contaminacion de la data [*]\n# controlar las cardinalities de las categoricas [*]\n# buscar las columnas con valores vacios y reemplazar [*]\n# hacer hot-encode a las categoricas [*]\n\n# hacer un cuadro con los valores de las categoricas [x]no es necesario\n\n# utilizar XGBooster como modelo [*]\n# organizar pipelines\n# pipelines:\n    # transformador de categoricas en OH y imputer\n    # llenador de columnas y transformador\n    # modelado\n# hacer cross validation para validar el MAE","metadata":{"execution":{"iopub.status.busy":"2022-07-20T02:48:55.854383Z","iopub.execute_input":"2022-07-20T02:48:55.854956Z","iopub.status.idle":"2022-07-20T02:48:55.859838Z","shell.execute_reply.started":"2022-07-20T02:48:55.854923Z","shell.execute_reply":"2022-07-20T02:48:55.858696Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.model_selection import train_test_split\n\ntrain_data = train_data.dropna( subset = ['Survived'] , axis = 0)\nX = train_data.copy()\nX.drop(['Survived'] , axis = 1 , inplace = True)\ny = train_data['Survived']\n\nX_train , X_valid , y_train , y_valid = train_test_split(X , y , test_size = 0.75 ,random_state = 12)","metadata":{"execution":{"iopub.status.busy":"2022-07-20T02:57:11.323521Z","iopub.execute_input":"2022-07-20T02:57:11.323933Z","iopub.status.idle":"2022-07-20T02:57:11.337955Z","shell.execute_reply.started":"2022-07-20T02:57:11.323899Z","shell.execute_reply":"2022-07-20T02:57:11.337180Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Part A: Data Prep\n","metadata":{}},{"cell_type":"code","source":"# Separar la data en categoricas e int [*]\n\ncategorical_cols = [name for name in X_train.columns if X_train[name].dtype == 'object' ]\nnumerical_cols = [name for name in X_train.columns if X_train[name].dtype != 'object']\nprint('categoricals:' + str(categorical_cols) + '\\nnumericals:' + str(numerical_cols))","metadata":{"execution":{"iopub.status.busy":"2022-07-20T02:48:57.785067Z","iopub.execute_input":"2022-07-20T02:48:57.785455Z","iopub.status.idle":"2022-07-20T02:48:57.795769Z","shell.execute_reply.started":"2022-07-20T02:48:57.785425Z","shell.execute_reply":"2022-07-20T02:48:57.794389Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# limpiar la contaminacion de la data [*]\n\nempty_cols = [ name for name in X_train.columns if X_train[name].isnull().sum()]\nX_train[empty_cols].info()\nobsolet_cols = ['Name','PassengerId','Cabin','Embarked'] # dropear estas columnas ","metadata":{"execution":{"iopub.status.busy":"2022-07-20T02:48:58.854168Z","iopub.execute_input":"2022-07-20T02:48:58.855051Z","iopub.status.idle":"2022-07-20T02:48:58.874837Z","shell.execute_reply.started":"2022-07-20T02:48:58.854997Z","shell.execute_reply":"2022-07-20T02:48:58.873881Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# cardinalities: cantidad de valores qu contienen las columnas de categoricas para no realizas un Hot encoder muy largo\n# controlar las cardinalities de las categoricas \n\nfor name in categorical_cols:\n    print(name , 'unique values: ' , len(X_train[name].unique()))\n# conclusion: name,cabin y embarked van a ser dropeados. Quedan sex y ticket. Sex se puede hacer uun Hot-Encode y Ticket se dejara como esta","metadata":{"execution":{"iopub.status.busy":"2022-07-20T02:48:59.772685Z","iopub.execute_input":"2022-07-20T02:48:59.773515Z","iopub.status.idle":"2022-07-20T02:48:59.780906Z","shell.execute_reply.started":"2022-07-20T02:48:59.773475Z","shell.execute_reply":"2022-07-20T02:48:59.780021Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# buscar las columnas con valores vacios y reemplazar\n\nempty_cols.remove('Age')\n#X_train.drop(empty_cols , axis = 1, inplace = False)\n#X_valid.drop(empty_cols , axis = 1, inplace = True)","metadata":{"execution":{"iopub.status.busy":"2022-07-20T02:49:01.043267Z","iopub.execute_input":"2022-07-20T02:49:01.044475Z","iopub.status.idle":"2022-07-20T02:49:01.049699Z","shell.execute_reply.started":"2022-07-20T02:49:01.044427Z","shell.execute_reply":"2022-07-20T02:49:01.048383Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# fill age column con strategy = 'mean'\nfrom sklearn.impute import SimpleImputer\n\nimputer = SimpleImputer(strategy = 'most_frequent')\nimputed_n_cols = pd.DataFrame(imputer.fit_transform(X_train[numerical_cols] ))\n# One-Hot encode sex column\nOH_sex_col = pd.get_dummies(X_train['Sex'])\n\n# se modifican los indices para que queden iguales,  asi la lista no se alarga y no se obtienen missing values\nimputed_n_cols.index = range(len(imputed_n_cols))\nOH_sex_col.index = range(len(OH_sex_col))\nimputed_n_cols.columns = X_train[numerical_cols].columns\n\n# se unen las dos partes de las tablas modificadas\nX_train_refined = imputed_n_cols.join(OH_sex_col)\nX_train_refined\n","metadata":{"execution":{"iopub.status.busy":"2022-07-20T02:49:02.098336Z","iopub.execute_input":"2022-07-20T02:49:02.098735Z","iopub.status.idle":"2022-07-20T02:49:02.134222Z","shell.execute_reply.started":"2022-07-20T02:49:02.098702Z","shell.execute_reply":"2022-07-20T02:49:02.133400Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"imputed_n_cols_valid = pd.DataFrame(imputer.fit_transform(X_valid[numerical_cols] ))\nimputed_n_cols_valid.columns = X_valid[numerical_cols].columns\n\n# One-Hot encode sex column y join\nOH_sex_col_valid = pd.get_dummies(X_valid['Sex'])\n\nimputed_n_cols_valid.index = range(len(imputed_n_cols_valid))\nOH_sex_col_valid.index = range(len(OH_sex_col_valid))\n\nX_valid_refined = imputed_n_cols_valid.join(OH_sex_col_valid)","metadata":{"execution":{"iopub.status.busy":"2022-07-20T02:49:03.048090Z","iopub.execute_input":"2022-07-20T02:49:03.048855Z","iopub.status.idle":"2022-07-20T02:49:03.063176Z","shell.execute_reply.started":"2022-07-20T02:49:03.048811Z","shell.execute_reply":"2022-07-20T02:49:03.062382Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.ensemble import GradientBoostingRegressor\nmodel = GradientBoostingRegressor()\nmodel.fit(X_train_refined, y_train)\npredict = model.predict(X_valid_refined)\nfusion_pred = pd.DataFrame({'y_valid':y_valid ,'predictions':predict}).round()\nfusion_pred\n\nmodel_f = GradientBoostingRegressor()","metadata":{"execution":{"iopub.status.busy":"2022-07-20T02:49:04.383414Z","iopub.execute_input":"2022-07-20T02:49:04.384459Z","iopub.status.idle":"2022-07-20T02:49:04.443842Z","shell.execute_reply.started":"2022-07-20T02:49:04.384410Z","shell.execute_reply":"2022-07-20T02:49:04.443040Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.metrics import accuracy_score\nprint('Precision: %',accuracy_score(fusion_pred['y_valid'] , fusion_pred['predictions'])*100 )","metadata":{"execution":{"iopub.status.busy":"2022-07-20T02:49:05.800303Z","iopub.execute_input":"2022-07-20T02:49:05.800997Z","iopub.status.idle":"2022-07-20T02:49:05.807348Z","shell.execute_reply.started":"2022-07-20T02:49:05.800951Z","shell.execute_reply":"2022-07-20T02:49:05.806088Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Pipeline para agilizar la data y aplicar los mismos procedimientos al test_data","metadata":{}},{"cell_type":"code","source":"from sklearn.pipeline import Pipeline , FeatureUnion\nfrom sklearn.compose import ColumnTransformer\nfrom sklearn.preprocessing import OrdinalEncoder ,OneHotEncoder , LabelBinarizer\n\n## COPIADO Y PEGADO \nclass columnDropperTransformer():\n    def __init__(self,columns):\n        self.columns=columns\n\n    def transform(self,X,y=None):\n        return X.drop(self.columns , axis = 1)\n\n    def fit(self, X, y=None):\n        return self \ncols_to_drop = ['Cabin','PassengerId','Name','Embarked','Ticket']\nnon_c_features = ['Age','Pclass','SibSp','Parch','Fare']\nc_features = ['Sex']\n# Pipeline para imputado y OH\n\nfeature_transformer = ColumnTransformer( transformers = [ ('imputer', imputer , non_c_features ) ]) #NaN filler of int & float\n\nOH_method = OneHotEncoder() # Sex column ordinal encoder\nOH_sex_transformer = Pipeline( [ ('cat_imputer' , imputer),\n                                ('sex_OH' , OH_method)]) # Sex column transformer # Ticket column transformer\n\nOH_transformer = ColumnTransformer([('catecorical_transformer',OH_sex_transformer , c_features)])\n\n# pipeline para transformar la data\ndata_transformer = FeatureUnion( transformer_list= [('num_trans_step',feature_transformer), # Df con \n                                                    ('sex_column_transformer',OH_transformer) ])\n\ndata_refinator = Pipeline([\n                          ('column_dropper',columnDropperTransformer(cols_to_drop)),\n    ('df_transformer', data_transformer )\n    ])\n\n# pipeline para transformado y modelado\npredict_pipeline = Pipeline( [('data_refinator',data_refinator),('model',model_f)])\n\npred_1 = predict_pipeline.fit(X_train, y_train)\npreds = pred_1.predict(X_valid)\npreds_pd =pd.DataFrame({'valid':y_valid,'preds':preds.round(0)})\nprint('Precision: %',accuracy_score(preds_pd['preds'], preds_pd['valid'])*100 )\n","metadata":{"execution":{"iopub.status.busy":"2022-07-20T02:49:06.736641Z","iopub.execute_input":"2022-07-20T02:49:06.737403Z","iopub.status.idle":"2022-07-20T02:49:06.810126Z","shell.execute_reply.started":"2022-07-20T02:49:06.737354Z","shell.execute_reply":"2022-07-20T02:49:06.809009Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train.head()# data_ refinator = pipeline( pd imputer oh\n                            # pd. drop)\n#X_train.Ticket.unique()","metadata":{"execution":{"iopub.status.busy":"2022-07-20T02:49:07.993354Z","iopub.execute_input":"2022-07-20T02:49:07.993989Z","iopub.status.idle":"2022-07-20T02:49:08.011050Z","shell.execute_reply.started":"2022-07-20T02:49:07.993938Z","shell.execute_reply":"2022-07-20T02:49:08.009631Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def df_modif(X):\n    ret_df = pd.DataFrame(predict_pipeline['data_refinator'].fit_transform(X))\n    ret_df.columns = ['Age','Pclass','SibSp','Parch','Fare','Female','Male']\n    return ret_df\npd.DataFrame(df_modif(X_train))","metadata":{"execution":{"iopub.status.busy":"2022-07-20T02:49:09.416776Z","iopub.execute_input":"2022-07-20T02:49:09.417152Z","iopub.status.idle":"2022-07-20T02:49:09.452265Z","shell.execute_reply.started":"2022-07-20T02:49:09.417121Z","shell.execute_reply":"2022-07-20T02:49:09.451069Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pred_1 = predict_pipeline.fit(X_train, y_train)\npreds = pred_1.predict(X_valid)\npreds_pd =pd.DataFrame({'valid':y_valid,'preds':preds.round(0)})\nprint('Precision: %',accuracy_score(preds_pd['preds'], preds_pd['valid'])*100 )","metadata":{"execution":{"iopub.status.busy":"2022-07-20T02:49:10.964384Z","iopub.execute_input":"2022-07-20T02:49:10.964741Z","iopub.status.idle":"2022-07-20T02:49:11.034171Z","shell.execute_reply.started":"2022-07-20T02:49:10.964713Z","shell.execute_reply":"2022-07-20T02:49:11.032921Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# **** Part B: aplicar proceso a train_data para subir una prediccion temporal","metadata":{}},{"cell_type":"code","source":"final_train = predict_pipeline.fit(X,y)\nfinal_preds = final_train.predict(test_data).round(0)\nsurvived = []\nfor i in final_preds:\n    survived.append(int(i))","metadata":{"execution":{"iopub.status.busy":"2022-07-20T02:49:11.998667Z","iopub.execute_input":"2022-07-20T02:49:11.999372Z","iopub.status.idle":"2022-07-20T02:49:12.097016Z","shell.execute_reply.started":"2022-07-20T02:49:11.999335Z","shell.execute_reply":"2022-07-20T02:49:12.095825Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submit1 = pd.DataFrame({'PassengerId':test_data['PassengerId'] , 'Survived':survived})\nsubmit1.to_csv('submission.csv' , index = False)","metadata":{"execution":{"iopub.status.busy":"2022-07-20T02:49:12.946235Z","iopub.execute_input":"2022-07-20T02:49:12.946639Z","iopub.status.idle":"2022-07-20T02:49:12.955509Z","shell.execute_reply.started":"2022-07-20T02:49:12.946596Z","shell.execute_reply":"2022-07-20T02:49:12.954412Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"> # Porcentaje a optimizar: %76.555\n> \"Superó la efectividad del modelo de DecisionTreeRegressor(): **%72.727**","metadata":{}},{"cell_type":"markdown","source":"# **** Part C: utilizar las pipelines para buscar mejores valores de GradientBoostingRegressor() [validandolo de forma cruzada]*no es posible","metadata":{}},{"cell_type":"code","source":"# predict_pipeline: preprocesa la data y la modela\n # añadir redondeo para una cross validation mas precisa\n# crear funcion que tenga como argumentos modificaciones al modelo y devuelva accuracy_score()","metadata":{"execution":{"iopub.status.busy":"2022-07-20T02:49:14.701367Z","iopub.execute_input":"2022-07-20T02:49:14.702121Z","iopub.status.idle":"2022-07-20T02:49:14.707164Z","shell.execute_reply.started":"2022-07-20T02:49:14.702075Z","shell.execute_reply":"2022-07-20T02:49:14.706123Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Funcion para probar formas de correccion de perdida:\ndef get_losses_score():\n    loss_params = ['squared_error', 'absolute_error', 'huber', 'quantile']\n    for params in loss_params:\n        predict_pipeline['model'].loss = params      \n        predict_pipeline.fit(X_train, y_train)\n        prediction_t = predict_pipeline.predict(X_valid)\n        preds = []\n        for i in prediction_t:\n            preds.append(int(round(i)))\n        print(params, ' Score: %', accuracy_score(y_valid,preds)*100 )\n#get_losses_score()","metadata":{"execution":{"iopub.status.busy":"2022-07-20T02:49:15.489167Z","iopub.execute_input":"2022-07-20T02:49:15.489764Z","iopub.status.idle":"2022-07-20T02:49:15.496115Z","shell.execute_reply.started":"2022-07-20T02:49:15.489730Z","shell.execute_reply":"2022-07-20T02:49:15.495083Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def get_n_estimators_score(n_estimators , loss_methods):\n    df = pd.DataFrame(index = n_estimators , columns = loss_methods )\n    for loss_m in loss_methods:\n        i = 0\n        serie = []\n        for n_estimator in n_estimators:\n            predict_pipeline['model'].loss = loss_m\n            predict_pipeline['model'].n_estimators = n_estimator\n            predict_pipeline.fit(X_train,y_train)\n            predictions_t = predict_pipeline.predict(X_valid)\n            preds = []\n            for i in predictions_t:\n                preds.append(int(round(i)))\n            serie.append('% ' + str((accuracy_score(y_valid,preds)*100).round(3)))\n        i += 1\n        df[loss_m] = serie\n    return df.T\n# pantallazo para tener una idea del funcionamiento aproximado del modelo y sus estimados\n#get_n_estimators_score( range( 50 , 501 , 50) , ['squared_error', 'absolute_error','huber','quantile']).head() #absolute error y quantile no cambian","metadata":{"execution":{"iopub.status.busy":"2022-07-20T02:49:16.713000Z","iopub.execute_input":"2022-07-20T02:49:16.714132Z","iopub.status.idle":"2022-07-20T02:49:16.722092Z","shell.execute_reply.started":"2022-07-20T02:49:16.714093Z","shell.execute_reply":"2022-07-20T02:49:16.721221Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"n_estimator = 39\nprint((n_estimator / len(X_train)) * 100) # (12 / 100) * len\nprint((12/100) * len(X_train))","metadata":{"execution":{"iopub.status.busy":"2022-07-20T02:49:17.953955Z","iopub.execute_input":"2022-07-20T02:49:17.954782Z","iopub.status.idle":"2022-07-20T02:49:17.960491Z","shell.execute_reply.started":"2022-07-20T02:49:17.954747Z","shell.execute_reply":"2022-07-20T02:49:17.959503Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#get_n_estimators_score( range(5,100,5) ,['squared_error','absolute_error','huber', 'quantile']) ","metadata":{"execution":{"iopub.status.busy":"2022-07-20T02:49:19.278200Z","iopub.execute_input":"2022-07-20T02:49:19.278927Z","iopub.status.idle":"2022-07-20T02:49:19.282598Z","shell.execute_reply.started":"2022-07-20T02:49:19.278888Z","shell.execute_reply":"2022-07-20T02:49:19.281862Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"> squared error = %14.6 del total: %81.57\n\n> absolute error > %2.6 del total\n\n> huber = %12 del total = %81.57","metadata":{}},{"cell_type":"code","source":"get_n_estimators_score( [39] ,['huber'])","metadata":{"execution":{"iopub.status.busy":"2022-07-20T02:49:20.274232Z","iopub.execute_input":"2022-07-20T02:49:20.275026Z","iopub.status.idle":"2022-07-20T02:49:20.428206Z","shell.execute_reply.started":"2022-07-20T02:49:20.274985Z","shell.execute_reply":"2022-07-20T02:49:20.427395Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# 2nd Submit:\n    > huber con %12 del total de la data n_estimators","metadata":{}},{"cell_type":"markdown","source":"","metadata":{}},{"cell_type":"code","source":"predict_pipeline['model'].loss = 'huber'\npredict_pipeline['model'].n_estimators = 39\nsecond_predict = predict_pipeline.fit(X,y)\nsecond_predict = predict_pipeline.predict(test_data)\npreds = []\nfor i in second_predict:\n    preds.append(int(i.round(0)))\nsubmit2 = pd.DataFrame({'PassengerId':test_data['PassengerId'] , 'Survived':preds})\nsubmit2.to_csv('submission.csv' , index = False)\nsubmit2.head()","metadata":{"execution":{"iopub.status.busy":"2022-07-20T02:49:21.186509Z","iopub.execute_input":"2022-07-20T02:49:21.186902Z","iopub.status.idle":"2022-07-20T02:49:21.352493Z","shell.execute_reply.started":"2022-07-20T02:49:21.186866Z","shell.execute_reply":"2022-07-20T02:49:21.351376Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"submit2 = pd.DataFrame({'PassengerId':test_data['PassengerId'] , 'Survived':preds})\nsubmit2.to_csv('submission.csv' , index = False)","metadata":{"execution":{"iopub.status.busy":"2022-07-20T02:49:21.968078Z","iopub.execute_input":"2022-07-20T02:49:21.968664Z","iopub.status.idle":"2022-07-20T02:49:21.976862Z","shell.execute_reply.started":"2022-07-20T02:49:21.968624Z","shell.execute_reply":"2022-07-20T02:49:21.975529Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# > Nuevo porcentaje a optimizar = %78.229   \n    \n    > metodo utilizado: GradientBoosting con perdida en 'huber' y 39 estimadores","metadata":{}},{"cell_type":"code","source":"from sklearn.ensemble import GradientBoostingClassifier\n\n#pipeline con modelo = GradientBoostingClassiier\nmodel_2 = GradientBoostingClassifier()\nclassif_pipeline = Pipeline( [('data_refinator',data_refinator),('model',model_2)])\nclassif_model = classif_pipeline.fit(X_train, y_train)\nclassif_preds = classif_model.predict(X_valid)\nprint('% ',accuracy_score(y_valid,classif_preds)*100)","metadata":{"execution":{"iopub.status.busy":"2022-07-20T03:40:33.899851Z","iopub.execute_input":"2022-07-20T03:40:33.900757Z","iopub.status.idle":"2022-07-20T03:40:33.991162Z","shell.execute_reply.started":"2022-07-20T03:40:33.900712Z","shell.execute_reply":"2022-07-20T03:40:33.989981Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def de_params_score( pipeline , loss_params , n_estimators_l , learning_rate , random_state = 0):\n    vals_array = {}\n    pipeline['model'].random_state = random_state\n    for vals in loss_params:    \n        pipeline['model'].loss = vals\n        n_array = {}\n        for n in n_estimators_l:\n            pipeline['model'].n_estimators = n\n            l_array = {}\n            for l in learning_rate:\n                pipeline['model'].learning_rate = l\n                pipeline.fit(X_train,y_train)\n                p = pipeline.predict(X_valid)\n                l_array[l] = accuracy_score(y_valid,p)*100\n            n_array[n] = l_array\n        vals_array[vals] = n_array\n    return pd.DataFrame(n_array)","metadata":{"execution":{"iopub.status.busy":"2022-07-20T02:57:21.202201Z","iopub.execute_input":"2022-07-20T02:57:21.202816Z","iopub.status.idle":"2022-07-20T02:57:26.396642Z","shell.execute_reply.started":"2022-07-20T02:57:21.202772Z","shell.execute_reply":"2022-07-20T02:57:26.395414Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"deviance_plt = de_params_score(classif_pipeline ,['deviance'] ,range(20,201,10),[0.01,0.02,0.009])\nexponential_plt = de_params_score(classif_pipeline ,['exponential'] ,range(20,201,10),[0.01,0.02,0.009])","metadata":{"execution":{"iopub.status.busy":"2022-07-20T03:19:40.150193Z","iopub.execute_input":"2022-07-20T03:19:40.151254Z","iopub.status.idle":"2022-07-20T03:19:50.247769Z","shell.execute_reply.started":"2022-07-20T03:19:40.151195Z","shell.execute_reply":"2022-07-20T03:19:50.246670Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# de_params_score(classif_pipeline ,['log_loss'] ,range(20,201,10),[0.01,0.02,0.009])  ValueError: Loss 'log_loss' not supported.\nimport seaborn as sns\nimport matplotlib.pyplot as plt\n\nplt.figure(figsize = (14,7))\nplt.title('exponential')\nsns.heatmap(exponential_plt , annot = True)","metadata":{"execution":{"iopub.status.busy":"2022-07-20T03:19:55.685534Z","iopub.execute_input":"2022-07-20T03:19:55.685891Z","iopub.status.idle":"2022-07-20T03:19:56.162267Z","shell.execute_reply.started":"2022-07-20T03:19:55.685864Z","shell.execute_reply":"2022-07-20T03:19:56.161412Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize = (14,7))\nsns.heatmap(deviance_plt , annot = True)","metadata":{"execution":{"iopub.status.busy":"2022-07-20T03:20:12.558817Z","iopub.execute_input":"2022-07-20T03:20:12.559212Z","iopub.status.idle":"2022-07-20T03:20:13.042003Z","shell.execute_reply.started":"2022-07-20T03:20:12.559176Z","shell.execute_reply":"2022-07-20T03:20:13.040656Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.model_selection import cross_val_predict\ndef de_params_score_cv( pipeline , loss_params , n_estimators_l , learning_rate , random_state = 0):\n    vals_array = {}\n    pipeline['model'].random_state = random_state\n    for vals in loss_params:    \n        pipeline['model'].loss = vals\n        n_array = {}\n        for n in n_estimators_l:\n            pipeline['model'].n_estimators = n\n            l_array = {}\n            for l in learning_rate:\n                pipeline['model'].learning_rate = l\n                l_array[l] = accuracy_score(y , cross_val_predict(pipeline, X,y , cv = 4))*100\n            n_array[n] = l_array\n        vals_array[vals] = n_array\n    return pd.DataFrame(n_array)","metadata":{"execution":{"iopub.status.busy":"2022-07-20T03:13:08.167480Z","iopub.execute_input":"2022-07-20T03:13:08.168595Z","iopub.status.idle":"2022-07-20T03:13:08.177195Z","shell.execute_reply.started":"2022-07-20T03:13:08.168548Z","shell.execute_reply":"2022-07-20T03:13:08.176375Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"dev_cv_df = de_params_score_cv(classif_pipeline ,['deviance'] ,range(20,201,10),[0.01,0.02,0.009] )\nexponential_cv_df = de_params_score_cv(classif_pipeline ,['exponential'] ,range(20,201,10),[0.01,0.02,0.009] )","metadata":{"execution":{"iopub.status.busy":"2022-07-20T03:17:37.942907Z","iopub.execute_input":"2022-07-20T03:17:37.943274Z","iopub.status.idle":"2022-07-20T03:18:33.346830Z","shell.execute_reply.started":"2022-07-20T03:17:37.943246Z","shell.execute_reply":"2022-07-20T03:18:33.345612Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize = (17,6))\nplt.title('CV Deviation accuracy heatmap ')\nsns.heatmap(dev_cv_df, annot = True)","metadata":{"execution":{"iopub.status.busy":"2022-07-20T03:18:33.423694Z","iopub.execute_input":"2022-07-20T03:18:33.424014Z","iopub.status.idle":"2022-07-20T03:18:33.912885Z","shell.execute_reply.started":"2022-07-20T03:18:33.423984Z","shell.execute_reply":"2022-07-20T03:18:33.911837Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize = (17,6))\nplt.title('CV Exponential accuracy heatmap')\nsns.heatmap(exponential_cv_df , annot = True)","metadata":{"execution":{"iopub.status.busy":"2022-07-20T03:18:46.267497Z","iopub.execute_input":"2022-07-20T03:18:46.267913Z","iopub.status.idle":"2022-07-20T03:18:46.717428Z","shell.execute_reply.started":"2022-07-20T03:18:46.267878Z","shell.execute_reply":"2022-07-20T03:18:46.716407Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"deviance_plt = de_params_score_cv(classif_pipeline , ['deviance'] , range(100,300,10) ,[0.01 , 0.015 , 0.02])\nexponential_plt = de_params_score_cv(classif_pipeline , ['exponential'] , range(100,300,10) ,[0.01 , 0.015 , 0.02])","metadata":{"execution":{"iopub.status.busy":"2022-07-20T03:28:09.787302Z","iopub.execute_input":"2022-07-20T03:28:09.788388Z","iopub.status.idle":"2022-07-20T03:29:44.429779Z","shell.execute_reply.started":"2022-07-20T03:28:09.788330Z","shell.execute_reply":"2022-07-20T03:29:44.428712Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize = (16,7))\nplt.title('Deviation accuracy score' )\nsns.heatmap(deviance_plt , annot = deviance_plt)","metadata":{"execution":{"iopub.status.busy":"2022-07-20T03:34:55.352725Z","iopub.execute_input":"2022-07-20T03:34:55.353105Z","iopub.status.idle":"2022-07-20T03:34:55.832966Z","shell.execute_reply.started":"2022-07-20T03:34:55.353073Z","shell.execute_reply":"2022-07-20T03:34:55.831722Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize = (16,7))\nplt.title('Exponential accuracy score' )\nsns.heatmap(exponential_plt , annot = True)","metadata":{"execution":{"iopub.status.busy":"2022-07-20T03:36:43.653785Z","iopub.execute_input":"2022-07-20T03:36:43.654165Z","iopub.status.idle":"2022-07-20T03:36:44.155013Z","shell.execute_reply.started":"2022-07-20T03:36:43.654132Z","shell.execute_reply":"2022-07-20T03:36:44.153839Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"exponential_plt = de_params_score_cv(classif_pipeline , ['exponential'] , range(230,401,10) ,[0.01 , 0.015 , 0.02])","metadata":{"execution":{"iopub.status.busy":"2022-07-20T03:40:47.443090Z","iopub.execute_input":"2022-07-20T03:40:47.443470Z","iopub.status.idle":"2022-07-20T03:41:54.101005Z","shell.execute_reply.started":"2022-07-20T03:40:47.443439Z","shell.execute_reply":"2022-07-20T03:41:54.099773Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize = (16,7))\nplt.title('Exponential accuracy score' )\nsns.heatmap(exponential_plt , annot = True)","metadata":{"execution":{"iopub.status.busy":"2022-07-20T03:42:26.991582Z","iopub.execute_input":"2022-07-20T03:42:26.991962Z","iopub.status.idle":"2022-07-20T03:42:27.451460Z","shell.execute_reply.started":"2022-07-20T03:42:26.991933Z","shell.execute_reply":"2022-07-20T03:42:27.450593Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# > 3er submit","metadata":{}},{"cell_type":"code","source":"model_3 = GradientBoostingClassifier( loss = 'exponential' , learning_rate = 0.02 , n_estimators = 380)\nclassif_pipeline_2 = Pipeline([('data_refinator',data_refinator),('model',model_3)])\nclassif_pipeline_2.fit(X,y)\npreds = classif_pipeline_2.predict(test_data)\nsubmit = pd.DataFrame({'PassengerId':test_data.PassengerId , 'Survived':preds})\nsubmit.to_csv('submission.csv' , index = False)","metadata":{"execution":{"iopub.status.busy":"2022-07-20T03:51:48.677448Z","iopub.execute_input":"2022-07-20T03:51:48.678512Z","iopub.status.idle":"2022-07-20T03:51:49.101782Z","shell.execute_reply.started":"2022-07-20T03:51:48.678469Z","shell.execute_reply":"2022-07-20T03:51:49.100628Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Nuevo porcentaje a superar: %78.468\n\n> el anterior era de %78.229   y se superó utilizando:\n> model_3 = GradientBoostingClassifier( loss = 'exponential' , learning_rate = 0.02 , n_estimators = 380)","metadata":{}},{"cell_type":"markdown","source":"# Lo mas conveniente a partir de ahora es empezar un notebook nuevo y reciclar el codigo\n","metadata":{}},{"cell_type":"code","source":"    ","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}