Indice dei contenuti
- Introduzione
- Alcune tecniche di Forecasting
- Finalità di un algoritmo di forecasting e ottimizzazione delle risorse
- Valutazione delle feautures mediante cross validation
- Ipotesi di variabili importanti su cui trainare il modello
- Implementazione del forecasting
- La realtà potrebbe essere più semplice
- Conclusioni e possibili ricadute economiche
Introduzione
Una delle sfide principali per una società di handling aeroportuale è gestire in modo efficiente il personale per soddisfare la domanda variabile dei servizi di assistenza a terra per i voli. Il forecasting dei turni gioca un ruolo cruciale nel garantire che ci siano abbastanza risorse disponibili per gestire i vettori aerei in arrivo e in partenza. In questo articolo, faremo una panoramica sulle diverse tecniche di forecasting e svilupperemo un algoritmo per predire l’allocazione ottimale delle risorse per le stagioni con maggior fabbisogno di risorse.
Alcune tecniche di Forecasting
Esistono diverse tecniche di forecasting che possono essere utilizzate per predire la domanda futura delle risorse di una società di handling aeroportuale. Alcuni dei metodi più comuni includono:
- Analisi delle serie storiche: questo approccio ha lo scopo di prevedere la domanda futura basandosi sui dati storici dei turni passati. Modelli come ARIMA (AutoRegressive Integrated Moving Average) e SARIMA (Seasonal ARIMA) possono essere utilizzati per analizzare le tendenze, le stagionalità e i pattern nei dati storici e fare previsioni per il futuro.
- Modelli di regressione: i modelli di regressione possono essere utilizzati per prevedere la domanda futura dei turni in base a variabili esplicative come il numero di voli, la stagione, le festività, il meteo e altri fattori che possono influenzare la domanda di servizi di handling aeroportuale.
- Modelli di machine learning: i modelli di machine learning, come le reti neurali artificiali, i modelli basati su alberi decisionali e le random forest, possono essere addestrati su dati storici per predire la domanda futura dei turni in modo più accurato e robusto, tenendo conto di una vasta gamma di fattori predittivi.
Finalità di un algoritmo di forecasting e ottimizzazione delle risorse
Per predire l’allocazione ottimale delle risorse per la prossima stagione, dovremmo sviluppare un algoritmo in grado di sfruttare i principi del forecasting e dell’ottimizzazione.
Provando a semplificare gli step reali per l’implementazione di un algoritmo efficiente, identifichiamo i seguenti macroobiettivi:
- Preparazione del training set: raccolta dei dati storici dei turni orari e dei fabbisogni dei voli per le stagioni passate, suddivisi per dipendenti fissi e stagionali.
- Analisi dei dati e feature engineering: analisi esplorativa dei dati per identificare trend, stagionalità e pattern. Creazione di variabili esplicative utili per il forecasting, come il numero di voli, la stagione, le festività, ecc.
- Training del modello di machine learning: utilizzo di un modello di machine learning (come una foresta casuale o una rete neurale) per addestrare un modello predittivo sulla base dei dati storici.
- Valutazione e validazione del modello: valutazione delle prestazioni del modello utilizzando metriche come l’errore quadratico medio (RMSE) o il coefficiente di determinazione (R²). Validazione del modello utilizzando tecniche come la cross-validation per garantire che sia in grado di generalizzare bene ai dati futuri. Sarà necessario valutare l’importanza delle variabili nel modello per comprendere quali fattori influenzano maggiormente la domanda di risorse nei turni.
- Predizione dell’allocazione delle risorse: utilizzo del modello addestrato per predire l’allocazione ottimale delle risorse per la prossima summer estiva, tenendo conto del numero previsto di voli e dei fabbisogni dei turni.
Utilizzando tecniche di machine learning e analisi dei dati, è possibile sviluppare modelli predittivi accurati e robusti per predire la domanda futura dei turni e ottimizzare l’allocazione delle risorse. Implementando un approccio di forecasting e ottimizzazione, le società di handling aeroportuale possono migliorare l’efficienza operativa e garantire un servizio di alta qualità per i passeggeri e le compagnie aeree.
Training set per il forecasting dei turni
Se proviamo ad ipotizzare un training set semplificato per addestrare il modello, avremo un file csv che ha la seguente forma:
Data | Stagione | Numero di voli | Fabbisogno dipendenti fissi | Fabbisogno dipendenti stagionali |
---|---|---|---|---|
2022-01-01 | Inverno | 50 | 30 | 10 |
2022-01-02 | Inverno | 55 | 32 | 12 |
2022-01-03 | Inverno | 48 | 28 | 11 |
… | … | … | … | … |
2022-06-01 | Primavera | 70 | 35 | 15 |
2022-06-02 | Primavera | 75 | 38 | 16 |
2022-06-03 | Primavera | 80 | 40 | 18 |
… | … | … | … | … |
2022-09-01 | Estate | 100 | 50 | 20 |
2022-09-02 | Estate | 110 | 55 | 22 |
2022-09-03 | Estate | 105 | 52 | 21 |
… | … | … | … | … |
Valutazione delle feautures mediante cross validation
Per valutare l’importanza delle feature utilizzando la cross-validation, possiamo seguire lo stesso approccio dell’esempio precedente, ma utilizzando la cross-validation per valutare l’importanza delle feature in modo più robusto.
import pandas as pd from sklearn.ensemble import RandomForestRegressor from sklearn.model_selection import cross_val_score import matplotlib.pyplot as plt # Carica il training set data = pd.read_csv('training_set.csv') # Dividi il dataset in features e target X = data.drop(['Fabbisogno dipendenti fissi', 'Fabbisogno dipendenti stagionali'], axis=1) y_fissi = data['Fabbisogno dipendenti fissi'] y_stagionali = data['Fabbisogno dipendenti stagionali'] # Crea un modello RandomForestRegressor per valutare l'importanza delle feature per il fabbisogno di dipendenti fissi model_fissi = RandomForestRegressor() scores_fissi = cross_val_score(model_fissi, X, y_fissi, cv=5, scoring='neg_mean_squared_error') model_fissi.fit(X, y_fissi) # Crea un modello RandomForestRegressor per valutare l'importanza delle feature per il fabbisogno di dipendenti stagionali model_stagionali = RandomForestRegressor() scores_stagionali = cross_val_score(model_stagionali, X, y_stagionali, cv=5, scoring='neg_mean_squared_error') model_stagionali.fit(X, y_stagionali) # Ottieni l'importanza delle feature per entrambi i modelli importance_fissi = model_fissi.feature_importances_ importance_stagionali = model_stagionali.feature_importances_ # Visualizza l'importanza delle feature plt.figure(figsize=(10, 6)) plt.barh(X.columns, importance_fissi) plt.xlabel('Importanza delle Feature') plt.ylabel('Feature') plt.title('Feature Importance per il Fabbisogno di Dipendenti Fissi') plt.show() plt.figure(figsize=(10, 6)) plt.barh(X.columns, importance_stagionali) plt.xlabel('Importanza delle Feature') plt.ylabel('Feature') plt.title('Feature Importance per il Fabbisogno di Dipendenti Stagionali') plt.show()
In questo esempio, abbiamo utilizzato la funzione cross_val_score
per eseguire la cross-validation con 5 fold e calcolare il punteggio medio dell’errore quadratico negativo (neg_mean_squared_error) per entrambi i modelli. Successivamente, abbiamo addestrato i modelli sui dati completi e ottenuto l’importanza delle feature da ciascun modello, esattamente come nell’esempio precedente.
La cross-validation è una tecnica utile per valutare le prestazioni del modello e ottenere stime più robuste dell’importanza delle feature.
Ipotesi di variabili importanti su cui trainare il modello
Nel contesto del forecasting dei turni in una società di handling aeroportuale, alcune delle variabili più importanti che potrebbero influenzare la predizione del fabbisogno di dipendenti potrebbero includere:
- Numero di voli: Il numero di voli previsti per un determinato giorno è probabilmente una delle variabili più importanti, poiché influenzerà direttamente il carico di lavoro per il personale di handling aeroportuale.
- Stagione: La stagione dell’anno potrebbe avere un impatto significativo sul fabbisogno di dipendenti, poiché il traffico aereo tende a variare in base alle stagioni (ad esempio, l’estate potrebbe vedere un aumento dei voli per le vacanze estive).
- Giorno della settimana: I modelli di traffico aereo possono variare a seconda del giorno della settimana. Ad esempio, potrebbero essere previsti più voli nei giorni feriali rispetto ai weekend.
- Festività: Le festività possono influenzare il numero di voli e il fabbisogno di personale. Ad esempio, durante le festività di picco, potrebbe essere previsto un aumento del traffico aereo e quindi un aumento del fabbisogno di dipendenti.
- Condizioni meteorologiche: Le condizioni meteorologiche possono influenzare l’operatività degli aeroporti e il numero di voli previsti. Ad esempio, maltempo o condizioni meteorologiche avverse potrebbero causare ritardi o cancellazioni dei voli, influenzando quindi il fabbisogno di personale.
- Eventi speciali: Eventi speciali, come conferenze, fiere commerciali o eventi sportivi, possono portare a un aumento del traffico aereo e quindi influenzare il fabbisogno di personale.
- Caratteristiche specifiche dell’aeroporto: Alcune caratteristiche specifiche dell’aeroporto, come la dimensione dell’aeroporto, il numero di gate e le compagnie aeree operanti, potrebbero influenzare il fabbisogno di personale.
Queste sono solo alcune delle variabili che potrebbero essere importanti per fare previsioni accurate sul fabbisogno di dipendenti in una società di handling aeroportuale. È importante esaminare attentamente i dati disponibili e considerare tutte le variabili rilevanti per ottenere predizioni precise e utili.
Sulla base delle ipotesi appena citate si espone di seguito un training set più dettagliato
| Data | Stagione | GiornoSettimana | NumeroVoli | Festivita | CondizioniMeteo | EventiSpeciali | DimensioneAeroporto | NumeroGate | CompagnieAereeOperanti | FabbisognoDipendentiFissi | FabbisognoDipendentiStagionali | |-------------|------------|-----------------|------------|-----------|-----------------|----------------|---------------------|------------|------------------------|--------------------------|--------------------------------| | 2022-01-01 | Inverno | Sabato | 50 | Capodanno | Nevicata | NULL | Media | 20 | 10 | 30 | 10 | | 2022-01-02 | Inverno | Domenica | 55 | NULL | Soleggiato | NULL | Media | 20 | 10 | 32 | 12 | | 2022-01-03 | Inverno | Lunedì | 48 | NULL | Pioggia | NULL | Media | 20 | 10 | 28 | 11 | | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | | 2022-06-01 | Primavera | Mercoledì | 70 | NULL | Soleggiato | NULL | Grande | 30 | 15 | 35 | 15 | | 2022-06-02 | Primavera | Giovedì | 75 | NULL | Pioggia | NULL | Grande | 30 | 15 | 38 | 16 | | 2022-06-03 | Primavera | Venerdì | 80 | NULL | Soleggiato | NULL | Grande | 30 | 15 | 40 | 18 | | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | | 2022-09-01 | Estate | Giovedì | 100 | NULL | Soleggiato | NULL | Grande | 35 | 20 | 50 | 20 | | 2022-09-02 | Estate | Venerdì | 110 | NULL | Soleggiato | NULL | Grande | 35 | 20 | 55 | 22 | | 2022-09-03 | Estate | Sabato | 105 | NULL | Pioggia | NULL | Grande | 35 | 20 | 52 | 21 | | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
In questo esempio, abbiamo incluso le seguenti variabili:
- Data: La data del turno.
- Stagione: La stagione dell’anno (Inverno, Primavera, Estate, Autunno).
- GiornoSettimana: Il giorno della settimana (Lunedì, Martedì, …, Domenica).
- NumeroVoli: Il numero di voli previsti per quel giorno.
- Festivita: Eventuali festività in quel giorno.
- CondizioniMeteo: Le condizioni meteorologiche previste per quel giorno (Nevicata, Soleggiato, Pioggia, ecc.).
- EventiSpeciali: Eventuali eventi speciali in quel giorno.
- DimensioneAeroporto: La dimensione dell’aeroporto (Piccola, Media, Grande).
- NumeroGate: Il numero di gate dell’aeroporto.
- CompagnieAereeOperanti: Il numero di compagnie aeree operanti nell’aeroporto.
- FabbisognoDipendentiFissi: Il fabbisogno di dipendenti fissi previsto per coprire i turni.
- FabbisognoDipendentiStagionali: Il fabbisogno di dipendenti stagionali previsto per coprire i turni.
Questo training set di esempio include una vasta gamma di variabili che potrebbero influenzare il fabbisogno di dipendenti in una società di handling aeroportuale, consentendo di costruire modelli di previsione più accurati e robusti.
Implementazione del forecasting
Per fare il forecasting del numero di voli e del fabbisogno di dipendenti per i prossimi 3 e 6 mesi, possiamo utilizzare modelli di regressione temporale o di serie storiche. In questo esempio, utilizzeremo un modello ARIMA (AutoRegressive Integrated Moving Average) per fare il forecasting delle due variabili obiettivo. Di seguito un esempio di come farlo in Python utilizzando la libreria statsmodels
:
import pandas as pd import numpy as np from statsmodels.tsa.arima.model import ARIMA import matplotlib.pyplot as plt # Carica il training set data = pd.read_csv('training_set.csv') # Converti la colonna 'Data' in formato datetime data['Data'] = pd.to_datetime(data['Data']) # Crea un dataframe per il forecasting dei prossimi mesi forecast_index_3m = pd.date_range(start=data['Data'].max(), periods=3, freq='MS') forecast_index_6m = pd.date_range(start=data['Data'].max(), periods=6, freq='MS') # Funzione per fare il forecasting utilizzando ARIMA def arima_forecast(data, target_variable, forecast_index): # Seleziona solo la variabile target ts = data[[target_variable]] # Crea il modello ARIMA model = ARIMA(ts, order=(1,1,1)) # Modifica l'ordine di ARIMA a seconda delle tue esigenze # Fitta il modello ARIMA fitted_model = model.fit() # Fai il forecasting per i prossimi mesi forecast = fitted_model.forecast(steps=len(forecast_index)) return forecast # Forecasting del numero di voli per i prossimi 3 e 6 mesi forecast_numero_voli_3m = arima_forecast(data, 'NumeroVoli', forecast_index_3m) forecast_numero_voli_6m = arima_forecast(data, 'NumeroVoli', forecast_index_6m) # Forecasting del fabbisogno di dipendenti fissi per i prossimi 3 e 6 mesi forecast_dipendenti_fissi_3m = arima_forecast(data, 'FabbisognoDipendentiFissi', forecast_index_3m) forecast_dipendenti_fissi_6m = arima_forecast(data, 'FabbisognoDipendentiFissi', forecast_index_6m) # Visualizza i risultati del forecasting plt.figure(figsize=(10, 6)) plt.subplot(2, 1, 1) plt.plot(data['Data'], data['NumeroVoli'], label='Numero Voli (Dati Storici)') plt.plot(forecast_index_3m, forecast_numero_voli_3m, label='Forecast 3 Mesi') plt.plot(forecast_index_6m, forecast_numero_voli_6m, label='Forecast 6 Mesi') plt.xlabel('Data') plt.ylabel('Numero Voli') plt.title('Forecasting Numero Voli') plt.legend() plt.subplot(2, 1, 2) plt.plot(data['Data'], data['FabbisognoDipendentiFissi'], label='Fabbisogno Dipendenti Fissi (Dati Storici)') plt.plot(forecast_index_3m, forecast_dipendenti_fissi_3m, label='Forecast 3 Mesi') plt.plot(forecast_index_6m, forecast_dipendenti_fissi_6m, label='Forecast 6 Mesi') plt.xlabel('Data') plt.ylabel('Fabbisogno Dipendenti Fissi') plt.title('Forecasting Fabbisogno Dipendenti Fissi') plt.legend() plt.tight_layout() plt.show()
In questo codice, definiamo una funzione arima_forecast
che prende in input il training set, la variabile target e l’indice di forecasting e restituisce il forecasting utilizzando il modello ARIMA. Utilizziamo quindi questa funzione per fare il forecasting delle variabili Numero Voli e Fabbisogno Dipendenti Fissi per i prossimi 3 e 6 mesi. Infine, visualizziamo i risultati del forecasting insieme ai dati storici. Assicurati di adattare il codice ai tuoi dati e alle tue esigenze specifiche.
La realtà potrebbe essere più semplice
Se il numero di dipendenti fissi non varia nel tempo, possiamo semplificare il nostro approccio di forecasting ignorando la variabile dei dipendenti fissi durante il processo di forecasting. Possiamo quindi concentrarci esclusivamente sul forecasting del numero di voli per i prossimi 3 e 6 mesi. Ecco come possiamo modificare l’algoritmo precedente:
import pandas as pd from statsmodels.tsa.arima.model import ARIMA import matplotlib.pyplot as plt # Carica il training set data = pd.read_csv('training_set.csv') # Converti la colonna 'Data' in formato datetime data['Data'] = pd.to_datetime(data['Data']) # Crea un dataframe per il forecasting dei prossimi mesi forecast_index_3m = pd.date_range(start=data['Data'].max(), periods=3, freq='MS') forecast_index_6m = pd.date_range(start=data['Data'].max(), periods=6, freq='MS') # Funzione per fare il forecasting utilizzando ARIMA def arima_forecast(data, target_variable, forecast_index): # Seleziona solo la variabile target ts = data[[target_variable]] # Crea il modello ARIMA model = ARIMA(ts, order=(1,1,1)) # Modifica l'ordine di ARIMA a seconda delle tue esigenze # Fitta il modello ARIMA fitted_model = model.fit() # Fai il forecasting per i prossimi mesi forecast = fitted_model.forecast(steps=len(forecast_index)) return forecast # Forecasting del numero di voli per i prossimi 3 e 6 mesi forecast_numero_voli_3m = arima_forecast(data, 'NumeroVoli', forecast_index_3m) forecast_numero_voli_6m = arima_forecast(data, 'NumeroVoli', forecast_index_6m) # Visualizza i risultati del forecasting plt.figure(figsize=(10, 6)) plt.plot(data['Data'], data['NumeroVoli'], label='Numero Voli (Dati Storici)') plt.plot(forecast_index_3m, forecast_numero_voli_3m, label='Forecast 3 Mesi') plt.plot(forecast_index_6m, forecast_numero_voli_6m, label='Forecast 6 Mesi') plt.xlabel('Data') plt.ylabel('Numero Voli') plt.title('Forecasting Numero Voli') plt.legend() plt.tight_layout() plt.show()
In questo codice, abbiamo rimosso la variabile dei dipendenti fissi durante il processo di forecasting e ci siamo concentrati esclusivamente sul forecasting del numero di voli utilizzando il modello ARIMA. Successivamente, visualizziamo i risultati del forecasting insieme ai dati storici. Assicurati di adattare il codice ai tuoi dati e alle tue esigenze specifiche.
Conclusioni e possibili ricadute economiche
Nel nostro articolo abbiamo esplorato l’importanza del forecasting dei turni in una società di handling aeroportuale, concentrandoci sul fabbisogno di dipendenti e sul numero di voli previsti. Abbiamo analizzato un training set composto da una serie di variabili, tra cui la data, la stagione, il numero di voli, le condizioni meteorologiche e gli eventi speciali, per predire il fabbisogno futuro di dipendenti.
Attraverso l’utilizzo di modelli di machine learning, in particolare il modello ARIMA (AutoRegressive Integrated Moving Average), abbiamo dimostrato come sia possibile fare previsioni accurate per il numero di voli nei prossimi mesi. Abbiamo considerato, inoltre, l’osservazione pratica che il numero di dipendenti fissi dovrebbe rimanere costante nel tempo, semplificando così il processo di forecasting.
Il forecasting accurato dei turni ha numerose ricadute economiche positive sulla società di handling aeroportuale. Una previsione precisa del fabbisogno di dipendenti consente alla società di ottimizzare la pianificazione delle risorse umane, evitando sovrapposizioni di personale o carenze durante i picchi di attività. Ciò può portare a una riduzione dei costi operativi e all’ottimizzazione dell’efficienza complessiva dell’azienda.
Il forecasting accurato del numero di voli consente alla società di handling di adeguare dinamicamente le proprie risorse in base alla domanda effettiva. Ad esempio, durante i periodi di traffico intenso, la società può prepararsi adeguatamente aumentando il personale disponibile, mentre durante i periodi di calma può ridurre i costi operativi evitando sovradimensionamenti.
Complessivamente, l’implementazione di modelli di forecasting avanzati porta a una gestione più efficiente delle risorse umane e finanziarie, migliorando la competitività e la sostenibilità economica della società di handling aeroportuale nel lungo termine.
Nel contesto della gestione delle risorse umane, è essenziale ricordare che le risorse di cui parliamo sono persone, non semplici macchine. L’ottimizzazione dell’utilizzo di tali risorse deve tener conto di una serie di variabili e vincoli reali che possono influenzare la pianificazione e la gestione del personale. Ad esempio, la presenza di contratti di lavoro, i possibili incidenti sul lavoro, le malattie e altri fattori imprevisti possono avere un impatto significativo sull’effettiva disponibilità dei dipendenti.
È importante sottolineare che l’obiettivo non è massimizzare semplicemente l’efficienza a tutti i costi, ma piuttosto trovare un equilibrio tra l’ottimizzazione delle risorse e il rispetto dei diritti e del benessere dei dipendenti. La sovraottimizzazione, che potrebbe comportare un sovrautilizzo delle persone, potrebbe portare a una diminuzione della qualità del lavoro, a un aumento dell’affaticamento e dello stress dei dipendenti, e persino a una riduzione della soddisfazione lavorativa e della retention del personale.
Pertanto, nella progettazione e nell’implementazione di strategie di pianificazione del personale, è fondamentale considerare la variabilità e la complessità delle risorse umane coinvolte, adottando approcci flessibili che consentano di adattarsi alle mutevoli circostanze e di gestire in modo efficace eventuali imprevisti. Questo approccio può contribuire a garantire un ambiente di lavoro sano, sostenibile e produttivo, promuovendo nel contempo il benessere e la soddisfazione dei dipendenti.