Walmart

Importar bases de datos

file.choose()
## [1] "C:\\Users\\jimen\\Documents\\Ventas market\\Walmartt.Rmd"
stores <- read.csv("C:\\Users\\jimen\\Downloads\\stores.csv")
features <- read.csv("C:\\Users\\jimen\\Downloads\\features.csv")
trains <- read.csv("C:\\Users\\jimen\\Downloads\\train.csv")
test <- read.csv("C:\\Users\\jimen\\Downloads\\test.csv")

Instalar paquetes y llamar librerias

#install.packages("dplyr")
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union

Entender las bases de datos

summary(stores)
##      Store        Type                Size       
##  Min.   : 1   Length:45          Min.   : 34875  
##  1st Qu.:12   Class :character   1st Qu.: 70713  
##  Median :23   Mode  :character   Median :126512  
##  Mean   :23                      Mean   :130288  
##  3rd Qu.:34                      3rd Qu.:202307  
##  Max.   :45                      Max.   :219622
count(stores, Type, sort = TRUE)
##   Type  n
## 1    A 22
## 2    B 17
## 3    C  6
str(stores)
## 'data.frame':    45 obs. of  3 variables:
##  $ Store: int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Type : chr  "A" "A" "B" "A" ...
##  $ Size : int  151315 202307 37392 205863 34875 202505 70713 155078 125833 126512 ...
summary(features)
##      Store        Date             Fuel_Price      MarkDown1     
##  Min.   : 1   Length:8190        Min.   :2.472   Min.   : -2781  
##  1st Qu.:12   Class :character   1st Qu.:3.041   1st Qu.:  1578  
##  Median :23   Mode  :character   Median :3.513   Median :  4744  
##  Mean   :23                      Mean   :3.406   Mean   :  7032  
##  3rd Qu.:34                      3rd Qu.:3.743   3rd Qu.:  8923  
##  Max.   :45                      Max.   :4.468   Max.   :103185  
##                                                  NA's   :4158    
##    MarkDown2           MarkDown3           MarkDown4          MarkDown5       
##  Min.   :  -265.76   Min.   :  -179.26   Min.   :    0.22   Min.   :  -185.2  
##  1st Qu.:    68.88   1st Qu.:     6.60   1st Qu.:  304.69   1st Qu.:  1440.8  
##  Median :   364.57   Median :    36.26   Median : 1176.42   Median :  2727.1  
##  Mean   :  3384.18   Mean   :  1760.10   Mean   : 3292.94   Mean   :  4132.2  
##  3rd Qu.:  2153.35   3rd Qu.:   163.15   3rd Qu.: 3310.01   3rd Qu.:  4832.6  
##  Max.   :104519.54   Max.   :149483.31   Max.   :67474.85   Max.   :771448.1  
##  NA's   :5269        NA's   :4577        NA's   :4726       NA's   :4140      
##       CPI         Unemployment    IsHoliday      
##  Min.   :126.1   Min.   : 3.684   Mode :logical  
##  1st Qu.:132.4   1st Qu.: 6.634   FALSE:7605     
##  Median :182.8   Median : 7.806   TRUE :585      
##  Mean   :172.5   Mean   : 7.827                  
##  3rd Qu.:213.9   3rd Qu.: 8.567                  
##  Max.   :229.0   Max.   :14.313                  
##  NA's   :585     NA's   :585
str(features)
## 'data.frame':    8190 obs. of  11 variables:
##  $ Store       : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ Date        : chr  "05/02/2010" "12/02/2010" "19/02/2010" "26/02/2010" ...
##  $ Fuel_Price  : num  2.57 2.55 2.51 2.56 2.62 ...
##  $ MarkDown1   : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ MarkDown2   : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ MarkDown3   : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ MarkDown4   : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ MarkDown5   : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ CPI         : num  211 211 211 211 211 ...
##  $ Unemployment: num  8.11 8.11 8.11 8.11 8.11 ...
##  $ IsHoliday   : logi  FALSE TRUE FALSE FALSE FALSE FALSE ...
View(features)

Observaciones

  1. ’features” “test” y “train” tiene la fecha como caracter
  2. “Features”, hay NA’s en mas de la mitad de los registros de Markdown (del 1 al 5)
    3 En “features”, hay 585 NA’s en CPI y unemployment y hay 585 registros de IsHoliday = TRUE Tiene relacion? R: sin relacion
    4 “Train” tiene ventas semanales negativas

Herramienta “El generador de Datos”

Paso 1 Definir el area del negocio que buscamos impactar o mejorar su KPI
Paso 2 El departamento de mercadotecnia de las 45 tiendas muestra las 45 tiendas en el indicador de ventas semanales
Vision, segmentacion, personalizacion, contextualizacion
Paso 3 Generar ideas o conceptos especificos
Elaborar un modelos predictivo de ventas semanales
Paso 4 reunir los datos requeridos
Elaborar una base de datos con la variable dependiente (ventas semanales) y las variables independientes
Paso 5 Plan de ejecucion

