Caso Practico Cyclistic

Proyecto final para la Certificacion Profesional de Análisis de Datos de Google

Hugo Florentin

2024-06-20

Introducción

En este caso práctico, se abordarán preguntas comerciales clave utilizando un enfoque estructurado de análisis de datos que sigue los pasos de: Preguntar, Preparar, Procesar, Analizar, Compartir y Actuar. Este proceso proporciona un marco robusto para explorar, entender y tomar decisiones informadas a partir de los datos disponibles.

La empresa de este estudio es fictica y los datos utilizados estan disponible publicamente a travez de Motivate International Inc.

Contexto

Escenario

Soy un analista de datos junior que trabaja en el equipo de analistas de marketing de Cyclistic, una empresa de bicicletas compartidas en Chicago. El director de marketing cree que el éxito futuro de la empresa depende de maximizar el número de membresías anuales. Por lo tanto, su equipo quiere comprender cómo los ciclistas ocasionales y los miembros anuales usan las bicicletas ciclistas de manera diferente. A partir de estos conocimientos, su equipo diseñará una nueva estrategia de marketing para convertir a los pasajeros ocasionales en miembros anuales. Pero primero, los ejecutivos de Cyclistic deben aprobar sus recomendaciones, por lo que deben estar respaldadas con información convincente y visualizaciones de datos profesionales.

Personajes y equipos

  • Cyclistic: Un programa de bicicletas compartidas que incluye 5,800 bicicletas y 600 estaciones. Cyclistic se destaca por ofrecer también bicicletas reclinadas, triciclos manuales y bicicletas de carga que ofrecen un uso más inclusivo de las bicicletas compartidas para las personas con discapacidad y los ciclistas que no pueden utilizar una bicicleta estándar de dos ruedas. La mayoría de los ciclistas eligen las bicicletas tradicionales, alrededor de un 8% de los ciclistas usan las opciones asistidas. Los usuarios de Cyclistic son más propensos a utilizar la bicicleta para recreación, pero alrededor del 30% la utiliza para ir al trabajo cada día.
  • Lily Moreno: La directora de marketing y tu gerente. Moreno es responsable del desarrollo de campañas e iniciativas para promover el programa de bicicletas compartidas. Las campañas pueden incluir correo electrónico, redes sociales y otros canales.
  • Equipo de análisis computacional de datos de marketing de Cyclistic: Un equipo de analistas de datos que se encargan de recopilar, analizar e informar datos que ayudan a conducir la estrategia de marketing de Cyclistic. Te incorporaste a este equipo hace seis meses y te has dedicado no solo a conocer la misión y las metas de negocios de Cyclistic, sino también a ver cómo puedes ayudar a Cyclistic a lograrlo, desde tu posición de analista de datos júnior.
  • Equipo ejecutivo de Cyclistic: El equipo ejecutivo, sumamente detallista, decidirá si aprueba el programa de marketing recomendado.

Acerca de la empresa

En 2016, Cyclistic lanzó una exitosa oferta de bicicletas compartidas. Desde entonces, el programa creció hasta alcanzar una flota de 5,824 bicicletas georreferenciadas y bloqueadas en una red de 692 estaciones en toda Chicago. Las bicicletas se pueden desbloquear desde una estación y devolverse en cualquier otra estación del sistema en cualquier momento.

Hasta ahora, la estrategia de marketing de Cyclistic se basaba en la construcción de un reconocimiento de marca general y en atraer a amplios segmentos de consumidores. Uno de los enfoques que ayudó a hacer esto posible fue la flexibilidad de sus planes de precios: pases de un solo viaje, pases de un día completo y membresías anuales. A los clientes que compran pases de un solo viaje o pases de un día completo se los llama ciclistas ocasionales. Los clientes que compran membresías anuales se llaman miembros de Cyclistic.

Los analistas financieros de Cyclistic llegaron a la conclusión de que los miembros anuales son mucho más rentables que los ciclistas ocasionales. Aunque la flexibilidad de precios ayuda a Cyclistic a atraer más clientes, Moreno cree que maximizar el número de miembros anuales será clave para el crecimiento futuro. En lugar de crear una campaña de marketing que apunte a todos los clientes nuevos, Moreno cree que hay muchas posibilidades de convertir a los ciclistas ocasionales en miembros. Ella señala que los ciclistas ocasionales ya conocen el programa de Cyclistic y han elegido a Cyclistic para sus necesidades de movilidad.

