-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathReporte.Rmd
361 lines (252 loc) · 15.9 KB
/
Reporte.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
---
output:
pdf_document:
extra_dependencies:
enumitem: ["shortlabels"]
booktabs: null
array: null
arydshln: null
caption: null
includes:
before_body: title_page.tex
---
\renewcommand{\tablename}{Tabla}
\renewcommand{\figurename}{Figura}
\captionsetup[figure]{skip=0pt}
```{r librerias, include=FALSE, message=FALSE}
library(tidyverse)
library(rio)
library(patchwork)
```
# 1 Introducción
El problema a resolver en el siguiente informe es poder dilucidar y entender los problemas que presenta la Tarjeta de Compra Más. En una reunión entre las diferentes partes de la empresa, se presentaron cuatro hipótesis sobre posibles problemas en la TCM.
A continuación se presenta una pequeña vista a los datos entregados, para luego explicar la metodología a utilizar para estudiar las hipótesis planteadas. Luego, en la sección \textbf{Hipótesis a Cubrir}, se presentan y se estudian estás hipótesis, siguiendo la metodología descrita.
Finalmente, en la sección \textbf{Conclusión}, se entrega un resumen de los resultados obtenidos en la sección anterior, y al mismo tiempo se proponen diferentes medidas para mejorar el uso de la TCM.
## 1.1 Datos entregados
```{r carga de datos, include=FALSE, message=FALSE}
datos_tcm <- rio::import('TCM2022.xlsx')
datos_tcm_tibble <- tibble::as_tibble(datos_tcm)
n_obs <- nrow(datos_tcm)
```
Para los estudios solicitados, el Departamento de Informática nos hizo llegar una pequeña muestra aleatoria de `r n_obs` clientes, la cual contiene información histórica y los atributos necesarios para nuestro trabajo. Entre estas variables se encuentra el ID del cliente asignado por la empresa, la edad, el sexo y la región del cliente, así como métricas de uso de la TCM, en particular si se utilizó la tarjeta el primer trimestre y el monto de compras durante este mismo periodo.
## 1.2 Metodología
La metología a utilizar consiste en:
\begin{enumerate}
\item Presentar y formalizar cada una de las hipótesis.
\item Realizar un análisis gráfico de los datos pertinentes al problema.
\item Aplicar un test estadístico adecuado.
\end{enumerate}
# 2 Hipótesis a Cubrir
## 2.1 Bajo uso
La primera hipótesis planteada es que el porcentaje de uso de la TCM, en el primer trimestre del 2022, ha disminuido con respecto al uso en el 2021, que fue de un *62%*.
```{r H1 - uso tarjeta, echo=FALSE}
n <- nrow(datos_tcm)
uso_tarjeta_2021 <- 0.62
uso_tarjeta_2022 <- mean(datos_tcm$Uso2022)
porcentaje_2022 <- paste0(as.character(100*round(uso_tarjeta_2022, 2)), '%')
```
A partir de los datos vemos que el porcentaje de uso en el año 2022 corresponde a `r porcentaje_2022`. Podemos ver una comparación entre ambas cantidades en la Figura 1.
```{r H1 - comparacion prop, echo=FALSE, out.width="61%", fig.height=3, fig.align='center', fig.cap="Porcentaje uso tarjeta años 2021 y 2022"}
ggplot(tibble(uso = c(uso_tarjeta_2021, uso_tarjeta_2022),
año = c('2021', '2022'))) +
geom_col(mapping = aes(x = año, y = uso), fill = c('salmon', 'turquoise')) +
geom_text(mapping = aes(x = año, y = uso, label = scales::percent(uso)),
position = position_dodge(width = .9),
vjust = -0.5, size = 7) +
labs(title = 'Uso de tarjeta TCM años 2021 y 2022') +
scale_y_continuous(labels = scales::percent, limits = c(0, 1))
```
Se puede observar en el gráfico que efectivamente el uso de la tarjeta parece ser menor para el primer trimestre del 2022, en comparación con el mismo periodo del año 2021.
Ahora, proponemos un test binomial exacto para confirmar si los hallazgos son significativos. Este test es adecuado pues permite establecer si una muestra de datos binarios proviene de una población con proporción menor a un valor dado.
```{r H1 - test binomial exacto, include=FALSE}
test_binom = binom.test(x = sum(datos_tcm$Uso2022),
n = n,
p = uso_tarjeta_2021,
alternative = 'less')
valor_p_h1 = test_binom$p.value
```
Específicamente, tenemos que nuestra hipótesis nula es que el porcentaje de uso *no* ha disminuido. El test nos entrega un valor-p de `r round(valor_p_h1, 3)`, así, considerando un nivel de significancia de $\alpha = 0.05$, no tenemos evidencia suficiente para rechazar esta hipótesis. Presentamos algunos comentarios adicionales en la conclusión del informe.
## 2.2 Montos
En esta sección se estudia la hipótesis de que el monto promedio utilizado en el mes de Marzo de 2022 es mayor al monto promedio utilizado en el mismo mes del año 2021.
```{r H2 - clientes que compran, echo=FALSE}
datos_tcm_compras <- datos_tcm_tibble %>%
dplyr::filter(UsoMarzo == 1)
```
```{r H2 - promedio compras 2022, echo=FALSE}
monto_promedio_marzo_2021 <- 400
monto_promedio_marzo_2022 <- datos_tcm_compras %>%
dplyr::summarise(media = mean(MontoMarzo)) %>%
as.numeric()
```
Para el cálculo del monto promedio utilizado en marzo de 2022, solo se considera el monto tranzado por clientes que sí registran uso en su tarjeta para este mes. Se obtiene así que el monto promedio en marzo del 2022 es `r round(monto_promedio_marzo_2022, 2)`. Ahora se verificará que la diferencia encontrada es estadísticamente significativa.
Una alternativa es utilizar un _test-t_, sin embargo para que los resultados sean válidos se debe asegurar que los datos provienen de una distribución Normal.
En la figura 2 se estudia el supuesto de normalidad de manera gráfica mediante estimación de densidad y gráfico QQ-Norm.
```{r H2 - supuesto normalidad - densidad, echo=FALSE}
# Aca podríamos ver cómo combinar dos plots, creo que el paquete patchwork es bueno
dens1 = ggplot(datos_tcm_compras) +
geom_density(mapping = aes(x = MontoMarzo), fill = 'salmon') +
labs(x = 'Monto', y = 'densidad',
title = 'Densidad estimada',
subtitle = "Montos compras, marzo 2022")
```
```{r H2 - supuesto normalidad - qqplot, echo=FALSE, fig.cap="Test gráficos para normalidad media montos compra", fig.height=3}
qq1 = ggplot(datos_tcm_compras) +
geom_qq_line(aes(sample = MontoMarzo), color = "salmon", lwd = 2) +
geom_qq(aes(sample = MontoMarzo)) +
labs(title = 'QQ-Norm montos compra', subtitle = 'Marzo 2022',
x = 'Cuantiles teóricos', y = 'Cuantiles muestrales')
# grafico final
dens1 + qq1
```
Ahora se complementa el análisis gráfico con un test específico para normalidad: Shapiro-Wilk
```{r H2 - test ShapiroWilk, include=FALSE}
test_norm = shapiro.test(datos_tcm_compras$MontoMarzo)
```
Para el test de Shapiro-Wilk se tiene un Valor-P de `r test_norm$p.value %>% round(digits = 4)`. En consecuencia, no podemos asumir normalidad, por lo que ocupamos un test no paramétrico (Wilcoxon) para establecer la significancia en la diferencia entre el promedio de los montos tranzados en Marzo de 2022 y 2021.
```{r H2 - test de Wilcoxon, include = FALSE}
test_diff = wilcox.test(x = datos_tcm_compras$MontoMarzo,
mu = monto_promedio_marzo_2021,
alternative = 'greater')
```
Para el test de Wilcoxon se tiene un Valor-P de `r test_diff$p.value %>% round(digits = 4)`. En consecuencia, aceptamos la hipótesis que el promedio de compras en marzo de 2022 fue mayor que en marzo de 2021.
```{r H2 - test t, include = FALSE}
test_diff_t = t.test(x = datos_tcm_compras$MontoMarzo,
mu = monto_promedio_marzo_2021,
alternative = 'greater')
```
## 2.3 Antiguos
En esta sección se estudia la hipótesis de que, entre quienes utilizaron su tarjeta, los montos medios tranzados por clientes antiguos es cien mil pesos menor que el de clientes nuevos. Para eso, segmentamos en clientes antiguos y nuevos. Tampoco consideramos clientes que no registran uso de su tarjeta en el periodo examinado.
```{r H3 - separacion clientes, echo=FALSE}
clientes_antiguos <- datos_tcm_tibble %>%
dplyr::filter(Cliente < 250000) %>%
dplyr::filter(Uso2022 == 1)
clientes_nuevos <- datos_tcm_tibble %>%
dplyr::filter(Cliente >= 250000) %>%
dplyr::filter(Uso2022 == 1)
n_antiguos <- nrow(clientes_antiguos)
n_nuevos <- nrow(clientes_nuevos)
media_antiguos <- mean(clientes_antiguos$MontoAcum)
media_nuevos <- mean(clientes_nuevos$MontoAcum)
```
Tenemos que hay `r n_antiguos` clientes antiguos y `r n_nuevos` clientes nuevos presentes en la base de datos entregada. Además, los montos medios de cada grupo son `r media_antiguos %>% round(digits = 4)` y `r media_nuevos %>% round(digits = 4)`, respectivamente.
Queremos ocupar un test t para dos muestras. En la figura 3 estudiamos si los datos siguen una distribución Normal.
```{r H3 - supuesto normalidad, echo = FALSE, fig.cap="Test gráficos de normalidad media montos compra por segmento"}
# Acá usemos patchwork para juntar los gráficos
## Densidad antiguos
dens2_antiguos = ggplot(clientes_antiguos) +
geom_density(mapping = aes(x = MontoAcum), fill = 'salmon') +
labs(x = 'Monto', y = 'densidad',
title = 'Densidad montos compra',
subtitle = 'Marzo 2022, clientes antiguos')
## QQ-plot antiguos
qq2_antiguos = ggplot(clientes_antiguos) +
geom_qq_line(aes(sample = MontoAcum), color = "salmon", lwd = 2) +
geom_qq(aes(sample = MontoAcum), size = 0.5) +
labs(title = 'QQ-Plot montos compra', subtitle = 'Marzo 2022, clientes antiguos',
x = 'Cuantiles teóricos', y = 'Cuantiles muestrales')
## Densidad nuevos
dens2_nvos = ggplot(clientes_nuevos) +
geom_density(mapping = aes(x = MontoAcum), fill = 'salmon') +
labs(x = 'Monto', y = 'densidad',
title = 'Densidad montos compra',
subtitle = 'Marzo 2022, clientes nuevos')
## QQ-plot antiguos
qq2_nvos = ggplot(clientes_nuevos) +
geom_qq_line(aes(sample = MontoAcum), color = "salmon", lwd = 2) +
geom_qq(aes(sample = MontoAcum), size = 0.5) +
labs(title = 'QQ-Plot montos compra', subtitle = 'Marzo 2022, clientes nuevos',
x = 'Cuantiles teóricos', y = 'Cuantiles muestrales')
(dens2_antiguos + qq2_antiguos) / (dens2_nvos + qq2_nvos)
```
```{r H3 - supuesto normalidad formal, include=FALSE}
shp_antiguos = shapiro.test(clientes_antiguos$MontoAcum)$p.value %>% round(digits = 4)
shp_nvos = shapiro.test(clientes_nuevos$MontoAcum)$p.value %>% round(digits = 4)
ks_antiguos = ks.test(scale(clientes_nuevos$MontoAcum), y = 'pnorm')$p.value %>% round(digits = 4)
```
Como en la seccion _2.2_, se confirman los hallazgos con el test de Shapiro-Wilk. Especificamente, se obtuvieron valores-p iguales a `r shp_antiguos` y `r shp_nvos` para clientes antiguos y nuevos respectivamente. En los clientes nuevos además utilizamos el test de Kolmogorov-Smirnov al obtener un valor-p = `r ks_antiguos`.
```{r H3 - Test varianzas, include=FALSE}
test_var = var.test(x = clientes_antiguos$MontoAcum,
y = clientes_nuevos$MontoAcum,
alternative = 'two.sided')
```
Como no hay evidencia para rechazar normalidad, se aplica un _test-t_ para estudiar la diferencia de medias, asumiendo varianzas desconocidas. Tenemos que ver si usamos varianzas iguales y desconocidas o diferentes y desconocidas mediante la función de R `var.test`. Se rechaza dicho test con un valor-P = `r test_var$p.value %>% round(digits = 4)`, por lo que trabajamos varianzas diferentes.
```{r H3 - Test t final, include=FALSE}
test_t_final = t.test(x = clientes_nuevos$MontoAcum,
y = clientes_antiguos$MontoAcum,
mu = 100,
alternative = 'greater',
var.equal = FALSE)
```
Para el _test-t_ se tiene un valor-P = `r test_t_final$p.value %>% round(digits = 4)`. Luego, no es posible rechazar la hipótesis de que el promedio de gasto de clientes antiguos es cien mil pesos menor que el de clientes nuevos.
## 2.4 Atributos
En esta sección se estudia la hipótesis de que hay una comportamiento diferente en frecuencia de uso de la tarjeta y los montos transados, en función de la edad (como categoría), el sexo o región. Para esto, primero graficamos para cada categoría la distribución de los montos acumulados (figura 4). Por último se realiza un análisis _anova_ para cada categoría, utilizando como variable respuesta el monto acumulado y el uso de la tarjeta.
```{r H4 - agrupacion edades, echo=FALSE}
datos_tcm_tibble_edadcat <- datos_tcm_tibble %>%
dplyr::mutate(edad_cat = case_when(
Edad <= 35 ~ 0,
between(Edad, 36, 54) ~ 1,
Edad >= 55 ~ 2
))
```
```{r echo=FALSE, include=FALSE}
### Frecuencia de uso
anova1 = aov(datos_tcm_tibble_edadcat$Uso2022~datos_tcm_tibble_edadcat$edad_cat)
summary(anova1)
anova2 = aov(datos_tcm_tibble_edadcat$Uso2022~datos_tcm_tibble_edadcat$`Sex(1=Fem)`)
summary(anova2)
anova3 = aov(datos_tcm_tibble_edadcat$Uso2022~datos_tcm_tibble_edadcat$`Reg (1=RM)`)
summary(anova3)
mi.palette = c("#FE1F14", "#B1150E", "#FE7872", "#A52C94", "#C06BB4", "#EB9C3A", "#F3C388")
# gráfico malo
bx_1 = ggplot(data = datos_tcm_tibble_edadcat) + aes( y = MontoAcum, x = as.factor(edad_cat), color = as.factor(edad_cat)) +
geom_boxplot() + scale_color_manual(values = mi.palette) +
xlab("Grupo de edad") + ylab("Monto utilizado TCM 2022") +
labs(title = "Distribucion monto acumulado",
subtitle = "para cada grupo etario.") + theme(legend.title = element_blank(), legend.position = "bottom") +
scale_x_discrete(labels = NULL)
```
```{r echo=FALSE, include=FALSE}
### Monto utilizado en 2022
# filtrar por solo clientes que utilizan
datos_tcm_tibble_edadcat2 = datos_tcm_tibble_edadcat %>% filter(Uso2022==1)
anova4 = aov(datos_tcm_tibble_edadcat2$MontoAcum~datos_tcm_tibble_edadcat2$edad_cat)
summary(anova4)
anova5 = aov(datos_tcm_tibble_edadcat2$MontoAcum~datos_tcm_tibble_edadcat2$`Sex(1=Fem)`)
summary(anova5)
anova6 = aov(datos_tcm_tibble_edadcat2$MontoAcum~datos_tcm_tibble_edadcat2$`Reg (1=RM)`)
summary(anova6)
bx_4 = ggplot(data = datos_tcm_tibble_edadcat) + aes( y = MontoAcum, x = as.factor(edad_cat), color = as.factor(edad_cat)) +
geom_boxplot() + scale_color_manual(values = mi.palette) +
xlab("Grupo de edad") + ylab("Monto utilizado TCM 2022") +
theme(legend.title = element_blank(), legend.position = "bottom") +
scale_x_discrete(labels = NULL)
bx_5 = ggplot(data = datos_tcm_tibble_edadcat) + aes( y = MontoAcum,
x = {datos_tcm_tibble_edadcat$`Sex(1=Fem)` %>% as.factor},
color = {datos_tcm_tibble_edadcat$`Sex(1=Fem)` %>% as.factor}) +
geom_boxplot() + scale_color_manual(values = mi.palette) +
xlab("Sexo") + ylab("Monto utilizado TCM 2022") +
theme(legend.title = element_blank(), legend.position = "bottom") +
scale_x_discrete(labels = NULL)
bx_6 = ggplot(data = datos_tcm_tibble_edadcat) + aes( y = MontoAcum,
x = {datos_tcm_tibble_edadcat$`Reg (1=RM)`%>% as.factor},
color = {datos_tcm_tibble_edadcat$`Reg (1=RM)`%>% as.factor}) +
geom_boxplot() + scale_color_manual(values = mi.palette) +
xlab("Región") + ylab("Monto utilizado TCM 2022") +
theme(legend.title = element_blank(), legend.position = "bottom") +
scale_x_discrete(labels = NULL)
```
```{r echo=FALSE, out.width="100%", fig.align='center', warning=FALSE, message=FALSE, fig.cap="Box-Plot categorías vs monto acumulado", fig.height=3}
bx_4 + bx_5 + bx_6
```
Según el análisis, hay evidencia para rechazar la hipótesis solamente para la frecuencia del uso de la tarjeta en función de la edad.
# 3 Conclusión
Obtuvimos que
\begin{enumerate}
\item No tenemos evidencia suficiente para concluir que el porcentaje de uso de la tarjeta ha disminuido. De todas maneras, creemos que en este caso podemos relajar el nivel de significancia y declarar que hay evidencia.
\item Sí tenemos evidencia estadística para declarar que el comité de promociones ha focalizado apropiadamente las ofertas.
\item En cuanto a la acusación al área de fidelización, obtenemos que no existe evidencia estadística suficiente.
\item En cuanto a los atributos, tenemos evidencia suficiente para decir que la frecuencia de uso de la tarjeta depende de la edad de la persona, por lo que deberíamos focalizar las promociones en los grupos que menos las utilizan
\end{enumerate}
Así, recomendamos a la empresa que ...
```{r}
```