Mercadotecnia elaborara plan para desplegar modelo predictivo en fases:

Fase 1: Piloto(San Antonio Tx)
Fase 2: Texas
Fase 3: EUA
Sistemas asegurara la captura del Markdown en las bases de datos

Creacion de la base de datos consolidada

Agregar “STORES” a “TRAIN”

bd <- merge(trains, stores, by= "Store")

bd1 <- bd
bd1 <- merge(bd1, features)

Eliminar columnas

bd2 <- bd1
str(bd2)
## 'data.frame':    421570 obs. of  15 variables:
##  $ Store       : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ Date        : chr  "01/04/2011" "01/04/2011" "01/04/2011" "01/04/2011" ...
##  $ IsHoliday   : logi  FALSE FALSE FALSE FALSE FALSE FALSE ...
##  $ Dept        : int  49 26 81 34 59 30 7 85 8 28 ...
##  $ Weekly_Sales: num  13168 5947 28545 9950 317 ...
##  $ Type        : chr  "A" "A" "A" "A" ...
##  $ Size        : int  151315 151315 151315 151315 151315 151315 151315 151315 151315 151315 ...
##  $ Fuel_Price  : num  3.52 3.52 3.52 3.52 3.52 ...
##  $ MarkDown1   : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ MarkDown2   : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ MarkDown3   : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ MarkDown4   : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ MarkDown5   : num  NA NA NA NA NA NA NA NA NA NA ...
##  $ CPI         : num  215 215 215 215 215 ...
##  $ Unemployment: num  7.68 7.68 7.68 7.68 7.68 ...
bd2 <- subset(bd2, select = -c(MarkDown1, MarkDown2, MarkDown3, MarkDown4, MarkDown5))

summary(bd2)
##      Store          Date           IsHoliday            Dept      
##  Min.   : 1.0   Length:421570      Mode :logical   Min.   : 1.00  
##  1st Qu.:11.0   Class :character   FALSE:391909    1st Qu.:18.00  
##  Median :22.0   Mode  :character   TRUE :29661     Median :37.00  
##  Mean   :22.2                                      Mean   :44.26  
##  3rd Qu.:33.0                                      3rd Qu.:74.00  
##  Max.   :45.0                                      Max.   :99.00  
##   Weekly_Sales        Type                Size          Fuel_Price   
##  Min.   : -4989   Length:421570      Min.   : 34875   Min.   :2.472  
##  1st Qu.:  2080   Class :character   1st Qu.: 93638   1st Qu.:2.933  
##  Median :  7612   Mode  :character   Median :140167   Median :3.452  
##  Mean   : 15981                      Mean   :136728   Mean   :3.361  
##  3rd Qu.: 20206                      3rd Qu.:202505   3rd Qu.:3.738  
##  Max.   :693099                      Max.   :219622   Max.   :4.468  
##       CPI         Unemployment   
##  Min.   :126.1   Min.   : 3.879  
##  1st Qu.:132.0   1st Qu.: 6.891  
##  Median :182.3   Median : 7.866  
##  Mean   :171.2   Mean   : 7.960  
##  3rd Qu.:212.4   3rd Qu.: 8.572  
##  Max.   :227.2   Max.   :14.313

Cambiar formato de fecha

bd2$Date <- as.Date(bd2$Date, format = "%d/%m/%Y")

str(bd2)
## 'data.frame':    421570 obs. of  10 variables:
##  $ Store       : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ Date        : Date, format: "2011-04-01" "2011-04-01" ...
##  $ IsHoliday   : logi  FALSE FALSE FALSE FALSE FALSE FALSE ...
##  $ Dept        : int  49 26 81 34 59 30 7 85 8 28 ...
##  $ Weekly_Sales: num  13168 5947 28545 9950 317 ...
##  $ Type        : chr  "A" "A" "A" "A" ...
##  $ Size        : int  151315 151315 151315 151315 151315 151315 151315 151315 151315 151315 ...
##  $ Fuel_Price  : num  3.52 3.52 3.52 3.52 3.52 ...
##  $ CPI         : num  215 215 215 215 215 ...
##  $ Unemployment: num  7.68 7.68 7.68 7.68 7.68 ...
#install.packages("Matrix")
library(Matrix)
#install.packages("wordspace")
library(wordspace)

signcount(bd2$Weekly_Sales)
##    pos   zero    neg 
## 420212     73   1285

Eliminar ventas menores que 0

