Spaces:
Sleeping
Sleeping
maj app
Browse files
app.py
CHANGED
|
@@ -39,14 +39,11 @@ st.title("🚙🚕 Bonjour et bienvenue sur le dashboard du projet Getaround !
|
|
| 39 |
|
| 40 |
st.markdown("""
|
| 41 |
|
| 42 |
-
|
| 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.
|
| 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.
|
| 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
|
| 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
|
| 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.
|
| 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
|
| 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 |
-
|
| 606 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 607 |
|
| 608 |
-
|
| 609 |
-
|
| 610 |
-
|
| 611 |
-
|
| 612 |
-
|
|
|
|
| 613 |
|
| 614 |
-
numeric_cols = ["mileage", "engine_power", "rental_price_per_day"] + bool_features
|
| 615 |
|
| 616 |
-
|
|
|
|
|
|
|
| 617 |
|
| 618 |
-
|
| 619 |
-
|
| 620 |
-
|
| 621 |
-
|
| 622 |
-
)
|
| 623 |
|
| 624 |
-
|
| 625 |
-
|
| 626 |
-
|
| 627 |
-
|
| 628 |
|
| 629 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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
|
| 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 |
|