Vous êtes sur la page 1sur 5

EHTP - Master Data Engineering (2020-2021)

Projet sous R
Prediction de l'annulation d'une réservation dans un hôtel
à l'aide de la méthode de classication naïve bayèsienne

Consignes générales :
1. Le mini-projet peut être réalisé en monome ou en binôme
2. Deux livrables à rendre :
• Le rapport contenant les réponses aux questions, nommé nom-prenom-rapport.pdf
• Un chier script sous R qui contient le code à générer demandé dans certaines questions.
ce chier doit être nommé nom-prenom-Rcode.R. Le code doit être bien documenté.
3. Ne pas hésiter à utiliser l'aide en ligne de R.
4. La notation prendra en compte la clarté des réponses
5. Date limite pour la remise du TP est : 08 Décembre 2020

1 Problématique

Dans les industries liées au tourisme et aux voyages, la plupart des recherches sur les problèmes
de prévision et de prédiction de la demande en matière de gestion des recettes utilisent des don-
nées provenant de l'industrie aéronautique, dans le format connu sous le nom de Passenger Name
Record (PNR). Il s'agit d'un format développé par l'industrie aéronautique. Cependant, les autres
secteurs du tourisme et des voyages, comme l'hôtellerie, les croisières, les parcs d'attractions, etc.,
ont des exigences et des particularités diérentes qui ne peuvent être pleinement explorées sans les
données spéciques de l'industrie. Par conséquent, deux ensembles de données sur les hôtels avec
des données sur la demande sont partagés pour aider à surmonter cette limitation.

L'article de Antonio et al. (2019) 1 , joint aux données de ce mini-projet, décrit les deux ensembles
de données contenant des données sur la demande des hôtels. L'un des hôtels (H1) est un resort
hotel et l'autre est un city hotel (H2). Les deux hôtels ont un classement ociel de 4 étoiles.
Les deux ensembles de données partagent la même structure, avec 31 variables décrivant les 40
060 observations de H1 et 79 330 observations de H2. Chaque observation représente une réservation
d'hôtel. Les deux ensembles de données comprennent les réservations devant arriver entre le 1er juillet
2015 et le 31 août 2017, y compris les réservations eectivement arrivées et les réservations annulées.
Comme il s'agit de données réelles de l'hôtel, tous les éléments de données concernant l'identication
de l'hôtel ou du client ont été supprimés. En raison de la rareté des données commerciales réelles à
des ns scientiques et éducatives, ces ensembles de données peuvent jouer un rôle important pour
la recherche et l'éducation dans la gestion des revenus, l'apprentissage automatique ou l'exploration
de données, ainsi que dans d'autres domaines.

1 Nuno Antonio, Ana de Almeida, Luis Nunes. Hotel booking demand datasets, Data in Brief , Volume 22,

2019, Pages 41-49, ISSN 2352-3409, https://doi.org/10.1016/j.dib.2018.11.126.

1
Objectif du projet :

Les ensembles de données désormais disponibles ont été collectés dans le but de développer
des modèles de prédiction pour calculer la probabilité qu'une réservation d'hôtel soit
annulée.

2 Description sommaire des données

Explorer la structure des données


2.1 Donner le nombre de variables et le nombre d'observations
2.2 Donner les noms des variables et dire si elles sont quantitatives ou qualitatives
2.3 A votre avis, quelles sont les variables quantitatives qui peuvent être converties en variables
qualitatives
2.4 Donner le nombre et le taux (en pourcentage) de valeurs manquantes par variable. Limiter
votre réponse aux variables dont le nombre est non nul.
2.5 Donner le nom de la variable cible à étudier en relation avec l'objectif de l'étude.
2.6 En utilisant la méthode basée sur l'écart inter-quartiles, donner le nombre et le pourcentage
des valeurs susceptibles d'être des valeurs aberrantes (outliers) pour les variables quantitatives
suivantes :  adults  -  children  -  babies .

3 Feature engineering et Feature selection