Moreno estableció una meta clara: Diseñar estrategias de marketing orientadas a convertir a los ciclistas ocasionales en miembros anuales. Sin embargo, para hacer eso, el equipo de analistas de marketing necesita entender mejor cómo difieren los miembros anuales y los ciclistas ocasionales, por qué los ciclistas ocasionales comprarían una membresía y cómo los medios digitales podrían afectar sus tácticas de marketing. Moreno y su equipo están interesados en analizar los datos históricos de viajes en bicicleta de Cyclistic para identificar tendencias.

Pregunta clave

¿En qué se diferencian los socios anuales y los ciclistas ocasionales con respecto al uso de las bicicletas de Cyclistic?

Tarea Empresarial

Identificar las diferencias entre ciclistas ocasionales y miembros anuales a través de datos históricos para desarrollar estrategias de marketing orientadas a convertir a los ciclistas ocasionales en miembros anuales.

Descripcion de fuente de datos

Datos públicos obtenidos de la página web de Motivate International Inc (link). Estos registros históricos detallan los viajes realizados por usuarios de Cyclist, especificando mes, día y hora de inicio y finalización de cada trayecto. El conjunto de datos abarca un periodo de 12 meses, comprendido entre el 1 de mayo de 2023 y el 30 de mayo de 2024.

Aclaracion

Para este analisis se utilizara el lenguaje de programacion R junto a la herramienta RStudio, debido a la necesidad de manipular y analizar grandes cantidades de datos.

Preparacion

En esta etapa prepararemos los datos para el procesamiento, los importaremos y los organizaremos de tal forma a facilitar las siguientes etapas.

Importacion de librerias

# Instalar paquetes
install.packages("dplyr")
install.packages("readr")
install.packages("tidyr")
install.packages("ggplot2")
install.packages("lubridate")

# Cargar librerías
library(dplyr)
library(readr)
library(tidyr)
library(ggplot2)
library(lubridate)
library(hms)

Importacion de datos

Importamos los datos y los asignamos a variables distintas

# Importar datos
data_2023_06 <- read_csv("C:\\Users\\hflorentin\\Documents\\CASO PRACTICO\\DATOS\\202306-divvy-tripdata.csv")
data_2023_07 <- read_csv("C:\\Users\\hflorentin\\Documents\\CASO PRACTICO\\DATOS\\202307-divvy-tripdata.csv")
data_2023_08 <- read_csv("C:\\Users\\hflorentin\\Documents\\CASO PRACTICO\\DATOS\\202308-divvy-tripdata.csv")
data_2023_09 <- read_csv("C:\\Users\\hflorentin\\Documents\\CASO PRACTICO\\DATOS\\202309-divvy-tripdata.csv")
data_2023_10 <- read_csv("C:\\Users\\hflorentin\\Documents\\CASO PRACTICO\\DATOS\\202310-divvy-tripdata.csv")
data_2023_11 <- read_csv("C:\\Users\\hflorentin\\Documents\\CASO PRACTICO\\DATOS\\202311-divvy-tripdata.csv")
data_2023_12 <- read_csv("C:\\Users\\hflorentin\\Documents\\CASO PRACTICO\\DATOS\\202312-divvy-tripdata.csv")
data_2024_01 <- read_csv("C:\\Users\\hflorentin\\Documents\\CASO PRACTICO\\DATOS\\202401-divvy-tripdata.csv")
data_2024_02 <- read_csv("C:\\Users\\hflorentin\\Documents\\CASO PRACTICO\\DATOS\\202402-divvy-tripdata.csv")
data_2024_03 <- read_csv("C:\\Users\\hflorentin\\Documents\\CASO PRACTICO\\DATOS\\202403-divvy-tripdata.csv")
data_2024_04 <- read_csv("C:\\Users\\hflorentin\\Documents\\CASO PRACTICO\\DATOS\\202404-divvy-tripdata.csv")
data_2024_05 <- read_csv("C:\\Users\\hflorentin\\Documents\\CASO PRACTICO\\DATOS\\202405-divvy-tripdata.csv")

Comprobamos que los datos tengan las mismas columnas para proceder a combinarlos

str(data_2023_06)
str(data_2023_07)
str(data_2023_08)
str(data_2023_09)
str(data_2023_10)
str(data_2023_11)
str(data_2023_12)
str(data_2024_01)
str(data_2024_02)
str(data_2024_03)
str(data_2024_04)
str(data_2024_05)

Combinamos los datos para facilitar el analisis

