- Creare un dataset sintetico (200–500 recensioni brevi) con etichette: reparto (Housekeeping, Reception, F&B) e sentiment (pos/neg).
- Addestrare modelli di base per la classificazione ed analisi di sentimento.
- Valutare con train/test split (80/20), accuracy e F1 per classe; matrice di confusione semplice.
- Interfaccia per incollare una recensione e ottenere reparto consigliato e sentiment stimato.
- Dataset Configurabile: Parametro
RANDOMNESSper controllare la difficoltà del problema - Analisi del Paradosso: Scoperta che il sentiment analysis è più robusto al rumore rispetto alla classificazione per reparto
- Visualizzazioni Avanzate: Grafici interattivi per comprendere il comportamento dei modelli
- Esperimenti Automatici: Framework per testare sistematicamente diverse configurazioni
Il risultato è un sistema di studio completo che simula realisticamente le sfide del machine learning in contesti aziendali reali.
La cartella del progetto è organizzata come segue:
SmartHotels/
├── dataset_generator.py # 1. Genera il dataset sintetico con parametro RANDOMNESS.
├── ml_pipeline.py # 2. Addestra, valuta e salva i modelli per il dataset presente `data/hotel_reviews_synthetic.csv`
├── dashboard_app.py # 3. Interfaccia utente interattiva (Streamlit).
├── visualization_analysis.py # 4. Grafici e analisi del parametro RANDOMNESS.
├── run_experiments.py # 5. Esperimenti automatici multi-RANDOMNESS.
├── requirements.txt # Dipendenze Python.
├── README.md
├── data/ # Dataset CSV e risultati delle predizioni.
├── models/ # Modelli ML salvati (.joblib).
├── plots/ # Grafici e visualizzazioni generate.
│ ├── accuracy_comparison.png
│ ├── paradox_visualization.png
│ ├── f1_heatmap.png
│ ├── dashboard_complete.png
│ └── current_performance.png
└── experiments/ # Risultati esperimenti RANDOMNESS.
└── randomness_experiment_*.json
Seguire questi passaggi per configurare ed eseguire il progetto.
python -m venv venv .\venv\Scripts\activatesource venv/bin/activate-
Python 3.8+
-
Pacchetti principali: pandas, scikit-learn, streamlit, matplotlib, seaborn
-
Installa le dipendenze necessarie:
pip install -r requirements.txt
python dataset_generator.pyQuesto script crea un dataset bilanciato con complessità configurabile tramite il parametro RANDOMNESS.
Per cambiare la difficoltà del dataset, modifica la costante nel file dataset_generator.py
- RANDOMNESS = 0.2: Dataset realistico per produzione (~76% accuracy)
- RANDOMNESS = 0.4: Dataset challenging per testing (~57% accuracy)
- RANDOMNESS = 0.9: Dataset estremo per studio robustezza (~31% reparto, ~93% sentiment)
Output atteso: Creazione del file data/hotel_reviews_synthetic.csv che conterrà una lista di recensioni con i relativi reparti e sentiment.
python ml_pipeline.pyQuesto script esegue il preprocessing, addestra i due classificatori, valuta le performance e genera matrici e grafici in base al risultato dell'addestramento.
Output:
- Metriche dettagliate (Accuracy, F1-Macro, Classification Report)
- Matrici di Confusione
- Grafico performance salvato in
plots/current_performance.png - Modelli salvati in
models/(file.joblib) - Risultati test in
data/predictions_YYYYMMDD_HHMMSS.csv - Analisi errori con esempi di classificazioni errate
L'interfaccia utente ti permette di testare i modelli in tempo reale e di eseguire predizioni in batch.
-
Avvia l'applicazione Streamlit:
streamlit run dashboard_app.py
-
Il browser si aprirà automaticamente su
http://localhost:8501.
Genera grafici avanzati per analizzare l'impatto del parametro RANDOMNESS:
python visualization_analysis.pyGrafici generati:
accuracy_comparison.png- Confronto performance tra reparto e sentimentparadox_visualization.png- Visualizzazione del "Paradosso RANDOMNESS"f1_heatmap.png- Heatmap F1-score per repartodashboard_complete.png- Dashboard completo con 4 subplot
Esegue automaticamente esperimenti (genera Dataset e produce output) con diversi valori di RANDOMNESS (0.1 → 0.9):
python run_experiments.pyOutput:
- Test automatico di N configurazioni diverse
- Risultati salvati in
experiments/randomness_experiment_YYYYMMDD_HHMMSS.json - Grafici generati:**
accuracy_comparison.png- Confronto performance tra reparto e sentimentparadox_visualization.png- Visualizzazione del "Paradosso RANDOMNESS"f1_heatmap.png- Heatmap F1-score per repartodashboard_complete.png- Dashboard completo con 4 subplot
- Tabella riepilogativa con performance per ogni configurazione
Scoperta principale: All'aumentare del rumore (RANDOMNESS), il sentiment analysis migliora mentre la classificazione reparto peggiora.
- Sentiment Analysis si basa su emozioni universali → più robusto al rumore
- Classificazione Reparto dipende da domini specifici → fragile con ambiguità
- RANDOMNESS = 0.2 offre il miglior bilanciamento per applicazioni reali
- Scikit-Learn: Framework ML principale
- Streamlit: Dashboard interattiva
- Matplotlib/Seaborn: Visualizzazioni
- Pandas: Manipolazione dati
- TF-IDF: Vettorizzazione testo