3.1 Construire une nouvelle variable  family_size  à partir des trois variables suivantes :  adults ,
 children  et  babies  selon les conditions suivantes :
• Single : la somme  adults+children+babies  est égale à 1
• Small : la somme  adults+children+babies  en comprise entre 2 et 3 inclus
• Big : la somme  adults+children+babies  est strictement supérieur à 3
Supprimer les réservations avec  family_size = 0 car ça n'a pas de sens de réserver pour telle
conguration. Ensuite, décrire cette nouvelle variable et supprimer les trois variables utilisées
pour sa génération.
3.2 Convertir la variable  is_canceled  en type factor avec deux modalités  Yes  et  No 
3.3 Au lieu d'utiliser les trois types de réservations, supprimer les réservations de type  No-Show 
de la variable  reservation_status_date  an de garder que les réservations dont le résultat
nal est connu pour qu'elles soient utilisées pour former le modèle.
3.4 Dans la suite de notre projet et pour plus de simplicité, on va garder que les variables suivantes:

•  hotel 
•  is_canceled 
•  arrival_date_month 
•  family_size 

3.5 Donner les dimensions nales du tableau (nombres de variables et d'observations) retenu après
la phase  Data Preparation 

2
4 Analyse univariée et bivariée

4.1 Faites une analyse appropriée à la base des variables suivantes :

•  hotel 
•  is_canceled 
•  arrival_date_month 
•  family_size 

4.2 A partir des résultats de la question (4.1), formuler une première hypothèse quant à l'annulation
de la réservation selon les diérentes valeurs des variables étudiées.

5 Répartition de la base de données

5.1 Faire une répartition en sous-ensemble de données pour l'apprentissage ( tain_set , 75 %) et


le test ( test_set , 25%) en adoptant respecter la représentativité des mois de l'année. Ceci
dans le but de tenir compte de la saisonnalité des réservations.
Utiliser set.seed(100), subset() et sample() pour générer les mêmes partitions et Donner
la taille des sous-ensembles de données. Voici la démarche à suivre :
D.1 Extraire des subset pour chaque mois à l'aide de la commande subset()
D.1 Fixer l'aléatoire par set.seed(100)
D.1 Extraire 75% pour le train et 25% pour le test à l'aide de la commande :
train_index = sample(1:nrow(data), 0.75 * nrow(data))
D.1 Concatener les sous-ensembles mensuels par rbind() pour former le train_set et le
test_set
5.2 Comment appelle-t-on ce type d'échantillonnage.

Dans la suite, on va travailler sur l'échantillon d'apprentissage seulement.

6 Prédiction de l'annulation de la réservation

6.1 Probabilité conditionnelle en fonction d'une seule variable:

On souhaite calculer la probabilité d'annulation d'une réservation Y conditionnellement à la


valeur d'une autre variable Xk , sachant que la variable cible Y et la variable indépendante Xk
prennent respectivement (Y i )i (Xkj )j comme modalités.

Coder une fonction ProbCond_2Param(), avec les arguments de votre choix, qui permet de
calculer la probabilité suivante :

P(Y = Y i et Xk = Xkj )
i
P(Y = Y |Xk = Xkj ) =
P(Xk = Xkj )

Indication : Vous pouvez utiliser les sorties des fonctions table() et prop.table() sous R.

3
6.1.1 En utilisant la fonction ProbCond_2Param(), calculer les probabilités conditionnelles
suivantes:
• P(Is_canceled == ‘Y es‘ | hotel == ‘ResortHotel‘)
• P(Is_canceled == ‘Y es‘ | hotel == ‘CityHotel‘)
• P(Is_canceled == ‘Y es‘ | f amily _size == ‘Single‘)
• P(Is_canceled == ‘Y es‘ | f amily _size == ‘Small‘)
• P(Is_canceled == ‘Y es‘ | f amily _size == ‘Big‘)
• P(Is_canceled == ‘Y es‘ | arrival_date_month == ‘January‘)
• P(Is_canceled == ‘Y es‘ | arrival_date_month == ‘July‘)

6.2 Probabilité conditionnelle en fonction de plusieurs variables:


Dans le but de construire un modèle de prédiction de l'annulation d'une réservation en fonction
de plusieurs variables, on pourrait imaginer d'estimer les probabilités

P(Y | X1 , X2 , X3 )

en adaptant la formule ci-dessus. Par exemple on pourrait prendre

P(Y = Y i | X1 = X1n1 et X2 = X2n2 et X3 = X3n3 )


P(Y = Y i et X1 = X1n1 et X2 = X2n2 et X3 = X3n3 )
=
P(X1 = X1n1 et X2 = X2n2 et X3 = X3n3 )
Exemple :
• Is_canceled = `Yes`, arrival_date_month = `July`, family_size = `Big`, hotel = `Resort
Hotel`
• le numérateur = nombre total de reservations annulées ('Yes') pendant le mois de 'July'
pour l'hotel 'Resort Hotel' de la part des familles de grande taille ('Big'),
• le dénominateur = nombre total de reservations (annulées ou pas) au même hôtel de cette
même catégorie de familles pour le même mois.
Cette approche pose un problème majeur : en prenant l'intersection de nombreuses strates,
il se peut que la catégorie résultante soit vide, ce qui donnerait un dénominateur nul dans la
formule précédente. On préfère donc appliquer le théorème de Bayes

P(X1 , X2 , X3 | Y = Y 1 )P(Y = Y 1 )
P(Y = Y 1 | X1 , X2 , X3 ) = P i i
(1)
i P(X1 , X2 , X3 | Y = Y )P(Y = Y )

et faire l'hypothèse que les variables explicatives X1 , X2 , X3 sont indépendantes conditionnelle-


ment à l'évènement d'annulation de la réservation Y :

P(X1 , X2 , X3 | Y = Y i ) = P(X1 | Y = Y i )P(X2 | Y = Y i )P(X3 | Y = Y i ) (2)


En injectant l'équation (2) dans la formule (1), on obtient le modèle dit de classication
naïve bayèsienne :

P(X1 | Y = Y 1 )P(X2 | Y = Y 1 )P(X3 | Y = Y 1 )P(Y = Y 1 )


P(Y = Y 1 | X1 , X2 , X3 ) = P i i i i
(3)
i P(X1 | Y = Y )P(X2 | Y = Y )P(X3 | Y = Y )P(Y = Y )

4
6.2.1 Coder une fonction ProbCond_3Param(), avec les arguments de votre choix, qui permet de
calculer la probabilité formulée dans (2)
6.2.2 Coder une fonction ProbCond_3Param_Inv(), avec les arguments de votre choix, qui per-
met de calculer la probabilité formulée dans (3)
6.2.3 En guise d'application, utiliser les fonctions que vous avez codé pour calculer les probabilités
suivantes :
• P(Is_canceled = ‘Y es‘ | hotel = ‘Resort Hotel‘, f amily _size = ‘Big‘, arrival_date_month = ‘July‘)
• P(Is_canceled = ‘Y es‘ | hotel = ‘Resort Hotel‘, f amily _size = ‘Small‘, arrival_date_month =
‘July‘)
• P(Is_canceled = ‘Y es‘ | hotel = ‘Resort Hotel‘, f amily _size = ‘Single‘, arrival_date_month =
‘July‘)
• P(Is_canceled = ‘Y es‘ | hotel = ‘City Hotel‘, f amily _size = ‘Big‘, arrival_date_month = ‘July‘)
• P(Is_canceled = ‘Y es‘ | hotel = ‘City Hotel‘, f amily _size = ‘Big‘, arrival_date_month = ‘January‘)
• P(Is_canceled = ‘Y es‘ | hotel = ‘Resort Hotel‘, f amily _size = ‘Single‘, arrival_date_month =
‘January‘)
• P(Is_canceled = ‘Y es‘ | hotel = ‘City Hotel‘, f amily _size = ‘Single‘, arrival_date_month = ‘January‘)

*** Bon courage ***

Vous aimerez peut-être aussi