data_cyclist <- rbind(data_2023_06,data_2023_07,data_2023_08,
                      data_2023_09,data_2023_10,data_2023_11,
                      data_2023_12,data_2024_01,data_2024_02,
                      data_2024_03,data_2024_04,data_2024_05)

Procesamiento

En esta etapa manipularemos los datos para facilitar el analisis

Agregar columnas

A continuación, agregamos columnas adicionales al conjunto de datos para facilitar el análisis:

data_cyclist_v2 <- data_cyclist %>% 
  mutate(
    ride_length = as_hms(difftime(ended_at, started_at)),
    day_of_week = weekdays(started_at),
    is_weekday = if_else(day_of_week == "sábado" | day_of_week == "domingo", FALSE, TRUE),
    month = format(as.Date(data_cyclist$started_at), "%y-%b"),
    hour_decimal = round(hour(started_at) + (minute(started_at)/60),2)
  )

Descripcion de las nuevas columnas

  • La columna ride_length calcula el tiempo de cada viaje en minutos.
  • La columna day_of_week especifica el día de la semana en que se realizó el viaje.
  • La columna is_weekday indica si el viaje fue realizado en un día laboral (TRUE) o en fin de semana (FALSE).
  • La columna month indica el mes y año en que comenzó el viaje, en formato abreviado (por ejemplo, “Jun-22” para junio de 2022).
  • La columna hour_decimal indica la hora en decimales en que se inicio los viajes.

Limpieza de datos

En esta sección realizaremos la limpieza de los datos para asegurarnos de que sean consistentes y válidos.

Limpieza de datos incorrectos

data_cyclist_v3 <- data_cyclist_v2 %>%
  filter(ride_length > as_hms("00:01:00"),
         (member_casual == "casual" & ride_length < as_hms("24:00:00")) | 
           member_casual == "member")

Descripcion de limpieza

Para garantizar la calidad de los datos, aplicamos los siguientes filtros:

  • Filtrado por duración de viaje: Al aplicar la condición ride_length > as_hms(“00:01:00”), consideramos únicamente los viajes que duran más de un minuto. Esto se debe a que los viajes de menos de un minuto podrían indicar que el usuario devolvió la bicicleta a la estación y eligió otra de inmediato.

  • Filtrado por tipo de miembro y duración de viaje: Al utilizar la condición member_casual == “casual” & ride_length < as_hms(“24:00:00”) | member_casual == “member”, eliminamos inconsistencias tales como que un usuario casual tenga un viaje de más de 24 horas.

Limpieza de datos vacios

data_cyclist_v4 <- drop_na(data_cyclist_v3)

Descripcion de limpieza

  • Utilizando drop_na(), eliminamos las filas que contienen valores faltantes en cualquier columna, asegurando que los datos estén completos para el análisis posterior.

Analisis

En esta seccion, crearemos visualizaciones y tablas para poder diferenciar el comportamiento de usuarios casuales y miembros.

Cantidad de viajes realizados por tipo de usuario

data_cyclist_v4 %>% 
  group_by(member_casual) %>% 
  summarize(ride_count=n()) %>% 
  ggplot(aes(x=member_casual, y=ride_count, fill=member_casual)) + 
  geom_col() +
  labs(title = "Total de viajes por tipo de usuario", 
       x = "Casuales vs Miembros", y = "Numero de Viajes", 
       caption="Grafico 1",subtitle = "De Junio 2023 a Mayo 2024") +
  scale_y_continuous(breaks = seq(0, 3000000, 250000), labels = scales::comma) +
  scale_x_discrete(labels = c("Casuales", "Miembros")) +
  scale_fill_discrete(name = "Tipo de Usuario", labels = c("Casuales", "Miembros")) +
  geom_text(aes(label = scales::comma(ride_count)), vjust = 2) +
  geom_text(aes(label = paste0(round(ride_count/nrow(data_cyclist_v4)*100,2), "%"), vjust = 3.5))

Cantidad de viajes por dia de la semana

data_cyclist_v4 %>%
  group_by(member_casual, day_of_week) %>% 
  summarize(ride_count=n()) %>% 
  mutate(day_of_week = factor(day_of_week,levels = c("lunes", "martes", "miércoles", "jueves", "viernes", "sábado", "domingo"))) %>%
  ggplot(aes(x = day_of_week, 
             y=ride_count, 
             fill=member_casual)) +
  geom_col(position = "dodge") +
  coord_flip() +
  labs(title = "Cantidad de viajes en la semana por tipo de usuario", 
       subtitle = "De Junio 2023 a Mayo 2024",
       x = "Dia de la semana", 
       y = "Cantidad de viajes", 
       caption="Grafico 2") +
  theme(axis.text.x = element_text(angle = 45)) +
  scale_y_continuous(breaks = c(seq(0,450000,by = 50000)),
                     labels = scales::comma) +
  scale_fill_discrete(name = "Tipo de Usuario", 
                      labels = c("Casual", "Miembro")) +
  scale_x_discrete(labels = c("Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado", "Domingo")) +
  geom_text(aes(label = scales::comma (ride_count)), 
            position = position_dodge(0.9), 
            vjust = 0, size = 3.0)

