Djohell commited on
Commit
a9fa70e
·
1 Parent(s): e0596ab
Files changed (1) hide show
  1. app.py +72 -108
app.py CHANGED
@@ -39,14 +39,11 @@ st.title("🚙🚕 Bonjour et bienvenue sur le dashboard du projet Getaround !
39
 
40
  st.markdown("""
41
 
42
- A votre disposition 3 rubriques :
43
 
44
- 1. L'analyse des locations : leur type, les retards, les annulations
45
- 2. L'analyse tarifaire
46
- 3. Les prédiction par API
47
  """)
48
 
49
- tab1, tab2, tab3 = st.tabs(["📊⏱ Analyse des locations et retards", "💲Analyse tarifaire", "🔮✨ Prédiction par API"])
50
 
51
  with tab1:
52
 
@@ -56,7 +53,7 @@ with tab1:
56
  price=pd.read_csv('data/get_around_pricing_project.csv')
57
  annulation_by_delay=pd.read_csv('data/annulation_by_delay.csv')
58
 
59
- st.header("1. L'analyse des chiffres sur 21 310 locations")
60
  st.subheader("- A quelle fréquence sont loués les véhicules ?")
61
 
62
  # ANALYSE DES LOCATIONS
@@ -70,7 +67,6 @@ with tab1:
70
  fig = px.histogram(
71
  car_usage_top10,
72
  nbins=15,
73
- title="Distribution des véhicules peu loués (1 à 15 locations)",
74
  labels={'value': 'Nombre de locations', 'count': 'Nombre de véhicules'}
75
  )
76
 
@@ -86,7 +82,7 @@ with tab1:
86
 
87
  st.markdown("---")
88
 
89
- st.header("2. L'Analyse du type de location et des annulations")
90
  st.subheader("- Quel mode de location est privilégié et quelle proportion d'annulation ?")
91
 
92
  # Second graph type de locations et annulations
@@ -119,7 +115,7 @@ with tab1:
119
 
120
  st.plotly_chart(fig, use_container_width=True)
121
 
122
- st.markdown("<h4>👉 Concernant les locations, le checkin mobile représente 80% quand le connect n'est que de 20%." \
123
  " La proportion de courses annulées est de 15% environ pour un total d'environ 3200", unsafe_allow_html=True)
124
 
125
  st.markdown("---")
@@ -157,13 +153,13 @@ with tab1:
157
 
158
  st.plotly_chart(fig, use_container_width=True)
159
 
160
- st.markdown("<h4>👉 Selon le type de checkin, la proportion d'annulation est différente. Les utilisateurs de la version Connect " \
161
  "sont plus susceptibles d'annuler leur location de 4 points"
162
  "", unsafe_allow_html=True)
163
 
164
  st.markdown("---")
165
 
166
- st.header("3. Analyse des retards")
167
 
168
  # Traitement outlier des retards
169
 
@@ -330,8 +326,6 @@ with tab1:
330
  delay_ended_merged.groupby(["delay_group", "checkin_type_ended"])["rental_id_ended"].count().reset_index(name="nb_ended")
331
  )
332
 
333
- # Titre Streamlit
334
- st.title("Analyse des locations maintenues malgré un retard")
335
 
336
  # Graphique Plotly
