brunaaaz commited on
Commit
5c6e93c
·
verified ·
1 Parent(s): f0bb012

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +95 -0
app.py CHANGED
@@ -10,6 +10,7 @@ from sklearn.neighbors import KNeighborsClassifier
10
  from sklearn.svm import SVC
11
  from sklearn.metrics import roc_curve, auc, classification_report, confusion_matrix, precision_recall_curve
12
  from imblearn.over_sampling import SMOTE
 
13
  import warnings
14
  warnings.filterwarnings('ignore')
15
 
@@ -20,6 +21,100 @@ st.set_page_config(
20
  layout="wide"
21
  )
22
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
  # Título principal
24
  st.title("🏨 Dashboard de Previsão de Cancelamentos em Reservas Hoteleiras")
25
  st.markdown("""
 
10
  from sklearn.svm import SVC
11
  from sklearn.metrics import roc_curve, auc, classification_report, confusion_matrix, precision_recall_curve
12
  from imblearn.over_sampling import SMOTE
13
+ import os
14
  import warnings
15
  warnings.filterwarnings('ignore')
16
 
 
21
  layout="wide"
22
  )
23
 
24
+ # Título principal
25
+ st.title("🏨 Dashboard de Previsão de Cancelamentos em Reservas Hoteleiras")
26
+ st.markdown("""
27
+ **Objetivo**: Desenvolver e comparar modelos preditivos para identificar reservas com maior probabilidade de cancelamento,
28
+ permitindo ações preventivas como overbooking controlado e ofertas promocionais direcionadas.
29
+ """)
30
+
31
+ # Carregar dados
32
+ @st.cache_data
33
+ def load_data():
34
+ """
35
+ Tenta carregar dataset real do Kaggle, fallback para dados sintéticos
36
+ """
37
+ try:
38
+ # Verifica se o arquivo já existe
39
+ if os.path.exists('hotel_bookings.csv'):
40
+ df = pd.read_csv('hotel_bookings.csv')
41
+ st.success("✅ Dataset real 'hotel_bookings.csv' carregado com sucesso!")
42
+ return df
43
+
44
+ # Tenta baixar via kagglehub
45
+ try:
46
+ import kagglehub
47
+ st.info("📥 Baixando dataset real do Kaggle...")
48
+ path = kagglehub.dataset_download("jessemostipak/hotel-booking-demand")
49
+ csv_path = os.path.join(path, "hotel_bookings.csv")
50
+ df = pd.read_csv(csv_path)
51
+ st.success("✅ Dataset real baixado do Kaggle com sucesso!")
52
+ return df
53
+ except ImportError:
54
+ st.warning("📦 Biblioteca kagglehub não disponível. Tentando download alternativo...")
55
+
56
+ # Fallback: download direto (se disponível)
57
+ try:
58
+ url = "https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2020/2020-02-11/hotels.csv"
59
+ df = pd.read_csv(url)
60
+ st.success("✅ Dataset alternativo carregado!")
61
+ return df
62
+ except:
63
+ st.warning("❌ Não foi possível baixar dados reais.")
64
+
65
+ except Exception as e:
66
+ st.warning(f"⚠️ Erro ao carregar dataset real: {str(e)}")
67
+
68
+ # Fallback para dados sintéticos
69
+ st.info("📊 Gerando dados sintéticos para demonstração...")
70
+ return generate_synthetic_data()
71
+
72
+ def generate_synthetic_data():
73
+ """
74
+ Gera dados sintéticos quando o dataset real não está disponível
75
+ """
76
+ np.random.seed(42)
77
+ n_samples = 5000
78
+
79
+ data = {
80
+ 'hotel': np.random.choice(['Resort Hotel', 'City Hotel'], n_samples),
81
+ 'is_canceled': np.random.choice([0, 1], n_samples, p=[0.7, 0.3]),
82
+ 'lead_time': np.random.randint(0, 400, n_samples),
83
+ 'arrival_date_year': np.random.choice([2015, 2016, 2017], n_samples),
84
+ 'arrival_date_month': np.random.choice(['January', 'February', 'March', 'April', 'May', 'June',
85
+ 'July', 'August', 'September', 'October', 'November', 'December'], n_samples),
86
+ 'stays_in_weekend_nights': np.random.randint(0, 5, n_samples),
87
+ 'stays_in_week_nights': np.random.randint(1, 15, n_samples),
88
+ 'adults': np.random.randint(1, 4, n_samples),
89
+ 'children': np.random.randint(0, 3, n_samples),
90
+ 'babies': np.random.randint(0, 2, n_samples),
91
+ 'meal': np.random.choice(['BB', 'HB', 'FB', 'SC'], n_samples),
92
+ 'country': np.random.choice(['PRT', 'GBR', 'FRA', 'ESP', 'DEU', 'ITA'], n_samples),
93
+ 'market_segment': np.random.choice(['Direct', 'Corporate', 'Online TA', 'Offline TA/TO', 'Complementary'], n_samples),
94
+ 'distribution_channel': np.random.choice(['Direct', 'Corporate', 'TA/TO'], n_samples),
95
+ 'is_repeated_guest': np.random.choice([0, 1], n_samples, p=[0.9, 0.1]),
96
+ 'previous_cancellations': np.random.randint(0, 5, n_samples),
97
+ 'previous_bookings_not_canceled': np.random.randint(0, 10, n_samples),
98
+ 'reserved_room_type': np.random.choice(['A', 'B', 'C', 'D', 'E', 'F', 'G'], n_samples),
99
+ 'assigned_room_type': np.random.choice(['A', 'B', 'C', 'D', 'E', 'F', 'G'], n_samples),
100
+ 'booking_changes': np.random.randint(0, 5, n_samples),
101
+ 'deposit_type': np.random.choice(['No Deposit', 'Non Refund', 'Refundable'], n_samples),
102
+ 'agent': np.random.choice([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], n_samples),
103
+ 'company': np.random.choice([0, 1, 2, 3, 4], n_samples),
104
+ 'days_in_waiting_list': np.random.randint(0, 50, n_samples),
105
+ 'customer_type': np.random.choice(['Transient', 'Contract', 'Transient-Party', 'Group'], n_samples),
106
+ 'adr': np.random.uniform(50, 300, n_samples),
107
+ 'required_car_parking_spaces': np.random.randint(0, 2, n_samples),
108
+ 'total_of_special_requests': np.random.randint(0, 4, n_samples),
109
+ }
110
+
111
+ df = pd.DataFrame(data)
112
+ return df
113
+
114
+ # Carrega os dados
115
+ df = load_data()
116
+
117
+
118
  # Título principal
119
  st.title("🏨 Dashboard de Previsão de Cancelamentos em Reservas Hoteleiras")
120
  st.markdown("""