Duracion promedio de viaje por tipo de usuario

data_cyclist_v4 %>% 
  group_by(member_casual, day_of_week) %>% 
  summarize(average_duration = as.numeric(mean(ride_length)/60)) %>% 
  mutate(day_of_week = factor(day_of_week,levels = c("lunes", "martes", "miércoles", "jueves", "viernes", "sábado", "domingo"))) %>% 
  ggplot(aes(x = day_of_week, 
             y = average_duration, 
             fill = member_casual)) +
  geom_col(position = "dodge") +
  coord_flip() +
  labs(title = "Duracion promedio de viaje por tipo de usuario", 
       subtitle = "De Junio 2023 a Mayo 2024",
       x = "Dia de la semana", 
       y = "Tiempo promedio de viaje en minutos",
       caption="Grafico 3") +
  scale_fill_discrete(name = "Tipo de usuario", 
                      labels = c("Casual", "Miembro")) +
  scale_x_discrete(labels = c("Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado", "Domingo")) +
  geom_text(aes(label = round(average_duration,2)), 
            size = 3,
            vjust = -0.5,
            position = position_dodge(width = 1)) 

Cantidad de viajes en fin de semana por tipo de usuario

weekday_label <- c("Fin de semana", "Dia de la semana")
names(weekday_label) <- c("FALSE", "TRUE")

data_cyclist_v4 %>% 
  group_by(member_casual, is_weekday) %>% 
  summarize(ride_count = n()) %>% 
  ggplot(aes(x = member_casual, 
             y = ride_count, 
             fill = member_casual)) + 
  geom_col(position = "dodge") +
  facet_wrap(~is_weekday, labeller = labeller(is_weekday = weekday_label)) +
  labs(title = "Numero de viajes por tipo de cliente", 
       subtitle = "De Junio 2023 a Mayo 2024",
       x = "Casual vs Miembros",
       y = "Cantidad de viajes",
       caption = "Grafico 4") +
  scale_fill_discrete(name = "Tipo de usuario", labels = c("Casual", "Miembro")) +
  scale_y_continuous(breaks = seq(0, 2000000, 250000), labels = scales::comma) +
  scale_x_discrete(labels = c("Casual", "Miembro")) +
  geom_text(aes(label = scales::comma (ride_count)), vjust = 1.5) +
  geom_text(aes(label = paste0(round(ride_count/nrow(data_cyclist_v4)*100,2), "%"), vjust = 2.7))

Cantidad de viajes en meses por tipo de usuario

data_cyclist_v4 %>% 
  group_by(member_casual, month) %>% 
  summarize(ride_count = n()) %>% 
  mutate(month = factor(month, 
                        levels = c("23-jun.", "23-jul.", "23-ago.", "23-sept.",
                                   "23-oct.", "23-nov.", "23-dic.", "24-ene.",
                                   "24-feb.", "24-mar.", "24-abr.", "24-may."))) %>% 
  ggplot(aes(x=month, y=ride_count, fill = member_casual)) +
  geom_col(position = "dodge", width = 0.6) +
  coord_flip() +
  labs(title = "Numero de viajes por tipo de cliente", 
       subtitle = "De Junio 2023 a Mayo 2024",
       x = "Meses",
       y = "Cantidad de viajes",
       caption = "Grafico 5") +
  scale_y_continuous(breaks = seq(0,450000,50000), labels = scales::comma) +
  scale_x_discrete(labels = c("Junio 2023", "Julio 2023", "Agosto 2023",
                              "Sempiembre 2023", "Octubre 2023", "Noviembre 2023",
                              "Diciembre 2023", "Enero 2024", "Febrero 2024",
                              "Marzo 2024", "Abril 2024", "Mayo 2024")) +
  scale_fill_discrete(name = "Tipo de usuario", labels = c("Casual", "Miembro")) +
  geom_text(aes(label = scales::comma(ride_count)), 
            size = 3, 
            vjust = 0, 
            position = position_dodge(width = 1))