337
  fig = px.bar(
@@ -340,7 +334,6 @@ with tab1:
340
  y="nb_ended",
341
  color="checkin_type_ended",
342
  barmode="group",
343
- title="Évolution des locations maintenues selon la durée du retard et le type de check-in",
344
  labels={
345
  "delay_group": "Temps de retard",
346
  "nb_ended": "Nombre de locations maintenues",
@@ -350,79 +343,12 @@ with tab1:
350
 
351
  st.plotly_chart(fig, use_container_width=True)
352
 
353
- st.subheader('Les locations maintenue malgré un retard précédent sont en nombre beaucoup plus important que les annulations. ' \
354
  'Sur le seul créneau de 1 à 15 minutes, elles sont au nombre de 203, quand seulement 17 sont annulées sur ce même retard. ' \
355
  'Pour le créneau de 15 à 30 minutes, elles sont 127 de maintenues contre 17 annulées.')
356
 
357
  st.markdown('---')
358
 
359
- st.subheader("Premier constat")
360
- st.markdown("""
361
- Les annulations des véhicules précédemment loués ne sont pas liées à un retard,
362
- puisque dans **100 cas sur 229 (43%)**, il n'y en a pas.
363
-
364
- - Sur ce point, il y a donc d'autres causes à aller chercher potentiellement pour *Get Around*,
365
- mais qui ne dépendent pas du retard de la précédente location.
366
- - Cela restera néanmoins un point important à creuser pour la société afin d'optimiser le CA.
367
- - Il est d'ailleurs presque **2 fois plus prononcé sur le connect que sur le mobile**.
368
- - Le fait de ne pas avoir à rencontrer le propriétaire favorise peut-être le désengagement du locataire.
369
- """)
370
-
371
-
372
- st.subheader("Second constat")
373
- st.markdown("""
374
- Les annulations dans les cas de retard de **1 à 60 minutes** :
375
-
376
- - Sont **croissantes pour le connect**
377
- - Sont **décroissantes pour le mobile**, mais 3 fois plus nombreuses sur le plus petit retard
378
- - Représentent **55 cas sur les 129 restants (42% des annulations)**
379
- """)
380
-
381
-
382
- st.subheader("Dernier constat")
383
- st.markdown("""
384
- Les retards les plus modérés de **1 à 30 minutes** :
385
-
386
- - Entraînent plus d'annulations sur le **mobile** que sur le **connect**
387
- - Représentent **34 cas sur les 129 restants (14% des annulations seulement)**
388
- """)
389
-
390
- st.markdown("---")
391
-
392
- st.subheader("Première conclusion sur les locations")
393
-
394
- st.markdown("### 📊 Analyse des annulations et facteurs en jeu")
395
-
396
- st.markdown("""
397
- ❗ Le **facteur temps** (les retards) n’apparaît **pas comme la cause principale** des annulations.
398
- ➝ Même avec **60 minutes de retard**, on n’explique que **42% des annulations**.""")
399
-
400
- st.markdown("🔍 Cela suggère que **d’autres causes majeures** restent à identifier :")
401
-
402
- st.markdown("""
403
- - politique tarifaire
404
- - offre et concurrence
405
- - notifications de disponibilité des véhicules
406
- - comportements utilisateurs""")
407
-
408
- st.markdown("📱 La **méthode de check-in mobile** est un levier à privilégier : elle concerne **80% des locations**.")
409
-
410
- st.markdown("""⚖️ La mise en place d’un délai supplémentaire de disponibilité du véhicule aurait un impact :
411
- - sur les **propriétaires** (perte potentielle de visibilité, donc moins de trafic et de revenus)
412
- - sur les **locataires** (réduction de l’offre disponible, frustration potentielle)""")
413
-
414
- st.markdown("""💡 Des pistes de solutions à explorer :
415
- - sensibilisation des utilisateurs à la ponctualité
416
- - notifications de rappel 30 minutes avant la fin de la location
417
- - système de bonus/malus
418
- - acompte à la réservation pour responsabiliser le locataire
419
- - programme de fidélité """)
420
-
421
- st.markdown(""" 📉 Enfin, il est nécessaire d’évaluer les **pertes potentielles pour les propriétaires**
422
- si un délai additionnel est mis en place, surtout pour le mode de location majoritaire.
423
- """)
424
-
425
-
426
 
427
  # ANALYSE TARIFAIRE
428
 
@@ -483,7 +409,7 @@ with tab2:
483
 
484
  # Troisième graph pour estimer le prix d'une location
485
 
486
- st.subheader("Quelle base tarifaire pour estimer le prix d'une location ?")
487
 
488
  fig = px.histogram(
489
  price,
@@ -522,7 +448,7 @@ with tab2:
522
 
523
  # Quatrième graph pour visualiser le montant des pertes selon les retards
524
 
525
- st.subheader(("Quelle est le réel impact de perte de CA des retards ?"))
526
 
527
  # Mise en place des intervalles
528
 
@@ -571,7 +497,6 @@ with tab2:
571
  ))
572
 
573
  fig.update_layout(
574
- title="Perte potentielle de CA en fonction du retard",
575
  xaxis_title="Intervalle de retard",
576
  yaxis_title="Perte potentielle (€)",
577
  template='plotly_white',
@@ -600,38 +525,77 @@ with tab2:
600
 
601
  st.markdown("""---""")
602
 
603
- # Affichage de la matrice de corrélation
604
 
605
- st.subheader("Regardons enfin les corrélations potentielles en vue " \
606
- "de la mise en place d'un modèle prédictif")
 
 
 
 
607
 
608
- bool_features = [
609
- "private_parking_available", "has_gps", "has_air_conditioning",
610
- "automatic_car", "has_getaround_connect", "has_speed_regulator", "winter_tires",
611
- ]
612
- price[bool_features] = price[bool_features].astype(int)
 
613
 
614
- numeric_cols = ["mileage", "engine_power", "rental_price_per_day"] + bool_features
615
 
616
- corr_matrix = price[numeric_cols].corr()
 
 
617
 
618
- fig = px.imshow(
619
- corr_matrix,
620
- text_auto=".2f",
621
- color_continuous_scale="RdBu_r",
622
- )
623
 
624
- fig.update_layout(
625
- width=900,
626
- height=700
627
- )
628
 
629
- st.plotly_chart(fig, use_container_width=True)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
630
 
631
- st.subheader("Les principaux facteurs semblent être : la puissance, la boîte de vitesses, " \
632
- "la présence de Get Around connect ainsi qu'un parking privé")
633
 
634
- with tab3:
635
 
636
  st.subheader("Découvrez notre estimation du prix de location de votre véhicule !")
637
 
 
39
 
40
  st.markdown("""
41
 
42
+ Vous trouverez ci-dessous les différentes étapes du projet ainsi qu'un outil de prédiction élaboré en fonction des données
43
 
 
 
 
44
  """)
45
 
46
+ tab1, tab2, tab3, tab4 = st.tabs(["📊⏱ Analyse des locations et retards", "💲Analyse tarifaire", " ✍️ Constat et conclusions", "🔮✨ Prédiction par API"])
47
 
48
  with tab1:
49
 
 
53
  price=pd.read_csv('data/get_around_pricing_project.csv')
54
  annulation_by_delay=pd.read_csv('data/annulation_by_delay.csv')
55
 
56
+ st.header("1. Les chiffres de locations sur 21 310 locations")
57
  st.subheader("- A quelle fréquence sont loués les véhicules ?")
58
 
59
  # ANALYSE DES LOCATIONS
 
67
  fig = px.histogram(
68
  car_usage_top10,
69
  nbins=15,
 
70
  labels={'value': 'Nombre de locations', 'count': 'Nombre de véhicules'}
71
  )
72
 
 
82
 
83
  st.markdown("---")
84
 
85
+ st.header("2. Les types de location et les annulations")
86
  st.subheader("- Quel mode de location est privilégié et quelle proportion d'annulation ?")
87
 
88
  # Second graph type de locations et annulations
 
115
 
116
  st.plotly_chart(fig, use_container_width=True)
117
 
118
+ st.markdown("<h4>👉 Concernant les locations, le check-in mobile représente 80% quand le connect n'est que de 20%." \
119
  " La proportion de courses annulées est de 15% environ pour un total d'environ 3200", unsafe_allow_html=True)
120
 
121
  st.markdown("---")
 
153
 
154
  st.plotly_chart(fig, use_container_width=True)
155
 
156
+ st.markdown("<h4>👉 Selon le type de check-in, la proportion d'annulation est différente. Les utilisateurs de la version Connect " \
157
  "sont plus susceptibles d'annuler leur location de 4 points"
158
  "", unsafe_allow_html=True)
159
 
160
  st.markdown("---")
161
 
162
+ st.header("3. Les retards")
163
 
164
  # Traitement outlier des retards
165
 
 
326
  delay_ended_merged.groupby(["delay_group", "checkin_type_ended"])["rental_id_ended"].count().reset_index(name="nb_ended")
327
  )
328
 
 
 
329
 
330
  # Graphique Plotly
331
  fig = px.bar(
 
334
  y="nb_ended",
335
  color="checkin_type_ended",
336
  barmode="group",
 
337
  labels={
338
  "delay_group": "Temps de retard",
339
  "nb_ended": "Nombre de locations maintenues",
 
343
 
344
  st.plotly_chart(fig, use_container_width=True)
345
 
346
+ st.subheader('Les locations maintenues malgré un retard précédent sont en nombre beaucoup plus important que les annulations. ' \
347
  'Sur le seul créneau de 1 à 15 minutes, elles sont au nombre de 203, quand seulement 17 sont annulées sur ce même retard. ' \
348
  'Pour le créneau de 15 à 30 minutes, elles sont 127 de maintenues contre 17 annulées.')
349
 
350
  st.markdown('---')
351
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
352
 
353
  # ANALYSE TARIFAIRE
354
 
 
409
 
410
  # Troisième graph pour estimer le prix d'une location
411
 
412
+ st.subheader("2. Quelle base tarifaire pour estimer le prix d'une location ?")
413
 
414
  fig = px.histogram(
415
  price,
 
448
 
449
  # Quatrième graph pour visualiser le montant des pertes selon les retards
450
 
451
+ st.subheader(("3. Quelle est le réel impact de perte de CA des retards ?"))
452
 
453
  # Mise en place des intervalles
454
 
 
497
  ))
498
 
499
  fig.update_layout(
 
500
  xaxis_title="Intervalle de retard",
501
  yaxis_title="Perte potentielle (€)",
502
  template='plotly_white',
 
525
 
526
  st.markdown("""---""")
527
 
 
528
 
529
+ with tab3:
530
+
531
+ st.subheader("Premier constat")
532
+ st.markdown("""
533
+ Les annulations des véhicules précédemment loués ne sont pas liées à un retard,
534
+ puisque dans **100 cas sur 229 (43%)**, il n'y en a pas.
535
 
536
+ - Sur ce point, il y a donc d'autres causes à aller chercher potentiellement pour *Get Around*,
537
+ mais qui ne dépendent pas du retard de la précédente location.
538
+ - Cela restera néanmoins un point important à creuser pour la société afin d'optimiser le CA.
539
+ - Il est d'ailleurs presque **2 fois plus prononcé sur le connect que sur le mobile**.
540
+ - Le fait de ne pas avoir à rencontrer le propriétaire favorise peut-être le désengagement du locataire.
541
+ """)
542
 
 
543
 
544
+ st.subheader("Second constat")
545
+ st.markdown("""
546
+ Les annulations dans les cas de retard de **1 à 60 minutes** :
547
 
548
+ - Sont **croissantes pour le connect**
549
+ - Sont **décroissantes pour le mobile**, mais 3 fois plus nombreuses sur le plus petit retard
550
+ - Représentent **55 cas sur les 129 restants (42% des annulations)**
551
+ """)
 
552
 
553
+
554
+ st.subheader("Dernier constat")
555
+ st.markdown("""
556
+ Les retards les plus modérés de **1 à 30 minutes** :
557
 
558
+ - Entraînent plus d'annulations sur le **mobile** que sur le **connect**
559
+ - Représentent **34 cas sur les 129 restants (14% des annulations seulement)**
560
+ """)
561
+
562
+ st.markdown("---")
563
+
564
+ st.subheader("Première conclusion sur les locations")
565
+
566
+ st.markdown("### 📊 Analyse des annulations et facteurs en jeu")
567
+
568
+ st.markdown("""
569
+ ❗ Le **facteur temps** (les retards) n’apparaît **pas comme la cause principale** des annulations.
570
+ ➝ Même avec **60 minutes de retard**, on n’explique que **42% des annulations**.""")
571
+
572
+ st.markdown("🔍 Cela suggère que **d’autres causes majeures** restent à identifier :")
573
+
574
+ st.markdown("""
575
+ - politique tarifaire
576
+ - offre et concurrence
577
+ - notifications de disponibilité des véhicules
578
+ - comportements utilisateurs""")
579
+
580
+ st.markdown("📱 La **méthode de check-in mobile** est un levier à privilégier : elle concerne **80% des locations**.")
581
+
582
+ st.markdown("""⚖️ La mise en place d’un délai supplémentaire de disponibilité du véhicule aurait un impact :
583
+ - sur les **propriétaires** (perte potentielle de visibilité, donc moins de trafic et de revenus)
584
+ - sur les **locataires** (réduction de l’offre disponible, frustration potentielle)""")
585
+
586
+ st.markdown("""💡 Des pistes de solutions à explorer :
587
+ - sensibilisation des utilisateurs à la ponctualité
588
+ - notifications de rappel 30 minutes avant la fin de la location
589
+ - système de bonus/malus
590
+ - acompte à la réservation pour responsabiliser le locataire
591
+ - programme de fidélité """)
592
+
593
+ st.markdown(""" 📉 Enfin, il est nécessaire d’évaluer les **pertes potentielles pour les propriétaires**
594
+ si un délai additionnel est mis en place, surtout pour le mode de location majoritaire.
595
+ """)
596
 
 
 
597
 
598
+ with tab4:
599
 
600
  st.subheader("Découvrez notre estimation du prix de location de votre véhicule !")
601