bd3 <- bd2
bd3 <- bd3[bd3$Weekly_Sales > 0, ]
summary(bd3)
##      Store           Date            IsHoliday            Dept      
##  Min.   : 1.0   Min.   :2010-02-05   Mode :logical   Min.   : 1.00  
##  1st Qu.:11.0   1st Qu.:2010-10-08   FALSE:390652    1st Qu.:18.00  
##  Median :22.0   Median :2011-06-17   TRUE :29560     Median :37.00  
##  Mean   :22.2   Mean   :2011-06-18                   Mean   :44.24  
##  3rd Qu.:33.0   3rd Qu.:2012-02-24                   3rd Qu.:74.00  
##  Max.   :45.0   Max.   :2012-10-26                   Max.   :99.00  
##   Weekly_Sales        Type                Size          Fuel_Price   
##  Min.   :     0   Length:420212      Min.   : 34875   Min.   :2.472  
##  1st Qu.:  2120   Class :character   1st Qu.: 93638   1st Qu.:2.933  
##  Median :  7662   Mode  :character   Median :140167   Median :3.452  
##  Mean   : 16033                      Mean   :136750   Mean   :3.361  
##  3rd Qu.: 20271                      3rd Qu.:202505   3rd Qu.:3.738  
##  Max.   :693099                      Max.   :219622   Max.   :4.468  
##       CPI         Unemployment   
##  Min.   :126.1   Min.   : 3.879  
##  1st Qu.:132.0   1st Qu.: 6.891  
##  Median :182.4   Median : 7.866  
##  Mean   :171.2   Mean   : 7.960  
##  3rd Qu.:212.4   3rd Qu.: 8.567  
##  Max.   :227.2   Max.   :14.313

Agregar numero de la semana

bd4 <- bd3
bd4$week_number <- strftime(bd4$Date, format = "%V")
str(bd4)
## 'data.frame':    420212 obs. of  11 variables:
##  $ Store       : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ Date        : Date, format: "2011-04-01" "2011-04-01" ...
##  $ IsHoliday   : logi  FALSE FALSE FALSE FALSE FALSE FALSE ...
##  $ Dept        : int  49 26 81 34 59 30 7 85 8 28 ...
##  $ Weekly_Sales: num  13168 5947 28545 9950 317 ...
##  $ Type        : chr  "A" "A" "A" "A" ...
##  $ Size        : int  151315 151315 151315 151315 151315 151315 151315 151315 151315 151315 ...
##  $ Fuel_Price  : num  3.52 3.52 3.52 3.52 3.52 ...
##  $ CPI         : num  215 215 215 215 215 ...
##  $ Unemployment: num  7.68 7.68 7.68 7.68 7.68 ...
##  $ week_number : chr  "13" "13" "13" "13" ...
bd4$week_number <- as.integer(bd4$week_number)
str(bd4)
## 'data.frame':    420212 obs. of  11 variables:
##  $ Store       : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ Date        : Date, format: "2011-04-01" "2011-04-01" ...
##  $ IsHoliday   : logi  FALSE FALSE FALSE FALSE FALSE FALSE ...
##  $ Dept        : int  49 26 81 34 59 30 7 85 8 28 ...
##  $ Weekly_Sales: num  13168 5947 28545 9950 317 ...
##  $ Type        : chr  "A" "A" "A" "A" ...
##  $ Size        : int  151315 151315 151315 151315 151315 151315 151315 151315 151315 151315 ...
##  $ Fuel_Price  : num  3.52 3.52 3.52 3.52 3.52 ...
##  $ CPI         : num  215 215 215 215 215 ...
##  $ Unemployment: num  7.68 7.68 7.68 7.68 7.68 ...
##  $ week_number : int  13 13 13 13 13 13 13 13 13 13 ...
summary(bd4)
##      Store           Date            IsHoliday            Dept      
##  Min.   : 1.0   Min.   :2010-02-05   Mode :logical   Min.   : 1.00  
##  1st Qu.:11.0   1st Qu.:2010-10-08   FALSE:390652    1st Qu.:18.00  
##  Median :22.0   Median :2011-06-17   TRUE :29560     Median :37.00  
##  Mean   :22.2   Mean   :2011-06-18                   Mean   :44.24  
##  3rd Qu.:33.0   3rd Qu.:2012-02-24                   3rd Qu.:74.00  
##  Max.   :45.0   Max.   :2012-10-26                   Max.   :99.00  
##   Weekly_Sales        Type                Size          Fuel_Price   
##  Min.   :     0   Length:420212      Min.   : 34875   Min.   :2.472  
##  1st Qu.:  2120   Class :character   1st Qu.: 93638   1st Qu.:2.933  
##  Median :  7662   Mode  :character   Median :140167   Median :3.452  
##  Mean   : 16033                      Mean   :136750   Mean   :3.361  
##  3rd Qu.: 20271                      3rd Qu.:202505   3rd Qu.:3.738  
##  Max.   :693099                      Max.   :219622   Max.   :4.468  
##       CPI         Unemployment     week_number   
##  Min.   :126.1   Min.   : 3.879   Min.   : 1.00  
##  1st Qu.:132.0   1st Qu.: 6.891   1st Qu.:14.00  
##  Median :182.4   Median : 7.866   Median :26.00  
##  Mean   :171.2   Mean   : 7.960   Mean   :25.83  
##  3rd Qu.:212.4   3rd Qu.: 8.567   3rd Qu.:38.00  
##  Max.   :227.2   Max.   :14.313   Max.   :52.00