Duracion promedio de viaje en meses por tipo de usuario

data_cyclist_v4 %>% 
  group_by(member_casual, month) %>% 
  summarize(average_duration =as.numeric(mean(ride_length)/60)) %>% 
  mutate(month = factor(month, 
                        levels = c("23-jun.", "23-jul.", "23-ago.", "23-sept.",
                                   "23-oct.", "23-nov.", "23-dic.", "24-ene.",
                                   "24-feb.", "24-mar.", "24-abr.", "24-may."))) %>% 
  ggplot(aes(x=month, y=average_duration, fill = member_casual)) +
  geom_col(position = "dodge", width = 0.6) +
  coord_flip() +
  labs(title = "Tiempo promedio de viaje por tipo de usuario",
       subtitle = "De Junio 2023 a Mayo 2024",
       x = "Meses",
       y = "Tiempo promedio en minutos",
       caption = "Grafico 6") +
  scale_x_discrete(labels = c("Junio 2023", "Julio 2023", "Agosto 2023",
                              "Sempiembre 2023", "Octubre 2023", "Noviembre 2023",
                              "Diciembre 2023", "Enero 2024", "Febrero 2024",
                              "Marzo 2024", "Abril 2024", "Mayo 2024")) +
  scale_y_continuous(breaks = seq(0,30,5)) +
  scale_fill_discrete(name = "Tipo de usuario", labels = c("Casual", "Miembro")) +
  geom_text(aes(label = round(average_duration,2)), 
            size = 3, 
            vjust = 0, 
            position = position_dodge(width = 1))

Cantidad de viajes por tipo de bicicleta

facet_labels <- c(
  docked_bike = "Docket Bike",
  electric_bike = "Electric Bike",
  classic_bike = "Classic Bike")

data_cyclist_v4 %>% 
  group_by(rideable_type, member_casual) %>% 
  summarize(ride_count = n()) %>% 
  ggplot(aes(x=member_casual, 
             y=ride_count, 
             fill=member_casual)) +
  geom_col(position = "dodge") +
  facet_wrap(~rideable_type, labeller = labeller(rideable_type = facet_labels)) +
  labs(title="Cantidad de viajes por tipo de bicicleta", 
       subtitle = "De Junio 2023 a Mayo 2024",
       x = "Tipo de bicicleta",
       y= "Cantidad de viajes",
       caption = "Grafico 7") +
  scale_y_continuous(breaks = seq(0,2000000, by=250000), labels = scales::comma) +
  scale_fill_discrete(name = "Tipo de usuario", labels = c("Casual", "Miembro")) +
  geom_text(aes(label = scales::comma(ride_count)), 
            size = 4, 
            vjust = 0.5) +
  scale_x_discrete(labels = c("Casual", "Miembro"))

Estaciones mas utilizadas en dias de semana

data_cyclist_v4 %>%
  filter(is_weekday == TRUE) %>%
  group_by(start_station_name, member_casual, is_weekday) %>% 
  summarize(ride_count = n(), .groups = "drop") %>% 
  arrange(desc(ride_count)) %>%  
  slice_head(n = 8) %>% 
  ggplot(aes(x=reorder(start_station_name, ride_count), 
             y=ride_count, color = member_casual)) +
  geom_segment(aes(y=0, yend=ride_count)) +
  geom_point(size = 4, alpha = 0.6) +
  coord_flip() +
  theme_light() +
  labs(title = "Numero de viaje por estaciones", 
       subtitle = "De Junio 2023 a Mayo 2024",
       x = "Estaciones", 
       y="Numero de viajes",
       caption = "Grafico 8") +
  scale_color_discrete(name = "Tipo de usuario", labels = c("Casual", "Miembro")) +
  theme(panel.grid.major.y = element_blank()) +
  geom_text(aes(label = scales::comma(ride_count)), size = 3, vjust = -1)

Promedio de la hora del dia en que realizan viajes los usuarios

