#!/usr/bin/env python # coding: utf-8 # In[1]: #Importamos librerías import pandas as pd import seaborn as sns # In[2]: from google.colab import drive import os drive.mount('/content/gdrive') # Establecer ruta de acceso en dr import os print(os.getcwd()) os.chdir("/content/gdrive/My Drive") # In[3]: #Cargamos los datos y los preparamos! data = pd.read_csv("hotels.csv", sep = ",") # In[4]: data.head() # In[5]: #Hacemos una copia del dataset y me quedo con algunas variables data2 = data[['total_of_special_requests','deposit_type','customer_type', 'stays_in_weekend_nights', 'stays_in_week_nights', 'required_car_parking_spaces','arrival_date_month', 'arrival_date_day_of_month','hotel']].copy() # In[6]: #Veamos que tenemos! data2.head() # In[7]: data2.shape # Creamos la variable target: # # In[8]: data2['total_stay'] = data2['stays_in_week_nights'] + data2['stays_in_weekend_nights'] # Eliminamos las var q usamos... data3 = data2.drop(['stays_in_week_nights','stays_in_weekend_nights'], axis=1) # In[9]: data3.head() # In[10]: grafico_df=data3[['total_stay','arrival_date_month']].groupby('arrival_date_month').count() grafico_df import seaborn as sns import matplotlib.pyplot as plt grafico_df.plot(kind='bar') plt.title('Distribucion de noches por mes') plt.xlabel('Mes') plt.ylabel('Frecuencia') # In[11]: grafico_df=data3[['total_stay','customer_type']].groupby('customer_type').count() grafico_df import seaborn as sns import matplotlib.pyplot as plt grafico_df.plot(kind='bar') plt.title('Distribucion de noches por mes') plt.xlabel('Tipo de cliente') plt.ylabel('Frecuencia') # Histogramas de las variables: # In[12]: import matplotlib.pyplot as plt fig = plt.figure(figsize = (20,12)) #Definimos el tamaño del grafico data3.hist(ax = fig.gca()) #Realizamos el histograma de las variables # In[13]: data3.deposit_type.unique() # In[14]: data3.customer_type.unique() # In[15]: #Hacemos dummies las variables! data4=pd.get_dummies(data3, drop_first=False) # In[16]: data4.head() # In[17]: #Separamos los datos de entrada de los de salida X_data=data4.drop('total_stay', axis=1) y_data=data4['total_stay'] # In[18]: #Separamos los datos en train y test from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X_data, y_data, test_size=0.3) # In[19]: #Hypertuning utilizando grid search from sklearn.model_selection import GridSearchCV from sklearn.ensemble import RandomForestRegressor random_forest = RandomForestRegressor() #Instanciamos el modelo # In[20]: #Definimos los parámetros de búsqueda params = { 'n_estimators' : [50,100,200], 'max_features': [2,4,5], 'criterion': ['squared_error', 'mse', 'absolute_error', 'poisson'], 'max_depth':[4,5] } grid_random_forest = GridSearchCV(estimator = random_forest, param_grid = params, scoring = 'neg_mean_absolute_error', # cv = 5, verbose = 1, #Muestra el resultado en pantalla n_jobs = -1) # corrida en paralelo # In[ ]: get_ipython().run_cell_magic('time', '', '#Entrenamos el modelo (Se demora bastante!!!!!!)\ngrid_random_forest.fit(X_train, y_train)\n') # In[ ]: #Obtenemos el mejor modelo! grid_random_forest.best_estimator_ # In[ ]: grid_random_forest.best_params_ # In[ ]: random_forest_nuevo = RandomForestRegressor(criterion='mse',max_depth=5, max_features= 5, n_estimators=100) #Instanciamos el modelo # In[ ]: random_forest_nuevo.fit(X_train,y_train) # In[ ]: X_train.shape # In[ ]: X_test=X_test.drop(columns=['Prediccion']) X_test # In[ ]: #Predicción de casos nuevos random_forest_nuevo.predict(X_train) random_forest_nuevo.predict(X_test) # In[ ]: import numpy as np X_test1= X_test.copy() X_test1['Prediccion']=np.round(random_forest_nuevo.predict(X_test),0) X_test1 # Sólo nos restaría analizar las métricas de error, pero ese tema lo veremos en la sección correspondiente 😉 # # Created in deepnote.com # Created in Deepnote