Separar año, mes y dia

bd5 <- bd4
bd5 <- bd5 %>%  
  dplyr::mutate(year = lubridate::year(Date), 
                month = lubridate::month(Date), 
                day = lubridate::day(Date))

Generar regresion

regresion <- lm(Weekly_Sales ~ Store + Dept + IsHoliday + Type + Size + Fuel_Price + CPI + Unemployment + week_number + year + month + day, data=bd5)
summary(regresion)
## 
## Call:
## lm(formula = Weekly_Sales ~ Store + Dept + IsHoliday + Type + 
##     Size + Fuel_Price + CPI + Unemployment + week_number + year + 
##     month + day, data = bd5)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -34197 -12897  -5854   5629 671564 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)    1.001e+06  2.932e+05   3.413 0.000642 ***
## Store         -1.434e+02  3.059e+00 -46.869  < 2e-16 ***
## Dept           1.108e+02  1.097e+00 101.013  < 2e-16 ***
## IsHolidayTRUE  8.239e+02  1.382e+02   5.961 2.51e-09 ***
## TypeB         -3.346e+02  1.071e+02  -3.126 0.001775 ** 
## TypeC          5.851e+03  1.838e+02  31.827  < 2e-16 ***
## Size           9.909e-02  9.561e-04 103.637  < 2e-16 ***
## Fuel_Price     4.829e+02  1.480e+02   3.263 0.001101 ** 
## CPI           -2.306e+01  9.808e-01 -23.516  < 2e-16 ***
## Unemployment  -2.467e+02  2.021e+01 -12.207  < 2e-16 ***
## week_number    5.533e+02  4.395e+02   1.259 0.208131    
## year          -4.946e+02  1.452e+02  -3.407 0.000656 ***
## month         -2.229e+03  1.913e+03  -1.165 0.243950    
## day           -9.725e+01  6.292e+01  -1.545 0.122239    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 21690 on 420198 degrees of freedom
## Multiple R-squared:  0.08981,    Adjusted R-squared:  0.08978 
## F-statistic:  3189 on 13 and 420198 DF,  p-value: < 2.2e-16

Construir un modelo de prediccion

datos_nuevos <- data.frame(Store=1, IsHoliday= TRUE, Dept=1, Type="A", Size= 151315, week_number =1, Temperature = 59.17, Fuel_Price = 3.524, CPI= 214.8372, Unemployment = 7.682, year =2012, month = 1, day=1)

predict(regresion,datos_nuevos)
##        1 
## 14492.64

Graficas/span>

plot(bd5$week_number,bd5$Weekly_Sales, main="Numero de semana donde se vende mas", xlab="week_number", ylab="Weekly_Sales")

plot(bd5$Dept,bd5$Weekly_Sales, main="Departamento donde se vende mas", xlab="Dept", ylab="Weekly_Sales")

plot(bd5$Store,bd5$Weekly_Sales, main="Tienda donde se vende mas", xlab="Store", ylab="Weekly_Sales")

Propuestas

Despues de haber realizado tres graficas donde veiamos cual seria el departamento, la tienda y la semana donde se vende mas se llega a la conclusion que es la tienda numero 10, las ultimas semanas del año y el departamento numero 72.

Por lo tanto la propuesta sin mayor analisis que me gustaria dar seria enfocarnos en esa tienda a final de año y en ese departamento en especifico ya sea haciendo ofertas como 2 x 1 para duplicar la ya gran existente venta.

Por otro lado tambien podriamos ver los puntos mas bajos de estas graficas para ver de que manera podriamos implementar tacticas para atraer a mas consumidores a ellas.

Conclusion

A lo largo de este trabajo estuvimos analizando el comportamiento de las ventas de Walmart en casos especificos y esto primeramente comenzando por buscar las areas donde quisieramos lograr un mayor impacto alrededor de todo Estados Unidos con las 45 tiendas con las que cuenta. Para enfocarnos de poco a poco, dividimos el proceso en 3 fases y enfocandonos mayormente en Texas para el proceso Piloto.
Los puntos claves de este analisis se pueden enlistar como la creacion de la base de datos consolidada; donde usamos la funcion de (merge) para crear una sola base de datos donde se encontrara todo lo necesario para mejorar el manejo de los datos, y la realizacion de una regresion lineal para predecir el comportamiento de estas ventas a partir de los datos con los que ya contabamos.