data_cyclist_v4 %>%
  group_by(member_casual, day_of_week) %>%
  summarize(ride_count = n(), average_hour = mean(hour_decimal)) %>% 
  mutate(day_of_week = factor(day_of_week,levels = c("lunes", "martes", "miércoles","jueves", "viernes", "sábado", "domingo"))) %>% 
  ggplot(aes(x = day_of_week, y = average_hour, fill = member_casual)) +
  geom_col(position = "dodge",width = 0.6) +
  coord_flip() +
  labs(x = "Dias de la semana",
       y = "Horas promedio de viaje",
       title = "Hora promedio en el dia en que se realizan los viajes",
       subtitle = "De Junio 2023 a Mayo 2024",
       caption = "Grafico 9") +
  scale_x_discrete(labels = c("Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado", "Domingo")) +
  scale_y_continuous(breaks = seq(0,15, by = 5), labels = c("00:00","05:00", "10:00", "15:00")) +
  scale_fill_discrete(name = "Tipo de usuario", labels = c("Casual", "Miembro")) +
  geom_text(aes(label = paste0(sprintf("%02d", floor(average_hour)), ":", sprintf("%02d", round((average_hour - floor(average_hour)) * 60)))),
            size = 3, 
            vjust = 0, 
            position = position_dodge(width = 1))

Descrubrimientos

Con los datos de los últimos 12 meses, podemos concluir lo siguiente:

  • Los miembros anuales representan el 64.84% del total de viajes, en comparación con el 35.16% de los miembros casuales (Gráfico 1).

  • Durante los fines de semana, la cantidad de viajes de los miembros casuales aumenta notablemente en un 52% en comparación con el promedio de los días de semana, mientras que la de los miembros anuales disminuye considerablemente en un 23% en relación al promedio de los días de semana. Esto sugiere que los miembros casuales utilizan las bicicletas principalmente para actividades recreativas, incrementando sus viajes los sábados y domingos. Por otro lado, los miembros anuales parecen utilizar las bicicletas para actividades laborales, como transporte, lo cual reduce su uso durante los fines de semana (Gráfico 2).

  • El tiempo promedio de los viajes de los usuarios casuales (23 minutos) es mayor que el de los miembros anuales (12 minutos). Esto puede deberse a que los miembros anuales pueden acoplar su bicicleta en cualquier estación entre viajes sin costo adicional (precio de los pases de viaje), mientras que los usuarios casuales deben pagar por cada viaje o comprar el pase diario (Gráfico 3).

  • En los días de la semana hay más viajes en general que en los fines de semana, considerando el total de viajes de ambos periodos. Sin embargo, si tomamos el promedio por día, hay más viajes en los fines de semana, como sugiere nuestro segundo descubrimiento (Gráfico 4).

  • Ambos tipos de usuarios disminuyen sus viajes de diciembre a marzo, durante el invierno, y aumentan sus viajes de mayo a septiembre, en la primavera y el verano (Gráfico 5).

  • El tiempo promedio de viajes disminuye para ambos grupos de julio a enero (desde el verano hasta el invierno), siendo el cambio más drástico para los usuarios casuales, quienes reducen aproximadamente 10 minutos en promedio, en comparación con una disminución de 2 minutos entre los miembros anuales (Gráfico 6).

  • Ambos grupos prefieren las bicicletas tradicionales, pero solo el grupo de usuarios casuales utiliza la bicicleta docket (Gráfico 7).

  • A pesar de que los miembros anuales realizan más viajes durante la semana, 2 de las 8 estaciones más utilizadas (la segunda y la sexta) son preferidas por miembros casuales: “Streeter Dr & Grand Ave” y “DuSable Lake Shore Dr & Monroe St” (Gráfico 8).

  • El promedio de la hora del día en que se realizan todos los viajes es similar para ambos grupos de usuarios: para los casuales, la hora promedio es a las 14:57, mientras que para los usuarios anuales es a las 14:20.

Recomendaciones

  • Enfocar las campañas de marketing en las estaciones “Streeter Dr & Grand Ave” y “DuSable Lake Shore Dr & Monroe St”, ya que son las más concurridas por usuarios casuales.

  • Identificar a los clientes casuales que utilizan el servicio para ir al trabajo y ofrecerles membresías anuales, ya que tienen una alta probabilidad de convertirse en miembros permanentes.

  • Promocionar las membresías especialmente durante los días de semana y en el horario de 14:00 a 15:00, ya que es más probable que los usuarios las utilicen para desplazarse al trabajo en este periodo, que es el más concurrido por miembros casuales.

  • Realizar promociones especiales de membresías anuales para las personas que utilizan las bicicletas docked, dado que este tipo de bicicletas es preferido por los usuarios casuales.

  • Registrar los viajes de cada cliente con el fin de identificar a aquellos usuarios casuales que más utilizan el servicio, ya que tienen una mayor probabilidad de convertirse en miembros anuales.

  • Ofrecer membresías anuales durante la mitad de la primavera y finales de verano, periodos en los que se observa un incremento significativo en los viajes de los usuarios casuales.